diff --git a/res/drawable/side_nav_bar.xml b/res/drawable/side_nav_bar.xml
deleted file mode 100644
index b67bfb5..0000000
--- a/res/drawable/side_nav_bar.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
-       android:shape="rectangle">
-    <gradient
-        android:angle="135"
-        android:endColor="@color/primary_color_dark"
-        android:startColor="@color/primary_color"
-        android:type="linear"/>
-</shape>
\ No newline at end of file
diff --git a/res/layout/nav_header_main.xml b/res/layout/nav_header_main.xml
index cd6d559..37a33f4 100644
--- a/res/layout/nav_header_main.xml
+++ b/res/layout/nav_header_main.xml
@@ -20,7 +20,7 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="@dimen/nav_header_height"
-    android:background="@drawable/side_nav_bar"
+    android:background="@color/contacts_accent_color"
     android:gravity="bottom"
     android:orientation="vertical"
     android:paddingBottom="@dimen/nav_activity_vertical_margin"
diff --git a/res/menu/activity_main_drawer.xml b/res/menu/activity_main_drawer.xml
index 2a69763..75277af 100644
--- a/res/menu/activity_main_drawer.xml
+++ b/res/menu/activity_main_drawer.xml
@@ -20,13 +20,9 @@
 
     <group android:id="@+id/nav_utilities">
         <item
-            android:id="@+id/nav_contacts_filter"
+            android:id="@+id/nav_all_contacts"
             android:icon="@drawable/ic_menu_filter"
-            android:title="@string/menu_contacts_filter" />
-        <item
-            android:id="@+id/nav_import_export"
-            android:icon="@drawable/ic_menu_import_export"
-            android:title="@string/menu_import_export"/>
+            android:title="@string/contactsList" />
         <item
             android:id="@+id/nav_blocked_numbers"
             android:icon="@drawable/ic_menu_blocked_numbers"
@@ -37,12 +33,40 @@
             android:title="@string/menu_duplicates"/>
     </group>
 
+    <group android:id="@+id/groups">
+        <item
+            android:id="@+id/nav_groups"
+            android:title="@string/menu_title_groups">
+            <menu/>
+        </item>
+    </group>
+
+    <group android:id="@+id/create_groups">
+        <item
+            android:id="@+id/nav_create_groups"
+            android:icon="@drawable/ic_menu_group_add"
+            android:title="@string/menu_new_group_action_bar"
+            android:visible="false"/>
+    </group>
+
+    <group android:id="@+id/filters">
+        <item
+            android:id="@+id/nav_filters"
+            android:title="@string/menu_title_filters">
+            <menu/>
+        </item>
+    </group>
+
     <group android:id="@+id/nav_misc">
         <item
             android:id="@+id/nav_settings"
             android:icon="@drawable/ic_menu_settings"
             android:title="@string/menu_settings"/>
         <item
+            android:id="@+id/nav_import_export"
+            android:icon="@drawable/ic_menu_import_export"
+            android:title="@string/menu_import_export"/>
+        <item
             android:id="@+id/nav_help"
             android:icon="@drawable/ic_menu_help"
             android:title="@string/menu_help"/>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index c429ec9..f60670c 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -291,8 +291,8 @@
     <!-- Top margin for "Saving to" account header text field. -->
     <dimen name="compact_editor_account_header_top_margin">3dp</dimen>
 
-    <!-- Navigation drawer header height, per the Android Design guidelines. -->
-    <dimen name="nav_header_height">160dp</dimen>
+    <!-- Navigation drawer header height, the same as the status bar in landscape and portrait modes -->
+    <dimen name="nav_header_height">24dp</dimen>
 
     <!-- Navigation drawer margins, per the Android Design guidelines. -->
     <dimen name="nav_activity_horizontal_margin">16dp</dimen>
diff --git a/res/values/ids.xml b/res/values/ids.xml
index b0470b5..f5649d9 100644
--- a/res/values/ids.xml
+++ b/res/values/ids.xml
@@ -48,8 +48,8 @@
     <item type="id" name="nav_misc" />
 
     <!-- Menu group ID for the contact groups -->
-    <item type="id" name="nav_groups" />
+    <item type="id" name="nav_groups_items" />
 
-    <!-- Menu group ID for "create new group" -->
-    <item type="id" name="nav_create_groups" />
+    <!-- Menu group ID for the contact filters -->
+    <item type="id" name="nav_filters_items" />
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2e1b857..829671f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -928,4 +928,10 @@
 
     <!-- Close drawer content descriptions [CHAR LIMIT=40] -->
     <string name="navigation_drawer_close">Close navigation drawer</string>
