diff --git a/res/menu/activity_main_drawer.xml b/res/menu/activity_main_drawer.xml
index 877c726..8d02e4d 100644
--- a/res/menu/activity_main_drawer.xml
+++ b/res/menu/activity_main_drawer.xml
@@ -29,10 +29,6 @@
             app:actionViewClass="android.widget.LinearLayout"
             android:icon="@drawable/ic_assistant"
             android:title="@string/menu_assistant"/>
-        <item
-            android:id="@+id/nav_find_duplicates"
-            android:icon="@drawable/ic_menu_duplicates"
-            android:title="@string/menu_duplicates"/>
     </group>
 
     <group android:id="@+id/groups">
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 41df84f..dfef475 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -928,9 +928,6 @@
     <!-- Left drawer menu item to open contacts assistant/suggestion cards. [CHAR LIMIT=20]-->
     <string name="menu_assistant">Suggestions</string>
 
-    <!-- The menu item to open the link/merge duplicates activity. [CHAR LIMIT=20]-->
-    <string name="menu_duplicates">Duplicates</string>
-
     <!-- Badge shown next to Suggestions in left drawer menu when user has not visited it yet. [CHAR LIMIT=10] -->
     <string name="menu_assistant_new_badge">New</string>
 
diff --git a/src-bind/com/android/contactsbind/ObjectFactory.java b/src-bind/com/android/contactsbind/ObjectFactory.java
index d6799e2..af11c90 100644
--- a/src-bind/com/android/contactsbind/ObjectFactory.java
+++ b/src-bind/com/android/contactsbind/ObjectFactory.java
@@ -39,11 +39,7 @@
         return new DeviceLocalAccountTypeFactory.Default(context);
     }
 
