diff --git a/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java b/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
index 5db6e63d087176f117f9dc67839e952ceab17bb9..58958b6108f1967f21d9055465d87b185fcccef9 100644
--- a/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
+++ b/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
@@ -23,6 +23,7 @@ import android.preference.PreferenceManager;
 import android.util.Log;
 import android.view.InflateException;
 import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputMethodManager;
 
 import java.lang.ref.SoftReference;
 import java.util.Arrays;
@@ -746,7 +747,9 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
             // 2) SETTINGS_KEY_MODE_AUTO and there are two or more enabled IMEs on the system
             if (settingsKeyMode.equals(resources.getString(SETTINGS_KEY_MODE_ALWAYS_SHOW))
                     || (settingsKeyMode.equals(resources.getString(SETTINGS_KEY_MODE_AUTO))
-                            && LatinIMEUtil.hasMultipleEnabledIMEs(context))) {
+                            && LatinIMEUtil.hasMultipleEnabledIMEsOrSubtypes(
+                                    ((InputMethodManager) context.getSystemService(
+                                            Context.INPUT_METHOD_SERVICE))))) {
                 return true;
             }
         }
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index d069e00fb8132c2598c0288d05e96d3ea6d3c3c0..8a0d1461afcd6d8c8ea4392b1d0183ee77d2520e 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -134,6 +134,7 @@ public class LatinIME extends InputMethodService
 
     private AlertDialog mOptionsDialog;
 
+    private InputMethodManager mImm;
     private KeyboardSwitcher mKeyboardSwitcher;
     private SubtypeSwitcher mSubtypeSwitcher;
     private VoiceIMEConnector mVoiceConnector;
@@ -147,9 +148,8 @@ public class LatinIME extends InputMethodService
 
     private final StringBuilder mComposing = new StringBuilder();
     private WordComposer mWord = new WordComposer();
-    private int mCommittedLength;
-    private boolean mPredicting;
     private CharSequence mBestWord;
+    private boolean mPredicting;
     private boolean mPredictionOn;
     private boolean mCompletionOn;
     private boolean mHasDictionary;
@@ -164,13 +164,14 @@ public class LatinIME extends InputMethodService
     private boolean mPopupOn;
     private boolean mAutoCap;
     private boolean mQuickFixes;
-    private int     mCorrectionMode;
 
-    private int     mOrientation;
-    private List<CharSequence> mSuggestPuncList;
+    private int mCorrectionMode;
+    private int mCommittedLength;
+    private int mOrientation;
     // Keep track of the last selection range to decide if we need to show word alternatives
-    private int     mLastSelectionStart;
-    private int     mLastSelectionEnd;
+    private int mLastSelectionStart;
+    private int mLastSelectionEnd;
+    private List<CharSequence> mSuggestPuncList;
 
     // Input type is such that we should not auto-correct
     private boolean mInputTypeNoAutoCorrect;
@@ -337,6 +338,7 @@ public class LatinIME extends InputMethodService
         super.onCreate();
         //setStatusIcon(R.drawable.ime_qwerty);
         mResources = getResources();
+        mImm = ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE));
         final Configuration conf = mResources.getConfiguration();
         final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
         mSubtypeSwitcher = SubtypeSwitcher.getInstance();
@@ -1041,14 +1043,9 @@ public class LatinIME extends InputMethodService
         }
     }
 
-    private void showInputMethodSubtypePicker() {
-        ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE))
-                .showInputMethodSubtypePicker();
-    }
-
     private void onOptionKeyPressed() {
         if (!isShowingOptionDialog()) {
-            if (LatinIMEUtil.hasMultipleEnabledIMEs(this)) {
+            if (LatinIMEUtil.hasMultipleEnabledIMEsOrSubtypes(mImm)) {
                 showOptionsMenu();
             } else {
                 launchSettings();
@@ -1058,8 +1055,8 @@ public class LatinIME extends InputMethodService
 
     private void onOptionKeyLongPressed() {
         if (!isShowingOptionDialog()) {
-            if (LatinIMEUtil.hasMultipleEnabledIMEs(this)) {
-                showInputMethodSubtypePicker();
+            if (LatinIMEUtil.hasMultipleEnabledIMEsOrSubtypes(mImm)) {
+                mImm.showInputMethodPicker();
             } else {
                 launchSettings();
             }
@@ -2177,7 +2174,7 @@ public class LatinIME extends InputMethodService
                         launchSettings();
                         break;
                     case POS_METHOD:
-                        showInputMethodSubtypePicker();
+                        mImm.showInputMethodPicker();
                         break;
                 }
             }
diff --git a/java/src/com/android/inputmethod/latin/LatinIMEUtil.java b/java/src/com/android/inputmethod/latin/LatinIMEUtil.java
index e392bfd3811daef8b44a7a18fe493ee842ace9e7..4db1ec5c84dcff4effbf70c7e2f53ce3bd052895 100644
--- a/java/src/com/android/inputmethod/latin/LatinIMEUtil.java
+++ b/java/src/com/android/inputmethod/latin/LatinIMEUtil.java
@@ -91,9 +91,11 @@ public class LatinIMEUtil {
         }
     }
 
-    public static boolean hasMultipleEnabledIMEs(Context context) {
-        return ((InputMethodManager) context.getSystemService(
-                Context.INPUT_METHOD_SERVICE)).getEnabledInputMethodList().size() > 1;
+    public static boolean hasMultipleEnabledIMEsOrSubtypes(InputMethodManager imm) {
+        return imm.getEnabledInputMethodList().size() > 1
+        // imm.getEnabledInputMethodSubtypeList(null) will return the current IME's enabled input
+        // method subtype (The current IME should be LatinIME.)
+                || imm.getEnabledInputMethodSubtypeList(null).size() > 1;
     }
 
     /* package */ static class RingCharBuffer {