diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index ddc5ad2..4648de7 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -830,17 +830,43 @@
         setFullscreen(enabled);
         FrameLayout main = (FrameLayout) mActivity.getWindow()
             .getDecorView().findViewById(android.R.id.content);
-
+        boolean hide_title_on_scroll =
+            mActivity.getResources().getBoolean(R.bool.hide_title_on_scroll);
         LinearLayout titleBarParent = (LinearLayout) main.findViewById(R.id.vertical_layout);
         if (titleBarParent != null) {
             if (enabled) {
-                titleBarParent.removeView(mFixedTitlebarContainer);
+                if (!hide_title_on_scroll) {
+                    titleBarParent.removeView(mFixedTitlebarContainer);
+                }
+                else {
+                    mContentView.removeView(mTitleBar);
+                }
             } else {
-                titleBarParent.addView(mFixedTitlebarContainer, 1);
+                if (!hide_title_on_scroll) {
+                    titleBarParent.addView(mFixedTitlebarContainer, 1);
+                }
+                else {
+                    mContentView.addView(mTitleBar,
+                        new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,
+                        LayoutParams.WRAP_CONTENT));
+                }
             }
         }
     }
 
+    public void transalateTitleBar(float topControlsOffsetYPix) {
+        if (mTitleBar != null) {
+            mTitleBar.bringToFront();
+            if (topControlsOffsetYPix != 0.0) {
+                mTitleBar.setEnabled(false);
+            } else {
+                mTitleBar.setEnabled(true);
+            }
+            mTitleBar.setTranslationY(topControlsOffsetYPix);
+
+        }
+    }
+
     public Drawable getFaviconDrawable(Bitmap icon) {
         Drawable[] array = new Drawable[3];
         array[0] = new PaintDrawable(Color.BLACK);
@@ -944,14 +970,22 @@
 
     @Override
     public void onActionModeStarted(ActionMode mode) {
-        int fixedTbarHeight = mTitleBar.isFixed() ? mTitleBar.calculateEmbeddedHeight() : 0;
-        mFixedTitlebarContainer.setY(fixedTbarHeight);
-        setContentViewMarginTop(fixedTbarHeight);
+        boolean hide_title_on_scroll =
+            mActivity.getResources().getBoolean(R.bool.hide_title_on_scroll);
+        if (!hide_title_on_scroll) {
+            int fixedTbarHeight = mTitleBar.isFixed() ? mTitleBar.calculateEmbeddedHeight() : 0;
+            mFixedTitlebarContainer.setY(fixedTbarHeight);
+            setContentViewMarginTop(fixedTbarHeight);
+        }
     }
 
     @Override
     public void onActionModeFinished(boolean inLoad) {
-        mFixedTitlebarContainer.setY(0);
-        setContentViewMarginTop(0);
+        boolean hide_title_on_scroll =
+            mActivity.getResources().getBoolean(R.bool.hide_title_on_scroll);
+        if (!hide_title_on_scroll) {
+            mFixedTitlebarContainer.setY(0);
+            setContentViewMarginTop(0);
+        }
     }
 }
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
index 7ae9bf7..898acf5 100644
--- a/src/com/android/browser/PhoneUi.java
+++ b/src/com/android/browser/PhoneUi.java
@@ -25,7 +25,6 @@
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.Matrix;
-import android.os.Handler;
 import android.os.Message;
 import android.util.Log;
 import android.util.TypedValue;
@@ -58,8 +57,6 @@
     boolean mAnimating;
     boolean mShowNav = false;
 
