diff --git a/java/res/values-xlarge/bools.xml b/java/res/values-xlarge/bools.xml
index 2ac5fc6..3079133 100644
--- a/java/res/values-xlarge/bools.xml
+++ b/java/res/values-xlarge/bools.xml
@@ -22,5 +22,4 @@
     <bool name="default_popup_preview">false</bool>
     <bool name="config_enable_show_settings_key_option">false</bool>
     <bool name="config_dynamic_key_top_enter_key">false</bool>
-    <bool name="config_dynamic_key_top_symbol_key">false</bool>
 </resources>
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 2087115..7de41f0 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -149,7 +149,8 @@
             <enum name="web" value="4" />
             <enum name="phone" value="5" />
         </attr>
-        <attr name="settingsKey" format="string" />
-        <attr name="voiceKey" format="string" />
+        <attr name="hasSettingsKey" format="string" />
+        <attr name="voiceKeyEnabled" format="string" />
+        <attr name="hasVoiceKey" format="string" />
     </declare-styleable>
 </resources>
diff --git a/java/res/values/bools.xml b/java/res/values/bools.xml
index 0497a6a..5d932a6 100644
--- a/java/res/values/bools.xml
+++ b/java/res/values/bools.xml
@@ -32,5 +32,4 @@
     <bool name="config_long_press_comma_for_settings_enabled">true</bool>
     <bool name="config_enable_show_settings_key_option">true</bool>
     <bool name="config_dynamic_key_top_enter_key">true</bool>
-    <bool name="config_dynamic_key_top_symbol_key">true</bool>
 </resources>
diff --git a/java/res/values/keycodes.xml b/java/res/values/keycodes.xml
index c5d5b3c..cbfe896 100644
--- a/java/res/values/keycodes.xml
+++ b/java/res/values/keycodes.xml
@@ -28,5 +28,4 @@
     <!-- 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>
-    <integer name="key_f1">-103</integer>
 </resources>
diff --git a/java/res/xml/kbd_qwerty_black_f1.xml b/java/res/xml/kbd_qwerty_black_f1.xml
new file mode 100644
index 0000000..296d8a0
--- /dev/null
+++ b/java/res/xml/kbd_qwerty_black_f1.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2010, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+    <switch>
+        <case
+            latin:mode="url"
+        >
+            <Key
+                latin:keyLabel="/"
+                latin:popupKeyboard="@xml/popup_slash"
+                latin:keyHintIcon="@drawable/hint_popup"
+                latin:isModifier="true" />
+        </case>
+        <case
+            latin:mode="email"
+        >
+            <Key
+                latin:keyLabel="\@"
+                latin:popupKeyboard="@xml/popup_at"
+                latin:keyHintIcon="@drawable/hint_popup"
+                latin:isModifier="true" />
+        </case>
+        <case
+            latin:hasVoiceKey="true"
+        >
+            <Key
+                latin:codes="@integer/key_voice"
+                latin:popupKeyboard="@xml/popup_mic"
+                latin:keyIcon="@drawable/sym_bkeyboard_mic"
+                latin:iconPreview="@drawable/sym_keyboard_feedback_mic"
+                latin:keyHintIcon="@drawable/hint_popup"
+                latin:isModifier="true" />
+        </case>
+        <default>
+            <Key
+                latin:keyLabel=","
+                latin:popupKeyboard="@xml/popup_comma"
+                latin:keyHintIcon="@drawable/hint_popup"
+                latin:isModifier="true" />
+        </default>
+    </switch>
+</merge>
diff --git a/java/res/xml/kbd_qwerty_black_row4.xml b/java/res/xml/kbd_qwerty_black_row4.xml
index 2b9ef7f..c6e25b4 100644
--- a/java/res/xml/kbd_qwerty_black_row4.xml
+++ b/java/res/xml/kbd_qwerty_black_row4.xml
@@ -27,15 +27,12 @@
     >
         <switch>
             <case
-                latin:settingsKey="false"
+                latin:hasSettingsKey="false"
             >
-                <Key
-                    latin:codes="@integer/key_symbol"
-                    latin:keyLabel="@string/label_symbol_key"
-                    latin:keyWidth="20%p"
-                    latin:keyEdgeFlags="left" />
-                <Key
-                    latin:codes="@integer/key_f1" />
+                <include
+                    latin:keyboardLayout="@xml/kbd_qwerty_black_symbol" />
+                <include
+                    latin:keyboardLayout="@xml/kbd_qwerty_black_f1" />
                 <switch>
                     <case
                         latin:mode="web"
@@ -86,19 +83,16 @@
                 </switch>
             </case>
             <case
-                latin:settingsKey="true"
+                latin:hasSettingsKey="true"
             >
-                <Key
-                    latin:codes="@integer/key_symbol"
-                    latin:keyLabel="@string/label_symbol_key"
-                    latin:keyWidth="15%p"
-                    latin:keyEdgeFlags="left" />
+                <include
+                    latin:keyboardLayout="@xml/kbd_qwerty_black_symbol" />
                 <Key
                     latin:codes="@integer/key_settings"
                     latin:keyIcon="@drawable/sym_bkeyboard_settings"
                     latin:iconPreview="@drawable/sym_keyboard_feedback_settings" />
-                <Key
-                    latin:codes="@integer/key_f1" />
+                <include
+                    latin:keyboardLayout="@xml/kbd_qwerty_black_f1" />
                 <switch>
                     <case
                         latin:mode="web"
