diff --git a/src/com/android/contacts/common/list/FavoritesAndContactsLoader.java b/src/com/android/contacts/common/list/FavoritesAndContactsLoader.java
index 2dcbc18..e112846 100644
--- a/src/com/android/contacts/common/list/FavoritesAndContactsLoader.java
+++ b/src/com/android/contacts/common/list/FavoritesAndContactsLoader.java
@@ -47,9 +47,6 @@
     private CountDownLatch mAutocompleteLatch = new CountDownLatch(1);
     private Cursor mAutocompleteCursor;
     private int mAutocompleteTimeout;
-    // If we didn't get anything back from autocomplete and we've fallen back to CP2,
-    // we can't wait for the Experiments.SEARCH_YENTA_TIMEOUT_MILLIS everytime the query changes.
-    private boolean mAutocompleteFallback;
 
     public FavoritesAndContactsLoader(Context context) {
         super(context);
@@ -74,27 +71,14 @@
     @Override
     public Cursor loadInBackground() {
         List<Cursor> cursors = Lists.newArrayList();
-
-        // Load favorites
         if (mLoadFavorites) {
             cursors.add(loadFavoritesContacts());
         }
 
-        // Load contacts
-        final Cursor contactsCursor;
-        if (mAutocompleteQuery == null || mAutocompleteFallback) {
-            // Query CP2 normally
-            contactsCursor = loadContacts();
-            cursors.add(contactsCursor);
-        } else {
+        if (mAutocompleteQuery != null) {
             final AutocompleteHelper autocompleteHelper =
                     ObjectFactory.getAutocompleteHelper(getContext());
-            if (autocompleteHelper == null) {
-                // Fallback to CP2, the flag is on but we couldn't instantiate autocomplete
-                contactsCursor = loadContacts();
-                cursors.add(contactsCursor);
-                mAutocompleteFallback = true;
-            } else {
+            if (autocompleteHelper != null) {
                 autocompleteHelper.setListener(this);
                 autocompleteHelper.setProjection(mProjection);
                 autocompleteHelper.setQuery(mAutocompleteQuery);
@@ -105,18 +89,21 @@
                 } catch (InterruptedException e) {
                     logw("Interrupted while waiting for autocompletions");
                 }
-                if (mAutocompleteCursor != null && mAutocompleteCursor.getCount() > 0) {
-                    contactsCursor = null;
+                if (mAutocompleteCursor != null) {
                     cursors.add(mAutocompleteCursor);
-                } else {
-                    // Fallback to CP2, we didn't get anything back from autocomplete
-                    contactsCursor = loadContacts();
-                    cursors.add(loadContacts());
-                    mAutocompleteFallback = true;
+                    // TODO: exclude these results from the main loader results, see b/30742359
                 }
             }
         }
 
+        // TODO: if the autocomplete experiment in on, only show those results even if they're empty
+        final Cursor contactsCursor = mAutocompleteQuery == null ? loadContacts() : null;
+        if (mAutocompleteQuery == null) {
+            cursors.add(contactsCursor);
+        }
+        // Guard against passing an empty array to the MergeCursor constructor
+        if (cursors.isEmpty()) cursors.add(null);
+
         return new MergeCursor(cursors.toArray(new Cursor[cursors.size()])) {
             @Override
             public Bundle getExtras() {
