diff --git a/src/com/android/contacts/GroupMetaDataLoader.java b/src/com/android/contacts/GroupMetaDataLoader.java
index 8cdca2e..26cdb44 100644
--- a/src/com/android/contacts/GroupMetaDataLoader.java
+++ b/src/com/android/contacts/GroupMetaDataLoader.java
@@ -51,10 +51,8 @@
     public final static int DELETED = 8;
 
     public GroupMetaDataLoader(Context context, Uri groupUri) {
-        super(context, ensureIsGroupUri(groupUri), COLUMNS,
-                Groups.ACCOUNT_TYPE + " NOT NULL AND " + Groups.ACCOUNT_NAME + " NOT NULL AND "
-                        + Groups.DELETED + "=0",
-                null, GroupUtil.getGroupsSortOrder());
+        super(context, ensureIsGroupUri(groupUri), COLUMNS, GroupListLoader.DEFAULT_SELECTION, null,
+                GroupUtil.getGroupsSortOrder());
     }
 
     /**
diff --git a/src/com/android/contacts/activities/ContactSelectionActivity.java b/src/com/android/contacts/activities/ContactSelectionActivity.java
index 7bb921d..46e5d9c 100644
--- a/src/com/android/contacts/activities/ContactSelectionActivity.java
+++ b/src/com/android/contacts/activities/ContactSelectionActivity.java
@@ -564,11 +564,6 @@
         }
 
         @Override
-        public void onGroupMembersSelected(long[] contactIds) {
-            returnSelectedContacts(contactIds);
-        }
-
-        @Override
         public void onSelectGroupMembers() {
             mActionBarAdapter.setSelectionMode(true);
         }
diff --git a/src/com/android/contacts/common/list/ContactListFilter.java b/src/com/android/contacts/common/list/ContactListFilter.java
index 2bae617..4c8ca89 100644
--- a/src/com/android/contacts/common/list/ContactListFilter.java
+++ b/src/com/android/contacts/common/list/ContactListFilter.java
@@ -315,7 +315,8 @@
     /**
      * Adds the account query parameters to the given {@code uriBuilder}.
      *
-     * @throws IllegalStateException if the filter type is not {@link #FILTER_TYPE_ACCOUNT}.
+     * @throws IllegalStateException if the filter type is not {@link #FILTER_TYPE_ACCOUNT} or
+     * {@link #FILTER_TYPE_GROUP_MEMBERS}.
      */
     public Uri.Builder addAccountQueryParameterToUrl(Uri.Builder uriBuilder) {
         if (filterType != FILTER_TYPE_ACCOUNT
diff --git a/src/com/android/contacts/common/list/DefaultContactListAdapter.java b/src/com/android/contacts/common/list/DefaultContactListAdapter.java
index 43cca1a..cf3f6f6 100644
--- a/src/com/android/contacts/common/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/common/list/DefaultContactListAdapter.java
@@ -240,8 +240,6 @@
                 break;
             }
             case ContactListFilter.FILTER_TYPE_GROUP_MEMBERS: {
-                // TODO(wjang): check if we need it
-                // selection.append(Contacts.IN_VISIBLE_GROUP + "=1");
                 break;
             }
             case ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS: {
diff --git a/src/com/android/contacts/group/GroupMembersFragment.java b/src/com/android/contacts/group/GroupMembersFragment.java
index 769a083..48dccfe 100644
--- a/src/com/android/contacts/group/GroupMembersFragment.java
+++ b/src/com/android/contacts/group/GroupMembersFragment.java
@@ -252,7 +252,7 @@
     }
 
     public ArrayList<String> getMemberContactIds() {
-        return  new ArrayList<>(mGroupMemberContactIds);
+        return new ArrayList<>(mGroupMemberContactIds);
     }
 
     public int getMemberCount() {
diff --git a/src/com/android/contacts/group/GroupUtil.java b/src/com/android/contacts/group/GroupUtil.java
index b54126e..d1780e1 100644
--- a/src/com/android/contacts/group/GroupUtil.java
+++ b/src/com/android/contacts/group/GroupUtil.java
@@ -25,17 +25,13 @@
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Groups;
 import android.text.TextUtils;
-import android.widget.ImageView;
 
 import com.android.contacts.GroupListLoader;
 import com.android.contacts.activities.ContactSelectionActivity;
 import com.android.contacts.activities.GroupMembersActivity;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
 import com.android.contacts.common.list.ContactsSectionIndexer;
 import com.android.contacts.common.model.account.GoogleAccountType;
 import com.android.contacts.list.UiIntentActions;
-import com.google.common.base.Objects;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -81,9 +77,9 @@
             String previousGroupAccountType = cursor.getString(GroupListLoader.ACCOUNT_TYPE);
             String previousGroupDataSet = cursor.getString(GroupListLoader.DATA_SET);
 
-            if (accountName.equals(previousGroupAccountName) &&
-                    accountType.equals(previousGroupAccountType) &&
-                    Objects.equal(dataSet, previousGroupDataSet)) {
+            if (TextUtils.equals(accountName, previousGroupAccountName)
+                    && TextUtils.equals(accountType, previousGroupAccountType)
+                    && TextUtils.equals(dataSet, previousGroupDataSet)) {
                 isFirstGroupInAccount = false;
             }
         }
@@ -92,25 +88,6 @@
                 isFirstGroupInAccount, memberCount, isReadOnly, systemId);
     }
 
