diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 586a8b1..345a822 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -129,9 +129,6 @@
 
     private static final String ENABLE_DEBUG_OPTIONS_HIDDEN_CODE = "debug debug!";
 
-    // These values needs to start at 2. See {@link ContactEntryListFragment}.
-    private static final int SUBACTIVITY_ACCOUNT_FILTER = 2;
-
     private final DialogManager mDialogManager = new DialogManager(this);
 
     private ContactsIntentResolver mIntentResolver;
@@ -584,7 +581,7 @@
             return;
         }
 
-        mAllFragment.setFilter(mContactListFilterController.getFilter());
+        setFilterAndUpdateTitle(mContactListFilterController.getFilter());
 
         invalidateOptionsMenuIfNeeded();
     }
@@ -881,7 +878,7 @@
             mAllFragment.setSelectedContactUri(contactUri);
         }
 
-        mAllFragment.setFilter(mContactListFilterController.getFilter());
+        setFilterAndUpdateTitle(mContactListFilterController.getFilter());
         setQueryTextToFragment(mActionBarAdapter.getQueryString());
 
         if (mRequest.isDirectorySearchEnabled()) {
@@ -893,7 +890,7 @@
 
     private void configureContactListFragment() {
         // Filter may be changed when this Activity is in background.
-        mAllFragment.setFilter(mContactListFilterController.getFilter());
+        setFilterAndUpdateTitle(mContactListFilterController.getFilter());
 
         mAllFragment.setVerticalScrollbarPosition(getScrollBarPosition());
         mAllFragment.setSelectionVisible(false);
@@ -1056,11 +1053,11 @@
                     && currentFilter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
                 filter = ContactListFilter.createFilterWithType(
                         ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS);
-                mAllFragment.setFilter(filter);
+                setFilterAndUpdateTitle(filter);
             } else {
                 filter = ContactListFilter.createFilterWithType(
                         ContactListFilter.FILTER_TYPE_SINGLE_CONTACT);
-                mAllFragment.setFilter(filter, false);
+                setFilterAndUpdateTitle(filter, /* restoreSelectedUri */ false);
             }
             mContactListFilterController.setContactListFilter(filter, true);
         }
@@ -1330,12 +1327,6 @@
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         switch (requestCode) {
-            case SUBACTIVITY_ACCOUNT_FILTER: {
-                AccountFilterUtil.handleAccountFilterResult(
-                        mContactListFilterController, resultCode, data);
-                break;
-            }
-
             // TODO: Using the new startActivityWithResultFromFragment API this should not be needed
             // anymore
             case ContactEntryListFragment.ACTIVITY_REQUEST_CODE_PICKER:
@@ -1465,4 +1456,17 @@
         }
         return position;
     }
+
+    private void setFilterAndUpdateTitle(ContactListFilter filter) {
+        setFilterAndUpdateTitle(filter, true);
+    }
+
+    private void setFilterAndUpdateTitle(ContactListFilter filter, boolean restoreSelectedUri) {
+        mAllFragment.setFilter(filter, restoreSelectedUri);
+        if (getSupportActionBar() != null) {
+            final String actionBarTitle = TextUtils.isEmpty(filter.accountName) ?
+                    getString(R.string.contactsList) : filter.accountName;
+            getSupportActionBar().setTitle(actionBarTitle);
+        }
+    }
 }
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index db41ad7..2ce22c0 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -99,8 +99,6 @@
     protected void onCreateView(LayoutInflater inflater, ViewGroup container) {
         super.onCreateView(inflater, container);
 
-        mAccountFilterHeader = getView().findViewById(R.id.account_filter_header_container);
-
         // Create an empty user profile header and hide it for now (it will be visible if the
         // contacts list will have no user profile).
         addEmptyUserProfileHeader(inflater);
@@ -133,8 +131,6 @@
     }
 
     private void checkHeaderViewVisibility() {
-        updateFilterHeaderView();
-
         // Hide the search header by default.
         if (mSearchHeaderView != null) {
             mSearchHeaderView.setVisibility(View.GONE);
@@ -142,26 +138,6 @@
     }
 
     @Override
-    public void setFilter(ContactListFilter filter) {
-        super.setFilter(filter);
-        updateFilterHeaderView();
-    }
-
-    private void updateFilterHeaderView() {
-        if (mAccountFilterHeader == null) {
-            return; // Before onCreateView -- just ignore it.
-        }
-        final ContactListFilter filter = getFilter();
-        if (filter != null && !isSearchMode()) {
-            final boolean shouldShowHeader = AccountFilterUtil.updateAccountFilterTitleForPeople(
-                    mAccountFilterHeader, filter, false);
-            mAccountFilterHeader.setVisibility(shouldShowHeader ? View.VISIBLE : View.GONE);
-        } else {
-            mAccountFilterHeader.setVisibility(View.GONE);
-        }
-    }
-
-    @Override
     protected void setProfileHeader() {
         mUserProfileExists = getAdapter().hasProfile();
         showEmptyUserProfile(!mUserProfileExists && !isSearchMode());
