diff --git a/src-bind/com/android/contactsbind/ObjectFactory.java b/src-bind/com/android/contactsbind/ObjectFactory.java
index af11c90..6697ebc 100644
--- a/src-bind/com/android/contactsbind/ObjectFactory.java
+++ b/src-bind/com/android/contactsbind/ObjectFactory.java
@@ -14,7 +14,6 @@
 package com.android.contactsbind;
 
 import com.android.contacts.common.logging.Logger;
-import com.android.contactsbind.search.AutocompleteHelper;
 import com.android.contacts.common.util.DeviceLocalAccountTypeFactory;
 
 import android.app.Fragment;
@@ -31,10 +30,6 @@
         return null;
     }
 
-    public static AutocompleteHelper getAutocompleteHelper(Context context) {
-        return null;
-    }
-
     public static DeviceLocalAccountTypeFactory getDeviceLocalAccountTypeFactory(Context context) {
         return new DeviceLocalAccountTypeFactory.Default(context);
     }
diff --git a/src/com/android/contacts/common/Experiments.java b/src/com/android/contacts/common/Experiments.java
index b182491..f1fc274 100644
--- a/src/com/android/contacts/common/Experiments.java
+++ b/src/com/android/contacts/common/Experiments.java
@@ -49,16 +49,6 @@
     public static final String PULL_TO_REFRESH_CANCEL_REFRESH_MILLIS =
             "PullToRefresh__cancel_refresh_millis";
 
-    /**
-     * Search study boolean indicating whether to inject yenta search results before CP2 results.
-     */
-    public static final String SEARCH_YENTA = "Search__yenta";
-
-    /**
-     * The time to wait for Yenta search results before giving up.
-     */
-    public static final String SEARCH_YENTA_TIMEOUT_MILLIS = "Search__yenta_timeout";
-
     private Experiments() {
     }
 }
diff --git a/src/com/android/contacts/common/list/DefaultContactListAdapter.java b/src/com/android/contacts/common/list/DefaultContactListAdapter.java
index cea2062..5827930 100644
--- a/src/com/android/contacts/common/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/common/list/DefaultContactListAdapter.java
@@ -116,13 +116,6 @@
                 loader.setUri(builder.build());
                 loader.setProjection(getProjection(true));
                 sortOrder = STREQUENT_SORT;
-                if (Flags.getInstance().getBoolean(Experiments.SEARCH_YENTA)
-                        && loader instanceof FavoritesAndContactsLoader
-                        && directoryId == Directory.DEFAULT) {
-                    final FavoritesAndContactsLoader favoritesAndContactsLoader =
-                            (FavoritesAndContactsLoader) loader;
-                    favoritesAndContactsLoader.setAutocompleteQuery(query);
-                }
             }
         } else {
             final ContactListFilter filter = getFilter();
diff --git a/src/com/android/contacts/common/list/FavoritesAndContactsLoader.java b/src/com/android/contacts/common/list/FavoritesAndContactsLoader.java
index e112846..422cf7c 100644
--- a/src/com/android/contacts/common/list/FavoritesAndContactsLoader.java
+++ b/src/com/android/contacts/common/list/FavoritesAndContactsLoader.java
@@ -21,37 +21,24 @@
 import android.database.MergeCursor;
 import android.os.Bundle;
 import android.provider.ContactsContract.Contacts;
-import android.util.Log;
 
-import com.android.contacts.common.Experiments;
-import com.android.contactsbind.ObjectFactory;
-import com.android.contactsbind.experiments.Flags;
-import com.android.contactsbind.search.AutocompleteHelper;
 import com.google.common.collect.Lists;
 
 import java.util.List;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
 
 /**
  * A loader for use in the default contact list, which will also query for favorite contacts
  * if configured to do so.
  */
-public class FavoritesAndContactsLoader extends CursorLoader implements AutocompleteHelper.Listener {
+public class FavoritesAndContactsLoader extends CursorLoader {
 
     private boolean mLoadFavorites;
 
     private String[] mProjection;
 
-    private String mAutocompleteQuery;
-    private CountDownLatch mAutocompleteLatch = new CountDownLatch(1);
-    private Cursor mAutocompleteCursor;
-    private int mAutocompleteTimeout;
 
     public FavoritesAndContactsLoader(Context context) {
         super(context);
-        mAutocompleteTimeout = Flags.getInstance().getInteger(
-                Experiments.SEARCH_YENTA_TIMEOUT_MILLIS);
     }
 
     /** Whether to load favorites and merge results in before any other results. */
@@ -59,10 +46,6 @@
         mLoadFavorites = flag;
     }
 
-    public void setAutocompleteQuery(String autocompleteQuery) {
-        mAutocompleteQuery = autocompleteQuery;
-    }
-
     public void setProjection(String[] projection) {
         super.setProjection(projection);
         mProjection = projection;
@@ -74,36 +57,8 @@
         if (mLoadFavorites) {
             cursors.add(loadFavoritesContacts());
         }
-
-        if (mAutocompleteQuery != null) {
-            final AutocompleteHelper autocompleteHelper =
-                    ObjectFactory.getAutocompleteHelper(getContext());
-            if (autocompleteHelper != null) {
-                autocompleteHelper.setListener(this);
-                autocompleteHelper.setProjection(mProjection);
-                autocompleteHelper.setQuery(mAutocompleteQuery);
-                try {
-                    if (!mAutocompleteLatch.await(mAutocompleteTimeout, TimeUnit.MILLISECONDS)) {
-                        logw("Timeout expired before receiving autocompletions");
-                    }
-                } catch (InterruptedException e) {
-                    logw("Interrupted while waiting for autocompletions");
-                }
-                if (mAutocompleteCursor != null) {
-                    cursors.add(mAutocompleteCursor);
-                    // 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);
-
+        final Cursor contactsCursor = loadContacts();
+        cursors.add(contactsCursor);
         return new MergeCursor(cursors.toArray(new Cursor[cursors.size()])) {
             @Override
             public Bundle getExtras() {
@@ -136,18 +91,4 @@
                 Contacts.CONTENT_URI, mProjection, selection.toString(), new String[]{"1"},
                 getSortOrder());
     }
-
-    @Override
-    public void onAutocompletesAvailable(Cursor cursor) {
-        if (cursor != null && cursor.getCount() > 0) {
-            mAutocompleteCursor = cursor;
-            mAutocompleteLatch.countDown();
-        }
-    }
-
-    private static void logw(String message) {
-        if (Log.isLoggable(AutocompleteHelper.TAG, Log.WARN)) {
-            Log.w(AutocompleteHelper.TAG, message);
-        }
-    }
 }
