diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index f7d7a3c..ad45958 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -857,13 +857,14 @@
     @Override
     public void onScroll(int visibleTitleHeight, boolean userInitiated) {
         WebView view = mActiveTab != null ? mActiveTab.getWebView() : null;
-        if (view == null || !userInitiated) {
+        if (view == null) {
             return;
         }
         int scrollY = view.getScrollY();
-        if (scrollY < (mLastScrollY - mTitlebarScrollTriggerSlop)) {
+        if (isTitleBarShowing()
+                || scrollY < (mLastScrollY - mTitlebarScrollTriggerSlop)) {
             mLastScrollY = scrollY;
-            if (visibleTitleHeight == 0) {
+            if (visibleTitleHeight == 0 && userInitiated) {
                 mHandler.removeMessages(MSG_HIDE_TITLEBAR);
                 showTitleBar();
                 Message msg = Message.obtain(mHandler, MSG_HIDE_TITLEBAR);
diff --git a/src/com/android/browser/TabBar.java b/src/com/android/browser/TabBar.java
index 1ea6071..8584afa 100644
--- a/src/com/android/browser/TabBar.java
+++ b/src/com/android/browser/TabBar.java
@@ -276,12 +276,9 @@
     public void onScroll(int visibleTitleHeight, boolean userInitiated) {
         if (mUseQuickControls) return;
         // isLoading is using the current tab, which initially might not be set yet
-        if (mTabControl.getCurrentTab() != null
-                && !isLoading()) {
-            if (visibleTitleHeight == 0) {
-                if (!showsTitleBarIndicator()
-                        && (!mUi.isEditingUrl() || userInitiated)) {
-                    mUi.hideTitleBar();
+        if (mTabControl.getCurrentTab() != null) {
+            if (visibleTitleHeight == 0 && !mUi.isTitleBarShowing()) {
+                if (!showsTitleBarIndicator()) {
                     showTitleBarIndicator(true);
                 }
             } else {
diff --git a/src/com/android/browser/TitleBarBase.java b/src/com/android/browser/TitleBarBase.java
index e2c3432..cf3a6ef 100644
--- a/src/com/android/browser/TitleBarBase.java
+++ b/src/com/android/browser/TitleBarBase.java
@@ -209,7 +209,6 @@
         @Override
         public void onAnimationStart(Animator animation) {
             mWasCanceled = false;
-            mUrlInput.setEnabled(false);
         }
 
         @Override
@@ -222,7 +221,6 @@
                 setTranslationY(0);
             }
             mBaseUi.setTitleGravity(Gravity.NO_GRAVITY);
-            mUrlInput.setEnabled(true);
         }
 
         @Override
@@ -462,6 +460,7 @@
             setFocusState(hasFocus);
         }
         if (hasFocus) {
+            mBaseUi.showTitleBar();
             mUrlInput.forceIme();
             if (mInVoiceMode) {
                 mUrlInput.forceFilter();
@@ -475,6 +474,7 @@
                     mUrlInput.setText(currentTab.getUrl(), false);
                 }
             }
+            mBaseUi.suggestHideTitleBar();
         }
         mUrlInput.clearNeedsUpdate();
     }
diff --git a/src/com/android/browser/TitleBarPhone.java b/src/com/android/browser/TitleBarPhone.java
index de5fb7f..1fcaf4d 100644
--- a/src/com/android/browser/TitleBarPhone.java
+++ b/src/com/android/browser/TitleBarPhone.java
@@ -147,9 +147,6 @@
             }
         }
         super.onFocusChange(v, hasFocus);
-        if (!hasFocus) {
-            mBaseUi.hideTitleBar();
-        }
     }
 
     @Override
diff --git a/src/com/android/browser/TitleBarXLarge.java b/src/com/android/browser/TitleBarXLarge.java
index 69f6949..3d4d2ec 100644
--- a/src/com/android/browser/TitleBarXLarge.java
+++ b/src/com/android/browser/TitleBarXLarge.java
@@ -123,36 +123,6 @@
     }
 
     @Override
-    public void onFocusChange(View view, boolean hasFocus) {
-        // if losing focus and not in touch mode, leave as is
-        if (hasFocus || view.isInTouchMode() || mUrlInput.needsUpdate()) {
-            setFocusState(hasFocus);
-            mUrlContainer.setBackgroundDrawable(hasFocus
-                    ? mFocusDrawable : mUnfocusDrawable);
-        }
-        if (hasFocus) {
-            mUrlInput.forceIme();
-            if (mInVoiceMode) {
-                mUrlInput.forceFilter();
-            }
-        } else if (!mUrlInput.needsUpdate()) {
-            mUrlInput.dismissDropDown();
-            mUrlInput.hideIME();
-            if (mUseQuickControls) {
-                mUi.hideTitleBar();
-            }
-
-            if (mUrlInput.getText().length() == 0) {
-                Tab currentTab = mUiController.getTabControl().getCurrentTab();
-                if (currentTab != null) {
-                    mUrlInput.setText(currentTab.getUrl(), false);
-                }
-            }
-        }
-        mUrlInput.clearNeedsUpdate();
-    }
-
-    @Override
     public void setCurrentUrlIsBookmark(boolean isBookmark) {
         mStar.setActivated(isBookmark);
     }
@@ -226,6 +196,8 @@
             }
             updateUrlIcon();
         }
+        mUrlContainer.setBackgroundDrawable(focus
+                ? mFocusDrawable : mUnfocusDrawable);
     }
 
     private void stopOrRefresh() {
