diff --git a/res/values-sw580dp-w720dp/styles.xml b/res/values-sw580dp-w720dp/styles.xml
index 3b7ed4e..fc2b3be 100644
--- a/res/values-sw580dp-w720dp/styles.xml
+++ b/res/values-sw580dp-w720dp/styles.xml
@@ -37,7 +37,6 @@
         <item name="list_item_header_text_color">?color/section_header_text_color</item>
         <item name="list_item_header_text_size">14sp</item>
         <item name="contact_filter_popup_width">320dip</item>
-        <item name="show_home_icon">true</item>
     </style>
 
     <style name="ContactDetailHeaderTextView">
diff --git a/res/values-sw580dp/donottranslate_config.xml b/res/values-sw580dp/donottranslate_config.xml
index 5ca1af6..9841fd5 100644
--- a/res/values-sw580dp/donottranslate_config.xml
+++ b/res/values-sw580dp/donottranslate_config.xml
@@ -20,4 +20,5 @@
 <resources>
     <bool name="config_use_two_panes">true</bool>
     <bool name="always_show_search_view">true</bool>
+    <bool name="show_home_icon">true</bool>
 </resources>
diff --git a/res/values-sw580dp/styles.xml b/res/values-sw580dp/styles.xml
index 4f2b073..7e928b7 100644
--- a/res/values-sw580dp/styles.xml
+++ b/res/values-sw580dp/styles.xml
@@ -37,7 +37,6 @@
         <item name="list_item_header_text_color">?color/section_header_text_color</item>
         <item name="list_item_header_text_size">14sp</item>
         <item name="contact_filter_popup_width">320dip</item>
-        <item name="show_home_icon">true</item>
     </style>
 
     <style name="ContactPickerTheme" parent="@android:Theme.Holo.Light.Dialog">
diff --git a/res/values/donottranslate_config.xml b/res/values/donottranslate_config.xml
index c778212..3447392 100644
--- a/res/values/donottranslate_config.xml
+++ b/res/values/donottranslate_config.xml
@@ -107,4 +107,7 @@
     <!-- 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>
+
+    <!-- If true, the "home" icon on the action bar will be shown. -->
+    <bool name="show_home_icon">false</bool>
 </resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 8fdccfc..050ee59 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -132,11 +132,6 @@
         <attr name="list_item_header_text_size" format="dimension" />
     </declare-styleable>
 
-    <!-- This style defines visibility of the action bar home icon -->
-    <declare-styleable name="ActionBarHomeIcon">
-        <attr name="show_home_icon" format="boolean"/>
-    </declare-styleable>
-
     <declare-styleable name="CallDetailActivity">
         <attr name="call_detail_transparent_background" format="color" />
         <attr name="call_detail_contact_background_height" format="dimension" />
@@ -183,7 +178,6 @@
         <item name="list_item_header_text_color">?color/section_header_text_color</item>
         <item name="list_item_header_text_size">14sp</item>
         <item name="contact_filter_popup_width">320dip</item>
-        <item name="show_home_icon">false</item>
     </style>
 
     <!-- TODO: Clean up this file so themes aren't copied. -->
diff --git a/src/com/android/contacts/activities/ActionBarAdapter.java b/src/com/android/contacts/activities/ActionBarAdapter.java
index 0072592..03e96c4 100644
--- a/src/com/android/contacts/activities/ActionBarAdapter.java
+++ b/src/com/android/contacts/activities/ActionBarAdapter.java
@@ -71,6 +71,8 @@
     private final ActionBar mActionBar;
     private final MyTabListener mTabListener = new MyTabListener();
 
