diff --git a/res/layout/custom_action_bar.xml b/res/layout/custom_action_bar.xml
index 2357756..f749586 100644
--- a/res/layout/custom_action_bar.xml
+++ b/res/layout/custom_action_bar.xml
@@ -14,11 +14,20 @@
      limitations under the License.
 -->
 
+<!-- Dimensions are set at runtime in ActionBarAdapter -->
 <FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent" >
+    android:layout_width="0dip"
+    android:layout_height="0dip" >
 
+    <!-- To prevent the search view from getting the initial focus.  -->
+    <View
+        android:focusable="true"
+        android:focusableInTouchMode="true"
+        android:layout_width="1px"
+        android:layout_height="1px" >
+        <requestFocus />
+    </View>
     <SearchView
         android:id="@+id/search_view"
         android:layout_width="match_parent"
diff --git a/res/menu-sw580dp-w720dp/actions.xml b/res/menu-sw580dp-w720dp/actions.xml
index 081065c..d87b091 100644
--- a/res/menu-sw580dp-w720dp/actions.xml
+++ b/res/menu-sw580dp-w720dp/actions.xml
@@ -15,11 +15,6 @@
 -->
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
     <item
-        android:id="@+id/menu_search"
-        android:showAsAction="always"
-        android:actionViewClass="android.widget.SearchView" />
-
-    <item
         android:id="@+id/menu_add_contact"
         android:icon="@drawable/ic_menu_add_contact_holo_light"
         android:title="@string/menu_new_contact_action_bar"
diff --git a/res/menu-sw580dp/actions.xml b/res/menu-sw580dp/actions.xml
index 1d955c1..fea883e 100644
--- a/res/menu-sw580dp/actions.xml
+++ b/res/menu-sw580dp/actions.xml
@@ -15,11 +15,6 @@
 -->
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
     <item
-        android:id="@+id/menu_search"
-        android:showAsAction="always"
-        android:actionViewClass="android.widget.SearchView" />
-
-    <item
         android:id="@+id/menu_add_contact"
         android:icon="@drawable/ic_menu_add_contact_holo_light"
         android:title="@string/menu_new_contact_action_bar"
diff --git a/res/values-sw580dp/dimens.xml b/res/values-sw580dp/dimens.xml
index 0c1e5fb..bcaf1d2 100644
--- a/res/values-sw580dp/dimens.xml
+++ b/res/values-sw580dp/dimens.xml
@@ -33,4 +33,5 @@
     <dimen name="list_section_height">37dip</dimen>
     <dimen name="directory_header_height">56dip</dimen>
     <dimen name="detail_tab_carousel_height">256dip</dimen>
+    <dimen name="search_view_width">400dip</dimen>
 </resources>
diff --git a/res/values-sw580dp/donottranslate_config.xml b/res/values-sw580dp/donottranslate_config.xml
index fcb7da9..5ca1af6 100644
--- a/res/values-sw580dp/donottranslate_config.xml
+++ b/res/values-sw580dp/donottranslate_config.xml
@@ -19,4 +19,5 @@
 
 <resources>
     <bool name="config_use_two_panes">true</bool>
+    <bool name="always_show_search_view">true</bool>
 </resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index a0c4845..948d357 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -148,7 +148,7 @@
     <!-- Spacing on the left the search field in the action bar -->
     <dimen name="action_bar_search_spacing">12dip</dimen>
 
-    <!-- Size of the shortcut icon. 0dip means: use the system default -->    
+    <!-- Size of the shortcut icon. 0dip means: use the system default -->
     <dimen name="shortcut_icon_size">0dip</dimen>
 
     <!-- Height of list sections (A, B, C) that show the first character of the contacts -->
@@ -181,4 +181,7 @@
     <dimen name="dialpad_digits_margin_top">1dip</dimen>
     <!-- Just used in landscape mode -->
     <dimen name="dialpad_digits_margin_bottom">50dip</dimen>
