Setting to move microphone to secondary keyboard.

Microphone button can be optionally moved to the symbols keyboard
to get your comma back. You can also completely disable voice input.

Now you can get your comma back but still use the swipe gesture to
activate voice input.
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 90cd6d4..85de322 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -252,6 +252,12 @@
     <!-- Preferences item for enabling speech input -->
     <string name="enable_voice">Voice input</string>
 
+    <!-- Preferences item for speech icon on primary keyboard -->
+    <string name="voice_on_primary">Mic on primary</string>
+
+    <!-- Preferences item summary for speech icon on primary keyboard -->
+    <string name="voice_on_primary_summary">Show the microphone on the primary keyboard</string>
+
     <!-- Press the "enter" key after the user speaks. Option on settings.-->
     <string name="auto_submit">Auto submit after voice</string>
 
diff --git a/res/xml-de/kbd_qwerty.xml b/res/xml-de/kbd_qwerty.xml
index 9e2f584..4e57c60 100755
--- a/res/xml-de/kbd_qwerty.xml
+++ b/res/xml-de/kbd_qwerty.xml
@@ -100,7 +100,7 @@
                 android:popupKeyboard="@xml/kbd_popup_template"
                 android:popupCharacters="_"
                 android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:codes="@integer/key_f1" android:keyIcon="@drawable/sym_keyboard_globe"
+        <Key android:codes="@integer/key_f1"
                 android:keyWidth="10%p"/>
         <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
                 android:iconPreview="@drawable/sym_keyboard_feedback_space"
@@ -112,24 +112,6 @@
                 android:keyWidth="20%p" android:keyEdgeFlags="right"/>
     </Row>
 
-    <Row android:keyboardMode="@+id/mode_normal_voice" android:rowEdgeFlags="bottom">
-        <Key android:codes="-2" android:keyLabel="@string/label_symbol_key" 
-                android:popupKeyboard="@xml/kbd_popup_template"
-                android:popupCharacters="_"
-                android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:codes="-102" android:keyIcon="@drawable/sym_keyboard_mic"
-                android:iconPreview="@drawable/sym_keyboard_feedback_mic"
-                android:keyWidth="10%p"/>
-        <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space" 
-                android:iconPreview="@drawable/sym_keyboard_feedback_space"
-                android:keyWidth="40%p" android:isRepeatable="true"/>
-        <Key android:codes="46" android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation" 
-                android:keyWidth="10%p"/>
-        <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return" 
-                android:iconPreview="@drawable/sym_keyboard_feedback_return"
-                android:keyWidth="20%p" android:keyEdgeFlags="right"/>
-    </Row>
-
     <Row android:keyboardMode="@+id/mode_url" android:rowEdgeFlags="bottom">
         <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
                 android:popupKeyboard="@xml/kbd_popup_template"
@@ -150,26 +132,6 @@
                 android:keyWidth="20%p" android:keyEdgeFlags="right"/>
     </Row>
 
-    <Row android:keyboardMode="@+id/mode_url_voice" android:rowEdgeFlags="bottom">
-        <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
-                android:popupKeyboard="@xml/kbd_popup_template"
-                android:popupCharacters="_"
-                android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:keyLabel="/" android:keyWidth="10%p"/>
-        <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
-                android:iconPreview="@drawable/sym_keyboard_feedback_space"
-                android:keyWidth="20%p" android:isRepeatable="true"/>
-        <Key android:keyLabel="@string/popular_domain_0"
-                android:keyOutputText="@string/popular_domain_0"
-                android:popupKeyboard="@xml/popup_domains"
-                android:keyWidth="20%p"/>
-        <Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"
-                android:keyWidth="10%p"/>
-        <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
-                android:iconPreview="@drawable/sym_keyboard_feedback_return"
-                android:keyWidth="20%p" android:keyEdgeFlags="right"/>
-    </Row>
-
     <Row android:keyboardMode="@+id/mode_email" android:rowEdgeFlags="bottom">
         <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
                 android:popupKeyboard="@xml/kbd_popup_template"
@@ -189,25 +151,6 @@
                 android:keyWidth="20%p" android:keyEdgeFlags="right"/>
     </Row>
 
-    <Row android:keyboardMode="@+id/mode_email_voice" android:rowEdgeFlags="bottom">
-        <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
-                android:popupKeyboard="@xml/kbd_popup_template"
-                android:popupCharacters="_"
-                android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:keyLabel="\@"/>
-        <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
-                android:iconPreview="@drawable/sym_keyboard_feedback_space"
-                android:keyWidth="20%p" android:isRepeatable="true"/>
-        <Key android:keyLabel="@string/popular_domain_0"
-                android:keyOutputText="@string/popular_domain_0"
-                android:popupKeyboard="@xml/popup_domains"
-                android:keyWidth="20%p"/>
-        <Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"/>
-        <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
-                android:iconPreview="@drawable/sym_keyboard_feedback_return"
-                android:keyWidth="20%p" android:keyEdgeFlags="right"/>
-    </Row>
-
     <Row android:keyboardMode="@+id/mode_im" android:rowEdgeFlags="bottom">
         <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
                 android:popupKeyboard="@xml/kbd_popup_template"
@@ -225,24 +168,6 @@
                 android:keyWidth="20%p" android:keyEdgeFlags="right"/>
     </Row>
 
-    <Row android:keyboardMode="@+id/mode_im_voice" android:rowEdgeFlags="bottom">
-        <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
-                android:popupKeyboard="@xml/kbd_popup_template"
-                android:popupCharacters="_"
-                android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:codes="-102" android:keyIcon="@drawable/sym_keyboard_mic"
-                android:iconPreview="@drawable/sym_keyboard_feedback_mic"
-                android:keyWidth="10%p"/>
-        <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
-                android:iconPreview="@drawable/sym_keyboard_feedback_space"
-                android:keyWidth="40%p" android:isRepeatable="true"/>
-        <Key android:codes="46" android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation" 
-                android:keyWidth="10%p"/>
-        <Key android:keyLabel=":-)" android:keyOutputText=":-) "
-                android:popupKeyboard="@xml/popup_smileys"
-                android:keyWidth="20%p" android:keyEdgeFlags="right"/>
-    </Row>
-
     <Row android:keyboardMode="@+id/mode_webentry" android:rowEdgeFlags="bottom">
         <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
                 android:popupKeyboard="@xml/kbd_popup_template"
