diff --git a/res/drawable/ic_menu_blocked_numbers.xml b/res/drawable/ic_menu_blocked_numbers.xml
new file mode 100644
index 0000000..9e03397
--- /dev/null
+++ b/res/drawable/ic_menu_blocked_numbers.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportHeight="24.0"
+        android:viewportWidth="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zM4 12c0-4.42 3.58-8 8-8 1.85 0 3.55.63 4.9 1.69L5.69 16.9C4.63 15.55 4 13.85 4 12zm8 8c-1.85 0-3.55-.63-4.9-1.69L18.31 7.1C19.37 8.45 20 10.15 20 12c0 4.42-3.58 8-8 8z"/>
+</vector>
\ No newline at end of file
diff --git a/res/drawable/ic_menu_duplicates.xml b/res/drawable/ic_menu_duplicates.xml
new file mode 100644
index 0000000..a604d47
--- /dev/null
+++ b/res/drawable/ic_menu_duplicates.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportHeight="24.0"
+        android:viewportWidth="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/>
+</vector>
diff --git a/res/drawable/ic_menu_filter.xml b/res/drawable/ic_menu_filter.xml
new file mode 100644
index 0000000..5a38952
--- /dev/null
+++ b/res/drawable/ic_menu_filter.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportHeight="24.0"
+        android:viewportWidth="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M20 0H4v2h16V0zM4 24h16v-2H4v2zM20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 2.75c1.24 0 2.25 1.01 2.25 2.25s-1.01 2.25-2.25 2.25S9.75 10.24 9.75 9 10.76 6.75 12 6.75zM17 17H7v-1.5c0-1.67 3.33-2.5 5-2.5s5 .83 5 2.5V17z"/>
+</vector>
diff --git a/res/drawable/ic_menu_group_add.xml b/res/drawable/ic_menu_group_add.xml
new file mode 100644
index 0000000..786d3e5
--- /dev/null
+++ b/res/drawable/ic_menu_group_add.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportHeight="24.0"
+        android:viewportWidth="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/>
+</vector>
diff --git a/res/drawable/ic_menu_import_export.xml b/res/drawable/ic_menu_import_export.xml
new file mode 100644
index 0000000..9a143c0
--- /dev/null
+++ b/res/drawable/ic_menu_import_export.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportHeight="24.0"
+        android:viewportWidth="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M9 3L5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3z"/>
+</vector>
diff --git a/res/drawable/ic_menu_label.xml b/res/drawable/ic_menu_label.xml
new file mode 100644
index 0000000..05e665f
--- /dev/null
+++ b/res/drawable/ic_menu_label.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportHeight="24.0"
+        android:viewportWidth="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M17.63 5.84C17.27 5.33 16.67 5 16 5L5 5.01C3.9 5.01 3 5.9 3 7v10c0 1.1.9 1.99 2 1.99L16 19c.67 0 1.27-.33 1.63-.84L22 12l-4.37-6.16z"/>
+</vector>
diff --git a/res/menu/activity_main_drawer.xml b/res/menu/activity_main_drawer.xml
index 0a0eef2..469a7b8 100644
--- a/res/menu/activity_main_drawer.xml
+++ b/res/menu/activity_main_drawer.xml
@@ -18,11 +18,38 @@
 
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
 
-    <group android:id="@+id/misc">
+    <group android:id="@+id/nav_utilities">
+        <item
+            android:id="@+id/nav_contacts_filter"
+            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"/>
+        <item
+            android:id="@+id/nav_accounts"
+            android:icon="@drawable/ic_account_circle_black_24dp"
+            android:title="@string/menu_accounts"/>
+        <item
+            android:id="@+id/nav_blocked_numbers"
+            android:icon="@drawable/ic_menu_blocked_numbers"
+            android:title="@string/menu_blocked_numbers"/>
+        <item
+            android:id="@+id/nav_find_duplicates"
+            android:icon="@drawable/ic_menu_duplicates"
+            android:title="@string/menu_duplicates"/>
+    </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_help"
+            android:icon="@drawable/ic_menu_help"
+            android:title="@string/menu_help"/>
     </group>
 
 </menu>
diff --git a/res/menu/people_options.xml b/res/menu/people_options.xml
index 7bcd750..46d6856 100644
--- a/res/menu/people_options.xml
+++ b/res/menu/people_options.xml
@@ -22,22 +22,6 @@
         contacts:showAsAction="ifRoom" />
 
     <item