-    public static Fragment getAssistantFragment(String tag) {
-        return null;
-    }
-
-    public static Fragment getDuplicatesUtilFragment() {
+    public static Fragment getAssistantFragment() {
         return null;
     }
 
diff --git a/src/com/android/contacts/ContactsDrawerActivity.java b/src/com/android/contacts/ContactsDrawerActivity.java
index a56ce0d..325ecbe 100644
--- a/src/com/android/contacts/ContactsDrawerActivity.java
+++ b/src/com/android/contacts/ContactsDrawerActivity.java
@@ -47,7 +47,6 @@
 
 import com.android.contacts.activities.ActionBarAdapter;
 import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.Experiments;
 import com.android.contacts.common.compat.CompatUtils;
 import com.android.contacts.common.list.AccountFilterActivity;
 import com.android.contacts.common.list.ContactListFilter;
@@ -78,7 +77,6 @@
 import com.android.contacts.util.SharedPreferenceUtil;
 import com.android.contactsbind.HelpUtils;
 import com.android.contactsbind.ObjectFactory;
-import com.android.contactsbind.experiments.Flags;
 
 import java.util.HashMap;
 import java.util.Iterator;
@@ -264,8 +262,7 @@
     }
 
     private void initializeAssistantNewBadge() {
-        if (!Flags.getInstance().getBoolean(Experiments.ASSISTANT)
-                || mNavigationView == null) {
+        if (mNavigationView == null) {
             return;
         }
         final LinearLayout newBadgeFrame = (LinearLayout) MenuItemCompat.getActionView(
@@ -302,19 +299,10 @@
     private void setUpMenu() {
         final Menu menu = mNavigationView.getMenu();
 
-        if (ObjectFactory.getDuplicatesUtilFragment() == null) {
+        if (ObjectFactory.getAssistantFragment() == null) {
             menu.removeItem(R.id.nav_assistant);
-            menu.removeItem(R.id.nav_find_duplicates);
         } else {
-            int id;
-            if (Flags.getInstance().getBoolean(Experiments.ASSISTANT)) {
-                id = R.id.nav_assistant;
-                menu.removeItem(R.id.nav_find_duplicates);
-            } else {
-                id = R.id.nav_find_duplicates;
-                menu.removeItem(R.id.nav_assistant);
-            }
-
+            final int id = R.id.nav_assistant;
             final MenuItem assistantMenu = menu.findItem(id);
             mIdMenuMap.put(id, assistantMenu);
             if (isAssistantView()) {
@@ -631,7 +619,7 @@
                     HelpUtils.launchHelpAndFeedbackForMainScreen(ContactsDrawerActivity.this);
                 } else if (id == R.id.nav_all_contacts) {
                     switchToAllContacts();
-                } else if (id == R.id.nav_assistant || id == R.id.nav_find_duplicates) {
+                } else if (id == R.id.nav_assistant) {
                     if (!isAssistantView()) {
                         launchAssistant();
                         updateMenuSelection(item);
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 90aa580..4532833 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -828,29 +828,11 @@
             transaction.replace(
                     R.id.contacts_list_container, mMembersFragment, TAG_GROUP_VIEW);
         } else if (isAssistantView()) {
-            String fragmentTag;
-            if (Flags.getInstance().getBoolean(Experiments.ASSISTANT)) {
-                fragmentTag = TAG_ASSISTANT;
-            } else {
-                fragmentTag = TAG_DUPLICATES;
-            }
-
-            Fragment uiFragment = fragmentManager.findFragmentByTag(fragmentTag);
+            Fragment uiFragment = fragmentManager.findFragmentByTag(TAG_ASSISTANT);
             if (uiFragment == null) {
-                uiFragment = ObjectFactory.getAssistantFragment(fragmentTag);
+                uiFragment = ObjectFactory.getAssistantFragment();
             }
-            transaction.replace(R.id.contacts_list_container, uiFragment, fragmentTag);
-
-            if (!Flags.getInstance().getBoolean(Experiments.ASSISTANT)) {
-                Fragment duplicatesUtilFragment =
-                        fragmentManager.findFragmentByTag(TAG_DUPLICATES_UTIL);
-                if (duplicatesUtilFragment == null) {
-                    duplicatesUtilFragment = ObjectFactory.getDuplicatesUtilFragment();
-                }
-                if (!duplicatesUtilFragment.isAdded()) {
-                    transaction.add(duplicatesUtilFragment, TAG_DUPLICATES_UTIL);
-                }
-            }
+            transaction.replace(R.id.contacts_list_container, uiFragment, TAG_ASSISTANT);
             resetToolBarStatusBarColor();
         }
         transaction.addToBackStack(TAG_SECOND_LEVEL);
diff --git a/src/com/android/contacts/common/Experiments.java b/src/com/android/contacts/common/Experiments.java
index 827083b..b182491 100644
--- a/src/com/android/contacts/common/Experiments.java
+++ b/src/com/android/contacts/common/Experiments.java
@@ -21,11 +21,6 @@
 public final class Experiments {
 
     /**
-     * Experiment to enable assistant in left navigation drawer.
-     */
-    public static final String ASSISTANT = "Assistant__enable_assistant";
-
-    /**
      * Whether to open contact sheet (aka smart profile) instead of our own QuickContact.
      */
     public static final String CONTACT_SHEET = "QuickContact__contact_sheet";
diff --git a/src/com/android/contacts/common/database/SimContactDao.java b/src/com/android/contacts/common/database/SimContactDao.java
index 7c8b6a0..89b4a3f 100644
--- a/src/com/android/contacts/common/database/SimContactDao.java
+++ b/src/com/android/contacts/common/database/SimContactDao.java
@@ -94,9 +94,7 @@
     }
 
     public void warmupSimQueryIfNeeded() {
-        // Not needed if we don't have an Assistant section
-        if (!Flags.getInstance().getBoolean(Experiments.ASSISTANT) ||
-                !canReadSimContacts()) return;
+        if (!canReadSimContacts()) return;
 
         new AsyncTask<Void, Void, Void>() {
             @Override