@@ -261,24 +186,4 @@
                 android:iconPreview="@drawable/sym_keyboard_feedback_return"
                 android:keyWidth="20%p" android:keyEdgeFlags="right"/>
     </Row>
-
-    <Row android:keyboardMode="@+id/mode_webentry_voice" android:rowEdgeFlags="bottom">
-        <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
-                android:popupKeyboard="@xml/kbd_popup_template"
-                android:popupCharacters="_"
-                android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:codes="-102" android:keyIcon="@drawable/sym_keyboard_mic"
-                android:iconPreview="@drawable/sym_keyboard_feedback_mic"
-                android:keyWidth="10%p"/>
-        <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
-                android:iconPreview="@drawable/sym_keyboard_feedback_space"
-                android:keyWidth="20%p" android:isRepeatable="true"/>
-        <Key android:codes="9" android:keyIcon="@drawable/sym_keyboard_tab"
-                android:iconPreview="@drawable/sym_keyboard_feedback_tab"
-                android:keyWidth="20%p"/>
-        <Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"/>
-        <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
-                android:iconPreview="@drawable/sym_keyboard_feedback_return"
-                android:keyWidth="20%p" android:keyEdgeFlags="right"/>
-    </Row>
 </Keyboard>
diff --git a/res/xml-fr/kbd_qwerty.xml b/res/xml-fr/kbd_qwerty.xml
index 7abe18e..1b20c04 100644
--- a/res/xml-fr/kbd_qwerty.xml
+++ b/res/xml-fr/kbd_qwerty.xml
@@ -114,24 +114,6 @@
                 android:keyWidth="20%p" android:keyEdgeFlags="right"/>
     </Row>
 
-    <Row android:keyboardMode="@+id/mode_normal_voice" android:rowEdgeFlags="bottom">
-        <Key android:codes="-2" android:keyLabel="@string/label_symbol_key" 
-                android:popupKeyboard="@xml/kbd_popup_template"
-                android:popupCharacters="_"
-                android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:codes="-102" android:keyIcon="@drawable/sym_keyboard_mic"
-                android:iconPreview="@drawable/sym_keyboard_feedback_mic"
-                android:keyWidth="10%p"/>
-        <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space" 
-                android:iconPreview="@drawable/sym_keyboard_feedback_space"
-                android:keyWidth="40%p" android:isRepeatable="true"/>
-        <Key android:codes="46" android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation" 
-                android:keyWidth="10%p"/>
-        <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return" 
-                android:iconPreview="@drawable/sym_keyboard_feedback_return"
-                android:keyWidth="20%p" android:keyEdgeFlags="right"/>
-    </Row>
-
     <Row android:keyboardMode="@+id/mode_url" android:rowEdgeFlags="bottom">
         <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
                 android:popupKeyboard="@xml/kbd_popup_template"
@@ -152,26 +134,6 @@
                 android:keyWidth="20%p" android:keyEdgeFlags="right"/>
     </Row>
 
-    <Row android:keyboardMode="@+id/mode_url_voice" android:rowEdgeFlags="bottom">
-        <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
-                android:popupKeyboard="@xml/kbd_popup_template"
-                android:popupCharacters="_"
-                android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:keyLabel="/" android:keyWidth="10%p"/>
-        <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
-                android:iconPreview="@drawable/sym_keyboard_feedback_space"
-                android:keyWidth="20%p" android:isRepeatable="true"/>
-        <Key android:keyLabel="@string/popular_domain_0"
-                android:keyOutputText="@string/popular_domain_0"
-                android:popupKeyboard="@xml/popup_domains"
-                android:keyWidth="20%p"/>
-        <Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"
-                android:keyWidth="10%p"/>
-        <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
-                android:iconPreview="@drawable/sym_keyboard_feedback_return"
-                android:keyWidth="20%p" android:keyEdgeFlags="right"/>
-    </Row>
-
     <Row android:keyboardMode="@+id/mode_email" android:rowEdgeFlags="bottom">
         <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
                 android:popupKeyboard="@xml/kbd_popup_template"
@@ -191,25 +153,6 @@
                 android:keyWidth="20%p" android:keyEdgeFlags="right"/>
     </Row>
 
-    <Row android:keyboardMode="@+id/mode_email_voice" android:rowEdgeFlags="bottom">
-        <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
-                android:popupKeyboard="@xml/kbd_popup_template"
-                android:popupCharacters="_"
-                android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:keyLabel="\@"/>
-        <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
-                android:iconPreview="@drawable/sym_keyboard_feedback_space"
-                android:keyWidth="20%p" android:isRepeatable="true"/>
-        <Key android:keyLabel="@string/popular_domain_0"
-                android:keyOutputText="@string/popular_domain_0"
-                android:popupKeyboard="@xml/popup_domains"
-                android:keyWidth="20%p"/>
-        <Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"/>
-        <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
-                android:iconPreview="@drawable/sym_keyboard_feedback_return"
-                android:keyWidth="20%p" android:keyEdgeFlags="right"/>
-    </Row>
-
     <Row android:keyboardMode="@+id/mode_im" android:rowEdgeFlags="bottom">
         <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
                 android:popupKeyboard="@xml/kbd_popup_template"
@@ -227,24 +170,6 @@
                 android:keyWidth="20%p" android:keyEdgeFlags="right"/>
     </Row>
 
-    <Row android:keyboardMode="@+id/mode_im_voice" android:rowEdgeFlags="bottom">
-        <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
-                android:popupKeyboard="@xml/kbd_popup_template"
-                android:popupCharacters="_"
-                android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:codes="-102" android:keyIcon="@drawable/sym_keyboard_mic"
-                android:iconPreview="@drawable/sym_keyboard_feedback_mic"
-                android:keyWidth="10%p"/>
-        <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
-                android:iconPreview="@drawable/sym_keyboard_feedback_space"
-                android:keyWidth="40%p" android:isRepeatable="true"/>
-        <Key android:codes="46" android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation" 
-                android:keyWidth="10%p"/>
-        <Key android:keyLabel=":-)" android:keyOutputText=":-) "
-                android:popupKeyboard="@xml/popup_smileys"
-                android:keyWidth="20%p" android:keyEdgeFlags="right"/>
-    </Row>
-
     <Row android:keyboardMode="@+id/mode_webentry" android:rowEdgeFlags="bottom">
         <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
                 android:popupKeyboard="@xml/kbd_popup_template"
