diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index b20e661..f7d7a3c 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -16,6 +16,7 @@
 
 package com.android.browser;
 
+import com.android.browser.BrowserWebView.ScrollListener;
 import com.android.browser.Tab.LockIcon;
 import com.android.internal.view.menu.MenuBuilder;
 
@@ -32,12 +33,15 @@
 import android.graphics.drawable.LayerDrawable;
 import android.graphics.drawable.PaintDrawable;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.View;
+import android.view.ViewConfiguration;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.view.ViewGroup.LayoutParams;
@@ -55,7 +59,7 @@
 /**
  * UI interface definitions
  */
-public abstract class BaseUi implements UI, WebViewFactory {
+public abstract class BaseUi implements UI, WebViewFactory, ScrollListener {
 
     private static final String LOGTAG = "BaseUi";
 
@@ -70,6 +74,9 @@
         ViewGroup.LayoutParams.MATCH_PARENT,
         Gravity.CENTER);
 
+    private static final int MSG_HIDE_TITLEBAR = 1;
+    private static final int HIDE_TITLEBAR_DELAY = 1500; // in ms
+
     Activity mActivity;
     UiController mUiController;
     TabControl mTabControl;
@@ -94,6 +101,8 @@
 
     private Toast mStopToast;
 
+    private int mLastScrollY;
+    private int mTitlebarScrollTriggerSlop;
 
     // the default <video> poster
     private Bitmap mDefaultVideoPoster;
@@ -126,6 +135,12 @@
         setFullscreen(BrowserSettings.getInstance().useFullscreen());
         mGenericFavicon = res.getDrawable(
                 R.drawable.app_web_browser_sm);
+        ViewConfiguration config = ViewConfiguration.get(browser);
+        mTitlebarScrollTriggerSlop = Math.max(
+                config.getScaledOverflingDistance(),
+                config.getScaledOverscrollDistance());
+        mTitlebarScrollTriggerSlop = Math.max(mTitlebarScrollTriggerSlop,
+                config.getScaledTouchSlop());
     }
 
     @Override
@@ -251,17 +266,12 @@
 
     @Override
     public void setActiveTab(final Tab tab) {
-        setActiveTab(tab, true);
-    }
-
-    void setActiveTab(Tab tab, boolean needsAttaching) {
+        mHandler.removeMessages(MSG_HIDE_TITLEBAR);
         if ((tab != mActiveTab) && (mActiveTab != null)) {
             removeTabFromContentView(mActiveTab);
         }
         mActiveTab = tab;
-        if (needsAttaching) {
-            attachTabToContentView(tab);
-        }
+        attachTabToContentView(tab);
         setShouldShowErrorConsole(tab, mUiController.shouldShowErrorConsole());
         onTabDataChanged(tab);
         onProgressChanged(tab);
@@ -462,6 +472,10 @@
         return getTitleBar().isShowing();
     }
 
+    public boolean isEditingUrl() {
+        return getTitleBar().isEditingUrl();
+    }
+
     protected abstract TitleBarBase getTitleBar();
 
     protected void setTitleGravity(int gravity) {
@@ -507,7 +521,6 @@
         dismissIME();
         hideTitleBar();
         if (mActiveTab != null) {
-            WebView web = mActiveTab.getWebView();
             mActiveTab.putInBackground();
         }
         mComboView.setAlpha(0f);
@@ -826,4 +839,52 @@
         return d;
     }
 
