diff --git a/res/drawable-hdpi/tab_nr.png b/res/drawable-hdpi/tab_nr.png
deleted file mode 100644
index 3305362..0000000
--- a/res/drawable-hdpi/tab_nr.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/tab_nr.png b/res/drawable-mdpi/tab_nr.png
deleted file mode 100644
index 890ec7c..0000000
--- a/res/drawable-mdpi/tab_nr.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/tab_nr.png b/res/drawable-xhdpi/tab_nr.png
deleted file mode 100644
index abc2937..0000000
--- a/res/drawable-xhdpi/tab_nr.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/tab_nr.xml b/res/drawable/tab_nr.xml
new file mode 100644
index 0000000..4862294
--- /dev/null
+++ b/res/drawable/tab_nr.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<!-- Used by browserbarbutton to show a clear background for the non pressed
+        state -->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="oval">
+    <solid android:color="@color/qc_tab_nr"/>
+    <padding android:left="2dp" android:top="2dp"
+        android:right="2dp" android:bottom="2dp" />
+</shape>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 4ab971f..78f4883 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -32,8 +32,9 @@
     <color name="tabFaviconBackground">#FF555555</color>
     <color name="tabFocusHighlight">#FF99CC00</color>
     <color name="qcMenuBackground">#C0000000</color>
-    <color name="qc_normal">#C02447B2</color>
-    <color name="qc_selected">#D0102052</color>
+    <color name="qc_normal">#E02A96BC</color>
+    <color name="qc_selected">#F01A5B73</color>
+    <color name="qc_tab_nr">#F033B5E5</color>
     <color name="tabViewTitleBackground">#D0000000</color>
     <color name="navtab_bg">#80606060</color>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index d215724..d4d6467 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -498,8 +498,10 @@
     <string name="pref_min_font_size">Minimum font size</string>
     <!-- Label for the current minimum font size value [CHAR LIMIT=6] -->
     <string name="pref_min_font_size_value"><xliff:g id="font_size">%d</xliff:g>pt</string>
-    <!-- Label for text zoom (percent) [CHAR LIMIT=30] -->
-    <string name="pref_text_zoom">Text zoom</string>
+    <!-- Label for text scaling (percent) [CHAR LIMIT=30] -->
+    <string name="pref_text_zoom">Text scaling</string>
+    <!-- Label for zoom on double-tap (percent) [CHAR LIMIT=30] -->
+    <string name="pref_zoom_on_double_tap">Zoom on double-tap</string>
     <!-- Label for whether or not to force-enable user scalablity (aka, zoom) [CHAR LIMIT=30] -->
     <string name="pref_force_userscalable">Force enable zoom</string>
     <!-- Summary for whether or not to force-enable user scalablity (aka, zoom) [CHAR LIMIT=30] -->
@@ -625,7 +627,7 @@
     <!-- Title for accessibility settings [CHAR LIMIT=25] -->
     <string name="pref_accessibility_title">Accessibility</string>
     <!-- Font size settings category under accessibility settings [CHAR LIMIT=50] -->
-    <string name="pref_font_size_category">Font size</string>
+    <string name="pref_font_size_category">Text size</string>
     <!-- Title for lab settings [CHAR LIMIT=25] -->
     <string name="pref_lab_title">Labs</string>
     <!-- Title for lab quick controls feature [CHAR LIMIT=40] -->
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index 0ae2fda..3128934 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -17,6 +17,7 @@
 package com.android.browser;
 
 import android.app.Activity;
+import android.content.Context;
 import android.content.Intent;
 import android.content.res.Configuration;
 import android.content.res.Resources;
@@ -33,6 +34,7 @@
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.Gravity;
+import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -88,7 +90,7 @@
     protected FrameLayout mContentView;
     protected FrameLayout mCustomViewContainer;
 
-    private View mCustomView;
+    private CustomViewHolder mCustomView;
     private WebChromeClient.CustomViewCallback mCustomViewCallback;
     private int mOriginalOrientation;
 
