diff --git a/src/com/android/browser/ActivityController.java b/src/com/android/browser/ActivityController.java
index 817857a..d19eaac 100644
--- a/src/com/android/browser/ActivityController.java
+++ b/src/com/android/browser/ActivityController.java
@@ -21,6 +21,10 @@
 
     void handleNewIntent(Intent intent);
 
+    void onStart();
+
+    void onStop();
+
     void onResume();
 
     boolean onMenuOpened(int featureId, Menu menu);
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index b07cca5..af2fbfa 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -229,11 +229,11 @@
     }
 
     protected void handleOnResume() {
-        // Note: Intentionally left blank.
+        mController.onResume();
     }
 
     protected void handleOnStart() {
-        mController.onResume();
+        mController.onStart();
     }
 
     @Override
@@ -246,7 +246,7 @@
 
     protected void handleOnStop() {
         CookieManager.getInstance().flushCookieStore();
-        mController.onPause();
+        mController.onStop();
     }
 
     @Override
@@ -290,7 +290,7 @@
     }
 
     protected void handleOnPause() {
-        // Note: Intentionally left blank
+        mController.onPause();
     }
 
     @Override
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 8c88c7d..3be1ab9 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -238,6 +238,7 @@
     private boolean mExtendedMenuOpen;
 
     private boolean mActivityPaused = true;
+    private boolean mActivityStopped = true;
     private boolean mLoadStopped;
 
     private Handler mHandler;
@@ -730,24 +731,7 @@
             return;
         }
         mActivityPaused = true;
-        Tab tab = mTabControl.getCurrentTab();
-        if (tab != null) {
-            tab.pause();
-            if (!pauseWebViewTimers(tab)) {
-                if (mWakeLock == null) {
-                    PowerManager pm = (PowerManager) mActivity
-                            .getSystemService(Context.POWER_SERVICE);
-                    mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Browser");
-                }
-                mWakeLock.acquire();
-                mHandler.sendMessageDelayed(mHandler
-                        .obtainMessage(RELEASE_WAKELOCK), WAKELOCK_TIMEOUT);
-            }
-        }
-        mUi.onPause();
-        mNetworkHandler.onPause();
-        NfcHandler.unregister(mActivity);
-        mActivity.unregisterReceiver(mLowPowerReceiver);
+
     }
 
     @Override
@@ -777,9 +761,56 @@
             Log.e(LOGTAG, "BrowserActivity is already resumed.");
             return;
         }
+        mActivityPaused = false;
+        if (mVoiceResult != null) {
+            mUi.onVoiceResult(mVoiceResult);
+            mVoiceResult = null;
+        }
+    }
+
+    private void releaseWakeLock() {
+        if (mWakeLock != null && mWakeLock.isHeld()) {
+            mHandler.removeMessages(RELEASE_WAKELOCK);
+            mWakeLock.release();
+        }
+    }
+
+    @Override
+    public void onStop() {
+        if (mActivityStopped) {
+            Log.e(LOGTAG, "BrowserActivity is already stoped.");
+            return;
+        }
+        mActivityStopped = true;
+        Tab tab = mTabControl.getCurrentTab();
+        if (tab != null) {
+            tab.pause();
+            if (!pauseWebViewTimers(tab)) {
+                if (mWakeLock == null) {
+                    PowerManager pm = (PowerManager) mActivity
+                            .getSystemService(Context.POWER_SERVICE);
+                    mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Browser");
+                }
+                mWakeLock.acquire();
+                mHandler.sendMessageDelayed(mHandler
+                        .obtainMessage(RELEASE_WAKELOCK), WAKELOCK_TIMEOUT);
+            }
+        }
+        mUi.onPause();
+        mNetworkHandler.onPause();
+        NfcHandler.unregister(mActivity);
+        mActivity.unregisterReceiver(mLowPowerReceiver);
+    }
+
+    @Override
+    public void onStart() {
+        if (!mActivityStopped) {
+            Log.e(LOGTAG, "BrowserActivity is already started.");
+            return;
+        }
+        mActivityStopped = false;
         UpdateNotificationService.updateCheck(mActivity);
         mSettings.setLastRunPaused(false);
-        mActivityPaused = false;
         Tab current = mTabControl.getCurrentTab();
         if (current != null) {
             current.resume();
@@ -790,20 +821,10 @@
         mUi.onResume();
         mNetworkHandler.onResume();
         NfcHandler.register(mActivity, this);
-        if (mVoiceResult != null) {
-            mUi.onVoiceResult(mVoiceResult);
-            mVoiceResult = null;
-        }
         if (current != null && current.getWebView().isShowingCrashView())
             current.getWebView().reload();
         mActivity.registerReceiver(mLowPowerReceiver, new IntentFilter(Intent.ACTION_BATTERY_LOW));
-    }
 
-    private void releaseWakeLock() {
-        if (mWakeLock != null && mWakeLock.isHeld()) {
-            mHandler.removeMessages(RELEASE_WAKELOCK);
-            mWakeLock.release();
-        }
     }
 
     /**
diff --git a/src/com/android/browser/NavigationBarPhone.java b/src/com/android/browser/NavigationBarPhone.java
index a94cabd..23df7fc 100644
--- a/src/com/android/browser/NavigationBarPhone.java
+++ b/src/com/android/browser/NavigationBarPhone.java
@@ -141,15 +141,8 @@
             mTabText.setVisibility(View.VISIBLE);
             break;
         case StateListener.STATE_HIGHLIGHTED:
-            if (!mUrlInput.getText().toString().equals(mUrlInput.getTag())) {
-                // only change text if different
-                mUrlInput.setText((String) mUrlInput.getTag(), false);
-                mUrlInput.selectAll();
-            }
-
             mTabSwitcher.setVisibility(View.GONE);
             mTabText.setVisibility(View.GONE);
-
             break;
         case StateListener.STATE_EDITED:
             mStopButton.setVisibility(View.GONE);
diff --git a/src/com/android/browser/stub/NullController.java b/src/com/android/browser/stub/NullController.java
index 1df77db..d513b7d 100644
--- a/src/com/android/browser/stub/NullController.java
+++ b/src/com/android/browser/stub/NullController.java
@@ -38,6 +38,14 @@
     }
 
     @Override
+    public void onStop() {
+    }
+
+    @Override
+    public void onStart() {
+    }
+
+    @Override
     public boolean onMenuOpened(int featureId, Menu menu) {
         return false;
     }
