diff --git a/res/layout/bookmark_list.xml b/res/layout/bookmark_list.xml
index 7413ca8..4425a26 100644
--- a/res/layout/bookmark_list.xml
+++ b/res/layout/bookmark_list.xml
@@ -14,29 +14,30 @@
      limitations under the License.
 -->
 
-<LinearLayout
+<com.android.browser.view.BookmarkContainer
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/list_item"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:minHeight="@dimen/widgetItemMinHeight"
-    android:orientation="horizontal"
-    android:paddingLeft="16dip">
+    android:paddingLeft="16dip"
+    android:background="@drawable/bookmark_thumb_selector">
     <ImageView
         android:id="@+id/favicon"
         android:layout_height="32dip"
         android:layout_width="32dip"
-        android:layout_gravity="center_vertical"
+        android:layout_centerVertical="true"
         android:background="@drawable/bookmark_list_favicon_bg"
         android:scaleType="fitXY" />
     <TextView
         android:id="@+id/label"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_gravity="center_vertical"
+        android:layout_centerVertical="true"
+        android:layout_toRightOf="@id/favicon"
         android:textAppearance="?android:attr/textAppearanceMedium"
         android:paddingLeft="16dip"
         android:maxLines="1"
         android:scrollHorizontally="true"
         android:ellipsize="marquee"/>
-</LinearLayout>
+</com.android.browser.view.BookmarkContainer>
diff --git a/res/layout/bookmarks.xml b/res/layout/bookmarks.xml
index 4a13c6f..e02e2ff 100644
--- a/res/layout/bookmarks.xml
+++ b/res/layout/bookmarks.xml
@@ -31,7 +31,7 @@
     <FrameLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent">
-        <com.android.browser.view.BookmarkExpandableGridView
+        <com.android.browser.view.BookmarkExpandableView
             android:id="@+id/grid"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
@@ -39,15 +39,6 @@
             android:childDivider="@android:color/transparent"
             android:divider="@android:color/transparent"
             android:dividerHeight="0dp" />
-        <ListView
-            android:id="@+id/list"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:listSelector="@drawable/bookmark_thumb_selector"
-            android:drawSelectorOnTop="true"
-            android:focusable="true"
-            android:focusableInTouchMode="true"
-            android:visibility="gone"/>
         <TextView
             android:id="@android:id/empty"
             android:layout_width="wrap_content"
diff --git a/src/com/android/browser/BrowserBookmarksAdapter.java b/src/com/android/browser/BrowserBookmarksAdapter.java
index 16bcda5..b3f8d98 100644
--- a/src/com/android/browser/BrowserBookmarksAdapter.java
+++ b/src/com/android/browser/BrowserBookmarksAdapter.java
@@ -124,6 +124,10 @@
         mCurrentView = view;
     }
 
