diff --git a/res/layout-sw580dp-w1000dp/contact_detail_fragment.xml b/res/layout-sw580dp-w1000dp/contact_detail_fragment.xml
index 1623e84..ecf8130 100644
--- a/res/layout-sw580dp-w1000dp/contact_detail_fragment.xml
+++ b/res/layout-sw580dp-w1000dp/contact_detail_fragment.xml
@@ -22,7 +22,8 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:background="@color/background_primary"
-    android:padding="16dip">
+    android:paddingLeft="16dip"
+    android:paddingRight="16dip">
 
     <!-- Placeholder for empty list -->
     <include
@@ -41,11 +42,14 @@
             android:scaleType="centerCrop"
             android:layout_width="@dimen/detail_contact_photo_size"
             android:layout_height="@dimen/detail_contact_photo_size"
+            android:layout_marginTop="@dimen/detail_contact_photo_margin"
             android:layout_marginRight="@dimen/detail_contact_photo_margin"/>
 
         <ListView android:id="@android:id/list"
             android:layout_width="0dip"
             android:layout_height="match_parent"
+            android:paddingTop="16dip"
+            android:clipToPadding="false"
             android:fadingEdge="none"
             android:layout_weight="1"
             android:divider="@null"/>
diff --git a/res/layout-sw580dp-w1000dp/contact_detail_list_item.xml b/res/layout-sw580dp-w1000dp/contact_detail_list_item.xml
index de6cd97..ffde8b0 100644
--- a/res/layout-sw580dp-w1000dp/contact_detail_list_item.xml
+++ b/res/layout-sw580dp-w1000dp/contact_detail_list_item.xml
@@ -90,8 +90,7 @@
             android:layout_height="16dip"
             android:visibility="gone"
             android:layout_gravity="center_vertical"
-            android:background="@drawable/ic_menu_mark" />
-
+            android:background="@drawable/ic_list_default_mime_holo_dark" />
 
         <View
             android:id="@+id/vertical_divider"
diff --git a/res/layout-sw580dp-w1000dp/people_activity.xml b/res/layout-sw580dp-w1000dp/people_activity.xml
index 29aa150..9d066df 100644
--- a/res/layout-sw580dp-w1000dp/people_activity.xml
+++ b/res/layout-sw580dp-w1000dp/people_activity.xml
@@ -129,7 +129,6 @@
                         class="com.android.contacts.list.ContactTileListFragment"
                         android:layout_height="match_parent"
                         android:layout_width="match_parent"
-                        android:layout_marginTop="32dip"
                         android:layout_marginRight="32dip"
                         android:layout_marginLeft="32dip"/>
 
diff --git a/res/layout-sw580dp/people_activity.xml b/res/layout-sw580dp/people_activity.xml
index fecb848..c32893e 100644
--- a/res/layout-sw580dp/people_activity.xml
+++ b/res/layout-sw580dp/people_activity.xml
@@ -117,7 +117,7 @@
                 <FrameLayout
                     android:layout_width="0dip"
                     android:layout_height="match_parent"
-                    android:layout_weight="1"
+                    android:layout_weight="10"
                     android:background="@drawable/panel_favorites_holo_light">
 
                     <fragment
@@ -125,9 +125,8 @@
                         class="com.android.contacts.list.ContactTileListFragment"
                         android:layout_height="match_parent"
                         android:layout_width="match_parent"
-                        android:layout_marginTop="32dip"
-                        android:layout_marginRight="32dip"
-                        android:layout_marginLeft="32dip"/>
+                        android:layout_marginRight="16dip"
+                        android:layout_marginLeft="16dip"/>
 
                 </FrameLayout>
 
@@ -137,8 +136,8 @@
                     class="com.android.contacts.list.ContactTileListFragment"
                     android:layout_width="0dip"
                     android:layout_height="match_parent"
-                    android:layout_weight="1"
-                    android:layout_marginTop="32dip"
+                    android:layout_weight="8"
+                    android:layout_marginTop="16dip"
                     android:layout_marginRight="16dip"/>
 
             </LinearLayout>
diff --git a/res/layout/contact_tile_list.xml b/res/layout/contact_tile_list.xml
index b1469f3..35c04c1 100644
--- a/res/layout/contact_tile_list.xml
+++ b/res/layout/contact_tile_list.xml
@@ -24,6 +24,8 @@
         android:id="@+id/contact_tile_list"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