+
+    <!-- Width of search view in action bar.  Use 0dip for MATCH_PARENT -->
+    <dimen name="search_view_width">0dip</dimen>
 </resources>
diff --git a/res/values/donottranslate_config.xml b/res/values/donottranslate_config.xml
index e310953..c778212 100644
--- a/res/values/donottranslate_config.xml
+++ b/res/values/donottranslate_config.xml
@@ -103,4 +103,8 @@
     <!-- If true, Contacts uses two panes: List and Detail. If false, Details are
          shown in their own screens. This flag must be in sync with the layout definitions. -->
     <bool name="config_use_two_panes">false</bool>
+
+    <!-- If true, search view on action bar will always be visible.  If false, it'll only be
+         visible in search mode.  -->
+    <bool name="always_show_search_view">false</bool>
 </resources>
diff --git a/src/com/android/contacts/activities/ActionBarAdapter.java b/src/com/android/contacts/activities/ActionBarAdapter.java
index 073f665..e0f8aef 100644
--- a/src/com/android/contacts/activities/ActionBarAdapter.java
+++ b/src/com/android/contacts/activities/ActionBarAdapter.java
@@ -58,27 +58,24 @@
     private SearchView mSearchView;
 
     private final Context mContext;
+    private final boolean mAlwaysShowSearchView;
 
     private Listener mListener;
     private ContactListFilterController mFilterController;
 
     private ActionBar mActionBar;
 
-    private View mCustomSearchView;
-    private LayoutParams mLayoutParams;
-    private boolean mIsSearchInOverflowMenu;
 
     public ActionBarAdapter(Context context, Listener listener) {
         mContext = context;
         mListener = listener;
         mSearchLabelText = mContext.getString(R.string.search_label);
+        mAlwaysShowSearchView = mContext.getResources().getBoolean(R.bool.always_show_search_view);
     }
 
