diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index 091126c..372f2a9 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -646,6 +646,10 @@
     }
 
     @Override
+    public void updateMenuState(Tab tab, Menu menu) {
+    }
+
+    @Override
     public void onOptionsMenuOpened() {
     }
 
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 457c2e0..f20968b 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -1520,6 +1520,7 @@
 
         MenuItem saveSnapshot = menu.findItem(R.id.save_snapshot_menu_id);
         saveSnapshot.setVisible(tab != null && !tab.isSnapshot());
+        mUi.updateMenuState(tab, menu);
     }
 
     public boolean onOptionsItemSelected(MenuItem item) {
diff --git a/src/com/android/browser/NavScreen.java b/src/com/android/browser/NavScreen.java
index 9c12ccf..face39e 100644
--- a/src/com/android/browser/NavScreen.java
+++ b/src/com/android/browser/NavScreen.java
@@ -52,7 +52,6 @@
     ImageButton mBookmarks;
     ImageButton mMore;
     ImageButton mNewTab;
-    ImageButton mNewIncognito;
     FrameLayout mHolder;
 
     TextView mTitle;
@@ -115,11 +114,9 @@
                 R.string.accessibility_transition_navscreen));
         mBookmarks = (ImageButton) findViewById(R.id.bookmarks);
         mNewTab = (ImageButton) findViewById(R.id.newtab);
-        mNewIncognito = (ImageButton) findViewById(R.id.newincognito);
         mMore = (ImageButton) findViewById(R.id.more);
         mBookmarks.setOnClickListener(this);
         mNewTab.setOnClickListener(this);
-        mNewIncognito.setOnClickListener(this);
         mMore.setOnClickListener(this);
         mScroller = (NavTabGallery) findViewById(R.id.scroller);
         mAdapter = new TabAdapter(mContext, mUiController.getTabControl());
@@ -160,9 +157,6 @@
             openNewTab();
         } else if (mMore == v) {
             showMenu();
-        } else if (mNewIncognito == v) {
-            mUi.hideNavScreen(true);
-            mUiController.openIncognitoTab();
         } else if (mTitle == v) {
             mUi.getTitleBar().setSkipTitleBarAnimations(true);
             close(false);
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
index 853d935..901f5bd 100644
--- a/src/com/android/browser/PhoneUi.java
+++ b/src/com/android/browser/PhoneUi.java
@@ -164,11 +164,32 @@
 
     @Override
     public boolean onPrepareOptionsMenu(Menu menu) {
-        menu.setGroupVisible(R.id.NAV_MENU, (mNavScreen == null));
+        updateMenuState(mActiveTab, menu);
         return true;
     }
 
     @Override
+    public void updateMenuState(Tab tab, Menu menu) {
+        menu.setGroupVisible(R.id.NAV_MENU, (mNavScreen == null));
+        MenuItem bm = menu.findItem(R.id.bookmarks_menu_id);
+        if (bm != null) {
+            bm.setVisible(mNavScreen == null);
+        }
+        MenuItem nt = menu.findItem(R.id.new_tab_menu_id);
+        if (nt != null) {
+            nt.setVisible(mNavScreen == null);
+        }
+        MenuItem find = menu.findItem(R.id.find_menu_id);
+        if (find != null) {
+            find.setVisible(((tab != null) && !tab.isSnapshot()));
+        }
+        MenuItem abm = menu.findItem(R.id.add_bookmark_menu_id);
+        if (abm != null) {
+            abm.setVisible((tab != null) && !tab.isSnapshot());
+        }
+    }
+
+    @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         if (mNavScreen != null) {
             hideNavScreen(false);
diff --git a/src/com/android/browser/UI.java b/src/com/android/browser/UI.java
index 2984d5c..bc4c0cf 100644
--- a/src/com/android/browser/UI.java
+++ b/src/com/android/browser/UI.java
@@ -99,6 +99,8 @@
 
     public boolean onPrepareOptionsMenu(Menu menu);
 
+    public void updateMenuState(Tab tab, Menu menu);
+
     public void onOptionsMenuOpened();
 
     public void onExtendedMenuOpened();
