diff --git a/src/com/android/contacts/ContactsDrawerActivity.java b/src/com/android/contacts/ContactsDrawerActivity.java
index 3fc3c9d..68b9884 100644
--- a/src/com/android/contacts/ContactsDrawerActivity.java
+++ b/src/com/android/contacts/ContactsDrawerActivity.java
@@ -20,13 +20,13 @@
 import android.app.FragmentManager;
 import android.app.FragmentTransaction;
 import android.content.Intent;
+import android.content.res.Configuration;
 import android.graphics.Color;
 import android.graphics.PorterDuff;
 import android.os.Bundle;
 import android.provider.ContactsContract.Intents;
 import android.support.annotation.LayoutRes;
 import android.support.design.widget.NavigationView;
-import android.support.v4.content.ContextCompat;
 import android.support.v4.view.GravityCompat;
 import android.support.v4.widget.DrawerLayout;
 import android.support.v7.app.ActionBarDrawerToggle;
@@ -49,6 +49,8 @@
 import com.android.contacts.common.list.ContactListFilter;
 import com.android.contacts.common.list.ContactListFilterController;
 import com.android.contacts.common.model.AccountTypeManager;
+import com.android.contacts.common.model.account.AccountDisplayInfo;
+import com.android.contacts.common.model.account.AccountDisplayInfoFactory;
 import com.android.contacts.common.model.account.AccountWithDataSet;
 import com.android.contacts.common.preference.ContactsPreferenceActivity;
 import com.android.contacts.common.util.AccountFilterUtil;
@@ -69,8 +71,6 @@
 import com.android.contacts.interactions.AccountFiltersFragment.AccountFiltersListener;
 import com.android.contacts.list.DefaultContactBrowseListFragment;
 import com.android.contacts.list.MultiSelectContactsListFragment;
-import com.android.contacts.common.model.account.AccountDisplayInfo;
-import com.android.contacts.common.model.account.AccountDisplayInfoFactory;
 import com.android.contacts.util.SharedPreferenceUtil;
 import com.android.contactsbind.HelpUtils;
 import com.android.contactsbind.ObjectFactory;
@@ -94,7 +94,7 @@
     public enum ContactsView {
         NONE,
         ALL_CONTACTS,
-        DUPLICATES,
+        ASSISTANT,
         GROUP_VIEW,
         ACCOUNT_VIEW,
     }
@@ -223,8 +223,15 @@
         mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
         mToggle = new ContactsActionBarDrawerToggle(this, mDrawer, mToolbar,
                 R.string.navigation_drawer_open, R.string.navigation_drawer_close);
+
         mDrawer.setDrawerListener(mToggle);
-        mToggle.syncState();
+        // Set fallback handler for when drawer is disabled.
+        mToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                onBackPressed();
+            }
+        });
 
         // Set up navigation mode.
         if (savedState != null) {
@@ -246,16 +253,32 @@
         }
     }
 
