diff --git a/src/com/android/contacts/ContactsDrawerActivity.java b/src/com/android/contacts/ContactsDrawerActivity.java
index 1dc7092..28816f5 100644
--- a/src/com/android/contacts/ContactsDrawerActivity.java
+++ b/src/com/android/contacts/ContactsDrawerActivity.java
@@ -354,9 +354,11 @@
 
         for (int i = 0; i < accountFilterItems.size(); i++) {
             final ContactListFilter filter = accountFilterItems.get(i);
-            final String accountName = filter.accountName;
+            final String menuName =
+                    filter.filterType == ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS
+                            ? getString(R.string.account_phone) : filter.accountName;
             final MenuItem menuItem = subMenu.add(R.id.nav_filters_items, Menu.NONE, Menu.NONE,
-                    accountName);
+                    menuName);
             mFilterMenuMap.put(filter, menuItem);
             final Intent intent = new Intent();
             intent.putExtra(AccountFilterUtil.EXTRA_CONTACT_LIST_FILTER, filter);
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 7b5f3e6..31c047a 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -489,7 +489,9 @@
         final ContactListFilter currentFilter = mContactListFilterController.getFilter();
         final AccountWithDataSet accountOfCurrentFilter = new AccountWithDataSet(
                 currentFilter.accountName, currentFilter.accountType, currentFilter.dataSet);
-        return mWritableAccounts != null && mWritableAccounts.contains(accountOfCurrentFilter);
+        return accountOfCurrentFilter.isLocalAccount()
+                || (mWritableAccounts != null
+                && mWritableAccounts.contains(accountOfCurrentFilter));
     }
 
     private void showFabWithAnimation(boolean showFab) {
@@ -1350,7 +1352,7 @@
                     // If we are in account view, we pass the account explicitly in order to
                     // create contact in the account. This will prevent the default account dialog
                     // from being displayed.
-                    if (!isAllContactsFilter(filter)) {
+                    if (!isAllContactsFilter(filter) && !isDeviceContactsFilter(filter)) {
                         final Account account = new Account(filter.accountName, filter.accountType);
                         extras.putParcelable(Intents.Insert.EXTRA_ACCOUNT, account);
                         extras.putString(Intents.Insert.EXTRA_DATA_SET, filter.dataSet);
@@ -1392,8 +1394,14 @@
         updateFilterMenu(filter);
 
         if (getSupportActionBar() != null) {
-            final String actionBarTitle = TextUtils.isEmpty(filter.accountName) ?
-                    getString(R.string.contactsList) : filter.accountName;
+            String actionBarTitle = null;
+            if (filter.filterType == ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS) {
+                actionBarTitle = getString(R.string.account_phone);
+            } else if (!TextUtils.isEmpty(filter.accountName)) {
+                actionBarTitle = filter.accountName;
+            } else {
+                actionBarTitle = getString(R.string.contactsList);
+            }
             getSupportActionBar().setTitle(actionBarTitle);
         }
     }
@@ -1408,6 +1416,10 @@
         return filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS;
     }
 
+    private boolean isDeviceContactsFilter(ContactListFilter filter) {
+        return filter.filterType == ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS;
+    }
+
     @Override
     protected boolean shouldFinish() {
         return false;
