diff --git a/res/layout/account_switch_spinner_dropdown_item.xml b/res/layout/account_switch_spinner_dropdown_item.xml
index e38c124..f8cc18b 100644
--- a/res/layout/account_switch_spinner_dropdown_item.xml
+++ b/res/layout/account_switch_spinner_dropdown_item.xml
@@ -16,42 +16,56 @@
      limitations under the License.
 -->
 
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    style="?android:attr/spinnerDropDownItemStyle"
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:minHeight="@dimen/account_dropdown_item_height"
-    android:gravity="center_horizontal">
-    <View android:id="@+id/account_spinner_color"
-        android:layout_alignParentTop="true"
-        android:layout_alignParentRight="true"
-        android:layout_height="@dimen/color_block_height"
-        android:layout_width="@dimen/color_block_width"/>
-    <RelativeLayout
-        android:layout_height="wrap_content"
+    android:layout_height="wrap_content">
+    <!-- View shown in the navigation spinner in the actionbar.  -->
+    <include android:id="@+id/anchor" layout="@layout/account_switch_spinner_item"/>
+    <FrameLayout android:id="@+id/dropdown"
         android:layout_width="match_parent"
-        android:layout_centerVertical="true"
-        android:layout_alignParentLeft="true">
-        <!-- Something is strange here. Gmail1 allows for two-line label names while Gmail2 does
-	     not. TODO(viki): Fix. -->
-        <TextView
-            android:id="@+id/account_spinner_first"
-            android:singleLine="true"
-            android:layout_height="wrap_content"
+        android:layout_height="wrap_content">
+        <RelativeLayout
+            style="?android:attr/spinnerDropDownItemStyle"
             android:layout_width="match_parent"
-            android:ellipsize="end"
-            style="@android:style/TextAppearance.Holo.Widget.ActionBar.Title" />
-        <TextView
-            android:id="@+id/account_spinner_second"
             android:layout_height="wrap_content"