+    public int getViewMode() {
+        return mCurrentView;
+    }
+
     @Override
     public Cursor getItem(int position) {
         return (Cursor) super.getItem(position);
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index f2f7de3..b6a50da 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -49,19 +49,17 @@
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
-import android.webkit.WebIconDatabase.IconListener;
 import android.widget.ExpandableListView;
 import android.widget.ExpandableListView.OnChildClickListener;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
-import android.widget.ListView;
 import android.widget.PopupMenu.OnMenuItemClickListener;
 import android.widget.Toast;
 
 import com.android.browser.BookmarkDragHandler.BookmarkDragController;
 import com.android.browser.BookmarkDragHandler.BookmarkDragState;
-import com.android.browser.view.BookmarkExpandableGridView;
-import com.android.browser.view.BookmarkExpandableGridView.BookmarkContextMenuInfo;
+import com.android.browser.view.BookmarkExpandableView;
+import com.android.browser.view.BookmarkExpandableView.BookmarkContextMenuInfo;
 
 import java.util.HashMap;
 
@@ -76,8 +74,8 @@
  *  View showing the user's bookmarks in the browser.
  */
 public class BrowserBookmarksPage extends Fragment implements View.OnCreateContextMenuListener,
-        LoaderManager.LoaderCallbacks<Cursor>, IconListener,
-        BreadCrumbView.Controller, OnMenuItemClickListener, OnChildClickListener {
+        LoaderManager.LoaderCallbacks<Cursor>, BreadCrumbView.Controller,
+        OnMenuItemClickListener, OnChildClickListener {
 
     public static class ExtraDragState {
         public int childPosition;
@@ -94,14 +92,13 @@
     static final String ACCOUNT_TYPE = "account_type";
     static final String ACCOUNT_NAME = "account_name";
 
-    static final int VIEW_THUMBNAILS = 1;
-    static final int VIEW_LIST = 2;
+    public static final int VIEW_THUMBNAILS = 1;
+    public static final int VIEW_LIST = 2;
     static final String PREF_SELECTED_VIEW = "bookmarks_view";
 
     BookmarksPageCallbacks mCallbacks;
     View mRoot;
-    BookmarkExpandableGridView mGrid;
-    ListView mList;
+    BookmarkExpandableView mGrid;
     boolean mDisableNewWindow;
     boolean mEnableContextMenu = true;
     View mEmptyView;
@@ -167,7 +164,6 @@
 
     @Override
     public void onLoaderReset(Loader<Cursor> loader) {
-        // TODO: Figure out what to do here (if anything?)
     }
 
     @Override
@@ -326,8 +322,6 @@
         SharedPreferences prefs = PreferenceManager
             .getDefaultSharedPreferences(getActivity());
         mCurrentView = prefs.getInt(PREF_SELECTED_VIEW, getDefaultView());
-        // TODO: Support list view
-        mCurrentView = VIEW_THUMBNAILS;
 
         Bundle args = getArguments();
         mDisableNewWindow = args == null ? false : args.getBoolean(EXTRA_DISABLE_WINDOW, false);
@@ -341,12 +335,10 @@
         mRoot = inflater.inflate(R.layout.bookmarks, container, false);
         mEmptyView = mRoot.findViewById(android.R.id.empty);
 
-        mGrid = (BookmarkExpandableGridView) mRoot.findViewById(R.id.grid);
+        mGrid = (BookmarkExpandableView) mRoot.findViewById(R.id.grid);
         mGrid.setOnChildClickListener(this);
         mGrid.setColumnWidthFromLayout(R.layout.bookmark_thumbnail);
         mGrid.setBreadcrumbController(this);
-        mList = (ListView) mRoot.findViewById(R.id.list);
-        // TODO: mList.setOnItemClickListener(this);
         setEnableContextMenu(mEnableContextMenu);
         mDragHandler = new BookmarkDragHandler(getActivity(), mDragController,
                 mGrid.getDragAdapter());
@@ -355,9 +347,6 @@
         LoaderManager lm = getLoaderManager();
         lm.restartLoader(LOADER_ACCOUNTS, null, this);
 
-        // Add our own listener in case there are favicons that have yet to be loaded.
-        CombinedBookmarkHistoryView.getIconListenerSet().addListener(this);
-
         return mRoot;
     }
 
@@ -378,34 +367,14 @@
             lm.destroyLoader(id);
         }
         mBookmarkAdapters.clear();
-
-        CombinedBookmarkHistoryView.getIconListenerSet().removeListener(this);
-    }
-
-    @Override
-    public void onReceivedIcon(String url, Bitmap icon) {
-        // A new favicon has been loaded, so let anything attached to the adapter know about it
-        // so new icons will be loaded.
-        // TODO: Notify all of data set changed
-        // TODO: Wait, is this even needed? Won't this trigger a DB change anyway?
     }
 
     private BrowserBookmarksAdapter getChildAdapter(int groupPosition) {
-        if (mCurrentView == VIEW_THUMBNAILS) {
-            return mGrid.getChildAdapter(groupPosition);
-        } else {
-            // TODO: Support expandable list
-            return null;
-        }
+        return mGrid.getChildAdapter(groupPosition);
     }
 
     private BreadCrumbView getBreadCrumbs(int groupPosition) {
-        if (mCurrentView == VIEW_THUMBNAILS) {
-            return mGrid.getBreadCrumbs(groupPosition);
-        } else {
-            // TODO: Support expandable list
-            return null;
-        }
+        return mGrid.getBreadCrumbs(groupPosition);
     }
 
     @Override
@@ -566,11 +535,10 @@
     }
 
     void selectView(int view) {
-        // TODO: Support list view
-        view = mCurrentView;
         if (view == mCurrentView) {
             return;
         }
+        mCurrentView = view;
         SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
         Editor edit = prefs.edit();
         edit.putInt(PREF_SELECTED_VIEW, mCurrentView);
@@ -578,31 +546,7 @@
         if (mEmptyView.getVisibility() == View.VISIBLE) {
             return;
         }
-        setupBookmarkView();
-    }
-
-    private void setupBookmarkView() {
-        // TODO: Support list view
-//        mAdapter.selectView(mCurrentView);
-//        switch (mCurrentView) {
-//        case VIEW_THUMBNAILS:
-//            mList.setAdapter(null);
-//            SharedPreferences prefs = PreferenceManager
-//                    .getDefaultSharedPreferences(getActivity());
-//            String accountName = prefs.getString(PREF_ACCOUNT_NAME, null);
-//            mGrid.addAccount(accountName, mAdapter);
-//            mGrid.setVisibility(View.VISIBLE);
-//            mList.setVisibility(View.GONE);
-//            break;
-//        case VIEW_LIST:
-//            mGrid.clearAccounts();
-//            if (mList.getAdapter() != mAdapter) {
-//                mList.setAdapter(mAdapter);
-//            }
-//            mGrid.setVisibility(View.GONE);
-//            mList.setVisibility(View.VISIBLE);
-//            break;
-//        }
+        mGrid.selectView(mCurrentView);
     }
 
     /**
@@ -662,14 +606,6 @@
                 mGrid.setLongClickable(false);
             }
         }
-        if (mList != null) {
-            if (mEnableContextMenu) {
-                registerForContextMenu(mList);
-            } else {
-                unregisterForContextMenu(mList);
-                mList.setLongClickable(false);
-            }
-        }
     }
 
     private BookmarkDragController mDragController = new BookmarkDragController() {
@@ -702,11 +638,7 @@
         @Override
         public void actionItemClicked(View v, BookmarkDragState state) {
             if (v.getId() == R.id.info) {
-                if (mCurrentView == VIEW_THUMBNAILS) {
-                    mGrid.showContextMenuForState(state);
-                } else {
-                    // TODO: Support expandable list
-                }
+                mGrid.showContextMenuForState(state);
             } else {
                 ExtraDragState extraState = (ExtraDragState) state.extraState;
                 handleContextItem(v.getId(), extraState.groupPosition,
diff --git a/src/com/android/browser/view/BookmarkExpandableGridView.java b/src/com/android/browser/view/BookmarkExpandableView.java
similarity index 89%
rename from src/com/android/browser/view/BookmarkExpandableGridView.java
rename to src/com/android/browser/view/BookmarkExpandableView.java
index c8811d1..6f5fdaa 100644
--- a/src/com/android/browser/view/BookmarkExpandableGridView.java
+++ b/src/com/android/browser/view/BookmarkExpandableView.java
@@ -38,6 +38,7 @@
 import com.android.browser.BookmarkDragHandler.BookmarkDragState;
 import com.android.browser.BreadCrumbView;
 import com.android.browser.BrowserBookmarksAdapter;
+import com.android.browser.BrowserBookmarksPage;
 import com.android.browser.BrowserBookmarksPage.ExtraDragState;
 import com.android.browser.R;
 import com.android.internal.view.menu.MenuBuilder;
@@ -45,7 +46,7 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 
-public class BookmarkExpandableGridView extends ExpandableListView
+public class BookmarkExpandableView extends ExpandableListView
         implements BreadCrumbView.Controller {
 
     private BookmarkAccountAdapter mAdapter;
@@ -58,18 +59,19 @@
     private BreadCrumbView.Controller mBreadcrumbController;
     private BookmarkDragHandler mDragHandler;
     private int mMaxColumnCount;
+    private int mCurrentView = -1;
 
-    public BookmarkExpandableGridView(Context context) {
+    public BookmarkExpandableView(Context context) {
         super(context);
         init(context);
     }
 
-    public BookmarkExpandableGridView(Context context, AttributeSet attrs) {
+    public BookmarkExpandableView(Context context, AttributeSet attrs) {
         super(context, attrs);
         init(context);
     }
 
-    public BookmarkExpandableGridView(
+    public BookmarkExpandableView(
             Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
         init(context);
@@ -131,6 +133,9 @@
                 adapter.registerDataSetObserver(mAdapter.mObserver);
             }
         } else {
+            if (mCurrentView >= 0) {
+                adapter.selectView(mCurrentView);
+            }
             mAdapter.mGroups.add(accountName);
             mAdapter.mChildren.add(adapter);
             adapter.registerDataSetObserver(mAdapter.mObserver);
@@ -224,7 +229,7 @@
                 extraState.childPosition,
                 extraState.groupPosition);
         if (getParent() != null) {
-            getParent().showContextMenuForChild(BookmarkExpandableGridView.this);
+            getParent().showContextMenuForChild(BookmarkExpandableView.this);
         }
     }
 
@@ -252,7 +257,7 @@
             int childPosition = (Integer) v.getTag(R.id.child_position);
             long id = (Long) v.getTag(R.id.child_id);
             if (mOnChildClickListener != null) {
-                mOnChildClickListener.onChildClick(BookmarkExpandableGridView.this,
+                mOnChildClickListener.onChildClick(BookmarkExpandableView.this,
                         v, groupPosition, childPosition, id);
             }
         }
@@ -289,6 +294,14 @@
         return mAdapter.getBreadCrumbView(groupPosition);
     }
 
+    public void selectView(int view) {
+        mCurrentView = view;
+        for (BrowserBookmarksAdapter adapter : mAdapter.mChildren) {
+            adapter.selectView(mCurrentView);
+        }
+        mAdapter.notifyDataSetChanged();
+    }
+
     class BookmarkAccountAdapter extends BaseExpandableListAdapter {
         ArrayList<BrowserBookmarksAdapter> mChildren;
         ArrayList<String> mGroups;
@@ -339,17 +352,21 @@
             if (convertView == null) {
                 convertView = mInflater.inflate(R.layout.bookmark_grid_row, parent, false);
             }
-            LinearLayout row = (LinearLayout) convertView;
-            if (row.getChildCount() > mRowCount) {
-                row.removeViews(mRowCount, row.getChildCount() - mRowCount);
+            BrowserBookmarksAdapter childAdapter = mChildren.get(groupPosition);
+            int rowCount = mRowCount;
+            if (childAdapter.getViewMode() == BrowserBookmarksPage.VIEW_LIST) {
+                rowCount = 1;
             }
-            for (int i = 0; i < mRowCount; i++) {
+            LinearLayout row = (LinearLayout) convertView;
+            if (row.getChildCount() > rowCount) {
+                row.removeViews(rowCount, row.getChildCount() - rowCount);
+            }
+            for (int i = 0; i < rowCount; i++) {
                 View cv = null;
                 if (row.getChildCount() > i) {
                     cv = row.getChildAt(i);
                 }
-                int realChildPosition = (childPosition * mRowCount) + i;
-                BrowserBookmarksAdapter childAdapter = mChildren.get(groupPosition);
+                int realChildPosition = (childPosition * rowCount) + i;
                 if (realChildPosition < childAdapter.getCount()) {
                     View v = childAdapter.getView(realChildPosition, cv, row);
                     v.setTag(R.id.group_position, groupPosition);
@@ -378,8 +395,11 @@
 
         @Override
         public int getChildrenCount(int groupPosition) {
-            return (int) Math.ceil(
-                    mChildren.get(groupPosition).getCount() / (float)mRowCount);
+            BrowserBookmarksAdapter adapter = mChildren.get(groupPosition);
+            if (adapter.getViewMode() == BrowserBookmarksPage.VIEW_LIST) {
+                return adapter.getCount();
+            }
+            return (int) Math.ceil(adapter.getCount() / (float)mRowCount);
         }
 
         @Override
@@ -443,7 +463,7 @@
             if (crumbs == null) {
                 crumbs = (BreadCrumbView)
                         mInflater.inflate(R.layout.bookmarks_header, null);
-                crumbs.setController(BookmarkExpandableGridView.this);
+                crumbs.setController(BookmarkExpandableView.this);
                 crumbs.setUseBackButton(true);
                 crumbs.setMaxVisible(2);
                 String bookmarks = mContext.getString(R.string.bookmarks);
@@ -464,6 +484,20 @@
         public boolean isChildSelectable(int groupPosition, int childPosition) {
             return true;
         }
+
+        @Override
+        public int getChildTypeCount() {
+            return 2;
+        }
+
+        @Override
+        public int getChildType(int groupPosition, int childPosition) {
+            BrowserBookmarksAdapter adapter = mChildren.get(groupPosition);
+            if (adapter.getViewMode() == BrowserBookmarksPage.VIEW_LIST) {
+                return 1;
+            }
+            return 0;
+        }
     }
 
     public static class BookmarkContextMenuInfo implements ContextMenuInfo {