-        android:id="@+id/menu_contacts_filter"
-        android:title="@string/menu_contacts_filter" />
-
-    <item
-        android:id="@+id/menu_import_export"
-        android:title="@string/menu_import_export" />
-
-    <item
-        android:id="@+id/menu_blocked_numbers"
-        android:title="@string/menu_blocked_numbers"/>
-
-    <item
-        android:id="@+id/menu_accounts"
-        android:title="@string/menu_accounts" />
-
-    <item
         android:id="@+id/export_database"
         android:title="@string/menu_export_database"
         android:visible="false"
@@ -55,8 +39,4 @@
         android:id="@+id/menu_share"
         android:title="@string/menu_share" />
 
-    <item
-        android:id="@+id/menu_duplicates"
-        android:title="@string/menu_duplicates" />
-
 </menu>
diff --git a/res/values/ids.xml b/res/values/ids.xml
index 88a64c8..b0470b5 100644
--- a/res/values/ids.xml
+++ b/res/values/ids.xml
@@ -44,6 +44,12 @@
     <!-- An ID to be used for contents of a custom dialog so that its state be preserved -->
     <item type="id" name="custom_dialog_content" />
 
-    <!-- Menu ID for the contact groups -->
+    <!-- Menu group ID for settings and help & feedback  -->
+    <item type="id" name="nav_misc" />
+
+    <!-- Menu group ID for the contact groups -->
     <item type="id" name="nav_groups" />
+
+    <!-- Menu group ID for "create new group" -->
+    <item type="id" name="nav_create_groups" />
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 711caae..2e1b857 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -145,7 +145,7 @@
     <string name="menu_new_contact_action_bar">Add Contact</string>
 
     <!-- Menu item (in the action bar) that creates a new group [CHAR LIMIT=30] -->
-    <string name="menu_new_group_action_bar">Add Group</string>
+    <string name="menu_new_group_action_bar">Create new...</string>
 
     <!-- Confirmation dialog for unlinking contacts into multiple instances [CHAR LIMIT=NONE] -->
     <string name="splitConfirmation">Unlink this contact into multiple contacts?</string>
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 4a09cd1..5b2d52a 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -343,13 +343,23 @@
         mNavigationView.setNavigationItemSelectedListener(this);
 
         final Menu menu = mNavigationView.getMenu();
-        if (HelpUtils.isHelpAndFeedbackAvailable()) {
-            final MenuItem menuItem = menu.add(/* groupId */ R.id.misc, /* itemId */ R.id.nav_help,
-                    /* order */ Menu.NONE, /* titleRes */ R.string.menu_help);
-            menuItem.setIcon(R.drawable.ic_menu_help);
+
+        final boolean showBlockedNumbers = PhoneCapabilityTester.isPhone(this)
+                && ContactsUtils.FLAG_N_FEATURE
+                && BlockedNumberContractCompat.canCurrentUserBlockNumbers(this);
+
+        if (!showBlockedNumbers) {
+            menu.removeItem(R.id.nav_blocked_numbers);
         }
 
-        final String FAVORITE_TAG = "tab-pager-favorite";
+        if (Assistants.getDuplicatesActivityIntent(this) == null) {
+            menu.removeItem(R.id.nav_find_duplicates);
+        }
+
+        if (!HelpUtils.isHelpAndFeedbackAvailable()) {
+            menu.removeItem(R.id.nav_help);
+        }
+
         final String ALL_TAG = "tab-pager-all";
         final String GROUPS_TAG = "groups";
 
@@ -896,17 +906,34 @@
 
         // Add each group
         for (GroupListItem groupListItem : groupListItems) {
-            final String title = groupListItem.getMemberCount() == 0 ? groupListItem.getTitle()
-                    : getString(R.string.group_name_menu_item, groupListItem.getTitle(),
-                            groupListItem.getMemberCount());
+            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_groups, Menu.NONE, Menu.NONE,
+        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);
+        }
     }
 
     @Override
@@ -1092,30 +1119,9 @@
             return false;
         }
 
-        // Get references to individual menu items in the menu
-        final MenuItem contactsFilterMenu = menu.findItem(R.id.menu_contacts_filter);
-
         final boolean isSearchOrSelectionMode = mActionBarAdapter.isSearchMode()
                 || mActionBarAdapter.isSelectionMode();