@@ -264,25 +189,5 @@
                 android:keyWidth="20%p" android:keyEdgeFlags="right"/>
     </Row>
 
-    <Row android:keyboardMode="@+id/mode_webentry_voice" android:rowEdgeFlags="bottom">
-        <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
-                android:popupKeyboard="@xml/kbd_popup_template"
-                android:popupCharacters="_"
-                android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:codes="-102" android:keyIcon="@drawable/sym_keyboard_mic"
-                android:iconPreview="@drawable/sym_keyboard_feedback_mic"
-                android:keyWidth="10%p"/>
-        <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
-                android:iconPreview="@drawable/sym_keyboard_feedback_space"
-                android:keyWidth="20%p" android:isRepeatable="true"/>
-        <Key android:codes="9" android:keyIcon="@drawable/sym_keyboard_tab"
-                android:iconPreview="@drawable/sym_keyboard_feedback_tab"
-                android:keyWidth="20%p"/>
-        <Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"/>
-        <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
-                android:iconPreview="@drawable/sym_keyboard_feedback_return"
-                android:keyWidth="20%p" android:keyEdgeFlags="right"/>
-    </Row>
-
 </Keyboard>
     
diff --git a/res/xml-ru/kbd_qwerty.xml b/res/xml-ru/kbd_qwerty.xml
index 8a3a592..45d355b 100755
--- a/res/xml-ru/kbd_qwerty.xml
+++ b/res/xml-ru/kbd_qwerty.xml
@@ -96,24 +96,6 @@
                 android:keyWidth="20%p" android:keyEdgeFlags="right"/>
     </Row>
 
-    <Row android:keyboardMode="@+id/mode_normal_voice" android:rowEdgeFlags="bottom">
-        <Key android:codes="-2" android:keyLabel="@string/label_symbol_key" 
-                android:popupKeyboard="@xml/kbd_popup_template"
-                android:popupCharacters="_"
-                android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:codes="-102" android:keyIcon="@drawable/sym_keyboard_mic"
-                android:iconPreview="@drawable/sym_keyboard_feedback_mic"
-                android:keyWidth="10%p"/>
-        <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space" 
-                android:iconPreview="@drawable/sym_keyboard_feedback_space"
-                android:keyWidth="40%p" android:isRepeatable="true"/>
-        <Key android:codes="46" android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation" 
-                android:keyWidth="10%p"/>
-        <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return" 
-                android:iconPreview="@drawable/sym_keyboard_feedback_return"
-                android:keyWidth="20%p" android:keyEdgeFlags="right"/>
-    </Row>
-
     <Row android:keyboardMode="@+id/mode_url" android:rowEdgeFlags="bottom">
         <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
                 android:popupKeyboard="@xml/kbd_popup_template"
@@ -134,26 +116,6 @@
                 android:keyWidth="20%p" android:keyEdgeFlags="right"/>
     </Row>
 
-    <Row android:keyboardMode="@+id/mode_url_voice" android:rowEdgeFlags="bottom">
-        <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
-                android:popupKeyboard="@xml/kbd_popup_template"
-                android:popupCharacters="_"
-                android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:keyLabel="/" android:keyWidth="10%p"/>
-        <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
-                android:iconPreview="@drawable/sym_keyboard_feedback_space"
-                android:keyWidth="20%p" android:isRepeatable="true"/>
-        <Key android:keyLabel="@string/popular_domain_0"
-                android:keyOutputText="@string/popular_domain_0"
-                android:popupKeyboard="@xml/popup_domains"
-                android:keyWidth="20%p"/>
-        <Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"
-                android:keyWidth="10%p"/>
-        <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
-                android:iconPreview="@drawable/sym_keyboard_feedback_return"
-                android:keyWidth="20%p" android:keyEdgeFlags="right"/>
-    </Row>
-
     <Row android:keyboardMode="@+id/mode_email" android:rowEdgeFlags="bottom">
         <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
                 android:popupKeyboard="@xml/kbd_popup_template"
@@ -173,25 +135,6 @@
                 android:keyWidth="20%p" android:keyEdgeFlags="right"/>
     </Row>
 
-    <Row android:keyboardMode="@+id/mode_email_voice" android:rowEdgeFlags="bottom">
-        <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
-                android:popupKeyboard="@xml/kbd_popup_template"
-                android:popupCharacters="_"
-                android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:keyLabel="\@" android:keyWidth="10%p"/>
-        <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
-                android:iconPreview="@drawable/sym_keyboard_feedback_space"
-                android:keyWidth="20%p" android:isRepeatable="true"/>
-        <Key android:keyLabel="@string/popular_domain_0"
-                android:keyOutputText="@string/popular_domain_0"
-                android:popupKeyboard="@xml/popup_domains"
-                android:keyWidth="20%p"/>
-        <Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"/>
-        <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
-                android:iconPreview="@drawable/sym_keyboard_feedback_return"
-                android:keyWidth="20%p" android:keyEdgeFlags="right"/>
-    </Row>
-
     <Row android:keyboardMode="@+id/mode_im" android:rowEdgeFlags="bottom">
         <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
                 android:popupKeyboard="@xml/kbd_popup_template"
@@ -209,24 +152,6 @@
                 android:keyWidth="20%p" android:keyEdgeFlags="right"/>
     </Row>
 
-    <Row android:keyboardMode="@+id/mode_im_voice" android:rowEdgeFlags="bottom">
-        <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
-                android:popupKeyboard="@xml/kbd_popup_template"
-                android:popupCharacters="_"
-                android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:codes="-102" android:keyIcon="@drawable/sym_keyboard_mic"
-                android:iconPreview="@drawable/sym_keyboard_feedback_mic"
-                android:keyWidth="10%p"/>
-        <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
-                android:iconPreview="@drawable/sym_keyboard_feedback_space"
-                android:keyWidth="40%p" android:isRepeatable="true"/>
-        <Key android:codes="46" android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation" 
-                android:keyWidth="10%p"/>
-        <Key android:keyLabel=":-)" android:keyOutputText=":-) "
-                android:popupKeyboard="@xml/popup_smileys"
-                android:keyWidth="20%p" android:keyEdgeFlags="right"/>
-    </Row>
-
     <Row android:keyboardMode="@+id/mode_webentry" android:rowEdgeFlags="bottom">
         <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
                 android:popupKeyboard="@xml/kbd_popup_template"
