diff --git a/src-bind/com/android/contactsbind/ObjectFactory.java b/src-bind/com/android/contactsbind/ObjectFactory.java
index c5170be..e8b9ceb 100644
--- a/src-bind/com/android/contactsbind/ObjectFactory.java
+++ b/src-bind/com/android/contactsbind/ObjectFactory.java
@@ -20,7 +20,6 @@
 
 import com.android.contacts.logging.Logger;
 import com.android.contacts.util.DeviceLocalAccountTypeFactory;
-import com.android.contactsbind.search.AutocompleteHelper;
 
 /**
  * Creates default bindings for overlays.
@@ -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-bind/com/android/contactsbind/search/AutocompleteHelper.java b/src-bind/com/android/contactsbind/search/AutocompleteHelper.java
deleted file mode 100644
index ff0678c..0000000
--- a/src-bind/com/android/contactsbind/search/AutocompleteHelper.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contactsbind.search;
-
-import android.database.Cursor;
-
-public final class AutocompleteHelper {
-
-    public static final String TAG = "Autocomplete";
-
-    public interface Listener {
-        void onAutocompletesAvailable(Cursor cursor);
-    }
-
-    public AutocompleteHelper() {
-    }
-
-    public void setListener(Listener listener) {
-    }
-
-    public void setProjection(String[] projection) {
-    }
-
-    public void setQuery(String query) {
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/contacts/Experiments.java b/src/com/android/contacts/Experiments.java
index 9dbe1bf..97b0474 100644
--- a/src/com/android/contacts/Experiments.java
+++ b/src/com/android/contacts/Experiments.java
@@ -48,16 +48,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/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index a23eaad..34b4f40 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -1237,12 +1237,5 @@
         return intent;
     }
 
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (requestCode == DefaultContactBrowseListFragment.ACTIVITY_REQUEST_QUICK_CONTACT &&
-                resultCode == ContactDeletionInteraction.RESULT_CODE_DELETED &&
-                mContactsListFragment != null) {
-            mContactsListFragment.maybeRestartDefaultDirectoryPartitionLoader();
-        }
-    }
+
 }
diff --git a/src/com/android/contacts/interactions/ContactDeletionInteraction.java b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
index e63fca4..161571c 100644
--- a/src/com/android/contacts/interactions/ContactDeletionInteraction.java
+++ b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
@@ -81,10 +81,6 @@
     private static final int COLUMN_INDEX_DISPLAY_NAME = 5;
     private static final int COLUMN_INDEX_DISPLAY_NAME_ALT = 6;
 
-    public interface Listener {
-        void onDeletionFinished();
-    }
-
     private boolean mActive;
     private Uri mContactUri;
     private String mDisplayName;
@@ -92,7 +88,6 @@
     private boolean mFinishActivityWhenDone;
     private Context mContext;
     private AlertDialog mDialog;
-    private Listener mListener;
 
     /** This is a wrapper around the fragment's loader manager to be used only during testing. */
     private TestLoaderManagerBase mTestLoaderManager;
@@ -351,9 +346,6 @@
 
     protected void doDeleteContact(Uri contactUri) {
         mContext.startService(ContactSaveService.createDeleteContactIntent(mContext, contactUri));
-        if (mListener != null) {
-            mListener.onDeletionFinished();
-        }
         if (isAdded() && mFinishActivityWhenDone) {
             getActivity().setResult(RESULT_CODE_DELETED);
             getActivity().finish();
@@ -370,8 +362,4 @@
             Toast.makeText(mContext, deleteToastMessage, Toast.LENGTH_LONG).show();
         }
     }
-
-    public void setListener(Listener listener) {
-        mListener = listener;
-    }
 }
diff --git a/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java b/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java
index 3e1dd5d..695e9f6 100644
--- a/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java
+++ b/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java
@@ -313,9 +313,7 @@
     protected void doDeleteContact(long[] contactIds, final String[] names) {
         mContext.startService(ContactSaveService.createDeleteMultipleContactsIntent(mContext,
                 contactIds, names));
-        if (mListener != null) {
-            mListener.onDeletionFinished();
-        }
+        mListener.onDeletionFinished();
     }
 
     public void setListener(MultiContactDeleteListener listener) {
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
index d8620a8..6115b50 100644
--- a/src/com/android/contacts/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -348,22 +348,6 @@
         mLoadPriorityDirectoriesOnly = false;
     }
 
