diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index 372f2a9..f92368e 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -558,7 +558,7 @@
     }
 
     @Override
-    public boolean showsWeb() {
+    public boolean isWebShowing() {
         return mCustomView == null;
     }
 
@@ -841,4 +841,10 @@
             }
         }
     };
+
+    @Override
+    public void showWeb(boolean animate) {
+        mUiController.hideCustomView();
+    }
+
 }
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 7c93e9f..8d8a2be 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -1177,6 +1177,7 @@
                 if (intent == null || resultCode != Activity.RESULT_OK) {
                     break;
                 }
+                mUi.showWeb(false);
                 if (Intent.ACTION_VIEW.equals(intent.getAction())) {
                     Tab t = getCurrentTab();
                     Uri uri = intent.getData();
@@ -2618,7 +2619,7 @@
     boolean onKeyLongPress(int keyCode, KeyEvent event) {
         switch(keyCode) {
         case KeyEvent.KEYCODE_BACK:
-            if (mUi.showsWeb()) {
+            if (mUi.isWebShowing()) {
                 bookmarksOrHistoryPicker(true);
                 return true;
             }
diff --git a/src/com/android/browser/NavScreen.java b/src/com/android/browser/NavScreen.java
index 0190c1b..22f6257 100644
--- a/src/com/android/browser/NavScreen.java
+++ b/src/com/android/browser/NavScreen.java
@@ -156,7 +156,6 @@
             }
         }
         if (mBookmarks == v) {
-            mUi.hideNavScreen(false);
             switchToSelected();
             mUiController.bookmarksOrHistoryPicker(false);
         } else if (mNewTab == v) {
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
index f33dbef..d1aed92 100644
--- a/src/com/android/browser/PhoneUi.java
+++ b/src/com/android/browser/PhoneUi.java
@@ -153,14 +153,6 @@
         }
     }
 
-    @Override
-    public void showComboView(ComboViews startWith, Bundle extras) {
-        if (mNavScreen != null) {
-            hideNavScreen(false);
-        }
-        super.showComboView(startWith, extras);
-    }
-
     // menu handling callbacks
 
     @Override
@@ -313,4 +305,15 @@
         return true;
     }
 
+    @Override
+    public boolean isWebShowing() {
+        return super.isWebShowing() && mNavScreen == null;
+    }
+
+    @Override
+    public void showWeb(boolean animate) {
+        super.showWeb(animate);
+        hideNavScreen(animate);
+    }
+
 }
diff --git a/src/com/android/browser/UI.java b/src/com/android/browser/UI.java
index 0929c0c..a9cbd7b 100644
--- a/src/com/android/browser/UI.java
+++ b/src/com/android/browser/UI.java
@@ -122,7 +122,9 @@
     public void setShouldShowErrorConsole(Tab tab, boolean show);
 
     // returns if the web page is clear of any overlays (not including sub windows)
-    public boolean showsWeb();
+    public boolean isWebShowing();
+
+    public void showWeb(boolean animate);
 
     Bitmap getDefaultVideoPoster();
 
