diff --git a/res/layout/group_editor_autocomplete_view.xml b/res/layout/group_editor_autocomplete_view.xml
deleted file mode 100644
index c8e716a..0000000
--- a/res/layout/group_editor_autocomplete_view.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 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.
--->
-
-<!-- Autocomplete text input field for adding new members to a group in the group editor -->
-
-<AutoCompleteTextView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:textAppearance="?android:attr/textAppearanceMedium"
-    android:textColor="?android:attr/textColorPrimary"
-    android:imeOptions="flagNoExtractUi|flagNoFullscreen"
-    android:hint="@string/enter_contact_name"
-    android:minHeight="48dip"
-    android:paddingLeft="@dimen/group_editor_autocomplete_left_padding"
-    android:paddingStart="@dimen/group_editor_autocomplete_left_padding"/>
\ No newline at end of file
diff --git a/res/layout/group_editor_view.xml b/res/layout/group_editor_view.xml
index d94853d..72ceaf3 100644
--- a/res/layout/group_editor_view.xml
+++ b/res/layout/group_editor_view.xml
@@ -45,10 +45,6 @@
             android:paddingStart="8dip"/>
 
         <include
-            layout="@layout/group_editor_autocomplete_view"
-            android:id="@+id/add_member_field"/>
-
-        <include
             layout="@layout/group_editor_existing_member_list"
             android:id="@android:id/list"/>
     </LinearLayout>
diff --git a/res/menu/edit_group.xml b/res/menu/edit_group.xml
index ad17b80..c2d7f47 100644
--- a/res/menu/edit_group.xml
+++ b/res/menu/edit_group.xml
@@ -14,12 +14,21 @@
      limitations under the License.
 -->
 
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:contacts="http://schemas.android.com/apk/res-auto">
+
+    <item
+        android:id="@+id/menu_add"
+        android:icon="@drawable/ic_person_add_tinted_24dp"
+        android:title="@string/menu_addToGroup"
+        contacts:showAsAction="ifRoom" />
+
     <item
         android:id="@+id/menu_save"
-        android:showAsAction="ifRoom"
         android:icon="@drawable/ic_done_wht_24dp"
-        android:title="@string/menu_save" />
+        android:title="@string/menu_save"
+        contacts:showAsAction="ifRoom" />
+
     <item
         android:id="@+id/menu_discard"
         android:title="@string/menu_discard" />
diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
index 78bec34..b519318 100644
--- a/res/values-sw600dp/dimens.xml
+++ b/res/values-sw600dp/dimens.xml
@@ -52,8 +52,6 @@
     <dimen name="group_editor_member_list_right_margin">4dip</dimen>
     <!-- Account title left padding -->
     <dimen name="account_container_left_padding">16dip</dimen>
-    <!-- Left padding of the auto complete field to line hint text up with member list -->
-    <dimen name="group_editor_autocomplete_left_padding">16dip</dimen>
     <dimen name="contact_detail_list_top_padding">8dip</dimen>
     <dimen name="frequently_contacted_title_text_size">24sp</dimen>
 </resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index d4e40ee..6d516cf 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -154,9 +154,6 @@
     <!-- Right margin for the group member list to match the built in margin in the autocomplete asset -->
     <dimen name="group_editor_member_list_right_margin">4dip</dimen>
 
-    <!-- Left padding of the auto complete field to line hint text up with member list -->
-    <dimen name="group_editor_autocomplete_left_padding">8dip</dimen>
-
     <!-- Border padding for the group detail fragment -->
     <dimen name="group_detail_border_padding">0dip</dimen>
 
diff --git a/res/values/strings.xml b/res/values/strings.xml
index cec807f..22169e4 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -137,11 +137,14 @@
     <!-- Menu item that deletes the currently selected label [CHAR LIMIT=30] -->
     <string name="menu_deleteGroup">Delete label</string>
 
+    <!-- Menu item to search for contacts to add to the currently selected label. CHAR LIMIT=30] -->
+    <string name="menu_addToGroup">Add contact</string>
+
     <!-- Menu item to remove the currently selected contacts from the currently selected label. [CHAR LIMIT=60] -->
     <string name="menu_removeFromGroup">Remove from label</string>
 
     <!-- Menu item (in the action bar) that creates a new contact [CHAR LIMIT=30] -->
