diff --git a/java/res/values/dimens.xml b/java/res/values/dimens.xml
index 504e007..7f00cdb 100644
--- a/java/res/values/dimens.xml
+++ b/java/res/values/dimens.xml
@@ -51,7 +51,7 @@
     <dimen name="candidate_strip_fading_edge_length">63dip</dimen>
     <dimen name="candidate_strip_padding">0dip</dimen>
     <dimen name="candidate_min_width">0.3in</dimen>
-    <dimen name="candidate_padding">0dip</dimen>
+    <dimen name="candidate_padding">6dip</dimen>
     <dimen name="candidate_text_size">18dip</dimen>
     <dimen name="spacebar_vertical_correction">4dip</dimen>
     <!-- If the screen height in landscape is larger than the below value, then the keyboard
diff --git a/java/res/xml/prefs.xml b/java/res/xml/prefs.xml
index 3b20298..9c780cb 100644
--- a/java/res/xml/prefs.xml
+++ b/java/res/xml/prefs.xml
@@ -70,15 +70,10 @@
             android:defaultValue="@string/voice_mode_main"
             />
 
-    <!-- TODO: Filter subtypes by IME in SubtypeEnabler -->
-    <!-- TODO: Maybe use this only for phone? -->
     <PreferenceScreen
             android:key="subtype_settings"
             android:title="@string/language_selection_title"
-            android:summary="@string/language_selection_summary">
-        <intent
-                android:action="android.settings.INPUT_METHOD_AND_SUBTYPE_ENABLER"/>
-    </PreferenceScreen>
+            android:summary="@string/language_selection_summary" />
 
     <PreferenceCategory
             android:title="@string/prediction_category"
diff --git a/java/src/com/android/inputmethod/latin/Settings.java b/java/src/com/android/inputmethod/latin/Settings.java
index 3f604a3..4a8b34c 100644
--- a/java/src/com/android/inputmethod/latin/Settings.java
+++ b/java/src/com/android/inputmethod/latin/Settings.java
@@ -23,13 +23,17 @@
 import android.app.Dialog;
 import android.app.backup.BackupManager;
 import android.content.DialogInterface;
+import android.content.Intent;
 import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.os.Vibrator;
 import android.preference.CheckBoxPreference;
 import android.preference.ListPreference;
+import android.preference.Preference;
+import android.preference.Preference.OnPreferenceClickListener;
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceGroup;
+import android.preference.PreferenceScreen;
 import android.speech.SpeechRecognizer;
 import android.text.AutoText;
 import android.text.TextUtils;
@@ -41,7 +45,7 @@
 
 public class Settings extends PreferenceActivity
         implements SharedPreferences.OnSharedPreferenceChangeListener,
-        DialogInterface.OnDismissListener {
+        DialogInterface.OnDismissListener, OnPreferenceClickListener {
     private static final String TAG = "Settings";
 
     public static final String PREF_VIBRATE_ON = "vibrate_on";
@@ -64,6 +68,7 @@
     // Dialog ids
     private static final int VOICE_INPUT_CONFIRM_DIALOG = 0;
 
+    private PreferenceScreen mInputLanguageSelection;
     private CheckBoxPreference mQuickFixes;
     private ListPreference mVoicePreference;
     private ListPreference mSettingsKeyPreference;
@@ -84,10 +89,13 @@
         final String currentSetting = mAutoCorrectionThreshold.getValue();
         mBigramSuggestion.setEnabled(!currentSetting.equals(autoCorrectionOff));
     }
+
     @Override
     protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);
         addPreferencesFromResource(R.xml.prefs);
+        mInputLanguageSelection = (PreferenceScreen) findPreference(PREF_SUBTYPES);
+        mInputLanguageSelection.setOnPreferenceClickListener(this);
         mQuickFixes = (CheckBoxPreference) findPreference(PREF_QUICK_FIXES);
         mVoicePreference = (ListPreference) findPreference(PREF_VOICE_SETTINGS_KEY);
         mSettingsKeyPreference = (ListPreference) findPreference(PREF_SETTINGS_KEY);
@@ -169,6 +177,21 @@
         updateSettingsKeySummary();
     }
 
+    @Override
+    public boolean onPreferenceClick(Preference pref) {
+        if (pref == mInputLanguageSelection) {
+            final String action;
+            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
+                action = "android.settings.INPUT_METHOD_AND_SUBTYPE_ENABLER";
+            } else {
+                action = "com.android.inputmethod.latin.INPUT_LANGUAGE_SELECTION";
+            }
+            startActivity(new Intent(action));
+            return true;
+        }
+        return false;
+    }
+
     private void updateSettingsKeySummary() {
         mSettingsKeyPreference.setSummary(
                 getResources().getStringArray(R.array.settings_key_modes)