-        if (isSearchOrSelectionMode) {
-            contactsFilterMenu.setVisible(false);
-        } else {
-            switch (getTabPositionForTextDirection(mActionBarAdapter.getCurrentTab())) {
-                case TabState.ALL:
-                    contactsFilterMenu.setVisible(true);
-                    break;
-            }
-        }
-        final boolean showMiscOptions = !isSearchOrSelectionMode;
-        final boolean showBlockedNumbers = PhoneCapabilityTester.isPhone(this)
-                && ContactsUtils.FLAG_N_FEATURE
-                && BlockedNumberContractCompat.canCurrentUserBlockNumbers(this);
-        makeMenuItemVisible(menu, R.id.menu_search, showMiscOptions);
-        makeMenuItemVisible(menu, R.id.menu_import_export, showMiscOptions);
-        makeMenuItemVisible(menu, R.id.menu_accounts, showMiscOptions);
-        makeMenuItemVisible(menu, R.id.menu_blocked_numbers, showMiscOptions && showBlockedNumbers);
-        makeMenuItemVisible(menu, R.id.menu_duplicates,
-                showMiscOptions && Assistants.getDuplicatesActivityIntent(this) != null);
+        makeMenuItemVisible(menu, R.id.menu_search, !isSearchOrSelectionMode);
 
         final boolean showSelectedContactOptions = mActionBarAdapter.isSelectionMode()
                 && mAllFragment.getSelectedContactIds().size() != 0;
@@ -1162,50 +1168,21 @@
                 }
                 return true;
             }
-            case R.id.menu_contacts_filter: {
-                AccountFilterUtil.startAccountFilterActivityForResult(
-                        this, SUBACTIVITY_ACCOUNT_FILTER,
-                        mContactListFilterController.getFilter());
-                return true;
-            }
             case R.id.menu_search: {
                 onSearchRequested();
                 return true;
             }
-            case R.id.menu_share:
+            case R.id.menu_share: {
                 shareSelectedContacts();
                 return true;
-            case R.id.menu_join:
+            }
+            case R.id.menu_join: {
                 joinSelectedContacts();
                 return true;
-            case R.id.menu_delete:
+            }
+            case R.id.menu_delete: {
                 deleteSelectedContacts();
                 return true;
-            case R.id.menu_import_export: {
-                showImportExportDialogFragment();
-                return true;
-            }
-            case R.id.menu_accounts: {
-                final Intent intent = new Intent(Settings.ACTION_SYNC_SETTINGS);
-                intent.putExtra(Settings.EXTRA_AUTHORITIES, new String[] {
-                    ContactsContract.AUTHORITY
-                });
-                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
-                ImplicitIntentsUtil.startActivityInAppIfPossible(this, intent);
-                return true;
-            }
-            case R.id.menu_blocked_numbers: {
-                final Intent intent = TelecomManagerUtil.createManageBlockedNumbersIntent(
-                        (TelecomManager) getSystemService(Context.TELECOM_SERVICE));
-                if (intent != null) {
-                    startActivity(intent);
-                }
-                return true;
-            }
-            case R.id.menu_duplicates: {
-                ImplicitIntentsUtil.startActivityInAppIfPossible(this,
-                        Assistants.getDuplicatesActivityIntent(this));
-                return true;
             }
             case R.id.export_database: {
                 final Intent intent = new Intent("com.android.providers.contacts.DUMP_DATABASE");
@@ -1226,6 +1203,28 @@
             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_import_export) {
+            showImportExportDialogFragment();
+        } else if (id == R.id.nav_accounts) {
+            final Intent intent = new Intent(Settings.ACTION_SYNC_SETTINGS);
+            intent.putExtra(Settings.EXTRA_AUTHORITIES, new String[] {
+                    ContactsContract.AUTHORITY
+            });
+            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+            ImplicitIntentsUtil.startActivityInAppIfPossible(this, intent);
+        } else if (id == R.id.nav_blocked_numbers) {
+            final Intent intent = TelecomManagerUtil.createManageBlockedNumbersIntent(
+                    (TelecomManager) getSystemService(Context.TELECOM_SERVICE));
+            if (intent != null) {
+                startActivity(intent);
+            }
+        } else if (id == R.id.nav_find_duplicates) {
+            ImplicitIntentsUtil.startActivityInAppIfPossible(this,
+                    Assistants.getDuplicatesActivityIntent(this));
         } else if (item.getIntent() != null) {
             ImplicitIntentsUtil.startActivityInApp(this, item.getIntent());
         } else {
