diff --git a/res/menu/browser.xml b/res/menu/browser.xml
index d3dc7d0..7d288c1 100644
--- a/res/menu/browser.xml
+++ b/res/menu/browser.xml
@@ -56,10 +56,18 @@
             android:icon="@drawable/ic_share_holo_dark"
             android:alphabeticShortcut="s" />
         <item
-            android:id="@+id/view_downloads_menu_id"
-            android:title="@string/menu_view_download"
-            android:icon="@drawable/ic_downloads_holo_dark"
-            android:alphabeticShortcut="j" />
+            android:id="@+id/find_menu_id"
+            android:title="@*android:string/find_on_page"/>
+        <item
+            android:id="@+id/ua_desktop_menu_id"
+            android:checkable="true"
+            android:title="@string/ua_switcher_desktop" />
+        <item
+            android:id="@+id/save_snapshot_menu_id"
+            android:title="@string/menu_save_snapshot" />
+        <item
+            android:id="@+id/page_info_menu_id"
+            android:title="@string/page_info" />
         <item
             android:id="@+id/preferences_menu_id"
             android:title="@string/menu_preferences"
@@ -76,6 +84,8 @@
             android:visible="false" />
     </group>
     <group android:id="@+id/MAIN_SHORTCUT_MENU" android:visible="false">
+        <item android:id="@+id/view_downloads_menu_id"
+            android:alphabeticShortcut="j" />
         <item android:id="@+id/homepage_menu_id"
             android:alphabeticShortcut="&#32;" />
         <item android:id="@+id/classic_history_menu_id"
diff --git a/res/menu/ua_switcher.xml b/res/menu/ua_switcher.xml
deleted file mode 100644
index 51236de..0000000
--- a/res/menu/ua_switcher.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-        android:id="@+id/ua_mobile_menu_id"
-        android:checkable="true"
-        android:title="@string/ua_switcher_mobile" />
-    <item
-        android:id="@+id/ua_desktop_menu_id"
-        android:checkable="true"
-        android:title="@string/ua_switcher_desktop" />
-    <item
-        android:id="@+id/find_menu_id"
-        android:title="@*android:string/find_on_page"/>
-    <item
-        android:id="@+id/save_snapshot_menu_id"
-        android:title="@string/menu_save_snapshot" />
-    <item
-        android:id="@+id/page_info_menu_id"
-        android:title="@string/page_info" />
-</menu>
-
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 0751f10..d2e27fb 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1000,10 +1000,8 @@
     <string name="preview">Preview</string>
     <!-- Name for the user's unsynced, local bookmarks [CHAR LIMIT=50] -->
     <string name="local_bookmarks">Local</string>
-    <!-- Popup menu option that allows the user to select the mobile version of a webpage [CHAR LIMIT=50] -->
-    <string name="ua_switcher_mobile">Mobile</string>
-    <!-- Popup menu option that allows the user to select the desktop version of a webpage [CHAR LIMIT=50] -->
-    <string name="ua_switcher_desktop">Desktop</string>
+    <!-- Popup menu checkbox that allows the user to request the desktop version of a webpage [CHAR LIMIT=50] -->
+    <string name="ua_switcher_desktop">Request desktop site</string>
     <!-- Preload permission label [CHAR LIMIT=40] -->
     <string name="permission_preload_label">Preload results</string>
     <!-- Empty text for the "saved pages" tab that is shown when no saved pages exist. [CHAR LIMIT=None] -->
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 19ad9a9..84d7e36 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -1466,10 +1466,12 @@
         boolean canGoBack = false;
         boolean canGoForward = false;
         boolean isHome = false;
+        boolean isDesktopUa = false;
         if (tab != null) {
             canGoBack = tab.canGoBack();
             canGoForward = tab.canGoForward();
             isHome = mSettings.getHomePage().equals(tab.getUrl());
+            isDesktopUa = mSettings.hasDesktopUseragent(tab.getWebView());
         }
         final MenuItem back = menu.findItem(R.id.back_menu_id);
         back.setEnabled(canGoBack);
