diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index 2eb54ca..9e3f067 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -464,6 +464,7 @@
 
         switch (mMode) {
             case MODE_DEFAULT:
+            case MODE_CUSTOM:
             case MODE_INSERT_OR_EDIT_CONTACT:
             case MODE_QUERY_PICK_TO_EDIT:
             case MODE_FREQUENT:
@@ -486,6 +487,11 @@
                     fragment.setSearchResultsMode(true);
                 }
 
+                fragment.setContactsWithPhonesOnlyRestrictionEnabled(
+                        mIntentResolver.isContactsWithPhonesOnlyRestrictionEnabled());
+                fragment.setVisibleContactsRestrictionEnabled(
+                        mIntentResolver.isVisibleContactsRestrictionEnabled());
+
                 fragment.setOnContactListActionListener(new OnContactBrowserActionListener() {
                     public void onSearchAllContactsAction(String string) {
                         doSearch();
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
index c1b90a5..3ded6de 100644
--- a/src/com/android/contacts/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -405,10 +405,12 @@
     }
 
     protected void configureAdapter() {
-        mAdapter.setQueryString(mQueryString);
-        mAdapter.setContactNameDisplayOrder(mDisplayOrder);
-        mAdapter.setSortOrder(mSortOrder);
-        mAdapter.setNameHighlightingEnabled(isNameHighlighingEnabled());
+        if (mAdapter != null) {
+            mAdapter.setQueryString(mQueryString);
+            mAdapter.setContactNameDisplayOrder(mDisplayOrder);
+            mAdapter.setSortOrder(mSortOrder);
+            mAdapter.setNameHighlightingEnabled(isNameHighlighingEnabled());
+        }
     }
 
     @Override
diff --git a/src/com/android/contacts/list/ContactsIntentResolver.java b/src/com/android/contacts/list/ContactsIntentResolver.java
index 888994b..3f8b524 100644
--- a/src/com/android/contacts/list/ContactsIntentResolver.java
+++ b/src/com/android/contacts/list/ContactsIntentResolver.java
@@ -470,4 +470,12 @@
         }
         return null;
     }
+
+    public boolean isVisibleContactsRestrictionEnabled() {
+        return mMode != MODE_CUSTOM && !mSearchResultsMode;
+    }
+
+    public boolean isContactsWithPhonesOnlyRestrictionEnabled() {
+        return mMode != MODE_CUSTOM;
+    }
 }
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index 8ea4901..12de913 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -35,10 +35,13 @@
     private boolean mEditMode;
     private boolean mCreateContactEnabled;
     private boolean mContactsWithPhoneNumbersOnly;
+    private boolean mContactsWithPhonesOnlyRestrictionEnabled = true;
+    private boolean mVisibleContactsRestrictionEnabled = true;
 
     // TODO: Remove this horrible hack once the framework can lookup fragments via findFragmentById
     public static DefaultContactBrowseListFragment sLastFragment = null;
 
+
     public DefaultContactBrowseListFragment() {
         setPhotoLoaderEnabled(true);
 
@@ -64,10 +67,17 @@
 
     public void setContactsWithPhoneNumbersOnly(boolean flag) {
         mContactsWithPhoneNumbersOnly = flag;
-        ContactListAdapter adapter = getAdapter();
-        if (adapter != null) {
-            ((DefaultContactListAdapter)adapter).setContactsWithPhoneNumbersOnly(flag);
-        }
+        configureAdapter();
+    }
+
+    public void setContactsWithPhonesOnlyRestrictionEnabled(boolean flag) {
+        this.mContactsWithPhonesOnlyRestrictionEnabled = flag;
+        configureAdapter();
+    }
+
+    public void setVisibleContactsRestrictionEnabled(boolean flag) {
+        this.mVisibleContactsRestrictionEnabled = flag;
+        configureAdapter();
     }
 
     @Override
@@ -96,7 +106,6 @@
         adapter.setSectionHeaderDisplayEnabled(isSectionHeaderDisplayEnabled());
         adapter.setDisplayPhotos(true);
         adapter.setQuickContactEnabled(true);
-
         return adapter;
     }
 
@@ -105,7 +114,12 @@
         super.configureAdapter();
 
         DefaultContactListAdapter adapter = (DefaultContactListAdapter)getAdapter();
-        adapter.setContactsWithPhoneNumbersOnly(mContactsWithPhoneNumbersOnly);
+        if (adapter != null) {
+            adapter.setContactsWithPhoneNumbersOnly(mContactsWithPhoneNumbersOnly
+                    && mContactsWithPhonesOnlyRestrictionEnabled);
+            adapter.setVisibleContactsOnly(!isSearchResultsMode()
+                    && mVisibleContactsRestrictionEnabled);
+        }
     }
 
     @Override
diff --git a/src/com/android/contacts/list/DefaultContactListAdapter.java b/src/com/android/contacts/list/DefaultContactListAdapter.java
index 984e808..4c4323f 100644
--- a/src/com/android/contacts/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/list/DefaultContactListAdapter.java
@@ -23,7 +23,6 @@
 import android.provider.ContactsContract.Contacts;
 import android.text.TextUtils;
 import android.view.View;
-import android.view.ViewGroup;
 
 /**
  * A cursor adapter for the {@link ContactsContract.Contacts#CONTENT_TYPE} content type.
@@ -31,6 +30,7 @@
 public class DefaultContactListAdapter extends ContactListAdapter {
 
     private boolean mContactsWithPhoneNumbersOnly;
+    private boolean mVisibleContactsOnly;
 
     public DefaultContactListAdapter(Context context) {
         super(context);
@@ -40,31 +40,31 @@
         mContactsWithPhoneNumbersOnly = flag;
     }
 
+    public void setVisibleContactsOnly(boolean flag) {
+        mVisibleContactsOnly = flag;
+    }
+
     @Override
     public void configureLoader(CursorLoader loader) {
         Uri uri;
+
         if (isSearchMode() || isSearchResultsMode()) {
             String query = getQueryString();
             uri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI,
                     TextUtils.isEmpty(query) ? "" : Uri.encode(query));
             loader.setProjection(FILTER_PROJECTION);
-            if (!isSearchResultsMode()) {
-                if (mContactsWithPhoneNumbersOnly) {
-                    loader.setSelection(Contacts.IN_VISIBLE_GROUP + "=1 AND "
-                            + Contacts.HAS_PHONE_NUMBER + "=1");
-                } else {
-                    loader.setSelection(Contacts.IN_VISIBLE_GROUP + "=1");
-                }
-            }
         } else {
             uri = Contacts.CONTENT_URI;
             loader.setProjection(PROJECTION);
-            if (mContactsWithPhoneNumbersOnly) {
-                loader.setSelection(Contacts.IN_VISIBLE_GROUP + "=1 AND "
-                        + Contacts.HAS_PHONE_NUMBER + "=1");
-            } else {
-                loader.setSelection(Contacts.IN_VISIBLE_GROUP + "=1");
-            }
+        }
+
+        if (mVisibleContactsOnly && mContactsWithPhoneNumbersOnly) {
+            loader.setSelection(Contacts.IN_VISIBLE_GROUP + "=1"
+                    + " AND " + Contacts.HAS_PHONE_NUMBER + "=1");
+        } else if (mVisibleContactsOnly) {
+            loader.setSelection(Contacts.IN_VISIBLE_GROUP + "=1");
+        } else if (mContactsWithPhoneNumbersOnly) {
+            loader.setSelection(Contacts.HAS_PHONE_NUMBER + "=1");
         }
 
         if (isSectionHeaderDisplayEnabled()) {