@@ -124,10 +126,10 @@
                 .inflate(R.layout.custom_screen, frameLayout);
         mContentView = (FrameLayout) frameLayout.findViewById(
                 R.id.main_content);
+        mCustomViewContainer = (FrameLayout) frameLayout.findViewById(
+                R.id.fullscreen_custom_content);
         mErrorConsoleContainer = (LinearLayout) frameLayout
                 .findViewById(R.id.error_console);
-        mCustomViewContainer = (FrameLayout) frameLayout
-                .findViewById(R.id.fullscreen_custom_content);
         setFullscreen(BrowserSettings.getInstance().useFullscreen());
         mGenericFavicon = res.getDrawable(
                 R.drawable.app_web_browser_sm);
@@ -201,6 +203,7 @@
         updateNavigationState(tab);
         mTitleBar.onTabDataChanged(tab);
         mNavigationBar.onTabDataChanged(tab);
+        onProgressChanged(tab);
     }
 
     @Override
@@ -517,18 +520,23 @@
         }
 
         mOriginalOrientation = mActivity.getRequestedOrientation();
+        WindowManager wm = (WindowManager) mActivity.getSystemService(Context.WINDOW_SERVICE);
+        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
+                WindowManager.LayoutParams.TYPE_APPLICATION,
+                0);
+        params.x = 0;
+        params.y = 0;
+        params.width = LayoutParams.MATCH_PARENT;
+        params.height = LayoutParams.MATCH_PARENT;
+        params.systemUiVisibility = View.STATUS_BAR_HIDDEN;
+        mCustomView = new CustomViewHolder(mActivity);
+        view.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,
+                LayoutParams.MATCH_PARENT));
+        mCustomView.addView(view);
+        wm.addView(mCustomView, params);
 
-        // Add the custom view to its container.
-        mCustomViewContainer.addView(view, COVER_SCREEN_GRAVITY_CENTER);
-        mCustomView = view;
         mCustomViewCallback = callback;
-        // Hide the content view.
-        mContentView.setVisibility(View.GONE);
-        // Finally show the custom view container.
-        setStatusBarVisibility(false);
         mActivity.setRequestedOrientation(requestedOrientation);
-        mCustomViewContainer.setVisibility(View.VISIBLE);
-        mCustomViewContainer.bringToFront();
     }
 
     @Override
@@ -536,17 +544,13 @@
         if (mCustomView == null)
             return;
 
-        // Hide the custom view.
-        mCustomView.setVisibility(View.GONE);
-        // Remove the custom view from its container.
-        mCustomViewContainer.removeView(mCustomView);
+        WindowManager wm = (WindowManager) mActivity.getSystemService(Context.WINDOW_SERVICE);
+        wm.removeView(mCustomView);
+
         mCustomView = null;
-        mCustomViewContainer.setVisibility(View.GONE);
         mCustomViewCallback.onCustomViewHidden();
         // Show the content view.
         mActivity.setRequestedOrientation(mOriginalOrientation);
-        setStatusBarVisibility(true);
-        mContentView.setVisibility(View.VISIBLE);
     }
 
     @Override
@@ -709,12 +713,6 @@
         }
     }
 
-    private void setStatusBarVisibility(boolean visible) {
-        WindowManager.LayoutParams params = mActivity.getWindow().getAttributes();
-        params.systemUiVisibility = visible ? View.STATUS_BAR_VISIBLE : View.STATUS_BAR_HIDDEN;
-        mActivity.getWindow().setAttributes(params);
-    }
-
     // -------------------------------------------------------------------------
     // Helper function for WebChromeClient
     // -------------------------------------------------------------------------
@@ -828,4 +826,18 @@
         mUiController.hideCustomView();
     }
 