+        android:paddingTop="@dimen/contact_tile_list_padding_top"
+        android:clipToPadding="false"
         android:fadingEdge="none"
         android:divider="@null" />
 
diff --git a/res/values-sw580dp-w1000dp/dimens.xml b/res/values-sw580dp-w1000dp/dimens.xml
index 334cc34..940e456 100644
--- a/res/values-sw580dp-w1000dp/dimens.xml
+++ b/res/values-sw580dp-w1000dp/dimens.xml
@@ -18,4 +18,5 @@
     <dimen name="group_detail_side_margin">32dip</dimen>
     <dimen name="detail_contact_photo_margin">16dip</dimen>
     <dimen name="contact_detail_list_top_padding">32dip</dimen>
+    <dimen name="contact_tile_list_padding_top">32dip</dimen>
 </resources>
diff --git a/res/values-sw580dp/dimens.xml b/res/values-sw580dp/dimens.xml
index 77315fc..8621afd 100644
--- a/res/values-sw580dp/dimens.xml
+++ b/res/values-sw580dp/dimens.xml
@@ -29,6 +29,7 @@
     <dimen name="detail_update_section_item_horizontal_padding">8dip</dimen>
     <dimen name="detail_update_section_item_vertical_padding">16dip</dimen>
     <dimen name="search_view_width">400dip</dimen>
+    <dimen name="contact_tile_list_padding_top">16dip</dimen>
     <!-- Center vertically -->
     <dimen name="quick_contact_top_position">-1px</dimen>
     <!-- Contact list (vertical scroll bar comes left) -->
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 12ae918..a5843c6 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -110,7 +110,6 @@
     <!-- Font size used for the social status in the widget -->
     <dimen name="widget_text_size_snippet">13sp</dimen>
 
-
     <!-- Size of the shortcut icon. 0dip means: use the system default -->
     <dimen name="shortcut_icon_size">0dip</dimen>
 
@@ -175,6 +174,9 @@
     -->
     <dimen name="contact_tile_shadowbox_height">48sp</dimen>
 
+    <!-- Top padding of the ListView in the contact tile list -->
+    <dimen name="contact_tile_list_padding_top">0dip</dimen>
+
     <!-- Call Log -->
     <dimen name="call_log_call_action_size">32dip</dimen>
     <dimen name="call_log_call_action_width">48dip</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index aa79d84..7bb875c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -136,7 +136,7 @@
     <!-- Menu item (in the action bar) that creates a new group [CHAR LIMIT=12] -->
     <string name="menu_new_group_action_bar">New</string>
 
-    <!-- Title of the confirmation dialog for separating contacts into multiple instances [CHAR LIMIT=20] -->
+    <!-- Title of the confirmation dialog for separating contacts into multiple instances [CHAR LIMIT=26] -->
     <string name="splitConfirmation_title">Separate contact?</string>
 
     <!-- Confirmation dialog for separating contacts into multiple instances [CHAR LIMIT=NONE] -->
@@ -163,7 +163,7 @@
     <!-- Toast shown after two contacts have been joined by a user action -->
     <string name="contactsJoinedMessage">Contacts joined</string>
 
-    <!-- Confirmation dialog title after users selects to delete a contact. [CHAR LIMIT=20]-->
+    <!-- Confirmation dialog title after users selects to delete a contact. [CHAR LIMIT=25]-->
     <string name="deleteConfirmation_title">Delete contact?</string>
 
     <!-- Menu item that opens the Options activity for a given contact [CHAR LIMIT=15] -->
@@ -418,7 +418,7 @@
     <!-- Text displayed when the call log is empty -->
     <string name="recentCalls_empty">Call log is empty.</string>
 
-    <!-- Title of the confirmation dialog for clearing the call log. [CHAR LIMIT=20]  -->
+    <!-- Title of the confirmation dialog for clearing the call log. [CHAR LIMIT=37]  -->
     <string name="clearCallLogConfirmation_title">Clear call log?</string>
 
     <!-- Confirmation dialog for clearing the call log. [CHAR LIMIT=NONE]  -->