+    private boolean mShowHomeIcon;
+
     public enum TabState {
         FAVORITES, ALL, GROUPS;
 
@@ -96,6 +98,8 @@
         mSearchLabelText = mContext.getString(R.string.search_label);
         mAlwaysShowSearchView = mContext.getResources().getBoolean(R.bool.always_show_search_view);
 
+        mShowHomeIcon = mContext.getResources().getBoolean(R.bool.show_home_icon);
+
         // Set up search view.
         View customSearchView = LayoutInflater.from(mContext).inflate(R.layout.custom_action_bar,
                 null);
@@ -112,14 +116,7 @@
         mSearchView.setQuery(mQueryString, false);
         mActionBar.setCustomView(customSearchView, layoutParams);
 
-        mActionBar.setDisplayShowTitleEnabled(true);
-
-        // TODO Just use a boolean resource instead of styles.
-        TypedArray array = mContext.obtainStyledAttributes(null, R.styleable.ActionBarHomeIcon);
-        boolean showHomeIcon = array.getBoolean(R.styleable.ActionBarHomeIcon_show_home_icon, true);
-        array.recycle();
-        mActionBar.setDisplayShowHomeEnabled(showHomeIcon);
-
+        // Set up tabs
         addTab(TabState.FAVORITES, mContext.getString(R.string.contactsFavoritesLabel));
         addTab(TabState.ALL, mContext.getString(R.string.contactsAllLabel));
         addTab(TabState.GROUPS, mContext.getString(R.string.contactsGroupsLabel));
@@ -229,9 +226,45 @@
         }
     }
 
+    /** @return true if the "UP" icon is showing. */
+    public boolean isUpShowing() {
+        return mSearchMode; // Only shown on the search mode.
+    }
+
+    private void updateDisplayOptions() {
+        // All the flags we may change in this method.
+        final int MASK = ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_HOME
+                | ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_DISABLE_HOME
+                | ActionBar.DISPLAY_SHOW_CUSTOM;
+
+        // The current flags set to the action bar.  (only the ones that we may change here)
+        final int current = mActionBar.getDisplayOptions() & MASK;
+
+        // Build the new flags...
+        int newFlags = 0;
+        newFlags |= ActionBar.DISPLAY_SHOW_TITLE;
+        if (mShowHomeIcon) {
+            newFlags |= ActionBar.DISPLAY_SHOW_HOME;
+        }
+        if (mSearchMode) {
+            newFlags |= ActionBar.DISPLAY_SHOW_HOME;
+            newFlags |= ActionBar.DISPLAY_HOME_AS_UP;
+            newFlags |= ActionBar.DISPLAY_SHOW_CUSTOM;
+        } else {
+            newFlags |= ActionBar.DISPLAY_DISABLE_HOME;
+            if (mAlwaysShowSearchView) {
+                newFlags |= ActionBar.DISPLAY_SHOW_CUSTOM;
+            }
+        }
+
+        if (current != newFlags) {
+            // Pass the mask here to preserve other flags that we're not interested here.
+            mActionBar.setDisplayOptions(newFlags, MASK);
+        }
+    }
+
     private void update() {
         if (mSearchMode) {
-            mActionBar.setDisplayShowCustomEnabled(true);
             if (mAlwaysShowSearchView) {
                 // Tablet -- change the app title for the search mode
                 mActionBar.setTitle(mSearchLabelText);
@@ -246,7 +279,6 @@
                 mListener.onAction(Action.START_SEARCH_MODE);
             }
         } else {
-            mActionBar.setDisplayShowCustomEnabled(mAlwaysShowSearchView);
             if (mActionBar.getNavigationMode() != ActionBar.NAVIGATION_MODE_TABS) {
                 // setNavigationMode will trigger onTabSelected() with the tab which was previously
                 // selected.
@@ -267,6 +299,7 @@
                 mListener.onSelectedTabChanged();
             }
         }
+        updateDisplayOptions();
     }
 
     @Override
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 500ad1e..b0844e9 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -1179,6 +1179,14 @@
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {
+            case android.R.id.home: {
+                // The home icon on the action bar is pressed
+                if (mActionBarAdapter.isUpShowing()) {
+                    // "UP" icon press -- should be treated as "back".
+                    onBackPressed();
+                }
+                return true;
+            }
             case R.id.menu_settings: {
                 final Intent intent = new Intent(this, ContactsPreferenceActivity.class);
                 startActivity(intent);
