diff --git a/res/values/strings.xml b/res/values/strings.xml
index 6d7994f..fefd2ee 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2613,11 +2613,19 @@
     card numbers.  It comes from the app
     <xliff:g id="spellchecker_application_name">%1$s</xliff:g>.
     Use this spell checker?</string>
+
     <!-- On Language & input settings screen, heading. Inside the "Language & input settings" screen, this is the header for settings that relate to mouse and trackpad devices. [CHAR LIMIT=40] -->
     <string name="pointer_settings_category">Mouse/trackpad</string>
     <!-- On Language & input settings screen, setting summary.  Setting for mouse pointer speed. [CHAR LIMIT=35] -->
     <string name="pointer_speed">Pointer speed</string>
 
+    <!-- On Language & input settings screen, heading. Inside the "Language & input settings" screen, this is the header for settings that relate to game controller devices. [CHAR LIMIT=40] -->
+    <string name="game_controller_settings_category">Game Controller</string>
+    <!-- On Language & input settings screen, setting title.  Setting to redirect vibration to input devices. [CHAR LIMIT=35] -->
+    <string name="vibrate_input_devices">Use vibrator</string>
+    <!-- On Language & input settings screen, setting summary.  Setting to redirect vibration to input devices. [CHAR LIMIT=100] -->
+    <string name="vibrate_input_devices_summary">Redirect vibrator to game controller when connected.</string>
+
     <!-- Keyboard Layout Picker --> <skip />
     <!-- Title for the keyboard layout picker activity. [CHAR LIMIT=35] -->
     <string name="keyboard_layout_picker_title">Choose keyboard layout</string>
diff --git a/res/xml/language_settings.xml b/res/xml/language_settings.xml
index cfcc341..f001486 100644
--- a/res/xml/language_settings.xml
+++ b/res/xml/language_settings.xml
@@ -92,4 +92,14 @@
                 android:title="@string/pointer_speed"
                 android:dialogTitle="@string/pointer_speed" />
     </PreferenceCategory>
+
+    <PreferenceCategory android:key="game_controller_settings_category"
+            android:title="@string/game_controller_settings_category">
+        <CheckBoxPreference
+                android:key="vibrate_input_devices"
+                android:title="@string/vibrate_input_devices"
+                android:summaryOn="@string/vibrate_input_devices_summary"
+                android:summaryOff="@string/vibrate_input_devices_summary"
+                android:persistent="false"/>
+    </PreferenceCategory>
 </PreferenceScreen>
diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
index 7d02a1f..e764a73 100644
--- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
+++ b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
@@ -73,6 +73,7 @@
     private ListPreference mShowInputMethodSelectorPref;
     private PreferenceCategory mKeyboardSettingsCategory;
     private PreferenceCategory mHardKeyboardCategory;
+    private PreferenceCategory mGameControllerCategory;
     private Preference mLanguagePref;
     private final ArrayList<InputMethodPreference> mInputMethodPreferenceList =
             new ArrayList<InputMethodPreference>();
@@ -118,6 +119,8 @@
         mHardKeyboardCategory = (PreferenceCategory)findPreference("hard_keyboard");
         mKeyboardSettingsCategory = (PreferenceCategory)findPreference(
                 "keyboard_settings_category");
+        mGameControllerCategory = (PreferenceCategory)findPreference(
+                "game_controller_settings_category");
 
         // Filter out irrelevant features if invoked from IME settings button.
         mIsOnlyImeSettings = Settings.ACTION_INPUT_METHOD_SETTINGS.equals(
@@ -159,9 +162,9 @@
             }
         }
 
-        // Build hard keyboard preference category.
+        // Build hard keyboard and game controller preference categories.
         mIm = (InputManager)getActivity().getSystemService(Context.INPUT_SERVICE);
-        updateHardKeyboards();
+        updateInputDevices();
 
         // Spell Checker
         final Intent intent = new Intent(Intent.ACTION_MAIN);
@@ -245,7 +248,7 @@
             }
         }
 
-        updateHardKeyboards();
+        updateInputDevices();
 
         // IME
         InputMethodAndSubtypeUtil.loadInputMethodSubtypeList(
@@ -268,17 +271,17 @@
 
     @Override
     public void onInputDeviceAdded(int deviceId) {
-        updateHardKeyboards();
+        updateInputDevices();
     }
 
     @Override
     public void onInputDeviceChanged(int deviceId) {
-        updateHardKeyboards();
+        updateInputDevices();
     }
 
     @Override
     public void onInputDeviceRemoved(int deviceId) {
-        updateHardKeyboards();
+        updateInputDevices();
     }
 
     @Override
@@ -306,6 +309,11 @@
                     }
                 }
             }
+            if (chkPref == mGameControllerCategory.findPreference("vibrate_input_devices")) {
+                System.putInt(getContentResolver(), Settings.System.VIBRATE_INPUT_DEVICES,
+                        chkPref.isChecked() ? 1 : 0);
+                return true;
+            }
         }
         return super.onPreferenceTreeClick(preferenceScreen, preference);
     }
@@ -382,6 +390,11 @@
         return pref;
     }
 
+    private void updateInputDevices() {
+        updateHardKeyboards();
+        updateGameControllers();
+    }
+
     private void updateHardKeyboards() {
         mHardKeyboardPreferenceList.clear();
         if (getResources().getConfiguration().keyboard == Configuration.KEYBOARD_QWERTY) {
@@ -436,6 +449,30 @@
         }
     }
 
+    private void updateGameControllers() {
+        if (haveInputDeviceWithVibrator()) {
+            getPreferenceScreen().addPreference(mGameControllerCategory);
+
+            CheckBoxPreference chkPref = (CheckBoxPreference)
+                    mGameControllerCategory.findPreference("vibrate_input_devices");
+            chkPref.setChecked(System.getInt(getContentResolver(),
+                    Settings.System.VIBRATE_INPUT_DEVICES, 1) > 0);
+        } else {
+            getPreferenceScreen().removePreference(mGameControllerCategory);
+        }
+    }
+
+    private boolean haveInputDeviceWithVibrator() {
+        final int[] devices = InputDevice.getDeviceIds();
+        for (int i = 0; i < devices.length; i++) {
+            InputDevice device = InputDevice.getDevice(devices[i]);
+            if (device != null && !device.isVirtual() && device.getVibrator().hasVibrator()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     private class SettingsObserver extends ContentObserver {
         public SettingsObserver(Handler handler, Context context) {
             super(handler);
