diff --git a/src/com/android/browser/TitleBarXLarge.java b/src/com/android/browser/TitleBarXLarge.java
index f1c6c6b..496246c 100644
--- a/src/com/android/browser/TitleBarXLarge.java
+++ b/src/com/android/browser/TitleBarXLarge.java
@@ -186,6 +186,11 @@
      * @param clearInput clear the input field
      */
     void onEditUrl(boolean clearInput) {
+        // editing takes preference of progress
+        mContainer.setVisibility(View.VISIBLE);
+        if (mUseQuickControls) {
+            mProgressView.setVisibility(View.GONE);
+        }
         if (!mUrlInput.hasFocus()) {
             mUrlInput.requestFocus();
         }
@@ -341,16 +346,21 @@
      */
     @Override
     void setProgress(int newProgress) {
+        boolean blockvisuals = mUseQuickControls && isEditingUrl();
         if (newProgress >= PROGRESS_MAX) {
-            mProgressView.setProgress(PageProgressView.MAX_PROGRESS);
-            mProgressView.setVisibility(View.GONE);
+            if (!blockvisuals) {
+                mProgressView.setProgress(PageProgressView.MAX_PROGRESS);
+                mProgressView.setVisibility(View.GONE);
+                mStopButton.setImageDrawable(mReloadDrawable);
+            }
             mInLoad = false;
-            mStopButton.setImageDrawable(mReloadDrawable);
         } else {
             if (!mInLoad) {
-                mProgressView.setVisibility(View.VISIBLE);
+                if (!blockvisuals) {
+                    mProgressView.setVisibility(View.VISIBLE);
+                    mStopButton.setImageDrawable(mStopDrawable);
+                }
                 mInLoad = true;
-                mStopButton.setImageDrawable(mStopDrawable);
             }
             mProgressView.setProgress(newProgress * PageProgressView.MAX_PROGRESS
                     / PROGRESS_MAX);
diff --git a/src/com/android/browser/XLargeUi.java b/src/com/android/browser/XLargeUi.java
index 7f9baa7..11642af 100644
--- a/src/com/android/browser/XLargeUi.java
+++ b/src/com/android/browser/XLargeUi.java
@@ -174,13 +174,15 @@
         if (tab.inForeground()) {
             mFakeTitleBar.setProgress(progress);
             if (progress == 100) {
-                hideFakeTitleBar();
-                if (mUseQuickControls) {
-                    mFakeTitleBar.setShowProgressOnly(false);
-                    setFakeTitleBarGravity(Gravity.BOTTOM);
+                if (!mFakeTitleBar.isEditingUrl()) {
+                    hideFakeTitleBar();
+                    if (mUseQuickControls) {
+                        mFakeTitleBar.setShowProgressOnly(false);
+                        setFakeTitleBarGravity(Gravity.BOTTOM);
+                    }
                 }
             } else {
-                if (mUseQuickControls) {
+                if (mUseQuickControls && !mFakeTitleBar.isEditingUrl()) {
                     mFakeTitleBar.setShowProgressOnly(true);
                     if (!isFakeTitleBarShowing()) {
                         setFakeTitleBarGravity(Gravity.TOP);
@@ -269,6 +271,8 @@
     }
 
     void showFakeTitleBarAndEdit() {
+        mFakeTitleBar.setShowProgressOnly(false);
+        setFakeTitleBarGravity(Gravity.BOTTOM);
         showFakeTitleBar();
         mFakeTitleBar.onEditUrl(false);
     }
@@ -306,7 +310,7 @@
 
     @Override
     public void onActionModeStarted(ActionMode mode) {
-        if (mFakeTitleBar.isEditingUrl()) {
+        if (!mFakeTitleBar.isEditingUrl()) {
             // hide the fake title bar when CAB is shown
             hideFakeTitleBar();
         }