@@ -827,7 +827,7 @@
     <!-- The failed reason which should not be shown but it may in some buggy condition. [CHAR LIMIT=40] -->
     <string name="fail_reason_unknown">Unknown error.</string>
 
-    <!-- Dialog title shown when a user is asked to select vCard file. [CHAR LIMIT=20] -->
+    <!-- Dialog title shown when a user is asked to select vCard file. [CHAR LIMIT=25] -->
     <string name="select_vcard_title">Choose vCard file</string>
 
     <!-- The title shown when vCard importer is caching files to be imported into local temporary
@@ -892,7 +892,7 @@
     <!-- The percentage, used for expressing the progress of vCard import/export. -->
     <string name="percentage">%s%%</string>
 
-    <!-- Dialog title shown when a user confirms whether he/she export Contact data. [CHAR LIMIT=20] -->
+    <!-- Dialog title shown when a user confirms whether he/she export Contact data. [CHAR LIMIT=32] -->
     <string name="confirm_export_title">Export contacts?</string>
 
     <!-- Dialog message shown when a user confirms whether he/she export Contact data [CHAR LIMIT=NONE] -->
@@ -1022,7 +1022,7 @@
     <!-- The menu item to bulk import or bulk export contacts from SIM card or SD card.  [CHAR LIMIT=30]-->
     <string name="menu_import_export">Import/export</string>
 
-    <!-- Dialog title when selecting the bulk operation to perform from a list. [CHAR LIMIT=25] -->
+    <!-- Dialog title when selecting the bulk operation to perform from a list. [CHAR LIMIT=36] -->
     <string name="dialog_import_export">Import/export contacts</string>
 
     <!-- The menu item to share the currently viewed contact [CHAR LIMIT=30] -->
diff --git a/src/com/android/contacts/calllog/CallLogGroupBuilder.java b/src/com/android/contacts/calllog/CallLogGroupBuilder.java
index a7f8fa3..b636842 100644
--- a/src/com/android/contacts/calllog/CallLogGroupBuilder.java
+++ b/src/com/android/contacts/calllog/CallLogGroupBuilder.java
@@ -17,6 +17,7 @@
 package com.android.contacts.calllog;
 
 import com.android.common.widget.GroupingListAdapter;
+import com.google.common.annotations.VisibleForTesting;
 
 import android.database.CharArrayBuffer;
 import android.database.Cursor;
