diff --git a/res/values/strings.xml b/res/values/strings.xml
index 7333f3f..e79ea58 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -906,6 +906,9 @@
     <!-- Access point for RLZ tracking. -->
     <string name="rlz_access_point">Y1</string>
 
+    <!-- Title for a dialog asking the user which account to sync their bookmarks to [CHAR LIMIT=32] -->
+    <string name="account_chooser_dialog_title" msgid="4833571985009544332">Choose account</string>
+
     <!-- Title for a dialog asking the user what they want to do with their bookmarks when adding a sync account [CHAR-LIMIT=32] -->
     <string name="import_bookmarks_dialog_title">Sync with Google account</string>
 
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index f20583a..7475237 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -394,6 +394,8 @@
         mCrumbs.setController(null);
         mCrumbs = null;
         getLoaderManager().destroyLoader(LOADER_BOOKMARKS);
+        mAdapter = null;
+        CombinedBookmarkHistoryView.getIconListenerSet().removeListener(this);
     }
 
     @Override
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 3131ba7..472201b 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -2125,9 +2125,10 @@
         if (mTabControl.canCreateNewTab()) {
             Tab currentTab = mTabControl.getCurrentTab();
             Tab tab = mTabControl.createNewTab(false, null,
-                    "browser:incognito", true);
+                    null, true);
             addTab(tab);
             setActiveTab(tab);
+            loadUrlDataIn(tab, new UrlData("browser:incognito"));
             return tab;
         } else {
             mUi.showMaxTabsWarning();
diff --git a/src/com/android/browser/TabScrollView.java b/src/com/android/browser/TabScrollView.java
index 09dddee..d0648b7 100644
--- a/src/com/android/browser/TabScrollView.java
+++ b/src/com/android/browser/TabScrollView.java
@@ -28,7 +28,6 @@
  */
 public class TabScrollView extends HorizontalScrollView {
 
-    private Context mContext;
     private LinearLayout mContentView;
     private int mSelected;
     private int mAnimationDuration;
@@ -62,13 +61,12 @@
     }
 
     private void init(Context ctx) {
-        mContext = ctx;
         mAnimationDuration = ctx.getResources().getInteger(
                 R.integer.tab_animation_duration);
         mTabOverlap = (int) ctx.getResources().getDimension(R.dimen.tab_overlap);
         setHorizontalScrollBarEnabled(false);
         setOverScrollMode(OVER_SCROLL_NEVER);
-        mContentView = new TabLayout(mContext);
+        mContentView = new TabLayout(ctx);
         mContentView.setOrientation(LinearLayout.HORIZONTAL);
         mContentView.setLayoutParams(
                 new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
@@ -189,6 +187,21 @@
         return getScrollX();
     }
 
+    @Override
+    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
+        super.onScrollChanged(l, t, oldl, oldt);
+
+        // TabViews base their drawing based on their absolute position within the
+        // window. When hardware accelerated, we need to recreate their display list
+        // when they scroll
+        if (isHardwareAccelerated()) {
+            int count = mContentView.getChildCount();
+            for (int i = 0; i < count; i++) {
+                mContentView.getChildAt(i).invalidate();
+            }
+        }
+    }
+
     class TabLayout extends LinearLayout {
 
         public TabLayout(Context context) {
diff --git a/src/com/android/browser/TitleBarXLarge.java b/src/com/android/browser/TitleBarXLarge.java
index 8dc8663..2fd9d3d 100644
--- a/src/com/android/browser/TitleBarXLarge.java
+++ b/src/com/android/browser/TitleBarXLarge.java
@@ -302,7 +302,6 @@
             i.putExtra(SearchManager.APP_DATA, appData);
         }
         mUiController.handleNewIntent(i);
-        setUrlMode(false);
         setDisplayTitle(text);
     }
 
@@ -313,7 +312,6 @@
             currentTab.getWebView().requestFocus();
         }
         mUi.hideFakeTitleBar();
-        setUrlMode(false);
         // if top != null current must be set
         if ((currentTab != null) && !mInVoiceMode) {
             setDisplayTitle(currentTab.getUrl());
@@ -345,7 +343,9 @@
             mWebIcon.setImageResource(R.drawable.ic_search_holo_dark);
             updateSearchMode();
         } else {
-            mUrlInput.clearFocus();
+            if (mUrlInput.hasFocus()) {
+                mUrlInput.clearFocus();
+            }
             mGoButton.setVisibility(View.GONE);
             mVoiceSearch.setVisibility(View.GONE);
             mStar.setVisibility(View.VISIBLE);
diff --git a/src/com/android/browser/UrlUtils.java b/src/com/android/browser/UrlUtils.java
index 0a7e90c..d6278ca 100644
--- a/src/com/android/browser/UrlUtils.java
+++ b/src/com/android/browser/UrlUtils.java
@@ -152,7 +152,8 @@
         if (inUrl == null) {
             return "";
         }
-        if (inUrl.startsWith(HomeProvider.MOST_VISITED)) {
+        if (inUrl.startsWith("content:")
+                || inUrl.startsWith("browser:")) {
             return "";
         }
         return inUrl;
diff --git a/src/com/android/browser/preferences/GeneralPreferencesFragment.java b/src/com/android/browser/preferences/GeneralPreferencesFragment.java
index 2735166..b6228dc 100644
--- a/src/com/android/browser/preferences/GeneralPreferencesFragment.java
+++ b/src/com/android/browser/preferences/GeneralPreferencesFragment.java
@@ -224,7 +224,7 @@
 
             mDialog = new AlertDialog.Builder(getActivity())
                     .setIcon(android.R.drawable.ic_dialog_alert)
-                    .setTitle("Choose account") // STOPSHIP localize
+                    .setTitle(R.string.account_chooser_dialog_title)
                     .setSingleChoiceItems(accountNames, curAccountOffset, this)
                     .create();
             return mDialog;