-            android:layout_width="match_parent"
-            android:ellipsize="end"
-            android:layout_below="@id/account_spinner_first"
-            style="@android:style/TextAppearance.Holo.Widget.ActionBar.Subtitle" />
-    </RelativeLayout>
-    <TextView
-        android:id="@+id/account_spinner_unread_count"
-        style="@style/UnreadCount"
-        android:layout_centerVertical="true"
-        android:layout_alignParentRight="true"/>
-</RelativeLayout>
+            android:minHeight="@dimen/account_dropdown_item_height"
+            android:gravity="center_horizontal"
+            android:id="@+id/default_view">
+            <View android:id="@+id/account_spinner_color"
+                android:layout_alignParentTop="true"
+                android:layout_alignParentRight="true"
+                android:layout_height="@dimen/color_block_height"
+                android:layout_width="@dimen/color_block_width"/>
+            <RelativeLayout
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent"
+                android:layout_centerVertical="true"
+                android:layout_alignParentLeft="true">
+                <!-- Something is strange here. Gmail1 allows for two-line label names while Gmail2 does
+	               not. TODO(viki): Fix. -->
+                <TextView
+                    android:id="@+id/account_spinner_first"
+                    android:singleLine="true"
+                    android:layout_height="wrap_content"
+                    android:layout_width="match_parent"
+                    android:ellipsize="end"
+                    style="@android:style/TextAppearance.Holo.Widget.ActionBar.Title" />
+                <TextView
+                    android:id="@+id/account_spinner_second"
+                    android:layout_height="wrap_content"
+                    android:layout_width="match_parent"
+                    android:ellipsize="end"
+                    android:layout_below="@id/account_spinner_first"
+                    style="@android:style/TextAppearance.Holo.Widget.ActionBar.Subtitle" />
+            </RelativeLayout>
+            <TextView
+                android:id="@+id/account_spinner_unread_count"
+                style="@style/UnreadCount"
+                android:layout_centerVertical="true"
+                android:layout_alignParentRight="true"/>
+        </RelativeLayout>
+        <include android:id="@+id/header" layout="@layout/account_switch_spinner_dropdown_header"/>
+        <include android:id="@+id/empty" layout="@layout/empty"/>
+    </FrameLayout>
+</FrameLayout>
diff --git a/src/com/android/mail/AccountSpinnerAdapter.java b/src/com/android/mail/AccountSpinnerAdapter.java
index f81247a..a510efb 100644
--- a/src/com/android/mail/AccountSpinnerAdapter.java
+++ b/src/com/android/mail/AccountSpinnerAdapter.java
@@ -94,8 +94,7 @@
      * @return the type of account: one of {@link #TYPE_ACCOUNT}, {@link #TYPE_HEADER}, or
      * {@link #TYPE_FOLDER}.
      */
-    @Override
-    public int getItemViewType(int position) {
+    public int getType(int position) {
         if (position == 0) {
             return TYPE_DEAD_HEADER;
         }
@@ -212,7 +211,7 @@
 
     @Override
     public Object getItem(int position) {
-        switch (getItemViewType(position)){
+        switch (getType(position)){
             case TYPE_DEAD_HEADER:
                 return "dead header";
             case TYPE_ACCOUNT:
@@ -268,26 +267,23 @@
     // always return what we believe that view is.
     @Override
     public View getView(int position, View convertView, ViewGroup parent) {
-        convertView = mInflater.inflate(R.layout.account_switch_spinner_item, null);
-        ((TextView) convertView.findViewById(R.id.account_spinner_first))
+        if (convertView == null) {
+            convertView = mInflater.inflate(R.layout.account_switch_spinner_dropdown_item, null);
+        }
+        // Hide everything else.
+        View anchor = showAnchor(convertView);
+        // Show the anchor
+        anchor.findViewById(R.id.anchor).setVisibility(View.VISIBLE);
+        ((TextView) anchor.findViewById(R.id.account_spinner_first))
             .setText(getFolderLabel());
-        ((TextView) convertView.findViewById(R.id.account_spinner_second))
+        ((TextView) anchor.findViewById(R.id.account_spinner_second))
             .setText(getCurrentAccountName());
-        populateUnreadCountView((TextView) convertView.findViewById(R.id.unread),
+        populateUnreadCountView((TextView) anchor.findViewById(R.id.unread),
                 getFolderUnreadCount());
         return convertView;
     }
 
     @Override
-    public int getViewTypeCount() {
-        // If recent folders are shown, then two views: Recent folders and a header, and potentially
-        // one "show all folders" item.
-        final int folderTypes = mRecentFoldersVisible ?  (2 + (mShowAllFoldersItem ? 1 : 0)) : 0;
-        // Accounts are the type of view always shown.
-        return 2 + folderTypes;
-    }
-
-    @Override
     public boolean hasStableIds() {
         // The account manager could add new accounts, so don't claim that the IDs are stable.
         return false;
@@ -299,6 +295,23 @@
         return false;
     }
 
+    private View showAnchor(View convertView) {
+        convertView.findViewById(R.id.dropdown).setVisibility(View.GONE);
+        View anchor = convertView.findViewById(R.id.anchor);
+        anchor.setVisibility(View.VISIBLE);
+        return anchor;
+    }
+
+    private View showDropdown(View convertView) {
+        convertView.findViewById(R.id.anchor).setVisibility(View.GONE);
+        convertView.findViewById(R.id.empty).setVisibility(View.GONE);
+        convertView.findViewById(R.id.header).setVisibility(View.GONE);
+        convertView.findViewById(R.id.default_view).setVisibility(View.GONE);
+        View dropdown = convertView.findViewById(R.id.dropdown);
+        dropdown.setVisibility(View.VISIBLE);
+        return dropdown;
+    }
+
     @Override
     public View getDropDownView(int position, View convertView, ViewGroup parent) {
         // Shown in the first text view with big font.
@@ -307,9 +320,14 @@
         String smallText = "";
         int color = 0;
         int unreadCount = 0;
-        switch (getItemViewType(position)) {
+        if (convertView == null) {
+            convertView = mInflater.inflate(R.layout.account_switch_spinner_dropdown_item, null);
+        }
+        // Show dropdown portion.
+        View dropdown = showDropdown(convertView);
+        switch (getType(position)) {
             case TYPE_DEAD_HEADER:
-                convertView = mInflater.inflate(R.layout.empty, null);
+                dropdown.findViewById(R.id.empty).setVisibility(View.VISIBLE);
                 return convertView;
             case TYPE_ACCOUNT:
                 // TODO(viki): Get real Inbox or Priority Inbox using the URI. Remove ugly hack.
@@ -318,10 +336,9 @@
                 color = getAccountColor(position);
                 break;
             case TYPE_HEADER:
-                convertView = mInflater.inflate(R.layout.account_switch_spinner_dropdown_header,
-                        null);
+                dropdown.findViewById(R.id.header).setVisibility(View.VISIBLE);
                 final String label = getCurrentAccountName();
-                TextView accountLabel = ((TextView) convertView.findViewById(
+                TextView accountLabel = ((TextView) dropdown.findViewById(
                         R.id.account_spinner_header_account));
                 if (accountLabel != null) {
                     accountLabel.setText(label);
@@ -336,11 +353,11 @@
                 bigText = mContext.getResources().getString(R.string.show_all_folders);
                 break;
         }
-        convertView = mInflater.inflate(R.layout.account_switch_spinner_dropdown_item, null);
-        displayOrHide(convertView, R.id.account_spinner_first, bigText);
-        displayOrHide(convertView, R.id.account_spinner_second, smallText);
+        dropdown.findViewById(R.id.default_view).setVisibility(View.VISIBLE);
+        displayOrHide(dropdown, R.id.account_spinner_first, bigText);
+        displayOrHide(dropdown, R.id.account_spinner_second, smallText);
 
-        final View colorView = convertView.findViewById(R.id.account_spinner_color);
+        final View colorView = dropdown.findViewById(R.id.account_spinner_color);
         if (color != 0) {
             colorView.setVisibility(View.VISIBLE);
             colorView.setBackgroundColor(color);
@@ -348,7 +365,7 @@
             colorView.setVisibility(View.INVISIBLE);
         }
         populateUnreadCountView(
-                (TextView) convertView.findViewById(R.id.account_spinner_unread_count),
+                (TextView) dropdown.findViewById(R.id.account_spinner_unread_count),
                 unreadCount);
         return convertView;
 
@@ -412,7 +429,7 @@
     @Override
     public boolean isEnabled(int position) {
         // Don't want the user selecting the header.
-        final int type = getItemViewType(position);
+        final int type = getType(position);
         return type != TYPE_DEAD_HEADER && type != TYPE_HEADER;
     }
 
diff --git a/src/com/android/mail/ui/MailActionBarView.java b/src/com/android/mail/ui/MailActionBarView.java
index 518475d..ef1c2c4 100644
--- a/src/com/android/mail/ui/MailActionBarView.java
+++ b/src/com/android/mail/ui/MailActionBarView.java
@@ -332,7 +332,7 @@
             return false;
         }
         LogUtils.d(LOG_TAG, "onNavigationItemSelected(%d, %d) called", position, id);
-        final int type = mSpinner.getItemViewType(position);
+        final int type = mSpinner.getType(position);
         switch (type) {
             case AccountSpinnerAdapter.TYPE_ACCOUNT:
                 // Get the capabilities associated with this account.