-    /**
-     * @param identifier the {@link ContactPhotoManager.DefaultImageRequest#identifier}
-     *         to use for this the group member.
-     */
-    public static void bindPhoto(ContactPhotoManager photoManager, ImageView imageView,
-            long photoId, Uri photoUri, String displayName, String identifier) {
-        if (photoId == 0) {
-            final DefaultImageRequest defaultImageRequest = photoUri == null
-                    ? new DefaultImageRequest(displayName, identifier,
-                            /* circularPhotos */ true)
-                    : null;
-            photoManager.loadDirectoryPhoto(imageView, photoUri, /* darkTheme */ false,
-                        /* isCircular */ true, defaultImageRequest);
-        } else {
-            photoManager.loadThumbnail(imageView, photoId, /* darkTheme */ false,
-                        /* isCircular */ true, /* defaultImageRequest */ null);
-        }
-    }
-
     /** Returns an Intent to view the details of the group identified by the given URI. */
     public static Intent createViewGroupIntent(Context context, Uri groupUri, String title) {
         final Intent intent = new Intent(context, GroupMembersActivity.class);
diff --git a/src/com/android/contacts/list/GroupMemberPickerFragment.java b/src/com/android/contacts/list/GroupMemberPickerFragment.java
index 6f4d0c0..c6f7493 100644
--- a/src/com/android/contacts/list/GroupMemberPickerFragment.java
+++ b/src/com/android/contacts/list/GroupMemberPickerFragment.java
@@ -52,12 +52,12 @@
     private static final String KEY_ACCOUNT_NAME = "accountName";
     private static final String KEY_ACCOUNT_TYPE = "accountType";
     private static final String KEY_ACCOUNT_DATA_SET = "accountDataSet";
-    private static final String KEY_RAW_CONTACT_IDS = "rawContactIds";
+    private static final String KEY_CONTACT_IDS = "contactIds";
 
     private static final String ARG_ACCOUNT_NAME = "accountName";
     private static final String ARG_ACCOUNT_TYPE = "accountType";
     private static final String ARG_ACCOUNT_DATA_SET = "accountDataSet";
-    private static final String ARG_RAW_CONTACT_IDS = "rawContactIds";
+    private static final String ARG_CONTACT_IDS = "contactIds";
 
     /** Callbacks for host of {@link GroupMemberPickerFragment}. */
     public interface Listener {
@@ -65,9 +65,6 @@
         /** Invoked when a potential group member is selected. */
         void onGroupMemberClicked(long contactId);
 
-        /** Invoked when multiple potential group members are selected. */
-        void onGroupMembersSelected(long[] contactIds);
-
         /** Invoked when user has initiated multiple selection mode. */
         void onSelectGroupMembers();
     }
@@ -101,7 +98,7 @@
             for (int i = 0; i < mCount; i++) {
                 super.moveToPosition(i);
                 final String contactId = getString(ContactQuery.CONTACT_ID);
-                if (!mRawContactIds.contains(contactId)) {
+                if (!mContactIds.contains(contactId)) {
                     mIndex[mPos++] = i;
                 } else {
                     indicesToFilter.add(i);
@@ -173,16 +170,16 @@
     private String mAccountName;
     private String mAccountType;
     private String mAccountDataSet;
-    private ArrayList<String> mRawContactIds;
+    private ArrayList<String> mContactIds;
     private Listener mListener;
 
     public static GroupMemberPickerFragment newInstance(String accountName, String accountType,
-            String accountDataSet, ArrayList<String> rawContactIds) {
+            String accountDataSet, ArrayList<String> contactIds) {
         final Bundle args = new Bundle();
         args.putString(ARG_ACCOUNT_NAME, accountName);
         args.putString(ARG_ACCOUNT_TYPE, accountType);
         args.putString(ARG_ACCOUNT_DATA_SET, accountDataSet);
-        args.putStringArrayList(ARG_RAW_CONTACT_IDS, rawContactIds);
+        args.putStringArrayList(ARG_CONTACT_IDS, contactIds);
 
         final GroupMemberPickerFragment fragment = new GroupMemberPickerFragment();
         fragment.setArguments(args);
@@ -202,12 +199,12 @@
             mAccountName = getArguments().getString(ARG_ACCOUNT_NAME);
             mAccountType = getArguments().getString(ARG_ACCOUNT_TYPE);
             mAccountDataSet = getArguments().getString(ARG_ACCOUNT_DATA_SET);
-            mRawContactIds = getArguments().getStringArrayList(ARG_RAW_CONTACT_IDS);
+            mContactIds = getArguments().getStringArrayList(ARG_CONTACT_IDS);
         } else {
             mAccountName = savedState.getString(KEY_ACCOUNT_NAME);
             mAccountType = savedState.getString(KEY_ACCOUNT_TYPE);
             mAccountDataSet = savedState.getString(KEY_ACCOUNT_DATA_SET);
-            mRawContactIds = savedState.getStringArrayList(KEY_RAW_CONTACT_IDS);
+            mContactIds = savedState.getStringArrayList(KEY_CONTACT_IDS);
         }
         super.onCreate(savedState);
     }
@@ -218,7 +215,7 @@
         outState.putString(KEY_ACCOUNT_NAME, mAccountName);
         outState.putString(KEY_ACCOUNT_TYPE, mAccountType);
         outState.putString(KEY_ACCOUNT_DATA_SET, mAccountDataSet);
-        outState.putStringArrayList(KEY_RAW_CONTACT_IDS, mRawContactIds);
+        outState.putStringArrayList(KEY_CONTACT_IDS, mContactIds);
     }
 
     public void setListener(Listener listener) {
