diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index 70813e5..f220e70 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -160,7 +160,7 @@
         // Enable the built-in zoom
         w.getSettings().setBuiltInZoomControls(true);
         if (mXLargeScreenSize) {
-            w.setScrollListener(mTabBar);
+            w.setScrollListener(this);
             w.getSettings().setDisplayZoomControls(false);
         }
 
@@ -848,9 +848,9 @@
     }
 
     @Override
-    public void onScroll(boolean titleVisible) {
+    public void onScroll(int visibleTitleHeight) {
         if (mTabBar != null) {
-            mTabBar.onScroll(titleVisible);
+            mTabBar.onScroll(visibleTitleHeight);
         }
     }
 
diff --git a/src/com/android/browser/ScrollWebView.java b/src/com/android/browser/ScrollWebView.java
index 97bd2c7..51df958 100644
--- a/src/com/android/browser/ScrollWebView.java
+++ b/src/com/android/browser/ScrollWebView.java
@@ -26,11 +26,10 @@
 /**
  *  Manage WebView scroll events
  */
-public class ScrollWebView extends WebView {
+public class ScrollWebView extends WebView implements Runnable {
 
     private ScrollListener mScrollListener;
     private boolean mIsCancelled;
-    private Runnable mScrollRunnable;
 
     /**
      * @param context
@@ -68,6 +67,13 @@
         super(context);
     }
 
+    // scroll runnable implementation
+    public void run() {
+        if (!mIsCancelled && (mScrollListener != null)) {
+            mScrollListener.onScroll(getVisibleTitleHeight());
+        }
+    }
+
     void hideEmbeddedTitleBar() {
         scrollBy(0, getVisibleTitleHeight());
     }
@@ -77,13 +83,7 @@
         super.setEmbeddedTitleBar(title);
         if (title != null && mScrollListener != null) {
             // allow the scroll listener to initialize its state
-            post(new Runnable() {
-                @Override
-                public void run() {
-                    mScrollListener.onScroll((title.getHeight() == 0 ||
-                            getVisibleTitleHeight() > 0));
-                }
-            });
+            post(this);
         }
     }
 
@@ -97,7 +97,7 @@
     protected void onScrollChanged(int l, final int t, int ol, int ot) {
         super.onScrollChanged(l, t, ol, ot);
         if (!mIsCancelled) {
-            post(mScrollRunnable);
+            post(this);
         } else {
             mIsCancelled = false;
         }
@@ -105,21 +105,12 @@
 
     void setScrollListener(ScrollListener l) {
         mScrollListener = l;
-        if (mScrollListener != null) {
-            mScrollRunnable = new Runnable() {
-                public void run() {
-                    if (!mIsCancelled) {
-                        mScrollListener.onScroll(getVisibleTitleHeight() > 0);
-                    }
-                }
-            };
-        }
     }
 
     // callback for scroll events
 
     interface ScrollListener {
-        public void onScroll(boolean titleVisible);
+        public void onScroll(int visibleTitleHeight);
     }
 
 }
diff --git a/src/com/android/browser/TabBar.java b/src/com/android/browser/TabBar.java
index 4f179b0..7969955 100644
--- a/src/com/android/browser/TabBar.java
+++ b/src/com/android/browser/TabBar.java
@@ -73,8 +73,7 @@
     private Map<Tab, TabViewData> mTabMap;
 
     private boolean mUserRequestedUrlbar;
-    private boolean mTitleVisible;
-    private boolean mShowUrlMode;
+    private int mVisibleTitleHeight;
     private boolean mHasReceivedTitle;
 
     private Drawable mGenericFavicon;
@@ -121,7 +120,7 @@
         updateTabs(mUiController.getTabs());
 
         mUserRequestedUrlbar = false;
-        mTitleVisible = true;
+        mVisibleTitleHeight = 1;
         mButtonWidth = -1;
         // tab dimensions
         mTabHeight = (int) res.getDimension(R.dimen.tab_height);
@@ -204,18 +203,24 @@
         mUserRequestedUrlbar = true;
     }
 
-    private void setShowUrlMode(boolean showUrl) {
-        mShowUrlMode = showUrl;
+    private void showTitleBarIndicator(boolean show) {
+        Tab tab = mTabControl.getCurrentTab();
+        if (tab != null) {
+            TabViewData tvd = mTabMap.get(tab);
+            if (tvd != null) {
+                tvd.mTabView.showIndicator(show);
+            }
+        }
     }
 
     // callback after fake titlebar is shown
     void onShowTitleBar() {
-        setShowUrlMode(false);
+        showTitleBarIndicator(false);
     }
 
     // callback after fake titlebar is hidden
     void onHideTitleBar() {
-        setShowUrlMode(!mTitleVisible);
+        showTitleBarIndicator(mVisibleTitleHeight == 0);
         Tab tab = mTabControl.getCurrentTab();
         tab.getWebView().requestFocus();
         mUserRequestedUrlbar = false;
@@ -224,22 +229,22 @@
     // webview scroll listener
 
     @Override
-    public void onScroll(boolean titleVisible) {
+    public void onScroll(int visibleTitleHeight) {
         // isLoading is using the current tab, which initially might not be set yet
         if (mTabControl.getCurrentTab() != null) {
-            mTitleVisible = titleVisible;
-            if (!mShowUrlMode && !mTitleVisible && !isLoading()) {
+            if ((mVisibleTitleHeight > 0) && (visibleTitleHeight == 0)
+                    && !isLoading()) {
                 if (mUserRequestedUrlbar) {
                     mUi.hideFakeTitleBar();
                 } else {
-                    setShowUrlMode(true);
+                    showTitleBarIndicator(true);
                 }
-            } else if (mTitleVisible && !isLoading()) {
-                if (mShowUrlMode) {
-                    setShowUrlMode(false);
-                }
+            } else if ((mVisibleTitleHeight == 0) && (visibleTitleHeight != 0)
+                    && !isLoading()) {
+                showTitleBarIndicator(false);
             }
         }
+        mVisibleTitleHeight = visibleTitleHeight;
     }
 
     @Override
@@ -277,6 +282,7 @@
         TabViewData mTabData;
         View mTabContent;
         TextView mTitle;
+        View mIndicator;
         View mIncognito;
         ImageView mIconView;
         ImageView mLock;
@@ -297,7 +303,7 @@
             mTabData = tab;
             setGravity(Gravity.CENTER_VERTICAL);
             setOrientation(LinearLayout.HORIZONTAL);
-            setPadding(0, 0, mTabPadding, 0);
+            setPadding(mTabPadding, 0, 0, 0);
             LayoutInflater inflater = LayoutInflater.from(getContext());
             mTabContent = inflater.inflate(R.layout.tab_title, this, true);
             mTitle = (TextView) mTabContent.findViewById(R.id.title);
@@ -306,12 +312,17 @@
             mClose = (ImageView) mTabContent.findViewById(R.id.close);
             mClose.setOnClickListener(this);
             mIncognito = mTabContent.findViewById(R.id.incognito);
+            mIndicator = mTabContent.findViewById(R.id.chevron);
             mSelected = false;
             mInLoad = false;
             // update the status
             updateFromData();
         }
 
+        void showIndicator(boolean show) {
+            mIndicator.setVisibility(show ? View.VISIBLE : View.GONE);
+        }
+
         @Override
         public void onClick(View v) {
             if (v == mClose) {
@@ -497,7 +508,7 @@
             tvd.setProgress(tvd.mProgress);
             // update the scroll state
             WebView webview = tab.getWebView();
-            onScroll(webview.getVisibleTitleHeight() > 0);
+            onScroll(webview.getVisibleTitleHeight());
         }
     }
 
