diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 74103f2..dc65b81 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -1365,10 +1365,10 @@
             // we do not need to remove it
             removeTabFromContentView(currentTab);
         }
-        removeTabFromContentView(tab);
         mTabControl.setCurrentTab(tab);
         attachTabToContentView(tab);
-        resetTitle();
+        resetTitleIconAndProgress();
+        updateLockIconToLatest();
         return true;
     }
 
@@ -1774,6 +1774,11 @@
                                                   ViewGroup.LayoutParams.WRAP_CONTENT));
         }
 
+        if (t == mTabControl.getCurrentTab()) {
+            setLockIconType(t.getLockIconType());
+            setPrevLockType(t.getPrevLockIconType());
+        }
+
         WebView view = t.getWebView();
         view.setEmbeddedTitleBar(mTitleBar);
         // Attach the sub window if necessary
@@ -1811,6 +1816,11 @@
         if (t.getSubWebView() != null) {
             mContentView.removeView(t.getSubWebViewContainer());
         }
+
+        if (t == mTabControl.getCurrentTab()) {
+            t.setLockIconType(getLockIconType());
+            t.setPrevLockIconType(getPrevLockType());
+        }
     }
 
     // Remove the sub window if it exists. Also called by TabControl when the
@@ -1850,10 +1860,10 @@
             if (currentTab != null) {
                 removeTabFromContentView(currentTab);
             }
-            attachTabToContentView(tab);
             // We must set the new tab as the current tab to reflect the old
             // animation behavior.
             mTabControl.setCurrentTab(tab);
+            attachTabToContentView(tab);
             if (!urlData.isEmpty()) {
                 urlData.loadIn(webview);
             }
@@ -1920,15 +1930,6 @@
     }
 
     /**
-     * Resets the browser title-view to whatever it must be (for example, if we
-     * load a page from history).
-     */
-    private void resetTitle() {
-        resetLockIcon();
-        resetTitleIconAndProgress();
-    }
-
-    /**
      * Resets the browser title-view to whatever it must be
      * (for example, if we had a loading error)
      * When we have a new page, we call resetTitle, when we
@@ -3451,23 +3452,20 @@
         updateLockIconImage(LOCK_ICON_UNSECURE);
     }
 
-    /**
-     * Resets the lock icon.  This method is called when the icon needs to be
-     * reset but we do not know whether we are loading a secure or not secure
-     * page.
-     */
-    private void resetLockIcon() {
-        // Save the lock-icon state (we revert to it if the load gets cancelled)
-        saveLockIcon();
+    /* package */ void setLockIconType(int type) {
+        mLockIconType = type;
+    }
 
-        mLockIconType = LOCK_ICON_UNSECURE;
+    /* package */ int getLockIconType() {
+        return mLockIconType;
+    }
 
-        if (LOGV_ENABLED) {
-          Log.v(LOGTAG, "BrowserActivity.resetLockIcon:" +
-                " reset lock icon to " + mLockIconType);
-        }
+    /* package */ void setPrevLockType(int type) {
+        mPrevLockType = type;
+    }
 
-        updateLockIconImage(LOCK_ICON_UNSECURE);
+    /* package */ int getPrevLockType() {
+        return mPrevLockType;
     }
 
     /**
@@ -4173,9 +4171,9 @@
 
     }
 
-    private final static int LOCK_ICON_UNSECURE = 0;
-    private final static int LOCK_ICON_SECURE   = 1;
-    private final static int LOCK_ICON_MIXED    = 2;
+    final static int LOCK_ICON_UNSECURE = 0;
+    final static int LOCK_ICON_SECURE   = 1;
+    final static int LOCK_ICON_MIXED    = 2;
 
     private int mLockIconType = LOCK_ICON_UNSECURE;
     private int mPrevLockType = LOCK_ICON_UNSECURE;
diff --git a/src/com/android/browser/TabControl.java b/src/com/android/browser/TabControl.java
index 037a757..4089cac 100644
--- a/src/com/android/browser/TabControl.java
+++ b/src/com/android/browser/TabControl.java
@@ -210,12 +210,17 @@
         private String mOriginalUrl;
 
         private ErrorConsoleView mErrorConsole;
+        // the lock icon type and previous lock icon type for the tab
+        private int mSavedLockIconType;
+        private int mSavedPrevLockIconType;
 
         // Construct a new tab
         private Tab(WebView w, boolean closeOnExit, String appId, String url, Context context) {
             mCloseOnExit = closeOnExit;
             mAppId = appId;
             mOriginalUrl = url;
+            mSavedLockIconType = BrowserActivity.LOCK_ICON_UNSECURE;
+            mSavedPrevLockIconType = BrowserActivity.LOCK_ICON_UNSECURE;
 
             // The tab consists of a container view, which contains the main
             // WebView, as well as any other UI elements associated with the tab.
@@ -413,6 +418,22 @@
                 mPickerData.mFakeWebView.invalidate();
             }
         }
+
+        void setLockIconType(int type) {
+            mSavedLockIconType = type;
+        }
+
+        int getLockIconType() {
+            return mSavedLockIconType;
+        }
+
+        void setPrevLockIconType(int type) {
+            mSavedPrevLockIconType = type;
+        }
+
+        int getPrevLockIconType() {
+            return mSavedPrevLockIconType;
+        }
     };
 
     // Directory to store thumbnails for each WebView.
