diff --git a/res/layout/snapshots.xml b/res/layout/snapshots.xml
index 48d2883..54d4e01 100644
--- a/res/layout/snapshots.xml
+++ b/res/layout/snapshots.xml
@@ -33,8 +33,8 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="center"
-        android:textAppearance="?android:attr/textAppearanceLarge"
-        android:text="@string/empty_bookmarks_folder"
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:text="@string/empty_snapshots_folder"
         android:visibility="gone" />
 
 </FrameLayout>
diff --git a/res/menu/snapshots_context.xml b/res/menu/snapshots_context.xml
index 01880dd..af7a776 100644
--- a/res/menu/snapshots_context.xml
+++ b/res/menu/snapshots_context.xml
@@ -18,6 +18,6 @@
     <group android:id="@+id/CONTEXT_MENU">
         <item
             android:id="@+id/delete_context_menu_id"
-            android:title="@string/remove_bookmark"/>
+            android:title="@string/remove_snapshot"/>
     </group>
 </menu>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 39cd1a7..a33670a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1004,4 +1004,8 @@
     <string name="ua_switcher_desktop">Desktop</string>
     <!-- Preload permission label [CHAR LIMIT=40] -->
     <string name="permission_preload_label">Preload results</string>
+    <!-- Empty text for the "saved pages" tab that is shown when no saved pages exist. [CHAR LIMIT=None] -->
+    <string name="empty_snapshots_folder">There are no saved pages.</string>
+    <!-- Menu option to delete the currently selected saved page [CHAR LIMIT=50] -->
+    <string name="remove_snapshot">Delete saved page</string>
 </resources>
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index d1445d8..b270dea 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -35,6 +35,7 @@
 import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.Menu;
+import android.view.MenuItem;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.View.OnClickListener;
@@ -653,6 +654,11 @@
     }
 
     @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        return false;
+    }
+
+    @Override
     public void onOptionsMenuClosed(boolean inLoad) {
     }
 
diff --git a/src/com/android/browser/BrowserWebView.java b/src/com/android/browser/BrowserWebView.java
index 8ea1123..38bbf90 100644
--- a/src/com/android/browser/BrowserWebView.java
+++ b/src/com/android/browser/BrowserWebView.java
@@ -99,13 +99,4 @@
         }
     }
 
-    @Override
-    protected void updateCachedTextfield(String updatedText) {
-        super.updateCachedTextfield(updatedText);
-        CrashRecoveryHandler handler = CrashRecoveryHandler.getInstance();
-        if (handler != null) {
-            handler.backupState();
-        }
-    }
-
 }
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 9b81870..8a4433e 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -1512,6 +1512,10 @@
             // won't get onKeyUp for MENU. So it is important to reset it here.
             mMenuIsDown = false;
         }
