diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 1f376d2..447e61b 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -1696,8 +1696,7 @@
                 break;
 
             case R.id.page_info_menu_id:
-                mPageDialogsHandler.showPageInfo(mTabControl.getCurrentTab(),
-                        false);
+                mPageDialogsHandler.showPageInfo(mTabControl.getCurrentTab(), false, null);
                 break;
 
             case R.id.classic_history_menu_id:
diff --git a/src/com/android/browser/GoogleAccountLogin.java b/src/com/android/browser/GoogleAccountLogin.java
index 37654dc..c7d1924 100644
--- a/src/com/android/browser/GoogleAccountLogin.java
+++ b/src/com/android/browser/GoogleAccountLogin.java
@@ -57,8 +57,6 @@
     private static final String GOOGLE = "com.google";
     // Last auto login time
     private static final String PREF_AUTOLOGIN_TIME = "last_autologin_time";
-    // A week in milliseconds (7*24*60*60*1000)
-    private static final long WEEK_IN_MILLIS = 604800000L;
 
     private final Activity mActivity;
     private final Account mAccount;
@@ -294,7 +292,12 @@
                     }
                 }, 2000);
             mRunnable = null;
-            mWebView.destroy();
+            mActivity.runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    mWebView.destroy();
+                }
+            });
         }
     }
 
diff --git a/src/com/android/browser/PageDialogsHandler.java b/src/com/android/browser/PageDialogsHandler.java
index c902f65..b39d863 100644
--- a/src/com/android/browser/PageDialogsHandler.java
+++ b/src/com/android/browser/PageDialogsHandler.java
@@ -39,6 +39,7 @@
     private Context mContext;
     private Controller mController;
     private boolean mPageInfoFromShowSSLCertificateOnError;
+    private String mUrlCertificateOnError;
     private Tab mPageInfoView;
     private AlertDialog mPageInfoDialog;
 
@@ -63,7 +64,9 @@
     public void onConfigurationChanged(Configuration config) {
         if (mPageInfoDialog != null) {
             mPageInfoDialog.dismiss();
-            showPageInfo(mPageInfoView, mPageInfoFromShowSSLCertificateOnError);
+            showPageInfo(mPageInfoView,
+                         mPageInfoFromShowSSLCertificateOnError,
+                         mUrlCertificateOnError);
         }
         if (mSSLCertificateDialog != null) {
             mSSLCertificateDialog.dismiss();
@@ -71,8 +74,9 @@
         }
         if (mSSLCertificateOnErrorDialog != null) {
             mSSLCertificateOnErrorDialog.dismiss();
-            showSSLCertificateOnError(mSSLCertificateOnErrorView, mSSLCertificateOnErrorHandler,
-                    mSSLCertificateOnErrorError);
+            showSSLCertificateOnError(mSSLCertificateOnErrorView,
+                                      mSSLCertificateOnErrorHandler,
+                                      mSSLCertificateOnErrorError);
         }
         if (mHttpAuthenticationDialog != null) {
             mHttpAuthenticationDialog.reshow();
@@ -126,16 +130,19 @@
      * this dialog was opened from the SSL-certificate-on-error dialog or
      * not. This is important, since we need to know whether to return to
      * the parent dialog or simply dismiss.
+     * @param urlCertificateOnError The URL that invokes SSLCertificateError.
+     * Null when fromShowSSLCertificateOnError is false.
      */
     void showPageInfo(final Tab tab,
-            final boolean fromShowSSLCertificateOnError) {
+            final boolean fromShowSSLCertificateOnError,
+            final String urlCertificateOnError) {
         final LayoutInflater factory = LayoutInflater.from(mContext);
 
         final View pageInfoView = factory.inflate(R.layout.page_info, null);
 
         final WebView view = tab.getWebView();
 
-        String url = tab.getUrl();
+        String url = fromShowSSLCertificateOnError ? urlCertificateOnError : tab.getUrl();
         String title = tab.getTitle();
 
         if (url == null) {
@@ -150,6 +157,7 @@
 
         mPageInfoView = tab;
         mPageInfoFromShowSSLCertificateOnError = fromShowSSLCertificateOnError;
+        mUrlCertificateOnError = urlCertificateOnError;
 
         AlertDialog.Builder alertDialogBuilder =
             new AlertDialog.Builder(mContext)
@@ -261,7 +269,7 @@
                                 mSSLCertificateDialog = null;
                                 mSSLCertificateView = null;
 
-                                showPageInfo(tab, false);
+                                showPageInfo(tab, false, null);
                             }
                         })
                 .setOnCancelListener(
@@ -270,7 +278,7 @@
                                 mSSLCertificateDialog = null;
                                 mSSLCertificateView = null;
 
-                                showPageInfo(tab, false);
+                                showPageInfo(tab, false, null);
                             }
                         })
                 .show();
@@ -359,7 +367,8 @@
 
                                 showPageInfo(mController.getTabControl()
                                         .getTabFromView(view),
-                                        true);
+                                        true,
+                                        error.getUrl());
                             }
                         })
                 .setOnCancelListener(
diff --git a/src/com/android/browser/TabScrollView.java b/src/com/android/browser/TabScrollView.java
index f43d6d6..52dd6af 100644
--- a/src/com/android/browser/TabScrollView.java
+++ b/src/com/android/browser/TabScrollView.java
@@ -246,11 +246,11 @@
         @Override
         protected int getChildDrawingOrder(int count, int i) {
             int next = -1;
-            if ((i == (count - 1)) && (mSelected >= 0)) {
+            if ((i == (count - 1)) && (mSelected >= 0) && (mSelected < count)) {
                 next = mSelected;
             } else {
                 next = count - i - 1;
-                if (next <= mSelected) {
+                if (next <= mSelected && next > 0) {
                     next--;
                 }
             }
