diff --git a/res/drawable-mdpi/help_useragent_laptop.png b/res/drawable-mdpi/help_useragent_laptop.png
new file mode 100644
index 0000000..59aa721
--- /dev/null
+++ b/res/drawable-mdpi/help_useragent_laptop.png
Binary files differ
diff --git a/res/drawable-mdpi/help_useragent_tablet.png b/res/drawable-mdpi/help_useragent_tablet.png
new file mode 100644
index 0000000..7b579cd
--- /dev/null
+++ b/res/drawable-mdpi/help_useragent_tablet.png
Binary files differ
diff --git a/res/layout/help_dialog_useragent_switcher.xml b/res/layout/help_dialog_useragent_switcher.xml
new file mode 100644
index 0000000..cc29a2d
--- /dev/null
+++ b/res/layout/help_dialog_useragent_switcher.xml
@@ -0,0 +1,37 @@
+<?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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/help_useragent_switcher" />
+
+    <ImageView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:src="@drawable/help_useragent_tablet" />
+
+    <ImageView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:src="@drawable/help_useragent_laptop" />
+
+</LinearLayout>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ad8f64d..ae28023 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -665,7 +665,9 @@
     <!-- Title for the useragent switcher lab feature [CHAR LIMIT=40] -->
     <string name="pref_enable_useragent_switcher">Useragent Switcher</string>
     <!-- Summary for the useragent switcher lab feature [CHAR LIMIT=120] -->
-    <string name="pref_enable_useragent_switcher_summary">Toggle between tablet and desktop versions of a site (per tab)</string>
+    <string name="pref_enable_useragent_switcher_summary">Toggle between the tablet and desktop versions of a site</string>
+    <!-- Text explaining how to use the useragent switcher lab feature [CHAR LIMIT=none] -->
+    <string name="help_useragent_switcher">Tap on the Android or laptop icon to toggle between the tablet and desktop versions of a site.</string>
 
     <!-- Title for a dialog displayed when the browser has a data connectivity
             problem -->
diff --git a/src/com/android/browser/preferences/LabPreferencesFragment.java b/src/com/android/browser/preferences/LabPreferencesFragment.java
index f99b96d..d9ef3df 100644
--- a/src/com/android/browser/preferences/LabPreferencesFragment.java
+++ b/src/com/android/browser/preferences/LabPreferencesFragment.java
@@ -22,11 +22,14 @@
 import com.android.browser.R;
 import com.android.browser.search.SearchEngine;
 
+import android.app.AlertDialog;
 import android.content.Intent;
 import android.os.Bundle;
 import android.preference.Preference;
 import android.preference.Preference.OnPreferenceChangeListener;
 import android.preference.PreferenceFragment;
+import android.view.LayoutInflater;
+import android.view.View;
 
 public class LabPreferencesFragment extends PreferenceFragment
         implements OnPreferenceChangeListener {
@@ -41,12 +44,16 @@
 
         // Load the XML preferences file
         addPreferencesFromResource(R.xml.lab_preferences);
+        registerChangeListener(PreferenceKeys.PREF_ENABLE_QUICK_CONTROLS);
+        registerChangeListener(PreferenceKeys.PREF_ENABLE_USERAGENT_SWITCHER);
+        useInstantPref = findPreference(PreferenceKeys.PREF_USE_INSTANT_SEARCH);
+    }
 
-        Preference e = findPreference(PreferenceKeys.PREF_ENABLE_QUICK_CONTROLS);
+    private void registerChangeListener(String key) {
+        Preference e = findPreference(key);
         if (e != null) {
             e.setOnPreferenceChangeListener(this);
         }
-        useInstantPref = findPreference(PreferenceKeys.PREF_USE_INSTANT_SEARCH);
     }
 
     @Override
@@ -68,9 +75,23 @@
 
     @Override
     public boolean onPreferenceChange(Preference preference, Object newValue) {
-        // Attempt to restart
-        startActivity(new Intent(BrowserActivity.ACTION_RESTART, null,
-                getActivity(), BrowserActivity.class));
+        String key = preference.getKey();
+        if (PreferenceKeys.PREF_ENABLE_QUICK_CONTROLS.equals(key)) {
+            // Attempt to restart
+            startActivity(new Intent(BrowserActivity.ACTION_RESTART, null,
+                    getActivity(), BrowserActivity.class));
+        }
+        if (PreferenceKeys.PREF_ENABLE_USERAGENT_SWITCHER.equals(key)) {
+            if ((Boolean)newValue) {
+                // Show the help
+                LayoutInflater inflater = LayoutInflater.from(getActivity());
+                View content = inflater.inflate(R.layout.help_dialog_useragent_switcher, null);
+                new AlertDialog.Builder(getActivity())
+                        .setView(content)
+                        .setNeutralButton(android.R.string.ok, null)
+                        .show();
+            }
+        }
         return true;
     }
 }
