diff --git a/src/com/android/browser/TitleBarXLarge.java b/src/com/android/browser/TitleBarXLarge.java
index 2fd9d3d..0dcece6 100644
--- a/src/com/android/browser/TitleBarXLarge.java
+++ b/src/com/android/browser/TitleBarXLarge.java
@@ -133,7 +133,7 @@
         mUrlInput.setOnFocusChangeListener(this);
         mUrlInput.setSelectAllOnFocus(true);
         mUrlInput.addTextChangedListener(this);
-        setUrlMode(false);
+        setEditMode(false);
     }
 
     void updateNavigationState(Tab tab) {
@@ -187,7 +187,11 @@
         if (!mEditable && hasFocus) {
             mUi.editUrl(false);
         } else {
-            setUrlMode(hasFocus);
+            if (hasFocus) {
+                setEditMode(hasFocus);
+            } else {
+                mUrlInput.stopEditing();
+            }
         }
         mUrlContainer.setBackgroundDrawable(hasFocus
                 ? mFocusDrawable : mUnfocusDrawable);
@@ -266,7 +270,7 @@
     private void clearOrClose() {
         if (TextUtils.isEmpty(mUrlInput.getText())) {
             // close
-            setUrlMode(false);
+            mUrlInput.stopEditing();
         } else {
             // clear
             mUrlInput.setText("");
@@ -307,15 +311,16 @@
 
     @Override
     public void onDismiss() {
-        Tab currentTab = mUi.getActiveTab();
-        if (currentTab != null && currentTab.getWebView() != null) {
-            currentTab.getWebView().requestFocus();
-        }
+        final Tab currentTab = mUi.getActiveTab();
         mUi.hideFakeTitleBar();
-        // if top != null current must be set
-        if ((currentTab != null) && !mInVoiceMode) {
-            setDisplayTitle(currentTab.getUrl());
-        }
+        post(new Runnable() {
+            public void run() {
+                TitleBarXLarge.this.clearFocus();
+                if ((currentTab != null) && !mInVoiceMode) {
+                    setDisplayTitle(currentTab.getUrl());
+                }
+            }
+        });
     }
 
     /**
@@ -330,8 +335,8 @@
         }
     }
 
-    void setUrlMode(boolean focused) {
-        if (focused) {
+    void setEditMode(boolean edit) {
+        if (edit) {
             mUrlInput.setDropDownWidth(mUrlContainer.getWidth());
             mUrlInput.setDropDownHorizontalOffset(-mUrlInput.getLeft());
             mSearchButton.setVisibility(View.GONE);
@@ -343,9 +348,6 @@
             mWebIcon.setImageResource(R.drawable.ic_search_holo_dark);
             updateSearchMode();
         } else {
-            if (mUrlInput.hasFocus()) {
-                mUrlInput.clearFocus();
-            }
             mGoButton.setVisibility(View.GONE);
             mVoiceSearch.setVisibility(View.GONE);
             mStar.setVisibility(View.VISIBLE);
@@ -454,4 +456,5 @@
     void setIncognitoMode(boolean incognito) {
         mUrlInput.setIncognitoMode(incognito);
     }
+
 }
diff --git a/src/com/android/browser/UrlInputView.java b/src/com/android/browser/UrlInputView.java
index 3e49c06..23e412d 100644
--- a/src/com/android/browser/UrlInputView.java
+++ b/src/com/android/browser/UrlInputView.java
@@ -166,14 +166,16 @@
                 performFiltering(getText().toString(), 0);
                 showDropDown();
             }
-        } else {
-            finishInput(null, null, null);
         }
         if (mWrappedFocusListener != null) {
             mWrappedFocusListener.onFocusChange(v, hasFocus);
         }
     }
 
+    void stopEditing() {
+        finishInput(null, null, null);
+    }
+
     public void setUrlInputListener(UrlInputListener listener) {
         mListener = listener;
     }
diff --git a/src/com/android/browser/XLargeUi.java b/src/com/android/browser/XLargeUi.java
index 2aaa029..0fa38cf 100644
--- a/src/com/android/browser/XLargeUi.java
+++ b/src/com/android/browser/XLargeUi.java
@@ -304,7 +304,7 @@
     @Override
     protected void hideFakeTitleBar() {
         if (isFakeTitleBarShowing()) {
-            mFakeTitleBar.setUrlMode(false);
+            mFakeTitleBar.setEditMode(false);
             mContentView.removeView(mFakeTitleBar);
             mTabBar.onHideTitleBar();
         }
@@ -417,7 +417,8 @@
                     return true;
                 }
         }
-        if (event.isPrintingKey() && !mFakeTitleBar.isEditingUrl()) {
+        boolean ctrl = event.hasModifiers(KeyEvent.META_CTRL_ON);
+        if (!ctrl && event.isPrintingKey() && !mFakeTitleBar.isEditingUrl()) {
             editUrl(true);
             return mContentView.dispatchKeyEvent(event);
         }