-    /** Restarts the {@link DirectoryPartition} with {@link Directory#DEFAULT} directory ID. */
-    protected void restartDefaultDirectoryPartitionLoader() {
-        if (mAdapter == null) return;
-        int partitionCount = mAdapter.getPartitionCount();
-        for (int i = 0; i < partitionCount; i++) {
-            final Partition partition = mAdapter.getPartition(i);
-            if (partition instanceof DirectoryPartition) {
-                final DirectoryPartition directoryPartition = (DirectoryPartition) partition;
-                long directoryId = directoryPartition.getDirectoryId();
-                if (directoryId == Directory.DEFAULT) {
-                    loadDirectoryPartitionDelayed(i, directoryPartition);
-                }
-            }
-        }
-    }
-
     @Override
     public Loader<Cursor> onCreateLoader(int id, Bundle args) {
         if (id == DIRECTORY_LOADER_ID) {
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index a174b91..f4d244e 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -97,7 +97,6 @@
     private static final String KEY_SEARCH_RESULT_CLICKED = "search_result_clicked";
 
     private static final int ACTIVITY_REQUEST_CODE_SHARE = 0;
-    public static final int ACTIVITY_REQUEST_QUICK_CONTACT = 1000;
 
     private View mSearchHeaderView;
     private View mSearchProgress;
@@ -943,24 +942,14 @@
                         /* count */ getAdapter().getCount(),
                         /* clickedIndex */ position, /* numSelected */ 0);
 
-                // Start QuickContact "for result" in case we're using yenta search and need
-                // to manually reload the default directory partition when contacts are deleted.
-                // The QuickContact Activity result is handled in PeopleActivity.
-                ImplicitIntentsUtil.startQuickContactForResult(getActivity(), contactLookupUri,
-                        previousScreen, ACTIVITY_REQUEST_QUICK_CONTACT);
+                ImplicitIntentsUtil.startQuickContact(
+                        getActivity(), contactLookupUri, previousScreen);
             }
         }
 
         @Override
         public void onDeleteContactAction(Uri contactUri) {
-            final ContactDeletionInteraction interacton =
-                    ContactDeletionInteraction.start(mActivity, contactUri, false);
-            interacton.setListener(new ContactDeletionInteraction.Listener() {
-                @Override
-                public void onDeletionFinished() {
-                    maybeRestartDefaultDirectoryPartitionLoader();
-                }
-            });
+            ContactDeletionInteraction.start(mActivity, contactUri, false);
         }
 
         @Override
@@ -1168,16 +1157,6 @@
                 /* numSelected */ getSelectedContactIds().size());
             mActionBarAdapter.setSelectionMode(false);
             mIsDeletionInProgress = false;
-            maybeRestartDefaultDirectoryPartitionLoader();
-        }
-    }
-
-    // Because the yenta search loader is not automatically restarted when contacts are deleted
-    // we must manually restart it when contacts displayed in yenta search results are deleted
-    // either on this fragment directly or after opening QuickContact.
-    public void maybeRestartDefaultDirectoryPartitionLoader() {
-        if (isSearchMode() && Flags.getInstance().getBoolean(Experiments.SEARCH_YENTA)) {
-            restartDefaultDirectoryPartitionLoader();
         }
     }
 
@@ -1204,7 +1183,7 @@
                     /* listType */ getListTypeIncludingSearch(),
                     /* count */ getAdapter().getCount(), /* clickedIndex */ -1,
                     /* numSelected */ getAdapter().getSelectedContactIds().size());
-                break;
+
 // TODO fix or remove multipicker code: ag/54762
 //                else if (resultCode == RESULT_CANCELED && mMode == MODE_PICK_MULTIPLE_PHONES) {
 //                    // Finish the activity if the sub activity was canceled as back key is used
diff --git a/src/com/android/contacts/list/DefaultContactListAdapter.java b/src/com/android/contacts/list/DefaultContactListAdapter.java
index d8344c6..bc76331 100644
--- a/src/com/android/contacts/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/list/DefaultContactListAdapter.java
@@ -31,11 +31,9 @@
 import android.text.TextUtils;
 import android.view.View;
 
-import com.android.contacts.Experiments;
 import com.android.contacts.compat.ContactsCompat;
 import com.android.contacts.model.account.AccountWithDataSet;
 import com.android.contacts.preference.ContactsPreferences;
-import com.android.contactsbind.experiments.Flags;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -116,13 +114,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/list/FavoritesAndContactsLoader.java b/src/com/android/contacts/list/FavoritesAndContactsLoader.java
index 5868d29..54e5f3f 100644
--- a/src/com/android/contacts/list/FavoritesAndContactsLoader.java
+++ b/src/com/android/contacts/list/FavoritesAndContactsLoader.java
@@ -22,38 +22,24 @@
 import android.database.sqlite.SQLiteException;
 import android.os.Bundle;
 import android.provider.ContactsContract.Contacts;
-import android.util.Log;
 
-import com.android.contacts.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. */
@@ -61,10 +47,6 @@
         mLoadFavorites = flag;
     }
 
-    public void setAutocompleteQuery(String autocompleteQuery) {
-        mAutocompleteQuery = autocompleteQuery;
-    }
-
     public void setProjection(String[] projection) {
         super.setProjection(projection);
         mProjection = projection;
@@ -76,36 +58,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() {
@@ -139,18 +93,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);
-        }
-    }
 }
