diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 8adba4b..dda1795 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -3901,8 +3901,11 @@
         }
         intent.putExtra("title", title);
         intent.putExtra("url", url);
-        intent.putExtra("maxTabsOpen",
-                mTabControl.getTabCount() >= TabControl.MAX_TABS);
+        // If this is opening in a new window, then disable opening in a
+        // (different) new window.  Also disable it if we have maxed out the
+        // windows.
+        intent.putExtra("disable_new_window", cancelGoPageMeansClose
+                || mTabControl.getTabCount() >= TabControl.MAX_TABS);
         intent.putExtra("touch_icon_url", current.getTouchIconUrl());
         if (startWithHistory) {
             intent.putExtra(CombinedBookmarkHistoryActivity.STARTING_TAB,
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index f070546..c97cc00 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -64,7 +64,7 @@
     private View                    mVerticalList;
     private BrowserBookmarksAdapter mBookmarksAdapter;
     private static final int        BOOKMARKS_SAVE = 1;
-    private boolean                 mMaxTabsOpen;
+    private boolean                 mDisableNewWindow;
     private BookmarkItem            mContextHeader;
     private AddNewBookmark          mAddHeader;
     private boolean                 mCanceled = false;
@@ -197,7 +197,7 @@
                 // The historycontext menu has no ADD_MENU group.
                 menu.setGroupVisible(R.id.ADD_MENU, false);
             }
-            if (mMaxTabsOpen) {
+            if (mDisableNewWindow) {
                 menu.findItem(R.id.new_window_context_menu_id).setVisible(
                         false);
             }
@@ -227,7 +227,8 @@
         if (Intent.ACTION_CREATE_SHORTCUT.equals(getIntent().getAction())) {
             mCreateShortcut = true;
         }
-        mMaxTabsOpen = getIntent().getBooleanExtra("maxTabsOpen", false);
+        mDisableNewWindow = getIntent().getBooleanExtra("disable_new_window",
+                false);
         mMostVisited = getIntent().getBooleanExtra("mostVisited", false);
 
         if (mCreateShortcut) {
diff --git a/src/com/android/browser/BrowserHistoryPage.java b/src/com/android/browser/BrowserHistoryPage.java
index cb8340e..6402422 100644
--- a/src/com/android/browser/BrowserHistoryPage.java
+++ b/src/com/android/browser/BrowserHistoryPage.java
@@ -61,7 +61,7 @@
 public class BrowserHistoryPage extends ExpandableListActivity {
     private HistoryAdapter          mAdapter;
     private DateSorter              mDateSorter;
-    private boolean                 mMaxTabsOpen;
+    private boolean                 mDisableNewWindow;
     private HistoryItem             mContextHeader;
 
     private final static String LOGTAG = "browser";
@@ -129,7 +129,8 @@
                 }
             });
         }
-        mMaxTabsOpen = getIntent().getBooleanExtra("maxTabsOpen", false);
+        mDisableNewWindow = getIntent().getBooleanExtra("disable_new_window",
+                false);
         CombinedBookmarkHistoryActivity.getIconListenerSet(getContentResolver())
                 .addListener(mIconReceiver);
         
@@ -193,9 +194,10 @@
         historyItem.copyTo(mContextHeader);
         menu.setHeaderView(mContextHeader);
 
-        // Only show open in new tab if we have not maxed out available tabs
-        menu.findItem(R.id.new_window_context_menu_id).setVisible(!mMaxTabsOpen);
-        
+        // Only show open in new tab if it was not explicitly disabled
+        if (mDisableNewWindow) {
+            menu.findItem(R.id.new_window_context_menu_id).setVisible(false);
+        }
         // For a bookmark, provide the option to remove it from bookmarks
         if (historyItem.isBookmark()) {
             MenuItem item = menu.findItem(R.id.save_to_bookmarks_menu_id);
