diff --git a/res/layout/contact_tile_list.xml b/res/layout/contact_tile_list.xml
index 79c6ecf..69ae1cc 100644
--- a/res/layout/contact_tile_list.xml
+++ b/res/layout/contact_tile_list.xml
@@ -14,9 +14,22 @@
      limitations under the License.
 -->
 
-<ListView xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/contact_tile_list"
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:divider="@null"
-/>
+    android:layout_height="match_parent">
+
+    <ListView
+        android:id="@+id/contact_tile_list"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:divider="@null" />
+
+    <TextView
+        android:id="@+id/contact_tile_list_empty"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:gravity="center_horizontal"
+        android:textAppearance="?android:attr/textAppearanceLarge"/>
+
+</FrameLayout>
diff --git a/res/layout/item_group_membership.xml b/res/layout/item_group_membership.xml
index 34ba773..13ddb20 100644
--- a/res/layout/item_group_membership.xml
+++ b/res/layout/item_group_membership.xml
@@ -20,10 +20,11 @@
     android:layout_height="wrap_content"
     android:orientation="vertical">
 
-    <View
+    <ImageView
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:background="@drawable/divider_horizontal_light" />
+        android:scaleType="fitXY"
+        android:src="@drawable/divider_horizontal_light" />
 
     <include
         android:id="@+id/kind_title"
diff --git a/res/layout/item_kind_section.xml b/res/layout/item_kind_section.xml
index 6c6f960..2c6dc6f 100644
--- a/res/layout/item_kind_section.xml
+++ b/res/layout/item_kind_section.xml
@@ -23,10 +23,11 @@
     android:paddingBottom="@dimen/editor_field_bottom_padding"
     android:orientation="vertical">
 
-    <View
+    <ImageView
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:background="@drawable/divider_horizontal_light" />
+        android:scaleType="fitXY"
+        android:src="@drawable/divider_horizontal_light" />
 
     <LinearLayout
         android:id="@+id/kind_editors"
diff --git a/src/com/android/contacts/activities/DialtactsActivity.java b/src/com/android/contacts/activities/DialtactsActivity.java
index 62b8321..7a84e6d 100644
--- a/src/com/android/contacts/activities/DialtactsActivity.java
+++ b/src/com/android/contacts/activities/DialtactsActivity.java
@@ -20,6 +20,7 @@
 import com.android.contacts.calllog.CallLogFragment;
 import com.android.contacts.dialpad.DialpadFragment;
 import com.android.contacts.interactions.PhoneNumberInteraction;
+import com.android.contacts.list.ContactTileAdapter.DisplayType;
 import com.android.contacts.list.OnPhoneNumberPickerActionListener;
 import com.android.contacts.list.PhoneNumberPickerFragment;
 import com.android.contacts.list.ContactTileListFragment;
@@ -335,6 +336,7 @@
             mStrequentFragment = (ContactTileListFragment) fragment;
             mStrequentFragment.enableQuickContact(false);
             mStrequentFragment.setListener(mStrequentListener);
+            mStrequentFragment.setDisplayType(DisplayType.STREQUENT_PHONE_ONLY);
         } else if (fragment instanceof PhoneNumberPickerFragment) {
             mSearchFragment = (PhoneNumberPickerFragment) fragment;
             mSearchFragment.setOnPhoneNumberPickerActionListener(mPhoneNumberPickerActionListener);
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 0b403cb..07fa8f1 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -202,6 +202,13 @@
         return mProviderStatus == ProviderStatus.STATUS_NORMAL;
     }
 
+    private boolean areAccountsAvailable() {
+        final ArrayList<Account> accounts =
+            AccountTypeManager.getInstance(this).getAccounts(true /* writeable */);
+        return !accounts.isEmpty();
+    }
+
+
     /**
      * Initialize fragments that are (or may not be) in the layout.
      *
@@ -575,10 +582,12 @@
             if (mActionBarAdapter.isSearchMode()) {
                 mTabPagerAdapter.setSearchMode(true);
             } else {
+                // No smooth scrolling if quitting from the search mode.
+                final boolean wasSearchMode = mTabPagerAdapter.isSearchMode();
                 mTabPagerAdapter.setSearchMode(false);
                 int tabIndex = tab.ordinal();
                 if (mTabPager.getCurrentItem() != tabIndex) {
-                    mTabPager.setCurrentItem(tab.ordinal(), false /* no smooth scroll */);
+                    mTabPager.setCurrentItem(tabIndex, !wasSearchMode);
                 }
             }
             invalidateOptionsMenu();
