diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index fe472c5..b35ca04 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -246,23 +246,6 @@
     @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);
-            }
             if (item.getItemId() == R.id.about_menu_id) {
                 final AlertDialog.Builder builder = new AlertDialog.Builder(this);
                 builder.setTitle(R.string.about);
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index e84358f..8e118a1 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -17,6 +17,7 @@
 package com.android.browser;
 
 import android.app.Activity;
+import android.app.AlertDialog;
 import android.app.Dialog;
 import android.app.DownloadManager;
 import android.app.ProgressDialog;
@@ -1652,8 +1653,8 @@
                 String ret = SystemProperties.get("persist.debug.browsermonkeytest");
                 if (ret != null && ret.equals("enable"))
                     break;
-                onPause();
-                return false;
+                showExitDialog(mActivity);
+                return true;
 
             case R.id.homepage_menu_id:
                 Tab current = mTabControl.getCurrentTab();
@@ -1835,6 +1836,35 @@
         t.loadUrl(t.getUrl(), null);
     }
 
+    private void showExitDialog(final Activity activity) {
+        new AlertDialog.Builder(activity)
+                .setTitle(R.string.exit_browser_title)
+                .setIcon(android.R.drawable.ic_dialog_alert)
+                .setMessage(R.string.exit_browser_msg)
+                .setNegativeButton(R.string.exit_minimize, new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int which) {
+                        activity.moveTaskToBack(true);
+                        dialog.dismiss();
+                    }
+                })
+                .setPositiveButton(R.string.exit_quit, new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int which) {
+                        activity.finish();
+                        mHandler.postDelayed(new Runnable() {
+                            @Override
+                            public void run() {
+                                // TODO Auto-generated method stub
+                                mCrashRecoveryHandler.clearState(true);
+                                int pid = android.os.Process.myPid();
+                                android.os.Process.killProcess(pid);
+                            }
+                        }, 300);
+                        dialog.dismiss();
+                    }
+                })
+                .show();
+    }
+
     @Override
     public void showPageInfo() {
         mPageDialogsHandler.showPageInfo(mTabControl.getCurrentTab(), false, null);
@@ -2638,7 +2668,7 @@
              * root of the task. So we can use either true or false for
              * moveTaskToBack().
              */
-            mActivity.moveTaskToBack(true);
+            showExitDialog(mActivity);
             return;
         }
         if (current.canGoBack()) {
@@ -2652,9 +2682,6 @@
                 // Now we close the other tab
                 closeTab(current);
             } else {
-                if ((current.getAppId() != null) || current.closeOnBack()) {
-                    closeCurrentTab(true);
-                }
                 /*
                  * Instead of finishing the activity, simply push this to the back
                  * of the stack and let ActivityManager to choose the foreground
@@ -2662,7 +2689,7 @@
                  * root of the task. So we can use either true or false for
                  * moveTaskToBack().
                  */
-                mActivity.moveTaskToBack(true);
+                showExitDialog(mActivity);
             }
         }
     }
