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
