diff --git a/res/layout-finger/total_contacts.xml b/res/layout-finger/total_contacts.xml
new file mode 100644
index 0000000..1221ef3
--- /dev/null
+++ b/res/layout-finger/total_contacts.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/totalContactsText"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    style="?android:attr/listSeparatorTextViewStyle"
+    android:textColor="@*android:color/dim_foreground_dark"
+    android:textSize="12sp"
+    android:textStyle="normal"
+    android:background="@drawable/section_dark"
+    android:paddingLeft="7dp"
+    android:gravity="left|center_vertical"
+    android:visibility="gone"
+/>
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 316792d..141c166 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -408,6 +408,12 @@
     <!-- Section header in the Edit Contacts screen for the "Add more items" button -->
     <string name="listSeparatorMore_edit">More</string>
 
+    <!-- Displayed at the top of the contacts showing the total number of contacts visible when "Only contacts with phones" is selected -->
+    <string name="listTotalPhoneContacts"><xliff:g id="num">%s</xliff:g> 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 -->
+    <string name="listTotalAllContacts"><xliff:g id="num">%s</xliff:g> contacts</string>
+
     <!-- The description text for the social activity stream tab. Space is limited for this string, so the shorter the better -->
     <string name="socialStreamIconLabel">Social</string>
 
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index 6a433d1..e03d5db 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -16,12 +16,11 @@
 
 package com.android.contacts;
 
-import com.android.contacts.model.ContactsSource;
 import com.android.contacts.model.Sources;
 import com.android.contacts.ui.DisplayGroupsActivity;
 import com.android.contacts.ui.DisplayGroupsActivity.Prefs;
-import com.android.contacts.util.Constants;
 import com.android.contacts.util.AccountSelectionUtil;
+import com.android.contacts.util.Constants;
 
 import android.accounts.Account;
 import android.app.Activity;
@@ -175,11 +174,13 @@
     static final int MODE_MASK_SHOW_CALL_BUTTON = 0x02000000;
     /** Mask to disable fasttrack (images will show as normal images) */
     static final int MODE_MASK_DISABLE_FASTTRACK = 0x01000000;
+    /** Mask to show the total number of contacts at the top */
+    static final int MODE_MASK_SHOW_NUMBER_OF_CONTACTS = 0x00800000;
 
     /** Unknown mode */
     static final int MODE_UNKNOWN = 0;
     /** Default mode */
-    static final int MODE_DEFAULT = 4 | MODE_MASK_SHOW_PHOTOS;
+    static final int MODE_DEFAULT = 4 | MODE_MASK_SHOW_PHOTOS | MODE_MASK_SHOW_NUMBER_OF_CONTACTS;
     /** Custom mode */
     static final int MODE_CUSTOM = 8;
     /** Show all starred contacts */
@@ -556,9 +557,14 @@
             list.setTextFilterEnabled(true);
         }
 
+        final LayoutInflater inflater = getLayoutInflater();
+        if ((mMode & MODE_MASK_SHOW_NUMBER_OF_CONTACTS) != 0) {
+            View totalContacts = inflater.inflate(R.layout.total_contacts, list, false);
+            list.addHeaderView(totalContacts);
+        }
+
         if ((mMode & MODE_MASK_CREATE_NEW) != 0) {
             // Add the header for creating a new contact
-            final LayoutInflater inflater = getLayoutInflater();
             View header = inflater.inflate(R.layout.create_new_contact, list, false);
             list.addHeaderView(header);
         }
@@ -570,6 +576,11 @@
         setListAdapter(mAdapter);
         getListView().setOnScrollListener(mAdapter);
 
+        if ((mMode & MODE_MASK_SHOW_NUMBER_OF_CONTACTS) != 0) {
+            TextView totalContacts = (TextView) findViewById(R.id.totalContactsText);
+            totalContacts.setVisibility(View.VISIBLE);
+        }
+
         // We manually save/restore the listview state
         list.setSaveEnabled(false);
 
@@ -1065,6 +1076,13 @@
                 getSystemService(Context.INPUT_METHOD_SERVICE);
         inputMethodManager.hideSoftInputFromWindow(mList.getWindowToken(), 0);
 
+        if ((mMode & MODE_MASK_SHOW_NUMBER_OF_CONTACTS) != 0) {
+            if (position == 0) {
+                return;
+            }
+            position--;
+        }
+
         if (mMode == MODE_INSERT_OR_EDIT_CONTACT) {
             Intent intent;
             if (position == 0) {
@@ -2326,7 +2344,9 @@
 
             // Get the split between starred and frequent items, if the mode is strequent
             mFrequentSeparatorPos = ListView.INVALID_POSITION;
-            if (cursor != null && cursor.getCount() > 0 && mMode == MODE_STREQUENT) {
+            int cursorCount = 0;
+            if (cursor != null && (cursorCount = cursor.getCount()) > 0
+                    && mMode == MODE_STREQUENT) {
                 cursor.move(-1);
                 for (int i = 0; cursor.moveToNext(); i++) {
                     int starred = cursor.getInt(SUMMARY_STARRED_COLUMN_INDEX);
@@ -2341,7 +2361,12 @@
             }
 
             super.changeCursor(cursor);
-
+            if ((mMode & MODE_MASK_SHOW_NUMBER_OF_CONTACTS) != 0) {
+                TextView totalContacts = (TextView) findViewById(R.id.totalContactsText);
+                int stringId = mDisplayOnlyPhones
+                    ? R.string.listTotalPhoneContacts : R.string.listTotalAllContacts;
+                totalContacts.setText(getString(stringId, cursorCount));
+            }
             // Update the indexer for the fast scroll widget
             updateIndexer(cursor);
         }
