diff --git a/res/drawable-mdpi/ic_chevron.png b/res/drawable-mdpi/ic_chevron.png
new file mode 100644
index 0000000..6804d75
--- /dev/null
+++ b/res/drawable-mdpi/ic_chevron.png
Binary files differ
diff --git a/res/layout/tab_title.xml b/res/layout/tab_title.xml
index e4a4e58..ce3f987 100644
--- a/res/layout/tab_title.xml
+++ b/res/layout/tab_title.xml
@@ -17,10 +17,18 @@
     android:gravity="center_vertical"
     android:orientation="horizontal">
     <ImageView
+        android:id="@+id/chevron"
+        android:layout_width="16dip"
+        android:layout_height="16dip"
+        android:layout_marginRight="4dip"
+        android:gravity="center_vertical"
+        android:src="@drawable/ic_chevron"
+        android:visibility="gone" />
+    <ImageView
         android:id="@+id/incognito"
         android:layout_width="16dip"
         android:layout_height="16dip"
-        android:layout_marginLeft="3dip"
+        android:layout_marginRight="16dip"
         android:gravity="center_vertical"
         android:src="@drawable/fav_incognito"
         android:visibility="gone" />
@@ -28,19 +36,19 @@
         android:id="@+id/favicon"
         android:layout_width="20dip"
         android:layout_height="20dip"
-        android:layout_marginLeft="16dip" />
+        android:layout_marginRight="16dip" />
     <ImageView
         android:id="@+id/lock"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginLeft="16dip"
+        android:layout_marginRight="16dip"
         android:visibility="gone" />
     <TextView
         android:id="@+id/title"
         android:layout_height="match_parent"
         android:layout_width="0dip"
         android:layout_weight="1.0"
-        android:layout_marginLeft="16dip"
+        android:layout_marginRight="16dip"
         android:textAppearance="?android:attr/textAppearanceSmall"
         android:textColor="@color/white"
         android:gravity="center_vertical"
@@ -54,6 +62,6 @@
         android:background="@drawable/browserbarbutton"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginLeft="16dip"
+        android:layout_marginRight="16dip"
         android:src="@drawable/ic_tab_close" />
 </merge>
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());
         }
     }
 