+    public void setDrawerLockMode(boolean enabled) {
+        // Prevent drawer from being opened by sliding from the start of screen.
+        mDrawer.setDrawerLockMode(enabled ? DrawerLayout.LOCK_MODE_UNLOCKED
+                : DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
+
+        // Order of these statements matter.
+        // Display back button and disable drawer indicator.
+        if (enabled) {
+            getSupportActionBar().setDisplayHomeAsUpEnabled(false);
+            mToggle.setDrawerIndicatorEnabled(true);
+        } else {
+            mToggle.setDrawerIndicatorEnabled(false);
+            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+        }
+    }
+
     private void setUpMenu() {
         final Menu menu = mNavigationView.getMenu();
 
-        if (ObjectFactory.getDuplicatesFragment() == null) {
-            menu.removeItem(R.id.nav_find_duplicates);
+        if (ObjectFactory.getAssistantFragment() == null) {
+            menu.removeItem(R.id.nav_assistant);
         } else {
-            final MenuItem findDupMenu = menu.findItem(R.id.nav_find_duplicates);
-            mIdMenuMap.put(R.id.nav_find_duplicates, findDupMenu);
-            if (isDuplicatesView()) {
-                updateMenuSelection(findDupMenu);
+            final MenuItem assistantMenu = menu.findItem(R.id.nav_assistant);
+            mIdMenuMap.put(R.id.nav_assistant, assistantMenu);
+            if (isAssistantView()) {
+                updateMenuSelection(assistantMenu);
             }
         }
 
@@ -306,6 +329,18 @@
         getWindow().setStatusBarColor(Color.TRANSPARENT);
     }
 
+    @Override
+    protected void onPostCreate(Bundle savedInstanceState) {
+        super.onPostCreate(savedInstanceState);
+        mToggle.syncState();
+    }
+
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        mToggle.onConfigurationChanged(newConfig);
+    }
+
     // Set up fragment manager to load groups and filters.
     protected void loadGroupsAndFilters() {
         final FragmentManager fragmentManager = getFragmentManager();
@@ -429,8 +464,8 @@
         return mCurrentView == ContactsView.GROUP_VIEW;
     }
 
-    protected boolean isDuplicatesView() {
-        return mCurrentView == ContactsView.DUPLICATES;
+    protected boolean isAssistantView() {
+        return mCurrentView == ContactsView.ASSISTANT;
     }
 
     protected boolean isAllContactsView() {
@@ -442,7 +477,7 @@
     }
 
     public boolean isInSecondLevel() {
-        return isGroupView() || isDuplicatesView();
+        return isGroupView() || isAssistantView();
     }
 
     protected abstract void onGroupMenuItemClicked(long groupId, String title);
@@ -556,9 +591,9 @@
                     HelpUtils.launchHelpAndFeedbackForMainScreen(ContactsDrawerActivity.this);
                 } else if (id == R.id.nav_all_contacts) {
                     switchToAllContacts();
-                } else if (id == R.id.nav_find_duplicates) {
-                    if (!isDuplicatesView()) {
-                        launchFindDuplicates();
+                } else if (id == R.id.nav_assistant) {
+                    if (!isAssistantView()) {
+                        launchAssistant();
                         updateMenuSelection(item);
                     }
                 } else if (item.getIntent() != null) {
@@ -599,7 +634,7 @@
                 mContactListFilterController, AppCompatActivity.RESULT_OK, intent);
     }
 
-    protected abstract void launchFindDuplicates();
+    protected abstract void launchAssistant();
 
     protected abstract DefaultContactBrowseListFragment getAllFragment();
 
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index b2a0a07..1950eb2 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -20,15 +20,13 @@
 import android.app.Fragment;
 import android.app.FragmentManager;
 import android.app.FragmentTransaction;
-import android.content.ContentResolver;
 import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
 import android.content.ContentUris;
 import android.content.Context;
 import android.content.Intent;
-import android.content.SyncStatusObserver;
 import android.content.IntentFilter;
-import android.graphics.Color;
-import android.graphics.drawable.ColorDrawable;
+import android.content.SyncStatusObserver;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
@@ -40,7 +38,6 @@
 import android.support.v4.content.LocalBroadcastManager;
 import android.support.v4.view.GravityCompat;
 import android.support.v4.widget.SwipeRefreshLayout;
-import android.text.TextUtils;
 import android.util.Log;
 import android.view.KeyCharacterMap;
 import android.view.KeyEvent;
@@ -65,8 +62,6 @@
 import com.android.contacts.common.logging.Logger;
 import com.android.contacts.common.logging.ScreenEvent.ScreenType;
 import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountDisplayInfo;
-import com.android.contacts.common.model.account.AccountDisplayInfoFactory;
 import com.android.contacts.common.model.account.AccountWithDataSet;
 import com.android.contacts.common.util.AccountFilterUtil;
 import com.android.contacts.common.util.Constants;
@@ -96,9 +91,11 @@
     private static final String TAG_ALL = "contacts-all";
     private static final String TAG_UNAVAILABLE = "contacts-unavailable";
     private static final String TAG_GROUP_VIEW = "contacts-groups";
-    private static final String TAG_DUPLICATES = "contacts-duplicates";
-    private static final String TAG_SECOND_LEVEL = "second-level";
-    // Tag for DuplicatesUtilFragment.java
+    public static final String TAG_ASSISTANT = "contacts-assistant";
+    public static final String TAG_SECOND_LEVEL = "second-level";
+    public static final String TAG_THIRD_LEVEL = "third-level";
+
+    public static final String TAG_DUPLICATES = "DuplicatesFragment";
     public static final String TAG_DUPLICATES_UTIL = "DuplicatesUtilFragment";
 
     private static final String KEY_GROUP_URI = "groupUri";
@@ -631,8 +628,8 @@
             return;
         }
 
-        if (isDuplicatesView()) {
-            switchToAllContacts();
+        if (isAssistantView()) {
+            onBackPressedAssistantView();
             return;
         }
 
@@ -662,6 +659,14 @@
         }
     }
 
