diff --git a/java/res/drawable-hdpi/mic_slash_holo.png b/java/res/drawable-hdpi/mic_slash_holo.png
new file mode 100644
index 0000000..8108b6e
--- /dev/null
+++ b/java/res/drawable-hdpi/mic_slash_holo.png
Binary files differ
diff --git a/java/res/values/keycodes.xml b/java/res/values/keycodes.xml
index 54fa610..6c18cb4 100644
--- a/java/res/values/keycodes.xml
+++ b/java/res/values/keycodes.xml
@@ -19,13 +19,13 @@
 -->
 
 <resources>
+    <!-- These code should be aligned with Keyboard.CODE_*. -->
     <integer name="key_tab">9</integer>
     <integer name="key_return">10</integer>
     <integer name="key_space">32</integer>
     <integer name="key_shift">-1</integer>
     <integer name="key_switch_alpha_symbol">-2</integer>
     <integer name="key_delete">-5</integer>
-    <!-- Keycode for F1 (function) key. This one switches between language switch & comma/.com -->
     <integer name="key_settings">-100</integer>
     <integer name="key_voice">-102</integer>
 </resources>
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index bd17bd2..78de94f 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -410,7 +410,7 @@
     <string name="subtype_mode_sr_keyboard">Serbian Keyboard</string>
     <string name="subtype_mode_sv_keyboard">Swedish Keyboard</string>
 
-    <string name="subtype_mode_cs_voice">Czech　Voice</string>
+    <string name="subtype_mode_cs_voice">Czech Voice</string>
     <string name="subtype_mode_de_voice">German Voice</string>
     <string name="subtype_mode_en_AU_voice">English (Australia) Voice</string>
     <string name="subtype_mode_en_GB_voice">English (Great Britain) Voice</string>
diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java
index 3801986..6a1d62e 100644
--- a/java/src/com/android/inputmethod/keyboard/Keyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java
@@ -59,25 +59,26 @@
     public static final int EDGE_TOP = 0x04;
     public static final int EDGE_BOTTOM = 0x08;
 
+    /** Some common keys code.  These should be aligned with values/keycodes.xml */
     public static final int CODE_ENTER = '\n';
     public static final int CODE_TAB = '\t';
     public static final int CODE_SPACE = ' ';
     public static final int CODE_PERIOD = '.';
 
+    /** Special keys code.  These should be aligned with values/keycodes.xml */
     public static final int CODE_SHIFT = -1;
-    public static final int CODE_MODE_CHANGE = -2;
+    public static final int CODE_SWITCH_ALPHA_SYMBOL = -2;
     public static final int CODE_CANCEL = -3;
     public static final int CODE_DONE = -4;
     public static final int CODE_DELETE = -5;
     public static final int CODE_ALT = -6;
-
-    public static final int CODE_OPTIONS = -100;
-    public static final int CODE_OPTIONS_LONGPRESS = -101;
+    public static final int CODE_SETTINGS = -100;
+    public static final int CODE_SETTINGS_LONGPRESS = -101;
+    // TODO: remove this once LatinIME stops referring to this.
+    public static final int CODE_VOICE = -102;
     public static final int CODE_CAPSLOCK = -103;
     public static final int CODE_NEXT_LANGUAGE = -104;
     public static final int CODE_PREV_LANGUAGE = -105;
-    // TODO: remove this once LatinIME stops referring to this.
-    public static final int CODE_VOICE = -109;
 
     /** Horizontal gap default for all rows */
     private int mDefaultHorizontalGap;
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
index 4e0caa1..5c1c62b 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
@@ -88,8 +88,8 @@
     @Override
     protected boolean onLongPress(Key key) {
         int primaryCode = key.mCodes[0];
-        if (primaryCode == Keyboard.CODE_OPTIONS) {
-            return invokeOnKey(Keyboard.CODE_OPTIONS_LONGPRESS);
+        if (primaryCode == Keyboard.CODE_SETTINGS) {
+            return invokeOnKey(Keyboard.CODE_SETTINGS_LONGPRESS);
         } else if (primaryCode == '0' && getLatinKeyboard().isPhoneKeyboard()) {
             // Long pressing on 0 in phone number keypad gives you a '+'.
             return invokeOnKey('+');
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index a1210f2..8570491 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -208,7 +208,7 @@
             return false;
         int primaryCode = key.mCodes[0];
         return primaryCode == Keyboard.CODE_SHIFT
-                || primaryCode == Keyboard.CODE_MODE_CHANGE;
+                || primaryCode == Keyboard.CODE_SWITCH_ALPHA_SYMBOL;
     }
 
     public boolean isModifier() {
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 5bf635f..702731e 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1050,7 +1050,7 @@
         }
     }
 
-    private void onOptionKeyPressed() {
+    private void onSettingsKeyPressed() {
         if (!isShowingOptionDialog()) {
             if (LatinIMEUtil.hasMultipleEnabledIMEsOrSubtypes(mImm)) {
                 showOptionsMenu();
@@ -1060,7 +1060,7 @@
         }
     }
 
-    private void onOptionKeyLongPressed() {
+    private void onSettingsKeyLongPressed() {
         if (!isShowingOptionDialog()) {
             if (LatinIMEUtil.hasMultipleEnabledIMEsOrSubtypes(mImm)) {
                 mImm.showInputMethodPicker();
@@ -1096,7 +1096,7 @@
             if (!distinctMultiTouch)
                 switcher.toggleShift();
             break;
-        case Keyboard.CODE_MODE_CHANGE:
+        case Keyboard.CODE_SWITCH_ALPHA_SYMBOL:
             // Symbol key is handled in onPress() when device has distinct multi-touch panel.
             if (!distinctMultiTouch)
                 switcher.changeKeyboardMode();
@@ -1106,11 +1106,11 @@
                 handleClose();
             }
             break;
-        case Keyboard.CODE_OPTIONS:
-            onOptionKeyPressed();
+        case Keyboard.CODE_SETTINGS:
+            onSettingsKeyPressed();
             break;
-        case Keyboard.CODE_OPTIONS_LONGPRESS:
-            onOptionKeyLongPressed();
+        case Keyboard.CODE_SETTINGS_LONGPRESS:
+            onSettingsKeyLongPressed();
             break;
         case Keyboard.CODE_NEXT_LANGUAGE:
             toggleLanguage(false, true);
@@ -1929,7 +1929,7 @@
         final boolean distinctMultiTouch = switcher.hasDistinctMultitouch();
         if (distinctMultiTouch && primaryCode == Keyboard.CODE_SHIFT) {
             switcher.onPressShift();
-        } else if (distinctMultiTouch && primaryCode == Keyboard.CODE_MODE_CHANGE) {
+        } else if (distinctMultiTouch && primaryCode == Keyboard.CODE_SWITCH_ALPHA_SYMBOL) {
             switcher.onPressSymbol();
         } else {
             switcher.onOtherKeyPressed();
@@ -1944,7 +1944,7 @@
         final boolean distinctMultiTouch = switcher.hasDistinctMultitouch();
         if (distinctMultiTouch && primaryCode == Keyboard.CODE_SHIFT) {
             switcher.onReleaseShift();
-        } else if (distinctMultiTouch && primaryCode == Keyboard.CODE_MODE_CHANGE) {
+        } else if (distinctMultiTouch && primaryCode == Keyboard.CODE_SWITCH_ALPHA_SYMBOL) {
             switcher.onReleaseSymbol();
         }
     }