diff --git a/java/res/xml/kbd_qwerty_black_symbol.xml b/java/res/xml/kbd_qwerty_black_symbol.xml
new file mode 100644
index 0000000..c1ef170
--- /dev/null
+++ b/java/res/xml/kbd_qwerty_black_symbol.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2010, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+    <switch>
+        <case
+            latin:hasSettingsKey="false"
+        >
+            <switch>
+                <!-- When this qwerty keyboard has no voice key but voice key is enabled, then
+                     symbol keyboard will have mic key. That means we should use "?123mic" key here.
+                     -->
+                <case
+                    latin:voiceKeyEnabled="true"
+                    latin:hasVoiceKey="false"
+                >
+                    <Key
+                        latin:codes="@integer/key_symbol"
+                        latin:keyIcon="@drawable/sym_bkeyboard_123_mic"
+                        latin:iconPreview="@drawable/sym_keyboard_feedback_123_mic"
+                        latin:keyWidth="20%p"
+                        latin:isModifier="true"
+                        latin:keyEdgeFlags="left" />
+                </case>
+                <default>
+                    <Key
+                        latin:codes="@integer/key_symbol"
+                        latin:keyLabel="@string/label_symbol_key"
+                        latin:keyWidth="20%p"
+                        latin:isModifier="true"
+                        latin:keyEdgeFlags="left" />
+                </default>
+            </switch>
+        </case>
+        <case
+            latin:hasSettingsKey="true"
+        >
+            <switch>
+                <!-- When this qwerty keyboard has no voice key but voice key is enabled, then
+                     symbol keyboard will have mic key. That means we should use "?123mic" key here.
+                     -->
+                <case
+                    latin:voiceKeyEnabled="true"
+                    latin:hasVoiceKey="false"
+                >
+                    <Key
+                        latin:codes="@integer/key_symbol"
+                        latin:keyIcon="@drawable/sym_bkeyboard_123_mic"
+                        latin:iconPreview="@drawable/sym_keyboard_feedback_123_mic"
+                        latin:keyWidth="15%p"
+                        latin:isModifier="true"
+                        latin:keyEdgeFlags="left" />
+                </case>
+                <default>
+                    <Key
+                        latin:codes="@integer/key_symbol"
+                        latin:keyLabel="@string/label_symbol_key"
+                        latin:keyWidth="15%p"
+                        latin:isModifier="true"
+                        latin:keyEdgeFlags="left" />
+                </default>
+            </switch>
+        </case>
+    </switch>
+</merge>
diff --git a/java/res/xml/kbd_qwerty_f1.xml b/java/res/xml/kbd_qwerty_f1.xml
new file mode 100644
index 0000000..23e494c
--- /dev/null
+++ b/java/res/xml/kbd_qwerty_f1.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2010, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+    <switch>
+        <case
+            latin:mode="url"
+        >
+            <Key
+                latin:keyLabel="/"
+                latin:popupKeyboard="@xml/popup_slash"
+                latin:keyHintIcon="@drawable/hint_popup"
+                latin:isModifier="true" />
+        </case>
+        <case
+            latin:mode="email"
+        >
+            <Key
+                latin:keyLabel="\@"
+                latin:popupKeyboard="@xml/popup_at"
+                latin:keyHintIcon="@drawable/hint_popup"
+                latin:isModifier="true" />
+        </case>
+        <case
+            latin:hasVoiceKey="true"
+        >
+            <Key
+                latin:codes="@integer/key_voice"
+                latin:popupKeyboard="@xml/popup_mic"
+                latin:keyIcon="@drawable/sym_keyboard_mic"
+                latin:iconPreview="@drawable/sym_keyboard_feedback_mic"
+                latin:keyHintIcon="@drawable/hint_popup"
+                latin:isModifier="true" />
+        </case>
+        <default>
+            <Key
+                latin:keyLabel=","
+                latin:popupKeyboard="@xml/popup_comma"
+                latin:keyHintIcon="@drawable/hint_popup"
+                latin:isModifier="true" />
+        </default>
+    </switch>
+</merge>
diff --git a/java/res/xml/kbd_qwerty_row4.xml b/java/res/xml/kbd_qwerty_row4.xml
index 2e2b32e..a5113ea 100644
--- a/java/res/xml/kbd_qwerty_row4.xml
+++ b/java/res/xml/kbd_qwerty_row4.xml
@@ -27,17 +27,12 @@
     >
         <switch>
             <case
-                latin:settingsKey="false"
+                latin:hasSettingsKey="false"
             >
-                <Key
-                    latin:codes="@integer/key_symbol"
-                    latin:keyLabel="@string/label_symbol_key"
-                    latin:keyWidth="20%p"
-                    latin:isModifier="true"
-                    latin:keyEdgeFlags="left" />
-                <Key
-                    latin:codes="@integer/key_f1"
-                    latin:isModifier="true" />
+                <include
+                    latin:keyboardLayout="@xml/kbd_qwerty_symbol" />
+                <include
+                    latin:keyboardLayout="@xml/kbd_qwerty_f1" />
                 <switch>
                     <case
                         latin:mode="web"
@@ -94,22 +89,17 @@
                 </switch>
             </case>
             <case
-                latin:settingsKey="true"
+                latin:hasSettingsKey="true"
             >
-                <Key
-                    latin:codes="@integer/key_symbol"
-                    latin:keyLabel="@string/label_symbol_key"
-                    latin:keyWidth="15%p"
-                    latin:isModifier="true"
-                    latin:keyEdgeFlags="left" />
+                <include
+                    latin:keyboardLayout="@xml/kbd_qwerty_symbol" />
                 <Key
                     latin:codes="@integer/key_settings"
                     latin:keyIcon="@drawable/sym_keyboard_settings"
                     latin:iconPreview="@drawable/sym_keyboard_feedback_settings"
                     latin:isModifier="true" />
-                <Key
-                    latin:codes="@integer/key_f1"
-                    latin:isModifier="true" />
+                <include
+                    latin:keyboardLayout="@xml/kbd_qwerty_f1" />
                 <switch>
                     <case
                         latin:mode="web"
@@ -163,7 +153,7 @@
                             latin:keyWidth="15%p"
                             latin:isModifier="true"
                             latin:keyEdgeFlags="right" />
-                     </case>
+                    </case>
                     <default>
                         <Key
                             latin:codes="@integer/key_return"
