diff --git a/res/values/strings.xml b/res/values/strings.xml
index c030cf0..a15619a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1357,6 +1357,9 @@
     <!-- Contact list filter selection indicating that the list shows groups chosen by the user [CHAR LIMIT=64] -->
     <string name="list_filter_customize">Customize...</string>
 
+    <!-- Contact list filter selection indicating that the list shows all contacts with phone numbers [CHAR LIMIT=64] -->
+    <string name="list_filter_phones">Contacts with phone numbers</string>
+
     <!-- Title of the activity that allows the user to customize filtering of contact list [CHAR LIMIT=128] -->
     <string name="custom_list_filter">Define custom view</string>
 
diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index aa75414..149260f 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -23,6 +23,7 @@
 import com.android.contacts.list.ContactBrowseListContextMenuAdapter;
 import com.android.contacts.list.ContactBrowseListFragment;
 import com.android.contacts.list.ContactEntryListFragment;
+import com.android.contacts.list.ContactListFilter;
 import com.android.contacts.list.ContactListFilterController;
 import com.android.contacts.list.ContactsIntentResolver;
 import com.android.contacts.list.ContactsRequest;
@@ -172,11 +173,9 @@
         mHasActionBar = getWindow().hasFeature(Window.FEATURE_ACTION_BAR);
         mContactContentDisplayed = findViewById(R.id.detail_container) != null;
 
-        Uri contactUri = null;
         if (mRequest.getActionCode() == ContactsRequest.ACTION_VIEW_CONTACT) {
-            contactUri = mRequest.getContactUri();
             if (!mContactContentDisplayed) {
-                startActivity(new Intent(Intent.ACTION_VIEW, contactUri));
+                startActivity(new Intent(Intent.ACTION_VIEW, mRequest.getContactUri()));
                 finish();
                 return;
             }
@@ -190,10 +189,7 @@
             // TODO: request may ask for FREQUENT - set the filter accordingly
         }
 
-        configureListFragment(contactUri);
-        if (contactUri != null) {
-            setSelectedContactUri(contactUri);
-        }
+        configureListFragment(true /* from request */);
 
         if (mContactContentDisplayed) {
             setupContactDetailFragment(mListFragment.getSelectedContactUri());
@@ -238,20 +234,28 @@
         return TextUtils.isEmpty(uriString) ? null : Uri.parse(uriString);
     }
 