@@ -74,7 +75,7 @@
         while (cursor.moveToNext()) {
             cursor.copyStringToBuffer(CallLogQuery.NUMBER, currentNumber);
             final int callType = cursor.getInt(CallLogQuery.CALL_TYPE);
-            final boolean sameNumber = equalPhoneNumbers(firstNumber, currentNumber);
+            final boolean sameNumber = equalNumbers(firstNumber, currentNumber);
             final boolean shouldGroup;
 
             if (CallLogQuery.isSectionHeader(cursor)) {
@@ -129,10 +130,45 @@
         mGroupCreator.addGroup(cursorPosition, size, false);
     }
 
-    private boolean equalPhoneNumbers(CharArrayBuffer buffer1, CharArrayBuffer buffer2) {
+    @VisibleForTesting
+    boolean equalNumbers(CharArrayBuffer buffer1, CharArrayBuffer buffer2) {
         // TODO add PhoneNumberUtils.compare(CharSequence, CharSequence) to avoid
         // string allocation
-        return PhoneNumberUtils.compare(new String(buffer1.data, 0, buffer1.sizeCopied),
-                new String(buffer2.data, 0, buffer2.sizeCopied));
+        String number1 = buffer1 == null ? null : new String(buffer1.data, 0, buffer1.sizeCopied);
+        String number2 = buffer2 == null ? null : new String(buffer2.data, 0, buffer2.sizeCopied);
+        if (PhoneNumberUtils.isUriNumber(number1) || PhoneNumberUtils.isUriNumber(number2)) {
+            return compareSipAddresses(number1, number2);
+        } else {
+            return PhoneNumberUtils.compare(number1, number2);
+        }
+    }
+
+    @VisibleForTesting
+    boolean compareSipAddresses(String number1, String number2) {
+        if (number1 == null || number2 == null) return number1 == number2;
+
+        int index1 = number1.indexOf('@');
+        final String userinfo1;
+        final String rest1;
+        if (index1 != -1) {
+            userinfo1 = number1.substring(0, index1);
+            rest1 = number1.substring(index1);
+        } else {
+            userinfo1 = number1;
+            rest1 = "";
+        }
+
+        int index2 = number2.indexOf('@');
+        final String userinfo2;
+        final String rest2;
+        if (index2 != -1) {
+            userinfo2 = number2.substring(0, index2);
+            rest2 = number2.substring(index2);
+        } else {
+            userinfo2 = number2;
+            rest2 = "";
+        }
+
+        return userinfo1.equals(userinfo2) && rest1.equalsIgnoreCase(rest2);
     }
 }
diff --git a/src/com/android/contacts/calllog/ContactInfoHelper.java b/src/com/android/contacts/calllog/ContactInfoHelper.java
index 2d509a3..95ea6dc 100644
--- a/src/com/android/contacts/calllog/ContactInfoHelper.java
+++ b/src/com/android/contacts/calllog/ContactInfoHelper.java
@@ -121,6 +121,10 @@
         // uppercase the incoming SIP address, in order to do a
         // case-insensitive match.
         //
+        // TODO: SIP URIs are defined as being case sensitive for the user part (before the '@')
+        // and case insensitive everywhere else. We should change the code to handle this
+        // accordingly.
+        //
         // TODO: May also need to normalize by adding "sip:" as a
         // prefix, if we start storing SIP addresses that way in the
         // database.
diff --git a/src/com/android/contacts/detail/ContactDetailViewPagerAdapter.java b/src/com/android/contacts/detail/ContactDetailViewPagerAdapter.java
index e0ed5e9..edcfc39 100644
--- a/src/com/android/contacts/detail/ContactDetailViewPagerAdapter.java
+++ b/src/com/android/contacts/detail/ContactDetailViewPagerAdapter.java
@@ -19,10 +19,11 @@
 import android.support.v4.view.PagerAdapter;
 import android.support.v4.view.ViewPager;
 import android.view.View;
-import android.view.ViewGroup;
 
 /**
- * Adapter for the {@link ViewPager} for the contact detail page for a contact with social updates.
+ * Adapter for the {@link ViewPager} for the contact detail page for a contact in 2 cases:
+ * 1) without social updates, and 2) with social updates. The default initial case is for
+ * the contact with social updates which uses all possible pages.
  */
 public class ContactDetailViewPagerAdapter extends PagerAdapter {
 
@@ -34,6 +35,12 @@
 
     private static final int MAX_FRAGMENT_VIEW_COUNT = 2;
 
+    /**
+     * The initial value for the view count needs to be MAX_FRAGMENT_VIEW_COUNT,
+     * otherwise anything smaller would break screen rotation functionality for a user viewing
+     * a contact with social updates (i.e. the user was viewing the second page, rotates the
+     * device, the view pager requires the second page to exist immediately on launch).
+     */
     private int mFragmentViewCount = MAX_FRAGMENT_VIEW_COUNT;
 
     private View mAboutFragmentView;
@@ -67,12 +74,16 @@
     /** Gets called when the number of items changes. */
     @Override
     public int getItemPosition(Object object) {
+        // Always return a valid index for the about fragment view because it's always shown
+        // whether the contact has social updates or not.
         if (object == mAboutFragmentView) {
             return INDEX_ABOUT_FRAGMENT;
         }
-        if (object == mUpdatesFragmentView) {
+        // Only return a valid index for the updates fragment view if our view count > 1.
+        if (object == mUpdatesFragmentView && mFragmentViewCount > 1) {
             return INDEX_UPDATES_FRAGMENT;
         }
+        // Otherwise the view should have no position.
         return POSITION_NONE;
     }
 
@@ -84,8 +95,10 @@
     public Object instantiateItem(View container, int position) {
         switch (position) {
             case INDEX_ABOUT_FRAGMENT:
+                mAboutFragmentView.setVisibility(View.VISIBLE);
                 return mAboutFragmentView;
             case INDEX_UPDATES_FRAGMENT:
+                mUpdatesFragmentView.setVisibility(View.VISIBLE);
                 return mUpdatesFragmentView;
         }
         throw new IllegalArgumentException("Invalid position: " + position);
@@ -93,6 +106,7 @@
 
     @Override
     public void destroyItem(View container, int position, Object object) {
+        ((View) object).setVisibility(View.GONE);
     }
 
     @Override
diff --git a/src/com/android/contacts/format/FormatUtils.java b/src/com/android/contacts/format/FormatUtils.java
index cb4dc2d..8e2bb63 100644
--- a/src/com/android/contacts/format/FormatUtils.java
+++ b/src/com/android/contacts/format/FormatUtils.java
@@ -16,7 +16,6 @@
 package com.android.contacts.format;
 
 import com.android.contacts.test.NeededForTesting;
-import com.google.common.annotations.VisibleForTesting;
 
 import android.database.CharArrayBuffer;
 import android.graphics.Typeface;
@@ -110,8 +109,8 @@
         return text;
     }
 
-    @VisibleForTesting
-    /*package*/ static void copyToCharArrayBuffer(String text, CharArrayBuffer buffer) {
+    @NeededForTesting
+    public static void copyToCharArrayBuffer(String text, CharArrayBuffer buffer) {
         if (text != null) {
             char[] data = buffer.data;
             if (data == null || data.length < text.length()) {
diff --git a/src/com/android/contacts/list/ContactListPinnedHeaderView.java b/src/com/android/contacts/list/ContactListPinnedHeaderView.java
index 913bb75..aee77e1 100644
--- a/src/com/android/contacts/list/ContactListPinnedHeaderView.java
+++ b/src/com/android/contacts/list/ContactListPinnedHeaderView.java
@@ -113,8 +113,9 @@
 
     @Override
     protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-        int width = right - left - mPaddingRight;
+        int width = right - left;
 
+        // Take into account left and right padding when laying out the below views.
         mHeaderTextView.layout(mHeaderTextIndent + mPaddingLeft,
                 0,
                 mHeaderTextView.getMeasuredWidth() + mHeaderTextIndent + mPaddingLeft,
@@ -129,7 +130,7 @@
 
         mHeaderDivider.layout(mPaddingLeft,
                 mHeaderBackgroundHeight,
-                width,
+                width - mPaddingRight,
                 mHeaderBackgroundHeight + mHeaderUnderlineHeight);
     }
 
diff --git a/tests/src/com/android/contacts/calllog/CallLogGroupBuilderTest.java b/tests/src/com/android/contacts/calllog/CallLogGroupBuilderTest.java
index 31ad548..2e029cc 100644
--- a/tests/src/com/android/contacts/calllog/CallLogGroupBuilderTest.java
+++ b/tests/src/com/android/contacts/calllog/CallLogGroupBuilderTest.java
@@ -18,6 +18,9 @@
 
 import static com.google.android.collect.Lists.newArrayList;
 
+import com.android.contacts.format.FormatUtils;
+
+import android.database.CharArrayBuffer;
 import android.database.MatrixCursor;
 import android.provider.CallLog.Calls;
 import android.test.AndroidTestCase;
@@ -167,6 +170,81 @@
         assertGroupIs(7, 3, false, mFakeGroupCreator.groups.get(2));
     }
 
+    public void testEqualPhoneNumbers() {
+        // Identical.
+        assertTrue(checkEqualNumbers("6505555555", "6505555555"));
+        assertTrue(checkEqualNumbers("650 555 5555", "650 555 5555"));
+        // Formatting.
+        assertTrue(checkEqualNumbers("6505555555", "650 555 5555"));
+        assertTrue(checkEqualNumbers("6505555555", "(650) 555-5555"));
+        assertTrue(checkEqualNumbers("650 555 5555", "(650) 555-5555"));
+        // Short codes.
+        assertTrue(checkEqualNumbers("55555", "55555"));
+        assertTrue(checkEqualNumbers("55555", "555 55"));
+        // Different numbers.
+        assertFalse(checkEqualNumbers("6505555555", "650555555"));
+        assertFalse(checkEqualNumbers("6505555555", "6505555551"));
+        assertFalse(checkEqualNumbers("650 555 5555", "650 555 555"));
+        assertFalse(checkEqualNumbers("650 555 5555", "650 555 5551"));
+        assertFalse(checkEqualNumbers("55555", "5555"));
+        assertFalse(checkEqualNumbers("55555", "55551"));
+        // SIP addresses.
+        assertTrue(checkEqualNumbers("6505555555@host.com", "6505555555@host.com"));
+        assertTrue(checkEqualNumbers("6505555555@host.com", "6505555555@HOST.COM"));
+        assertTrue(checkEqualNumbers("user@host.com", "user@host.com"));
+        assertTrue(checkEqualNumbers("user@host.com", "user@HOST.COM"));
+        assertFalse(checkEqualNumbers("USER@host.com", "user@host.com"));
+        assertFalse(checkEqualNumbers("user@host.com", "user@host1.com"));
+        // SIP address vs phone number.
+        assertFalse(checkEqualNumbers("6505555555@host.com", "6505555555"));
+        assertFalse(checkEqualNumbers("6505555555", "6505555555@host.com"));
+        assertFalse(checkEqualNumbers("user@host.com", "6505555555"));
+        assertFalse(checkEqualNumbers("6505555555", "user@host.com"));
+        // Nulls.
+        assertTrue(checkEqualNumbers(null, null));
+        assertFalse(checkEqualNumbers(null, "6505555555"));
+        assertFalse(checkEqualNumbers("6505555555", null));
+        assertFalse(checkEqualNumbers(null, "6505555555@host.com"));
+        assertFalse(checkEqualNumbers("6505555555@host.com", null));
+    }
+
+    public void testCompareSipAddresses() {
+        // Identical.
+        assertTrue(mBuilder.compareSipAddresses("6505555555@host.com", "6505555555@host.com"));
+        assertTrue(mBuilder.compareSipAddresses("user@host.com", "user@host.com"));
+        // Host is case insensitive.
+        assertTrue(mBuilder.compareSipAddresses("6505555555@host.com", "6505555555@HOST.COM"));
+        assertTrue(mBuilder.compareSipAddresses("user@host.com", "user@HOST.COM"));
+        // Userinfo is case sensitive.
+        assertFalse(mBuilder.compareSipAddresses("USER@host.com", "user@host.com"));
+        // Different hosts.
+        assertFalse(mBuilder.compareSipAddresses("user@host.com", "user@host1.com"));
+        // Different users.
+        assertFalse(mBuilder.compareSipAddresses("user1@host.com", "user@host.com"));
+        // Nulls.
+        assertTrue(mBuilder.compareSipAddresses(null, null));
+        assertFalse(mBuilder.compareSipAddresses(null, "6505555555@host.com"));
+        assertFalse(mBuilder.compareSipAddresses("6505555555@host.com", null));
+    }
+
+    /** Calls {@link CallLogGroupBuilder#equalNumbers(CharArrayBuffer, CharArrayBuffer)}. */
+    private boolean checkEqualNumbers(String number1, String number2) {
+        final CharArrayBuffer buffer1 = stringToCharArrayBuffer(number1);
+        final CharArrayBuffer buffer2 = stringToCharArrayBuffer(number2);
+        return mBuilder.equalNumbers(buffer1, buffer2);
+    }
+
+    /** Converts a string into a {@link CharArrayBuffer}, preserving null values. */
+    private CharArrayBuffer stringToCharArrayBuffer(String value) {
+        if (value == null) {
+            return null;
+        }
+
+        final CharArrayBuffer buffer = new CharArrayBuffer(value.length());
+        FormatUtils.copyToCharArrayBuffer(value, buffer);
+        return buffer;
+    }
+
     /** Creates (or recreates) the cursor used to store the call log content for the tests. */
     private void createCursor() {
         mCursor = new MatrixCursor(CallLogQuery.EXTENDED_PROJECTION);
diff --git a/tests/src/com/android/contacts/detail/StreamItemAdapterTest.java b/tests/src/com/android/contacts/detail/StreamItemAdapterTest.java
index 09af97a..19b14d9 100644
--- a/tests/src/com/android/contacts/detail/StreamItemAdapterTest.java
+++ b/tests/src/com/android/contacts/detail/StreamItemAdapterTest.java
@@ -62,7 +62,7 @@
     public void testGetCount_NonEmpty() {
         mAdapter.setStreamItems(createStreamItemList(3));
         // There is one extra view: the header.
-        assertEquals(5, mAdapter.getCount());
+        assertEquals(4, mAdapter.getCount());
     }
 
     public void testGetView_Header() {
