diff --git a/res/drawable/ic_close_lt.xml b/res/drawable/ic_close_lt.xml
index 65760cb..178b8a0 100644
--- a/res/drawable/ic_close_lt.xml
+++ b/res/drawable/ic_close_lt.xml
@@ -15,6 +15,6 @@
   ~ limitations under the License
   -->
 <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-    android:src="@drawable/ic_close_black_24dp"
+    android:src="@drawable/ic_close_dk"
     android:autoMirrored="true"
     android:tint="@android:color/black" />
\ No newline at end of file
diff --git a/res/drawable/ic_menu_blocked_numbers.xml b/res/drawable/ic_menu_blocked_numbers.xml
deleted file mode 100644
index 9e03397..0000000
--- a/res/drawable/ic_menu_blocked_numbers.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportHeight="24.0"
-        android:viewportWidth="24.0">
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zM4 12c0-4.42 3.58-8 8-8 1.85 0 3.55.63 4.9 1.69L5.69 16.9C4.63 15.55 4 13.85 4 12zm8 8c-1.85 0-3.55-.63-4.9-1.69L18.31 7.1C19.37 8.45 20 10.15 20 12c0 4.42-3.58 8-8 8z"/>
-</vector>
\ No newline at end of file
diff --git a/res/menu/activity_main_drawer.xml b/res/menu/activity_main_drawer.xml
index 43432ab..a006761 100644
--- a/res/menu/activity_main_drawer.xml
+++ b/res/menu/activity_main_drawer.xml
@@ -24,10 +24,6 @@
             android:icon="@drawable/ic_menu_filter"
             android:title="@string/contactsList" />
         <item
-            android:id="@+id/nav_blocked_numbers"
-            android:icon="@drawable/ic_menu_blocked_numbers"
-            android:title="@string/menu_blocked_numbers"/>
-        <item
             android:id="@+id/nav_find_duplicates"
             android:icon="@drawable/ic_menu_duplicates"
             android:title="@string/menu_duplicates"/>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 12471ef..735545e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -898,9 +898,6 @@
     <!-- Text shown in the contacts app while the background process updates contacts after a locale change [CHAR LIMIT=150]-->
     <string name="locale_change_in_progress">Contact list is being updated to reflect the change of language.\n\nPlease wait&#8230;</string>
 
-    <!-- The menu item to open blocked numbers activity [CHAR LIMIT=60]-->
-    <string name="menu_blocked_numbers">Blocked numbers</string>
-
     <!-- The menu item to open the link/merge duplicates activity. [CHAR LIMIT=20]-->
     <string name="menu_duplicates">Duplicates</string>
 
diff --git a/src/com/android/contacts/ContactsDrawerActivity.java b/src/com/android/contacts/ContactsDrawerActivity.java
index 5f0dc2b..1dc7092 100644
--- a/src/com/android/contacts/ContactsDrawerActivity.java
+++ b/src/com/android/contacts/ContactsDrawerActivity.java
@@ -31,7 +31,6 @@
 import android.support.v7.app.ActionBarDrawerToggle;
 import android.support.v7.app.AppCompatActivity;
 import android.support.v7.widget.Toolbar;
-import android.telecom.TelecomManager;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.Menu;
@@ -41,9 +40,7 @@
 import android.view.ViewGroup;
 
 import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.compat.BlockedNumberContractCompat;
 import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.compat.TelecomManagerUtil;
 import com.android.contacts.common.list.ContactListFilter;
 import com.android.contacts.common.list.ContactListFilterController;
 import com.android.contacts.common.preference.ContactsPreferenceActivity;
@@ -59,7 +56,6 @@
 import com.android.contacts.interactions.AccountFiltersFragment;
 import com.android.contacts.interactions.AccountFiltersFragment.AccountFiltersListener;
 import com.android.contacts.quickcontact.QuickContactActivity;
-import com.android.contacts.util.PhoneCapabilityTester;
 import com.android.contactsbind.Assistants;
 import com.android.contactsbind.HelpUtils;
 
@@ -169,14 +165,6 @@
         final MenuItem allContacts = menu.findItem(R.id.nav_all_contacts);
         mIdMenuMap.put(R.id.nav_all_contacts, allContacts);
 
-        final boolean showBlockedNumbers = PhoneCapabilityTester.isPhone(this)
-                && ContactsUtils.FLAG_N_FEATURE
-                && BlockedNumberContractCompat.canCurrentUserBlockNumbers(this);
-
-        if (!showBlockedNumbers) {
-            menu.removeItem(R.id.nav_blocked_numbers);
-        }
-
         if (Assistants.getDuplicatesActivityIntent(this) == null) {
             menu.removeItem(R.id.nav_find_duplicates);
         } else {
@@ -440,10 +428,6 @@
                     HelpUtils.launchHelpAndFeedbackForMainScreen(ContactsDrawerActivity.this);
                 } else if (id == R.id.nav_all_contacts) {
                     switchToAllContacts();
-                } else if (id == R.id.nav_blocked_numbers) {
-                    final Intent intent = TelecomManagerUtil.createManageBlockedNumbersIntent(
-                            (TelecomManager) getSystemService(Context.TELECOM_SERVICE));
-                    startActivity(intent);
                 } else if (id == R.id.nav_find_duplicates) {
                     launchFindDuplicates();
                 } else if (item.getIntent() != null) {
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index a0ceed0..7b5f3e6 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -518,6 +518,9 @@
             return;
         }
 