@@ -245,26 +170,5 @@
                 android:iconPreview="@drawable/sym_keyboard_feedback_return"
                 android:keyWidth="20%p" android:keyEdgeFlags="right"/>
     </Row>
-
-    <Row android:keyboardMode="@+id/mode_webentry_voice" android:rowEdgeFlags="bottom">
-        <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
-                android:popupKeyboard="@xml/kbd_popup_template"
-                android:popupCharacters="_"
-                android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:codes="-102" android:keyIcon="@drawable/sym_keyboard_mic"
-                android:iconPreview="@drawable/sym_keyboard_feedback_mic"
-                android:keyWidth="10%p"/>
-        <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
-                android:iconPreview="@drawable/sym_keyboard_feedback_space"
-                android:keyWidth="20%p" android:isRepeatable="true"/>
-        <Key android:codes="9" android:keyIcon="@drawable/sym_keyboard_tab"
-                android:iconPreview="@drawable/sym_keyboard_feedback_tab"
-                android:keyWidth="20%p"/>
-        <Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"/>
-        <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
-                android:iconPreview="@drawable/sym_keyboard_feedback_return"
-                android:keyWidth="20%p" android:keyEdgeFlags="right"/>
-    </Row>
-
 </Keyboard>
     
diff --git a/res/xml/kbd_qwerty.xml b/res/xml/kbd_qwerty.xml
index e0fe5cd..4aa4761 100755
--- a/res/xml/kbd_qwerty.xml
+++ b/res/xml/kbd_qwerty.xml
@@ -111,7 +111,8 @@
                 android:popupKeyboard="@xml/kbd_popup_template"
                 android:popupCharacters="_"
                 android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:codes="@integer/key_f1" android:keyIcon="@drawable/sym_keyboard_globe"
+        <Key android:codes="@integer/key_f1" android:keyIcon="@drawable/sym_keyboard_mic"
+                android:iconPreview="@drawable/sym_keyboard_feedback_mic"
                 android:keyWidth="10%p"/>
         <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
                 android:iconPreview="@drawable/sym_keyboard_feedback_space"
@@ -123,24 +124,6 @@
                 android:keyWidth="20%p" android:keyEdgeFlags="right"/>
     </Row>
 
-    <Row android:keyboardMode="@+id/mode_normal_voice" android:rowEdgeFlags="bottom">
-        <Key android:codes="-2" android:keyLabel="@string/label_symbol_key" 
-                android:popupKeyboard="@xml/kbd_popup_template"
-                android:popupCharacters="_"
-                android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:codes="-102" android:keyIcon="@drawable/sym_keyboard_mic"
-                android:iconPreview="@drawable/sym_keyboard_feedback_mic"
-                android:keyWidth="10%p"/>
-        <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space" 
-                android:iconPreview="@drawable/sym_keyboard_feedback_space"
-                android:keyWidth="40%p" android:isRepeatable="true"/>
-        <Key android:codes="46" android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation" 
-                android:keyWidth="10%p"/>
-        <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return" 
-                android:iconPreview="@drawable/sym_keyboard_feedback_return"
-                android:keyWidth="20%p" android:keyEdgeFlags="right"/>
-    </Row>
-
     <Row android:keyboardMode="@+id/mode_url" android:rowEdgeFlags="bottom">
         <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
                 android:popupKeyboard="@xml/kbd_popup_template"
@@ -161,26 +144,6 @@
                 android:keyWidth="20%p" android:keyEdgeFlags="right"/>
     </Row>
 
-    <Row android:keyboardMode="@+id/mode_url_voice" android:rowEdgeFlags="bottom">
-        <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
-                android:popupKeyboard="@xml/kbd_popup_template"
-                android:popupCharacters="_"
-                android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:keyLabel="/" android:keyWidth="10%p"/>
-        <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
-                android:iconPreview="@drawable/sym_keyboard_feedback_space"
-                android:keyWidth="20%p" android:isRepeatable="true"/>
-        <Key android:keyLabel="@string/popular_domain_0"
-                android:keyOutputText="@string/popular_domain_0"
-                android:popupKeyboard="@xml/popup_domains"
-                android:keyWidth="20%p"/>
-        <Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"
-                android:keyWidth="10%p"/>
-        <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
-                android:iconPreview="@drawable/sym_keyboard_feedback_return"
-                android:keyWidth="20%p" android:keyEdgeFlags="right"/>
-    </Row>
-
     <Row android:keyboardMode="@+id/mode_email" android:rowEdgeFlags="bottom">
         <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
                 android:popupKeyboard="@xml/kbd_popup_template"
@@ -200,48 +163,12 @@
                 android:keyWidth="20%p" android:keyEdgeFlags="right"/>
     </Row>
 
-    <Row android:keyboardMode="@+id/mode_email_voice" android:rowEdgeFlags="bottom">
-        <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
-                android:popupKeyboard="@xml/kbd_popup_template"
-                android:popupCharacters="_"
-                android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:keyLabel="\@"/>
-        <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
-                android:iconPreview="@drawable/sym_keyboard_feedback_space"
-                android:keyWidth="20%p" android:isRepeatable="true"/>
-        <Key android:keyLabel="@string/popular_domain_0"
-                android:keyOutputText="@string/popular_domain_0"
-                android:popupKeyboard="@xml/popup_domains"
-                android:keyWidth="20%p"/>
-        <Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"/>
-        <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
-                android:iconPreview="@drawable/sym_keyboard_feedback_return"
-                android:keyWidth="20%p" android:keyEdgeFlags="right"/>
-    </Row>
-
     <Row android:keyboardMode="@+id/mode_im" android:rowEdgeFlags="bottom">
         <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
                 android:popupKeyboard="@xml/kbd_popup_template"
                 android:popupCharacters="_"
                 android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:codes="@integer/key_f1" android:keyIcon="@drawable/sym_keyboard_globe"