-    <string name="menu_new_contact_action_bar">Add Contact</string>
+    <string name="menu_new_contact_action_bar">Add contact</string>
 
     <!-- Menu item (in the action bar) that creates a new label [CHAR LIMIT=30] -->
     <string name="menu_new_group_action_bar">Create new&#8230;</string>
diff --git a/src/com/android/contacts/activities/ActionBarAdapter.java b/src/com/android/contacts/activities/ActionBarAdapter.java
index 2d6740d..7042121 100644
--- a/src/com/android/contacts/activities/ActionBarAdapter.java
+++ b/src/com/android/contacts/activities/ActionBarAdapter.java
@@ -110,6 +110,8 @@
     private boolean mShowHomeIcon;
     private boolean mShowHomeAsUp;
 
+    private int mSearchHintResId;
+
     public interface TabState {
         public static int ALL = 0;
 
@@ -121,6 +123,12 @@
 
     public ActionBarAdapter(Activity activity, Listener listener, ActionBar actionBar,
             View portraitTabs, View landscapeTabs, Toolbar toolbar) {
+        this(activity, listener, actionBar, portraitTabs, landscapeTabs, toolbar,
+                R.string.hint_findContacts);
+    }
+
+    public ActionBarAdapter(Activity activity, Listener listener, ActionBar actionBar,
+            View portraitTabs, View landscapeTabs, Toolbar toolbar, int searchHintResId) {
         mActivity = activity;
         mListener = listener;
         mActionBar = actionBar;
@@ -130,6 +138,7 @@
         mToolbar = toolbar;
         mToolBarFrame = (FrameLayout) mToolbar.getParent();
         mMaxToolbarContentInsetStart = mToolbar.getContentInsetStart();
+        mSearchHintResId = searchHintResId;
 
         setupSearchAndSelectionViews();
         setupTabs(mActivity);
@@ -143,6 +152,10 @@
         mShowHomeAsUp = showHomeAsUp;
     }
 
+    public EditText getSearchView() {
+        return mSearchView;
+    }
+
     private void setupTabs(Context context) {
         final TypedArray attributeArray = context.obtainStyledAttributes(
                 new int[]{android.R.attr.actionBarSize});
@@ -163,7 +176,7 @@
         mSearchContainer.setBackgroundColor(mActivity.getResources().getColor(
                 R.color.searchbox_background_color));
         mSearchView = (EditText) mSearchContainer.findViewById(R.id.search_view);
-        mSearchView.setHint(mActivity.getString(R.string.hint_findContacts));
+        mSearchView.setHint(mActivity.getString(mSearchHintResId));
         mSearchView.addTextChangedListener(new SearchTextWatcher());
         mSearchContainer.findViewById(R.id.search_back_button).setOnClickListener(
                 new OnClickListener() {
diff --git a/src/com/android/contacts/activities/GroupEditorActivity.java b/src/com/android/contacts/activities/GroupEditorActivity.java
index 5f2789e..e316902 100644
--- a/src/com/android/contacts/activities/GroupEditorActivity.java
+++ b/src/com/android/contacts/activities/GroupEditorActivity.java
@@ -22,6 +22,7 @@
 import android.net.Uri;
 import android.os.Bundle;
 import android.util.Log;
+import android.widget.AutoCompleteTextView;
 
 import com.android.contacts.ContactsActivity;
 import com.android.contacts.R;
@@ -140,6 +141,20 @@
             startActivity(ImplicitIntentsUtil.composeQuickContactIntent(
                     contactLookupUri, QuickContactActivity.MODE_FULLY_EXPANDED));
         }
+
+        @Override
+        public AutoCompleteTextView getSearchView() {
+            return null;
+        }
+
+        @Override
+        public boolean isSearchMode() {
+            return false;
+        }
+
+        @Override
+        public void setSearchMode(boolean searchMode) {
+        }
     };
 
     @Override
diff --git a/src/com/android/contacts/activities/GroupMembersActivity.java b/src/com/android/contacts/activities/GroupMembersActivity.java
index 2221820..7ebb3e0 100644
--- a/src/com/android/contacts/activities/GroupMembersActivity.java
+++ b/src/com/android/contacts/activities/GroupMembersActivity.java
@@ -31,6 +31,7 @@
 import android.util.Log;
 import android.view.Menu;
 import android.view.MenuItem;
+import android.widget.AutoCompleteTextView;
 import android.widget.Toast;
 
 import com.android.contacts.AppCompatContactsActivity;
@@ -257,7 +258,8 @@
         final ContactsRequest contactsRequest = new ContactsRequest();
         contactsRequest.setActionCode(ContactsRequest.ACTION_GROUP);
         mActionBarAdapter = new ActionBarAdapter(this, this, getSupportActionBar(),
-                /* portraitTabs */ null, /* landscapeTabs */ null, toolbar);
+                /* portraitTabs */ null, /* landscapeTabs */ null, toolbar,
+                R.string.enter_contact_name);
         mActionBarAdapter.setShowHomeIcon(true);
         mActionBarAdapter.setShowHomeAsUp(true);
         mActionBarAdapter.initialize(savedState, contactsRequest);
@@ -429,9 +431,6 @@
     @Override
     public void onAction(int action) {
         switch (action) {
-            case ActionBarAdapter.Listener.Action.CHANGE_SEARCH_QUERY:
-                // TODO(wjang)
-                break;
             case ActionBarAdapter.Listener.Action.START_SEARCH_MODE:
                 mActionBarAdapter.setSearchMode(true);
                 invalidateOptionsMenu();
@@ -528,4 +527,22 @@
         startActivity(ImplicitIntentsUtil.composeQuickContactIntent(
                 contactLookupUri, QuickContactActivity.MODE_FULLY_EXPANDED));
     }
+
+    @Override
+    public AutoCompleteTextView getSearchView() {
+        return mActionBarAdapter == null
+                ? null : (AutoCompleteTextView) mActionBarAdapter.getSearchView();
+    }
+
+    @Override
+    public boolean isSearchMode() {
+        return mActionBarAdapter == null ? false : mActionBarAdapter.isSearchMode();
+    }
+
+    @Override
+    public void setSearchMode(boolean searchMode) {
+        if (mActionBarAdapter != null) {
+            mActionBarAdapter.setSearchMode(searchMode);
+        }
+    }
 }
diff --git a/src/com/android/contacts/group/GroupEditorFragment.java b/src/com/android/contacts/group/GroupEditorFragment.java
index c738e33..a7d30a4 100644
--- a/src/com/android/contacts/group/GroupEditorFragment.java
+++ b/src/com/android/contacts/group/GroupEditorFragment.java
@@ -121,6 +121,24 @@
          * Group member name or photo was clicked in order to view contact details.
          */
         void onGroupMemberClicked(Uri contactLookupUri);
+
+        // TODO(wjang): consider calling these directly on the host Activity or moving these
+        // options menu items to the host Activity.
+
+        /**
+         * Returns the autocomplete view from the action bar.
+         */
+        AutoCompleteTextView getSearchView();
+
+        /**
+         * Whether the action bar is currently in search mode.
+         */
+        boolean isSearchMode();
+
+        /**
+         * Change whether the action bar is in search mode.
+         */
+        void setSearchMode(boolean searchMode);
     }
 
     private static final int LOADER_EXISTING_MEMBERS = 2;
