diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index 0952114..7b760f0 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -320,7 +320,10 @@
 
     <!-- Menu item for launching Input method switcher -->
     <string name="inputMethod">Input method</string>
-    
+
+    <!-- Menu item for launching Input method picker -->
+    <string name="selectInputMethod">Select input method</string>
+
     <!-- Title for input language selection screen -->
     <string name="language_selection_title">Input languages</string>
     <!-- Title summary for input language selection screen -->
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index d0e6e69..3b4b4ff 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1083,6 +1083,40 @@
         }
     }
 
+    private boolean hasMultipleEnabledIMEs() {
+        return ((InputMethodManager) getSystemService(
+                INPUT_METHOD_SERVICE)).getEnabledInputMethodList().size() > 1;
+    }
+
+    private void showInputMethodPicker() {
+        ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE))
+                .showInputMethodPicker();
+    }
+
+    private void onOptionKeyPressed() {
+        if (!isShowingOptionDialog()) {
+            if (hasMultipleEnabledIMEs()) {
+                showOptionsMenu();
+            } else {
+                launchSettings();
+            }
+        }
+    }
+
+    private void onOptionKeyLongPressed() {
+        if (!isShowingOptionDialog()) {
+            if (hasMultipleEnabledIMEs()) {
+                showInputMethodPicker();
+            } else {
+                launchSettings();
+            }
+        }
+    }
+
+    private boolean isShowingOptionDialog() {
+        return mOptionsDialog != null && mOptionsDialog.isShowing();
+    }
+
     // Implementation of KeyboardViewListener
 
     public void onKey(int primaryCode, int[] keyCodes, int x, int y) {
@@ -1102,12 +1136,15 @@
                 // Shift key is handled in onPress().
                 break;
             case Keyboard.KEYCODE_CANCEL:
-                if (mOptionsDialog == null || !mOptionsDialog.isShowing()) {
+                if (!isShowingOptionDialog()) {
                     handleClose();
                 }
                 break;
             case LatinKeyboardView.KEYCODE_OPTIONS:
-                showOptionsMenu();
+                onOptionKeyPressed();
+                break;
+            case LatinKeyboardView.KEYCODE_OPTIONS_LONGPRESS:
+                onOptionKeyLongPressed();
                 break;
             case LatinKeyboardView.KEYCODE_NEXT_LANGUAGE:
                 toggleLanguage(false, true);
@@ -2400,7 +2437,7 @@
         builder.setIcon(R.drawable.ic_dialog_keyboard);
         builder.setNegativeButton(android.R.string.cancel, null);
         CharSequence itemSettings = getString(R.string.english_ime_settings);
-        CharSequence itemInputMethod = getString(R.string.inputMethod);
+        CharSequence itemInputMethod = getString(R.string.selectInputMethod);
         builder.setItems(new CharSequence[] {
                 itemSettings, itemInputMethod},
                 new DialogInterface.OnClickListener() {
diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardView.java
index 7a99366..9236d68 100644
--- a/java/src/com/android/inputmethod/latin/LatinKeyboardView.java
+++ b/java/src/com/android/inputmethod/latin/LatinKeyboardView.java
@@ -32,6 +32,7 @@
 public class LatinKeyboardView extends LatinKeyboardBaseView {
 
     static final int KEYCODE_OPTIONS = -100;
+    static final int KEYCODE_OPTIONS_LONGPRESS = -101;
     static final int KEYCODE_VOICE = -102;
     static final int KEYCODE_F1 = -103;
     static final int KEYCODE_NEXT_LANGUAGE = -104;
@@ -76,7 +77,12 @@
 
     @Override
     protected boolean onLongPress(Key key) {
-        if (key.codes[0] == '0' && getKeyboard() == mPhoneKeyboard) {
+        if (key.codes[0] == KEYCODE_OPTIONS) {
+            getOnKeyboardActionListener().onKey(KEYCODE_OPTIONS_LONGPRESS, null,
+                    LatinKeyboardBaseView.NOT_A_TOUCH_COORDINATE,
+                    LatinKeyboardBaseView.NOT_A_TOUCH_COORDINATE);
+            return true;
+        } else if (key.codes[0] == '0' && getKeyboard() == mPhoneKeyboard) {
             // Long pressing on 0 in phone number keypad gives you a '+'.
             getOnKeyboardActionListener().onKey(
                     '+', null, LatinKeyboardBaseView.NOT_A_TOUCH_COORDINATE,
