diff --git a/src/com/android/contacts/activities/GroupMembersActivity.java b/src/com/android/contacts/activities/GroupMembersActivity.java
index 7ee8653..7ff5ba0 100644
--- a/src/com/android/contacts/activities/GroupMembersActivity.java
+++ b/src/com/android/contacts/activities/GroupMembersActivity.java
@@ -44,7 +44,7 @@
 import com.android.contacts.common.model.account.AccountWithDataSet;
 import com.android.contacts.common.util.AccountsListAdapter.AccountListFilter;
 import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contacts.group.GroupMembersListFragment;
+import com.android.contacts.group.GroupMembersFragment;
 import com.android.contacts.group.GroupMetadata;
 import com.android.contacts.group.GroupNameEditDialogFragment;
 import com.android.contacts.interactions.GroupDeletionDialogFragment;
@@ -62,7 +62,7 @@
         ActionBarAdapter.Listener,
         MultiSelectContactsListFragment.OnCheckBoxListActionListener,
         SelectAccountDialogFragment.Listener,
-        GroupMembersListFragment.GroupMembersListListener,
+        GroupMembersFragment.GroupMembersListener,
         GroupNameEditDialogFragment.Listener {
 
     private static final String TAG = "GroupMembers";
@@ -156,7 +156,7 @@
 
     private GroupMetadata mGroupMetadata;
 
-    private GroupMembersListFragment mMembersListFragment;
+    private GroupMembersFragment mMembersFragment;
 
     private Uri mGroupUri;
     private boolean mIsInsertAction;
@@ -213,16 +213,16 @@
         } else {
             final FragmentManager fragmentManager = getFragmentManager();
             // Add the members list fragment
-            mMembersListFragment = (GroupMembersListFragment)
+            mMembersFragment = (GroupMembersFragment)
                     fragmentManager.findFragmentByTag(TAG_GROUP_MEMBERS);
-            if (mMembersListFragment == null) {
-                mMembersListFragment = GroupMembersListFragment.newInstance(getIntent().getData());
+            if (mMembersFragment == null) {
+                mMembersFragment = GroupMembersFragment.newInstance(getIntent().getData());
                 fragmentManager.beginTransaction().replace(R.id.fragment_container_inner,
-                        mMembersListFragment, TAG_GROUP_MEMBERS).commitAllowingStateLoss();
+                        mMembersFragment, TAG_GROUP_MEMBERS).commitAllowingStateLoss();
             }
-            mMembersListFragment.setListener(this);
+            mMembersFragment.setListener(this);
             if (mGroupMetadata != null && mGroupMetadata.editable) {
-                mMembersListFragment.setCheckBoxListListener(this);
+                mMembersFragment.setCheckBoxListListener(this);
             }
         }
 
@@ -284,17 +284,16 @@
             Toast.makeText(this, getToastMessageForSaveAction(newIntent.getAction()),
                     Toast.LENGTH_SHORT).show();
 
-            mMembersListFragment = GroupMembersListFragment.newInstance(groupUri);
-            mMembersListFragment.setListener(this);
+            mMembersFragment = GroupMembersFragment.newInstance(groupUri);
+            mMembersFragment.setListener(this);
 
             final FragmentTransaction transaction = getFragmentManager().beginTransaction();
             addGroupsAndFiltersFragments(transaction);
-            transaction.replace(
-                    R.id.fragment_container_inner, mMembersListFragment, TAG_GROUP_MEMBERS)
+            transaction.replace(R.id.fragment_container_inner, mMembersFragment, TAG_GROUP_MEMBERS)
                     .commitAllowingStateLoss();
 
             if (mGroupMetadata != null && mGroupMetadata.editable) {
-                mMembersListFragment.setCheckBoxListListener(this);
+                mMembersFragment.setCheckBoxListListener(this);
             }
 
             invalidateOptionsMenu();
@@ -392,7 +391,7 @@
                 intent.putExtra(UiIntentActions.GROUP_ACCOUNT_TYPE, mGroupMetadata.accountType);
                 intent.putExtra(UiIntentActions.GROUP_ACCOUNT_DATA_SET, mGroupMetadata.dataSet);
                 intent.putExtra(UiIntentActions.GROUP_CONTACT_IDS,
-                        mMembersListFragment.getMemberContactIds());
+                        mMembersFragment.getMemberContactIds());
                 startActivityForResult(intent, RESULT_GROUP_ADD_MEMBER);
                 return true;
             }