@@ -421,8 +439,9 @@
         }
 
         mGroupNameView = (TextView) editorView.findViewById(R.id.group_name);
-        mAutoCompleteTextView = (AutoCompleteTextView) editorView.findViewById(
-                R.id.add_member_field);
+        if (mListener != null) {
+            mAutoCompleteTextView = mListener.getSearchView();
+        }
 
         mListView = (ListView) editorView.findViewById(android.R.id.list);
         mListView.setAdapter(mMemberListAdapter);
@@ -520,6 +539,21 @@
     }
 
     @Override
+    public void onPrepareOptionsMenu(Menu menu) {
+        final boolean isSearchMode = mListener == null ? false : mListener.isSearchMode();
+        setVisible(menu, R.id.menu_add, !isSearchMode);
+        setVisible(menu, R.id.menu_save, !isSearchMode);
+        setVisible(menu, R.id.menu_discard, !isSearchMode);
+    }
+
+    private static void setVisible(Menu menu, int id, boolean visible) {
+        final MenuItem menuItem = menu.findItem(id);
+        if (menuItem != null) {
+            menuItem.setVisible(visible);
+        }
+    }
+
+    @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {
             case android.R.id.home: {
@@ -530,6 +564,11 @@
                 }
                 return true;
             }
+            case R.id.menu_add:
+                if (mListener != null) {
+                    mListener.setSearchMode(true);
+                }
+                return true;
             case R.id.menu_save:
                 onDoneClicked();
                 return true;