diff --git a/java/res/xml/kbd_qwerty_symbol.xml b/java/res/xml/kbd_qwerty_symbol.xml
new file mode 100644
index 0000000..e90091c
--- /dev/null
+++ b/java/res/xml/kbd_qwerty_symbol.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2010, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+    <switch>
+        <case
+            latin:hasSettingsKey="false"
+        >
+            <switch>
+                <!-- When this qwerty keyboard has no voice key but voice key is enabled, then
+                     symbol keyboard will have mic key. That means we should use "?123mic" key here.
+                     -->
+                <case
+                    latin:voiceKeyEnabled="true"
+                    latin:hasVoiceKey="false"
+                >
+                    <Key
+                        latin:codes="@integer/key_symbol"
+                        latin:keyIcon="@drawable/sym_keyboard_123_mic"
+                        latin:iconPreview="@drawable/sym_keyboard_feedback_123_mic"
+                        latin:keyWidth="20%p"
+                        latin:isModifier="true"
+                        latin:keyEdgeFlags="left" />
+                </case>
+                <default>
+                    <Key
+                        latin:codes="@integer/key_symbol"
+                        latin:keyLabel="@string/label_symbol_key"
+                        latin:keyWidth="20%p"
+                        latin:isModifier="true"
+                        latin:keyEdgeFlags="left" />
+                </default>
+            </switch>
+        </case>
+        <case
+            latin:hasSettingsKey="true"
+        >
+            <switch>
+                <!-- When this qwerty keyboard has no voice key but voice key is enabled, then
+                     symbol keyboard will have mic key. That means we should use "?123mic" key here.
+                     -->
+                <case
+                    latin:voiceKeyEnabled="true"
+                    latin:hasVoiceKey="false"
+                >
+                    <Key
+                        latin:codes="@integer/key_symbol"
+                        latin:keyIcon="@drawable/sym_keyboard_123_mic"
+                        latin:iconPreview="@drawable/sym_keyboard_feedback_123_mic"
+                        latin:keyWidth="15%p"
+                        latin:isModifier="true"
+                        latin:keyEdgeFlags="left" />
+                </case>
+                <default>
+                    <Key
+                        latin:codes="@integer/key_symbol"
+                        latin:keyLabel="@string/label_symbol_key"
+                        latin:keyWidth="15%p"
+                        latin:isModifier="true"
+                        latin:keyEdgeFlags="left" />
+                </default>
+            </switch>
+        </case>
+    </switch>
+</merge>
diff --git a/java/res/xml/kbd_symbols_black_f1.xml b/java/res/xml/kbd_symbols_black_f1.xml
new file mode 100644
index 0000000..353b007
--- /dev/null
+++ b/java/res/xml/kbd_symbols_black_f1.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2010, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+    <switch>
+        <case
+            latin:hasVoiceKey="true"
+        >
+            <Key
+                latin:codes="@integer/key_voice"
+                latin:popupKeyboard="@xml/popup_mic"
+                latin:keyIcon="@drawable/sym_bkeyboard_mic"
+                latin:iconPreview="@drawable/sym_keyboard_feedback_mic"
+                latin:keyHintIcon="@drawable/hint_popup"
+                latin:isModifier="true" />
+        </case>
+        <case
+            latin:hasVoiceKey="false"
+        >
+            <Key
+                latin:keyLabel=","
+                latin:popupKeyboard="@xml/popup_comma"
+                latin:keyHintIcon="@drawable/hint_popup"
+                latin:isModifier="true" />
+        </case>
+    </switch>
+</merge>
diff --git a/java/res/xml/kbd_symbols_black_row4.xml b/java/res/xml/kbd_symbols_black_row4.xml
index d1ed527..a50f8c0 100644
--- a/java/res/xml/kbd_symbols_black_row4.xml
+++ b/java/res/xml/kbd_symbols_black_row4.xml
@@ -26,15 +26,15 @@
     >
         <switch>
             <case
-                latin:settingsKey="false"
+                latin:hasSettingsKey="false"
             >
                 <Key
                     latin:codes="@integer/key_symbol"
                     latin:keyLabel="@string/label_alpha_key"
                     latin:keyWidth="20%p"
                     latin:keyEdgeFlags="left" />
-                <Key
-                    latin:codes="@integer/key_f1" />
+                <include
+                    latin:keyboardLayout="@xml/kbd_symbols_black_f1" />
                 <Key
                     latin:codes="@integer/key_space"
                     latin:keyIcon="@drawable/sym_bkeyboard_space"
@@ -67,7 +67,7 @@
                 </switch>
             </case>
             <case
-                latin:settingsKey="true"
+                latin:hasSettingsKey="true"
             >
                 <Key
                     latin:codes="@integer/key_symbol"
@@ -78,8 +78,8 @@
                     latin:codes="@integer/key_settings"
                     latin:keyIcon="@drawable/sym_bkeyboard_settings"
                     latin:iconPreview="@drawable/sym_keyboard_feedback_settings" />
-                <Key
-                    latin:codes="@integer/key_f1" />
+                <include
+                    latin:keyboardLayout="@xml/kbd_symbols_black_f1" />
                 <Key
                     latin:codes="@integer/key_space"
                     latin:keyIcon="@drawable/sym_bkeyboard_space"
diff --git a/java/res/xml/kbd_symbols_f1.xml b/java/res/xml/kbd_symbols_f1.xml
new file mode 100644
index 0000000..39c411a
--- /dev/null
+++ b/java/res/xml/kbd_symbols_f1.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2010, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+    <switch>
+        <case
+            latin:hasVoiceKey="true"
+        >
+            <Key
+                latin:codes="@integer/key_voice"
+                latin:popupKeyboard="@xml/popup_mic"
+                latin:keyIcon="@drawable/sym_keyboard_mic"
+                latin:iconPreview="@drawable/sym_keyboard_feedback_mic"
+                latin:keyHintIcon="@drawable/hint_popup"
+                latin:isModifier="true" />
+        </case>
+        <case
+            latin:hasVoiceKey="false"
+        >
+            <Key
+                latin:keyLabel=","
+                latin:popupKeyboard="@xml/popup_comma"
+                latin:keyHintIcon="@drawable/hint_popup"
+                latin:isModifier="true" />
+        </case>
+    </switch>
+</merge>
diff --git a/java/res/xml/kbd_symbols_row4.xml b/java/res/xml/kbd_symbols_row4.xml
index 4b3dd90..f012a4d 100644
--- a/java/res/xml/kbd_symbols_row4.xml
+++ b/java/res/xml/kbd_symbols_row4.xml
@@ -26,7 +26,7 @@
     >
         <switch>
             <case
-                latin:settingsKey="false"
+                latin:hasSettingsKey="false"
             >
                 <Key
                     latin:codes="@integer/key_symbol"
@@ -34,9 +34,8 @@
                     latin:keyWidth="20%p"
                     latin:isModifier="true"
                     latin:keyEdgeFlags="left" />
-                <Key
-                    latin:codes="@integer/key_f1"
-                    latin:isModifier="true" />
+                <include
+                    latin:keyboardLayout="@xml/kbd_symbols_f1" />
                 <Key
                     latin:codes="@integer/key_space"
                     latin:keyIcon="@drawable/sym_keyboard_space"
@@ -73,7 +72,7 @@
                 </switch>
             </case>
             <case
-                latin:settingsKey="true"
+                latin:hasSettingsKey="true"
             >
                 <Key
                     latin:codes="@integer/key_symbol"
@@ -86,9 +85,8 @@
                     latin:keyIcon="@drawable/sym_keyboard_settings"
                     latin:iconPreview="@drawable/sym_keyboard_feedback_settings"
                     latin:isModifier="true" />