+
+    <!-- Menu section title of "labels" [CHAR LIMIT=20] -->
+    <string name="menu_title_groups">Labels</string>
+
+    <!-- Menu section title of "accounts" [CHAR LIMIT=20] -->
+    <string name="menu_title_filters">Accounts</string>
 </resources>
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index c1a3018..9ac37bb 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -25,6 +25,8 @@
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
+import android.graphics.Color;
+import android.graphics.PorterDuff;
 import android.graphics.Rect;
 import android.net.Uri;
 import android.os.Bundle;
@@ -39,6 +41,7 @@
 import android.support.v4.view.ViewPager;
 import android.support.v4.widget.DrawerLayout;
 import android.support.v7.app.ActionBarDrawerToggle;
+import android.support.v7.app.AppCompatActivity;
 import android.support.v7.widget.Toolbar;
 import android.telecom.TelecomManager;
 import android.text.TextUtils;
@@ -48,6 +51,7 @@
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
+import android.view.SubMenu;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ImageButton;
@@ -61,6 +65,7 @@
 import com.android.contacts.common.compat.BlockedNumberContractCompat;
 import com.android.contacts.common.compat.TelecomManagerUtil;
 import com.android.contacts.common.interactions.ImportExportDialogFragment;
+import com.android.contacts.common.list.AccountFilterActivity;
 import com.android.contacts.common.list.ContactEntryListFragment;
 import com.android.contacts.common.list.ContactListFilter;
 import com.android.contacts.common.list.ContactListFilterController;
@@ -79,6 +84,8 @@
 import com.android.contacts.group.GroupUtil;
 import com.android.contacts.group.GroupsFragment;
 import com.android.contacts.group.GroupsFragment.GroupsListener;
+import com.android.contacts.interactions.AccountFiltersFragment;
+import com.android.contacts.interactions.AccountFiltersFragment.AccountFiltersListener;
 import com.android.contacts.interactions.ContactDeletionInteraction;
 import com.android.contacts.interactions.ContactMultiDeletionInteraction;
 import com.android.contacts.interactions.ContactMultiDeletionInteraction.MultiContactDeleteListener;
@@ -109,6 +116,7 @@
 public class PeopleActivity extends AppCompatContactsActivity implements
         View.OnCreateContextMenuListener,
         View.OnClickListener,
+        AccountFiltersListener,
         ActionBarAdapter.Listener,
         DialogManager.DialogShowingViewActivity,
         ContactListFilterController.ContactListFilterListener,
@@ -148,6 +156,7 @@
      */
     private MultiSelectContactsListFragment mAllFragment;
     private GroupsFragment mGroupsFragment;
+    private AccountFiltersFragment mAccountFiltersFragment;
 
     /** ViewPager for swipe */
     private ViewPager mTabPager;
@@ -360,6 +369,7 @@
 
         final String ALL_TAG = "tab-pager-all";
         final String GROUPS_TAG = "groups";
+        final String FILTERS_TAG = "filters";
 
         // Create the fragments and add as children of the view pager.
         // The pager adapter will only change the visibility; it'll never create/destroy
@@ -371,6 +381,8 @@
                 fragmentManager.findFragmentByTag(ALL_TAG);
         mGroupsFragment = (GroupsFragment)
                 fragmentManager.findFragmentByTag(GROUPS_TAG);
+        mAccountFiltersFragment = (AccountFiltersFragment)
+                fragmentManager.findFragmentByTag(FILTERS_TAG);
 
         if (mAllFragment == null) {
             mAllFragment = new MultiSelectContactsListFragment();
@@ -380,6 +392,9 @@
                 mGroupsFragment = new GroupsFragment();
                 transaction.add(mGroupsFragment, GROUPS_TAG);
             }
+
+            mAccountFiltersFragment = new AccountFiltersFragment();
+            transaction.add(mAccountFiltersFragment, FILTERS_TAG);
         }
 
         mAllFragment.setOnContactListActionListener(new ContactBrowserActionListener());
@@ -389,6 +404,8 @@
             mGroupsFragment.setListener(this);
         }
 
+        mAccountFiltersFragment.setListener(this);
+
         // Hide all fragments for now.  We adjust visibility when we get onSelectedTabChanged()
         // from ActionBarAdapter.
         transaction.hide(mAllFragment);
