diff --git a/res/layout/search_header.xml b/res/layout/search_header.xml
index 1eaa4e0..ab8ec53 100644
--- a/res/layout/search_header.xml
+++ b/res/layout/search_header.xml
@@ -34,6 +34,7 @@
         android:id="@+id/progress"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
+        android:layout_toRightOf="@id/totalContactsText"
         style="?android:attr/progressBarStyleSmall"
         android:layout_alignParentRight="true"
         android:layout_centerVertical="true"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index b0dffca..d09904a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -307,8 +307,8 @@
         <item quantity="other"><xliff:g id="count">%d</xliff:g> contacts with phone numbers</item>
     </plurals>
 
-    <!-- Displayed at the top of the contacts showing the zero as total number of contacts visible when "Only contacts with phones" is selected -->
-    <string name="listTotalPhoneContactsZero">No visible contacts with phone numbers</string>
+    <!-- Displayed at the top of the contacts showing the zero as total number of contacts visible when "Only contacts with phones" is selected [CHAR LIMIT=64]-->
+    <string name="listTotalPhoneContactsZero">No contacts with phone numbers</string>
 
     <!-- Displayed at the top of the contacts showing the total number of contacts visible when "Only contacts with phones" not selected -->
     <plurals name="listTotalAllContacts">
@@ -316,8 +316,17 @@
         <item quantity="other"><xliff:g id="count">%d</xliff:g> contacts</item>
     </plurals>
 
-    <!-- Displayed at the top of the contacts showing the zero total number of contacts visible when "Only contacts with phones" not selected -->
-    <string name="listTotalAllContactsZero">No visible contacts</string>
+    <!-- Displayed at the top of the contacts showing the zero total number of contacts visible when "All contacts" is selected  [CHAR LIMIT=64]-->
+    <string name="listTotalAllContactsZero">No contacts</string>
+
+    <!-- Displayed at the top of the contacts showing the zero total number of contacts visible when "Custom" is selected  [CHAR LIMIT=64]-->
+    <string name="listTotalAllContactsZeroCustom">No visible contacts</string>
+
+    <!-- Displayed at the top of the contacts showing the zero total number of contacts visible when starred contact list is selected  [CHAR LIMIT=64]-->
+    <string name="listTotalAllContactsZeroStarred">No starred contacts</string>
+
+    <!-- Displayed at the top of the contacts showing the zero total number of contacts visible when a group or account is selected  [CHAR LIMIT=64]-->
+    <string name="listTotalAllContactsZeroGroup">No contacts in <xliff:g id="name" example="Friends">%s</xliff:g></string>
 
     <!-- Displayed at the top of the contacts showing the total number of contacts found when "Only contacts with phones" not selected -->
     <plurals name="listFoundAllContacts">
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
index e61232a..763c094 100644
--- a/src/com/android/contacts/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -892,17 +892,6 @@
         }
     }
 
-    // TODO: fix PluralRules to handle zero correctly and use Resources.getQuantityText directly
-    public String getQuantityText(int count, int zeroResourceId, int pluralResourceId) {
-        if (count == 0) {
-            return mContext.getString(zeroResourceId);
-        } else {
-            String format = mContext.getResources()
-                    .getQuantityText(pluralResourceId, count).toString();
-            return String.format(format, count);
-        }
-    }
-
     protected void setEmptyText(int resourceId) {
         TextView empty = (TextView) getEmptyView().findViewById(R.id.emptyText);
         empty.setText(mContext.getText(resourceId));
diff --git a/src/com/android/contacts/list/ContactListFilter.java b/src/com/android/contacts/list/ContactListFilter.java
index 5cb96b4..c53859b 100644
--- a/src/com/android/contacts/list/ContactListFilter.java
+++ b/src/com/android/contacts/list/ContactListFilter.java
@@ -43,6 +43,7 @@
     private static final String KEY_GROUP_ID = "filter.groupId";
     private static final String KEY_GROUP_SOURCE_ID = "filter.groupSourceId";
     private static final String KEY_GROUP_READ_ONLY = "filter.groupReadOnly";
+    private static final String KEY_GROUP_TITLE = "filter.groupTitle";
 
     public int filterType;
     public String accountType;
@@ -177,6 +178,7 @@
             .putLong(KEY_GROUP_ID, filter == null ? -1 : filter.groupId)
             .putString(KEY_GROUP_SOURCE_ID, filter == null ? null : filter.groupSourceId)
             .putBoolean(KEY_GROUP_READ_ONLY, filter == null ? false : filter.groupReadOnly)
+            .putString(KEY_GROUP_TITLE, filter == null ? null : filter.title)
             .apply();
     }
 
@@ -192,6 +194,7 @@
         filter.groupId = prefs.getLong(KEY_GROUP_ID, -1);
         filter.groupSourceId = prefs.getString(KEY_GROUP_SOURCE_ID, null);
         filter.groupReadOnly = prefs.getBoolean(KEY_GROUP_READ_ONLY, false);
+        filter.title = prefs.getString(KEY_GROUP_TITLE, "group");
         return filter;
     }
 
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index 7b04562..f95c4af 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -95,15 +95,38 @@
     protected void showCount(int partitionIndex, Cursor data) {
         if (!isSearchMode() && data != null) {
             int count = data.getCount();
-            // TODO
-            // if (contactsListActivity.mDisplayOnlyPhones) {
-            // text = contactsListActivity.getQuantityText(count,
-            // R.string.listTotalPhoneContactsZero,
-            // R.plurals.listTotalPhoneContacts);
-            TextView textView = (TextView)mCounterHeaderView.findViewById(R.id.totalContactsText);
-            String text = getQuantityText(count, R.string.listTotalAllContactsZero,
-                    R.plurals.listTotalAllContacts);
-            textView.setText(text);
+            TextView textView = (TextView) mCounterHeaderView.findViewById(R.id.totalContactsText);
+            if (count != 0) {
+                String format = getResources().getQuantityText(
+                        R.plurals.listTotalAllContacts, count).toString();
+                textView.setText(String.format(format, count));
+            } else {
+                ContactListFilter filter = getFilter();
+                int filterType = filter != null ? filter.filterType
+                        : ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS;
+                switch (filterType) {
+                    case ContactListFilter.FILTER_TYPE_ACCOUNT:
+                        textView.setText(getString(
+                                R.string.listTotalAllContactsZeroGroup, filter.accountName));
+                        break;
+                    case ContactListFilter.FILTER_TYPE_GROUP:
+                        textView.setText(
+                                getString(R.string.listTotalAllContactsZeroGroup, filter.title));
+                        break;
+                    case ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY:
+                        textView.setText(R.string.listTotalPhoneContactsZero);
+                        break;
+                    case ContactListFilter.FILTER_TYPE_STARRED:
+                        textView.setText(R.string.listTotalAllContactsZeroStarred);
+                        break;
+                    case ContactListFilter.FILTER_TYPE_CUSTOM:
+                        textView.setText(R.string.listTotalAllContactsZeroCustom);
+                        break;
+                    default:
+                        textView.setText(R.string.listTotalAllContactsZero);
+                        break;
+                }
+            }
         } else {
             ContactListAdapter adapter = getAdapter();
             if (adapter == null) {
