diff --git a/res/layout/nav_tab_view.xml b/res/layout/nav_tab_view.xml
index 7d9263d..5a71c71 100644
--- a/res/layout/nav_tab_view.xml
+++ b/res/layout/nav_tab_view.xml
@@ -79,7 +79,7 @@
             android:src="@drawable/ic_stop_holo_dark"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_gravity="right|bottom"
+            android:layout_gravity="bottom|right"
             android:background="@drawable/navtab_close_background" />
     </FrameLayout>
 </LinearLayout>
diff --git a/res/values-land/dimensions.xml b/res/values-land/dimensions.xml
index e69bd82..df4bc84 100644
--- a/res/values-land/dimensions.xml
+++ b/res/values-land/dimensions.xml
@@ -17,5 +17,4 @@
     <dimen name="preference_widget_width">72dp</dimen>
     <dimen name="nav_tab_width">280dip</dimen>
     <dimen name="nav_tab_height">240dip</dimen>
-    <dimen name="nav_scroller_padding">101dip</dimen>
 </resources>
diff --git a/res/values/dimensions.xml b/res/values/dimensions.xml
index e1ae0eb..dbb0c60 100644
--- a/res/values/dimensions.xml
+++ b/res/values/dimensions.xml
@@ -71,5 +71,6 @@
     <dimen name="tab_capture_size">160dp</dimen>
     <dimen name="nav_tab_width">280dip</dimen>
     <dimen name="nav_tab_height">280dip</dimen>
-    <dimen name="nav_scroller_padding">68dip</dimen>
+    <dimen name="nav_tab_text_normal">18sp</dimen>
+    <dimen name="nav_tab_text_small">14sp</dimen>
 </resources>
diff --git a/src/com/android/browser/BrowserWebView.java b/src/com/android/browser/BrowserWebView.java
index 6cdc063..5a40b3c 100644
--- a/src/com/android/browser/BrowserWebView.java
+++ b/src/com/android/browser/BrowserWebView.java
@@ -22,9 +22,10 @@
 import android.util.AttributeSet;
 import android.view.MotionEvent;
 import android.view.View;
-import android.view.ViewConfiguration;
 import android.webkit.WebView;
 
