diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index 7b7e25f..01c7da6 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -224,6 +224,14 @@
     }
 
     @Override
+    public void onProgressChanged(Tab tab) {
+        int progress = tab.getLoadProgress();
+        if (tab.inForeground()) {
+            mTitleBar.setProgress(progress);
+        }
+    }
+
+    @Override
     public void bookmarkedStatusHasChanged(Tab tab) {
         if (tab.inForeground()) {
             boolean isBookmark = tab.isBookmarkedSite();
@@ -270,6 +278,7 @@
             if (mUseQuickControls) {
                 mPieControl.forceToTop(mContentView);
                 web.setTitleBar(null);
+                mTitleBar.hide();
             } else {
                 web.setTitleBar(mTitleBar);
                 mTitleBar.onScrollChanged();
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
index b269586..ed63daa 100644
--- a/src/com/android/browser/PhoneUi.java
+++ b/src/com/android/browser/PhoneUi.java
@@ -103,10 +103,7 @@
 
     @Override
     public void onProgressChanged(Tab tab) {
-        if (tab.inForeground()) {
-            int progress = tab.getLoadProgress();
-            mTitleBar.setProgress(progress);
-        }
+        super.onProgressChanged(tab);
         if (mNavScreen == null && getTitleBar().getHeight() > 0) {
             mHandler.sendEmptyMessage(MSG_INIT_NAVSCREEN);
         }
@@ -145,6 +142,7 @@
         if (mUseQuickControls) {
             mPieControl.forceToTop(mContentView);
             view.setTitleBar(null);
+            mTitleBar.setShowProgressOnly(true);
         } else {
             view.setTitleBar(mTitleBar);
         }
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index cbda456..73f5b9e 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -1958,12 +1958,6 @@
         return mInPageLoad;
     }
 
-    // force mInLoad to be false. This should only be called before closing the
-    // tab to ensure BrowserActivity's pauseWebViewTimers() is called correctly.
-    void clearInPageLoad() {
-        mInPageLoad = false;
-    }
-
     /**
      * @return The Bundle with the tab's state if it can be saved, otherwise null
      */
diff --git a/src/com/android/browser/TitleBar.java b/src/com/android/browser/TitleBar.java
index f7ca0d4..9ec972b 100644
--- a/src/com/android/browser/TitleBar.java
+++ b/src/com/android/browser/TitleBar.java
@@ -228,7 +228,7 @@
             // check if needs to be hidden
             if (!isEditingUrl() && !wantsToBeVisible()) {
                 if (mUseQuickControls) {
-                    setShowProgressOnly(false);
+                    hide();
                 } else {
                     mBaseUi.showTitleBarForDuration();
                 }
@@ -241,10 +241,10 @@
             }
             mProgress.setProgress(newProgress * PageProgressView.MAX_PROGRESS
                     / PROGRESS_MAX);
+            if (mUseQuickControls && !isEditingUrl()) {
+                setShowProgressOnly(true);
+            }
             if (!mShowing) {
-                if (mUseQuickControls && !isEditingUrl()) {
-                    setShowProgressOnly(true);
-                }
                 show();
             }
         }
diff --git a/src/com/android/browser/XLargeUi.java b/src/com/android/browser/XLargeUi.java
index 1969978..d7f1559 100644
--- a/src/com/android/browser/XLargeUi.java
+++ b/src/com/android/browser/XLargeUi.java
@@ -135,21 +135,6 @@
     // WebView callbacks
 
     @Override
-    public void onProgressChanged(Tab tab) {
-        int progress = tab.getLoadProgress();
-        if (tab.inForeground()) {
-            mTitleBar.setProgress(progress);
-            if (mUseQuickControls) {
-                if (progress == 100) {
-                    mTitleBar.setShowProgressOnly(false);
-                } else if (!mTitleBar.isEditingUrl()) {
-                    mTitleBar.setShowProgressOnly(true);
-                }
-            }
-        }
-    }
-
-    @Override
     public void addTab(Tab tab) {
         mTabBar.onNewTab(tab);
     }