-                android:keyWidth="10%p"/>
-        <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
-                android:iconPreview="@drawable/sym_keyboard_feedback_space"
-                android:keyWidth="40%p" android:isRepeatable="true"/>
-        <Key android:codes="46" android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation" 
-                android:keyWidth="10%p"/>
-        <Key android:keyLabel=":-)" android:keyOutputText=":-) "
-                android:popupKeyboard="@xml/popup_smileys"
-                android:keyWidth="20%p" android:keyEdgeFlags="right"/>
-    </Row>
-
-    <Row android:keyboardMode="@+id/mode_im_voice" android:rowEdgeFlags="bottom">
-        <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
-                android:popupKeyboard="@xml/kbd_popup_template"
-                android:popupCharacters="_"
-                android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:codes="-102" android:keyIcon="@drawable/sym_keyboard_mic"
+        <Key android:codes="@integer/key_f1" android:keyIcon="@drawable/sym_keyboard_mic"
                 android:iconPreview="@drawable/sym_keyboard_feedback_mic"
                 android:keyWidth="10%p"/>
         <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
@@ -259,26 +186,7 @@
                 android:popupKeyboard="@xml/kbd_popup_template"
                 android:popupCharacters="_"
                 android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:codes="@integer/key_f1" android:keyIcon="@drawable/sym_keyboard_globe"
-                android:keyWidth="10%p"/>
-        <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
-                android:iconPreview="@drawable/sym_keyboard_feedback_space"
-                android:keyWidth="20%p" android:isRepeatable="true"/>
-        <Key android:codes="9" android:keyIcon="@drawable/sym_keyboard_tab"
-                android:iconPreview="@drawable/sym_keyboard_feedback_tab"
-                android:keyWidth="20%p"/>
-        <Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"/>
-        <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
-                android:iconPreview="@drawable/sym_keyboard_feedback_return"
-                android:keyWidth="20%p" android:keyEdgeFlags="right"/>
-    </Row>
-
-    <Row android:keyboardMode="@+id/mode_webentry_voice" android:rowEdgeFlags="bottom">
-        <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
-                android:popupKeyboard="@xml/kbd_popup_template"
-                android:popupCharacters="_"
-                android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:codes="-102" android:keyIcon="@drawable/sym_keyboard_mic"
+        <Key android:codes="@integer/key_f1" android:keyIcon="@drawable/sym_keyboard_mic"
                 android:iconPreview="@drawable/sym_keyboard_feedback_mic"
                 android:keyWidth="10%p"/>
         <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
diff --git a/res/xml/kbd_symbols.xml b/res/xml/kbd_symbols.xml
index 5a30c7b..067932b 100755
--- a/res/xml/kbd_symbols.xml
+++ b/res/xml/kbd_symbols.xml
@@ -126,10 +126,7 @@
                 android:popupKeyboard="@xml/kbd_popup_template"
                 android:popupCharacters="_"
                 android:keyWidth="20%p" android:keyEdgeFlags="left"/>
-        <Key android:keyLabel="," android:keyWidth="10%p"
-                android:popupKeyboard="@xml/kbd_popup_template"
-                android:popupCharacters="‚„"
-        />
+        <Key android:codes="@integer/key_f1" android:keyWidth="10%p"/>
         <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
                 android:keyWidth="40%p"
                 android:iconPreview="@drawable/sym_keyboard_feedback_space"
diff --git a/res/xml/prefs.xml b/res/xml/prefs.xml
index 74a2bcb..4792c43 100644
--- a/res/xml/prefs.xml
+++ b/res/xml/prefs.xml
@@ -43,6 +43,16 @@
             android:persistent="false"
             android:defaultValue="@bool/voice_input_default"
             />
+
+    <CheckBoxPreference
+            android:key="voice_on_main"
+            android:title="@string/voice_on_primary"
+            android:summary="@string/voice_on_primary_summary"
+            android:persistent="true"
+            android:dependency="enable_voice_input"
+            android:defaultValue="@bool/voice_input_default"
+            />
+
     <PreferenceScreen
             android:title="@string/language_selection_title">
         <intent
diff --git a/src/com/android/inputmethod/latin/KeyboardSwitcher.java b/src/com/android/inputmethod/latin/KeyboardSwitcher.java
index 45d0a1e..ea473f2 100644
--- a/src/com/android/inputmethod/latin/KeyboardSwitcher.java
+++ b/src/com/android/inputmethod/latin/KeyboardSwitcher.java
@@ -67,16 +67,12 @@
     private KeyboardId mCurrentId;
     private Map<KeyboardId, LatinKeyboard> mKeyboards;
 
-    /**
-     * Maps keyboard mode to the equivalent mode with voice.
-     */
-    private Map<Integer, Integer> mModeToVoice;
-
     private int mMode; /** One of the MODE_XXX values */
     private int mImeOptions;
     private int mTextMode = MODE_TEXT_QWERTY;
     private boolean mIsSymbols;
     private boolean mHasVoice;
+    private boolean mVoiceOnPrimary;
     private boolean mPreferSymbols;
     private int mSymbolsModeState = SYMBOLS_MODE_STATE_NONE;
 
@@ -87,14 +83,8 @@
     KeyboardSwitcher(Context context, InputMethodService ims) {
         mContext = context;
         mKeyboards = new HashMap<KeyboardId, LatinKeyboard>();
-        mSymbolsId = new KeyboardId(R.xml.kbd_symbols);
-        mSymbolsShiftedId = new KeyboardId(R.xml.kbd_symbols_shift);
-        mModeToVoice = new HashMap<Integer, Integer>();
-        mModeToVoice.put(R.id.mode_normal, R.id.mode_normal_voice);
-        mModeToVoice.put(R.id.mode_url, R.id.mode_url_voice);
-        mModeToVoice.put(R.id.mode_email, R.id.mode_email_voice);
-        mModeToVoice.put(R.id.mode_im, R.id.mode_im_voice);
-        mModeToVoice.put(R.id.mode_webentry, R.id.mode_webentry_voice);
+        mSymbolsId = new KeyboardId(R.xml.kbd_symbols, false);
+        mSymbolsShiftedId = new KeyboardId(R.xml.kbd_symbols_shift, false);
         mInputMethodService = ims;
     }
 