@@ -406,7 +405,7 @@
                 return true;
             }
             case R.id.menu_remove_from_group: {
-                if (mMembersListFragment == null) {
+                if (mMembersFragment == null) {
                     return false;
                 }
                 logListEvent();
@@ -418,7 +417,7 @@
     }
 
     private void deleteGroup() {
-        if (mMembersListFragment.getMemberCount() == 0) {
+        if (mMembersFragment.getMemberCount() == 0) {
             final Intent intent = ContactSaveService.createGroupDeletionIntent(
                     this, mGroupMetadata.groupId,
                     GroupMembersActivity.class, ACTION_DELETE_GROUP);
@@ -432,15 +431,15 @@
     private void logListEvent() {
         Logger.logListEvent(
                 ListEvent.ActionType.REMOVE_LABEL,
-                mMembersListFragment.getListType(),
-                mMembersListFragment.getAdapter().getCount(),
+                mMembersFragment.getListType(),
+                mMembersFragment.getAdapter().getCount(),
                 /* clickedIndex */ -1,
-                mMembersListFragment.getAdapter().getSelectedContactIdsArray().length);
+                mMembersFragment.getAdapter().getSelectedContactIdsArray().length);
     }
 
     private void removeSelectedContacts() {
         final long[] rawContactsToRemove =
-                mMembersListFragment.getAdapter().getSelectedContactIdsArray();
+                mMembersFragment.getAdapter().getSelectedContactIdsArray();
         final Intent intent = ContactSaveService.createGroupUpdateIntent(
                 this, mGroupMetadata.groupId, /* groupName */ null,
                 /* rawContactsToAdd */ null, rawContactsToRemove, getClass(),
@@ -461,8 +460,8 @@
             finish();
         } else if (mActionBarAdapter.isSelectionMode()) {
             mActionBarAdapter.setSelectionMode(false);
-            if (mMembersListFragment != null) {
-                mMembersListFragment.displayCheckBoxes(false);
+            if (mMembersFragment != null) {
+                mMembersFragment.displayCheckBoxes(false);
             }
         } else if (mActionBarAdapter.isSearchMode()) {
             mActionBarAdapter.setSearchMode(false);
@@ -522,16 +521,16 @@
     public void onAction(int action) {
         switch (action) {
             case ActionBarAdapter.Listener.Action.START_SELECTION_MODE:
-                if (mMembersListFragment != null) {
-                    mMembersListFragment.displayCheckBoxes(true);
+                if (mMembersFragment != null) {
+                    mMembersFragment.displayCheckBoxes(true);
                 }
                 invalidateOptionsMenu();
                 showFabWithAnimation(/* showFabWithAnimation = */ false);
                 break;
             case ActionBarAdapter.Listener.Action.STOP_SEARCH_AND_SELECTION_MODE:
                 mActionBarAdapter.setSearchMode(false);
-                if (mMembersListFragment != null) {
-                    mMembersListFragment.displayCheckBoxes(false);
+                if (mMembersFragment != null) {
+                    mMembersFragment.displayCheckBoxes(false);
                 }
                 invalidateOptionsMenu();
                 showFabWithAnimation(/* showFabWithAnimation */ true);
@@ -564,7 +563,7 @@
 
     @Override
     public void onSelectedContactIdsChanged() {
-        mActionBarAdapter.setSelectionCount(mMembersListFragment.getSelectedContactIds().size());
+        mActionBarAdapter.setSelectionCount(mMembersFragment.getSelectedContactIds().size());
     }
 
     @Override
@@ -615,7 +614,7 @@
 
     @Override
     public void onGroupMemberListItemClicked(int position, Uri contactLookupUri) {
-        final int count = mMembersListFragment.getAdapter().getCount();
+        final int count = mMembersFragment.getAdapter().getCount();
         Logger.logListEvent(ListEvent.ActionType.CLICK, ListEvent.ListType.GROUP, count,
                 /* clickedIndex */ position, /* numSelected */ 0);
         final Intent intent = ImplicitIntentsUtil.composeQuickContactIntent(
diff --git a/src/com/android/contacts/group/GroupMembersListAdapter.java b/src/com/android/contacts/group/GroupMembersAdapter.java
similarity index 97%
rename from src/com/android/contacts/group/GroupMembersListAdapter.java
rename to src/com/android/contacts/group/GroupMembersAdapter.java
index e84dde7..8bbbe6c 100644
--- a/src/com/android/contacts/group/GroupMembersListAdapter.java
+++ b/src/com/android/contacts/group/GroupMembersAdapter.java
@@ -34,7 +34,7 @@
 import com.android.contacts.common.preference.ContactsPreferences;
 
 /** Group members cursor adapter. */
-public class GroupMembersListAdapter extends MultiSelectEntryContactListAdapter {
+public class GroupMembersAdapter extends MultiSelectEntryContactListAdapter {
 
     public static class GroupMembersQuery {
 
@@ -70,7 +70,7 @@
     private final CharSequence mUnknownNameText;
     private long mGroupId;
 
-    public GroupMembersListAdapter(Context context) {
+    public GroupMembersAdapter(Context context) {
         super(context, GroupMembersQuery.RAW_CONTACT_ID);
         mUnknownNameText = context.getText(R.string.missing_name);
         setSectionHeaderDisplayEnabled(true);
diff --git a/src/com/android/contacts/group/GroupMembersListFragment.java b/src/com/android/contacts/group/GroupMembersFragment.java
similarity index 93%
rename from src/com/android/contacts/group/GroupMembersListFragment.java
rename to src/com/android/contacts/group/GroupMembersFragment.java
index 056e251..bdb246a 100644
--- a/src/com/android/contacts/group/GroupMembersListFragment.java
+++ b/src/com/android/contacts/group/GroupMembersFragment.java
@@ -33,7 +33,7 @@
 import com.android.contacts.common.logging.ListEvent.ListType;
 import com.android.contacts.common.model.AccountTypeManager;
 import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.group.GroupMembersListAdapter.GroupMembersQuery;
+import com.android.contacts.group.GroupMembersAdapter.GroupMembersQuery;
 import com.android.contacts.list.MultiSelectContactsListFragment;
 
 import java.util.ArrayList;
@@ -41,8 +41,7 @@
 import java.util.Set;
 
 /** Displays the members of a group. */
-public class GroupMembersListFragment extends
-        MultiSelectContactsListFragment<GroupMembersListAdapter> {
+public class GroupMembersFragment extends MultiSelectContactsListFragment<GroupMembersAdapter> {
 
     private static final String TAG = "GroupMembers";
 
@@ -53,8 +52,8 @@
 
     private static final int LOADER_GROUP_METADATA = 0;
 
-    /** Callbacks for hosts of {@link GroupMembersListFragment}. */
-    public interface GroupMembersListListener {
+    /** Callbacks for hosts of {@link GroupMembersFragment}. */
+    public interface GroupMembersListener {
 
         /** Invoked after group metadata for the passed in group URI has loaded. */
         void onGroupMetadataLoaded(GroupMetadata groupMetadata);
@@ -183,22 +182,22 @@
 
     private Uri mGroupUri;
 
-    private GroupMembersListListener mListener;
+    private GroupMembersListener mListener;
 
     private GroupMetadata mGroupMetadata;
 
     private Set<String> mGroupMemberContactIds = new HashSet();
 
-    public static GroupMembersListFragment newInstance(Uri groupUri) {
+    public static GroupMembersFragment newInstance(Uri groupUri) {
         final Bundle args = new Bundle();
         args.putParcelable(ARG_GROUP_URI, groupUri);
 
-        final GroupMembersListFragment fragment = new GroupMembersListFragment();
+        final GroupMembersFragment fragment = new GroupMembersFragment();
         fragment.setArguments(args);
         return fragment;
     }
 
-    public GroupMembersListFragment() {
+    public GroupMembersFragment() {
         setHasOptionsMenu(true);
 
         setPhotoLoaderEnabled(true);
@@ -209,7 +208,7 @@
         setListType(ListType.GROUP);
     }
 
-    public void setListener(GroupMembersListListener listener) {
+    public void setListener(GroupMembersListener listener) {
         mListener = listener;
     }
 
@@ -298,8 +297,8 @@
     }
 
     @Override
-    protected GroupMembersListAdapter createListAdapter() {
-        final GroupMembersListAdapter adapter = new GroupMembersListAdapter(getContext());
+    protected GroupMembersAdapter createListAdapter() {
+        final GroupMembersAdapter adapter = new GroupMembersAdapter(getContext());
         adapter.setDisplayPhotos(true);
         return adapter;
     }