-    private void configureListFragment(Uri selectedContactUri) {
+    private void configureListFragment(boolean fromRequest) {
         boolean searchMode = mSearchMode;
-        if (mHasActionBar) {
-            searchMode = mActionBarAdapter.isSearchMode();
+        if (fromRequest) {
+            if (mRequest.getDisplayWithPhoneNumbersOnly()) {
+                mContactListFilterController.setContactListFilter(new ContactListFilter(
+                        ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY), false);
+                searchMode = false;
+            }
         } else {
+            if (mHasActionBar) {
+                searchMode = mActionBarAdapter.isSearchMode();
+            } else {
 // TODO: reenable FREQUENT, STARRED and STREQUENT
-//            int actionCode = mRequest.getActionCode();
-//            if (actionCode == ContactsRequest.ACTION_FREQUENT ||
-//                    actionCode == ContactsRequest.ACTION_STARRED ||
-//                    actionCode == ContactsRequest.ACTION_STREQUENT) {
-//                mode = ContactBrowserMode.MODE_FAVORITES;
-//            } else {
-//                mode = ContactBrowserMode.MODE_CONTACTS;
-//            }
+//                int actionCode = mRequest.getActionCode();
+//                if (actionCode == ContactsRequest.ACTION_FREQUENT ||
+//                        actionCode == ContactsRequest.ACTION_STARRED ||
+//                        actionCode == ContactsRequest.ACTION_STREQUENT) {
+//                    mode = ContactBrowserMode.MODE_FAVORITES;
+//                } else {
+//                    mode = ContactBrowserMode.MODE_CONTACTS;
+//                }
+            }
         }
 
         boolean replaceList = mListFragment == null || (mSearchMode != searchMode);
@@ -283,13 +287,16 @@
             }
         }
 
-        Uri selectUri;
-        if (selectedContactUri != null) {
-            selectUri = selectedContactUri;
-        } else if (mListFragment.getSelectedContactUri() == null) {
+        Uri selectUri = null;
+        if (fromRequest) {
+            selectUri = mRequest.getContactUri();
+            if (selectUri != null) {
+                setSelectedContactUri(selectUri);
+            }
+        }
+
+        if (selectUri == null && mListFragment.getSelectedContactUri() == null) {
             selectUri = getDefaultSelectedContactUri();
-        } else {
-            selectUri = null;
         }
 
         if (selectUri != null) {
@@ -422,7 +429,7 @@
      */
     @Override
     public void onAction() {
-        configureListFragment(null);
+        configureListFragment(false /* from request */);
         setupContactDetailFragment(mListFragment.getSelectedContactUri());
     }
 
@@ -435,8 +442,6 @@
                 DefaultContactBrowseListFragment fragment = new DefaultContactBrowseListFragment();
                 fragment.setContactsRequest(mRequest);
                 fragment.setOnContactListActionListener(new ContactBrowserActionListener());
-                fragment.setDisplayWithPhonesOnlyOption(mRequest.getDisplayWithPhonesOnlyOption());
-                fragment.setVisibleContactsRestrictionEnabled(mRequest.getDisplayOnlyVisible());
                 fragment.setContextMenuAdapter(new ContactBrowseListContextMenuAdapter(fragment));
                 fragment.setSearchMode(mRequest.isSearchMode());
                 fragment.setQueryString(mRequest.getQueryString());
@@ -491,8 +496,6 @@
     private ContactBrowseListFragment createContactSearchFragment() {
         DefaultContactBrowseListFragment fragment = new DefaultContactBrowseListFragment();
         fragment.setOnContactListActionListener(new ContactBrowserActionListener());
-        fragment.setDisplayWithPhonesOnlyOption(ContactsRequest.DISPLAY_ONLY_WITH_PHONES_DISABLED);
-        fragment.setVisibleContactsRestrictionEnabled(true);
         fragment.setContextMenuAdapter(new ContactBrowseListContextMenuAdapter(fragment));
         fragment.setSearchMode(true);
         fragment.setDirectorySearchEnabled(true);
diff --git a/src/com/android/contacts/activities/ContactSearchActivity.java b/src/com/android/contacts/activities/ContactSearchActivity.java
index cac3e1e..708099c 100644
--- a/src/com/android/contacts/activities/ContactSearchActivity.java
+++ b/src/com/android/contacts/activities/ContactSearchActivity.java
@@ -95,8 +95,6 @@
     private ContactBrowseListFragment createContactSearchFragment() {
         DefaultContactBrowseListFragment fragment = new DefaultContactBrowseListFragment();
         fragment.setOnContactListActionListener(new ContactBrowserActionListener());
-        fragment.setDisplayWithPhonesOnlyOption(ContactsRequest.DISPLAY_ONLY_WITH_PHONES_DISABLED);
-        fragment.setVisibleContactsRestrictionEnabled(true);
         fragment.setContextMenuAdapter(new ContactBrowseListContextMenuAdapter(fragment));
         fragment.setSearchMode(true);
         fragment.setDirectorySearchEnabled(true);
diff --git a/src/com/android/contacts/activities/ContactSelectionActivity.java b/src/com/android/contacts/activities/ContactSelectionActivity.java
index 66d06d2..bd2834d 100644
--- a/src/com/android/contacts/activities/ContactSelectionActivity.java
+++ b/src/com/android/contacts/activities/ContactSelectionActivity.java
@@ -142,8 +142,6 @@
                 fragment.setOnContactListActionListener(new ContactBrowserActionListener());
                 fragment.setEditMode(true);
                 fragment.setCreateContactEnabled(true);
-                fragment.setDisplayWithPhonesOnlyOption(mRequest.getDisplayWithPhonesOnlyOption());
-                fragment.setVisibleContactsRestrictionEnabled(mRequest.getDisplayOnlyVisible());
                 fragment.setSearchMode(mRequest.isSearchMode());
                 fragment.setQueryString(mRequest.getQueryString());
                 fragment.setDirectorySearchEnabled(false);
diff --git a/src/com/android/contacts/list/ContactListFilter.java b/src/com/android/contacts/list/ContactListFilter.java
index 47b35d1..0189bbb 100644
--- a/src/com/android/contacts/list/ContactListFilter.java
+++ b/src/com/android/contacts/list/ContactListFilter.java
@@ -25,12 +25,13 @@
  */
 public final class ContactListFilter implements Comparable<ContactListFilter> {
 
-    public static final int FILTER_TYPE_ALL_ACCOUNTS = -1;
-    public static final int FILTER_TYPE_CUSTOM = -2;
-    public static final int FILTER_TYPE_STARRED = -3;
-    public static final int FILTER_TYPE_DEFAULT = -4;
+    public static final int FILTER_TYPE_DEFAULT = -1;
+    public static final int FILTER_TYPE_ALL_ACCOUNTS = -2;
+    public static final int FILTER_TYPE_CUSTOM = -3;
+    public static final int FILTER_TYPE_STARRED = -4;
+    public static final int FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY = -5;
+
     public static final int FILTER_TYPE_ACCOUNT = 0;
-    public static final int FILTER_TYPE_ = 0;
     public static final int FILTER_TYPE_GROUP = 1;
 
     private static final String KEY_FILTER_TYPE = "filter.type";
@@ -67,6 +68,13 @@
         this.title = title;
     }
 
+    /**
+     * Returns true if this filter is based on data and may become invalid over time.
+     */
+    public boolean isValidationRequired() {
+        return filterType == FILTER_TYPE_ACCOUNT || filterType == FILTER_TYPE_GROUP;
+    }
+
     @Override
     public String toString() {
         switch (filterType) {
diff --git a/src/com/android/contacts/list/ContactListFilterController.java b/src/com/android/contacts/list/ContactListFilterController.java
index 2ae3b36..2b406a3 100644
--- a/src/com/android/contacts/list/ContactListFilterController.java
+++ b/src/com/android/contacts/list/ContactListFilterController.java
@@ -141,10 +141,7 @@
             mFilterList.clear();
         }
 
-        boolean filterValid = mFilter != null
-                && (mFilter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS
-                        || mFilter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM
-                        || mFilter.filterType == ContactListFilter.FILTER_TYPE_STARRED);
+        boolean filterValid = mFilter != null && !mFilter.isValidationRequired();
 
         int accountCount = 0;
         int count = filters.size();
@@ -221,7 +218,7 @@
         }
     }
 
-    protected void setContactListFilter(int filterId) {
+    private void setContactListFilter(int filterId) {
         ContactListFilter filter;
         if (filterId == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
             filter = new ContactListFilter(ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS);
@@ -236,11 +233,17 @@
             }
         }
 
+        setContactListFilter(filter, true);
+    }
+
+    public void setContactListFilter(ContactListFilter filter, boolean persistent) {
         if (!filter.equals(mFilter)) {
             mFilter = filter;
             ContactListFilter.storeToPreferences(getSharedPreferences(), mFilter);
             updateFilterView();
-            mListener.onContactListFilterChanged();
+            if (mListener != null) {
+                mListener.onContactListFilterChanged();
+            }
         }
     }
 
diff --git a/src/com/android/contacts/list/ContactListFilterView.java b/src/com/android/contacts/list/ContactListFilterView.java
index ecd0196..dc88207 100644
--- a/src/com/android/contacts/list/ContactListFilterView.java
+++ b/src/com/android/contacts/list/ContactListFilterView.java
@@ -80,6 +80,10 @@
                         dropdown ? R.string.list_filter_customize : R.string.list_filter_custom);
                 break;
             }
+            case ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY: {
+                bindView(0, R.string.list_filter_phones);
+                break;
+            }
             case ContactListFilter.FILTER_TYPE_ACCOUNT: {
                 if (mIcon != null) {
                     mIcon.setVisibility(View.VISIBLE);
diff --git a/src/com/android/contacts/list/ContactPickerFragment.java b/src/com/android/contacts/list/ContactPickerFragment.java
index 166294b..9bc4d8d 100644
--- a/src/com/android/contacts/list/ContactPickerFragment.java
+++ b/src/com/android/contacts/list/ContactPickerFragment.java
@@ -117,9 +117,6 @@
         super.configureAdapter();
 
         ContactEntryListAdapter adapter = getAdapter();
-        if (adapter instanceof DefaultContactListAdapter) {
-            ((DefaultContactListAdapter)adapter).setVisibleContactsOnly(true);
-        }
 
         // If "Create new contact" is shown, don't display the empty list UI
         adapter.setEmptyListEnabled(!isCreateContactEnabled());
diff --git a/src/com/android/contacts/list/ContactsIntentResolver.java b/src/com/android/contacts/list/ContactsIntentResolver.java
index 79dc1b0..d1525fb 100644
--- a/src/com/android/contacts/list/ContactsIntentResolver.java
+++ b/src/com/android/contacts/list/ContactsIntentResolver.java
@@ -61,17 +61,12 @@
 
         if (UI.LIST_DEFAULT.equals(action) ) {
             request.setActionCode(ContactsRequest.ACTION_DEFAULT);
-            request.setDisplayWithPhonesOnlyOption(
-                    ContactsRequest.DISPLAY_ONLY_WITH_PHONES_PREFERENCE);
         } else if (UI.LIST_ALL_CONTACTS_ACTION.equals(action)) {
             request.setActionCode(ContactsRequest.ACTION_DEFAULT);
-            request.setDisplayWithPhonesOnlyOption(
-                    ContactsRequest.DISPLAY_ONLY_WITH_PHONES_DISABLED);
             request.setDisplayOnlyVisible(false);
         } else if (UI.LIST_CONTACTS_WITH_PHONES_ACTION.equals(action)) {
             request.setActionCode(ContactsRequest.ACTION_DEFAULT);
-            request.setDisplayWithPhonesOnlyOption(
-                    ContactsRequest.DISPLAY_ONLY_WITH_PHONES_ENABLED);
+            request.setDisplayWithPhoneNumbersOnly(true);
         } else if (UI.LIST_STARRED_ACTION.equals(action)) {
             request.setActionCode(ContactsRequest.ACTION_STARRED);
         } else if (UI.LIST_FREQUENT_ACTION.equals(action)) {
diff --git a/src/com/android/contacts/list/ContactsRequest.java b/src/com/android/contacts/list/ContactsRequest.java
index e8ccb43..331dc93 100644
--- a/src/com/android/contacts/list/ContactsRequest.java
+++ b/src/com/android/contacts/list/ContactsRequest.java
@@ -74,12 +74,7 @@
     private CharSequence mTitle;
     private boolean mSearchMode;
     private String mQueryString;
-
-    public static final int DISPLAY_ONLY_WITH_PHONES_PREFERENCE = 0;
-    public static final int DISPLAY_ONLY_WITH_PHONES_ENABLED = 1;
-    public static final int DISPLAY_ONLY_WITH_PHONES_DISABLED = 2;
-
-    private int mDisplayOnlyWithPhones;
+    private boolean mDisplayOnlyWithPhones;
     private boolean mDisplayOnlyVisible;
     private String mGroupName;
     private boolean mLegacyCompatibilityMode;
@@ -119,7 +114,7 @@
             request.mTitle = source.readCharSequence();
             request.mSearchMode = source.readInt() != 0;
             request.mQueryString = source.readString();
-            request.mDisplayOnlyWithPhones = source.readInt();
+            request.mDisplayOnlyWithPhones = source.readInt() != 0;
             request.mDisplayOnlyVisible = source.readInt() != 0;
             request.mGroupName = source.readString();
             request.mLegacyCompatibilityMode  = source.readInt() != 0;
@@ -136,7 +131,7 @@
         dest.writeCharSequence(mTitle);
         dest.writeInt(mSearchMode ? 1 : 0);
         dest.writeString(mQueryString);
-        dest.writeInt(mDisplayOnlyWithPhones);
+        dest.writeInt(mDisplayOnlyWithPhones ? 1 : 0);
         dest.writeInt(mDisplayOnlyVisible ? 1 : 0);
         dest.writeString(mGroupName);
         dest.writeInt(mLegacyCompatibilityMode ? 1 : 0);
@@ -188,11 +183,11 @@
         mDisplayOnlyVisible = flag;
     }
 
-    public int getDisplayWithPhonesOnlyOption() {
+    public boolean getDisplayWithPhoneNumbersOnly() {
         return mDisplayOnlyWithPhones;
     }
 
-    public void setDisplayWithPhonesOnlyOption(int option) {
+    public void setDisplayWithPhoneNumbersOnly(boolean option) {
         mDisplayOnlyWithPhones = option;
     }
 
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index ca93e0c..10f2290 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -16,14 +16,11 @@
 package com.android.contacts.list;
 
 import com.android.contacts.R;
-import com.android.contacts.preference.ContactsPreferences;
 
 import android.app.Activity;
 import android.content.Intent;
-import android.content.SharedPreferences;
 import android.database.Cursor;
 import android.os.Bundle;
-import android.preference.PreferenceManager;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -40,16 +37,12 @@
 
     private static final String KEY_EDIT_MODE = "editMode";
     private static final String KEY_CREATE_CONTACT_ENABLED = "createContactEnabled";
-    private static final String KEY_DISPLAY_WITH_PHONES_ONLY = "displayWithPhonesOnly";
-    private static final String KEY_VISIBLE_CONTACTS_RESTRICTION = "visibleContactsRestriction";
     private static final String KEY_FILTER_ENABLED = "filterEnabled";
 
     private static final int REQUEST_CODE_CUSTOMIZE_FILTER = 3;
 
     private boolean mEditMode;
     private boolean mCreateContactEnabled;
-    private int mDisplayWithPhonesOnlyOption = ContactsRequest.DISPLAY_ONLY_WITH_PHONES_DISABLED;
-    private boolean mVisibleContactsRestrictionEnabled = true;
     private View mCounterHeaderView;
     private View mSearchHeaderView;
 
@@ -72,8 +65,6 @@
         super.onSaveInstanceState(outState);
         outState.putBoolean(KEY_EDIT_MODE, mEditMode);
         outState.putBoolean(KEY_CREATE_CONTACT_ENABLED, mCreateContactEnabled);
-        outState.putInt(KEY_DISPLAY_WITH_PHONES_ONLY, mDisplayWithPhonesOnlyOption);
-        outState.putBoolean(KEY_VISIBLE_CONTACTS_RESTRICTION, mVisibleContactsRestrictionEnabled);
         outState.putBoolean(KEY_FILTER_ENABLED, mFilterEnabled);
     }
 
@@ -87,47 +78,10 @@
 
         mEditMode = savedState.getBoolean(KEY_EDIT_MODE);
         mCreateContactEnabled = savedState.getBoolean(KEY_CREATE_CONTACT_ENABLED);
-        mDisplayWithPhonesOnlyOption = savedState.getInt(KEY_DISPLAY_WITH_PHONES_ONLY);
-        mVisibleContactsRestrictionEnabled =
-                savedState.getBoolean(KEY_VISIBLE_CONTACTS_RESTRICTION);
         setFilterEnabled(savedState.getBoolean(KEY_FILTER_ENABLED));
     }
 
     @Override
-    protected void prepareEmptyView() {
-        if (isShowingContactsWithPhonesOnly()) {
-            setEmptyText(R.string.noContactsWithPhoneNumbers);
-        } else {
-            super.prepareEmptyView();
-        }
-    }
-
-    private boolean isShowingContactsWithPhonesOnly() {
-        switch (mDisplayWithPhonesOnlyOption) {
-            case ContactsRequest.DISPLAY_ONLY_WITH_PHONES_DISABLED:
-                return false;
-            case ContactsRequest.DISPLAY_ONLY_WITH_PHONES_ENABLED:
-                return true;
-            case ContactsRequest.DISPLAY_ONLY_WITH_PHONES_PREFERENCE:
-                SharedPreferences prefs = PreferenceManager
-                        .getDefaultSharedPreferences(getContext());
-                return prefs.getBoolean(ContactsPreferences.PREF_DISPLAY_ONLY_PHONES,
-                        ContactsPreferences.PREF_DISPLAY_ONLY_PHONES_DEFAULT);
-        }
-        return false;
-    }
-
-    public void setDisplayWithPhonesOnlyOption(int displayWithPhonesOnly) {
-        mDisplayWithPhonesOnlyOption = displayWithPhonesOnly;
-        configureAdapter();
-    }
-
-    public void setVisibleContactsRestrictionEnabled(boolean flag) {
-        mVisibleContactsRestrictionEnabled = flag;
-        configureAdapter();
-    }
-
-    @Override
     protected void onItemClick(int position, long id) {
         ContactListAdapter adapter = getAdapter();
         if (isEditMode()) {
@@ -154,12 +108,8 @@
         super.configureAdapter();
 
         DefaultContactListAdapter adapter = (DefaultContactListAdapter)getAdapter();
-        if (adapter != null) {
-            adapter.setContactsWithPhoneNumbersOnly(isShowingContactsWithPhonesOnly());
-            adapter.setVisibleContactsOnly(mVisibleContactsRestrictionEnabled);
-            if (mFilterEnabled && mFilterController != null) {
-                adapter.setFilter(mFilterController.getFilter(), mFilterController.getFilterList());
-            }
+        if (adapter != null && mFilterEnabled && mFilterController != null) {
+            adapter.setFilter(mFilterController.getFilter(), mFilterController.getFilterList());
         }
     }
 
diff --git a/src/com/android/contacts/list/DefaultContactListAdapter.java b/src/com/android/contacts/list/DefaultContactListAdapter.java
index 4160931..ede3597 100644
--- a/src/com/android/contacts/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/list/DefaultContactListAdapter.java
@@ -15,11 +15,15 @@
  */
 package com.android.contacts.list;
 
+import com.android.contacts.preference.ContactsPreferences;
+
 import android.content.Context;
 import android.content.CursorLoader;
+import android.content.SharedPreferences;
 import android.database.Cursor;
 import android.net.Uri;
 import android.net.Uri.Builder;
+import android.preference.PreferenceManager;
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
 import android.provider.ContactsContract.Contacts;
@@ -37,21 +41,10 @@
  */
 public class DefaultContactListAdapter extends ContactListAdapter {
 
-    private boolean mContactsWithPhoneNumbersOnly;
-    private boolean mVisibleContactsOnly;
-
     public DefaultContactListAdapter(Context context) {
         super(context);
     }
 
-    public void setContactsWithPhoneNumbersOnly(boolean flag) {
-        mContactsWithPhoneNumbersOnly = flag;
-    }
-
-    public void setVisibleContactsOnly(boolean flag) {
-        mVisibleContactsOnly = flag;
-    }
-
     @Override
     public void configureLoader(CursorLoader loader, long directoryId) {
 
@@ -141,14 +134,14 @@
                 selection.append(Contacts.STARRED + "!=0");
                 break;
             }
+            case ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY: {
+                selection.append(Contacts.HAS_PHONE_NUMBER + "=1");
+                break;
+            }
             case ContactListFilter.FILTER_TYPE_CUSTOM: {
-                if (mVisibleContactsOnly && mContactsWithPhoneNumbersOnly) {
-                    selection.append(Contacts.IN_VISIBLE_GROUP + "=1"
-                            + " AND " + Contacts.HAS_PHONE_NUMBER + "=1");
-                } else if (mVisibleContactsOnly) {
-                    selection.append(Contacts.IN_VISIBLE_GROUP + "=1");
-                } else if (mContactsWithPhoneNumbersOnly) {
-                    selection.append(Contacts.HAS_PHONE_NUMBER + "=1");
+                selection.append(Contacts.IN_VISIBLE_GROUP + "=1");
+                if (isCustomFilterForPhoneNumbersOnly()) {
+                    selection.append(" AND " + Contacts.HAS_PHONE_NUMBER + "=1");
                 }
                 break;
             }
@@ -202,4 +195,11 @@
             bindSearchSnippet(view, cursor);
         }
     }
+
+    private boolean isCustomFilterForPhoneNumbersOnly() {
+        // TODO: this flag should not be stored in shared prefs.  It needs to be in the db.
+        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
+        return prefs.getBoolean(ContactsPreferences.PREF_DISPLAY_ONLY_PHONES,
+                ContactsPreferences.PREF_DISPLAY_ONLY_PHONES_DEFAULT);
+    }
 }
diff --git a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
index 94f2aad..4fcd76d 100644
--- a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
+++ b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
@@ -53,7 +53,7 @@
     private static final String ANDROID_CONTACTS_PACKAGE = "com.android.contacts";
 
     private static final String CONTACT_LIST_ACTIVITY_CLASS_NAME =
-            "com.android.contacts.activities.ContactListActivity";
+            "com.android.contacts.activities.ContactBrowserActivity";
     private static final String SEARCH_RESULTS_ACTIVITY_CLASS_NAME =
             "com.android.contacts.SearchResultsActivity";
     private static final String MULTIPLE_PHONE_PICKER_ACTIVITY_CLASS_NAME =