@@ -122,8 +112,9 @@
         if (displayWidth == mLastDisplayWidth) return;
         mLastDisplayWidth = displayWidth;
         if (!forceCreate) mKeyboards.clear();
-        mSymbolsId = new KeyboardId(R.xml.kbd_symbols);
-        mSymbolsShiftedId = new KeyboardId(R.xml.kbd_symbols_shift);
+        mSymbolsId = new KeyboardId(R.xml.kbd_symbols, mHasVoice && !mVoiceOnPrimary);
+        mSymbolsShiftedId = new KeyboardId(R.xml.kbd_symbols_shift,
+                mHasVoice && !mVoiceOnPrimary);
     }
 
     /**
@@ -134,15 +125,17 @@
         public int mXml;
         public int mKeyboardMode; /** A KEYBOARDMODE_XXX value */
         public boolean mEnableShiftLock;
+        public boolean mHasVoice;
 
-        public KeyboardId(int xml, int mode, boolean enableShiftLock) {
+        public KeyboardId(int xml, int mode, boolean enableShiftLock, boolean hasVoice) {
             this.mXml = xml;
             this.mKeyboardMode = mode;
             this.mEnableShiftLock = enableShiftLock;
+            this.mHasVoice = hasVoice;
         }
 
-        public KeyboardId(int xml) {
-            this(xml, 0, false);
+        public KeyboardId(int xml, boolean hasVoice) {
+            this(xml, 0, false, hasVoice);
         }
 
         public boolean equals(Object other) {
@@ -152,16 +145,29 @@
         public boolean equals(KeyboardId other) {
           return other.mXml == this.mXml
               && other.mKeyboardMode == this.mKeyboardMode
-              && other.mEnableShiftLock == this.mEnableShiftLock;
+              && other.mEnableShiftLock == this.mEnableShiftLock
+              && other.mHasVoice == this.mHasVoice;
         }
 
         public int hashCode() {
-            return (mXml + 1) * (mKeyboardMode + 1) * (mEnableShiftLock ? 2 : 1);
+            return (mXml + 1) * (mKeyboardMode + 1) * (mEnableShiftLock ? 2 : 1)
+                    * (mHasVoice ? 4 : 8);
         }
     }
 
-    void setVoiceMode(boolean enableVoice) {
-        setKeyboardMode(mMode, mImeOptions, enableVoice, mIsSymbols);
+    void setVoiceMode(boolean enableVoice, boolean voiceOnPrimary) {
+        if (enableVoice != mHasVoice || voiceOnPrimary != mVoiceOnPrimary) {
+            System.err.println("Clearing keyboards");
+            mKeyboards.clear();
+        }
+        mHasVoice = enableVoice;
+        mVoiceOnPrimary = voiceOnPrimary;
+        setKeyboardMode(mMode, mImeOptions, mHasVoice,
+                mIsSymbols);
+    }
+
+    boolean hasVoiceButton(boolean isSymbols) {
+        return mHasVoice && (isSymbols != mVoiceOnPrimary);
     }
 
     void setKeyboardMode(int mode, int imeOptions, boolean enableVoice) {
@@ -181,9 +187,6 @@
         mInputView.setPreviewEnabled(true);
         KeyboardId id = getKeyboardId(mode, imeOptions, isSymbols);
 
-        if (enableVoice && mModeToVoice.containsKey(id.mKeyboardMode)) {
-            id.mKeyboardMode = mModeToVoice.get(id.mKeyboardMode);
-        }
         LatinKeyboard keyboard = getKeyboard(id);
 
         if (mode == MODE_PHONE) {
@@ -211,17 +214,12 @@
             conf.locale = mInputLocale;
             orig.updateConfiguration(conf, null);
             LatinKeyboard keyboard = new LatinKeyboard(
-                mContext, id.mXml, id.mKeyboardMode);
+                mContext, id.mXml, id.mKeyboardMode, id.mHasVoice);
             if (id.mKeyboardMode == KEYBOARDMODE_NORMAL
                     || id.mKeyboardMode == KEYBOARDMODE_URL
                     || id.mKeyboardMode == KEYBOARDMODE_IM
                     || id.mKeyboardMode == KEYBOARDMODE_EMAIL
                     || id.mKeyboardMode == KEYBOARDMODE_WEB
-                    || id.mKeyboardMode == R.id.mode_normal_voice
-                    || id.mKeyboardMode == R.id.mode_url_voice
-                    || id.mKeyboardMode == R.id.mode_im_voice
-                    || id.mKeyboardMode == R.id.mode_email_voice
-                    || id.mKeyboardMode == R.id.mode_webentry_voice
                     ) {
                 keyboard.setExtension(R.xml.kbd_extension);
             }
@@ -238,31 +236,32 @@
     }
 
     private KeyboardId getKeyboardId(int mode, int imeOptions, boolean isSymbols) {
+        boolean hasVoice = hasVoiceButton(isSymbols);
         if (isSymbols) {
             return (mode == MODE_PHONE)
-                ? new KeyboardId(R.xml.kbd_phone_symbols) : new KeyboardId(R.xml.kbd_symbols);
+                ? new KeyboardId(R.xml.kbd_phone_symbols, hasVoice)
+                : new KeyboardId(R.xml.kbd_symbols, hasVoice);
         }
-
         switch (mode) {
             case MODE_TEXT:
                 if (mTextMode == MODE_TEXT_QWERTY) {
-                    return new KeyboardId(R.xml.kbd_qwerty, KEYBOARDMODE_NORMAL, true);
+                    return new KeyboardId(R.xml.kbd_qwerty, KEYBOARDMODE_NORMAL, true, hasVoice);
                 } else if (mTextMode == MODE_TEXT_ALPHA) {
-                    return new KeyboardId(R.xml.kbd_alpha, KEYBOARDMODE_NORMAL, true);
+                    return new KeyboardId(R.xml.kbd_alpha, KEYBOARDMODE_NORMAL, true, hasVoice);
                 }
                 break;
             case MODE_SYMBOLS:
-                return new KeyboardId(R.xml.kbd_symbols);
+                return new KeyboardId(R.xml.kbd_symbols, hasVoice);
             case MODE_PHONE:
-                return new KeyboardId(R.xml.kbd_phone);
+                return new KeyboardId(R.xml.kbd_phone, hasVoice);
             case MODE_URL:
-                return new KeyboardId(R.xml.kbd_qwerty, KEYBOARDMODE_URL, true);
+                return new KeyboardId(R.xml.kbd_qwerty, KEYBOARDMODE_URL, true, hasVoice);
             case MODE_EMAIL:
-                return new KeyboardId(R.xml.kbd_qwerty, KEYBOARDMODE_EMAIL, true);
+                return new KeyboardId(R.xml.kbd_qwerty, KEYBOARDMODE_EMAIL, true, hasVoice);
             case MODE_IM:
-                return new KeyboardId(R.xml.kbd_qwerty, KEYBOARDMODE_IM, true);
+                return new KeyboardId(R.xml.kbd_qwerty, KEYBOARDMODE_IM, true, hasVoice);
             case MODE_WEB:
-                return new KeyboardId(R.xml.kbd_qwerty, KEYBOARDMODE_WEB, true);
+                return new KeyboardId(R.xml.kbd_qwerty, KEYBOARDMODE_WEB, true, hasVoice);
         }
         return null;
     }
@@ -295,7 +294,7 @@
     boolean isAlphabetMode() {
         int currentMode = mCurrentId.mKeyboardMode;
         for (Integer mode : ALPHABET_MODES) {
-            if (currentMode == mode || currentMode == mModeToVoice.get(mode)) {
+            if (currentMode == mode) {
                 return true;
             }
         }
diff --git a/src/com/android/inputmethod/latin/LatinIME.java b/src/com/android/inputmethod/latin/LatinIME.java
index 7eecfb9..5faac5f 100644
--- a/src/com/android/inputmethod/latin/LatinIME.java
+++ b/src/com/android/inputmethod/latin/LatinIME.java
@@ -92,7 +92,8 @@
     private static final String PREF_AUTO_COMPLETE = "auto_complete";
     private static final String PREF_ENABLE_VOICE = "enable_voice_input";
     private static final String PREF_VOICE_SERVER_URL = "voice_server_url";
-    
+    private static final String PREF_VOICE_MAIN = "voice_on_main";
+
     // Whether or not the user has used voice input before (and thus, whether to show the
     // first-run warning dialog or not). 
     private static final String PREF_HAS_USED_VOICE_INPUT = "has_used_voice_input";
@@ -211,6 +212,7 @@
     private boolean mIsShowingHint;
     private int     mCorrectionMode;
     private boolean mEnableVoice = true;
+    private boolean mVoiceOnPrimary;
     private int     mOrientation;
     
     // Indicates whether the suggestion strip is to be on in landscape
@@ -445,6 +447,7 @@
         }
         
         mEnableVoiceButton = shouldShowVoiceButton(makeFieldContext(), attribute);
+        final boolean enableVoiceButton = mEnableVoiceButton && mEnableVoice;
 
         mAfterVoiceInput = false;
         mImmediatelyAfterVoiceInput = false;
@@ -463,15 +466,15 @@
             case EditorInfo.TYPE_CLASS_NUMBER:
             case EditorInfo.TYPE_CLASS_DATETIME:
                 mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_SYMBOLS,
-                        attribute.imeOptions, mEnableVoiceButton);
+                        attribute.imeOptions, enableVoiceButton);
                 break;
             case EditorInfo.TYPE_CLASS_PHONE:
                 mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_PHONE,
-                        attribute.imeOptions, mEnableVoiceButton);
+                        attribute.imeOptions, enableVoiceButton);
                 break;
             case EditorInfo.TYPE_CLASS_TEXT:
                 mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_TEXT,