-    static final int POST_DELAY = 300;
-
     /**
      * @param browser
      * @param controller
@@ -240,20 +237,15 @@
         super.onActionModeStarted(mode);
         if (!isEditingUrl()) {
             hideTitleBar();
+        } else {
+            mTitleBar.setTranslationY(mActionBarHeight);
         }
     }
 
     @Override
     public void onActionModeFinished(boolean inLoad) {
         super.onActionModeFinished(inLoad);
-        mTitleBar.animate().translationY(0);
-        stopEditingUrl();
-        Handler handler = new Handler();
-        handler.postDelayed(new Runnable() {
-            public void run() {
-                mNavigationBar.onStateChanged(StateListener.STATE_NORMAL);
-            }}, POST_DELAY);
-
+        mTitleBar.setTranslationY(0);
         if (inLoad) {
             if (mUseQuickControls) {
                 mTitleBar.setShowProgressOnly(true);
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index 2b91c96..d0a27b9 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -754,6 +754,18 @@
         }
 
         @Override
+        public void onOffsetsForFullscreenChanged(
+            float topControlsOffsetYPix, float contentOffsetYPix, float overdrawBottomHeightPix) {
+            boolean hide_title_on_scroll =
+                mContext.getResources().getBoolean(R.bool.hide_title_on_scroll);
+            if (mWebViewController instanceof Controller && hide_title_on_scroll) {
+                Controller controller = (Controller)mWebViewController;
+                mMainView.setTranslationY(contentOffsetYPix);
+                controller.getUi().transalateTitleBar(topControlsOffsetYPix);
+            }
+        }
+
+        @Override
         public boolean isTabFullScreen() {
             if (mWebViewController instanceof Controller) {
                 Controller controller = (Controller)mWebViewController;
diff --git a/src/com/android/browser/TitleBar.java b/src/com/android/browser/TitleBar.java
index 7438d26..9963bc4 100644
--- a/src/com/android/browser/TitleBar.java
+++ b/src/com/android/browser/TitleBar.java
@@ -102,7 +102,9 @@
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-        if (mIsFixedTitleBar) {
+        boolean hide_title_on_scroll =
+          getContext().getResources().getBoolean(R.bool.hide_title_on_scroll);
+        if (mIsFixedTitleBar && !hide_title_on_scroll) {
             int margin = getMeasuredHeight() - calculateEmbeddedHeight();
             if (!isEditingUrl())
                 mBaseUi.setContentViewMarginTop(-margin);
@@ -114,6 +116,8 @@
     private void setFixedTitleBar() {
         boolean isFixed = !mUseQuickControls
                 && !getContext().getResources().getBoolean(R.bool.hide_title);
+        boolean hide_title_on_scroll =
+            getContext().getResources().getBoolean(R.bool.hide_title_on_scroll);
         isFixed |= mAccessibilityManager.isEnabled();
         // If getParent() returns null, we are initializing
         ViewGroup parent = (ViewGroup)getParent();
@@ -125,7 +129,7 @@
         if (parent != null) {
             parent.removeView(this);
         }
-        if (mIsFixedTitleBar) {
+        if (mIsFixedTitleBar && !hide_title_on_scroll) {
             mBaseUi.addFixedTitleBar(this);
         } else {
             mContentView.addView(this, makeLayoutParams());
diff --git a/src/com/android/browser/UI.java b/src/com/android/browser/UI.java
index 342fbdc..eb7d023 100644
--- a/src/com/android/browser/UI.java
+++ b/src/com/android/browser/UI.java
@@ -144,6 +144,8 @@
 
     void setUseQuickControls(boolean enabled);
 
+    void transalateTitleBar(float topControlsOffsetYPix);
+
     public boolean shouldCaptureThumbnails();
 
     boolean blockFocusAnimations();
diff --git a/src/com/android/browser/UrlInputView.java b/src/com/android/browser/UrlInputView.java
index f0037a1..c8f2d40 100644
--- a/src/com/android/browser/UrlInputView.java
+++ b/src/com/android/browser/UrlInputView.java
@@ -71,7 +71,6 @@
 
     static final int POST_DELAY = 100;
     static final int URL_MAX_LENGTH = 2048;
-    static final int POST_DELAY_FOCUS = 300;
 
     static interface StateListener {
         static final int STATE_NORMAL = 0;
@@ -182,11 +181,11 @@
             state = StateListener.STATE_NORMAL;
         }
         final int s = state;
-        postDelayed(new Runnable() {
+        post(new Runnable() {
             public void run() {
                 changeState(s);
             }
-        }, POST_DELAY_FOCUS);
+        });
     }
 
     @Override