@@ -1230,8 +1239,13 @@
                     addGroupMenu.setVisible(false);
                     break;
                 case GROUPS:
+                    // Do not display the "new group" button if no accounts are available
+                    if (areAccountsAvailable()) {
+                        addGroupMenu.setVisible(true);
+                    } else {
+                        addGroupMenu.setVisible(false);
+                    }
                     addContactMenu.setVisible(false);
-                    addGroupMenu.setVisible(true);
                     break;
             }
         }
diff --git a/src/com/android/contacts/list/ContactTileAdapter.java b/src/com/android/contacts/list/ContactTileAdapter.java
index 596cceb..9674960 100644
--- a/src/com/android/contacts/list/ContactTileAdapter.java
+++ b/src/com/android/contacts/list/ContactTileAdapter.java
@@ -202,7 +202,7 @@
     @Override
     public int getCount() {
         if (mContactCursor == null || mContactCursor.getCount() == 0) {
-          return 0;
+            return 0;
         }
 
         switch (mDisplayType) {
@@ -304,7 +304,7 @@
         int itemViewType = getItemViewType(position);
         if (itemViewType == ViewTypes.DIVIDER) {
             // Checking For Divider First so not to cast convertView
-            return convertView == null ? createDivider() : convertView;
+            return convertView == null ? getDivider() : convertView;
         }
 
         ContactTileRow contactTileRowView = (ContactTileRow) convertView;
@@ -322,7 +322,7 @@
      * Divider uses a list_seperator.xml along with text to denote
      * the most frequently contacted contacts.
      */
-    private View createDivider() {
+    private View getDivider() {
         View dividerView = View.inflate(mContext, R.layout.list_separator, null);
         dividerView.setFocusable(false);
         TextView text = (TextView) dividerView.findViewById(R.id.header_text);
diff --git a/src/com/android/contacts/list/ContactTileListFragment.java b/src/com/android/contacts/list/ContactTileListFragment.java
index f4bd1b5..875d5d2 100644
--- a/src/com/android/contacts/list/ContactTileListFragment.java
+++ b/src/com/android/contacts/list/ContactTileListFragment.java
@@ -34,6 +34,7 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ListView;
+import android.widget.TextView;
 
 /**
  * Fragment containing a list of starred contacts followed by a list of frequently contacted.
@@ -49,8 +50,9 @@
 
     private Listener mListener;
     private ContactTileAdapter mAdapter;
+    private DisplayType mDisplayType;
+    private TextView mEmptyView;
     private ListView mListView;
-    private DisplayType mDisplayType = DisplayType.STREQUENT_PHONE_ONLY;
 
     @Override
     public void onAttach(Activity activity) {
@@ -67,11 +69,15 @@
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
-        View v = inflater.inflate(R.layout.contact_tile_list, container, false);
-        mListView = (ListView) v.findViewById(R.id.contact_tile_list);
+        View listLayout = inflater.inflate(R.layout.contact_tile_list, container, false);
+
+        mEmptyView = (TextView) listLayout.findViewById(R.id.contact_tile_list_empty);
+        mListView = (ListView) listLayout.findViewById(R.id.contact_tile_list);
+
         mListView.setItemsCanFocus(true);
         mListView.setAdapter(mAdapter);
-        return v;
+
+        return listLayout;
     }
 
     @Override
@@ -117,12 +123,32 @@
         @Override
         public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
             mAdapter.setContactCursor(data);
+            mEmptyView.setText(getEmptyStateText());
+            mListView.setEmptyView(mEmptyView);
         }
 
         @Override
         public void onLoaderReset(Loader<Cursor> loader) {}
     };
 
+    private String getEmptyStateText() {
+        String emptyText;
+        switch (mDisplayType) {
+            case STREQUENT:
+            case STREQUENT_PHONE_ONLY:
+            case STARRED_ONLY:
+                emptyText = getString(R.string.listTotalAllContactsZeroStarred);
+                break;
+            case FREQUENT_ONLY:
+            case GROUP_MEMBERS:
+                emptyText = getString(R.string.noContacts);
+                break;
+            default:
+                throw new IllegalArgumentException("Unrecognized DisplayType " + mDisplayType);
+        }
+        return emptyText;
+    }
+
     public void setListener(Listener listener) {
         mListener = listener;
     }