-                <Key
-                    latin:codes="@integer/key_f1"
-                    latin:isModifier="true" />
+                <include
+                    latin:keyboardLayout="@xml/kbd_symbols_f1" />
                 <Key
                     latin:codes="@integer/key_space"
                     latin:keyIcon="@drawable/sym_keyboard_space"
diff --git a/java/res/xml/kbd_symbols_shift_black_row4.xml b/java/res/xml/kbd_symbols_shift_black_row4.xml
index e18ab21..4e5ddcd 100644
--- a/java/res/xml/kbd_symbols_shift_black_row4.xml
+++ b/java/res/xml/kbd_symbols_shift_black_row4.xml
@@ -26,7 +26,7 @@
     >
         <switch>
             <case
-                latin:settingsKey="false"
+                latin:hasSettingsKey="false"
             >
                 <Key
                     latin:codes="@integer/key_symbol"
@@ -65,7 +65,7 @@
                 </switch>
             </case>
             <case
-                latin:settingsKey="true"
+                latin:hasSettingsKey="true"
             >
                 <Key
                     latin:codes="@integer/key_symbol"
diff --git a/java/res/xml/kbd_symbols_shift_row4.xml b/java/res/xml/kbd_symbols_shift_row4.xml
index f0df130..170c8b9 100644
--- a/java/res/xml/kbd_symbols_shift_row4.xml
+++ b/java/res/xml/kbd_symbols_shift_row4.xml
@@ -26,7 +26,7 @@
     >
         <switch>
             <case
-                latin:settingsKey="false"
+                latin:hasSettingsKey="false"
             >
                 <Key
                     latin:codes="@integer/key_symbol"
@@ -71,7 +71,7 @@
                 </switch>
             </case>
             <case
-                latin:settingsKey="true"
+                latin:hasSettingsKey="true"
             >
                 <Key
                     latin:codes="@integer/key_symbol"
diff --git a/java/src/com/android/inputmethod/latin/BaseKeyboardParser.java b/java/src/com/android/inputmethod/latin/BaseKeyboardParser.java
index 276abfc..1aee2fc 100644
--- a/java/src/com/android/inputmethod/latin/BaseKeyboardParser.java
+++ b/java/src/com/android/inputmethod/latin/BaseKeyboardParser.java
@@ -107,7 +107,6 @@
 public class BaseKeyboardParser {
     private static final String TAG = "BaseKeyboardParser";
     private static final boolean DEBUG_TAG = false;
-    private static final boolean DEBUG_PARSER = false;
 
     // Keyboard XML Tags
     private static final String TAG_KEYBOARD = "Keyboard";
@@ -144,7 +143,6 @@
 
     public void parseKeyboard(XmlResourceParser parser)
             throws XmlPullParserException, IOException {
-        if (DEBUG_PARSER) debugEnterMethod("parseKeyboard", false);
         int event;
         while ((event = parser.next()) != XmlResourceParser.END_DOCUMENT) {
             if (event == XmlResourceParser.START_TAG) {
@@ -159,7 +157,6 @@
                 }
             }
         }
-        if (DEBUG_PARSER) debugLeaveMethod("parseKeyboard", false);
     }
 
     private void parseKeyboardAttributes(XmlResourceParser parser) {
@@ -181,7 +178,6 @@
 
     private void parseKeyboardContent(XmlResourceParser parser, List<Key> keys)
             throws XmlPullParserException, IOException {
-        if (DEBUG_PARSER) debugEnterMethod("parseKeyboardContent", keys == null);
         int event;
         while ((event = parser.next()) != XmlResourceParser.END_DOCUMENT) {
             if (event == XmlResourceParser.START_TAG) {
@@ -214,12 +210,10 @@
                 }
             }
         }
-        if (DEBUG_PARSER) debugLeaveMethod("parseKeyboardContent", keys == null);
     }
 
     private void parseRowContent(XmlResourceParser parser, Row row, List<Key> keys)
             throws XmlPullParserException, IOException {
-        if (DEBUG_PARSER) debugEnterMethod("parseRowContent", keys == null);
         int event;
         while ((event = parser.next()) != XmlResourceParser.END_DOCUMENT) {
             if (event == XmlResourceParser.START_TAG) {
@@ -252,12 +246,10 @@
                 }
             }
         }