+        // Scroll to top after filter is changed.
+        mAllFragment.getListView().setSelectionAfterHeaderView();
+
         setFilterAndUpdateTitle(mContactListFilterController.getFilter());
         showFabWithAnimation(shouldShowFabForAccount());
 
diff --git a/src/com/android/contacts/editor/EditorUiUtils.java b/src/com/android/contacts/editor/EditorUiUtils.java
index 844ac45..0a5c765 100644
--- a/src/com/android/contacts/editor/EditorUiUtils.java
+++ b/src/com/android/contacts/editor/EditorUiUtils.java
@@ -137,28 +137,25 @@
     public static Pair<String,String> getAccountInfo(Context context, String accountName,
             AccountType accountType) {
         CharSequence accountTypeDisplayLabel = accountType.getDisplayLabel(context);
-        if (TextUtils.isEmpty(accountTypeDisplayLabel)) {
+        if (TextUtils.isEmpty(accountTypeDisplayLabel)
+                || TextUtils.equals(
+                        context.getString(R.string.account_phone), accountTypeDisplayLabel)) {
             accountTypeDisplayLabel = context.getString(R.string.account_phone);
+        } else if (GoogleAccountType.ACCOUNT_TYPE.equals(accountType.accountType)
+                && accountType.dataSet == null){
+            accountTypeDisplayLabel = context.getString(R.string.google_account_type_format,
+                    accountTypeDisplayLabel);
+        } else {
+            accountTypeDisplayLabel = context.getString(R.string.account_type_format,
+                    accountTypeDisplayLabel);
         }
 
         if (TextUtils.isEmpty(accountName)) {
-            return new Pair<>(
-                    /* accountName =*/ null,
-                    context.getString(R.string.account_type_format, accountTypeDisplayLabel));
+            return new Pair<>(/* accountName */ null, accountTypeDisplayLabel.toString());
         }
 
-        final String accountNameDisplayLabel =
-                context.getString(R.string.from_account_format, accountName);
-
-        if (GoogleAccountType.ACCOUNT_TYPE.equals(accountType.accountType)
-                && accountType.dataSet == null) {
-            return new Pair<>(
-                    accountNameDisplayLabel,
-                    context.getString(R.string.google_account_type_format, accountTypeDisplayLabel));
-        }
-        return new Pair<>(
-                accountNameDisplayLabel,
-                context.getString(R.string.account_type_format, accountTypeDisplayLabel));
+        return new Pair<>(context.getString(R.string.from_account_format, accountName),
+                accountTypeDisplayLabel.toString());
     }
 
     /**
diff --git a/tests/src/com/android/contacts/editor/EditorUiUtilsTest.java b/tests/src/com/android/contacts/editor/EditorUiUtilsTest.java
index 1fb5cb7..19f28d3 100644
--- a/tests/src/com/android/contacts/editor/EditorUiUtilsTest.java
+++ b/tests/src/com/android/contacts/editor/EditorUiUtilsTest.java
@@ -119,10 +119,7 @@
         assertNotNull(pair);
         assertEquals(getContext().getString(R.string.from_account_format, ACCOUNT_NAME),
                 pair.first); // somebody@lunkedin.com
-        assertEquals(
-                getContext().getString(R.string.account_type_format,
-                        getContext().getString(R.string.account_phone)),
-                pair.second); // "Phone-only, unsynced contact"
+        assertEquals(getContext().getString(R.string.account_phone), pair.second); // Device
     }
 
     public void testGetAccountInfo_NoAccountName_DisplayLabel() {
@@ -133,6 +130,14 @@
         assertNull(pair.first);
         assertEquals(getContext().getString(R.string.account_type_format, DISPLAY_LABEL),
                 pair.second); // LunkedIn contact
+
+        final Pair pairDevice = EditorUiUtils.getAccountInfo(
+                getContext(),
+                /* accountName =*/ null,
+                new MockAccountType(getContext().getString(R.string.account_phone)));
+        assertNotNull(pairDevice);
+        assertNull(pairDevice.first);
+        assertEquals(getContext().getString(R.string.account_phone), pairDevice.second); // Device
     }
 
     public void testGetAccountInfo_NoAccountName_NoDisplayLabel() {
@@ -141,10 +146,7 @@
 
         assertNotNull(pair);
         assertNull(pair.first);
-        assertEquals(
-                getContext().getString(R.string.account_type_format,
-                        getContext().getString(R.string.account_phone)),
-                pair.second); // "Phone-only, unsynced contact"
+        assertEquals(getContext().getString(R.string.account_phone), pair.second); // Device
     }
 
     public void testGetRingtongStrFromUri_lessThanOrEqualsToM() {
