diff --git a/res/values/ids.xml b/res/values/ids.xml
index efc45fc..88a64c8 100644
--- a/res/values/ids.xml
+++ b/res/values/ids.xml
@@ -44,6 +44,6 @@
     <!-- 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 group ID for the contact groups -->
-    <item type="id" name="menu_groups" />
+    <!-- Menu ID for the contact groups -->
+    <item type="id" name="nav_groups" />
 </resources>
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index c3d3277..14637eb 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -914,22 +914,27 @@
 
     @Override
     public void onGroupsLoaded(List<GroupListItem> groupListItems) {
+        // Clear previously added groups
         final Menu menu = mNavigationView.getMenu();
-        menu.removeGroup(R.id.menu_groups);
+        menu.removeGroup(R.id.nav_groups);
+
         if (groupListItems == null || groupListItems.isEmpty()) {
             return;
         }
+
+        // Add each group
         for (GroupListItem groupListItem : groupListItems) {
-            if (groupListItem.isFirstGroupInAccount()) {
-                menu.addSubMenu(groupListItem.getAccountName());
-            }
             final String title = groupListItem.getMemberCount() == 0 ? groupListItem.getTitle()
                     : getString(R.string.group_name_menu_item, groupListItem.getTitle(),
                             groupListItem.getMemberCount());
-            final MenuItem menuItem =
-                    menu.add(R.id.menu_groups, Menu.NONE, Menu.CATEGORY_SYSTEM, title);
+            final MenuItem menuItem = menu.add(R.id.nav_groups, Menu.NONE, Menu.NONE, title);
             menuItem.setIntent(GroupUtil.createViewGroupIntent(this, groupListItem.getGroupId()));
         }
+
+        // Create a menu item to add new groups
+        final MenuItem menuItem = menu.add(R.id.nav_groups, Menu.NONE, Menu.NONE,
+                getString(R.string.menu_new_group_action_bar));
+        menuItem.setIntent(GroupUtil.createAddGroupIntent(this));
     }
 
     @Override
diff --git a/src/com/android/contacts/group/GroupUtil.java b/src/com/android/contacts/group/GroupUtil.java
index f5b7db1..cca0741 100644
--- a/src/com/android/contacts/group/GroupUtil.java
+++ b/src/com/android/contacts/group/GroupUtil.java
@@ -25,6 +25,7 @@
 
 import com.android.contacts.GroupListLoader;
 import com.android.contacts.activities.GroupDetailActivity;
+import com.android.contacts.activities.GroupEditorActivity;
 import com.google.common.base.Objects;
 
 /**
@@ -68,6 +69,13 @@
                 isFirstGroupInAccount, memberCount);
     }
 
+    /** Returns an Intent to create a new group. */
+    public static Intent createAddGroupIntent(Context context) {
+        final Intent intent = new Intent(context, GroupEditorActivity.class);
+        intent.setAction(Intent.ACTION_INSERT);
+        return intent;
+    }
+
     /** Returns an Intent to view the details of the group identified by the given Uri. */
     public static Intent createViewGroupIntent(Context context, long groupId) {
         final Intent intent = new Intent(context, GroupDetailActivity.class);