+        if (mUi.onOptionsItemSelected(item)) {
+            // ui callback handled it
+            return true;
+        }
         switch (item.getItemId()) {
             // -- Main menu
             case R.id.new_tab_menu_id:
@@ -2462,10 +2466,6 @@
         boolean noModifiers = event.hasNoModifiers();
         // Even if MENU is already held down, we need to call to super to open
         // the IME on long press.
-        if (KeyEvent.KEYCODE_MENU == keyCode) {
-            event.startTracking();
-            return true;
-        }
         if (!noModifiers
                 && ((KeyEvent.KEYCODE_MENU == keyCode)
                         || (KeyEvent.KEYCODE_CTRL_LEFT == keyCode)
diff --git a/src/com/android/browser/CrashRecoveryHandler.java b/src/com/android/browser/CrashRecoveryHandler.java
index 55fa6f8..8d7f243 100644
--- a/src/com/android/browser/CrashRecoveryHandler.java
+++ b/src/com/android/browser/CrashRecoveryHandler.java
@@ -170,8 +170,6 @@
     }
 
     private boolean shouldPrompt() {
-        // STOPSHIP TODO: Remove once b/4971724 is fixed
-        if (true) return false;
         Context context = mController.getActivity();
         SharedPreferences prefs = context.getSharedPreferences(
                 RECOVERY_PREFERENCES, Context.MODE_PRIVATE);
diff --git a/src/com/android/browser/NavScreen.java b/src/com/android/browser/NavScreen.java
index 23317b5..ee20535 100644
--- a/src/com/android/browser/NavScreen.java
+++ b/src/com/android/browser/NavScreen.java
@@ -23,6 +23,7 @@
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
+import android.view.ViewConfiguration;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.webkit.WebView;
@@ -59,6 +60,7 @@
     NavTabGallery mScroller;
     TabAdapter mAdapter;
     int mOrientation;
+    boolean mNeedsMenu;
 
     public NavScreen(Activity activity, UiController ctl, PhoneUi ui) {
         super(activity);
@@ -122,6 +124,10 @@
                 ? LinearLayout.HORIZONTAL : LinearLayout.VERTICAL);
         // update state for active tab
         mScroller.setSelection(mUiController.getTabControl().getTabPosition(mUi.getActiveTab()));
+        mNeedsMenu = !ViewConfiguration.get(getContext()).hasPermanentMenuKey();
+        if (!mNeedsMenu) {
+            mMore.setVisibility(View.GONE);
+        }
     }
 
     @Override
diff --git a/src/com/android/browser/NavigationBarPhone.java b/src/com/android/browser/NavigationBarPhone.java
index 2030169..400b695 100644
--- a/src/com/android/browser/NavigationBarPhone.java
+++ b/src/com/android/browser/NavigationBarPhone.java
@@ -167,30 +167,6 @@
         return mMenuShowing;
     }
 
-    void showMenu() {
-        // called from menu key, use tab switcher as anchor
-        mMenuShowing = true;
-        if (isEditingUrl()) {
-            stopEditingUrl();
-            post(new Runnable() {
-                @Override
-                public void run() {
-                    showMenu();
-                }
-            });
-        } else {
-            mBaseUi.getTitleBar().setSkipTitleBarAnimations(true);
-            mBaseUi.showTitleBar();
-            mBaseUi.getTitleBar().setSkipTitleBarAnimations(false);
-            post(new Runnable() {
-                @Override
-                public void run() {
-                    showMenu(mTabSwitcher);
-                }
-            });
-        }
-    }
-
     void showMenu(View anchor) {
         mMenuShowing = true;
         mPopupMenu = new PopupMenu(mContext, anchor);
@@ -202,13 +178,6 @@
         mPopupMenu.show();
     }
 
-    void dismissMenu() {
-       if (mPopupMenu != null) {
-           mPopupMenu.dismiss();
-           mBaseUi.suggestHideTitleBar();
-       }
-    }
-
     @Override
     public void onDismiss(PopupMenu menu) {
         onMenuHidden();
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
index 9e3310b..28db6f0 100644
--- a/src/com/android/browser/PhoneUi.java
+++ b/src/com/android/browser/PhoneUi.java
@@ -23,6 +23,7 @@
 import android.view.Gravity;
 import android.view.KeyEvent;
 import android.view.Menu;
+import android.view.MenuItem;
 import android.view.View;
 import android.webkit.WebView;
 import android.widget.FrameLayout;
@@ -78,16 +79,6 @@
     }
 
     @Override
-    public boolean onMenuKey() {
-        if (mNavigationBar.isMenuShowing()) {
-            mNavigationBar.dismissMenu();
-        } else {
-            mNavigationBar.showMenu();
-        }
-        return true;
-    }
-
-    @Override
     public boolean dispatchKey(int code, KeyEvent event) {
         return false;
     }
@@ -169,6 +160,20 @@
     // menu handling callbacks
 
     @Override
+    public boolean onPrepareOptionsMenu(Menu menu) {
+        menu.setGroupVisible(R.id.NAV_MENU, (mNavScreen == null));
+        return true;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        if (mNavScreen != null) {
+            hideNavScreen(false);
+        }
+        return false;
+    }
+
+    @Override
     public void onContextMenuCreated(Menu menu) {
         hideTitleBar();
     }
diff --git a/src/com/android/browser/PreloadController.java b/src/com/android/browser/PreloadController.java
index 11586ea..652ea8e 100644
--- a/src/com/android/browser/PreloadController.java
+++ b/src/com/android/browser/PreloadController.java
@@ -81,11 +81,25 @@
     @Override
     public void onPageStarted(Tab tab, WebView view, Bitmap favicon) {
         if (LOGD_ENABLED) Log.d(LOGTAG, "onPageStarted()");
+        if (view != null) {
+            // Clear history of all previously visited pages. When the
+            // user visits a preloaded tab, the only item in the history
+            // list should the currently viewed page.
+            view.clearHistory();
+        }
     }
 
     @Override
     public void onPageFinished(Tab tab) {
         if (LOGD_ENABLED) Log.d(LOGTAG, "onPageFinished()");
+        if (tab != null) {
+            final WebView view = tab.getWebView();
+            if (view != null) {
+                // Clear history of all previously visited pages. When the
+                // user visits a preloaded tab.
+                view.clearHistory();
+            }
+        }
     }
 
     @Override
diff --git a/src/com/android/browser/TabControl.java b/src/com/android/browser/TabControl.java
index 1be2016..6473c88 100644
--- a/src/com/android/browser/TabControl.java
+++ b/src/com/android/browser/TabControl.java
@@ -389,6 +389,11 @@
                 // ignore tab
             } else if (id == currentId || restoreAll) {
                 Tab t = createNewTab();
+                if (t == null) {
+                    // We could "break" at this point, but we want
+                    // sNextId to be set correctly.
+                    continue;
+                }
                 tabMap.put(id, t);
                 // Me must set the current tab before restoring the state
                 // so that all the client classes are set.
@@ -416,11 +421,12 @@
                 // added the tab to the front as they are not current
                 mTabQueue.add(0, t);
             }
-            // make sure that there is no id overlap between the restored
-            // and new tabs
-            sNextId = maxId + 1;
-
         }
+
+        // make sure that there is no id overlap between the restored
+        // and new tabs
+        sNextId = maxId + 1;
+
         if (mCurrentTab == -1) {
             if (getTabCount() > 0) {
                 setCurrentTab(getTab(0));
diff --git a/src/com/android/browser/UI.java b/src/com/android/browser/UI.java
index 4b58872..23897f7 100644
--- a/src/com/android/browser/UI.java
+++ b/src/com/android/browser/UI.java
@@ -22,6 +22,7 @@
 import android.view.ActionMode;
 import android.view.KeyEvent;
 import android.view.Menu;
+import android.view.MenuItem;
 import android.view.View;
 import android.webkit.WebChromeClient.CustomViewCallback;
 import android.webkit.WebView;
@@ -102,6 +103,8 @@
 
     public void onExtendedMenuOpened();
 
+    public boolean onOptionsItemSelected(MenuItem item);
+
     public void onOptionsMenuClosed(boolean inLoad);
 
     public void onExtendedMenuClosed(boolean inLoad);