+    // custom FrameLayout to forward key events
+    static class CustomViewHolder extends FrameLayout {
+        Activity mActivity;
+
+        public CustomViewHolder(Activity act) {
+            super(act);
+            mActivity = act;
+        }
+
+        public boolean dispatchKeyEvent(KeyEvent event) {
+            return mActivity.dispatchKeyEvent(event);
+        }
+    }
+
 }
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index b9eec9c..5920e58 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -20,6 +20,7 @@
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
 import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
 import android.os.Build;
 import android.os.Message;
@@ -427,7 +428,13 @@
     }
 
     public void setDebugEnabled(boolean value) {
-        mPrefs.edit().putBoolean(PREF_DEBUG_MENU, value).apply();
+        Editor edit = mPrefs.edit();
+        edit.putBoolean(PREF_DEBUG_MENU, value);
+        if (!value) {
+            // Reset to "safe" value
+            edit.putBoolean(PREF_ENABLE_HARDWARE_ACCEL_SKIA, false);
+        }
+        edit.apply();
     }
 
     public void clearCache() {
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 602df06..282d4f2 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -336,8 +336,11 @@
             // TabControl.restoreState() will create a new tab even if
             // restoring the state fails.
             setActiveTab(mTabControl.getCurrentTab());
-            // Handle the intent
-            mIntentHandler.onNewIntent(intent);
+            // Handle the intent if needed. If icicle != null, we are restoring
+            // and the intent will be stale - ignore it.
+            if (icicle == null) {
+                mIntentHandler.onNewIntent(intent);
+            }
         }
         // Read JavaScript flags if it exists.
         String jsFlags = getSettings().getJsEngineFlags();
@@ -2358,6 +2361,7 @@
         if (tab != null) {
             dismissSubWindow(tab);
             tab.loadUrl(url, headers);
+            mUi.onProgressChanged(tab);
         }
     }
 
