diff --git a/src/com/android/browser/SuggestionsAdapter.java b/src/com/android/browser/SuggestionsAdapter.java
index 6a9111f..ecdaa15 100644
--- a/src/com/android/browser/SuggestionsAdapter.java
+++ b/src/com/android/browser/SuggestionsAdapter.java
@@ -70,7 +70,6 @@
     final int mLinesLandscape;
     final Object mResultsLock = new Object();
     List<String> mVoiceResults;
-    boolean mReverseResults;
     boolean mIncognitoMode;
 
     interface CompletionListener {
@@ -137,9 +136,6 @@
 
     @Override
     public SuggestItem getItem(int position) {
-        if (mReverseResults) {
-            position = (getCount() - 1) - position;
-        }
         if (mVoiceResults != null) {
             SuggestItem item = new SuggestItem(mVoiceResults.get(position),
                     null, TYPE_VOICE_SEARCH);
@@ -152,10 +148,6 @@
         return mMixedResults.items.get(position);
     }
 
-    public void setReverseResults(boolean reverse) {
-        mReverseResults = reverse;
-    }
-
     @Override
     public long getItemId(int position) {
         return position;
diff --git a/src/com/android/browser/TitleBarXLarge.java b/src/com/android/browser/TitleBarXLarge.java
index be5e90f..ccbb38d 100644
--- a/src/com/android/browser/TitleBarXLarge.java
+++ b/src/com/android/browser/TitleBarXLarge.java
@@ -211,20 +211,33 @@
                 default:
                     throw new IllegalStateException();
             }
-            if (animate) {
-                mAutoLogin.startAnimation(AnimationUtils.loadAnimation(
-                        getContext(), R.anim.autologin_enter));
+            if (mUseQuickControls) {
+                mUi.showTitleBar();
+            } else {
+                if (animate) {
+                    mAutoLogin.startAnimation(AnimationUtils.loadAnimation(
+                            getContext(), R.anim.autologin_enter));
+                }
             }
         } else {
             mAutoLoginHandler = null;
-            if (animate) {
-                hideAutoLogin();
-            } else if (mAutoLogin.getAnimation() == null) {
+            if (mUseQuickControls) {
+                mUi.hideTitleBar();
                 mAutoLogin.setVisibility(View.GONE);
+            } else {
+                if (animate) {
+                    hideAutoLogin();
+                } else if (mAutoLogin.getAnimation() == null) {
+                    mAutoLogin.setVisibility(View.GONE);
+                }
             }
         }
     }
 
+    boolean inAutoLogin() {
+        return mAutoLoginHandler != null;
+    }
+
     private ViewGroup.LayoutParams makeLayoutParams() {
         if (mUseQuickControls) {
             return new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,
@@ -247,12 +260,11 @@
 
     void setUseQuickControls(boolean useQuickControls) {
         mUseQuickControls = useQuickControls;
-        mUrlInput.setUseQuickControls(mUseQuickControls);
         setLayoutParams(makeLayoutParams());
     }
 
     void setShowProgressOnly(boolean progress) {
-        if (progress) {
+        if (progress && !inAutoLogin()) {
             mContainer.setVisibility(View.GONE);
         } else {
             mContainer.setVisibility(View.VISIBLE);
diff --git a/src/com/android/browser/UrlInputView.java b/src/com/android/browser/UrlInputView.java
index b7f2bff..350d772 100644
--- a/src/com/android/browser/UrlInputView.java
+++ b/src/com/android/browser/UrlInputView.java
@@ -127,10 +127,6 @@
         setCustomSelectionActionModeCallback(urlSelectionMode);
     }
 
-    void setUseQuickControls(boolean useQuickControls) {
-        mAdapter.setReverseResults(useQuickControls);
-    }
-
     void setContainer(View container) {
         mContainer = container;
     }
diff --git a/src/com/android/browser/XLargeUi.java b/src/com/android/browser/XLargeUi.java
index 02533b0..13a0557 100644
--- a/src/com/android/browser/XLargeUi.java
+++ b/src/com/android/browser/XLargeUi.java
@@ -107,17 +107,16 @@
             if ((tab != null) && (tab.getWebView() != null)) {
                 tab.getWebView().setEmbeddedTitleBar(null);
             }
-            setTitleGravity(Gravity.BOTTOM);
         } else {
             mActivity.getActionBar().show();
             if (mPieControl != null) {
                 mPieControl.removeFromContainer(mContentView);
             }
-            setTitleGravity(Gravity.TOP);
             WebView web = mTabControl.getCurrentWebView();
             if (web != null) {
                 web.setEmbeddedTitleBar(mTitleBar);
             }
+            setTitleGravity(Gravity.NO_GRAVITY);
         }
         mTabBar.setUseQuickControls(mUseQuickControls);
     }
@@ -190,11 +189,10 @@
         if (tab.inForeground()) {
             mTitleBar.setProgress(progress);
             if (progress == 100) {
-                if (!mTitleBar.isEditingUrl()) {
+                if (!mTitleBar.isEditingUrl() && !mTitleBar.inAutoLogin()) {
                     hideTitleBar();
                     if (mUseQuickControls) {
                         mTitleBar.setShowProgressOnly(false);
-                        setTitleGravity(Gravity.BOTTOM);
                     }
                 }
             } else {
@@ -450,9 +448,6 @@
             // if the page is loading, show it again
             if (mUseQuickControls) {
                 mTitleBar.setShowProgressOnly(true);
-                if (!isTitleBarShowing()) {
-                    setTitleGravity(Gravity.TOP);
-                }
             }
             showTitleBar();
         }