-                        attribute.imeOptions, mEnableVoiceButton);
+                        attribute.imeOptions, enableVoiceButton);
                 //startPrediction();
                 mPredictionOn = true;
                 // Make sure that passwords are not displayed in candidate view
@@ -491,19 +494,19 @@
                 if (variation == EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS) {
                     mPredictionOn = false;
                     mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_EMAIL,
-                            attribute.imeOptions, mEnableVoiceButton);
+                            attribute.imeOptions, enableVoiceButton);
                 } else if (variation == EditorInfo.TYPE_TEXT_VARIATION_URI) {
                     mPredictionOn = false;
                     mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_URL,
-                            attribute.imeOptions, mEnableVoiceButton);
+                            attribute.imeOptions, enableVoiceButton);
                 } else if (variation == EditorInfo.TYPE_TEXT_VARIATION_SHORT_MESSAGE) {
                     mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_IM,
-                            attribute.imeOptions, mEnableVoiceButton);
+                            attribute.imeOptions, enableVoiceButton);
                 } else if (variation == EditorInfo.TYPE_TEXT_VARIATION_FILTER) {
                     mPredictionOn = false;
                 } else if (variation == EditorInfo.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT) {
                     mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_WEB,
-                            attribute.imeOptions, mEnableVoiceButton);
+                            attribute.imeOptions, enableVoiceButton);
                     // If it's a browser edit field and auto correct is not ON explicitly, then
                     // disable auto correction, but keep suggestions on.
                     if ((attribute.inputType & EditorInfo.TYPE_TEXT_FLAG_AUTO_CORRECT) == 0) {
@@ -529,7 +532,7 @@
                 break;
             default:
                 mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_TEXT,
-                        attribute.imeOptions, mEnableVoiceButton);
+                        attribute.imeOptions, enableVoiceButton);
                 updateShiftKeyState(attribute);
         }
         mInputView.closing();
@@ -790,6 +793,7 @@
         }
         mKeyboardSwitcher.setInputLocale(new Locale(mInputLanguage),
                 getSelectedInputLanguages() != null);
+        mKeyboardSwitcher.setVoiceMode(mEnableVoice, mVoiceOnPrimary);
         mKeyboardSwitcher.makeKeyboards(true);
     }
 
@@ -1504,7 +1508,8 @@
         int currentKeyboardMode = mKeyboardSwitcher.getKeyboardMode();
         reloadKeyboards();
         mKeyboardSwitcher.makeKeyboards(true);