diff --git a/src/com/android/browser/IntentHandler.java b/src/com/android/browser/IntentHandler.java
index cc6b57c..c76197d 100644
--- a/src/com/android/browser/IntentHandler.java
+++ b/src/com/android/browser/IntentHandler.java
@@ -65,7 +65,6 @@
     }
 
     void onNewIntent(Intent intent) {
-        mActivity.setIntent(null);
         Tab current = mTabControl.getCurrentTab();
         // When a tab is closed on exit, the current tab index is set to -1.
         // Reset before proceed as Browser requires the current tab to be set.
diff --git a/src/com/android/browser/PieControlPhone.java b/src/com/android/browser/PieControlPhone.java
index 0b62cef..f12c49a 100644
--- a/src/com/android/browser/PieControlPhone.java
+++ b/src/com/android/browser/PieControlPhone.java
@@ -17,13 +17,12 @@
 package com.android.browser;
 
 import android.app.Activity;
+import android.view.Menu;
+import android.view.MenuItem;
 import android.view.View;
 import android.view.View.OnClickListener;
-import android.view.ViewGroup.LayoutParams;
-import android.webkit.WebView;
-import android.widget.ImageView;
-import android.widget.ImageView.ScaleType;
-import android.widget.TextView;
+import android.widget.PopupMenu;
+import android.widget.PopupMenu.OnMenuItemClickListener;
 
 import com.android.browser.view.PieItem;
 import com.android.browser.view.PieMenu.PieView.OnLayoutListener;
@@ -34,13 +33,15 @@
 /**
  * controller for Quick Controls pie menu
  */
-public class PieControlPhone extends PieControlBase implements OnClickListener {
+public class PieControlPhone extends PieControlBase implements OnClickListener,
+        OnMenuItemClickListener {
 
     private PhoneUi mUi;
-    private PieItem mBack;
     private PieItem mUrl;
     private PieItem mShowTabs;
+    private PieItem mOptions;
     private TabAdapter mTabAdapter;
+    private PopupMenu mPopup;
 
     public PieControlPhone(Activity activity, UiController controller, PhoneUi ui) {
         super(activity, controller);
@@ -48,7 +49,6 @@
     }
 
     protected void populateMenu() {
-        mBack = makeItem(R.drawable.ic_back_holo_dark, 1);
         mUrl = makeItem(R.drawable.ic_web_holo_dark, 1);
         View tabs = makeTabsView();
         mShowTabs = new PieItem(tabs, 1);
@@ -63,13 +63,31 @@
         stack.setOnCurrentListener(mTabAdapter);
         stack.setAdapter(mTabAdapter);
         mShowTabs.setPieView(stack);
+        mOptions = makeItem(com.android.internal.R.drawable.ic_menu_moreoverflow_normal_holo_dark,
+                1);
+
         // level 1
-        mPie.addItem(mBack);
-        mPie.addItem(mUrl);
         mPie.addItem(mShowTabs);
-        setClickListener(this, mBack, mUrl, mShowTabs);
+        mPie.addItem(mUrl);
+        mPie.addItem(mOptions);
+        setClickListener(this, mUrl, mShowTabs, mOptions);
+        mPopup = new PopupMenu(mActivity, mUi.getTitleBar());
+        Menu menu = mPopup.getMenu();
+        mPopup.getMenuInflater().inflate(R.menu.browser, menu);
+        mPopup.setOnMenuItemClickListener(this);
     }
 
+    protected void showMenu() {
+        mUiController.updateMenuState(mUiController.getCurrentTab(), mPopup.getMenu());
+        mPopup.show();
+    }
+
+    @Override
+    public boolean onMenuItemClick(MenuItem item) {
+        return mUiController.onOptionsItemSelected(item);
+    }
+
+
     private void buildTabs() {
         final List<Tab> tabs = mUiController.getTabs();
         mUi.getActiveTab().capture();
@@ -81,15 +99,13 @@
 
     @Override
     public void onClick(View v) {
-        Tab tab = mUiController.getTabControl().getCurrentTab();
-        if (mBack.getView() == v) {
-            tab.goBack();
-        } else if (mUrl.getView() == v) {
+        if (mUrl.getView() == v) {
             mUi.editUrl(false);
         } else if (mShowTabs.getView() == v) {
             mUi.showNavScreen();
+        } else if (mOptions.getView() == v) {
+            showMenu();
         }
     }
 
-
 }
diff --git a/src/com/android/browser/PieControlXLarge.java b/src/com/android/browser/PieControlXLarge.java
index 95f586e..0072aea 100644
--- a/src/com/android/browser/PieControlXLarge.java
+++ b/src/com/android/browser/PieControlXLarge.java
@@ -27,6 +27,7 @@
 import android.view.ViewGroup.LayoutParams;
 import android.webkit.WebView;
 import android.widget.BaseAdapter;
+import android.widget.FrameLayout;
 import android.widget.TextView;
 
 import com.android.browser.view.PieItem;
@@ -61,6 +62,12 @@
         mUi = ui;
     }
 
+    @Override
+    protected void attachToContainer(FrameLayout container) {
+        super.attachToContainer(container);
+        mPie.setUseBackground(true);
+    }
+
     protected void populateMenu() {
         mBack = makeItem(R.drawable.ic_back_holo_dark, 1);
         mUrl = makeItem(R.drawable.ic_web_holo_dark, 1);
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index 8023375..936aca9 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -103,6 +103,7 @@
 
     private static final int MSG_CAPTURE = 42;
     private static final int CAPTURE_DELAY = 100;
+    private static final int INITIAL_PROGRESS = 5;
 
     private static Bitmap sDefaultFavicon;
 
@@ -563,7 +564,7 @@
         @Override
         public void onPageStarted(WebView view, String url, Bitmap favicon) {
             mInPageLoad = true;
-            mPageLoadProgress = 0;
+            mPageLoadProgress = INITIAL_PROGRESS;
             mCurrentState = new PageState(mContext,
                     view.isPrivateBrowsingEnabled(), url, favicon);
             mLoadStartTime = SystemClock.uptimeMillis();
@@ -2054,6 +2055,8 @@
 
     public void loadUrl(String url, Map<String, String> headers) {
         if (mMainView != null) {
+            mPageLoadProgress = INITIAL_PROGRESS;
+            mInPageLoad = true;
             mCurrentState = new PageState(mContext, false, url, null);
             mWebViewController.onPageStarted(this, mMainView, null);
             mMainView.loadUrl(url, headers);
diff --git a/src/com/android/browser/XLargeUi.java b/src/com/android/browser/XLargeUi.java
index ea6fddd..b4afb6f 100644
--- a/src/com/android/browser/XLargeUi.java
+++ b/src/com/android/browser/XLargeUi.java
@@ -300,19 +300,10 @@
     }
 
     @Override
-    public void showCustomView(View view, int requestedOrientation,
-            CustomViewCallback callback) {
-        super.showCustomView(view, requestedOrientation, callback);
-        mActivity.getActionBar().hide();
-    }
-
-    @Override
     public void onHideCustomView() {
         super.onHideCustomView();
         if (mUseQuickControls) {
             checkTabCount();
-        } else {
-            mActivity.getActionBar().show();
         }
     }
 
diff --git a/src/com/android/browser/preferences/GeneralPreferencesFragment.java b/src/com/android/browser/preferences/GeneralPreferencesFragment.java
index 05aa1a7..c018474 100644
--- a/src/com/android/browser/preferences/GeneralPreferencesFragment.java
+++ b/src/com/android/browser/preferences/GeneralPreferencesFragment.java
@@ -29,6 +29,7 @@
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.KeyEvent;
+import android.view.WindowManager;
 import android.view.inputmethod.EditorInfo;
 import android.widget.EditText;
 import android.widget.TextView;
@@ -152,6 +153,8 @@
                 return false;
             }
         });
+        dialog.getWindow().setSoftInputMode(
+                WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
         dialog.show();
     }
 
diff --git a/src/com/android/browser/view/PieMenu.java b/src/com/android/browser/view/PieMenu.java
index 99750f9..536ac92 100644
--- a/src/com/android/browser/view/PieMenu.java
+++ b/src/com/android/browser/view/PieMenu.java
@@ -89,6 +89,8 @@
     // touch handling
     PieItem mCurrentItem;
 
+    private boolean mUseBackground;
+
     /**
      * @param context
      * @param attrs
@@ -142,6 +144,10 @@
         mController = ctl;
     }
 
+    public void setUseBackground(boolean useBackground) {
+        mUseBackground = useBackground;
+    }
+
     public void addItem(PieItem item) {
         // add the item to the pie itself
         mItems.add(item);
@@ -245,18 +251,20 @@
     @Override
     protected void onDraw(Canvas canvas) {
         if (mOpen) {
-            int w = mBackground.getIntrinsicWidth();
-            int h = mBackground.getIntrinsicHeight();
-            int left = mCenter.x - w;
-            int top = mCenter.y - h / 2;
-            mBackground.setBounds(left, top, left + w, top + h);
             int state;
-            state = canvas.save();
-            if (onTheLeft()) {
-                canvas.scale(-1, 1);
+            if (mUseBackground) {
+                int w = mBackground.getIntrinsicWidth();
+                int h = mBackground.getIntrinsicHeight();
+                int left = mCenter.x - w;
+                int top = mCenter.y - h / 2;
+                mBackground.setBounds(left, top, left + w, top + h);
+                state = canvas.save();
+                if (onTheLeft()) {
+                    canvas.scale(-1, 1);
+                }
+                mBackground.draw(canvas);
+                canvas.restoreToCount(state);
             }
-            mBackground.draw(canvas);
-            canvas.restoreToCount(state);
             for (PieItem item : mItems) {
                 Paint p = item.isSelected() ? mSelectedPaint : mNormalPaint;
                 state = canvas.save();
