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/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/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;
