diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 0cecd85..896660b 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -935,7 +935,8 @@
     }
 
     private void showFakeTitleBar() {
-        if (mFakeTitleBar == null || mActiveTabsPage != null) {
+        if (mFakeTitleBar == null && mActiveTabsPage == null
+                && !mActivityInPause) {
             final WebView webView = getTopWindow();
             mFakeTitleBar = new TitleBar(this);
             mFakeTitleBar.setTitleAndUrl(null, webView.getUrl());
diff --git a/src/com/android/browser/BrowserBookmarksAdapter.java b/src/com/android/browser/BrowserBookmarksAdapter.java
index 5fb67d0..a7fa19c 100644
--- a/src/com/android/browser/BrowserBookmarksAdapter.java
+++ b/src/com/android/browser/BrowserBookmarksAdapter.java
@@ -51,7 +51,7 @@
     private BrowserBookmarksPage    mBookmarksPage;
     private ContentResolver         mContentResolver;
     private boolean                 mDataValid;
-    private boolean                 mGridMode;
+    private BookmarkViewMode        mViewMode;
     private boolean                 mMostVisited;
     private boolean                 mNeedsOffset;
     private int                     mExtraOffset;
@@ -82,7 +82,7 @@
                 + curPage;
         mCurrentTitle = curTitle;
         mContentResolver = b.getContentResolver();
-        mGridMode = false;
+        mViewMode = BookmarkViewMode.LIST;
 
         String whereClause;
         // FIXME: Should have a default sort order that the user selects.
@@ -377,8 +377,8 @@
         return position;
     }
 
-    /* package */ void switchViewMode(boolean toGrid) {
-        mGridMode = toGrid;
+    /* package */ void switchViewMode(BookmarkViewMode viewMode) {
+        mViewMode = viewMode;
     }
 
     /* package */ void populateBookmarkItem(BookmarkItem b, int position) {
@@ -406,7 +406,7 @@
             throw new AssertionError(
                     "BrowserBookmarksAdapter tried to get a view out of range");
         }
-        if (mGridMode) {
+        if (mViewMode == BookmarkViewMode.GRID) {
             if (convertView == null || convertView instanceof AddNewBookmark
                     || convertView instanceof BookmarkItem) {
                 LayoutInflater factory = LayoutInflater.from(mBookmarksPage);
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index 7e72ae9..c981d7a 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -20,6 +20,8 @@
 import android.app.AlertDialog;
 import android.content.DialogInterface;
 import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
@@ -53,13 +55,14 @@
 import android.widget.ListView;
 import android.widget.Toast;
 
+/*package*/ enum BookmarkViewMode { NONE, GRID, LIST }
 /**
  *  View showing the user's bookmarks in the browser.
  */
 public class BrowserBookmarksPage extends Activity implements 
         View.OnCreateContextMenuListener {
 
-    private boolean                 mGridMode;
+    private BookmarkViewMode        mViewMode = BookmarkViewMode.NONE;
     private GridView                mGridPage;
     private View                    mVerticalList;
     private BrowserBookmarksAdapter mBookmarksAdapter;
@@ -77,7 +80,8 @@
             "com.android.launcher.action.INSTALL_SHORTCUT";
     
     private final static String LOGTAG = "browser";
-
+    private final static String PREF_BOOKMARK_VIEW_MODE = "pref_bookmark_view_mode";
+    private final static String PREF_MOST_VISITED_VIEW_MODE = "pref_most_visited_view_mode";
 
     @Override
     public boolean onContextItemSelected(MenuItem item) {
@@ -137,7 +141,7 @@
             boolean isBookmark;
             String name;
             String url;
-            if (mGridMode) {
+            if (mViewMode == BookmarkViewMode.GRID) {
                 isBookmark = mBookmarksAdapter.getIsBookmark(i.position);
                 name = mBookmarksAdapter.getTitle(i.position);
                 url = mBookmarksAdapter.getUrl(i.position);
@@ -187,7 +191,8 @@
                 return;
             }
             if (mMostVisited) {
-                if ((!mGridMode && ((HistoryItem) i.targetView).isBookmark())
+                if ((mViewMode == BookmarkViewMode.LIST
+                        && ((HistoryItem) i.targetView).isBookmark())
                         || mBookmarksAdapter.getIsBookmark(i.position)) {
                     MenuItem item = menu.findItem(
                             R.id.save_to_bookmarks_menu_id);
@@ -207,7 +212,7 @@
                 ((ViewGroup) mContextHeader.getParent()).
                         removeView(mContextHeader);
             }
-            if (mGridMode) {
+            if (mViewMode == BookmarkViewMode.GRID) {
                 mBookmarksAdapter.populateBookmarkItem(mContextHeader,
                         i.position);
             } else {
@@ -243,17 +248,44 @@
         mEmptyView = findViewById(R.id.empty_view);
         mEmptyView.setVisibility(View.GONE);
 
-        switchViewMode(true);
+        SharedPreferences p = getPreferences(MODE_PRIVATE);
+
+        // See if the user has set a preference for the view mode of their
+        // bookmarks. Otherwise default to grid mode.
+        BookmarkViewMode preference = BookmarkViewMode.NONE;
+        if (mMostVisited) {
+            preference = BookmarkViewMode.values()[p.getInt(
+                    PREF_MOST_VISITED_VIEW_MODE,
+                    BookmarkViewMode.GRID.ordinal())];
+        } else {
+            preference = BookmarkViewMode.values()[p.getInt(
+                    PREF_BOOKMARK_VIEW_MODE, BookmarkViewMode.GRID.ordinal())];
+        }
+        switchViewMode(preference);
     }
 
     /**
      *  Set the ContentView to be either the grid of thumbnails or the vertical
-     *  list.  Pass true to set it to the grid.
+     *  list.
      */
-    private void switchViewMode(boolean gridMode) {
-        mGridMode = gridMode;
+    private void switchViewMode(BookmarkViewMode gridMode) {
+        if (mViewMode == gridMode) {
+            return;
+        }
+
+        mViewMode = gridMode;
+
+        // Update the preferences to make the new view mode sticky.
+        Editor ed = getPreferences(MODE_PRIVATE).edit();
+        if (mMostVisited) {
+            ed.putInt(PREF_MOST_VISITED_VIEW_MODE, mViewMode.ordinal());
+        } else {
+            ed.putInt(PREF_BOOKMARK_VIEW_MODE, mViewMode.ordinal());
+        }
+        ed.commit();
+
         mBookmarksAdapter.switchViewMode(gridMode);
-        if (mGridMode) {
+        if (mViewMode == BookmarkViewMode.GRID) {
             if (mGridPage == null) {
                 mGridPage = new GridView(this);
                 mGridPage.setAdapter(mBookmarksAdapter);
@@ -457,7 +489,7 @@
             return result;
         }
         menu.findItem(R.id.switch_mode_menu_id).setTitle(
-                mGridMode ? R.string.switch_to_list
+                mViewMode == BookmarkViewMode.GRID ? R.string.switch_to_list
                 : R.string.switch_to_thumbnails);
         return true;
     }
@@ -470,7 +502,11 @@
             break;
 
         case R.id.switch_mode_menu_id:
-            switchViewMode(!mGridMode);
+            if (mViewMode == BookmarkViewMode.GRID) {
+                switchViewMode(BookmarkViewMode.LIST);
+            } else {
+                switchViewMode(BookmarkViewMode.GRID);
+            }
             break;
 
         default:
