diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 3ecdcb4..74eede7 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -222,6 +222,23 @@
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         if (!mController.onOptionsItemSelected(item)) {
+            if (item.getItemId() == R.id.exit_menu_id) {
+                finish();
+                new Handler().postDelayed(new Runnable() {
+                    @Override
+                    public void run() {
+                        // Make sure all tabs are closed.
+                        if (mController != NullController.INSTANCE) {
+                            mController.onPause();
+                            mController.onDestroy();
+                            // Clear the state before kill the browser process.
+                            CrashRecoveryHandler.getInstance().clearState(true);
+                            mController = NullController.INSTANCE;
+                        }
+                        android.os.Process.killProcess(android.os.Process.myPid());
+                    }
+                }, 300);
+            }
             return super.onOptionsItemSelected(item);
         }
         return true;
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 292a2b0..f87220c 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -47,6 +47,7 @@
 import android.os.Message;
 import android.os.PowerManager;
 import android.os.PowerManager.WakeLock;
+import android.os.SystemProperties;
 import android.preference.PreferenceActivity;
 import android.provider.Browser;
 import android.provider.BrowserContract;
@@ -769,6 +770,7 @@
         // Stop watching the default geolocation permissions
         mSystemAllowGeolocationOrigins.stop();
         mSystemAllowGeolocationOrigins = null;
+        mCrashRecoveryHandler.clearState();
     }
 
     protected boolean isActivityPaused() {
@@ -1509,13 +1511,11 @@
     public void updateMenuState(Tab tab, Menu menu) {
         boolean canGoBack = false;
         boolean canGoForward = false;
-        boolean isHome = false;
         boolean isDesktopUa = false;
         boolean isLive = false;
         if (tab != null) {
             canGoBack = tab.canGoBack();
             canGoForward = tab.canGoForward();
-            isHome = mSettings.getHomePage().equals(tab.getUrl());
             isDesktopUa = mSettings.hasDesktopUseragent(tab.getWebView());
             isLive = !tab.isSnapshot();
         }
@@ -1523,7 +1523,6 @@
         back.setEnabled(canGoBack);
 
         final MenuItem home = menu.findItem(R.id.homepage_menu_id);
-        home.setEnabled(!isHome);
 
         final MenuItem forward = menu.findItem(R.id.forward_menu_id);
         forward.setEnabled(canGoForward);
@@ -1555,7 +1554,10 @@
         uaSwitcher.setChecked(isDesktopUa);
         menu.setGroupVisible(R.id.LIVE_MENU, isLive);
         menu.setGroupVisible(R.id.SNAPSHOT_MENU, !isLive);
-        menu.setGroupVisible(R.id.COMBO_MENU, false);
+
+        // history and snapshots item are the members of COMBO menu group,
+        // so if show history item, only make snapshots item invisible.
+        menu.findItem(R.id.snapshots_menu_id).setVisible(false);
 
         mUi.updateMenuState(tab, menu);
     }
@@ -1635,6 +1637,13 @@
                 closeCurrentTab();
                 break;
 
+            case R.id.exit_menu_id:
+                String ret = SystemProperties.get("persist.debug.browsermonkeytest");
+                if (ret != null && ret.equals("enable"))
+                    break;
+                onPause();
+                return false;
+
             case R.id.homepage_menu_id:
                 Tab current = mTabControl.getCurrentTab();
                 loadUrl(current, mSettings.getHomePage());
diff --git a/src/com/android/browser/CrashRecoveryHandler.java b/src/com/android/browser/CrashRecoveryHandler.java
index 822e82a..bcdf8b0 100644
--- a/src/com/android/browser/CrashRecoveryHandler.java
+++ b/src/com/android/browser/CrashRecoveryHandler.java
@@ -131,7 +131,26 @@
     };
 
     public void clearState() {
-        mBackgroundHandler.sendEmptyMessage(MSG_CLEAR_STATE);
+        clearState(false);
+    }
+
+    /**
+     * Clear cached state files.
+     *
+     * @param block If block, clear state files in the caller thread, otherwise
+     * do it in a worker thread.
+     */
+    void clearState(boolean block) {
+        if (block) {
+            if (mContext != null) {
+                File state = new File(mContext.getCacheDir(), STATE_FILE);
+                if (state.exists()) {
+                    state.delete();
+                }
+            }
+        } else {
+            mBackgroundHandler.sendEmptyMessage(MSG_CLEAR_STATE);
+        }
         updateLastRecovered(0);
     }
 
@@ -246,4 +265,4 @@
             p.recycle();
         }
     }
-}
\ No newline at end of file
+}