-        mKeyboardSwitcher.setKeyboardMode(currentKeyboardMode, 0, mEnableVoiceButton);
+        mKeyboardSwitcher.setKeyboardMode(currentKeyboardMode, 0,
+                mEnableVoiceButton && mEnableVoice);
         initSuggest(mInputLanguage);
         persistInputLanguage(mInputLanguage);
         updateShiftKeyState(getCurrentInputEditorInfo());
@@ -1555,7 +1560,6 @@
 
     private boolean shouldShowVoiceButton(FieldContext fieldContext, EditorInfo attribute) {
         return ENABLE_VOICE_BUTTON
-                && mEnableVoice
                 && fieldCanDoVoice(fieldContext)
                 && !(attribute != null && attribute.privateImeOptions != null
                         && attribute.privateImeOptions.equals(IME_OPTION_NO_MICROPHONE));
@@ -1719,10 +1723,13 @@
 
         if (VOICE_INSTALLED) {
             boolean enableVoice = sp.getBoolean(PREF_ENABLE_VOICE, true);
-            if (enableVoice != mEnableVoice && mKeyboardSwitcher != null) {
-                mKeyboardSwitcher.setVoiceMode(enableVoice);
+            boolean voiceOnPrimary = sp.getBoolean(PREF_VOICE_MAIN, true);
+            if (mKeyboardSwitcher != null &&
+                    (enableVoice != mEnableVoice || voiceOnPrimary != mVoiceOnPrimary)) {
+                mKeyboardSwitcher.setVoiceMode(enableVoice, voiceOnPrimary);
             }
             mEnableVoice = enableVoice;
+            mVoiceOnPrimary = voiceOnPrimary;
         }
         mAutoCorrectEnabled = sp.getBoolean(PREF_AUTO_COMPLETE,
                 mResources.getBoolean(R.bool.enable_autocorrect)) & mShowSuggestions;
diff --git a/src/com/android/inputmethod/latin/LatinKeyboard.java b/src/com/android/inputmethod/latin/LatinKeyboard.java
index df38358..f876af7 100644
--- a/src/com/android/inputmethod/latin/LatinKeyboard.java
+++ b/src/com/android/inputmethod/latin/LatinKeyboard.java
@@ -38,6 +38,10 @@
     private Drawable mOldShiftIcon;
     private Drawable mOldShiftPreviewIcon;
     private Drawable mSpaceIcon;
+    private Drawable mMicIcon;
+    private Drawable mMicPreviewIcon;
+    private Drawable m123MicIcon;
+    private Drawable m123MicPreviewIcon;
     private Key mShiftKey;
     private Key mEnterKey;
     private Key mF1Key;
@@ -45,6 +49,7 @@
     /* package */ Locale mLocale;
     private Resources mRes;
     private int mMode;
+    private boolean mHasVoice;
 
     private int mExtensionResId; 
     
@@ -57,22 +62,26 @@
     static int sSpacebarVerticalCorrection;
 
     public LatinKeyboard(Context context, int xmlLayoutResId) {
-        this(context, xmlLayoutResId, 0);
+        this(context, xmlLayoutResId, 0, false);
     }
 
-    public LatinKeyboard(Context context, int xmlLayoutResId, int mode) {
+    public LatinKeyboard(Context context, int xmlLayoutResId, int mode, boolean hasVoice) {
         super(context, xmlLayoutResId, mode);
         final Resources res = context.getResources();
         mMode = mode;
         mRes = res;
+        mHasVoice = hasVoice;
         mShiftLockIcon = res.getDrawable(R.drawable.sym_keyboard_shift_locked);
         mShiftLockPreviewIcon = res.getDrawable(R.drawable.sym_keyboard_feedback_shift_locked);
         mShiftLockPreviewIcon.setBounds(0, 0, 
                 mShiftLockPreviewIcon.getIntrinsicWidth(),
                 mShiftLockPreviewIcon.getIntrinsicHeight());
         mSpaceIcon = res.getDrawable(R.drawable.sym_keyboard_space);
+        mMicIcon = res.getDrawable(R.drawable.sym_keyboard_mic);
+        mMicPreviewIcon = res.getDrawable(R.drawable.sym_keyboard_feedback_mic);
         sSpacebarVerticalCorrection = res.getDimensionPixelOffset(
                 R.dimen.spacebar_vertical_correction);
+        setF1Key();
     }
 
     public LatinKeyboard(Context context, int layoutTemplateResId, 
@@ -227,28 +236,19 @@
     }
 
     private void setF1Key() {
-        // TODO
-//        else {
-//            mSpaceKey.icon = mRes.getDrawable(R.drawable.sym_keyboard_space);
-//            switch (mMode) {
-//            case KeyboardSwitcher.KEYBOARDMODE_NORMAL:
-//            case KeyboardSwitcher.KEYBOARDMODE_IM:
-//                mF1Key.label = ",";
-//                mF1Key.codes = new int[] { ',' };
-//                mF1Key.icon = null;
-//                mF1Key.iconPreview = null;
-//                break;
-//            case KeyboardSwitcher.KEYBOARDMODE_EMAIL:
-//            case KeyboardSwitcher.KEYBOARDMODE_URL:
-//                mF1Key.label = mRes.getString(R.string.popular_domain_0);
-//                mF1Key.codes = new int[] { '.' };
-//                mF1Key.text = mF1Key.label;
-//                mF1Key.icon = null;
-//                mF1Key.iconPreview = null;
-//                mF1Key.popupResId = R.xml.popup_domains;
-//                break;
-//            }
-//        }
+        if (mF1Key == null) return;
+        System.err.println("Setting F1 key");
+        if (!mHasVoice) {
+            mF1Key.label = ",";
+            mF1Key.codes = new int[] { ',' };
+            mF1Key.icon = null;
+            mF1Key.iconPreview = null;
+        } else {
+            mF1Key.codes = new int[] { LatinKeyboardView.KEYCODE_VOICE };
+            mF1Key.label = null;
+            mF1Key.icon = mMicIcon;
+            mF1Key.iconPreview = mMicPreviewIcon;
+        }
     }
 
     private void updateSpaceBarForLocale() {