-    public void onCreate(Bundle savedState, ContactsRequest request, ActionBar actionBar,
-            boolean searchInOverflowMenu) {
+    public void onCreate(Bundle savedState, ContactsRequest request, ActionBar actionBar) {
         mActionBar = actionBar;
         mQueryString = null;
-        mIsSearchInOverflowMenu = searchInOverflowMenu;
 
         if (savedState != null) {
             mSearchMode = savedState.getBoolean(EXTRA_KEY_SEARCH_MODE);
@@ -88,18 +85,23 @@
             mQueryString = request.getQueryString();
         }
 
-        if (mSearchView != null) {
-            mSearchView.setQuery(mQueryString, false);
+        // Set up search view.
+        View customSearchView = LayoutInflater.from(mContext).inflate(R.layout.custom_action_bar,
+                null);
+        int searchViewWidth = mContext.getResources().getDimensionPixelSize(
+                R.dimen.search_view_width);
+        if (searchViewWidth == 0) {
+            searchViewWidth = LayoutParams.MATCH_PARENT;
         }
-
-        update();
-    }
-
-    public void setSearchView(SearchView searchView) {
-        mSearchView = searchView;
+        LayoutParams layoutParams = new LayoutParams(searchViewWidth, LayoutParams.WRAP_CONTENT);
+        mSearchView = (SearchView) customSearchView.findViewById(R.id.search_view);
+        mSearchView.setQueryHint(mContext.getString(R.string.hint_findContacts));
         mSearchView.setOnQueryTextListener(this);
         mSearchView.setOnCloseListener(this);
         mSearchView.setQuery(mQueryString, false);
+        mActionBar.setCustomView(customSearchView, layoutParams);
+
+        update();
     }
 
     public void setListener(Listener listener) {
@@ -111,10 +113,6 @@
         mFilterController.addListener(this);
     }
 
-    public boolean isSearchInOverflowMenu() {
-        return mIsSearchInOverflowMenu;
-    }
-
     public boolean isSearchMode() {
         return mSearchMode;
     }
@@ -127,7 +125,7 @@
                 return;
             }
             if (mSearchMode) {
-                mSearchView.requestFocus();
+                setFocusOnSearchView();
             } else {
                 mSearchView.setQuery(null, false);
             }
@@ -147,31 +145,20 @@
 
     public void update() {
         if (mSearchMode) {
-            // If the search icon was in the overflow menu, then inflate a custom view containing
-            // a search view for the action bar (and hide the tabs).
-            if (mIsSearchInOverflowMenu) {
-                if (mCustomSearchView == null) {
-                    mCustomSearchView = LayoutInflater.from(mContext).inflate(
-                            R.layout.custom_action_bar, null);
-                    mLayoutParams = new LayoutParams(LayoutParams.MATCH_PARENT,
-                            LayoutParams.WRAP_CONTENT);
-                    SearchView searchView = (SearchView) mCustomSearchView.
-                            findViewById(R.id.search_view);
-                    searchView.setQueryHint(mContext.getString(R.string.hint_findContacts));
-                    setSearchView(searchView);
-                }
-                mActionBar.setDisplayShowCustomEnabled(true);
-                mActionBar.setCustomView(mCustomSearchView, mLayoutParams);
-                mSearchView.requestFocus();
-            } else {
+            mActionBar.setDisplayShowCustomEnabled(true);
+            if (mAlwaysShowSearchView) {
+                // Tablet -- change the app title for the search mode
                 mActionBar.setTitle(mSearchLabelText);
+            } else {
+                // Phone -- search view gets focus
+                setFocusOnSearchView();
             }
             mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
             if (mListener != null) {
                 mListener.onAction(Action.START_SEARCH_MODE);
             }
         } else {
-            mActionBar.setDisplayShowCustomEnabled(false);
+            mActionBar.setDisplayShowCustomEnabled(mAlwaysShowSearchView);
             mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
             mActionBar.setTitle(null);
             if (mListener != null) {
@@ -236,4 +223,9 @@
     @Override
     public void onContactListFilterCustomizationRequest() {
     }
+
+    private void setFocusOnSearchView() {
+        mSearchView.requestFocus();
+        mSearchView.setIconified(false); // Workaround for the "IME not popping up" issue.
+    }
 }
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index d5bdd61..ad66956 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -303,7 +303,7 @@
         setTitle(mRequest.getActivityTitle());
         ActionBar actionBar = getActionBar();
         mActionBarAdapter = new ActionBarAdapter(this, this);
-        mActionBarAdapter.onCreate(savedState, mRequest, getActionBar(), !mContentPaneDisplayed);
+        mActionBarAdapter.onCreate(savedState, mRequest, getActionBar());
         mActionBarAdapter.setContactListFilterController(mContactListFilterController);
 
         ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
@@ -935,16 +935,6 @@
 
         MenuInflater inflater = getMenuInflater();
         inflater.inflate(R.menu.actions, menu);
-        MenuItem searchMenuItem = menu.findItem(R.id.menu_search);
-        if (searchMenuItem != null && searchMenuItem.getActionView() instanceof SearchView) {
-            SearchView searchView = (SearchView) searchMenuItem.getActionView();
-            searchView.setQueryHint(getString(R.string.hint_findContacts));
-            searchView.setIconifiedByDefault(false);
-
-            if (mActionBarAdapter != null) {
-                mActionBarAdapter.setSearchView(searchView);
-            }
-        }
 
         // On narrow screens we specify a NEW group button in the {@link ActionBar}, so that
         // it can be in the overflow menu. On wide screens, we use a custom view because we need
@@ -1009,10 +999,8 @@
         if (mActionBarAdapter.isSearchMode()) {
             addContactMenu.setVisible(false);
             addGroupMenu.setVisible(false);
-            // If search is normally in the overflow menu, when we are in search
-            // mode, hide this option.
-            if (mActionBarAdapter.isSearchInOverflowMenu()) {
-                searchMenu.setVisible(false);
+            if (searchMenu != null) {
+                searchMenu.setVisible(false); // Don't show the search menu in search mode.
             }
         } else {
             switch (mSelectedTab) {
