diff --git a/src/com/android/contacts/ContactsDrawerActivity.java b/src/com/android/contacts/ContactsDrawerActivity.java
index 497295d..caaa326 100644
--- a/src/com/android/contacts/ContactsDrawerActivity.java
+++ b/src/com/android/contacts/ContactsDrawerActivity.java
@@ -420,7 +420,8 @@
                         mToggle.runWhenIdle(new Runnable() {
                             @Override
                             public void run() {
-                                onGroupMenuItemClicked(groupListItem);
+                                onGroupMenuItemClicked(groupListItem.getGroupId(),
+                                        groupListItem.getTitle());
                                 updateMenuSelection(menuItem);
                             }
                         });
@@ -491,7 +492,7 @@
         return isGroupView() || isAssistantView();
     }
 
-    protected abstract void onGroupMenuItemClicked(GroupListItem group);
+    protected abstract void onGroupMenuItemClicked(long groupId, String title);
 
     protected void onCreateGroupMenuItemClicked() {
         // Select the account to create the group
@@ -586,7 +587,6 @@
     }
 
     protected void onFilterMenuItemClicked(Intent intent) {
-        resetFilter();
         AccountFilterUtil.handleAccountFilterResult(mContactListFilterController,
                 AppCompatActivity.RESULT_OK, intent);
     }
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index bbe9721..19a0c55 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -22,6 +22,7 @@
 import android.app.FragmentTransaction;
 import android.content.BroadcastReceiver;
 import android.content.ContentResolver;
+import android.content.ContentUris;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
@@ -29,6 +30,7 @@
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
+import android.provider.ContactsContract;
 import android.provider.ContactsContract.ProviderStatus;
 import android.support.design.widget.CoordinatorLayout;
 import android.support.design.widget.Snackbar;
@@ -65,7 +67,6 @@
 import com.android.contacts.common.util.Constants;
 import com.android.contacts.common.util.ImplicitIntentsUtil;
 import com.android.contacts.common.widget.FloatingActionButtonController;
-import com.android.contacts.group.GroupListItem;
 import com.android.contacts.group.GroupMembersFragment;
 import com.android.contacts.group.GroupMetaData;
 import com.android.contacts.group.GroupUtil;
@@ -769,18 +770,12 @@
     }
 
     @Override
-    protected void onGroupMenuItemClicked(GroupListItem group) {
+    protected void onGroupMenuItemClicked(long groupId, String title) {
         if (isGroupView() && mMembersFragment != null
-                && mMembersFragment.isCurrentGroup(group.getGroupId())) {
+                && mMembersFragment.isCurrentGroup(groupId)) {
             return;
         }
-        mGroupUri = group.getUri();
-        // Set the filter. This isn't used by the GroupMembersFragment but makes sure that the
-        // filter will change when switching to a different view from the GroupMembersFragment.
-        mContactListFilterController.setContactListFilter(
-                ContactListFilter.createGroupMembersFilter(group.getAccountName(),
-                        group.getAccountType(), group.getDataSet()), /* persistent */ false,
-                /* notifyListeners */ false);
+        mGroupUri = ContentUris.withAppendedId(ContactsContract.Groups.CONTENT_URI, groupId);
         switchToOrUpdateGroupView(GroupUtil.ACTION_SWITCH_GROUP);
     }
 
diff --git a/src/com/android/contacts/common/list/ContactListFilterController.java b/src/com/android/contacts/common/list/ContactListFilterController.java
index 36e740f..4d3d6ad 100644
--- a/src/com/android/contacts/common/list/ContactListFilterController.java
+++ b/src/com/android/contacts/common/list/ContactListFilterController.java
@@ -71,9 +71,6 @@
      */
     public abstract void setContactListFilter(ContactListFilter filter, boolean persistent);
 
-    public abstract void setContactListFilter(ContactListFilter filter, boolean persistent,
-            boolean notifyListeners);
-
     public abstract void selectCustomFilter();
 
     /**
@@ -142,8 +139,7 @@
         setContactListFilter(filter, persistent, /* notifyListeners */ true);
     }
 
-    @Override
-    public void setContactListFilter(ContactListFilter filter, boolean persistent,
+    private void setContactListFilter(ContactListFilter filter, boolean persistent,
             boolean notifyListeners) {
         if (!filter.equals(mFilter)) {
             mFilter = filter;
diff --git a/src/com/android/contacts/group/GroupListItem.java b/src/com/android/contacts/group/GroupListItem.java
index 2906821..f2359b6 100644
--- a/src/com/android/contacts/group/GroupListItem.java
+++ b/src/com/android/contacts/group/GroupListItem.java
@@ -15,10 +15,6 @@
  */
 package com.android.contacts.group;
 
-import android.content.ContentUris;
-import android.net.Uri;
-import android.provider.ContactsContract;
-
 /**
  * Meta-data for a contact group.  We load all groups associated with the contact's
  * constituent accounts.
@@ -87,8 +83,4 @@
     public String getSystemId() {
         return mSystemId;
     }
-
-    public Uri getUri() {
-        return ContentUris.withAppendedId(ContactsContract.Groups.CONTENT_URI, mGroupId);
-    }
 }
\ No newline at end of file