-        if (DEBUG_PARSER) debugLeaveMethod("parseRowContent", keys == null);
     }
 
     private void parseKey(XmlResourceParser parser, Row row, List<Key> keys)
             throws XmlPullParserException, IOException {
-        if (DEBUG_PARSER) debugEnterMethod("parseKey", keys == null);
         if (keys == null) {
             checkEndTag(TAG_KEY, parser);
         } else {
@@ -272,7 +264,6 @@
 
     private void parseSpacer(XmlResourceParser parser, List<Key> keys)
             throws XmlPullParserException, IOException {
-        if (DEBUG_PARSER) debugEnterMethod("parseSpacer", keys == null);
         if (keys == null) {
             checkEndTag(TAG_SPACER, parser);
         } else {
@@ -288,16 +279,12 @@
 
     private void parseIncludeKeyboardContent(XmlResourceParser parser, List<Key> keys)
             throws XmlPullParserException, IOException {
-        if (DEBUG_PARSER) debugEnterMethod("parseIncludeKeyboardContent", keys == null);
         parseIncludeInternal(parser, null, keys);
-        if (DEBUG_PARSER) debugLeaveMethod("parseIncludeKeyboardContent", keys == null);
     }
 
     private void parseIncludeRowContent(XmlResourceParser parser, Row row, List<Key> keys)
             throws XmlPullParserException, IOException {
-        if (DEBUG_PARSER) debugEnterMethod("parseIncludeRowContent", keys == null);
         parseIncludeInternal(parser, row, keys);
-        if (DEBUG_PARSER) debugLeaveMethod("parseIncludeRowContent", keys == null);
     }
 
     private void parseIncludeInternal(XmlResourceParser parser, Row row, List<Key> keys)
@@ -320,7 +307,6 @@
 
     private void parseMerge(XmlResourceParser parser, Row row, List<Key> keys)
             throws XmlPullParserException, IOException {
-        if (DEBUG_PARSER) debugEnterMethod("parseMerge", keys == null);
         int event;
         while ((event = parser.next()) != XmlResourceParser.END_DOCUMENT) {
             if (event == XmlResourceParser.START_TAG) {
@@ -339,21 +325,16 @@
                 }
             }
         }
-        if (DEBUG_PARSER) debugLeaveMethod("parseMerge", keys == null);
     }
 
     private void parseSwitchKeyboardContent(XmlResourceParser parser, List<Key> keys)
             throws XmlPullParserException, IOException {
-        if (DEBUG_PARSER) debugEnterMethod("parseSwitchKeyboardContent", keys == null);
         parseSwitchInternal(parser, null, keys);
-        if (DEBUG_PARSER) debugLeaveMethod("parseSwitchKeyboardContent", keys == null);
     }
 
     private void parseSwitchRowContent(XmlResourceParser parser, Row row, List<Key> keys)
             throws XmlPullParserException, IOException {
-        if (DEBUG_PARSER) debugEnterMethod("parseSwitchRowContent", keys == null);
         parseSwitchInternal(parser, row, keys);
-        if (DEBUG_PARSER) debugLeaveMethod("parseSwitchRowContent", keys == null);
     }
 
     private void parseSwitchInternal(XmlResourceParser parser, Row row, List<Key> keys)
@@ -386,7 +367,6 @@
 
     private boolean parseCase(XmlResourceParser parser, Row row, List<Key> keys)
             throws XmlPullParserException, IOException {
-        if (DEBUG_PARSER) debugEnterMethod("parseCase", keys == null);
         final boolean selected = parseCaseCondition(parser);
         if (row == null) {
             // Processing Rows.
@@ -395,46 +375,67 @@
             // Processing Keys.
             parseRowContent(parser, row, selected ? keys : null);
         }
-        if (DEBUG_PARSER) debugLeaveMethod("parseCase", keys == null || !selected);
         return selected;
     }
 
     private boolean parseCaseCondition(XmlResourceParser parser) {
-        final BaseKeyboard keyboard = mKeyboard;
-        final TypedArray a = mResources.obtainAttributes(Xml.asAttributeSet(parser),
-                R.styleable.BaseKeyboard_Case);
-        final int mode = a.getInt(R.styleable.BaseKeyboard_Case_mode, -1);
-        final String settingsKey = a.getString(R.styleable.BaseKeyboard_Case_settingsKey);
-        final String voiceKey = a.getString(R.styleable.BaseKeyboard_Case_voiceKey);
-        a.recycle();
-
-        final KeyboardId id = keyboard.mId;
+        final KeyboardId id = mKeyboard.mId;
         if (id == null)
             return true;
-        final boolean modeMatched = (mode == -1 || id.mMode == mode);
-        final boolean settingsKeyMatched = (settingsKey == null
-                || id.mHasSettingsKey == Boolean.parseBoolean(settingsKey));
-        final boolean voiceKeyMatched = (voiceKey == null
-                || id.mHasVoiceKey == Boolean.parseBoolean(voiceKey));
-        final boolean selected = modeMatched && settingsKeyMatched && voiceKeyMatched;
-        if (DEBUG_TAG) {
+
+        final TypedArray a = mResources.obtainAttributes(Xml.asAttributeSet(parser),
+                R.styleable.BaseKeyboard_Case);
+        try {
+            final boolean modeMatched = matchInteger(
+                    a, R.styleable.BaseKeyboard_Case_mode, id.mMode);
+            final boolean settingsKeyMatched = matchBoolean(
+                    a, R.styleable.BaseKeyboard_Case_hasSettingsKey, id.mHasSettingsKey);
+            final boolean voiceEnabledMatched = matchBoolean(
+                    a, R.styleable.BaseKeyboard_Case_voiceKeyEnabled, id.mVoiceKeyEnabled);
+            final boolean voiceKeyMatched = matchBoolean(
+                    a, R.styleable.BaseKeyboard_Case_hasVoiceKey, id.mHasVoiceKey);
+
+            final boolean selected = modeMatched && settingsKeyMatched
+                    && voiceEnabledMatched && voiceKeyMatched;
+
+            if (DEBUG_TAG) {
             Log.d(TAG, "parseCaseCondition: " + Boolean.toString(selected).toUpperCase()
-                    + (mode != -1 ? " mode=" + mode : "")
-                    + (settingsKey != null ? " settingsKey="+settingsKey : "")
-                    + (voiceKey != null ? " voiceKey=" + voiceKey : ""));
+                    + debugInteger(a,
+                            R.styleable.BaseKeyboard_Case_mode, "mode")
+                    + debugBoolean(a,
+                            R.styleable.BaseKeyboard_Case_hasSettingsKey, "hasSettingsKey")
+                    + debugBoolean(a,
+                            R.styleable.BaseKeyboard_Case_voiceKeyEnabled, "voiceKeyEnabled")
+                    + debugBoolean(a,
+                            R.styleable.BaseKeyboard_Case_hasVoiceKey, "hasVoiceKey")
+                    );
+            }
+
+            return selected;
+        } finally {
+            a.recycle();
         }
-        return selected;
+    }
+
+    private static boolean matchInteger(TypedArray a, int index, int value) {
+        // If <case> does not have "index" attribute, that means this <case> is wild-card for the
+        // attribute.
+        return !a.hasValue(index) || a.getInt(index, 0) == value;
+    }
+
+    private static boolean matchBoolean(TypedArray a, int index, boolean value) {
+        // If <case> does not have "index" attribute, that means this <case> is wild-card for the
+        // attribute.
+        return !a.hasValue(index) || a.getBoolean(index, false) == value;
     }
 
     private boolean parseDefault(XmlResourceParser parser, Row row, List<Key> keys)
             throws XmlPullParserException, IOException {
-        if (DEBUG_PARSER) debugEnterMethod("parseDefault", keys == null);
         if (row == null) {
             parseKeyboardContent(parser, keys);
         } else {
             parseRowContent(parser, row, keys);
         }
-        if (DEBUG_PARSER) debugLeaveMethod("parseDefault", keys == null);
         return true;
     }
 
@@ -512,14 +513,6 @@
         }
     }
 
-    private static void debugEnterMethod(String title, boolean skip) {
-        Log.d(TAG, title + ": enter" + (skip ? " skip" : ""));
-    }
-
-    private static void debugLeaveMethod(String title, boolean skip) {
-        Log.d(TAG, title + ": leave" + (skip ? " skip" : ""));
-    }
-
     private static void debugStartTag(String title, String tag, boolean skip) {
         Log.d(TAG, title + ": <" + tag + ">" + (skip ? " skip" : ""));
     }
@@ -527,4 +520,12 @@
     private static void debugEndTag(String title, String tag, boolean skip) {
         Log.d(TAG, title + ": </" + tag + ">" + (skip ? " skip" : ""));
     }
- }
+
+    private static String debugInteger(TypedArray a, int index, String name) {
+        return a.hasValue(index) ? name + "=" + a.getInt(index, 0) : "";
+    }
+
+    private static String debugBoolean(TypedArray a, int index, String name) {
+        return a.hasValue(index) ? name + "=" + a.getBoolean(index, false) : "";
+    }
+}
diff --git a/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java b/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
index 7ae597f..08ff41b 100644
--- a/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
+++ b/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
@@ -98,7 +98,7 @@
     /** mIsAutoCompletionActive indicates that auto completed word will be input instead of
      * what user actually typed. */
     private boolean mIsAutoCompletionActive;
