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() {