@@ -1504,6 +1506,8 @@
         final MenuItem counter = menu.findItem(R.id.dump_counters_menu_id);
         counter.setVisible(showDebugSettings);
         counter.setEnabled(showDebugSettings);
+        final MenuItem uaSwitcher = menu.findItem(R.id.ua_desktop_menu_id);
+        uaSwitcher.setChecked(isDesktopUa);
 
         mUi.updateMenuState(tab, menu);
     }
@@ -1650,6 +1654,12 @@
                 viewDownloads();
                 break;
 
+            case R.id.ua_desktop_menu_id:
+                WebView web = getCurrentWebView();
+                mSettings.toggleDesktopUseragent(web);
+                web.loadUrl(web.getOriginalUrl());
+                break;
+
             case R.id.window_one_menu_id:
             case R.id.window_two_menu_id:
             case R.id.window_three_menu_id:
diff --git a/src/com/android/browser/NavigationBarBase.java b/src/com/android/browser/NavigationBarBase.java
index ab79b37..bfdd9a0 100644
--- a/src/com/android/browser/NavigationBarBase.java
+++ b/src/com/android/browser/NavigationBarBase.java
@@ -24,17 +24,11 @@
 import android.speech.RecognizerResultsIntent;
 import android.util.AttributeSet;
 import android.view.KeyEvent;
-import android.view.Menu;
-import android.view.MenuItem;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.View.OnFocusChangeListener;
-import android.webkit.WebView;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
-import android.widget.PopupMenu;
-import android.widget.PopupMenu.OnDismissListener;
-import android.widget.PopupMenu.OnMenuItemClickListener;
 
 import com.android.browser.UI.DropdownChangeListener;
 import com.android.browser.UrlInputView.UrlInputListener;
@@ -42,9 +36,9 @@
 
 import java.util.List;
 