-    private boolean mVoiceButtonEnabled;
+    private boolean mVoiceKeyEnabled;
     private boolean mVoiceButtonOnPrimary;
     private int mSymbolsModeState = SYMBOLS_MODE_STATE_NONE;
 
@@ -139,12 +139,13 @@
         final int mode = mMode;
         final int colorScheme = getCharColorId();
         final boolean hasSettingsKey = mHasSettingsKey;
-        final boolean hasVoiceKey = mVoiceButtonEnabled && !mVoiceButtonOnPrimary;
+        final boolean voiceKeyEnabled = mVoiceKeyEnabled;
+        final boolean hasVoiceKey = voiceKeyEnabled && !mVoiceButtonOnPrimary;
         final int imeOptions = mImeOptions;
-        mSymbolsId = new KeyboardId(locale, orientation, mode,
-                KBD_SYMBOLS, colorScheme, hasSettingsKey, hasVoiceKey, imeOptions, true);
-        mSymbolsShiftedId = new KeyboardId(locale, orientation, mode,
-                KBD_SYMBOLS_SHIFT, colorScheme, hasSettingsKey, hasVoiceKey, imeOptions, true);
+        mSymbolsId = new KeyboardId(locale, orientation, mode, KBD_SYMBOLS,
+                colorScheme, hasSettingsKey, voiceKeyEnabled, hasVoiceKey, imeOptions, true);
+        mSymbolsShiftedId = new KeyboardId(locale, orientation, mode, KBD_SYMBOLS_SHIFT,
+                colorScheme, hasSettingsKey, voiceKeyEnabled, hasVoiceKey, imeOptions, true);
     }
 
     /**
@@ -158,6 +159,7 @@
         public final int[] mXmlArray;
         public final int mColorScheme;
         public final boolean mHasSettingsKey;
+        public final boolean mVoiceKeyEnabled;
         public final boolean mHasVoiceKey;
         public final int mImeOptions;
         public final boolean mEnableShiftLock;
@@ -165,14 +167,15 @@
         private final int mHashCode;
 
         public KeyboardId(Locale locale, int orientation, int mode,
-                int[] xmlArray, int colorScheme, boolean hasSettingsKey, boolean hasVoiceKey,
-                int imeOptions, boolean enableShiftLock) {
+                int[] xmlArray, int colorScheme, boolean hasSettingsKey, boolean voiceKeyEnabled,
+                boolean hasVoiceKey, int imeOptions, boolean enableShiftLock) {
             this.mLocale = locale;
             this.mOrientation = orientation;
             this.mMode = mode;
             this.mXmlArray = xmlArray;
             this.mColorScheme = colorScheme;
             this.mHasSettingsKey = hasSettingsKey;
+            this.mVoiceKeyEnabled = voiceKeyEnabled;
             this.mHasVoiceKey = hasVoiceKey;
             this.mImeOptions = imeOptions;
             this.mEnableShiftLock = enableShiftLock;
@@ -184,6 +187,7 @@
                     xmlArray,
                     colorScheme,
                     hasSettingsKey,
+                    voiceKeyEnabled,
                     hasVoiceKey,
                     imeOptions,
                     enableShiftLock,
@@ -210,6 +214,7 @@
                 && other.mXmlArray == this.mXmlArray
                 && other.mColorScheme == this.mColorScheme
                 && other.mHasSettingsKey == this.mHasSettingsKey
+                && other.mVoiceKeyEnabled == this.mVoiceKeyEnabled
                 && other.mHasVoiceKey == this.mHasVoiceKey
                 && other.mImeOptions == this.mImeOptions
                 && other.mEnableShiftLock == this.mEnableShiftLock;
@@ -222,7 +227,7 @@
 
         @Override
         public String toString() {
-            return String.format("[%s %s %5s imeOptions=0x%08x xml=0x%08x %s%s%s%s]",
+            return String.format("[%s %s %5s imeOptions=0x%08x xml=0x%08x %s%s%s%s%s]",
                     mLocale,
                     (mOrientation == 1 ? "port" : "land"),
                     modeName(mMode),
@@ -230,6 +235,7 @@
                     mXmlArray[0],
                     (mColorScheme == CHAR_THEME_COLOR_WHITE ? "white" : "black"),
                     (mHasSettingsKey ? " hasSettingsKey" : ""),
+                    (mVoiceKeyEnabled ? " voiceKeyEnabled" : ""),
                     (mHasVoiceKey ? " hasVoiceKey" : ""),
                     (mEnableShiftLock ? " enableShiftLock" : ""));
         }
@@ -248,14 +254,14 @@
     }
 
     private boolean hasVoiceKey(boolean isSymbols) {
-        return mVoiceButtonEnabled && (isSymbols != mVoiceButtonOnPrimary);
+        return mVoiceKeyEnabled && (isSymbols != mVoiceButtonOnPrimary);
     }
 
-    public void loadKeyboard(int mode, int imeOptions, boolean voiceButtonEnabled,
+    public void loadKeyboard(int mode, int imeOptions, boolean voiceKeyEnabled,
             boolean voiceButtonOnPrimary) {
         mSymbolsModeState = SYMBOLS_MODE_STATE_NONE;
         try {
-            loadKeyboardInternal(mode, imeOptions, voiceButtonEnabled, voiceButtonOnPrimary,
+            loadKeyboardInternal(mode, imeOptions, voiceKeyEnabled, voiceButtonOnPrimary,
                     false);
         } catch (RuntimeException e) {
             Log.w(TAG, e);
@@ -270,7 +276,7 @@
 
         mMode = mode;
         mImeOptions = imeOptions;
-        mVoiceButtonEnabled = voiceButtonEnabled;
+        mVoiceKeyEnabled = voiceButtonEnabled;
         mVoiceButtonOnPrimary = voiceButtonOnPrimary;
         mIsSymbols = isSymbols;
         // Update the settings key state because number of enabled IMEs could have been changed
@@ -298,11 +304,7 @@
             final Locale savedLocale =  mSubtypeSwitcher.changeSystemLocale(
                     mSubtypeSwitcher.getInputLocale());
 
-            final int xml = id.getXmlId();
             keyboard = new LatinKeyboard(mInputMethodService, id);
-            keyboard.setVoiceMode(
-                    hasVoiceKey(xml == R.xml.kbd_symbols || xml == R.xml.kbd_symbols_black),
-                    mVoiceButtonEnabled);
             keyboard.setImeOptions(res, id.mMode, id.mImeOptions);
             keyboard.setColorOfSymbolIcons(isBlackSym(id.mColorScheme));
 
@@ -340,8 +342,8 @@
         }
         final int orientation = mInputMethodService.getResources().getConfiguration().orientation;
         final Locale locale = mSubtypeSwitcher.getInputLocale();
-        return new KeyboardId(locale, orientation, mode, xmlArray,
-                charColorId, mHasSettingsKey, hasVoiceKey, imeOptions, enableShiftLock);
+        return new KeyboardId(locale, orientation, mode, xmlArray, charColorId,
+                mHasSettingsKey, mVoiceKeyEnabled, hasVoiceKey, imeOptions, enableShiftLock);
     }
 
     public int getKeyboardMode() {
@@ -605,7 +607,7 @@
     }
 
     private void toggleKeyboardMode() {
-        loadKeyboardInternal(mMode, mImeOptions, mVoiceButtonEnabled, mVoiceButtonOnPrimary,
+        loadKeyboardInternal(mMode, mImeOptions, mVoiceKeyEnabled, mVoiceButtonOnPrimary,
                 !mIsSymbols);
         if (mIsSymbols) {
             mSymbolsModeState = SYMBOLS_MODE_STATE_BEGIN;
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index e24bc0e..9c7af35 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -200,7 +200,7 @@
     private boolean mLocaleSupportedForVoiceInput;
     private boolean mIsShowingHint;
     private int     mCorrectionMode;
-    private boolean mVoiceButtonEnabled;
+    private boolean mVoiceKeyEnabled;
     private boolean mVoiceButtonOnPrimary;
     private int     mOrientation;
     private List<CharSequence> mSuggestPuncList;
@@ -531,7 +531,7 @@
             final int mode = mKeyboardSwitcher.getKeyboardMode();
             final EditorInfo attribute = getCurrentInputEditorInfo();
             final int imeOptions = (attribute != null) ? attribute.imeOptions : 0;
-            mKeyboardSwitcher.loadKeyboard(mode, imeOptions, mVoiceButtonEnabled,
+            mKeyboardSwitcher.loadKeyboard(mode, imeOptions, mVoiceKeyEnabled,
                     mVoiceButtonOnPrimary);
         }
 
@@ -679,8 +679,7 @@
         mJustAddedAutoSpace = false;
 
         loadSettings(attribute);
-        switcher.loadKeyboard(mode, attribute.imeOptions, mVoiceButtonEnabled,
-                mVoiceButtonOnPrimary);
+        switcher.loadKeyboard(mode, attribute.imeOptions, mVoiceKeyEnabled, mVoiceButtonOnPrimary);
         switcher.updateShiftState();
 
         setCandidatesViewShownInternal(isCandidateStripVisible(),
@@ -2222,7 +2221,7 @@
         final int mode = switcher.getKeyboardMode();
         final EditorInfo attribute = getCurrentInputEditorInfo();
         final int imeOptions = (attribute != null) ? attribute.imeOptions : 0;
-        switcher.loadKeyboard(mode, imeOptions, mVoiceButtonEnabled,
+        switcher.loadKeyboard(mode, imeOptions, mVoiceKeyEnabled,
                 mVoiceButtonOnPrimary);
         initSuggest();
         switcher.updateShiftState();
@@ -2468,7 +2467,7 @@
         if (VOICE_INSTALLED) {
             final String voiceMode = sp.getString(PREF_VOICE_MODE,
                     getString(R.string.voice_mode_main));
-            mVoiceButtonEnabled = !voiceMode.equals(getString(R.string.voice_mode_off))
+            mVoiceKeyEnabled = !voiceMode.equals(getString(R.string.voice_mode_off))
                     && shouldShowVoiceButton(makeFieldContext(), attribute);
             mVoiceButtonOnPrimary = voiceMode.equals(getString(R.string.voice_mode_main));
         }
diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboard.java b/java/src/com/android/inputmethod/latin/LatinKeyboard.java
index 6fcea22..1242818 100644
--- a/java/src/com/android/inputmethod/latin/LatinKeyboard.java
+++ b/java/src/com/android/inputmethod/latin/LatinKeyboard.java
@@ -52,29 +52,16 @@
     private Drawable mSpaceIcon;
     private Drawable mSpaceAutoCompletionIndicator;
     private Drawable mSpacePreviewIcon;
-    private Drawable mMicIcon;
-    private Drawable mMicPreviewIcon;
-    private Drawable m123MicIcon;
-    private Drawable m123MicPreviewIcon;
     private final Drawable mButtonArrowLeftIcon;
     private final Drawable mButtonArrowRightIcon;
     private Key mEnterKey;
-    private Key mF1Key;
-    private final Drawable mHintIcon;
     private Key mSpaceKey;
-    private Key m123Key;
     private int mSpaceKeyIndex = -1;
     private int mSpaceDragStartX;
     private int mSpaceDragLastDiff;
     private final Resources mRes;
     private final Context mContext;
-    private int mMode; // TODO: remove this and use the corresponding mode in the parent class
-    // Whether this keyboard has voice icon on it
-    private boolean mHasVoiceButton;
-    // Whether voice icon is enabled at all
-    private boolean mVoiceEnabled;
     private final boolean mIsAlphaKeyboard;
-    private CharSequence m123Label;
     private boolean mCurrentlyInSpace;
     private SlidingLocaleDrawable mSlidingLocaleIcon;
     private int[] mPrefLetterFrequencies;
@@ -112,22 +99,14 @@
         final Resources res = context.getResources();
         mContext = context;
         mRes = res;
-        mMode = id.mMode;
         mShiftedIcon = res.getDrawable(R.drawable.sym_keyboard_shift_locked);
         mShiftLockPreviewIcon = res.getDrawable(R.drawable.sym_keyboard_feedback_shift_locked);
         setDefaultBounds(mShiftLockPreviewIcon);
         mSpaceIcon = res.getDrawable(R.drawable.sym_keyboard_space);
         mSpaceAutoCompletionIndicator = res.getDrawable(R.drawable.sym_keyboard_space_led);
         mSpacePreviewIcon = res.getDrawable(R.drawable.sym_keyboard_feedback_space);
-        mMicIcon = res.getDrawable(R.drawable.sym_keyboard_mic);
-        mMicPreviewIcon = res.getDrawable(R.drawable.sym_keyboard_feedback_mic);
-        setDefaultBounds(mMicPreviewIcon);
         mButtonArrowLeftIcon = res.getDrawable(R.drawable.sym_keyboard_language_arrows_left);
         mButtonArrowRightIcon = res.getDrawable(R.drawable.sym_keyboard_language_arrows_right);
-        m123MicIcon = res.getDrawable(R.drawable.sym_keyboard_123_mic);
-        m123MicPreviewIcon = res.getDrawable(R.drawable.sym_keyboard_feedback_123_mic);
-        mHintIcon = res.getDrawable(R.drawable.hint_popup);
-        setDefaultBounds(m123MicPreviewIcon);
         sSpacebarVerticalCorrection = res.getDimensionPixelOffset(
                 R.dimen.spacebar_vertical_correction);
         final int xmlLayoutResId = id.getXmlId();
@@ -154,16 +133,9 @@
         case LatinIME.KEYCODE_ENTER:
             mEnterKey = key;
             break;
-        case LatinKeyboardView.KEYCODE_F1:
-            mF1Key = key;
-            break;
         case LatinIME.KEYCODE_SPACE:
             mSpaceKey = key;
             break;
-        case KEYCODE_MODE_CHANGE:
-            m123Key = key;
-            m123Label = key.label;
-            break;
         }
 
         return key;
@@ -180,7 +152,6 @@
     }
 
     public void setImeOptions(Resources res, int mode, int options) {
-        mMode = mode;
         if (mEnterKey == null)
             return;
         final boolean configDynamicKeyTopEnterKey = res.getBoolean(
@@ -290,87 +261,10 @@
         if (isBlack) {
             mShiftedIcon = res.getDrawable(R.drawable.sym_bkeyboard_shift_locked);
             mSpaceIcon = res.getDrawable(R.drawable.sym_bkeyboard_space);
-            mMicIcon = res.getDrawable(R.drawable.sym_bkeyboard_mic);
-            m123MicIcon = res.getDrawable(R.drawable.sym_bkeyboard_123_mic);
         } else {
             mShiftedIcon = res.getDrawable(R.drawable.sym_keyboard_shift_locked);
             mSpaceIcon = res.getDrawable(R.drawable.sym_keyboard_space);
-            mMicIcon = res.getDrawable(R.drawable.sym_keyboard_mic);
-            m123MicIcon = res.getDrawable(R.drawable.sym_keyboard_123_mic);
         }
-        updateDynamicKeys();
-    }
-
-    public void setVoiceMode(boolean hasVoiceButton, boolean hasVoice) {
-        mHasVoiceButton = hasVoiceButton;
-        mVoiceEnabled = hasVoice;
-        updateDynamicKeys();
-    }
-
-    private void updateDynamicKeys() {
-        update123Key();
-        updateF1Key();
-    }
-
-    private void update123Key() {
-        final boolean configDynamicKeyTopSymbolKey = mRes.getBoolean(
-                R.bool.config_dynamic_key_top_symbol_key);
-        // Update KEYCODE_MODE_CHANGE key only on alphabet mode, not on symbol mode.
-        if (m123Key != null && mIsAlphaKeyboard) {
-            if (configDynamicKeyTopSymbolKey && mVoiceEnabled && !mHasVoiceButton) {
-                m123Key.icon = m123MicIcon;
-                m123Key.iconPreview = m123MicPreviewIcon;
-                m123Key.label = null;
-            } else {
-                m123Key.icon = null;
-                m123Key.iconPreview = null;
-                m123Key.label = m123Label;
-            }
-        }
-    }
-
-    private void updateF1Key() {
-        // Update KEYCODE_F1 key. Please note that some keyboard layouts have no F1 key.
-        if (mF1Key == null)
-            return;
-
-        if (mIsAlphaKeyboard) {
-            if (mMode == KeyboardSwitcher.MODE_URL) {
-                setNonMicF1Key(mF1Key, "/", R.xml.popup_slash);
-            } else if (mMode == KeyboardSwitcher.MODE_EMAIL) {
-                setNonMicF1Key(mF1Key, "@", R.xml.popup_at);
-            } else {
-                if (mVoiceEnabled && mHasVoiceButton) {
-                    setMicF1Key(mF1Key);
-                } else {
-                    setNonMicF1Key(mF1Key, ",", R.xml.popup_comma);
-                }
-            }
-        } else {  // Symbols keyboard
-            if (mVoiceEnabled && mHasVoiceButton) {
-                setMicF1Key(mF1Key);
-            } else {
-                setNonMicF1Key(mF1Key, ",", R.xml.popup_comma);
-            }
-        }
-    }
-
-    private void setMicF1Key(Key key) {
-        key.label = null;
-        key.codes = new int[] { LatinKeyboardView.KEYCODE_VOICE };
-        key.popupResId = R.xml.popup_mic;
-        key.icon = mMicIcon;
-        key.hintIcon = mHintIcon;
-        key.iconPreview = mMicPreviewIcon;
-    }
-
-    private void setNonMicF1Key(Key key, String label, int popupResId) {
-        key.label = label;
-        key.codes = new int[] { label.charAt(0) };
-        key.popupResId = popupResId;
-        key.icon = null;
-        key.hintIcon = mHintIcon;
-        key.iconPreview = null;
     }
 
     /**
diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardView.java
index a215621..fb8b69e 100644
--- a/java/src/com/android/inputmethod/latin/LatinKeyboardView.java
+++ b/java/src/com/android/inputmethod/latin/LatinKeyboardView.java
@@ -34,8 +34,8 @@
 
     public static final int KEYCODE_OPTIONS = -100;
     public static final int KEYCODE_OPTIONS_LONGPRESS = -101;
+    // TODO: remove this once LatinIME stops referring to this.
     public static final int KEYCODE_VOICE = -102;
-    public static final int KEYCODE_F1 = -103;
     public static final int KEYCODE_NEXT_LANGUAGE = -104;
     public static final int KEYCODE_PREV_LANGUAGE = -105;
     public static final int KEYCODE_CAPSLOCK = -106;