+import com.android.browser.NavTabView.WebProxyView;
+
 import java.util.Map;
 
 /**
@@ -39,10 +40,7 @@
     private TitleBarBase mTitleBar;
     private int mCaptureSize;
     private Bitmap mCapture;
-    private boolean mNavMode;
-    private boolean mTracking;
-    private int mSlop;
-    float mDownX, mDownY;
+    private WebProxyView mProxyView;
 
     /**
      * @param context
@@ -84,15 +82,21 @@
     }
 
     private void init() {
-        mNavMode = false;
-        mSlop = ViewConfiguration.get(mContext).getScaledTouchSlop();
         mCaptureSize = mContext.getResources().getDimensionPixelSize(R.dimen.tab_capture_size);
         mCapture = Bitmap.createBitmap(mCaptureSize, mCaptureSize,
                 Bitmap.Config.RGB_565);
     }
 
-    protected void setNavMode(boolean enabled) {
-        mNavMode = enabled;
+    protected void setProxyView(WebProxyView p) {
+        mProxyView = p;
+    }
+
+    @Override
+    public void invalidate() {
+        super.invalidate();
+        if (mProxyView != null) {
+            mProxyView.invalidate();
+        }
     }
 
     @Override
@@ -127,36 +131,13 @@
 
     @Override
     public boolean onTouchEvent(MotionEvent evt) {
-        if (mNavMode) {
-            if (MotionEvent.ACTION_DOWN == evt.getActionMasked()) {
-                mDownX = evt.getX();
-                mDownY = evt.getY();
-                mTracking = true;
-                return true;
-            } else if (mTracking && MotionEvent.ACTION_MOVE == evt.getActionMasked()) {
-                if (mSlop < Math.abs(evt.getX() - mDownX)
-                        || mSlop < Math.abs(evt.getY() - mDownY)) {
-                    mTracking = false;
-                }
-                return mTracking;
-            } else if (mTracking && MotionEvent.ACTION_UP == evt.getActionMasked()) {
-                performClick();
-                mTracking = false;
-                return true;
-            } else if (mTracking && MotionEvent.ACTION_CANCEL == evt.getActionMasked()) {
-                mTracking = false;
-                return true;
-            }
-            return super.onTouchEvent(evt);
-        } else {
-            if (MotionEvent.ACTION_DOWN == evt.getActionMasked()) {
-                mUserInitiated = true;
-            } else if (MotionEvent.ACTION_UP == evt.getActionMasked()
-                    || (MotionEvent.ACTION_CANCEL == evt.getActionMasked())) {
-                mUserInitiated = false;
-            }
-            return super.onTouchEvent(evt);
+        if (MotionEvent.ACTION_DOWN == evt.getActionMasked()) {
+            mUserInitiated = true;
+        } else if (MotionEvent.ACTION_UP == evt.getActionMasked()
+                || (MotionEvent.ACTION_CANCEL == evt.getActionMasked())) {
+            mUserInitiated = false;
         }
+        return super.onTouchEvent(evt);
     }
 
     @Override
diff --git a/src/com/android/browser/NavTabScroller.java b/src/com/android/browser/NavTabScroller.java
index cbb2cfd..bd26df7 100644
--- a/src/com/android/browser/NavTabScroller.java
+++ b/src/com/android/browser/NavTabScroller.java
@@ -66,6 +66,25 @@
         addView(sview);
     }
 
+    @Override
+    protected void onMeasure(int wspec, int hspec) {
+        super.onMeasure(wspec, hspec);
+        calcPadding();
+    }
+
+    private void calcPadding() {
+        if (mAdapter.getCount() > 0) {
+            View v = mContentView.getChildAt(0);
+            if (mOrientation == Configuration.ORIENTATION_PORTRAIT) {
+                int pad = (getMeasuredHeight() - v.getMeasuredHeight()) / 2;
+                mContentView.setPadding(0, pad, 0, pad);
+            } else {
+                int pad = (getMeasuredWidth() - v.getMeasuredWidth()) / 2;
+                mContentView.setPadding(pad, 0, pad, 0);
+            }
+        }
+    }
+
     protected void setAdapter(BaseAdapter adapter) {
         mAdapter = adapter;
         mAdapter.registerDataSetObserver(new DataSetObserver() {
@@ -151,8 +170,6 @@
             mContentView.setOrientation(LinearLayout.VERTICAL);
             setVerticalScrollBarEnabled(false);
             setSmoothScrollingEnabled(true);
-            int pad = ctx.getResources().getDimensionPixelSize(R.dimen.nav_scroller_padding);
-            mContentView.setPadding(0, pad, 0, pad);
             mContentView.setLayoutParams(
                     new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
             addView(mContentView);
@@ -175,20 +192,28 @@
             int midy = getScrollY() + getHeight() / 2;
             int sel = -1;
             for (int i = 0; i < mContentView.getChildCount(); i++) {
-                View child = mContentView.getChildAt(i);
-                if (child.getTop() <= midy && child.getBottom() >= midy) {
+                NavTabView child = (NavTabView) mContentView.getChildAt(i);
+                int top = child.getTop();
+                int bottom = child.getBottom();
+                if (top <= midy && bottom >= midy) {
                     sel = i;
-                    break;
+                } else {
+                    // check if on screen
+                    if (top > getScrollY() + getHeight() || bottom < getScrollY()) {
+                        if (!child.isPaused()) {
+                            child.pause();
+                        }
+                    } else {
+                        if (child.isPaused()) {
+                            child.resume();
+                        }
+                    }
                 }
             }
             if (sel != -1) {
                 if (sel != mSelected) {
                     setSelection(sel);
                 }
-                if (!isCentered(mSelected)) {
-                    NavTabView ntv = (NavTabView) getSelectedView();
-                    ntv.setHighlighted(false);
-                }
             }
         }
 
@@ -201,6 +226,11 @@
                 if (mScroller.isFinished() && dragged) {
                     snapToSelected();
                 }
+            } else if (MotionEvent.ACTION_MOVE == evt.getActionMasked()) {
+                NavTabView ntv = (NavTabView) getSelectedView();
+                if (mIsBeingDragged && ntv.isHighlighted()) {
+                    ntv.setHighlighted(false);
+                }
             }
             return result;
         }
@@ -215,17 +245,11 @@
                     // reset snap scrolling flag
                     mSnapScroll = false;
                     NavTabView ntv = (NavTabView) getSelectedView();
-                    ntv.setHighlighted(isCentered(mSelected));
+                    ntv.setHighlighted(true);
                 }
             }
         }
 
-        private boolean isCentered(int ix) {
-            int midy = getScrollY() + (getTop() + getBottom()) / 2;
-            View v = mContentView.getChildAt(ix);
-            return (v.getTop() + v.getBottom()) / 2 == midy;
-        }
-
         private void snapToSelected() {
             View v = mContentView.getChildAt(mSelected);
             int top = (v.getTop() + v.getBottom()) / 2;
@@ -234,6 +258,9 @@
                 // snap to selected
                 mSnapScroll = true;
                 smoothScrollTo(0, top);
+            } else {
+                NavTabView ntv = (NavTabView) getSelectedView();
+                ntv.setHighlighted(true);
             }
         }
 
@@ -270,12 +297,9 @@
             mContentView.setOrientation(LinearLayout.HORIZONTAL);
             setVerticalScrollBarEnabled(false);
             setSmoothScrollingEnabled(true);
-            int pad = ctx.getResources().getDimensionPixelSize(R.dimen.nav_scroller_padding);
-            mContentView.setPadding(pad, 0, pad, 0);
             mContentView.setLayoutParams(
                     new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
             addView(mContentView);
-
         }
 
         public LinearLayout getContentView() {
@@ -304,10 +328,6 @@
                 if (sel != mSelected) {
                     setSelection(sel);
                 }
-                if (!isCentered(mSelected)) {
-                    NavTabView ntv = (NavTabView) getSelectedView();
-                    ntv.setHighlighted(false);
-                }
             }
         }
 
@@ -320,6 +340,11 @@
                 if (mScroller.isFinished() && dragged) {
                     snapToSelected();
                 }
+            } else if (MotionEvent.ACTION_MOVE == evt.getActionMasked()) {
+                NavTabView ntv = (NavTabView) getSelectedView();
+                if (mIsBeingDragged && ntv.isHighlighted()) {
+                    ntv.setHighlighted(false);
+                }
             }
             return result;
         }
@@ -334,17 +359,11 @@
                     // reset snap scrolling flag
                     mSnapScroll = false;
                     NavTabView ntv = (NavTabView) getSelectedView();
-                    ntv.setHighlighted(isCentered(mSelected));
+                    ntv.setHighlighted(true);
                 }
             }
         }
 
-        private boolean isCentered(int ix) {
-            int midx = getScrollX() + getWidth() / 2;
-            View v = mContentView.getChildAt(ix);
-            return (v.getLeft() + v.getRight()) / 2 == midx;
-        }
-
         private void snapToSelected() {
             View v = mContentView.getChildAt(mSelected);
             int left = (v.getLeft() + v.getRight()) / 2;
@@ -353,6 +372,9 @@
                 // snap to selected
                 mSnapScroll = true;
                 smoothScrollTo(left, 0);
+            } else {
+                NavTabView ntv = (NavTabView) getSelectedView();
+                ntv.setHighlighted(true);
             }
         }
 
diff --git a/src/com/android/browser/NavTabView.java b/src/com/android/browser/NavTabView.java
index 14453dc..061e024 100644
--- a/src/com/android/browser/NavTabView.java
+++ b/src/com/android/browser/NavTabView.java
@@ -17,8 +17,11 @@
 package com.android.browser;
 
 import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Canvas;
 import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
+import android.util.TypedValue;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -30,18 +33,23 @@
 
 public class NavTabView extends LinearLayout {
 
-    Tab mTab;
-    BrowserWebView mWebView;
-    ImageButton mForward;
-    ImageButton mRefresh;
-    ImageView mFavicon;
-    ImageButton mClose;
-    FrameLayout mContainer;
-    TextView mTitle;
-    View mTitleBar;
-    OnClickListener mClickListener;
-    boolean mHighlighted;
-    Drawable mTitleBg;
+    private Tab mTab;
+    private BrowserWebView mWebView;
+    private WebProxyView mProxy;
+    private ImageButton mForward;
+    private ImageButton mRefresh;
+    private ImageView mFavicon;
+    private ImageButton mClose;
+    private FrameLayout mContainer;
+    private TextView mTitle;
+    private View mTitleBar;
+    private OnClickListener mClickListener;
+    private boolean mHighlighted;
+    private Drawable mTitleBg;
+    private Drawable mUrlBg;
+    private float mMediumTextSize;
+    private float mSmallTextSize;
+    private boolean mPaused;
 
     public NavTabView(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
@@ -59,6 +67,9 @@
     }
 
     private void init() {
+        final Resources res = mContext.getResources();
+        mMediumTextSize = res.getDimension(R.dimen.nav_tab_text_normal);
+        mSmallTextSize = res.getDimension(R.dimen.nav_tab_text_small);
         LayoutInflater.from(mContext).inflate(R.layout.nav_tab_view,
                     this);
         mContainer = (FrameLayout) findViewById(R.id.tab_view);
@@ -68,9 +79,24 @@
         mTitle = (TextView) findViewById(R.id.title);
         mFavicon = (ImageView) findViewById(R.id.favicon);
         mTitleBar = findViewById(R.id.titlebar);
-        mTitleBg = mContext.getResources().getDrawable(R.drawable.bg_urlbar);
+        mTitleBg = res.getDrawable(R.drawable.bg_urlbar);
+        mUrlBg = res.getDrawable(
+                com.android.internal.R.drawable.edit_text_holo_dark);
         setState(false);
-        // refresh titlebar
+    }
+
+    protected void pause() {
+        mPaused = true;
+        mWebView.onPause();
+    }
+
+    protected void resume() {
+        mPaused = false;
+        mWebView.onResume();
+    }
+
+    protected boolean isPaused() {
+        return mPaused;
     }
 
     protected boolean isRefresh(View v) {
@@ -90,7 +116,7 @@
     }
 
     protected boolean isWebView(View v) {
-        return v == mWebView;
+        return v == mProxy;
     }
 
     protected void setHighlighted(boolean highlighted) {
@@ -108,6 +134,8 @@
                     ? View.VISIBLE : View.GONE);
             mTitleBar.setBackgroundDrawable(mTitleBg);
             mClose.setVisibility(View.VISIBLE);
+            mTitle.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMediumTextSize);
+            mTitle.setBackgroundDrawable(mUrlBg);
         } else {
             setAlpha(0.8f);
             mForward.setVisibility(View.GONE);
@@ -115,6 +143,8 @@
             mFavicon.setVisibility(View.INVISIBLE);
             mClose.setVisibility(View.GONE);
             mTitleBar.setBackgroundDrawable(null);
+            mTitle.setTextSize(TypedValue.COMPLEX_UNIT_PX, mSmallTextSize);
+            mTitle.setBackgroundDrawable(null);
         }
         setTitle();
     }
@@ -140,8 +170,8 @@
         if (web == null) return;
         mWebView = web;
         removeFromParent(mWebView);
-        mWebView.setNavMode(true);
-        mContainer.addView(mWebView, 0);
+        mProxy = new WebProxyView(mContext, mWebView);
+        mContainer.addView(mProxy, 0);
         if (mWebView != null) {
             mForward.setVisibility(mWebView.canGoForward()
                     ? View.VISIBLE : View.GONE);
@@ -161,15 +191,39 @@
         mRefresh.setOnClickListener(mClickListener);
         mForward.setOnClickListener(mClickListener);
         mClose.setOnClickListener(mClickListener);
-        if (mWebView != null) {
-            mWebView.setOnClickListener(mClickListener);
+        if (mProxy != null) {
+            mProxy.setOnClickListener(mClickListener);
         }
     }
 
+    @Override
+    public void onDetachedFromWindow() {
+        mWebView.setProxyView(null);
+    }
+
     private static void removeFromParent(View v) {
         if (v.getParent() != null) {
             ((ViewGroup) v.getParent()).removeView(v);
         }
     }
 
+    static class WebProxyView extends View {
+
+        private BrowserWebView mWeb;
+
+        public WebProxyView(Context context, BrowserWebView web) {
+            super(context);
+            setWillNotDraw(false);
+            mWeb = web;
+            mWeb.setProxyView(this);
+
+        }
+
+        public void onDraw(Canvas c) {
+            c.translate(-mWeb.getScrollX(), -mWeb.getScrollY());
+            mWeb.onDraw(c);
+        }
+
+    }
+
 }
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
index ce993fd..f94a8ab 100644
--- a/src/com/android/browser/PhoneUi.java
+++ b/src/com/android/browser/PhoneUi.java
@@ -167,7 +167,6 @@
             Log.e(LOGTAG, "active tab with no webview detected");
             return;
         }
-        view.setNavMode(false);
         // Request focus on the top window.
         if (mUseQuickControls) {
             mPieControl.forceToTop(mContentView);