+    private void onBackPressedAssistantView() {
+        if (!popThirdLevel()) {
+            switchToAllContacts();
+        } else {
+            setDrawerLockMode(/* enabled */ true);
+        }
+    }
+
     // Returns true if back event is handled in this method.
     private boolean maybeHandleInAllFragment() {
         if (isAllFragmentInSelectionMode()) {
@@ -769,8 +774,8 @@
     }
 
     @Override
-    protected void launchFindDuplicates() {
-        switchView(ContactsView.DUPLICATES);
+    protected void launchAssistant() {
+        switchView(ContactsView.ASSISTANT);
     }
 
     private void switchView(ContactsView contactsView) {
@@ -784,20 +789,14 @@
             }
             transaction.replace(
                     R.id.contacts_list_container, mMembersFragment, TAG_GROUP_VIEW);
-        } else if (isDuplicatesView()) {
-            Fragment duplicatesFragment = fragmentManager.findFragmentByTag(TAG_DUPLICATES);
-            Fragment duplicatesUtilFragment =
-                    fragmentManager.findFragmentByTag(TAG_DUPLICATES_UTIL);
-            if (duplicatesFragment == null || duplicatesUtilFragment == null) {
-                duplicatesFragment = ObjectFactory.getDuplicatesFragment();
-                duplicatesUtilFragment = ObjectFactory.getDuplicatesUtilFragment();
-                duplicatesUtilFragment.setTargetFragment(duplicatesFragment, /* requestCode */ 0);
+        } else if(isAssistantView()) {
+            Fragment assistantFragment = fragmentManager.findFragmentByTag(TAG_ASSISTANT);
+            if (assistantFragment == null) {
+                assistantFragment = ObjectFactory.getAssistantFragment();
             }
-            transaction.replace(
-                    R.id.contacts_list_container, duplicatesFragment, TAG_DUPLICATES);
-            if (!duplicatesUtilFragment.isAdded()) {
-                transaction.add(duplicatesUtilFragment, TAG_DUPLICATES_UTIL);
-                resetToolBarStatusBarColor();
+            if (assistantFragment != null) {
+                transaction.replace(
+                        R.id.contacts_list_container, assistantFragment, TAG_ASSISTANT);
             }
             resetToolBarStatusBarColor();
         }
@@ -821,6 +820,11 @@
         super.switchToAllContacts();
     }
 
+    private boolean popThirdLevel() {
+        return getFragmentManager().popBackStackImmediate(
+                TAG_THIRD_LEVEL, FragmentManager.POP_BACK_STACK_INCLUSIVE);
+    }
+
     private void popSecondLevel() {
         getFragmentManager().popBackStackImmediate(
                 TAG_SECOND_LEVEL, FragmentManager.POP_BACK_STACK_INCLUSIVE);