@@ -894,43 +911,56 @@
 
     @Override
     public void onGroupsLoaded(List<GroupListItem> groupListItems) {
-        // Clear previously added groups
         final Menu menu = mNavigationView.getMenu();
-        menu.removeGroup(R.id.nav_groups);
+        final MenuItem groupsMenuItem = menu.findItem(R.id.nav_groups);
+        final SubMenu subMenu = groupsMenuItem.getSubMenu();
+        subMenu.removeGroup(R.id.nav_groups_items);
 
-        if (groupListItems == null || groupListItems.isEmpty()) {
+        if (groupListItems != null) {
+            // Add each group
+            for (GroupListItem groupListItem : groupListItems) {
+                final String title = groupListItem.getTitle();
+                final MenuItem menuItem =
+                        subMenu.add(R.id.nav_groups_items, Menu.NONE, Menu.NONE, title);
+                menuItem.setIntent(GroupUtil.createViewGroupIntent(this, groupListItem.getGroupId()));
+                menuItem.setIcon(R.drawable.ic_menu_label);
+            }
+        }
+
+        makeMenuItemVisible(menu, R.id.nav_create_groups, areGroupWritableAccountsAvailable());
+    }
+
+    @Override
+    public void onFiltersLoaded(List<ContactListFilter> accountFilterItems) {
+        final Menu menu = mNavigationView.getMenu();
+        final MenuItem filtersMenuItem = menu.findItem(R.id.nav_filters);
+        final SubMenu subMenu = filtersMenuItem.getSubMenu();
+        subMenu.removeGroup(R.id.nav_filters_items);
+
+        if (accountFilterItems == null || accountFilterItems.size() < 2) {
             return;
         }
 
-        // Add each group
-        for (GroupListItem groupListItem : groupListItems) {
-            final String title = groupListItem.getTitle();
-            final MenuItem menuItem = menu.add(R.id.nav_groups, Menu.NONE, Menu.NONE, title);
-            menuItem.setIntent(GroupUtil.createViewGroupIntent(this, groupListItem.getGroupId()));
-            menuItem.setIcon(R.drawable.ic_menu_label);
-        }
-
-        menu.removeGroup(R.id.nav_create_groups);
-        // Create a menu item to add new groups
-        final MenuItem menuItem = menu.add(R.id.nav_create_groups, Menu.NONE, Menu.NONE,
-                getString(R.string.menu_new_group_action_bar));
-        menuItem.setIntent(GroupUtil.createAddGroupIntent(this));
-        menuItem.setIcon(R.drawable.ic_menu_group_add);
-
-        // Add misc menu items below the group of groups menu items
-        addMiscMenuItems();
-    }
-
-    private void addMiscMenuItems() {
-        final Menu menu = mNavigationView.getMenu();
-        menu.removeGroup(R.id.nav_misc);
-        final MenuItem settingsItem = menu.add(R.id.nav_misc, R.id.nav_settings, Menu.NONE,
-                R.string.menu_settings);
-        settingsItem.setIcon(R.drawable.ic_menu_settings);
-        if (HelpUtils.isHelpAndFeedbackAvailable()) {
-            final MenuItem helpItem = menu.add(R.id.nav_misc, R.id.nav_help, Menu.NONE,
-                    R.string.menu_help);
-            helpItem.setIcon(R.drawable.ic_menu_help);
+        for (int i = 0; i < accountFilterItems.size(); i++) {
+            final ContactListFilter filter = accountFilterItems.get(i);
+            final String accountName = filter.accountName;
+            final MenuItem menuItem = subMenu.add(R.id.nav_filters_items, Menu.NONE, Menu.NONE,
+                    accountName);
+            final Intent intent = new Intent();
+            intent.putExtra(AccountFilterActivity.KEY_EXTRA_CONTACT_LIST_FILTER, filter);
+            menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
+                @Override
+                public boolean onMenuItemClick(MenuItem item) {
+                    final DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
+                    drawer.closeDrawer(GravityCompat.START);
+                    AccountFilterUtil.handleAccountFilterResult(
+                            mContactListFilterController, AppCompatActivity.RESULT_OK, intent);
+                    return true;
+                }
+            });
+            menuItem.setIcon(filter.icon);
+            // Get rid of the default memu item overlay and show original account icons.
+            menuItem.getIcon().setColorFilter(Color.TRANSPARENT, PorterDuff.Mode.SRC_ATOP);
         }
     }
 