+    public boolean isLoading() {
+        return mActiveTab != null ? mActiveTab.inPageLoad() : false;
+    }
+
+    /**
+     * Suggest to the UI that the title bar can be hidden. The UI will then
+     * decide whether or not to hide based off a number of factors, such
+     * as if the user is editing the URL bar or if the page is loading
+     */
+    public void suggestHideTitleBar() {
+        if (!isLoading() && !isEditingUrl()) {
+            hideTitleBar();
+        }
+    }
+
+    @Override
+    public void onScroll(int visibleTitleHeight, boolean userInitiated) {
+        WebView view = mActiveTab != null ? mActiveTab.getWebView() : null;
+        if (view == null || !userInitiated) {
+            return;
+        }
+        int scrollY = view.getScrollY();
+        if (scrollY < (mLastScrollY - mTitlebarScrollTriggerSlop)) {
+            mLastScrollY = scrollY;
+            if (visibleTitleHeight == 0) {
+                mHandler.removeMessages(MSG_HIDE_TITLEBAR);
+                showTitleBar();
+                Message msg = Message.obtain(mHandler, MSG_HIDE_TITLEBAR);
+                mHandler.sendMessageDelayed(msg, HIDE_TITLEBAR_DELAY);
+            } else if (visibleTitleHeight == getTitleBar().getEmbeddedHeight()
+                    && mHandler.hasMessages(MSG_HIDE_TITLEBAR)) {
+                mHandler.removeMessages(MSG_HIDE_TITLEBAR);
+                hideTitleBar();
+            }
+        } else if (scrollY > mLastScrollY) {
+            mLastScrollY = scrollY;
+        }
+    }
+
+    private Handler mHandler = new Handler() {
+
+        @Override
+        public void handleMessage(Message msg) {
+            if (msg.what == MSG_HIDE_TITLEBAR) {
+                suggestHideTitleBar();
+            }
+        }
+    };
 }
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
index d7f84b5..d0b0f77 100644
--- a/src/com/android/browser/PhoneUi.java
+++ b/src/com/android/browser/PhoneUi.java
@@ -33,7 +33,6 @@
 public class PhoneUi extends BaseUi {
 
     private static final String LOGTAG = "PhoneUi";
-    private static final float NAV_TAB_SCALE = 0.75f;
 
     private TitleBarPhone mTitleBar;
     private ActiveTabsPage mActiveTabsPage;
@@ -134,7 +133,7 @@
             mTitleBar.setProgress(progress);
             if (progress == 100) {
                 if (!mOptionsMenuOpen || !mExtendedMenuOpen) {
-                    hideTitleBar();
+                    suggestHideTitleBar();
                     if (mUseQuickControls) {
                         mTitleBar.setShowProgressOnly(false);
                     }
@@ -154,12 +153,7 @@
     @Override
     public void setActiveTab(final Tab tab) {
         captureTab(mActiveTab);
-        super.setActiveTab(tab, true);
-        setActiveTab(tab, true);
-    }
-
-    @Override
-    void setActiveTab(Tab tab, boolean needsAttaching) {
+        super.setActiveTab(tab);
         BrowserWebView view = (BrowserWebView) tab.getWebView();
         // TabControl.setCurrentTab has been called before this,
         // so the tab is guaranteed to have a webview
@@ -176,6 +170,7 @@
             if (mTitleBar.getParent() == null) {
                 view.setEmbeddedTitleBar(mTitleBar);
             }
+            view.setScrollListener(this);
         }
         if (tab.isInVoiceSearchMode()) {
             showVoiceTitleBar(tab.getVoiceDisplayTitle(), tab.getVoiceSearchResults());
diff --git a/src/com/android/browser/TabBar.java b/src/com/android/browser/TabBar.java
index 6e84a40..1ea6071 100644
--- a/src/com/android/browser/TabBar.java
+++ b/src/com/android/browser/TabBar.java
@@ -111,7 +111,6 @@
         mInactiveDrawable = res.getDrawable(R.drawable.browsertab_inactive);
 
         mTabMap = new HashMap<Tab, TabView>();
-        Resources resources = activity.getResources();
         LayoutInflater factory = LayoutInflater.from(activity);
         factory.inflate(R.layout.tab_bar, this);
         setPadding(0, (int) res.getDimension(R.dimen.tab_padding_top), 0, 0);
diff --git a/src/com/android/browser/TitleBarBase.java b/src/com/android/browser/TitleBarBase.java
index b95711e..e2c3432 100644
--- a/src/com/android/browser/TitleBarBase.java
+++ b/src/com/android/browser/TitleBarBase.java
@@ -209,6 +209,7 @@
         @Override
         public void onAnimationStart(Animator animation) {
             mWasCanceled = false;
+            mUrlInput.setEnabled(false);
         }
 
         @Override
@@ -221,6 +222,7 @@
                 setTranslationY(0);
             }
             mBaseUi.setTitleGravity(Gravity.NO_GRAVITY);
+            mUrlInput.setEnabled(true);
         }
 
         @Override
diff --git a/src/com/android/browser/XLargeUi.java b/src/com/android/browser/XLargeUi.java
index 25cdbd9..84ad6ea 100644
--- a/src/com/android/browser/XLargeUi.java
+++ b/src/com/android/browser/XLargeUi.java
@@ -35,7 +35,7 @@
 /**
  * Ui for xlarge screen sizes
  */
-public class XLargeUi extends BaseUi implements ScrollListener {
+public class XLargeUi extends BaseUi {
 
     private static final String LOGTAG = "XLargeUi";
 
@@ -153,6 +153,7 @@
 
     @Override
     public void onScroll(int visibleTitleHeight, boolean userInitiated) {
+        super.onScroll(visibleTitleHeight, userInitiated);
         mTabBar.onScroll(visibleTitleHeight, userInitiated);
     }
 
@@ -192,13 +193,7 @@
                 captureTab(mActiveTab);
             }
         }
-        super.setActiveTab(tab, true);
-        setActiveTab(tab, true);
-        mTitleBar.setSkipTitleBarAnimations(false);
-    }
-
-    @Override
-    void setActiveTab(Tab tab, boolean needsAttaching) {
+        super.setActiveTab(tab);
         BrowserWebView view = (BrowserWebView) tab.getWebView();
         // TabControl.setCurrentTab has been called before this,
         // so the tab is guaranteed to have a webview
@@ -226,6 +221,7 @@
         }
         updateLockIconToLatest(tab);
         tab.getTopWindow().requestFocus();
+        mTitleBar.setSkipTitleBarAnimations(false);
     }
 
     @Override
@@ -282,10 +278,6 @@
         }
     }
 
-    public boolean isEditingUrl() {
-        return mTitleBar.isEditingUrl();
-    }
-
     @Override
     protected TitleBarBase getTitleBar() {
         return mTitleBar;