-public class NavigationBarBase extends LinearLayout implements OnClickListener,
-        OnMenuItemClickListener, UrlInputListener, OnFocusChangeListener,
-        TextChangeWatcher, OnDismissListener {
+public class NavigationBarBase extends LinearLayout implements
+        OnClickListener, UrlInputListener, OnFocusChangeListener,
+        TextChangeWatcher {
 
     protected BaseUi mBaseUi;
     protected TitleBar mTitleBar;
@@ -54,9 +48,6 @@
 
     private ImageView mFavicon;
     private ImageView mLockIcon;
-    private View mUaSwitcher;
-    private boolean mUaSwitcherShowing;
-    private PopupMenu mUaSwitcherMenu;
 
     public NavigationBarBase(Context context) {
         super(context);
@@ -104,59 +95,8 @@
         mFavicon.setImageDrawable(mBaseUi.getFaviconDrawable(icon));
     }
 
-    public void setUaSwitcher(View v) {
-        if (mUaSwitcher != null) {
-            mUaSwitcher.setOnClickListener(null);
-        }
-        mUaSwitcher = v;
-        mUaSwitcher.setOnClickListener(this);
-    }
-
     @Override
     public void onClick(View v) {
-        if (mUaSwitcher == v) {
-            BrowserSettings settings = BrowserSettings.getInstance();
-            WebView web = mTitleBar.getCurrentWebView();
-            if (web == null) return;
-            boolean desktop = settings.hasDesktopUseragent(web);
-            mUaSwitcherMenu = new PopupMenu(mContext, mUaSwitcher);
-            Menu menu = mUaSwitcherMenu.getMenu();
-            mUaSwitcherMenu.getMenuInflater().inflate(R.menu.ua_switcher, menu);
-            menu.findItem(R.id.ua_mobile_menu_id).setChecked(!desktop);
-            menu.findItem(R.id.ua_desktop_menu_id).setChecked(desktop);
-            Tab tab = mUiController.getCurrentTab();
-            MenuItem saveSnapshot = menu.findItem(R.id.save_snapshot_menu_id);
-            saveSnapshot.setVisible(tab != null && !tab.isSnapshot());
-            MenuItem find = menu.findItem(R.id.find_menu_id);
-            find.setVisible(tab != null && !tab.isSnapshot());
-            mUaSwitcherMenu.setOnMenuItemClickListener(this);
-            mUaSwitcherMenu.setOnDismissListener(this);
-            mUaSwitcherShowing = true;
-            mUaSwitcherMenu.show();
-        }
-    }
-
-    @Override
-    public boolean onMenuItemClick(MenuItem item) {
-        BrowserSettings settings = BrowserSettings.getInstance();
-        WebView web = mTitleBar.getCurrentWebView();
-        if (web == null) return false;
-        boolean desktop = settings.hasDesktopUseragent(web);
-        switch (item.getItemId()) {
-        case R.id.ua_mobile_menu_id:
-            if (desktop) {
-                settings.toggleDesktopUseragent(web);
-                web.loadUrl(web.getOriginalUrl());
-            }
-            return true;
-        case R.id.ua_desktop_menu_id:
-            if (!desktop) {
-                settings.toggleDesktopUseragent(web);
-                web.loadUrl(web.getOriginalUrl());
-            }
-            return true;
-        }
-        return mUiController.onOptionsItemSelected(item);
     }
 
     @Override
@@ -340,17 +280,8 @@
     public void onProgressStopped() {
     }
 
-    @Override
-    public void onDismiss(PopupMenu menu) {
-        if (mUaSwitcherMenu == menu) {
-            mUaSwitcherShowing = false;
-            mUaSwitcherMenu = null;
-            mBaseUi.showTitleBarForDuration();
-        }
-    }
-
     public boolean isMenuShowing() {
-        return mUaSwitcherShowing;
+        return false;
     }
 
     public void onTabDataChanged(Tab tab) {
diff --git a/src/com/android/browser/NavigationBarPhone.java b/src/com/android/browser/NavigationBarPhone.java
index d2d3797..5cabe31 100644
--- a/src/com/android/browser/NavigationBarPhone.java
+++ b/src/com/android/browser/NavigationBarPhone.java
@@ -27,11 +27,12 @@
 import android.widget.ImageView;
 import android.widget.PopupMenu;
 import android.widget.PopupMenu.OnDismissListener;
+import android.widget.PopupMenu.OnMenuItemClickListener;
 
 import com.android.browser.UrlInputView.StateListener;
 
 public class NavigationBarPhone extends NavigationBarBase implements
-        StateListener {
+        StateListener, OnMenuItemClickListener, OnDismissListener {
 
     private ImageView mStopButton;
     private ImageView mVoiceButton;
@@ -81,7 +82,6 @@
         mStopDescription = res.getString(R.string.accessibility_button_stop);
         mRefreshDescription = res.getString(R.string.accessibility_button_refresh);
         mTextfieldBgDrawable = res.getDrawable(R.drawable.textfield_active_holo_dark);
-        setUaSwitcher(mComboIcon);
         mUrlInput.setContainer(this);
         mUrlInput.setStateListener(this);
         mNeedsMenu = !ViewConfiguration.get(getContext()).hasPermanentMenuKey();
@@ -182,7 +182,6 @@
         if (menu == mPopupMenu) {
             onMenuHidden();
         }
-        super.onDismiss(menu);
     }
 
     private void onMenuHidden() {
@@ -240,4 +239,9 @@
                 ? View.VISIBLE : View.GONE);
     }
 
+    @Override
+    public boolean onMenuItemClick(MenuItem item) {
+        return mUiController.onOptionsItemSelected(item);
+    }
+
 }
diff --git a/src/com/android/browser/NavigationBarTablet.java b/src/com/android/browser/NavigationBarTablet.java
index 7f6992a..8c08dcf 100644
--- a/src/com/android/browser/NavigationBarTablet.java
+++ b/src/com/android/browser/NavigationBarTablet.java
@@ -110,7 +110,6 @@
         mGoButton.setOnClickListener(this);
         mClearButton.setOnClickListener(this);
         mVoiceSearch.setOnClickListener(this);
-        setUaSwitcher(mUrlIcon);
         mUrlInput.setContainer(mUrlContainer);
     }
 