@@ -1201,10 +1231,13 @@
             startActivity(new Intent(this, ContactsPreferenceActivity.class));
         } else if (id == R.id.nav_help) {
             HelpUtils.launchHelpAndFeedbackForMainScreen(this);
-        } else if (id == R.id.nav_contacts_filter) {
-            AccountFilterUtil.startAccountFilterActivityForResult(
-                    this, SUBACTIVITY_ACCOUNT_FILTER,
-                    mContactListFilterController.getFilter());
+        } else if (id == R.id.nav_all_contacts) {
+            final Intent intent = new Intent();
+            final ContactListFilter filter = ContactListFilter.createFilterWithType(
+                    ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS);
+            intent.putExtra(AccountFilterActivity.KEY_EXTRA_CONTACT_LIST_FILTER, filter);
+            AccountFilterUtil.handleAccountFilterResult(
+                    mContactListFilterController, AppCompatActivity.RESULT_OK, intent);
         } else if (id == R.id.nav_import_export) {
             showImportExportDialogFragment();
         } else if (id == R.id.nav_blocked_numbers) {
@@ -1216,6 +1249,8 @@
         } else if (id == R.id.nav_find_duplicates) {
             ImplicitIntentsUtil.startActivityInAppIfPossible(this,
                     Assistants.getDuplicatesActivityIntent(this));
+        } else if (id == R.id.nav_create_groups) {
+            ImplicitIntentsUtil.startActivityInApp(this, GroupUtil.createAddGroupIntent(this));
         } else if (item.getIntent() != null) {
             ImplicitIntentsUtil.startActivityInApp(this, item.getIntent());
         } else {
diff --git a/src/com/android/contacts/interactions/AccountFiltersFragment.java b/src/com/android/contacts/interactions/AccountFiltersFragment.java
new file mode 100644
index 0000000..44a6edf
--- /dev/null
+++ b/src/com/android/contacts/interactions/AccountFiltersFragment.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.interactions;
+
+import android.app.Fragment;
+import android.app.LoaderManager;
+import android.content.Loader;
+import android.os.Bundle;
+
+import com.android.contacts.common.list.ContactListFilter;
+import com.android.contacts.common.util.AccountFilterUtil;
+
+import java.util.List;
+
+/**
+ * Loads account filters.
+ */
+public class AccountFiltersFragment extends Fragment {
+
+    private static final int LOADER_FILTERS = 1;
+
+    /**
+     * Callbacks for hosts of the {@link AccountFiltersFragment}.
+     */
+    public interface AccountFiltersListener  {
+
+        /**
+         * Invoked after account filters have been loaded.
+         */
+        void onFiltersLoaded(List<ContactListFilter> groupListItems);
+    }
+
+    private final LoaderManager.LoaderCallbacks<List<ContactListFilter>> mFiltersLoaderListener =
+            new LoaderManager.LoaderCallbacks<List<ContactListFilter>> () {
+                @Override
+                public Loader<List<ContactListFilter>> onCreateLoader(int id, Bundle args) {
+                    return new AccountFilterUtil.FilterLoader(getActivity());
+                }
+
+                @Override
+                public void onLoadFinished(
+                        Loader<List<ContactListFilter>> loader, List<ContactListFilter> data) {
+                    if (mListener != null) {
+                        mListener.onFiltersLoaded(data);
+                    }
+                }
+
+                public void onLoaderReset(Loader<List<ContactListFilter>> loader) {
+                }
+            };
+
+    private AccountFiltersListener mListener;
+
+    @Override
+    public void onStart() {
+        getLoaderManager().initLoader(LOADER_FILTERS, null, mFiltersLoaderListener);
+        super.onStart();
+    }
+
+    public void setListener(AccountFiltersListener listener) {
+        mListener = listener;
+    }
+}
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index 9ea8a1d..7749636 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -61,17 +61,6 @@
     private View mSearchProgress;
     private TextView mSearchProgressText;
 
-    private class FilterHeaderClickListener implements OnClickListener {
-        @Override
-        public void onClick(View view) {
-            AccountFilterUtil.startAccountFilterActivityForResult(
-                        DefaultContactBrowseListFragment.this,
-                        REQUEST_CODE_ACCOUNT_FILTER,
-                        getFilter());
-        }
-    }
-    private OnClickListener mFilterHeaderClickListener = new FilterHeaderClickListener();
-
     public DefaultContactBrowseListFragment() {
         setPhotoLoaderEnabled(true);
         // Don't use a QuickContactBadge. Just use a regular ImageView. Using a QuickContactBadge
@@ -115,7 +104,6 @@
         super.onCreateView(inflater, container);
 
         mAccountFilterHeader = getView().findViewById(R.id.account_filter_header_container);
-        mAccountFilterHeader.setOnClickListener(mFilterHeaderClickListener);
 
         // Create an empty user profile header and hide it for now (it will be visible if the
         // contacts list will have no user profile).
