Merge "Fix a bug where autotext would occasionally not work"
diff --git a/java/res/layout/more_suggestions.xml b/java/res/layout/more_suggestions.xml
new file mode 100644
index 0000000..d387a15
--- /dev/null
+++ b/java/res/layout/more_suggestions.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2011, 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.
+*/
+-->
+<LinearLayout
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        style="?attr/miniKeyboardPanelStyle"
+        >
+    <com.android.inputmethod.latin.MoreSuggestionsView
+            xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+            android:id="@+id/more_suggestions_view"
+            android:layout_alignParentBottom="true"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            latin:keyLabelSize="@dimen/candidate_text_size"
+            latin:keyHintLetterRatio="@fraction/more_suggestions_info_ratio"
+            latin:keyHintLetterColor="@android:color/white"
+            />
+</LinearLayout>
diff --git a/java/res/values-ar/donottranslate-altchars.xml b/java/res/values-ar/donottranslate-more-keys.xml
similarity index 63%
rename from java/res/values-ar/donottranslate-altchars.xml
rename to java/res/values-ar/donottranslate-more-keys.xml
index 6f2a3ff..90cc3c8 100644
--- a/java/res/values-ar/donottranslate-altchars.xml
+++ b/java/res/values-ar/donottranslate-more-keys.xml
@@ -30,7 +30,7 @@
          \u0650: ARABIC KASRA
          \u064b: ARABIC FATHATAN
          \u064d: ARABIC KASRATAN -->
-    <string name="alternates_for_punctuation">"\u060c,\u061b,\u061f,!,:,-,/,\',\",\u0651,\u0652,\u064c,\u0640,\u064f,\u064e,\u0650,\u064b,\u064d"</string>
+    <string name="more_keys_for_punctuation">"\u060c,\u061b,\u061f,!,:,-,/,\',\",\u0651,\u0652,\u064c,\u0640,\u064f,\u064e,\u0650,\u064b,\u064d"</string>
     <integer name="mini_keyboard_column_for_punctuation">9</integer>
     <string name="keyhintlabel_for_punctuation">\u064b</string>
     <string name="keylabel_for_symbols_1">"١"</string>
@@ -43,35 +43,35 @@
     <string name="keylabel_for_symbols_8">"٨"</string>
     <string name="keylabel_for_symbols_9">"٩"</string>
     <string name="keylabel_for_symbols_0">"٠"</string>
-    <string name="alternates_for_symbols_1">1,¹,½,⅓,¼,⅛</string>
-    <string name="alternates_for_symbols_2">2,²,⅔</string>
-    <string name="alternates_for_symbols_3">3,³,¾,⅜</string>
-    <string name="alternates_for_symbols_4">4,⁴</string>
-    <string name="alternates_for_symbols_5">5,⅝</string>
-    <string name="alternates_for_symbols_6">6</string>
-    <string name="alternates_for_symbols_7">7,⅞</string>
-    <string name="alternates_for_symbols_8">8</string>
-    <string name="alternates_for_symbols_9">9</string>
-    <string name="alternates_for_symbols_0">0,ⁿ,∅</string>
+    <string name="more_keys_for_symbols_1">1,¹,½,⅓,¼,⅛</string>
+    <string name="more_keys_for_symbols_2">2,²,⅔</string>
+    <string name="more_keys_for_symbols_3">3,³,¾,⅜</string>
+    <string name="more_keys_for_symbols_4">4,⁴</string>
+    <string name="more_keys_for_symbols_5">5,⅝</string>
+    <string name="more_keys_for_symbols_6">6</string>
+    <string name="more_keys_for_symbols_7">7,⅞</string>
+    <string name="more_keys_for_symbols_8">8</string>
+    <string name="more_keys_for_symbols_9">9</string>
+    <string name="more_keys_for_symbols_0">0,ⁿ,∅</string>
     <string name="keylabel_for_comma">\u060c</string>
     <string name="keylabel_for_f1">\u060c</string>
     <string name="keylabel_for_symbols_question">\u061f</string>
     <string name="keylabel_for_symbols_semicolon">\u061b</string>
     <!-- \u066a: ARABIC PERCENT SIGN -->
     <string name="keylabel_for_symbols_percent">\u066a</string>
-    <string name="alternates_for_comma">,</string>
-    <string name="alternates_for_f1">,</string>
+    <string name="more_keys_for_comma">,</string>
+    <string name="more_keys_for_f1">,</string>
     <!-- @icon/3 is iconSettingsKey -->
-    <string name="alternates_for_f1_settings">\\,,\@icon/3|\@integer/key_settings</string>
+    <string name="more_keys_for_f1_settings">\\,,\@icon/3|\@integer/key_settings</string>
     <!-- @icon/7 is iconTabKey -->
-    <string name="alternates_for_f1_navigate">\\,,\@icon/7|\@integer/key_tab</string>
-    <string name="alternates_for_symbols_question">\?,¿</string>
-    <string name="alternates_for_symbols_semicolon">;</string>
-    <string name="alternates_for_symbols_percent">%,‰</string>
+    <string name="more_keys_for_f1_navigate">\\,,\@icon/7|\@integer/key_tab</string>
+    <string name="more_keys_for_symbols_question">\?,¿</string>
+    <string name="more_keys_for_symbols_semicolon">;</string>
+    <string name="more_keys_for_symbols_percent">%,‰</string>
     <string name="keylabel_for_apostrophe">"،"</string>
     <string name="keylabel_for_dash">"."</string>
     <string name="keyhintlabel_for_apostrophe">"؟"</string>
     <string name="keyhintlabel_for_dash">"\u064b"</string>
-    <string name="alternates_for_apostrophe">"\u061f,\u061b,!,:,-,/,\',\""</string>
-    <string name="alternates_for_dash">"\u0651,\u0652,\u064c,\u0640,\u064f,\u064e,\u0650,\u064b,\u064d"</string>
+    <string name="more_keys_for_apostrophe">"\u061f,\u061b,!,:,-,/,\',\""</string>
+    <string name="more_keys_for_dash">"\u0651,\u0652,\u064c,\u0640,\u064f,\u064e,\u0650,\u064b,\u064d"</string>
 </resources>
diff --git a/java/res/values-ca/donottranslate-altchars.xml b/java/res/values-ca/donottranslate-altchars.xml
deleted file mode 100644
index 336057b..0000000
--- a/java/res/values-ca/donottranslate-altchars.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2011, 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.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">à,á,ä,â,ã,å,ą,æ,ā,ª</string>
-    <string name="alternates_for_e">3,è,é,ë,ê,ę,ė,ē</string>
-    <string name="alternates_for_i">8,í,ï,ì,î,į,ī</string>
-    <string name="alternates_for_o">9,ò,ó,ö,ô,õ,ø,œ,ō,º</string>
-    <string name="alternates_for_u">7,ú,ü,ù,û,ū</string>
-    <string name="alternates_for_n">ñ,ń</string>
-    <string name="alternates_for_c">ç,ć,č</string>
-    <string name="alternates_for_l">ŀ,ł</string>
-</resources>
diff --git a/java/res/values-pt/donottranslate-altchars.xml b/java/res/values-ca/donottranslate-more-keys.xml
similarity index 60%
rename from java/res/values-pt/donottranslate-altchars.xml
rename to java/res/values-ca/donottranslate-more-keys.xml
index a399761..bd9fb7c 100644
--- a/java/res/values-pt/donottranslate-altchars.xml
+++ b/java/res/values-ca/donottranslate-more-keys.xml
@@ -18,10 +18,12 @@
 */
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">á,ã,à,â,ä,å,æ,ª</string>
-    <string name="alternates_for_e">3,é,ê,è,ę,ė,ē,ë</string>
-    <string name="alternates_for_i">8,í,î,ì,ï,į,ī</string>
-    <string name="alternates_for_o">9,ó,õ,ô,ò,ö,œ,ø,ō,º</string>
-    <string name="alternates_for_u">7,ú,ü,ù,û,ū</string>
-    <string name="alternates_for_c">ç,č,ć</string>
+    <string name="more_keys_for_a">à,á,ä,â,ã,å,ą,æ,ā,ª</string>
+    <string name="more_keys_for_e">3,è,é,ë,ê,ę,ė,ē</string>
+    <string name="more_keys_for_i">8,í,ï,ì,î,į,ī</string>
+    <string name="more_keys_for_o">9,ò,ó,ö,ô,õ,ø,œ,ō,º</string>
+    <string name="more_keys_for_u">7,ú,ü,ù,û,ū</string>
+    <string name="more_keys_for_n">ñ,ń</string>
+    <string name="more_keys_for_c">ç,ć,č</string>
+    <string name="more_keys_for_l">ŀ,ł</string>
 </resources>
diff --git a/java/res/values-cs/donottranslate-altchars.xml b/java/res/values-cs/donottranslate-altchars.xml
deleted file mode 100644
index 541cd21..0000000
--- a/java/res/values-cs/donottranslate-altchars.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?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.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">á,à,â,ä,æ,ã,å,ā</string>
-    <string name="alternates_for_e">3,é,ě,è,ê,ë,ę,ė,ē</string>
-    <string name="alternates_for_i">8,í,î,ï,ì,į,ī</string>
-    <string name="alternates_for_o">9,ó,ö,ô,ò,õ,œ,ø,ō</string>
-    <string name="alternates_for_u">7,ú,ů,û,ü,ù,ū</string>
-    <string name="alternates_for_s">š,ß,ś</string>
-    <string name="alternates_for_n">ň,ñ,ń</string>
-    <string name="alternates_for_c">č,ç,ć</string>
-    <string name="alternates_for_y">ý,ÿ</string>
-    <string name="alternates_for_d">ď</string>
-    <string name="alternates_for_r">4,ř</string>
-    <string name="alternates_for_t">5,ť</string>
-    <string name="alternates_for_z">6,ž,ź,ż</string>
-</resources>
diff --git a/java/res/values-cs/donottranslate-more-keys.xml b/java/res/values-cs/donottranslate-more-keys.xml
new file mode 100644
index 0000000..70b3f3e
--- /dev/null
+++ b/java/res/values-cs/donottranslate-more-keys.xml
@@ -0,0 +1,34 @@
+<?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.
+*/
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="more_keys_for_a">á,à,â,ä,æ,ã,å,ā</string>
+    <string name="more_keys_for_e">3,é,ě,è,ê,ë,ę,ė,ē</string>
+    <string name="more_keys_for_i">8,í,î,ï,ì,į,ī</string>
+    <string name="more_keys_for_o">9,ó,ö,ô,ò,õ,œ,ø,ō</string>
+    <string name="more_keys_for_u">7,ú,ů,û,ü,ù,ū</string>
+    <string name="more_keys_for_s">š,ß,ś</string>
+    <string name="more_keys_for_n">ň,ñ,ń</string>
+    <string name="more_keys_for_c">č,ç,ć</string>
+    <string name="more_keys_for_y">ý,ÿ</string>
+    <string name="more_keys_for_d">ď</string>
+    <string name="more_keys_for_r">4,ř</string>
+    <string name="more_keys_for_t">5,ť</string>
+    <string name="more_keys_for_z">6,ž,ź,ż</string>
+</resources>
diff --git a/java/res/values-da/donottranslate-altchars.xml b/java/res/values-da/donottranslate-altchars.xml
deleted file mode 100644
index 46f1644..0000000
--- a/java/res/values-da/donottranslate-altchars.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?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.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">á,ä,à,â,ã,ā</string>
-    <string name="alternates_for_e">3,é,ë</string>
-    <string name="alternates_for_i">8,í,ï</string>
-    <string name="alternates_for_o">9,ó,ô,ò,õ,œ,ō</string>
-    <string name="alternates_for_u">7,ú,ü,û,ù,ū</string>
-    <string name="alternates_for_s">ß,ś,š</string>
-    <string name="alternates_for_n">ñ,ń</string>
-    <string name="alternates_for_y">6,ý,ÿ</string>
-    <string name="alternates_for_d">ð</string>
-    <string name="alternates_for_l">ł</string>
-    <string name="keylabel_for_scandinavia_row2_10">æ</string>
-    <string name="keylabel_for_scandinavia_row2_11">ø</string>
-    <string name="alternates_for_scandinavia_row2_10">ä</string>
-    <string name="alternates_for_scandinavia_row2_11">ö</string>
-</resources>
diff --git a/java/res/values-da/donottranslate-more-keys.xml b/java/res/values-da/donottranslate-more-keys.xml
new file mode 100644
index 0000000..12c1ebf
--- /dev/null
+++ b/java/res/values-da/donottranslate-more-keys.xml
@@ -0,0 +1,35 @@
+<?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.
+*/
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="more_keys_for_a">á,ä,à,â,ã,ā</string>
+    <string name="more_keys_for_e">3,é,ë</string>
+    <string name="more_keys_for_i">8,í,ï</string>
+    <string name="more_keys_for_o">9,ó,ô,ò,õ,œ,ō</string>
+    <string name="more_keys_for_u">7,ú,ü,û,ù,ū</string>
+    <string name="more_keys_for_s">ß,ś,š</string>
+    <string name="more_keys_for_n">ñ,ń</string>
+    <string name="more_keys_for_y">6,ý,ÿ</string>
+    <string name="more_keys_for_d">ð</string>
+    <string name="more_keys_for_l">ł</string>
+    <string name="keylabel_for_scandinavia_row2_10">æ</string>
+    <string name="keylabel_for_scandinavia_row2_11">ø</string>
+    <string name="more_keys_for_scandinavia_row2_10">ä</string>
+    <string name="more_keys_for_scandinavia_row2_11">ö</string>
+</resources>
diff --git a/java/res/values-de-rZZ/donottranslate-altchars.xml b/java/res/values-de-rZZ/donottranslate-altchars.xml
deleted file mode 100644
index a6f8fc8..0000000
--- a/java/res/values-de-rZZ/donottranslate-altchars.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2011, 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.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">ä,â,à,á,æ,ã,å,ā</string>
-    <string name="alternates_for_e">3,ė</string>
-    <string name="alternates_for_o">9,ö,ô,ò,ó,õ,œ,ø,ō</string>
-    <string name="alternates_for_u">7,ü,û,ù,ú,ū</string>
-    <string name="alternates_for_s">ß,ś,š</string>
-    <string name="alternates_for_n">ñ,ń</string>
-    <string name="alternates_for_y">6</string>
-    <string name="alternates_for_z"></string>
-</resources>
diff --git a/java/res/values-ro/donottranslate-altchars.xml b/java/res/values-de-rZZ/donottranslate-more-keys.xml
similarity index 62%
copy from java/res/values-ro/donottranslate-altchars.xml
copy to java/res/values-de-rZZ/donottranslate-more-keys.xml
index 728ead4..06e76b0 100644
--- a/java/res/values-ro/donottranslate-altchars.xml
+++ b/java/res/values-de-rZZ/donottranslate-more-keys.xml
@@ -18,8 +18,12 @@
 */
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">ă,â,à,á,ä,æ,ã,å,ā</string>
-    <string name="alternates_for_i">8,î,ï,ì,í,į,ī</string>
-    <string name="alternates_for_s">ș,ß,ś,š</string>
-    <string name="alternates_for_t">5,ț</string>
+    <string name="more_keys_for_a">ä,â,à,á,æ,ã,å,ā</string>
+    <string name="more_keys_for_e">3,ė</string>
+    <string name="more_keys_for_o">9,ö,ô,ò,ó,õ,œ,ø,ō</string>
+    <string name="more_keys_for_u">7,ü,û,ù,ú,ū</string>
+    <string name="more_keys_for_s">ß,ś,š</string>
+    <string name="more_keys_for_n">ñ,ń</string>
+    <string name="more_keys_for_y">6</string>
+    <string name="more_keys_for_z"></string>
 </resources>
diff --git a/java/res/values-de/donottranslate-altchars.xml b/java/res/values-de/donottranslate-altchars.xml
deleted file mode 100644
index 8b8b6ae..0000000
--- a/java/res/values-de/donottranslate-altchars.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?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.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">ä,â,à,á,æ,ã,å,ā</string>
-    <string name="alternates_for_e">3,ė</string>
-    <string name="alternates_for_o">9,ö,ô,ò,ó,õ,œ,ø,ō</string>
-    <string name="alternates_for_u">7,ü,û,ù,ú,ū</string>
-    <string name="alternates_for_s">ß,ś,š</string>
-    <string name="alternates_for_n">ñ,ń</string>
-    <string name="alternates_for_y"></string>
-    <string name="alternates_for_z">6</string>
-</resources>
diff --git a/java/res/values-ru/donottranslate-altchars.xml b/java/res/values-de/donottranslate-more-keys.xml
similarity index 62%
copy from java/res/values-ru/donottranslate-altchars.xml
copy to java/res/values-de/donottranslate-more-keys.xml
index 2a24e56..80aa32a 100644
--- a/java/res/values-ru/donottranslate-altchars.xml
+++ b/java/res/values-de/donottranslate-more-keys.xml
@@ -18,7 +18,12 @@
 */
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_cyrillic_e">5,ё</string>
-    <string name="alternates_for_cyrillic_soft_sign">ъ</string>
-    <string name="alternates_for_cyrillic_ha">ъ</string>
+    <string name="more_keys_for_a">ä,â,à,á,æ,ã,å,ā</string>
+    <string name="more_keys_for_e">3,ė</string>
+    <string name="more_keys_for_o">9,ö,ô,ò,ó,õ,œ,ø,ō</string>
+    <string name="more_keys_for_u">7,ü,û,ù,ú,ū</string>
+    <string name="more_keys_for_s">ß,ś,š</string>
+    <string name="more_keys_for_n">ñ,ń</string>
+    <string name="more_keys_for_y"></string>
+    <string name="more_keys_for_z">6</string>
 </resources>
diff --git a/java/res/values-en/donottranslate-altchars.xml b/java/res/values-en/donottranslate-altchars.xml
deleted file mode 100644
index 29582c9..0000000
--- a/java/res/values-en/donottranslate-altchars.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?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.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">à,á,â,ä,æ,ã,å,ā</string>
-    <string name="alternates_for_e">3,è,é,ê,ë,ē</string>
-    <string name="alternates_for_i">8,î,ï,í,ī,ì</string>
-    <string name="alternates_for_o">9,ô,ö,ò,ó,œ,ø,ō,õ</string>
-    <string name="alternates_for_s">ß</string>
-    <string name="alternates_for_u">7,û,ü,ù,ú,ū</string>
-    <string name="alternates_for_n">ñ</string>
-    <string name="alternates_for_c">ç</string>
-</resources>
diff --git a/java/res/values-ru/donottranslate-altchars.xml b/java/res/values-en/donottranslate-more-keys.xml
similarity index 61%
copy from java/res/values-ru/donottranslate-altchars.xml
copy to java/res/values-en/donottranslate-more-keys.xml
index 2a24e56..bc26c6a 100644
--- a/java/res/values-ru/donottranslate-altchars.xml
+++ b/java/res/values-en/donottranslate-more-keys.xml
@@ -18,7 +18,12 @@
 */
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_cyrillic_e">5,ё</string>
-    <string name="alternates_for_cyrillic_soft_sign">ъ</string>
-    <string name="alternates_for_cyrillic_ha">ъ</string>
+    <string name="more_keys_for_a">à,á,â,ä,æ,ã,å,ā</string>
+    <string name="more_keys_for_e">3,è,é,ê,ë,ē</string>
+    <string name="more_keys_for_i">8,î,ï,í,ī,ì</string>
+    <string name="more_keys_for_o">9,ô,ö,ò,ó,œ,ø,ō,õ</string>
+    <string name="more_keys_for_s">ß</string>
+    <string name="more_keys_for_u">7,û,ü,ù,ú,ū</string>
+    <string name="more_keys_for_n">ñ</string>
+    <string name="more_keys_for_c">ç</string>
 </resources>
diff --git a/java/res/values-es/donottranslate-altchars.xml b/java/res/values-es/donottranslate-altchars.xml
deleted file mode 100644
index e1f849f..0000000
--- a/java/res/values-es/donottranslate-altchars.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?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.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">á,à,ä,â,ã,å,ą,æ,ā,ª</string>
-    <string name="alternates_for_e">3,é,è,ë,ê,ę,ė,ē</string>
-    <string name="alternates_for_i">8,í,ï,ì,î,į,ī</string>
-    <string name="alternates_for_o">9,ó,ò,ö,ô,õ,ø,œ,ō,º</string>
-    <string name="alternates_for_u">7,ú,ü,ù,û,ū</string>
-    <string name="alternates_for_n">ñ,ń</string>
-    <string name="alternates_for_c">ç,ć,č</string>
-    <string name="alternates_for_punctuation">"\\,,\?,!,¿,¡,:,-,\',\",),(,/,;,+,&amp;,\@"</string>
-</resources>
diff --git a/java/res/values-es/donottranslate-more-keys.xml b/java/res/values-es/donottranslate-more-keys.xml
new file mode 100644
index 0000000..d5a8ed1
--- /dev/null
+++ b/java/res/values-es/donottranslate-more-keys.xml
@@ -0,0 +1,29 @@
+<?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.
+*/
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="more_keys_for_a">á,à,ä,â,ã,å,ą,æ,ā,ª</string>
+    <string name="more_keys_for_e">3,é,è,ë,ê,ę,ė,ē</string>
+    <string name="more_keys_for_i">8,í,ï,ì,î,į,ī</string>
+    <string name="more_keys_for_o">9,ó,ò,ö,ô,õ,ø,œ,ō,º</string>
+    <string name="more_keys_for_u">7,ú,ü,ù,û,ū</string>
+    <string name="more_keys_for_n">ñ,ń</string>
+    <string name="more_keys_for_c">ç,ć,č</string>
+    <string name="more_keys_for_punctuation">"\\,,\?,!,¿,¡,:,-,\',\",),(,/,;,+,&amp;,\@"</string>
+</resources>
diff --git a/java/res/values-fi/donottranslate-altchars.xml b/java/res/values-fi/donottranslate-more-keys.xml
similarity index 67%
rename from java/res/values-fi/donottranslate-altchars.xml
rename to java/res/values-fi/donottranslate-more-keys.xml
index ff87a32..df67c69 100644
--- a/java/res/values-fi/donottranslate-altchars.xml
+++ b/java/res/values-fi/donottranslate-more-keys.xml
@@ -18,13 +18,13 @@
 */
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">æ,à,á,â,ã,ā</string>
-    <string name="alternates_for_o">9,ø,ô,ò,ó,õ,œ,ō</string>
-    <string name="alternates_for_u">7,ü</string>
-    <string name="alternates_for_s">š,ß,ś</string>
-    <string name="alternates_for_z">ž,ź,ż</string>
+    <string name="more_keys_for_a">æ,à,á,â,ã,ā</string>
+    <string name="more_keys_for_o">9,ø,ô,ò,ó,õ,œ,ō</string>
+    <string name="more_keys_for_u">7,ü</string>
+    <string name="more_keys_for_s">š,ß,ś</string>
+    <string name="more_keys_for_z">ž,ź,ż</string>
     <string name="keylabel_for_scandinavia_row2_10">ö</string>
     <string name="keylabel_for_scandinavia_row2_11">ä</string>
-    <string name="alternates_for_scandinavia_row2_10">ø</string>
-    <string name="alternates_for_scandinavia_row2_11">æ</string>
+    <string name="more_keys_for_scandinavia_row2_10">ø</string>
+    <string name="more_keys_for_scandinavia_row2_11">æ</string>
 </resources>
diff --git a/java/res/values-fr/donottranslate-altchars.xml b/java/res/values-fr/donottranslate-altchars.xml
deleted file mode 100644
index ae9292f..0000000
--- a/java/res/values-fr/donottranslate-altchars.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?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.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">à,â,1,æ,á,ä,ã,å,ā,ª</string>
-    <string name="alternates_for_e">é,è,ê,ë,3,ę,ė,ē</string>
-    <string name="alternates_for_i">î,8,ï,ì,í,į,ī</string>
-    <string name="alternates_for_o">ô,œ,9,ö,ò,ó,õ,ø,ō,º</string>
-    <string name="alternates_for_u">ù,û,7,ü,ú,ū</string>
-    <string name="alternates_for_c">ç,ć,č</string>
-    <string name="alternates_for_y">6,ÿ</string>
-    <string name="alternates_for_q"></string>
-    <string name="alternates_for_w"></string>
-    <string name="alternates_for_z">2</string>
-</resources>
diff --git a/java/res/values-fr/donottranslate-more-keys.xml b/java/res/values-fr/donottranslate-more-keys.xml
new file mode 100644
index 0000000..cd6d49b
--- /dev/null
+++ b/java/res/values-fr/donottranslate-more-keys.xml
@@ -0,0 +1,31 @@
+<?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.
+*/
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="more_keys_for_a">à,â,1,æ,á,ä,ã,å,ā,ª</string>
+    <string name="more_keys_for_e">é,è,ê,ë,3,ę,ė,ē</string>
+    <string name="more_keys_for_i">î,8,ï,ì,í,į,ī</string>
+    <string name="more_keys_for_o">ô,œ,9,ö,ò,ó,õ,ø,ō,º</string>
+    <string name="more_keys_for_u">ù,û,7,ü,ú,ū</string>
+    <string name="more_keys_for_c">ç,ć,č</string>
+    <string name="more_keys_for_y">6,ÿ</string>
+    <string name="more_keys_for_q"></string>
+    <string name="more_keys_for_w"></string>
+    <string name="more_keys_for_z">2</string>
+</resources>
diff --git a/java/res/values-hr/donottranslate-altchars.xml b/java/res/values-hr/donottranslate-altchars.xml
deleted file mode 100644
index d0c9d40..0000000
--- a/java/res/values-hr/donottranslate-altchars.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2011, 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.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_s">š,ś,ß</string>
-    <string name="alternates_for_n">ñ,ń</string>
-    <string name="alternates_for_y"></string>
-    <string name="alternates_for_z">6,ž,ź,ż</string>
-    <string name="alternates_for_c">č,ć,ç</string>
-    <string name="alternates_for_d">đ</string>
-</resources>
diff --git a/java/res/values-ro/donottranslate-altchars.xml b/java/res/values-hr/donottranslate-more-keys.xml
similarity index 70%
copy from java/res/values-ro/donottranslate-altchars.xml
copy to java/res/values-hr/donottranslate-more-keys.xml
index 728ead4..c34e0e6 100644
--- a/java/res/values-ro/donottranslate-altchars.xml
+++ b/java/res/values-hr/donottranslate-more-keys.xml
@@ -18,8 +18,10 @@
 */
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">ă,â,à,á,ä,æ,ã,å,ā</string>
-    <string name="alternates_for_i">8,î,ï,ì,í,į,ī</string>
-    <string name="alternates_for_s">ș,ß,ś,š</string>
-    <string name="alternates_for_t">5,ț</string>
+    <string name="more_keys_for_s">š,ś,ß</string>
+    <string name="more_keys_for_n">ñ,ń</string>
+    <string name="more_keys_for_y"></string>
+    <string name="more_keys_for_z">6,ž,ź,ż</string>
+    <string name="more_keys_for_c">č,ć,ç</string>
+    <string name="more_keys_for_d">đ</string>
 </resources>
diff --git a/java/res/values-hu/donottranslate-altchars.xml b/java/res/values-hu/donottranslate-altchars.xml
deleted file mode 100644
index ae28cc5..0000000
--- a/java/res/values-hu/donottranslate-altchars.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2011, 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.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">á,à,â,ä,æ,ã,å,ā</string>
-    <string name="alternates_for_e">3,é,è,ê,ë,ę,ė,ē</string>
-    <string name="alternates_for_i">8,í,î,ï,ì,į,ī</string>
-    <string name="alternates_for_o">9,ó,ö,ő,ô,ò,õ,œ,ø,ō</string>
-    <string name="alternates_for_u">7,ú,ü,ű,û,ù,ū</string>
-    <string name="alternates_for_y"></string>
-    <string name="alternates_for_z">6</string>
-</resources>
diff --git a/java/res/values-ro/donottranslate-altchars.xml b/java/res/values-hu/donottranslate-more-keys.xml
similarity index 63%
copy from java/res/values-ro/donottranslate-altchars.xml
copy to java/res/values-hu/donottranslate-more-keys.xml
index 728ead4..42b3301 100644
--- a/java/res/values-ro/donottranslate-altchars.xml
+++ b/java/res/values-hu/donottranslate-more-keys.xml
@@ -18,8 +18,11 @@
 */
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">ă,â,à,á,ä,æ,ã,å,ā</string>
-    <string name="alternates_for_i">8,î,ï,ì,í,į,ī</string>
-    <string name="alternates_for_s">ș,ß,ś,š</string>
-    <string name="alternates_for_t">5,ț</string>
+    <string name="more_keys_for_a">á,à,â,ä,æ,ã,å,ā</string>
+    <string name="more_keys_for_e">3,é,è,ê,ë,ę,ė,ē</string>
+    <string name="more_keys_for_i">8,í,î,ï,ì,į,ī</string>
+    <string name="more_keys_for_o">9,ó,ö,ő,ô,ò,õ,œ,ø,ō</string>
+    <string name="more_keys_for_u">7,ú,ü,ű,û,ù,ū</string>
+    <string name="more_keys_for_y"></string>
+    <string name="more_keys_for_z">6</string>
 </resources>
diff --git a/java/res/values-it/donottranslate-altchars.xml b/java/res/values-it/donottranslate-altchars.xml
deleted file mode 100644
index 1131d48..0000000
--- a/java/res/values-it/donottranslate-altchars.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?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.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">à,á,â,ä,æ,ã,å,ā,ª</string>
-    <string name="alternates_for_e">3,è,é,ê,ë,ę,ė,ē</string>
-    <string name="alternates_for_i">8,ì,í,î,ï,į,ī</string>
-    <string name="alternates_for_o">9,ò,ó,ô,ö,õ,œ,ø,ō,º</string>
-    <string name="alternates_for_u">7,ù,ú,û,ü,ū</string>
-</resources>
diff --git a/java/res/values-ru/donottranslate-altchars.xml b/java/res/values-it/donottranslate-more-keys.xml
similarity index 68%
copy from java/res/values-ru/donottranslate-altchars.xml
copy to java/res/values-it/donottranslate-more-keys.xml
index 2a24e56..fa1537b 100644
--- a/java/res/values-ru/donottranslate-altchars.xml
+++ b/java/res/values-it/donottranslate-more-keys.xml
@@ -18,7 +18,9 @@
 */
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_cyrillic_e">5,ё</string>
-    <string name="alternates_for_cyrillic_soft_sign">ъ</string>
-    <string name="alternates_for_cyrillic_ha">ъ</string>
+    <string name="more_keys_for_a">à,á,â,ä,æ,ã,å,ā,ª</string>
+    <string name="more_keys_for_e">3,è,é,ê,ë,ę,ė,ē</string>
+    <string name="more_keys_for_i">8,ì,í,î,ï,į,ī</string>
+    <string name="more_keys_for_o">9,ò,ó,ô,ö,õ,œ,ø,ō,º</string>
+    <string name="more_keys_for_u">7,ù,ú,û,ü,ū</string>
 </resources>
diff --git a/java/res/values-land/dimens.xml b/java/res/values-land/dimens.xml
index 73e1aff..4bf0e20 100644
--- a/java/res/values-land/dimens.xml
+++ b/java/res/values-land/dimens.xml
@@ -59,6 +59,8 @@
     <dimen name="key_preview_offset_ics">0.01in</dimen>
 
     <dimen name="candidate_strip_height">36dip</dimen>
+    <dimen name="more_suggestions_row_height">36dip</dimen>
+    <dimen name="candidate_strip_minimum_height">160sp</dimen>
     <dimen name="candidate_strip_fading_edge_length">63dip</dimen>
     <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. -->
     <!-- popup_key_height x 1.2 -->
diff --git a/java/res/values-lt/donottranslate-altchars.xml b/java/res/values-lt/donottranslate-altchars.xml
deleted file mode 100644
index 4aba93a..0000000
--- a/java/res/values-lt/donottranslate-altchars.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2011, 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.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">ą,à,á,â,ä,æ,ã,å,ā</string>
-    <string name="alternates_for_e">3,ė,ę,è,é,ê,ë,ē</string>
-    <string name="alternates_for_i">8,į,î,ï,ì,í,ī</string>
-    <string name="alternates_for_u">7,ų,ū,û,ü,ù,ú</string>
-    <string name="alternates_for_s">š,ß,ś</string>
-    <string name="alternates_for_c">č,ç,ć</string>
-    <string name="alternates_for_z">ž,ź,ż</string>
-</resources>
diff --git a/java/res/values-ro/donottranslate-altchars.xml b/java/res/values-lt/donottranslate-more-keys.xml
similarity index 63%
copy from java/res/values-ro/donottranslate-altchars.xml
copy to java/res/values-lt/donottranslate-more-keys.xml
index 728ead4..6b81e45 100644
--- a/java/res/values-ro/donottranslate-altchars.xml
+++ b/java/res/values-lt/donottranslate-more-keys.xml
@@ -18,8 +18,11 @@
 */
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">ă,â,à,á,ä,æ,ã,å,ā</string>
-    <string name="alternates_for_i">8,î,ï,ì,í,į,ī</string>
-    <string name="alternates_for_s">ș,ß,ś,š</string>
-    <string name="alternates_for_t">5,ț</string>
+    <string name="more_keys_for_a">ą,à,á,â,ä,æ,ã,å,ā</string>
+    <string name="more_keys_for_e">3,ė,ę,è,é,ê,ë,ē</string>
+    <string name="more_keys_for_i">8,į,î,ï,ì,í,ī</string>
+    <string name="more_keys_for_u">7,ų,ū,û,ü,ù,ú</string>
+    <string name="more_keys_for_s">š,ß,ś</string>
+    <string name="more_keys_for_c">č,ç,ć</string>
+    <string name="more_keys_for_z">ž,ź,ż</string>
 </resources>
diff --git a/java/res/values-lv/donottranslate-altchars.xml b/java/res/values-lv/donottranslate-altchars.xml
deleted file mode 100644
index 05d9bc8..0000000
--- a/java/res/values-lv/donottranslate-altchars.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2011, 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.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">ā,à,á,â,ä,æ,ã,å</string>
-    <string name="alternates_for_e">3,ē,è,é,ê,ë,ę,ė</string>
-    <string name="alternates_for_i">8,ī,î,ï,ì,í,į</string>
-    <string name="alternates_for_u">7,ū,û,ü,ù,ú</string>
-    <string name="alternates_for_s">š,ß,ś</string>
-    <string name="alternates_for_n">ņ,ñ,ń</string>
-    <string name="alternates_for_c">č,ç,ć</string>
-    <string name="alternates_for_r">4,ŗ</string>
-    <string name="alternates_for_z">ž,ź,ż</string>
-    <string name="alternates_for_k">ķ</string>
-    <string name="alternates_for_l">ļ,ł</string>
-    <string name="alternates_for_g">ģ</string>
-</resources>
diff --git a/java/res/values-lv/donottranslate-more-keys.xml b/java/res/values-lv/donottranslate-more-keys.xml
new file mode 100644
index 0000000..77e1c26
--- /dev/null
+++ b/java/res/values-lv/donottranslate-more-keys.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2011, 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.
+*/
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="more_keys_for_a">ā,à,á,â,ä,æ,ã,å</string>
+    <string name="more_keys_for_e">3,ē,è,é,ê,ë,ę,ė</string>
+    <string name="more_keys_for_i">8,ī,î,ï,ì,í,į</string>
+    <string name="more_keys_for_u">7,ū,û,ü,ù,ú</string>
+    <string name="more_keys_for_s">š,ß,ś</string>
+    <string name="more_keys_for_n">ņ,ñ,ń</string>
+    <string name="more_keys_for_c">č,ç,ć</string>
+    <string name="more_keys_for_r">4,ŗ</string>
+    <string name="more_keys_for_z">ž,ź,ż</string>
+    <string name="more_keys_for_k">ķ</string>
+    <string name="more_keys_for_l">ļ,ł</string>
+    <string name="more_keys_for_g">ģ</string>
+</resources>
diff --git a/java/res/values-nb/donottranslate-altchars.xml b/java/res/values-nb/donottranslate-more-keys.xml
similarity index 68%
rename from java/res/values-nb/donottranslate-altchars.xml
rename to java/res/values-nb/donottranslate-more-keys.xml
index 798e51c..b98341c 100644
--- a/java/res/values-nb/donottranslate-altchars.xml
+++ b/java/res/values-nb/donottranslate-more-keys.xml
@@ -18,12 +18,12 @@
 */
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">à,ä,á,â,ã,ā</string>
-    <string name="alternates_for_e">3,é,è,ê,ë,ę,ė,ē</string>
-    <string name="alternates_for_o">9,ô,ò,ó,ö,õ,œ,ō</string>
-    <string name="alternates_for_u">7,ü,û,ù,ú,ū</string>
+    <string name="more_keys_for_a">à,ä,á,â,ã,ā</string>
+    <string name="more_keys_for_e">3,é,è,ê,ë,ę,ė,ē</string>
+    <string name="more_keys_for_o">9,ô,ò,ó,ö,õ,œ,ō</string>
+    <string name="more_keys_for_u">7,ü,û,ù,ú,ū</string>
     <string name="keylabel_for_scandinavia_row2_10">ø</string>
     <string name="keylabel_for_scandinavia_row2_11">æ</string>
-    <string name="alternates_for_scandinavia_row2_10">ö</string>
-    <string name="alternates_for_scandinavia_row2_11">ä</string>
+    <string name="more_keys_for_scandinavia_row2_10">ö</string>
+    <string name="more_keys_for_scandinavia_row2_11">ä</string>
 </resources>
diff --git a/java/res/values-nl/donottranslate-altchars.xml b/java/res/values-nl/donottranslate-more-keys.xml
similarity index 66%
rename from java/res/values-nl/donottranslate-altchars.xml
rename to java/res/values-nl/donottranslate-more-keys.xml
index e26a749..49cc419 100644
--- a/java/res/values-nl/donottranslate-altchars.xml
+++ b/java/res/values-nl/donottranslate-more-keys.xml
@@ -18,10 +18,10 @@
 */
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">á,ä,â,à,æ,ã,å,ā</string>
-    <string name="alternates_for_e">3,é,ë,ê,è,ę,ė,ē</string>
-    <string name="alternates_for_i">8,í,ï,ì,î,į,ī</string>
-    <string name="alternates_for_o">9,ó,ö,ô,ò,õ,œ,ø,ō</string>
-    <string name="alternates_for_u">7,ú,ü,û,ù,ū</string>
-    <string name="alternates_for_n">ñ,ń</string>
+    <string name="more_keys_for_a">á,ä,â,à,æ,ã,å,ā</string>
+    <string name="more_keys_for_e">3,é,ë,ê,è,ę,ė,ē</string>
+    <string name="more_keys_for_i">8,í,ï,ì,î,į,ī</string>
+    <string name="more_keys_for_o">9,ó,ö,ô,ò,õ,œ,ø,ō</string>
+    <string name="more_keys_for_u">7,ú,ü,û,ù,ū</string>
+    <string name="more_keys_for_n">ñ,ń</string>
 </resources>
diff --git a/java/res/values-pl/donottranslate-altchars.xml b/java/res/values-pl/donottranslate-altchars.xml
deleted file mode 100644
index 971d73b..0000000
--- a/java/res/values-pl/donottranslate-altchars.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?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.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">ą,á,à,â,ä,æ,ã,å,ā</string>
-    <string name="alternates_for_e">3,ę,è,é,ê,ë,ė,ē</string>
-    <string name="alternates_for_o">9,ó,ö,ô,ò,õ,œ,ø,ō</string>
-    <string name="alternates_for_s">ś,ß,š</string>
-    <string name="alternates_for_n">ń,ñ</string>
-    <string name="alternates_for_c">ć,ç,č</string>
-    <string name="alternates_for_z">ż,ź,ž</string>
-    <string name="alternates_for_l">ł</string>
-</resources>
diff --git a/java/res/values-ru/donottranslate-altchars.xml b/java/res/values-pl/donottranslate-more-keys.xml
similarity index 61%
copy from java/res/values-ru/donottranslate-altchars.xml
copy to java/res/values-pl/donottranslate-more-keys.xml
index 2a24e56..18e1499 100644
--- a/java/res/values-ru/donottranslate-altchars.xml
+++ b/java/res/values-pl/donottranslate-more-keys.xml
@@ -18,7 +18,12 @@
 */
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_cyrillic_e">5,ё</string>
-    <string name="alternates_for_cyrillic_soft_sign">ъ</string>
-    <string name="alternates_for_cyrillic_ha">ъ</string>
+    <string name="more_keys_for_a">ą,á,à,â,ä,æ,ã,å,ā</string>
+    <string name="more_keys_for_e">3,ę,è,é,ê,ë,ė,ē</string>
+    <string name="more_keys_for_o">9,ó,ö,ô,ò,õ,œ,ø,ō</string>
+    <string name="more_keys_for_s">ś,ß,š</string>
+    <string name="more_keys_for_n">ń,ñ</string>
+    <string name="more_keys_for_c">ć,ç,č</string>
+    <string name="more_keys_for_z">ż,ź,ž</string>
+    <string name="more_keys_for_l">ł</string>
 </resources>
diff --git a/java/res/values-ro/donottranslate-altchars.xml b/java/res/values-pt/donottranslate-more-keys.xml
similarity index 65%
copy from java/res/values-ro/donottranslate-altchars.xml
copy to java/res/values-pt/donottranslate-more-keys.xml
index 728ead4..31d9417 100644
--- a/java/res/values-ro/donottranslate-altchars.xml
+++ b/java/res/values-pt/donottranslate-more-keys.xml
@@ -18,8 +18,10 @@
 */
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">ă,â,à,á,ä,æ,ã,å,ā</string>
-    <string name="alternates_for_i">8,î,ï,ì,í,į,ī</string>
-    <string name="alternates_for_s">ș,ß,ś,š</string>
-    <string name="alternates_for_t">5,ț</string>
+    <string name="more_keys_for_a">á,ã,à,â,ä,å,æ,ª</string>
+    <string name="more_keys_for_e">3,é,ê,è,ę,ė,ē,ë</string>
+    <string name="more_keys_for_i">8,í,î,ì,ï,į,ī</string>
+    <string name="more_keys_for_o">9,ó,õ,ô,ò,ö,œ,ø,ō,º</string>
+    <string name="more_keys_for_u">7,ú,ü,ù,û,ū</string>
+    <string name="more_keys_for_c">ç,č,ć</string>
 </resources>
diff --git a/java/res/values-rm/donottranslate-altchars.xml b/java/res/values-rm/donottranslate-more-keys.xml
similarity index 91%
rename from java/res/values-rm/donottranslate-altchars.xml
rename to java/res/values-rm/donottranslate-more-keys.xml
index 0a5d2aa..ea9a559 100644
--- a/java/res/values-rm/donottranslate-altchars.xml
+++ b/java/res/values-rm/donottranslate-more-keys.xml
@@ -18,5 +18,5 @@
 */
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_o">9,ò,ó,ö,ô,õ,œ,ø</string>
+    <string name="more_keys_for_o">9,ò,ó,ö,ô,õ,œ,ø</string>
 </resources>
diff --git a/java/res/values-ro/donottranslate-altchars.xml b/java/res/values-ro/donottranslate-more-keys.xml
similarity index 75%
rename from java/res/values-ro/donottranslate-altchars.xml
rename to java/res/values-ro/donottranslate-more-keys.xml
index 728ead4..d7e6a17 100644
--- a/java/res/values-ro/donottranslate-altchars.xml
+++ b/java/res/values-ro/donottranslate-more-keys.xml
@@ -18,8 +18,8 @@
 */
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">ă,â,à,á,ä,æ,ã,å,ā</string>
-    <string name="alternates_for_i">8,î,ï,ì,í,į,ī</string>
-    <string name="alternates_for_s">ș,ß,ś,š</string>
-    <string name="alternates_for_t">5,ț</string>
+    <string name="more_keys_for_a">ă,â,à,á,ä,æ,ã,å,ā</string>
+    <string name="more_keys_for_i">8,î,ï,ì,í,į,ī</string>
+    <string name="more_keys_for_s">ș,ß,ś,š</string>
+    <string name="more_keys_for_t">5,ț</string>
 </resources>
diff --git a/java/res/values-ru/donottranslate-altchars.xml b/java/res/values-ru/donottranslate-more-keys.xml
similarity index 80%
rename from java/res/values-ru/donottranslate-altchars.xml
rename to java/res/values-ru/donottranslate-more-keys.xml
index 2a24e56..f7e006e 100644
--- a/java/res/values-ru/donottranslate-altchars.xml
+++ b/java/res/values-ru/donottranslate-more-keys.xml
@@ -18,7 +18,7 @@
 */
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_cyrillic_e">5,ё</string>
-    <string name="alternates_for_cyrillic_soft_sign">ъ</string>
-    <string name="alternates_for_cyrillic_ha">ъ</string>
+    <string name="more_keys_for_cyrillic_e">5,ё</string>
+    <string name="more_keys_for_cyrillic_soft_sign">ъ</string>
+    <string name="more_keys_for_cyrillic_ha">ъ</string>
 </resources>
diff --git a/java/res/values-sk/donottranslate-altchars.xml b/java/res/values-sk/donottranslate-altchars.xml
deleted file mode 100644
index 6d9836e..0000000
--- a/java/res/values-sk/donottranslate-altchars.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2011, 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.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">ä,á,à,â,æ,ã,å,ā</string>
-    <string name="alternates_for_e">3,é,ě,è,ê,ë,ę,ė,ē</string>
-    <string name="alternates_for_i">8,í,î,ï,ì,į,ī</string>
-    <string name="alternates_for_o">9,ô,ó,ö,ò,õ,œ,ø,ō</string>
-    <string name="alternates_for_u">7,ú,ú,û,ü,ù,ū</string>
-    <string name="alternates_for_s">š,ß,ś</string>
-    <string name="alternates_for_n">ň,ñ,ń</string>
-    <string name="alternates_for_c">č,ç,ć</string>
-    <string name="alternates_for_y">6,ý,ÿ</string>
-    <string name="alternates_for_d">ď</string>
-    <string name="alternates_for_r">4,ŕ,ř</string>
-    <string name="alternates_for_t">5,ť</string>
-    <string name="alternates_for_z">ž,ź,ż</string>
-    <string name="alternates_for_l">ľ,ĺ,ł</string>
-</resources>
diff --git a/java/res/values-sk/donottranslate-more-keys.xml b/java/res/values-sk/donottranslate-more-keys.xml
new file mode 100644
index 0000000..b73db0a
--- /dev/null
+++ b/java/res/values-sk/donottranslate-more-keys.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2011, 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.
+*/
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="more_keys_for_a">ä,á,à,â,æ,ã,å,ā</string>
+    <string name="more_keys_for_e">3,é,ě,è,ê,ë,ę,ė,ē</string>
+    <string name="more_keys_for_i">8,í,î,ï,ì,į,ī</string>
+    <string name="more_keys_for_o">9,ô,ó,ö,ò,õ,œ,ø,ō</string>
+    <string name="more_keys_for_u">7,ú,ú,û,ü,ù,ū</string>
+    <string name="more_keys_for_s">š,ß,ś</string>
+    <string name="more_keys_for_n">ň,ñ,ń</string>
+    <string name="more_keys_for_c">č,ç,ć</string>
+    <string name="more_keys_for_y">6,ý,ÿ</string>
+    <string name="more_keys_for_d">ď</string>
+    <string name="more_keys_for_r">4,ŕ,ř</string>
+    <string name="more_keys_for_t">5,ť</string>
+    <string name="more_keys_for_z">ž,ź,ż</string>
+    <string name="more_keys_for_l">ľ,ĺ,ł</string>
+</resources>
diff --git a/java/res/values-sv/donottranslate-altchars.xml b/java/res/values-sv/donottranslate-more-keys.xml
similarity index 69%
rename from java/res/values-sv/donottranslate-altchars.xml
rename to java/res/values-sv/donottranslate-more-keys.xml
index d03ae1a..1fa29a8 100644
--- a/java/res/values-sv/donottranslate-altchars.xml
+++ b/java/res/values-sv/donottranslate-more-keys.xml
@@ -18,12 +18,12 @@
 */
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_e">3,é,è,ê,ë,ę</string>
-    <string name="alternates_for_o">9,œ,ô,ò,ó,õ,ō</string>
-    <string name="alternates_for_u">7,ü,û,ù,ú,ū</string>
-    <string name="alternates_for_s">ß,ś,š</string>
+    <string name="more_keys_for_e">3,é,è,ê,ë,ę</string>
+    <string name="more_keys_for_o">9,œ,ô,ò,ó,õ,ō</string>
+    <string name="more_keys_for_u">7,ü,û,ù,ú,ū</string>
+    <string name="more_keys_for_s">ß,ś,š</string>
     <string name="keylabel_for_scandinavia_row2_10">ö</string>
     <string name="keylabel_for_scandinavia_row2_11">ä</string>
-    <string name="alternates_for_scandinavia_row2_10">ø</string>
-    <string name="alternates_for_scandinavia_row2_11">æ</string>
+    <string name="more_keys_for_scandinavia_row2_10">ø</string>
+    <string name="more_keys_for_scandinavia_row2_11">æ</string>
 </resources>
diff --git a/java/res/values-sw600dp/config.xml b/java/res/values-sw600dp/config.xml
index 17aeff7..1854a86 100644
--- a/java/res/values-sw600dp/config.xml
+++ b/java/res/values-sw600dp/config.xml
@@ -25,7 +25,7 @@
     <bool name="config_enable_show_popup_on_keypress_option">false</bool>
     <bool name="config_enable_bigram_suggestions_option">false</bool>
     <bool name="config_sliding_key_input_enabled">false</bool>
-    <bool name="config_digit_popup_characters_enabled">false</bool>
+    <bool name="config_digit_more_keys_enabled">false</bool>
     <!-- Whether or not Popup on key press is enabled by default -->
     <bool name="config_default_popup_preview">false</bool>
     <bool name="config_default_sound_enabled">true</bool>
@@ -39,5 +39,5 @@
     <!-- This configuration is the index of the array {@link KeyboardSwitcher.KEYBOARD_THEMES}. -->
     <string name="config_default_keyboard_theme_id" translatable="false">5</string>
     <string name="config_text_size_of_language_on_spacebar" translatable="false">medium</string>
-    <integer name="config_max_mini_keyboard_column">5</integer>
+    <integer name="config_max_more_keys_column">5</integer>
 </resources>
diff --git a/java/res/values-sw600dp/dimens.xml b/java/res/values-sw600dp/dimens.xml
index 942bc72..6ce23cc 100644
--- a/java/res/values-sw600dp/dimens.xml
+++ b/java/res/values-sw600dp/dimens.xml
@@ -67,6 +67,7 @@
     <dimen name="key_preview_offset_ics">0.05in</dimen>
 
     <dimen name="candidate_strip_height">44dip</dimen>
+    <dimen name="more_suggestions_row_height">44dip</dimen>
     <dimen name="candidate_strip_padding">15.0mm</dimen>
     <dimen name="candidate_min_width">0.3in</dimen>
     <dimen name="candidate_padding">12dip</dimen>
diff --git a/java/res/values-sw768dp/config.xml b/java/res/values-sw768dp/config.xml
index 8b4ff36..a438fe9 100644
--- a/java/res/values-sw768dp/config.xml
+++ b/java/res/values-sw768dp/config.xml
@@ -25,7 +25,7 @@
     <bool name="config_enable_show_popup_on_keypress_option">false</bool>
     <bool name="config_enable_bigram_suggestions_option">false</bool>
     <bool name="config_sliding_key_input_enabled">false</bool>
-    <bool name="config_digit_popup_characters_enabled">false</bool>
+    <bool name="config_digit_more_keys_enabled">false</bool>
     <!-- Whether or not Popup on key press is enabled by default -->
     <bool name="config_default_popup_preview">false</bool>
     <bool name="config_default_sound_enabled">true</bool>
@@ -37,7 +37,7 @@
     <!-- This configuration is the index of the array {@link KeyboardSwitcher.KEYBOARD_THEMES}. -->
     <string name="config_default_keyboard_theme_id" translatable="false">5</string>
     <string name="config_text_size_of_language_on_spacebar" translatable="false">medium</string>
-    <integer name="config_max_mini_keyboard_column">5</integer>
+    <integer name="config_max_more_keys_column">5</integer>
     <!--  Screen metrics for logging. 0 = "mdpi", 1 = "hdpi", 2 = "xlarge" -->
     <integer name="log_screen_metrics">2</integer>
 </resources>
diff --git a/java/res/values-sw768dp/dimens.xml b/java/res/values-sw768dp/dimens.xml
index f0340bc..9b307e6 100644
--- a/java/res/values-sw768dp/dimens.xml
+++ b/java/res/values-sw768dp/dimens.xml
@@ -70,9 +70,8 @@
     <dimen name="key_preview_offset_ics">0.05in</dimen>
 
     <dimen name="candidate_strip_height">44dip</dimen>
-    <!-- candidate_strip_minimum_height =
-         key_preview_height_holo - key_preview_offset_holo + alpha -->
-    <dimen name="candidate_strip_minimum_height">18mm</dimen>
+    <dimen name="more_suggestions_row_height">44dip</dimen>
+    <dimen name="candidate_strip_minimum_height">200sp</dimen>
     <dimen name="candidate_strip_padding">15.0mm</dimen>
     <dimen name="candidate_min_width">46dip</dimen>
     <dimen name="candidate_padding">8dip</dimen>
diff --git a/java/res/values-tr/donottranslate-altchars.xml b/java/res/values-tr/donottranslate-altchars.xml
deleted file mode 100644
index 1b83b65..0000000
--- a/java/res/values-tr/donottranslate-altchars.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a">â</string>
-    <string name="alternates_for_i">8,ı,î,ï,ì,í,į,ī</string>
-    <string name="alternates_for_o">9,ö,ô,œ,ò,ó,õ,ø,ō</string>
-    <string name="alternates_for_u">7,ü,û,ù,ú,ū</string>
-    <string name="alternates_for_s">ş,ß,ś,š</string>
-    <string name="alternates_for_g">ğ</string>
-    <string name="alternates_for_c">ç,ć,č</string>
-</resources>
diff --git a/java/res/values-ru/donottranslate-altchars.xml b/java/res/values-tr/donottranslate-more-keys.xml
similarity index 64%
copy from java/res/values-ru/donottranslate-altchars.xml
copy to java/res/values-tr/donottranslate-more-keys.xml
index 2a24e56..6906b35 100644
--- a/java/res/values-ru/donottranslate-altchars.xml
+++ b/java/res/values-tr/donottranslate-more-keys.xml
@@ -18,7 +18,11 @@
 */
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_cyrillic_e">5,ё</string>
-    <string name="alternates_for_cyrillic_soft_sign">ъ</string>
-    <string name="alternates_for_cyrillic_ha">ъ</string>
+    <string name="more_keys_for_a">â</string>
+    <string name="more_keys_for_i">8,ı,î,ï,ì,í,į,ī</string>
+    <string name="more_keys_for_o">9,ö,ô,œ,ò,ó,õ,ø,ō</string>
+    <string name="more_keys_for_u">7,ü,û,ù,ú,ū</string>
+    <string name="more_keys_for_s">ş,ß,ś,š</string>
+    <string name="more_keys_for_g">ğ</string>
+    <string name="more_keys_for_c">ç,ć,č</string>
 </resources>
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 734004f..9d34268 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -27,6 +27,7 @@
         <attr name="miniKeyboardPanelStyle" format="reference" />
         <!-- Suggestions strip style -->
         <attr name="suggestionsStripBackgroundStyle" format="reference" />
+        <attr name="suggestionsPaneViewStyle" format="reference" />
         <attr name="suggestionBackgroundStyle" format="reference" />
         <attr name="suggestionPreviewBackgroundStyle" format="reference" />
         <attr name="candidateViewStyle" format="reference" />
@@ -95,8 +96,8 @@
         <!-- Amount to offset the touch Y coordinate by, for bias correction. -->
         <attr name="verticalCorrection" format="dimension" />
 
-        <!-- Layout resource for popup panel -->
-        <attr name="popupLayout" format="reference" />
+        <!-- Layout resource for more keys panel -->
+        <attr name="moreKeysLayout" format="reference" />
 
         <attr name="shadowColor" format="color" />
         <attr name="shadowRadius" format="float" />
@@ -153,8 +154,8 @@
         <attr name="horizontalGap" format="dimension|fraction" />
         <!-- Default vertical gap between rows of keys. -->
         <attr name="verticalGap" format="dimension|fraction" />
-        <!-- Popup panel layout template -->
-        <attr name="popupTemplate" format="reference" />
+        <!-- More keys keyboard layout template -->
+        <attr name="moreKeysTemplate" format="reference" />
         <!-- Locale of the keyboard layout -->
         <attr name="keyboardLocale" format="string" />
         <!-- True if the keyboard is Right-To-Left -->
@@ -178,10 +179,10 @@
     <declare-styleable name="Keyboard_Key">
         <!-- The unicode value that this key outputs. -->
         <attr name="code" format="integer" />
-        <!-- The characters to display in the popup keyboard. -->
-        <attr name="popupCharacters" format="string" />
-        <!-- Maximum column of mini keyboard -->
-        <attr name="maxMiniKeyboardColumn" format="integer" />
+        <!-- The keys to display in the more keys keyboard. -->
+        <attr name="moreKeys" format="string" />
+        <!-- Maximum column of more keys keyboard -->
+        <attr name="maxMoreKeysColumn" format="integer" />
         <!-- Whether this is a functional key which has different key top than normal key. -->
         <attr name="isFunctional" format="boolean" />
         <!-- Whether this is a toggle key. -->
diff --git a/java/res/values/config.xml b/java/res/values/config.xml
index 28cbc95..923e37d 100644
--- a/java/res/values/config.xml
+++ b/java/res/values/config.xml
@@ -27,7 +27,7 @@
     <bool name="config_enable_bigram_suggestions_option">true</bool>
     <bool name="config_enable_usability_study_mode_option">false</bool>
     <bool name="config_sliding_key_input_enabled">true</bool>
-    <bool name="config_digit_popup_characters_enabled">true</bool>
+    <bool name="config_digit_more_keys_enabled">true</bool>
     <!-- Whether or not Popup on key press is enabled by default -->
     <bool name="config_default_popup_preview">true</bool>
     <!-- Default value for bigram suggestion: while showing candidates for a word should we weigh
@@ -67,7 +67,7 @@
     <!-- This configuration is the index of the array {@link KeyboardSwitcher.KEYBOARD_THEMES}. -->
     <string name="config_default_keyboard_theme_id" translatable="false">5</string>
     <string name="config_text_size_of_language_on_spacebar" translatable="false">small</string>
-    <integer name="config_max_mini_keyboard_column">5</integer>
+    <integer name="config_max_more_keys_column">5</integer>
     <string-array name="auto_correction_threshold_values" translatable="false">
         <!-- Off, When auto correction setting is Off, this value is not used. -->
         <item></item>
diff --git a/java/res/values/dimens.xml b/java/res/values/dimens.xml
index 2c4b35e..b7609a4 100644
--- a/java/res/values/dimens.xml
+++ b/java/res/values/dimens.xml
@@ -77,9 +77,11 @@
     <dimen name="key_preview_offset_ics">0.05in</dimen>
 
     <dimen name="candidate_strip_height">40dip</dimen>
-    <!-- candidate_strip_minimum_height =
-         key_preview_height_holo - key_preview_offset_holo + alpha -->
-    <dimen name="candidate_strip_minimum_height">100sp</dimen>
+    <dimen name="more_suggestions_key_horizontal_padding">12dip</dimen>
+    <dimen name="more_suggestions_row_height">40dip</dimen>
+    <dimen name="more_suggestions_slide_allowance">0.2in</dimen>
+    <fraction name="more_suggestions_info_ratio">12%</fraction>
+    <dimen name="candidate_strip_minimum_height">200sp</dimen>
     <dimen name="candidate_strip_fading_edge_length">63dip</dimen>
     <dimen name="candidate_strip_padding">0dip</dimen>
     <dimen name="candidate_min_width">44dip</dimen>
diff --git a/java/res/values/donottranslate-altchars.xml b/java/res/values/donottranslate-altchars.xml
deleted file mode 100644
index acbf7df..0000000
--- a/java/res/values/donottranslate-altchars.xml
+++ /dev/null
@@ -1,99 +0,0 @@
-<?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.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="alternates_for_a"></string>
-    <string name="alternates_for_e">3</string>
-    <string name="alternates_for_i">8</string>
-    <string name="alternates_for_o">9</string>
-    <string name="alternates_for_u">7</string>
-    <string name="alternates_for_s"></string>
-    <string name="alternates_for_n"></string>
-    <string name="alternates_for_c"></string>
-    <string name="alternates_for_y">6</string>
-    <string name="alternates_for_q">1</string>
-    <string name="alternates_for_w">2</string>
-    <string name="alternates_for_d"></string>
-    <string name="alternates_for_r">4</string>
-    <string name="alternates_for_t">5</string>
-    <string name="alternates_for_z"></string>
-    <string name="alternates_for_k"></string>
-    <string name="alternates_for_l"></string>
-    <string name="alternates_for_g"></string>
-    <string name="alternates_for_p">0</string>
-    <string name="alternates_for_v"></string>
-    <string name="keylabel_for_scandinavia_row2_10"></string>
-    <string name="keylabel_for_scandinavia_row2_11"></string>
-    <string name="alternates_for_scandinavia_row2_10"></string>
-    <string name="alternates_for_scandinavia_row2_11"></string>
-    <string name="alternates_for_cyrillic_e"></string>
-    <string name="alternates_for_cyrillic_soft_sign"></string>
-    <string name="alternates_for_cyrillic_ha"></string>
-    <string name="alternates_for_currency_dollar">¢,£,€,¥,₱</string>
-    <string name="alternates_for_currency_euro">¢,£,$,¥,₱</string>
-    <string name="alternates_for_currency_pound">¢,$,€,¥,₱</string>
-    <string name="alternates_for_currency_general">¢,$,€,£,¥,₱</string>
-    <string name="alternates_for_smiley">":-)|:-) ,:-(|:-( ,;-)|;-) ,:-P|:-P ,=-O|=-O ,:-*|:-* ,:O|:O ,B-)|B-) ,:-$|:-$ ,:-!|:-! ,:-[|:-[ ,O:-)|O:-) ,:-\\\\\\\\|:-\\\\\\\\ ,:\'(|:\'( ,:-D|:-D "</string>
-    <string name="alternates_for_punctuation">"\\,,\?,!,:,-,\',\",(,),/,;,+,&amp;,\@"</string>
-    <integer name="mini_keyboard_column_for_punctuation">7</integer>
-    <string name="keyhintlabel_for_punctuation"></string>
-    <string name="keylabel_for_popular_domain">".com"</string>
-    <!-- popular web domains for the locale - most popular, displayed on the keyboard -->
-    <string name="alternates_for_popular_domain">".net,.org,.gov,.edu"</string>
-    <string name="keylabel_for_symbols_1">1</string>
-    <string name="keylabel_for_symbols_2">2</string>
-    <string name="keylabel_for_symbols_3">3</string>
-    <string name="keylabel_for_symbols_4">4</string>
-    <string name="keylabel_for_symbols_5">5</string>
-    <string name="keylabel_for_symbols_6">6</string>
-    <string name="keylabel_for_symbols_7">7</string>
-    <string name="keylabel_for_symbols_8">8</string>
-    <string name="keylabel_for_symbols_9">9</string>
-    <string name="keylabel_for_symbols_0">0</string>
-    <string name="alternates_for_symbols_1">¹,½,⅓,¼,⅛</string>
-    <string name="alternates_for_symbols_2">²,⅔</string>
-    <string name="alternates_for_symbols_3">³,¾,⅜</string>
-    <string name="alternates_for_symbols_4">⁴</string>
-    <string name="alternates_for_symbols_5">⅝</string>
-    <string name="alternates_for_symbols_6"></string>
-    <string name="alternates_for_symbols_7">⅞</string>
-    <string name="alternates_for_symbols_8"></string>
-    <string name="alternates_for_symbols_9"></string>
-    <string name="alternates_for_symbols_0">ⁿ,∅</string>
-    <string name="keylabel_for_comma">,</string>
-    <string name="keylabel_for_f1">,</string>
-    <string name="keylabel_for_symbols_question">\?</string>
-    <string name="keylabel_for_symbols_semicolon">;</string>
-    <string name="keylabel_for_symbols_percent">%</string>
-    <string name="alternates_for_comma"></string>
-    <string name="alternates_for_f1"></string>
-    <!-- @icon/3 is iconSettingsKey -->
-    <string name="alternates_for_f1_settings">\@icon/3|\@integer/key_settings</string>
-    <!-- @icon/7 is iconTabKey -->
-    <string name="alternates_for_f1_navigate">\@icon/7|\@integer/key_tab</string>
-    <string name="alternates_for_symbols_question">¿</string>
-    <string name="alternates_for_symbols_semicolon"></string>
-    <string name="alternates_for_symbols_percent">‰</string>
-    <string name="keylabel_for_apostrophe">\'</string>
-    <string name="keylabel_for_dash">-</string>
-    <string name="keyhintlabel_for_apostrophe">\"</string>
-    <string name="keyhintlabel_for_dash">_</string>
-    <string name="alternates_for_apostrophe">\"</string>
-    <string name="alternates_for_dash">_</string>
-</resources>
diff --git a/java/res/values/donottranslate-more-keys.xml b/java/res/values/donottranslate-more-keys.xml
new file mode 100644
index 0000000..7e396b6
--- /dev/null
+++ b/java/res/values/donottranslate-more-keys.xml
@@ -0,0 +1,99 @@
+<?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.
+*/
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="more_keys_for_a"></string>
+    <string name="more_keys_for_e">3</string>
+    <string name="more_keys_for_i">8</string>
+    <string name="more_keys_for_o">9</string>
+    <string name="more_keys_for_u">7</string>
+    <string name="more_keys_for_s"></string>
+    <string name="more_keys_for_n"></string>
+    <string name="more_keys_for_c"></string>
+    <string name="more_keys_for_y">6</string>
+    <string name="more_keys_for_q">1</string>
+    <string name="more_keys_for_w">2</string>
+    <string name="more_keys_for_d"></string>
+    <string name="more_keys_for_r">4</string>
+    <string name="more_keys_for_t">5</string>
+    <string name="more_keys_for_z"></string>
+    <string name="more_keys_for_k"></string>
+    <string name="more_keys_for_l"></string>
+    <string name="more_keys_for_g"></string>
+    <string name="more_keys_for_p">0</string>
+    <string name="more_keys_for_v"></string>
+    <string name="keylabel_for_scandinavia_row2_10"></string>
+    <string name="keylabel_for_scandinavia_row2_11"></string>
+    <string name="more_keys_for_scandinavia_row2_10"></string>
+    <string name="more_keys_for_scandinavia_row2_11"></string>
+    <string name="more_keys_for_cyrillic_e"></string>
+    <string name="more_keys_for_cyrillic_soft_sign"></string>
+    <string name="more_keys_for_cyrillic_ha"></string>
+    <string name="more_keys_for_currency_dollar">¢,£,€,¥,₱</string>
+    <string name="more_keys_for_currency_euro">¢,£,$,¥,₱</string>
+    <string name="more_keys_for_currency_pound">¢,$,€,¥,₱</string>
+    <string name="more_keys_for_currency_general">¢,$,€,£,¥,₱</string>
+    <string name="more_keys_for_smiley">":-)|:-) ,:-(|:-( ,;-)|;-) ,:-P|:-P ,=-O|=-O ,:-*|:-* ,:O|:O ,B-)|B-) ,:-$|:-$ ,:-!|:-! ,:-[|:-[ ,O:-)|O:-) ,:-\\\\\\\\|:-\\\\\\\\ ,:\'(|:\'( ,:-D|:-D "</string>
+    <string name="more_keys_for_punctuation">"\\,,\?,!,:,-,\',\",(,),/,;,+,&amp;,\@"</string>
+    <integer name="mini_keyboard_column_for_punctuation">7</integer>
+    <string name="keyhintlabel_for_punctuation"></string>
+    <string name="keylabel_for_popular_domain">".com"</string>
+    <!-- popular web domains for the locale - most popular, displayed on the keyboard -->
+    <string name="more_keys_for_popular_domain">".net,.org,.gov,.edu"</string>
+    <string name="keylabel_for_symbols_1">1</string>
+    <string name="keylabel_for_symbols_2">2</string>
+    <string name="keylabel_for_symbols_3">3</string>
+    <string name="keylabel_for_symbols_4">4</string>
+    <string name="keylabel_for_symbols_5">5</string>
+    <string name="keylabel_for_symbols_6">6</string>
+    <string name="keylabel_for_symbols_7">7</string>
+    <string name="keylabel_for_symbols_8">8</string>
+    <string name="keylabel_for_symbols_9">9</string>
+    <string name="keylabel_for_symbols_0">0</string>
+    <string name="more_keys_for_symbols_1">¹,½,⅓,¼,⅛</string>
+    <string name="more_keys_for_symbols_2">²,⅔</string>
+    <string name="more_keys_for_symbols_3">³,¾,⅜</string>
+    <string name="more_keys_for_symbols_4">⁴</string>
+    <string name="more_keys_for_symbols_5">⅝</string>
+    <string name="more_keys_for_symbols_6"></string>
+    <string name="more_keys_for_symbols_7">⅞</string>
+    <string name="more_keys_for_symbols_8"></string>
+    <string name="more_keys_for_symbols_9"></string>
+    <string name="more_keys_for_symbols_0">ⁿ,∅</string>
+    <string name="keylabel_for_comma">,</string>
+    <string name="keylabel_for_f1">,</string>
+    <string name="keylabel_for_symbols_question">\?</string>
+    <string name="keylabel_for_symbols_semicolon">;</string>
+    <string name="keylabel_for_symbols_percent">%</string>
+    <string name="more_keys_for_comma"></string>
+    <string name="more_keys_for_f1"></string>
+    <!-- @icon/3 is iconSettingsKey -->
+    <string name="more_keys_for_f1_settings">\@icon/3|\@integer/key_settings</string>
+    <!-- @icon/7 is iconTabKey -->
+    <string name="more_keys_for_f1_navigate">\@icon/7|\@integer/key_tab</string>
+    <string name="more_keys_for_symbols_question">¿</string>
+    <string name="more_keys_for_symbols_semicolon"></string>
+    <string name="more_keys_for_symbols_percent">‰</string>
+    <string name="keylabel_for_apostrophe">\'</string>
+    <string name="keylabel_for_dash">-</string>
+    <string name="keyhintlabel_for_apostrophe">\"</string>
+    <string name="keyhintlabel_for_dash">_</string>
+    <string name="more_keys_for_apostrophe">\"</string>
+    <string name="more_keys_for_dash">_</string>
+</resources>
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index 247bdba..2a3d705 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -332,11 +332,11 @@
     <!-- Title of the item to change the keyboard theme [CHAR LIMIT=20]-->
     <string name="keyboard_layout">Keyboard theme</string>
 
-    <!-- Description for German QWERTY keyboard subtype [CHAR LIMIT=35] -->
+    <!-- Description for German QWERTY keyboard subtype [CHAR LIMIT=22] -->
     <string name="subtype_de_qwerty">German QWERTY</string>
-    <!-- Description for English (United Kingdom) keyboard subtype [CHAR LIMIT=35] -->
+    <!-- Description for English (United Kingdom) keyboard subtype [CHAR LIMIT=22] -->
     <string name="subtype_en_GB">English (UK)</string>
-    <!-- Description for English (United States) keyboard subtype [CHAR LIMIT=35] -->
+    <!-- Description for English (United States) keyboard subtype [CHAR LIMIT=22] -->
     <string name="subtype_en_US">English (US)</string>
 
     <!-- Title of an option for usability study mode -->
diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml
index eb5b749..4cc2a53 100644
--- a/java/res/values/styles.xml
+++ b/java/res/values/styles.xml
@@ -21,12 +21,12 @@
         <item name="keyboardHeight">@dimen/keyboardHeight</item>
         <item name="maxKeyboardHeight">@fraction/maxKeyboardHeight</item>
         <item name="minKeyboardHeight">@fraction/minKeyboardHeight</item>
-        <item name="popupTemplate">@xml/kbd_mini_keyboard_template</item>
+        <item name="moreKeysTemplate">@xml/kbd_mini_keyboard_template</item>
         <item name="keyboardTopPadding">@fraction/keyboard_top_padding</item>
         <item name="keyboardBottomPadding">@fraction/keyboard_bottom_padding</item>
         <item name="horizontalGap">@fraction/key_horizontal_gap</item>
         <item name="verticalGap">@fraction/key_bottom_gap</item>
-        <item name="maxMiniKeyboardColumn">@integer/config_max_mini_keyboard_column</item>
+        <item name="maxMoreKeysColumn">@integer/config_max_more_keys_column</item>
     </style>
     <style name="LatinKeyboard">
         <item name="autoCorrectionSpacebarLedEnabled">@bool/config_auto_correction_spacebar_led_enabled
@@ -61,7 +61,7 @@
         <item name="keyPreviewOffset">@dimen/key_preview_offset</item>
         <item name="keyPreviewHeight">@dimen/key_preview_height</item>
         <item name="keyPreviewTextRatio">@fraction/key_preview_text_ratio</item>
-        <item name="popupLayout">@layout/mini_keyboard</item>
+        <item name="moreKeysLayout">@layout/mini_keyboard</item>
         <item name="verticalCorrection">@dimen/keyboard_vertical_correction</item>
         <item name="shadowColor">#BB000000</item>
         <item name="shadowRadius">2.75</item>
@@ -79,6 +79,11 @@
         <item name="android:paddingLeft">@dimen/mini_keyboard_horizontal_edges_padding</item>
         <item name="android:paddingRight">@dimen/mini_keyboard_horizontal_edges_padding</item>
     </style>
+    <style
+        name="SuggestionsPaneViewStyle"
+        parent="MiniKeyboardView"
+    >
+    </style>
     <style name="SuggestionsStripBackgroundStyle">
         <item name="android:background">@drawable/keyboard_suggest_strip</item>
     </style>
@@ -236,6 +241,11 @@
     >
     </style>
     <style
+        name="SuggestionsPaneViewStyle.IceCreamSandwich"
+        parent="MiniKeyboardView.IceCreamSandwich"
+    >
+    </style>
+    <style
         name="CandidateViewStyle.IceCreamSandwich"
         parent="SuggestionsStripBackgroundStyle.IceCreamSandwich"
     >
diff --git a/java/res/values/themes-basic-highcontrast.xml b/java/res/values/themes-basic-highcontrast.xml
index 17c06a2..51bf2f1 100644
--- a/java/res/values/themes-basic-highcontrast.xml
+++ b/java/res/values/themes-basic-highcontrast.xml
@@ -22,6 +22,7 @@
         <item name="miniKeyboardViewStyle">@style/MiniKeyboardView</item>
         <item name="miniKeyboardPanelStyle">@style/MiniKeyboardPanelStyle</item>
         <item name="suggestionsStripBackgroundStyle">@style/SuggestionsStripBackgroundStyle</item>
+        <item name="suggestionsPaneViewStyle">@style/SuggestionsPaneViewStyle</item>
         <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item>
         <item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle</item>
         <item name="candidateViewStyle">@style/CandidateViewStyle</item>
diff --git a/java/res/values/themes-basic.xml b/java/res/values/themes-basic.xml
index 23c71bd..7288dba 100644
--- a/java/res/values/themes-basic.xml
+++ b/java/res/values/themes-basic.xml
@@ -22,6 +22,7 @@
         <item name="miniKeyboardViewStyle">@style/MiniKeyboardView</item>
         <item name="miniKeyboardPanelStyle">@style/MiniKeyboardPanelStyle</item>
         <item name="suggestionsStripBackgroundStyle">@style/SuggestionsStripBackgroundStyle</item>
+        <item name="suggestionsPaneViewStyle">@style/SuggestionsPaneViewStyle</item>
         <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item>
         <item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle</item>
         <item name="candidateViewStyle">@style/CandidateViewStyle</item>
diff --git a/java/res/values/themes-gingerbread.xml b/java/res/values/themes-gingerbread.xml
index 1e3419f..5b62378 100644
--- a/java/res/values/themes-gingerbread.xml
+++ b/java/res/values/themes-gingerbread.xml
@@ -22,6 +22,7 @@
         <item name="miniKeyboardViewStyle">@style/MiniKeyboardView.Gingerbread</item>
         <item name="miniKeyboardPanelStyle">@style/MiniKeyboardPanelStyle</item>
         <item name="suggestionsStripBackgroundStyle">@style/SuggestionsStripBackgroundStyle</item>
+        <item name="suggestionsPaneViewStyle">@style/SuggestionsPaneViewStyle</item>
         <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item>
         <item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle</item>
         <item name="candidateViewStyle">@style/CandidateViewStyle</item>
diff --git a/java/res/values/themes-ics.xml b/java/res/values/themes-ics.xml
index 7fa879c..597d87b 100644
--- a/java/res/values/themes-ics.xml
+++ b/java/res/values/themes-ics.xml
@@ -22,6 +22,7 @@
         <item name="miniKeyboardViewStyle">@style/MiniKeyboardView.IceCreamSandwich</item>
         <item name="miniKeyboardPanelStyle">@style/MiniKeyboardPanelStyle.IceCreamSandwich</item>
         <item name="suggestionsStripBackgroundStyle">@style/SuggestionsStripBackgroundStyle.IceCreamSandwich</item>
+        <item name="suggestionsPaneViewStyle">@style/SuggestionsPaneViewStyle.IceCreamSandwich</item>
         <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle.IceCreamSandwich</item>
         <item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle.IceCreamSandwich</item>
         <item name="candidateViewStyle">@style/CandidateViewStyle.IceCreamSandwich</item>
diff --git a/java/res/values/themes-stone-bold.xml b/java/res/values/themes-stone-bold.xml
index fa2ee2d..ff7107d 100644
--- a/java/res/values/themes-stone-bold.xml
+++ b/java/res/values/themes-stone-bold.xml
@@ -22,7 +22,8 @@
         <item name="miniKeyboardViewStyle">@style/MiniKeyboardView.Stone</item>
         <item name="miniKeyboardPanelStyle">@style/MiniKeyboardPanelStyle</item>
         <item name="suggestionsStripBackgroundStyle">@style/SuggestionsStripBackgroundStyle</item>
-        <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item>
+        <item name="suggestionsPaneViewStyle">@style/SuggestionsPaneViewStyle</item>
+            <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item>
         <item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle</item>
         <item name="candidateViewStyle">@style/CandidateViewStyle</item>
     </style>
diff --git a/java/res/values/themes-stone.xml b/java/res/values/themes-stone.xml
index 494bae6..35390d1 100644
--- a/java/res/values/themes-stone.xml
+++ b/java/res/values/themes-stone.xml
@@ -22,6 +22,7 @@
         <item name="miniKeyboardViewStyle">@style/MiniKeyboardView.Stone</item>
         <item name="miniKeyboardPanelStyle">@style/MiniKeyboardPanelStyle</item>
         <item name="suggestionsStripBackgroundStyle">@style/SuggestionsStripBackgroundStyle</item>
+        <item name="suggestionsPaneViewStyle">@style/SuggestionsPaneViewStyle</item>
         <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item>
         <item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle</item>
         <item name="candidateViewStyle">@style/CandidateViewStyle</item>
diff --git a/java/res/xml-sw600dp/kbd_key_styles.xml b/java/res/xml-sw600dp/kbd_key_styles.xml
index 43b6623..2c31e27 100644
--- a/java/res/xml-sw600dp/kbd_key_styles.xml
+++ b/java/res/xml-sw600dp/kbd_key_styles.xml
@@ -38,7 +38,7 @@
             <key-style
                 latin:styleName="f2PopupStyle"
                 latin:keyLabelOption="hasPopupHint"
-                latin:popupCharacters="\@icon/3|\@integer/key_settings"
+                latin:moreKeys="\@icon/3|\@integer/key_settings"
                 latin:parentStyle="functionalKeyStyle" />
         </default>
     </switch>
@@ -72,8 +72,8 @@
         latin:keyLabel=":-)"
         latin:keyOutputText=":-) "
         latin:keyLabelOption="hasPopupHint"
-        latin:popupCharacters="@string/alternates_for_smiley"
-        latin:maxMiniKeyboardColumn="5" />
+        latin:moreKeys="@string/more_keys_for_smiley"
+        latin:maxMoreKeysColumn="5" />
     <key-style
         latin:styleName="shortcutKeyStyle"
         latin:code="@integer/key_shortcut"
@@ -117,5 +117,5 @@
         latin:keyLabel="@string/keylabel_for_popular_domain"
         latin:keyLabelOption="fontNormal|hasPopupHint"
         latin:keyOutputText="@string/keylabel_for_popular_domain"
-        latin:popupCharacters="@string/alternates_for_popular_domain" />
+        latin:moreKeys="@string/more_keys_for_popular_domain" />
 </merge>
diff --git a/java/res/xml-sw600dp/kbd_popup_template.xml b/java/res/xml-sw600dp/kbd_mini_keyboard_template.xml
similarity index 90%
rename from java/res/xml-sw600dp/kbd_popup_template.xml
rename to java/res/xml-sw600dp/kbd_mini_keyboard_template.xml
index d976499..9955fe8 100644
--- a/java/res/xml-sw600dp/kbd_popup_template.xml
+++ b/java/res/xml-sw600dp/kbd_mini_keyboard_template.xml
@@ -20,8 +20,6 @@
 
 <Keyboard xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
     latin:keyWidth="8%p"
-    latin:horizontalGap="@fraction/key_horizontal_gap"
-    latin:verticalGap="0px"
     latin:rowHeight="@dimen/popup_key_height"
     >
 </Keyboard>
diff --git a/java/res/xml-sw600dp/kbd_qwerty_row1.xml b/java/res/xml-sw600dp/kbd_qwerty_row1.xml
index c7dfcc8..07d8e22 100644
--- a/java/res/xml-sw600dp/kbd_qwerty_row1.xml
+++ b/java/res/xml-sw600dp/kbd_qwerty_row1.xml
@@ -26,34 +26,34 @@
     >
         <Key
             latin:keyLabel="q"
-            latin:popupCharacters="@string/alternates_for_q" />
+            latin:moreKeys="@string/more_keys_for_q" />
         <Key
             latin:keyLabel="w"
-            latin:popupCharacters="@string/alternates_for_w" />
+            latin:moreKeys="@string/more_keys_for_w" />
         <Key
             latin:keyLabel="e"
-            latin:popupCharacters="@string/alternates_for_e" />
+            latin:moreKeys="@string/more_keys_for_e" />
         <Key
             latin:keyLabel="r"
-            latin:popupCharacters="@string/alternates_for_r" />
+            latin:moreKeys="@string/more_keys_for_r" />
         <Key
             latin:keyLabel="t"
-            latin:popupCharacters="@string/alternates_for_t" />
+            latin:moreKeys="@string/more_keys_for_t" />
         <Key
             latin:keyLabel="y"
-            latin:popupCharacters="@string/alternates_for_y" />
+            latin:moreKeys="@string/more_keys_for_y" />
         <Key
             latin:keyLabel="u"
-            latin:popupCharacters="@string/alternates_for_u" />
+            latin:moreKeys="@string/more_keys_for_u" />
         <Key
             latin:keyLabel="i"
-            latin:popupCharacters="@string/alternates_for_i" />
+            latin:moreKeys="@string/more_keys_for_i" />
         <Key
             latin:keyLabel="o"
-            latin:popupCharacters="@string/alternates_for_o" />
+            latin:moreKeys="@string/more_keys_for_o" />
         <Key
             latin:keyLabel="p"
-            latin:popupCharacters="@string/alternates_for_p" />
+            latin:moreKeys="@string/more_keys_for_p" />
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-10.0%p"
diff --git a/java/res/xml-sw600dp/kbd_qwerty_row2.xml b/java/res/xml-sw600dp/kbd_qwerty_row2.xml
index 78004fe..52a948f 100644
--- a/java/res/xml-sw600dp/kbd_qwerty_row2.xml
+++ b/java/res/xml-sw600dp/kbd_qwerty_row2.xml
@@ -26,29 +26,29 @@
     >
         <Key
             latin:keyLabel="a"
-            latin:popupCharacters="@string/alternates_for_a"
+            latin:moreKeys="@string/more_keys_for_a"
             latin:keyXPos="4.5%p" />
         <Key
             latin:keyLabel="s"
-            latin:popupCharacters="@string/alternates_for_s" />
+            latin:moreKeys="@string/more_keys_for_s" />
         <Key
             latin:keyLabel="d"
-            latin:popupCharacters="@string/alternates_for_d" />
+            latin:moreKeys="@string/more_keys_for_d" />
         <Key
             latin:keyLabel="f" />
         <Key
             latin:keyLabel="g"
-            latin:popupCharacters="@string/alternates_for_g" />
+            latin:moreKeys="@string/more_keys_for_g" />
         <Key
             latin:keyLabel="h" />
         <Key
             latin:keyLabel="j" />
         <Key
             latin:keyLabel="k"
-            latin:popupCharacters="@string/alternates_for_k" />
+            latin:moreKeys="@string/more_keys_for_k" />
         <Key
             latin:keyLabel="l"
-            latin:popupCharacters="@string/alternates_for_l" />
+            latin:moreKeys="@string/more_keys_for_l" />
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-14.6%p"
diff --git a/java/res/xml-sw600dp/kbd_qwerty_row3.xml b/java/res/xml-sw600dp/kbd_qwerty_row3.xml
index 456f3c8..4dabf63 100644
--- a/java/res/xml-sw600dp/kbd_qwerty_row3.xml
+++ b/java/res/xml-sw600dp/kbd_qwerty_row3.xml
@@ -29,20 +29,20 @@
             latin:keyWidth="10.0%p" />
         <Key
             latin:keyLabel="z"
-            latin:popupCharacters="@string/alternates_for_z" />
+            latin:moreKeys="@string/more_keys_for_z" />
         <Key
             latin:keyLabel="x" />
         <Key
             latin:keyLabel="c"
-            latin:popupCharacters="@string/alternates_for_c" />
+            latin:moreKeys="@string/more_keys_for_c" />
         <Key
             latin:keyLabel="v"
-            latin:popupCharacters="@string/alternates_for_v" />
+            latin:moreKeys="@string/more_keys_for_v" />
         <Key
             latin:keyLabel="b" />
         <Key
             latin:keyLabel="n"
-            latin:popupCharacters="@string/alternates_for_n" />
+            latin:moreKeys="@string/more_keys_for_n" />
         <Key
             latin:keyLabel="m" />
         <include
diff --git a/java/res/xml-sw600dp/kbd_qwerty_row4.xml b/java/res/xml-sw600dp/kbd_qwerty_row4.xml
index 4c978cb..ef02922 100644
--- a/java/res/xml-sw600dp/kbd_qwerty_row4.xml
+++ b/java/res/xml-sw600dp/kbd_qwerty_row4.xml
@@ -47,7 +47,7 @@
                     latin:keyLabel="/"
                     latin:keyLabelOption="hasUppercaseLetter"
                     latin:keyHintLabel="\@"
-                    latin:popupCharacters="\@" />
+                    latin:moreKeys="\@" />
             </default>
         </switch>
         <Key
diff --git a/java/res/xml-sw600dp/kbd_row3_comma_period.xml b/java/res/xml-sw600dp/kbd_row3_comma_period.xml
index 2545316..b844430 100644
--- a/java/res/xml-sw600dp/kbd_row3_comma_period.xml
+++ b/java/res/xml-sw600dp/kbd_row3_comma_period.xml
@@ -35,12 +35,12 @@
                 latin:keyLabel=","
                 latin:keyLabelOption="hasUppercaseLetter"
                 latin:keyHintLabel="!"
-                latin:popupCharacters="!" />
+                latin:moreKeys="!" />
             <Key
                 latin:keyLabel="."
                 latin:keyLabelOption="hasUppercaseLetter"
                 latin:keyHintLabel="\?"
-                latin:popupCharacters="\?" />
+                latin:moreKeys="\?" />
         </default>
     </switch>
 </merge>
diff --git a/java/res/xml-sw600dp/kbd_row3_smiley.xml b/java/res/xml-sw600dp/kbd_row3_smiley.xml
index 0ae3ae4..f9b647c 100644
--- a/java/res/xml-sw600dp/kbd_row3_smiley.xml
+++ b/java/res/xml-sw600dp/kbd_row3_smiley.xml
@@ -37,7 +37,7 @@
                 latin:keyLabel="-"
                 latin:keyLabelOption="hasUppercaseLetter"
                 latin:keyHintLabel="_"
-                latin:popupCharacters="_"
+                latin:moreKeys="_"
                 latin:keyXPos="-8.9%p"
                 latin:keyWidth="fillBoth" />
         </case>
@@ -48,7 +48,7 @@
                 latin:keyLabel=":"
                 latin:keyLabelOption="hasUppercaseLetter"
                 latin:keyHintLabel="+"
-                latin:popupCharacters="+"
+                latin:moreKeys="+"
                 latin:keyXPos="-8.9%p"
                 latin:keyWidth="fillBoth" />
         </case>
diff --git a/java/res/xml-sw600dp/kbd_row4_apostrophe_dash.xml b/java/res/xml-sw600dp/kbd_row4_apostrophe_dash.xml
index 50d4d4b..9536e81 100644
--- a/java/res/xml-sw600dp/kbd_row4_apostrophe_dash.xml
+++ b/java/res/xml-sw600dp/kbd_row4_apostrophe_dash.xml
@@ -35,14 +35,14 @@
                 latin:keyLabel="/"
                 latin:keyLabelOption="hasUppercaseLetter"
                 latin:keyHintLabel=":"
-                latin:popupCharacters=":" />
+                latin:moreKeys=":" />
         </case>
         <default>
             <Key
                 latin:keyLabel="@string/keylabel_for_apostrophe"
                 latin:keyLabelOption="hasUppercaseLetter"
                 latin:keyHintLabel="@string/keyhintlabel_for_apostrophe"
-                latin:popupCharacters="@string/alternates_for_apostrophe" />
+                latin:moreKeys="@string/more_keys_for_apostrophe" />
         </default>
     </switch>
     <switch>
@@ -57,7 +57,7 @@
                 latin:keyLabel="@string/keylabel_for_dash"
                 latin:keyLabelOption="hasUppercaseLetter"
                 latin:keyHintLabel="@string/keyhintlabel_for_dash"
-                latin:popupCharacters="@string/alternates_for_dash" />
+                latin:moreKeys="@string/more_keys_for_dash" />
         </default>
     </switch>
 </merge>
diff --git a/java/res/xml-sw600dp/kbd_rows_arabic.xml b/java/res/xml-sw600dp/kbd_rows_arabic.xml
index 4c20f51..275df50 100644
--- a/java/res/xml-sw600dp/kbd_rows_arabic.xml
+++ b/java/res/xml-sw600dp/kbd_rows_arabic.xml
@@ -36,7 +36,7 @@
             latin:keyLabel="ق" />
         <Key
             latin:keyLabel="ف"
-            latin:popupCharacters="ڤ" />
+            latin:moreKeys="ڤ" />
         <Key
             latin:keyLabel="غ" />
         <Key
@@ -45,14 +45,14 @@
              \u0647\u0640: ARABIC LETTER HEH + ARABIC TATWEEL -->
         <Key
             latin:keyLabel="ه"
-            latin:popupCharacters="\ufeeb|\u0647\u0640" />
+            latin:moreKeys="\ufeeb|\u0647\u0640" />
         <Key
             latin:keyLabel="خ" />
         <Key
             latin:keyLabel="ح" />
         <Key
             latin:keyLabel="ج"
-            latin:popupCharacters="چ" />
+            latin:moreKeys="چ" />
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-10.0%p"
@@ -70,7 +70,7 @@
             latin:keyLabel="ي" />
         <Key
             latin:keyLabel="ب"
-            latin:popupCharacters="پ" />
+            latin:moreKeys="پ" />
         <!-- \ufefb: ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
              \u0644: ARABIC LETTER LAM
              \u0627: ARABIC LETTER ALEF
@@ -82,13 +82,13 @@
              \u0622: ARABIC LETTER ALEF WITH MADDA ABOVE -->
         <Key
             latin:keyLabel="ل"
-            latin:popupCharacters="\ufefb|\u0644\u0627,\ufef7|\u0644\u0623,\ufef9|\u0644\u0625,\ufef5|\u0644\u0622" />
+            latin:moreKeys="\ufefb|\u0644\u0627,\ufef7|\u0644\u0623,\ufef9|\u0644\u0625,\ufef5|\u0644\u0622" />
         <!-- \u0623: ARABIC LETTER ALEF WITH HAMZA ABOVE
              \u0625: ARABIC LETTER ALEF WITH HAMZA BELOW
              \u0622: ARABIC LETTER ALEF WITH MADDA ABOVE -->
         <Key
             latin:keyLabel="ا"
-            latin:popupCharacters="\u0623,\u0625,\u0622" />
+            latin:moreKeys="\u0623,\u0625,\u0622" />
         <Key
             latin:keyLabel="ت" />
         <Key
@@ -97,7 +97,7 @@
             latin:keyLabel="م" />
         <Key
             latin:keyLabel="ك"
-            latin:popupCharacters="گ" />
+            latin:moreKeys="گ" />
         <Key
             latin:keyLabel="ط" />
         <Key
@@ -123,7 +123,7 @@
                     latin:keyLabel="-"
                     latin:keyLabelOption="hasUppercaseLetter"
                     latin:keyHintLabel="_"
-                    latin:popupCharacters="_" />
+                    latin:moreKeys="_" />
             </case>
             <case
                 latin:imeAction="actionSearch"
@@ -132,7 +132,7 @@
                     latin:keyLabel=":"
                     latin:keyLabelOption="hasUppercaseLetter"
                     latin:keyHintLabel="+"
-                    latin:popupCharacters="+" />
+                    latin:moreKeys="+" />
             </case>
             <default>
                 <Key
@@ -157,7 +157,7 @@
             latin:keyLabel="و" />
         <Key
             latin:keyLabel="ز"
-            latin:popupCharacters="ژ" />
+            latin:moreKeys="ژ" />
         <Key
             latin:keyLabel="ظ" />
         <Key
diff --git a/java/res/xml-sw600dp/kbd_rows_azerty.xml b/java/res/xml-sw600dp/kbd_rows_azerty.xml
index 406b4e6..8ae7455 100644
--- a/java/res/xml-sw600dp/kbd_rows_azerty.xml
+++ b/java/res/xml-sw600dp/kbd_rows_azerty.xml
@@ -28,34 +28,34 @@
     >
         <Key
             latin:keyLabel="a"
-            latin:popupCharacters="@string/alternates_for_a" />
+            latin:moreKeys="@string/more_keys_for_a" />
         <Key
             latin:keyLabel="z"
-            latin:popupCharacters="@string/alternates_for_z" />
+            latin:moreKeys="@string/more_keys_for_z" />
         <Key
             latin:keyLabel="e"
-            latin:popupCharacters="@string/alternates_for_e" />
+            latin:moreKeys="@string/more_keys_for_e" />
         <Key
             latin:keyLabel="r"
-            latin:popupCharacters="@string/alternates_for_r" />
+            latin:moreKeys="@string/more_keys_for_r" />
         <Key
             latin:keyLabel="t"
-            latin:popupCharacters="@string/alternates_for_t" />
+            latin:moreKeys="@string/more_keys_for_t" />
         <Key
             latin:keyLabel="y"
-            latin:popupCharacters="@string/alternates_for_y" />
+            latin:moreKeys="@string/more_keys_for_y" />
         <Key
             latin:keyLabel="u"
-            latin:popupCharacters="@string/alternates_for_u" />
+            latin:moreKeys="@string/more_keys_for_u" />
         <Key
             latin:keyLabel="i"
-            latin:popupCharacters="@string/alternates_for_i" />
+            latin:moreKeys="@string/more_keys_for_i" />
         <Key
             latin:keyLabel="o"
-            latin:popupCharacters="@string/alternates_for_o" />
+            latin:moreKeys="@string/more_keys_for_o" />
         <Key
             latin:keyLabel="p"
-            latin:popupCharacters="@string/alternates_for_p" />
+            latin:moreKeys="@string/more_keys_for_p" />
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-10.0%p"
@@ -66,29 +66,29 @@
     >
         <Key
             latin:keyLabel="q"
-            latin:popupCharacters="@string/alternates_for_q"
+            latin:moreKeys="@string/more_keys_for_q"
             latin:keyXPos="5.0%p" />
         <Key
             latin:keyLabel="s"
-            latin:popupCharacters="@string/alternates_for_s" />
+            latin:moreKeys="@string/more_keys_for_s" />
         <Key
             latin:keyLabel="d"
-            latin:popupCharacters="@string/alternates_for_d" />
+            latin:moreKeys="@string/more_keys_for_d" />
         <Key
             latin:keyLabel="f" />
         <Key
             latin:keyLabel="g"
-            latin:popupCharacters="@string/alternates_for_g" />
+            latin:moreKeys="@string/more_keys_for_g" />
         <Key
             latin:keyLabel="h" />
         <Key
             latin:keyLabel="j" />
         <Key
             latin:keyLabel="k"
-            latin:popupCharacters="@string/alternates_for_k" />
+            latin:moreKeys="@string/more_keys_for_k" />
         <Key
             latin:keyLabel="l"
-            latin:popupCharacters="@string/alternates_for_l" />
+            latin:moreKeys="@string/more_keys_for_l" />
         <Key
             latin:keyLabel="m" />
         <Key
@@ -104,20 +104,20 @@
             latin:keyWidth="10.0%p" />
         <Key
             latin:keyLabel="w"
-            latin:popupCharacters="@string/alternates_for_w" />
+            latin:moreKeys="@string/more_keys_for_w" />
         <Key
             latin:keyLabel="x" />
         <Key
             latin:keyLabel="c"
-            latin:popupCharacters="@string/alternates_for_c" />
+            latin:moreKeys="@string/more_keys_for_c" />
         <Key
             latin:keyLabel="v"
-            latin:popupCharacters="@string/alternates_for_v" />
+            latin:moreKeys="@string/more_keys_for_v" />
         <Key
             latin:keyLabel="b" />
         <Key
             latin:keyLabel="n"
-            latin:popupCharacters="@string/alternates_for_n" />
+            latin:moreKeys="@string/more_keys_for_n" />
         <Key
             latin:keyLabel="\'" />
         <switch>
@@ -134,12 +134,12 @@
                     latin:keyLabel=","
                     latin:keyLabelOption="hasUppercaseLetter"
                     latin:keyHintLabel="!"
-                    latin:popupCharacters="!" />
+                    latin:moreKeys="!" />
                 <Key
                     latin:keyLabel="."
                     latin:keyLabelOption="hasUppercaseLetter"
                     latin:keyHintLabel="\?"
-                    latin:popupCharacters="\?" />
+                    latin:moreKeys="\?" />
             </default>
         </switch>
         <include
diff --git a/java/res/xml-sw600dp/kbd_rows_hebrew.xml b/java/res/xml-sw600dp/kbd_rows_hebrew.xml
index fc2247c..a8adbd3 100644
--- a/java/res/xml-sw600dp/kbd_rows_hebrew.xml
+++ b/java/res/xml-sw600dp/kbd_rows_hebrew.xml
@@ -59,17 +59,17 @@
             latin:keyLabel="ד" />
         <Key
             latin:keyLabel="ג"
-            latin:popupCharacters="ג׳" />
+            latin:moreKeys="ג׳" />
         <Key
             latin:keyLabel="כ" />
         <Key
             latin:keyLabel="ע" />
         <Key
             latin:keyLabel="י"
-            latin:popupCharacters="ײַ" />
+            latin:moreKeys="ײַ" />
         <Key
             latin:keyLabel="ח"
-            latin:popupCharacters="ח׳" />
+            latin:moreKeys="ח׳" />
         <Key
             latin:keyLabel="ל" />
         <Key
@@ -96,7 +96,7 @@
                     latin:keyLabel="-"
                     latin:keyLabelOption="hasUppercaseLetter"
                     latin:keyHintLabel="_"
-                    latin:popupCharacters="_"
+                    latin:moreKeys="_"
                     latin:keyWidth="10.0%p" />
             </case>
             <case
@@ -106,7 +106,7 @@
                     latin:keyLabel=":"
                     latin:keyLabelOption="hasUppercaseLetter"
                     latin:keyHintLabel="+"
-                    latin:popupCharacters="+"
+                    latin:moreKeys="+"
                     latin:keyWidth="10.0%p" />
             </case>
             <default>
@@ -117,7 +117,7 @@
         </switch>
         <Key
             latin:keyLabel="ז"
-            latin:popupCharacters="ז׳" />
+            latin:moreKeys="ז׳" />
         <Key
             latin:keyLabel="ס" />
         <Key
@@ -130,13 +130,13 @@
             latin:keyLabel="מ" />
         <Key
             latin:keyLabel="צ"
-            latin:popupCharacters="צ׳" />
+            latin:moreKeys="צ׳" />
         <Key
             latin:keyLabel="ת"
-            latin:popupCharacters="ת׳" />
+            latin:moreKeys="ת׳" />
         <Key
             latin:keyLabel="ץ"
-            latin:popupCharacters="ץ׳" />
+            latin:moreKeys="ץ׳" />
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-10.400%p"
diff --git a/java/res/xml-sw600dp/kbd_rows_qwertz.xml b/java/res/xml-sw600dp/kbd_rows_qwertz.xml
index 3d177e7..98667e0 100644
--- a/java/res/xml-sw600dp/kbd_rows_qwertz.xml
+++ b/java/res/xml-sw600dp/kbd_rows_qwertz.xml
@@ -28,34 +28,34 @@
     >
         <Key
             latin:keyLabel="q"
-            latin:popupCharacters="@string/alternates_for_q" />
+            latin:moreKeys="@string/more_keys_for_q" />
         <Key
             latin:keyLabel="w"
-            latin:popupCharacters="@string/alternates_for_w" />
+            latin:moreKeys="@string/more_keys_for_w" />
         <Key
             latin:keyLabel="e"
-            latin:popupCharacters="@string/alternates_for_e" />
+            latin:moreKeys="@string/more_keys_for_e" />
         <Key
             latin:keyLabel="r"
-            latin:popupCharacters="@string/alternates_for_r" />
+            latin:moreKeys="@string/more_keys_for_r" />
         <Key
             latin:keyLabel="t"
-            latin:popupCharacters="@string/alternates_for_t" />
+            latin:moreKeys="@string/more_keys_for_t" />
         <Key
             latin:keyLabel="z"
-            latin:popupCharacters="@string/alternates_for_z" />
+            latin:moreKeys="@string/more_keys_for_z" />
         <Key
             latin:keyLabel="u"
-            latin:popupCharacters="@string/alternates_for_u" />
+            latin:moreKeys="@string/more_keys_for_u" />
         <Key
             latin:keyLabel="i"
-            latin:popupCharacters="@string/alternates_for_i" />
+            latin:moreKeys="@string/more_keys_for_i" />
         <Key
             latin:keyLabel="o"
-            latin:popupCharacters="@string/alternates_for_o" />
+            latin:moreKeys="@string/more_keys_for_o" />
         <Key
             latin:keyLabel="p"
-            latin:popupCharacters="@string/alternates_for_p" />
+            latin:moreKeys="@string/more_keys_for_p" />
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-10.0%p"
@@ -71,20 +71,20 @@
             latin:keyWidth="10.0%p" />
         <Key
             latin:keyLabel="y"
-            latin:popupCharacters="@string/alternates_for_y" />
+            latin:moreKeys="@string/more_keys_for_y" />
         <Key
             latin:keyLabel="x" />
         <Key
             latin:keyLabel="c"
-            latin:popupCharacters="@string/alternates_for_c" />
+            latin:moreKeys="@string/more_keys_for_c" />
         <Key
             latin:keyLabel="v"
-            latin:popupCharacters="@string/alternates_for_v" />
+            latin:moreKeys="@string/more_keys_for_v" />
         <Key
             latin:keyLabel="b" />
         <Key
             latin:keyLabel="n"
-            latin:popupCharacters="@string/alternates_for_n" />
+            latin:moreKeys="@string/more_keys_for_n" />
         <Key
             latin:keyLabel="m" />
         <switch>
@@ -101,12 +101,12 @@
                     latin:keyLabel=","
                     latin:keyLabelOption="hasUppercaseLetter"
                     latin:keyHintLabel="!"
-                    latin:popupCharacters="!" />
+                    latin:moreKeys="!" />
                 <Key
                     latin:keyLabel="."
                     latin:keyLabelOption="hasUppercaseLetter"
                     latin:keyHintLabel="\?"
-                    latin:popupCharacters="\?" />
+                    latin:moreKeys="\?" />
             </default>
         </switch>
         <include
diff --git a/java/res/xml-sw600dp/kbd_rows_russian.xml b/java/res/xml-sw600dp/kbd_rows_russian.xml
index 2f4b95e..cc9ad3a 100644
--- a/java/res/xml-sw600dp/kbd_rows_russian.xml
+++ b/java/res/xml-sw600dp/kbd_rows_russian.xml
@@ -36,7 +36,7 @@
             latin:keyLabel="к" />
         <Key
             latin:keyLabel="е"
-            latin:popupCharacters="@string/alternates_for_cyrillic_e" />
+            latin:moreKeys="@string/more_keys_for_cyrillic_e" />
         <Key
             latin:keyLabel="н" />
         <Key
@@ -124,12 +124,12 @@
                     latin:keyLabel=","
                     latin:keyLabelOption="hasUppercaseLetter"
                     latin:keyHintLabel="!"
-                    latin:popupCharacters="!" />
+                    latin:moreKeys="!" />
                 <Key
                     latin:keyLabel="."
                     latin:keyLabelOption="hasUppercaseLetter"
                     latin:keyHintLabel="\?"
-                    latin:popupCharacters="\?" />
+                    latin:moreKeys="\?" />
             </default>
         </switch>
         <include
diff --git a/java/res/xml-sw600dp/kbd_rows_scandinavian.xml b/java/res/xml-sw600dp/kbd_rows_scandinavian.xml
index 5059137..19fb521 100644
--- a/java/res/xml-sw600dp/kbd_rows_scandinavian.xml
+++ b/java/res/xml-sw600dp/kbd_rows_scandinavian.xml
@@ -28,34 +28,34 @@
     >
         <Key
             latin:keyLabel="q"
-            latin:popupCharacters="@string/alternates_for_q" />
+            latin:moreKeys="@string/more_keys_for_q" />
         <Key
             latin:keyLabel="w"
-            latin:popupCharacters="@string/alternates_for_w" />
+            latin:moreKeys="@string/more_keys_for_w" />
         <Key
             latin:keyLabel="e"
-            latin:popupCharacters="@string/alternates_for_e" />
+            latin:moreKeys="@string/more_keys_for_e" />
         <Key
             latin:keyLabel="r"
-            latin:popupCharacters="@string/alternates_for_r" />
+            latin:moreKeys="@string/more_keys_for_r" />
         <Key
             latin:keyLabel="t"
-            latin:popupCharacters="@string/alternates_for_t" />
+            latin:moreKeys="@string/more_keys_for_t" />
         <Key
             latin:keyLabel="y"
-            latin:popupCharacters="@string/alternates_for_y" />
+            latin:moreKeys="@string/more_keys_for_y" />
         <Key
             latin:keyLabel="u"
-            latin:popupCharacters="@string/alternates_for_u" />
+            latin:moreKeys="@string/more_keys_for_u" />
         <Key
             latin:keyLabel="i"
-            latin:popupCharacters="@string/alternates_for_i" />
+            latin:moreKeys="@string/more_keys_for_i" />
         <Key
             latin:keyLabel="o"
-            latin:popupCharacters="@string/alternates_for_o" />
+            latin:moreKeys="@string/more_keys_for_o" />
         <Key
             latin:keyLabel="p"
-            latin:popupCharacters="@string/alternates_for_p" />
+            latin:moreKeys="@string/more_keys_for_p" />
         <Key
             latin:keyLabel="å" />
         <Key
@@ -69,34 +69,34 @@
         <Key
             latin:keyLabel="a"
             latin:keyXPos="3.5%p"
-            latin:popupCharacters="@string/alternates_for_a" />
+            latin:moreKeys="@string/more_keys_for_a" />
         <Key
             latin:keyLabel="s"
-            latin:popupCharacters="@string/alternates_for_s" />
+            latin:moreKeys="@string/more_keys_for_s" />
         <Key
             latin:keyLabel="d"
-            latin:popupCharacters="@string/alternates_for_d" />
+            latin:moreKeys="@string/more_keys_for_d" />
         <Key
             latin:keyLabel="f" />
         <Key
             latin:keyLabel="g"
-            latin:popupCharacters="@string/alternates_for_g" />
+            latin:moreKeys="@string/more_keys_for_g" />
         <Key
             latin:keyLabel="h" />
         <Key
             latin:keyLabel="j" />
         <Key
             latin:keyLabel="k"
-            latin:popupCharacters="@string/alternates_for_k" />
+            latin:moreKeys="@string/more_keys_for_k" />
         <Key
             latin:keyLabel="l"
-            latin:popupCharacters="@string/alternates_for_l" />
+            latin:moreKeys="@string/more_keys_for_l" />
         <Key
             latin:keyLabel="@string/keylabel_for_scandinavia_row2_10"
-            latin:popupCharacters="@string/alternates_for_scandinavia_row2_10" />
+            latin:moreKeys="@string/more_keys_for_scandinavia_row2_10" />
         <Key
             latin:keyLabel="@string/keylabel_for_scandinavia_row2_11"
-            latin:popupCharacters="@string/alternates_for_scandinavia_row2_11" />
+            latin:moreKeys="@string/more_keys_for_scandinavia_row2_11" />
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-14.6%p"
@@ -112,20 +112,20 @@
             latin:keyWidth="4.35%p" />
         <Key
             latin:keyLabel="z"
-            latin:popupCharacters="@string/alternates_for_z" />
+            latin:moreKeys="@string/more_keys_for_z" />
         <Key
             latin:keyLabel="x" />
         <Key
             latin:keyLabel="c"
-            latin:popupCharacters="@string/alternates_for_c" />
+            latin:moreKeys="@string/more_keys_for_c" />
         <Key
             latin:keyLabel="v"
-            latin:popupCharacters="@string/alternates_for_v" />
+            latin:moreKeys="@string/more_keys_for_v" />
         <Key
             latin:keyLabel="b" />
         <Key
             latin:keyLabel="n"
-            latin:popupCharacters="@string/alternates_for_n" />
+            latin:moreKeys="@string/more_keys_for_n" />
         <Key
             latin:keyLabel="m" />
         <include
diff --git a/java/res/xml-sw600dp/kbd_rows_spanish.xml b/java/res/xml-sw600dp/kbd_rows_spanish.xml
index 49243eb..8506af6 100644
--- a/java/res/xml-sw600dp/kbd_rows_spanish.xml
+++ b/java/res/xml-sw600dp/kbd_rows_spanish.xml
@@ -30,29 +30,29 @@
     >
         <Key
             latin:keyLabel="a"
-            latin:popupCharacters="@string/alternates_for_a"
+            latin:moreKeys="@string/more_keys_for_a"
             latin:keyXPos="5.0%p" />
         <Key
             latin:keyLabel="s"
-            latin:popupCharacters="@string/alternates_for_s" />
+            latin:moreKeys="@string/more_keys_for_s" />
         <Key
             latin:keyLabel="d"
-            latin:popupCharacters="@string/alternates_for_d" />
+            latin:moreKeys="@string/more_keys_for_d" />
         <Key
             latin:keyLabel="f" />
         <Key
             latin:keyLabel="g"
-            latin:popupCharacters="@string/alternates_for_g" />
+            latin:moreKeys="@string/more_keys_for_g" />
         <Key
             latin:keyLabel="h" />
         <Key
             latin:keyLabel="j" />
         <Key
             latin:keyLabel="k"
-            latin:popupCharacters="@string/alternates_for_k" />
+            latin:moreKeys="@string/more_keys_for_k" />
         <Key
             latin:keyLabel="l"
-            latin:popupCharacters="@string/alternates_for_l" />
+            latin:moreKeys="@string/more_keys_for_l" />
         <Key
             latin:keyLabel="ñ" />
         <Key
diff --git a/java/res/xml-sw600dp/kbd_rows_symbols.xml b/java/res/xml-sw600dp/kbd_rows_symbols.xml
index 420e46c..d3513c9 100644
--- a/java/res/xml-sw600dp/kbd_rows_symbols.xml
+++ b/java/res/xml-sw600dp/kbd_rows_symbols.xml
@@ -30,34 +30,34 @@
     >
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_1"
-            latin:popupCharacters="@string/alternates_for_symbols_1" />
+            latin:moreKeys="@string/more_keys_for_symbols_1" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_2"
-            latin:popupCharacters="@string/alternates_for_symbols_2" />
+            latin:moreKeys="@string/more_keys_for_symbols_2" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_3"
-            latin:popupCharacters="@string/alternates_for_symbols_3" />
+            latin:moreKeys="@string/more_keys_for_symbols_3" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_4"
-            latin:popupCharacters="@string/alternates_for_symbols_4" />
+            latin:moreKeys="@string/more_keys_for_symbols_4" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_5"
-            latin:popupCharacters="@string/alternates_for_symbols_5" />
+            latin:moreKeys="@string/more_keys_for_symbols_5" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_6"
-            latin:popupCharacters="@string/alternates_for_symbols_6" />
+            latin:moreKeys="@string/more_keys_for_symbols_6" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_7"
-            latin:popupCharacters="@string/alternates_for_symbols_7" />
+            latin:moreKeys="@string/more_keys_for_symbols_7" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_8"
-            latin:popupCharacters="@string/alternates_for_symbols_8" />
+            latin:moreKeys="@string/more_keys_for_symbols_8" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_9"
-            latin:popupCharacters="@string/alternates_for_symbols_9" />
+            latin:moreKeys="@string/more_keys_for_symbols_9" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_0"
-            latin:popupCharacters="@string/alternates_for_symbols_0" />
+            latin:moreKeys="@string/more_keys_for_symbols_0" />
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-10.0%p"
@@ -73,24 +73,24 @@
             latin:keyStyle="currencyKeyStyle" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_percent"
-            latin:popupCharacters="@string/alternates_for_symbols_percent" />
+            latin:moreKeys="@string/more_keys_for_symbols_percent" />
         <Key
             latin:keyLabel="&amp;" />
         <Key
             latin:keyLabel="*"
-            latin:popupCharacters="†,‡,★" />
+            latin:moreKeys="†,‡,★" />
         <Key
             latin:keyLabel="-"
-            latin:popupCharacters="_,–,—" />
+            latin:moreKeys="_,–,—" />
         <Key
             latin:keyLabel="+"
-            latin:popupCharacters="±" />
+            latin:moreKeys="±" />
         <Key
             latin:keyLabel="("
-            latin:popupCharacters="[,{,&lt;" />
+            latin:moreKeys="[,{,&lt;" />
         <Key
             latin:keyLabel=")"
-            latin:popupCharacters="],},&gt;" />
+            latin:moreKeys="],},&gt;" />
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-14.6%p"
@@ -104,20 +104,20 @@
             latin:keyWidth="10.0%p" />
         <Key
             latin:keyLabel="&lt;"
-            latin:popupCharacters="≤,«,‹" />
+            latin:moreKeys="≤,«,‹" />
         <Key
             latin:keyLabel="&gt;"
-            latin:popupCharacters="≥,»,›" />
+            latin:moreKeys="≥,»,›" />
         <Key
             latin:keyLabel="="
-            latin:popupCharacters="≠,≈" />
+            latin:moreKeys="≠,≈" />
         <switch>
             <case
                 latin:mode="url"
             >
                 <Key
                     latin:keyLabel="\'"
-                    latin:popupCharacters="‘,’,‚,‛" />
+                    latin:moreKeys="‘,’,‚,‛" />
             </case>
             <default>
                 <Key
@@ -126,18 +126,18 @@
         </switch>
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_semicolon"
-            latin:popupCharacters="@string/alternates_for_symbols_semicolon" />
+            latin:moreKeys="@string/more_keys_for_symbols_semicolon" />
         <Key
             latin:keyLabel="@string/keylabel_for_comma"
-            latin:popupCharacters="@string/alternates_for_comma" />
+            latin:moreKeys="@string/more_keys_for_comma" />
         <Key
             latin:keyLabel="." />
         <Key
             latin:keyLabel="!"
-            latin:popupCharacters="¡" />
+            latin:moreKeys="¡" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_question"
-            latin:popupCharacters="@string/alternates_for_symbols_question" />
+            latin:moreKeys="@string/more_keys_for_symbols_question" />
         <Key
             latin:keyLabel="/"
             latin:keyWidth="fillRight" />
@@ -157,10 +157,10 @@
             latin:keyXPos="30.750%p"
             latin:keyWidth="39.750%p" />
         <!-- Note: DroidSans doesn't have double-high-reversed-quotation '\u201f' glyph. -->
-        <!-- latin:popupCharacters="“,”,„,‟,«,»,‘,’,‚,‛" -->
+        <!-- latin:moreKeys="“,”,„,‟,«,»,‘,’,‚,‛" -->
         <Key
             latin:keyLabel="&quot;"
-            latin:popupCharacters="“,”,«,»,‘,’,‚,‛" />
+            latin:moreKeys="“,”,«,»,‘,’,‚,‛" />
         <Key
             latin:keyLabel="_" />
         <Spacer
diff --git a/java/res/xml-sw600dp/kbd_rows_symbols_shift.xml b/java/res/xml-sw600dp/kbd_rows_symbols_shift.xml
index c5143d9..3d62eff 100644
--- a/java/res/xml-sw600dp/kbd_rows_symbols_shift.xml
+++ b/java/res/xml-sw600dp/kbd_rows_symbols_shift.xml
@@ -34,19 +34,19 @@
             latin:keyLabel="|" />
         <Key
             latin:keyLabel="•"
-            latin:popupCharacters="♪,♥,♠,♦,♣" />
+            latin:moreKeys="♪,♥,♠,♦,♣" />
         <Key
             latin:keyLabel="√" />
         <Key
             latin:keyLabel="π"
-            latin:popupCharacters="Π" />
+            latin:moreKeys="Π" />
         <Key
             latin:keyLabel="÷" />
         <Key
             latin:keyLabel="×" />
         <Key
             latin:keyLabel="§"
-            latin:popupCharacters="¶" />
+            latin:moreKeys="¶" />
         <Key
             latin:keyLabel="Δ" />
         <Key
@@ -68,13 +68,13 @@
             latin:keyLabel="¥" />
         <Key
             latin:keyLabel="^"
-            latin:popupCharacters="↑,↓,←,→" />
+            latin:moreKeys="↑,↓,←,→" />
         <Key
             latin:keyLabel="°"
-            latin:popupCharacters="′,″" />
+            latin:moreKeys="′,″" />
         <Key
             latin:keyLabel="±"
-            latin:popupCharacters="∞" />
+            latin:moreKeys="∞" />
         <Key
             latin:keyLabel="{" />
         <Key
diff --git a/java/res/xml-sw768dp/kbd_key_styles.xml b/java/res/xml-sw768dp/kbd_key_styles.xml
index 52ee91a..6570ebc 100644
--- a/java/res/xml-sw768dp/kbd_key_styles.xml
+++ b/java/res/xml-sw768dp/kbd_key_styles.xml
@@ -54,8 +54,8 @@
         latin:keyLabel=":-)"
         latin:keyOutputText=":-) "
         latin:keyLabelOption="hasPopupHint"
-        latin:popupCharacters="@string/alternates_for_smiley"
-        latin:maxMiniKeyboardColumn="5" />
+        latin:moreKeys="@string/more_keys_for_smiley"
+        latin:maxMoreKeysColumn="5" />
     <key-style
         latin:styleName="settingsKeyStyle"
         latin:code="@integer/key_settings"
@@ -103,5 +103,5 @@
         latin:keyLabel="@string/keylabel_for_popular_domain"
         latin:keyLabelOption="fontNormal|hasPopupHint"
         latin:keyOutputText="@string/keylabel_for_popular_domain"
-        latin:popupCharacters="@string/alternates_for_popular_domain" />
+        latin:moreKeys="@string/more_keys_for_popular_domain" />
 </merge>
diff --git a/java/res/xml-sw768dp/kbd_popup_template.xml b/java/res/xml-sw768dp/kbd_mini_keyboard_template.xml
similarity index 93%
rename from java/res/xml-sw768dp/kbd_popup_template.xml
rename to java/res/xml-sw768dp/kbd_mini_keyboard_template.xml
index 7d39d1a..1c15a5e 100644
--- a/java/res/xml-sw768dp/kbd_popup_template.xml
+++ b/java/res/xml-sw768dp/kbd_mini_keyboard_template.xml
@@ -20,8 +20,6 @@
 
 <Keyboard xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
     latin:keyWidth="5.0%p"
-    latin:horizontalGap="0px"
-    latin:verticalGap="0px"
     latin:rowHeight="@dimen/popup_key_height"
     >
 </Keyboard>
diff --git a/java/res/xml-sw768dp/kbd_qwerty_row1.xml b/java/res/xml-sw768dp/kbd_qwerty_row1.xml
index 0fdb463..14b8bdd 100644
--- a/java/res/xml-sw768dp/kbd_qwerty_row1.xml
+++ b/java/res/xml-sw768dp/kbd_qwerty_row1.xml
@@ -30,34 +30,34 @@
             latin:keyWidth="7.969%p" />
         <Key
             latin:keyLabel="q"
-            latin:popupCharacters="@string/alternates_for_q" />
+            latin:moreKeys="@string/more_keys_for_q" />
         <Key
             latin:keyLabel="w"
-            latin:popupCharacters="@string/alternates_for_w" />
+            latin:moreKeys="@string/more_keys_for_w" />
         <Key
             latin:keyLabel="e"
-            latin:popupCharacters="@string/alternates_for_e" />
+            latin:moreKeys="@string/more_keys_for_e" />
         <Key
             latin:keyLabel="r"
-            latin:popupCharacters="@string/alternates_for_r" />
+            latin:moreKeys="@string/more_keys_for_r" />
         <Key
             latin:keyLabel="t"
-            latin:popupCharacters="@string/alternates_for_t" />
+            latin:moreKeys="@string/more_keys_for_t" />
         <Key
             latin:keyLabel="y"
-            latin:popupCharacters="@string/alternates_for_y" />
+            latin:moreKeys="@string/more_keys_for_y" />
         <Key
             latin:keyLabel="u"
-            latin:popupCharacters="@string/alternates_for_u" />
+            latin:moreKeys="@string/more_keys_for_u" />
         <Key
             latin:keyLabel="i"
-            latin:popupCharacters="@string/alternates_for_i" />
+            latin:moreKeys="@string/more_keys_for_i" />
         <Key
             latin:keyLabel="o"
-            latin:popupCharacters="@string/alternates_for_o" />
+            latin:moreKeys="@string/more_keys_for_o" />
         <Key
             latin:keyLabel="p"
-            latin:popupCharacters="@string/alternates_for_p" />
+            latin:moreKeys="@string/more_keys_for_p" />
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-9.219%p"
diff --git a/java/res/xml-sw768dp/kbd_qwerty_row2.xml b/java/res/xml-sw768dp/kbd_qwerty_row2.xml
index 7f7dd57..2c312a3 100644
--- a/java/res/xml-sw768dp/kbd_qwerty_row2.xml
+++ b/java/res/xml-sw768dp/kbd_qwerty_row2.xml
@@ -30,28 +30,28 @@
             latin:keyWidth="11.172%p"/>
         <Key
             latin:keyLabel="a"
-            latin:popupCharacters="@string/alternates_for_a" />
+            latin:moreKeys="@string/more_keys_for_a" />
         <Key
             latin:keyLabel="s"
-            latin:popupCharacters="@string/alternates_for_s" />
+            latin:moreKeys="@string/more_keys_for_s" />
         <Key
             latin:keyLabel="d"
-            latin:popupCharacters="@string/alternates_for_d" />
+            latin:moreKeys="@string/more_keys_for_d" />
         <Key
             latin:keyLabel="f" />
         <Key
             latin:keyLabel="g"
-            latin:popupCharacters="@string/alternates_for_g" />
+            latin:moreKeys="@string/more_keys_for_g" />
         <Key
             latin:keyLabel="h" />
         <Key
             latin:keyLabel="j" />
         <Key
             latin:keyLabel="k"
-            latin:popupCharacters="@string/alternates_for_k" />
+            latin:moreKeys="@string/more_keys_for_k" />
         <Key
             latin:keyLabel="l"
-            latin:popupCharacters="@string/alternates_for_l" />
+            latin:moreKeys="@string/more_keys_for_l" />
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-15.704%p"
diff --git a/java/res/xml-sw768dp/kbd_qwerty_row3.xml b/java/res/xml-sw768dp/kbd_qwerty_row3.xml
index 677235f..f2f137e 100644
--- a/java/res/xml-sw768dp/kbd_qwerty_row3.xml
+++ b/java/res/xml-sw768dp/kbd_qwerty_row3.xml
@@ -29,20 +29,20 @@
             latin:keyWidth="13.829%p"/>
         <Key
             latin:keyLabel="z"
-            latin:popupCharacters="@string/alternates_for_z" />
+            latin:moreKeys="@string/more_keys_for_z" />
         <Key
             latin:keyLabel="x" />
         <Key
             latin:keyLabel="c"
-            latin:popupCharacters="@string/alternates_for_c" />
+            latin:moreKeys="@string/more_keys_for_c" />
         <Key
             latin:keyLabel="v"
-            latin:popupCharacters="@string/alternates_for_v" />
+            latin:moreKeys="@string/more_keys_for_v" />
         <Key
             latin:keyLabel="b" />
         <Key
             latin:keyLabel="n"
-            latin:popupCharacters="@string/alternates_for_n" />
+            latin:moreKeys="@string/more_keys_for_n" />
         <Key
             latin:keyLabel="m" />
         <include
diff --git a/java/res/xml-sw768dp/kbd_qwerty_row4.xml b/java/res/xml-sw768dp/kbd_qwerty_row4.xml
index 1ff9d81..9346111 100644
--- a/java/res/xml-sw768dp/kbd_qwerty_row4.xml
+++ b/java/res/xml-sw768dp/kbd_qwerty_row4.xml
@@ -59,7 +59,7 @@
                             latin:keyLabel=":"
                             latin:keyLabelOption="hasUppercaseLetter"
                             latin:keyHintLabel="+"
-                            latin:popupCharacters="+" />
+                            latin:moreKeys="+" />
                     </case>
                     <default>
                         <Key
@@ -78,7 +78,7 @@
                             latin:keyLabel="/"
                             latin:keyLabelOption="hasUppercaseLetter"
                             latin:keyHintLabel="\@"
-                            latin:popupCharacters="\@" />
+                            latin:moreKeys="\@" />
                     </default>
                 </switch>
             </default>
diff --git a/java/res/xml-sw768dp/kbd_row3_comma_period.xml b/java/res/xml-sw768dp/kbd_row3_comma_period.xml
index 2545316..b844430 100644
--- a/java/res/xml-sw768dp/kbd_row3_comma_period.xml
+++ b/java/res/xml-sw768dp/kbd_row3_comma_period.xml
@@ -35,12 +35,12 @@
                 latin:keyLabel=","
                 latin:keyLabelOption="hasUppercaseLetter"
                 latin:keyHintLabel="!"
-                latin:popupCharacters="!" />
+                latin:moreKeys="!" />
             <Key
                 latin:keyLabel="."
                 latin:keyLabelOption="hasUppercaseLetter"
                 latin:keyHintLabel="\?"
-                latin:popupCharacters="\?" />
+                latin:moreKeys="\?" />
         </default>
     </switch>
 </merge>
diff --git a/java/res/xml-sw768dp/kbd_row4_apostrophe_dash.xml b/java/res/xml-sw768dp/kbd_row4_apostrophe_dash.xml
index 50d4d4b..9536e81 100644
--- a/java/res/xml-sw768dp/kbd_row4_apostrophe_dash.xml
+++ b/java/res/xml-sw768dp/kbd_row4_apostrophe_dash.xml
@@ -35,14 +35,14 @@
                 latin:keyLabel="/"
                 latin:keyLabelOption="hasUppercaseLetter"
                 latin:keyHintLabel=":"
-                latin:popupCharacters=":" />
+                latin:moreKeys=":" />
         </case>
         <default>
             <Key
                 latin:keyLabel="@string/keylabel_for_apostrophe"
                 latin:keyLabelOption="hasUppercaseLetter"
                 latin:keyHintLabel="@string/keyhintlabel_for_apostrophe"
-                latin:popupCharacters="@string/alternates_for_apostrophe" />
+                latin:moreKeys="@string/more_keys_for_apostrophe" />
         </default>
     </switch>
     <switch>
@@ -57,7 +57,7 @@
                 latin:keyLabel="@string/keylabel_for_dash"
                 latin:keyLabelOption="hasUppercaseLetter"
                 latin:keyHintLabel="@string/keyhintlabel_for_dash"
-                latin:popupCharacters="@string/alternates_for_dash" />
+                latin:moreKeys="@string/more_keys_for_dash" />
         </default>
     </switch>
 </merge>
diff --git a/java/res/xml-sw768dp/kbd_rows_arabic.xml b/java/res/xml-sw768dp/kbd_rows_arabic.xml
index 2f10d54..984ba50 100644
--- a/java/res/xml-sw768dp/kbd_rows_arabic.xml
+++ b/java/res/xml-sw768dp/kbd_rows_arabic.xml
@@ -40,7 +40,7 @@
             latin:keyLabel="ق" />
         <Key
             latin:keyLabel="ف"
-            latin:popupCharacters="ڤ" />
+            latin:moreKeys="ڤ" />
         <Key
             latin:keyLabel="غ" />
         <Key
@@ -49,14 +49,14 @@
              \u0647\u0640: ARABIC LETTER HEH + ARABIC TATWEEL -->
         <Key
             latin:keyLabel="ه"
-            latin:popupCharacters="\ufeeb|\u0647\u0640" />
+            latin:moreKeys="\ufeeb|\u0647\u0640" />
         <Key
             latin:keyLabel="خ" />
         <Key
             latin:keyLabel="ح" />
         <Key
             latin:keyLabel="ج"
-            latin:popupCharacters="چ" />
+            latin:moreKeys="چ" />
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-11.500%p"
@@ -77,7 +77,7 @@
             latin:keyLabel="ي" />
         <Key
             latin:keyLabel="ب"
-            latin:popupCharacters="پ" />
+            latin:moreKeys="پ" />
         <!-- \ufefb: ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
              \u0644: ARABIC LETTER LAM
              \u0627: ARABIC LETTER ALEF
@@ -89,13 +89,13 @@
              \u0622: ARABIC LETTER ALEF WITH MADDA ABOVE -->
         <Key
             latin:keyLabel="ل"
-            latin:popupCharacters="\ufefb|\u0644\u0627,\ufef7|\u0644\u0623,\ufef9|\u0644\u0625,\ufef5|\u0644\u0622" />
+            latin:moreKeys="\ufefb|\u0644\u0627,\ufef7|\u0644\u0623,\ufef9|\u0644\u0625,\ufef5|\u0644\u0622" />
         <!-- \u0623: ARABIC LETTER ALEF WITH HAMZA ABOVE
              \u0625: ARABIC LETTER ALEF WITH HAMZA BELOW
              \u0622: ARABIC LETTER ALEF WITH MADDA ABOVE -->
         <Key
             latin:keyLabel="ا"
-            latin:popupCharacters="\u0623,\u0625,\u0622" />
+            latin:moreKeys="\u0623,\u0625,\u0622" />
         <Key
             latin:keyLabel="ت" />
         <Key
@@ -104,7 +104,7 @@
             latin:keyLabel="م" />
         <Key
             latin:keyLabel="ك"
-            latin:popupCharacters="گ" />
+            latin:moreKeys="گ" />
         <Key
             latin:keyLabel="ط" />
         <Key
@@ -134,7 +134,7 @@
             latin:keyLabel="و" />
         <Key
             latin:keyLabel="ز"
-            latin:popupCharacters="ژ" />
+            latin:moreKeys="ژ" />
         <Key
             latin:keyLabel="ظ" />
         <Key
diff --git a/java/res/xml-sw768dp/kbd_rows_azerty.xml b/java/res/xml-sw768dp/kbd_rows_azerty.xml
index 7aec0d1..4659d99 100644
--- a/java/res/xml-sw768dp/kbd_rows_azerty.xml
+++ b/java/res/xml-sw768dp/kbd_rows_azerty.xml
@@ -32,34 +32,34 @@
             latin:keyWidth="7.969%p" />
         <Key
             latin:keyLabel="a"
-            latin:popupCharacters="@string/alternates_for_a" />
+            latin:moreKeys="@string/more_keys_for_a" />
         <Key
             latin:keyLabel="z"
-            latin:popupCharacters="@string/alternates_for_z" />
+            latin:moreKeys="@string/more_keys_for_z" />
         <Key
             latin:keyLabel="e"
-            latin:popupCharacters="@string/alternates_for_e" />
+            latin:moreKeys="@string/more_keys_for_e" />
         <Key
             latin:keyLabel="r"
-            latin:popupCharacters="@string/alternates_for_r" />
+            latin:moreKeys="@string/more_keys_for_r" />
         <Key
             latin:keyLabel="t"
-            latin:popupCharacters="@string/alternates_for_t" />
+            latin:moreKeys="@string/more_keys_for_t" />
         <Key
             latin:keyLabel="y"
-            latin:popupCharacters="@string/alternates_for_y" />
+            latin:moreKeys="@string/more_keys_for_y" />
         <Key
             latin:keyLabel="u"
-            latin:popupCharacters="@string/alternates_for_u" />
+            latin:moreKeys="@string/more_keys_for_u" />
         <Key
             latin:keyLabel="i"
-            latin:popupCharacters="@string/alternates_for_i" />
+            latin:moreKeys="@string/more_keys_for_i" />
         <Key
             latin:keyLabel="o"
-            latin:popupCharacters="@string/alternates_for_o" />
+            latin:moreKeys="@string/more_keys_for_o" />
         <Key
             latin:keyLabel="p"
-            latin:popupCharacters="@string/alternates_for_p" />
+            latin:moreKeys="@string/more_keys_for_p" />
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-9.219%p"
@@ -74,28 +74,28 @@
             latin:keyWidth="10.167%p" />
         <Key
             latin:keyLabel="q"
-            latin:popupCharacters="@string/alternates_for_q" />
+            latin:moreKeys="@string/more_keys_for_q" />
         <Key
             latin:keyLabel="s"
-            latin:popupCharacters="@string/alternates_for_s" />
+            latin:moreKeys="@string/more_keys_for_s" />
         <Key
             latin:keyLabel="d"
-            latin:popupCharacters="@string/alternates_for_d" />
+            latin:moreKeys="@string/more_keys_for_d" />
         <Key
             latin:keyLabel="f" />
         <Key
             latin:keyLabel="g"
-            latin:popupCharacters="@string/alternates_for_g" />
+            latin:moreKeys="@string/more_keys_for_g" />
         <Key
             latin:keyLabel="h" />
         <Key
             latin:keyLabel="j" />
         <Key
             latin:keyLabel="k"
-            latin:popupCharacters="@string/alternates_for_k" />
+            latin:moreKeys="@string/more_keys_for_k" />
         <Key
             latin:keyLabel="l"
-            latin:popupCharacters="@string/alternates_for_l" />
+            latin:moreKeys="@string/more_keys_for_l" />
         <Key
             latin:keyLabel="m" />
         <Key
@@ -111,25 +111,25 @@
             latin:keyWidth="13.829%p" />
         <Key
             latin:keyLabel="w"
-            latin:popupCharacters="@string/alternates_for_w" />
+            latin:moreKeys="@string/more_keys_for_w" />
         <Key
             latin:keyLabel="x" />
         <Key
             latin:keyLabel="c"
-            latin:popupCharacters="@string/alternates_for_c" />
+            latin:moreKeys="@string/more_keys_for_c" />
         <Key
             latin:keyLabel="v"
-            latin:popupCharacters="@string/alternates_for_v" />
+            latin:moreKeys="@string/more_keys_for_v" />
         <Key
             latin:keyLabel="b" />
         <Key
             latin:keyLabel="n"
-            latin:popupCharacters="@string/alternates_for_n" />
+            latin:moreKeys="@string/more_keys_for_n" />
         <Key
             latin:keyLabel="\'"
             latin:keyLabelOption="hasUppercaseLetter"
             latin:keyHintLabel=":"
-            latin:popupCharacters=":" />
+            latin:moreKeys=":" />
         <switch>
             <case
                 latin:mode="email"
@@ -144,12 +144,12 @@
                     latin:keyLabel=","
                     latin:keyLabelOption="hasUppercaseLetter"
                     latin:keyHintLabel="!"
-                    latin:popupCharacters="!" />
+                    latin:moreKeys="!" />
                 <Key
                     latin:keyLabel="."
                     latin:keyLabelOption="hasUppercaseLetter"
                     latin:keyHintLabel="\?"
-                    latin:popupCharacters="\?" />
+                    latin:moreKeys="\?" />
             </default>
         </switch>
         <Key
diff --git a/java/res/xml-sw768dp/kbd_rows_hebrew.xml b/java/res/xml-sw768dp/kbd_rows_hebrew.xml
index bacc6a1..27b39d1 100644
--- a/java/res/xml-sw768dp/kbd_rows_hebrew.xml
+++ b/java/res/xml-sw768dp/kbd_rows_hebrew.xml
@@ -66,17 +66,17 @@
             latin:keyLabel="ד" />
         <Key
             latin:keyLabel="ג"
-            latin:popupCharacters="ג׳" />
+            latin:moreKeys="ג׳" />
         <Key
             latin:keyLabel="כ" />
         <Key
             latin:keyLabel="ע" />
         <Key
             latin:keyLabel="י"
-            latin:popupCharacters="ײַ" />
+            latin:moreKeys="ײַ" />
         <Key
             latin:keyLabel="ח"
-            latin:popupCharacters="ח׳" />
+            latin:moreKeys="ח׳" />
         <Key
             latin:keyLabel="ל" />
         <Key
@@ -89,7 +89,7 @@
     >
         <Key
             latin:keyLabel="ז"
-            latin:popupCharacters="ז׳"
+            latin:moreKeys="ז׳"
             latin:keyXPos="13.829%p" />
         <Key
             latin:keyLabel="ס" />
@@ -103,13 +103,13 @@
             latin:keyLabel="מ" />
         <Key
             latin:keyLabel="צ"
-            latin:popupCharacters="צ׳" />
+            latin:moreKeys="צ׳" />
         <Key
             latin:keyLabel="ת"
-            latin:popupCharacters="ת׳" />
+            latin:moreKeys="ת׳" />
         <Key
             latin:keyLabel="ץ"
-            latin:popupCharacters="ץ׳" />
+            latin:moreKeys="ץ׳" />
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-10.400%p"
diff --git a/java/res/xml-sw768dp/kbd_rows_qwertz.xml b/java/res/xml-sw768dp/kbd_rows_qwertz.xml
index 5556d1f..82e0dd0 100644
--- a/java/res/xml-sw768dp/kbd_rows_qwertz.xml
+++ b/java/res/xml-sw768dp/kbd_rows_qwertz.xml
@@ -32,34 +32,34 @@
             latin:keyWidth="7.969%p" />
         <Key
             latin:keyLabel="q"
-            latin:popupCharacters="@string/alternates_for_q" />
+            latin:moreKeys="@string/more_keys_for_q" />
         <Key
             latin:keyLabel="w"
-            latin:popupCharacters="@string/alternates_for_w" />
+            latin:moreKeys="@string/more_keys_for_w" />
         <Key
             latin:keyLabel="e"
-            latin:popupCharacters="@string/alternates_for_e" />
+            latin:moreKeys="@string/more_keys_for_e" />
         <Key
             latin:keyLabel="r"
-            latin:popupCharacters="@string/alternates_for_r" />
+            latin:moreKeys="@string/more_keys_for_r" />
         <Key
             latin:keyLabel="t"
-            latin:popupCharacters="@string/alternates_for_t" />
+            latin:moreKeys="@string/more_keys_for_t" />
         <Key
             latin:keyLabel="z"
-            latin:popupCharacters="@string/alternates_for_z" />
+            latin:moreKeys="@string/more_keys_for_z" />
         <Key
             latin:keyLabel="u"
-            latin:popupCharacters="@string/alternates_for_u" />
+            latin:moreKeys="@string/more_keys_for_u" />
         <Key
             latin:keyLabel="i"
-            latin:popupCharacters="@string/alternates_for_i" />
+            latin:moreKeys="@string/more_keys_for_i" />
         <Key
             latin:keyLabel="o"
-            latin:popupCharacters="@string/alternates_for_o" />
+            latin:moreKeys="@string/more_keys_for_o" />
         <Key
             latin:keyLabel="p"
-            latin:popupCharacters="@string/alternates_for_p" />
+            latin:moreKeys="@string/more_keys_for_p" />
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-9.219%p"
@@ -75,20 +75,20 @@
             latin:keyWidth="13.829%p" />
         <Key
             latin:keyLabel="y"
-            latin:popupCharacters="@string/alternates_for_y" />
+            latin:moreKeys="@string/more_keys_for_y" />
         <Key
             latin:keyLabel="x" />
         <Key
             latin:keyLabel="c"
-            latin:popupCharacters="@string/alternates_for_c" />
+            latin:moreKeys="@string/more_keys_for_c" />
         <Key
             latin:keyLabel="v"
-            latin:popupCharacters="@string/alternates_for_v" />
+            latin:moreKeys="@string/more_keys_for_v" />
         <Key
             latin:keyLabel="b" />
         <Key
             latin:keyLabel="n"
-            latin:popupCharacters="@string/alternates_for_n" />
+            latin:moreKeys="@string/more_keys_for_n" />
         <Key
             latin:keyLabel="m" />
         <switch>
@@ -105,12 +105,12 @@
                     latin:keyLabel=","
                     latin:keyLabelOption="hasUppercaseLetter"
                     latin:keyHintLabel="!"
-                    latin:popupCharacters="!" />
+                    latin:moreKeys="!" />
                 <Key
                     latin:keyLabel="."
                     latin:keyLabelOption="hasUppercaseLetter"
                     latin:keyHintLabel="\?"
-                    latin:popupCharacters="\?" />
+                    latin:moreKeys="\?" />
             </default>
         </switch>
         <Key
diff --git a/java/res/xml-sw768dp/kbd_rows_russian.xml b/java/res/xml-sw768dp/kbd_rows_russian.xml
index 82ceaea..e5f5569 100644
--- a/java/res/xml-sw768dp/kbd_rows_russian.xml
+++ b/java/res/xml-sw768dp/kbd_rows_russian.xml
@@ -39,7 +39,7 @@
             latin:keyLabel="к" />
         <Key
             latin:keyLabel="е"
-            latin:popupCharacters="@string/alternates_for_cyrillic_e" />
+            latin:moreKeys="@string/more_keys_for_cyrillic_e" />
         <Key
             latin:keyLabel="н" />
         <Key
diff --git a/java/res/xml-sw768dp/kbd_rows_scandinavian.xml b/java/res/xml-sw768dp/kbd_rows_scandinavian.xml
index 743c6bd..b9d1680 100644
--- a/java/res/xml-sw768dp/kbd_rows_scandinavian.xml
+++ b/java/res/xml-sw768dp/kbd_rows_scandinavian.xml
@@ -32,34 +32,34 @@
             latin:keyWidth="7.500%p" />
         <Key
             latin:keyLabel="q"
-            latin:popupCharacters="@string/alternates_for_q" />
+            latin:moreKeys="@string/more_keys_for_q" />
         <Key
             latin:keyLabel="w"
-            latin:popupCharacters="@string/alternates_for_w" />
+            latin:moreKeys="@string/more_keys_for_w" />
         <Key
             latin:keyLabel="e"
-            latin:popupCharacters="@string/alternates_for_e" />
+            latin:moreKeys="@string/more_keys_for_e" />
         <Key
             latin:keyLabel="r"
-            latin:popupCharacters="@string/alternates_for_r" />
+            latin:moreKeys="@string/more_keys_for_r" />
         <Key
             latin:keyLabel="t"
-            latin:popupCharacters="@string/alternates_for_t" />
+            latin:moreKeys="@string/more_keys_for_t" />
         <Key
             latin:keyLabel="y"
-            latin:popupCharacters="@string/alternates_for_y" />
+            latin:moreKeys="@string/more_keys_for_y" />
         <Key
             latin:keyLabel="u"
-            latin:popupCharacters="@string/alternates_for_u" />
+            latin:moreKeys="@string/more_keys_for_u" />
         <Key
             latin:keyLabel="i"
-            latin:popupCharacters="@string/alternates_for_i" />
+            latin:moreKeys="@string/more_keys_for_i" />
         <Key
             latin:keyLabel="o"
-            latin:popupCharacters="@string/alternates_for_o" />
+            latin:moreKeys="@string/more_keys_for_o" />
         <Key
             latin:keyLabel="p"
-            latin:popupCharacters="@string/alternates_for_p" />
+            latin:moreKeys="@string/more_keys_for_p" />
         <Key
             latin:keyLabel="å" />
         <Key
@@ -76,34 +76,34 @@
             latin:keyWidth="9.375%p" />
         <Key
             latin:keyLabel="a"
-            latin:popupCharacters="@string/alternates_for_a" />
+            latin:moreKeys="@string/more_keys_for_a" />
         <Key
             latin:keyLabel="s"
-            latin:popupCharacters="@string/alternates_for_s" />
+            latin:moreKeys="@string/more_keys_for_s" />
         <Key
             latin:keyLabel="d"
-            latin:popupCharacters="@string/alternates_for_d" />
+            latin:moreKeys="@string/more_keys_for_d" />
         <Key
             latin:keyLabel="f" />
         <Key
             latin:keyLabel="g"
-            latin:popupCharacters="@string/alternates_for_g" />
+            latin:moreKeys="@string/more_keys_for_g" />
         <Key
             latin:keyLabel="h" />
         <Key
             latin:keyLabel="j" />
         <Key
             latin:keyLabel="k"
-            latin:popupCharacters="@string/alternates_for_k" />
+            latin:moreKeys="@string/more_keys_for_k" />
         <Key
             latin:keyLabel="l"
-            latin:popupCharacters="@string/alternates_for_l" />
+            latin:moreKeys="@string/more_keys_for_l" />
         <Key
             latin:keyLabel="@string/keylabel_for_scandinavia_row2_10"
-            latin:popupCharacters="@string/alternates_for_scandinavia_row2_10" />
+            latin:moreKeys="@string/more_keys_for_scandinavia_row2_10" />
         <Key
             latin:keyLabel="@string/keylabel_for_scandinavia_row2_11"
-            latin:popupCharacters="@string/alternates_for_scandinavia_row2_11" />
+            latin:moreKeys="@string/more_keys_for_scandinavia_row2_11" />
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-9.375%p"
@@ -117,20 +117,20 @@
             latin:keyWidth="12.750%p" />
         <Key
             latin:keyLabel="z"
-            latin:popupCharacters="@string/alternates_for_z" />
+            latin:moreKeys="@string/more_keys_for_z" />
         <Key
             latin:keyLabel="x" />
         <Key
             latin:keyLabel="c"
-            latin:popupCharacters="@string/alternates_for_c" />
+            latin:moreKeys="@string/more_keys_for_c" />
         <Key
             latin:keyLabel="v"
-            latin:popupCharacters="@string/alternates_for_v" />
+            latin:moreKeys="@string/more_keys_for_v" />
         <Key
             latin:keyLabel="b" />
         <Key
             latin:keyLabel="n"
-            latin:popupCharacters="@string/alternates_for_n" />
+            latin:moreKeys="@string/more_keys_for_n" />
         <Key
             latin:keyLabel="m" />
         <include
diff --git a/java/res/xml-sw768dp/kbd_rows_spanish.xml b/java/res/xml-sw768dp/kbd_rows_spanish.xml
index 510cafb..c737f40 100644
--- a/java/res/xml-sw768dp/kbd_rows_spanish.xml
+++ b/java/res/xml-sw768dp/kbd_rows_spanish.xml
@@ -34,28 +34,28 @@
             latin:keyWidth="10.167%p" />
         <Key
             latin:keyLabel="a"
-            latin:popupCharacters="@string/alternates_for_a" />
+            latin:moreKeys="@string/more_keys_for_a" />
         <Key
             latin:keyLabel="s"
-            latin:popupCharacters="@string/alternates_for_s" />
+            latin:moreKeys="@string/more_keys_for_s" />
         <Key
             latin:keyLabel="d"
-            latin:popupCharacters="@string/alternates_for_d" />
+            latin:moreKeys="@string/more_keys_for_d" />
         <Key
             latin:keyLabel="f" />
         <Key
             latin:keyLabel="g"
-            latin:popupCharacters="@string/alternates_for_g" />
+            latin:moreKeys="@string/more_keys_for_g" />
         <Key
             latin:keyLabel="h" />
         <Key
             latin:keyLabel="j" />
         <Key
             latin:keyLabel="k"
-            latin:popupCharacters="@string/alternates_for_k" />
+            latin:moreKeys="@string/more_keys_for_k" />
         <Key
             latin:keyLabel="l"
-            latin:popupCharacters="@string/alternates_for_l" />
+            latin:moreKeys="@string/more_keys_for_l" />
         <Key
             latin:keyLabel="ñ" />
         <Key
diff --git a/java/res/xml-sw768dp/kbd_rows_symbols.xml b/java/res/xml-sw768dp/kbd_rows_symbols.xml
index 66b9789..fd18a2a 100644
--- a/java/res/xml-sw768dp/kbd_rows_symbols.xml
+++ b/java/res/xml-sw768dp/kbd_rows_symbols.xml
@@ -34,34 +34,34 @@
             latin:keyWidth="7.969%p" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_1"
-            latin:popupCharacters="@string/alternates_for_symbols_1" />
+            latin:moreKeys="@string/more_keys_for_symbols_1" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_2"
-            latin:popupCharacters="@string/alternates_for_symbols_2" />
+            latin:moreKeys="@string/more_keys_for_symbols_2" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_3"
-            latin:popupCharacters="@string/alternates_for_symbols_3" />
+            latin:moreKeys="@string/more_keys_for_symbols_3" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_4"
-            latin:popupCharacters="@string/alternates_for_symbols_4" />
+            latin:moreKeys="@string/more_keys_for_symbols_4" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_5"
-            latin:popupCharacters="@string/alternates_for_symbols_5" />
+            latin:moreKeys="@string/more_keys_for_symbols_5" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_6"
-            latin:popupCharacters="@string/alternates_for_symbols_6" />
+            latin:moreKeys="@string/more_keys_for_symbols_6" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_7"
-            latin:popupCharacters="@string/alternates_for_symbols_7" />
+            latin:moreKeys="@string/more_keys_for_symbols_7" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_8"
-            latin:popupCharacters="@string/alternates_for_symbols_8" />
+            latin:moreKeys="@string/more_keys_for_symbols_8" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_9"
-            latin:popupCharacters="@string/alternates_for_symbols_9" />
+            latin:moreKeys="@string/more_keys_for_symbols_9" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_0"
-            latin:popupCharacters="@string/alternates_for_symbols_0" />
+            latin:moreKeys="@string/more_keys_for_symbols_0" />
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-9.219%p"
@@ -80,24 +80,24 @@
             latin:keyStyle="currencyKeyStyle" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_percent"
-            latin:popupCharacters="@string/alternates_for_symbols_percent" />
+            latin:moreKeys="@string/more_keys_for_symbols_percent" />
         <Key
             latin:keyLabel="&amp;" />
         <Key
             latin:keyLabel="*"
-            latin:popupCharacters="†,‡,★" />
+            latin:moreKeys="†,‡,★" />
         <Key
             latin:keyLabel="-"
-            latin:popupCharacters="_,–,—" />
+            latin:moreKeys="_,–,—" />
         <Key
             latin:keyLabel="+"
-            latin:popupCharacters="±" />
+            latin:moreKeys="±" />
         <Key
             latin:keyLabel="("
-            latin:popupCharacters="[,{,&lt;" />
+            latin:moreKeys="[,{,&lt;" />
         <Key
             latin:keyLabel=")"
-            latin:popupCharacters="],},&gt;" />
+            latin:moreKeys="],},&gt;" />
         <Key
             latin:keyStyle="returnKeyStyle"
             latin:keyXPos="-15.704%p"
@@ -111,20 +111,20 @@
             latin:keyWidth="13.829%p" />
         <Key
             latin:keyLabel="&lt;"
-            latin:popupCharacters="≤,«,‹" />
+            latin:moreKeys="≤,«,‹" />
         <Key
             latin:keyLabel="&gt;"
-            latin:popupCharacters="≥,»,›" />
+            latin:moreKeys="≥,»,›" />
         <Key
             latin:keyLabel="="
-            latin:popupCharacters="≠,≈" />
+            latin:moreKeys="≠,≈" />
         <switch>
             <case
                 latin:mode="url"
             >
                 <Key
                     latin:keyLabel="\'"
-                    latin:popupCharacters="‘,’,‚,‛" />
+                    latin:moreKeys="‘,’,‚,‛" />
             </case>
             <default>
                 <Key
@@ -133,18 +133,18 @@
         </switch>
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_semicolon"
-            latin:popupCharacters="@string/alternates_for_symbols_semicolon" />
+            latin:moreKeys="@string/more_keys_for_symbols_semicolon" />
         <Key
             latin:keyLabel="@string/keylabel_for_comma"
-            latin:popupCharacters="@string/alternates_for_comma" />
+            latin:moreKeys="@string/more_keys_for_comma" />
         <Key
             latin:keyLabel="." />
         <Key
             latin:keyLabel="!"
-            latin:popupCharacters="¡" />
+            latin:moreKeys="¡" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_question"
-            latin:popupCharacters="@string/alternates_for_symbols_question" />
+            latin:moreKeys="@string/more_keys_for_symbols_question" />
         <Key
             latin:keyStyle="toMoreSymbolKeyStyle"
             latin:keyXPos="-13.750%p"
@@ -172,10 +172,10 @@
             latin:keyXPos="31.250%p"
             latin:keyWidth="37.500%p" />
         <!-- Note: DroidSans doesn't have double-high-reversed-quotation '\u201f' glyph. -->
-        <!-- latin:popupCharacters="“,”,„,‟,«,»,‘,’,‚,‛" -->
+        <!-- latin:moreKeys="“,”,„,‟,«,»,‘,’,‚,‛" -->
         <Key
             latin:keyLabel="&quot;"
-            latin:popupCharacters="“,”,«,»,‘,’,‚,‛" />
+            latin:moreKeys="“,”,«,»,‘,’,‚,‛" />
         <Key
             latin:keyLabel="_" />
         <switch>
diff --git a/java/res/xml-sw768dp/kbd_rows_symbols_shift.xml b/java/res/xml-sw768dp/kbd_rows_symbols_shift.xml
index 82bc4b2..30f72ac 100644
--- a/java/res/xml-sw768dp/kbd_rows_symbols_shift.xml
+++ b/java/res/xml-sw768dp/kbd_rows_symbols_shift.xml
@@ -38,19 +38,19 @@
             latin:keyLabel="|" />
         <Key
             latin:keyLabel="•"
-            latin:popupCharacters="♪,♥,♠,♦,♣" />
+            latin:moreKeys="♪,♥,♠,♦,♣" />
         <Key
             latin:keyLabel="√" />
         <Key
             latin:keyLabel="π"
-            latin:popupCharacters="Π" />
+            latin:moreKeys="Π" />
         <Key
             latin:keyLabel="÷" />
         <Key
             latin:keyLabel="×" />
         <Key
             latin:keyLabel="§"
-            latin:popupCharacters="¶" />
+            latin:moreKeys="¶" />
         <Key
             latin:keyLabel="Δ" />
         <Key
@@ -75,13 +75,13 @@
             latin:keyLabel="¥" />
         <Key
             latin:keyLabel="^"
-            latin:popupCharacters="↑,↓,←,→" />
+            latin:moreKeys="↑,↓,←,→" />
         <Key
             latin:keyLabel="°"
-            latin:popupCharacters="′,″" />
+            latin:moreKeys="′,″" />
         <Key
             latin:keyLabel="±"
-            latin:popupCharacters="∞" />
+            latin:moreKeys="∞" />
         <Key
             latin:keyLabel="{" />
         <Key
diff --git a/java/res/xml/kbd_currency_key_styles.xml b/java/res/xml/kbd_currency_key_styles.xml
index d2c7117..bcdfe56 100644
--- a/java/res/xml/kbd_currency_key_styles.xml
+++ b/java/res/xml/kbd_currency_key_styles.xml
@@ -62,7 +62,7 @@
             <key-style
                 latin:styleName="currencyKeyStyle"
                 latin:keyLabel="€"
-                latin:popupCharacters="@string/alternates_for_currency_euro" />
+                latin:moreKeys="@string/more_keys_for_currency_euro" />
         </case>
         <case
             latin:languageCode="ca|et|lb|mt|sla"
@@ -70,7 +70,7 @@
             <key-style
                 latin:styleName="currencyKeyStyle"
                 latin:keyLabel="€"
-                latin:popupCharacters="@string/alternates_for_currency_euro" />
+                latin:moreKeys="@string/more_keys_for_currency_euro" />
         </case>
         <case
             latin:countryCode="AD|AT|BE|CY|EE|FI|FR|DE|GR|IE|IT|XK|LU|MT|MO|ME|NL|PT|SM|SK|SI|ES|VA"
@@ -78,7 +78,7 @@
             <key-style
                 latin:styleName="currencyKeyStyle"
                 latin:keyLabel="€"
-                latin:popupCharacters="@string/alternates_for_currency_euro" />
+                latin:moreKeys="@string/more_keys_for_currency_euro" />
         </case>
         <case
             latin:languageCode="iw"
@@ -86,7 +86,7 @@
             <key-style
                 latin:styleName="currencyKeyStyle"
                 latin:keyLabel="₪"
-                latin:popupCharacters="@string/alternates_for_currency_general" />
+                latin:moreKeys="@string/more_keys_for_currency_general" />
         </case>
         <!-- United Kingdom -->
         <case
@@ -95,13 +95,13 @@
             <key-style
                 latin:styleName="currencyKeyStyle"
                 latin:keyLabel="£"
-                latin:popupCharacters="@string/alternates_for_currency_pound" />
+                latin:moreKeys="@string/more_keys_for_currency_pound" />
         </case>
         <default>
             <key-style
                 latin:styleName="currencyKeyStyle"
                 latin:keyLabel="$"
-                latin:popupCharacters="@string/alternates_for_currency_dollar" />
+                latin:moreKeys="@string/more_keys_for_currency_dollar" />
         </default>
     </switch>
 </merge>
diff --git a/java/res/xml/kbd_key_styles.xml b/java/res/xml/kbd_key_styles.xml
index 86f0bf2..12eab22 100644
--- a/java/res/xml/kbd_key_styles.xml
+++ b/java/res/xml/kbd_key_styles.xml
@@ -33,7 +33,7 @@
             <key-style
                 latin:styleName="f1PopupStyle"
                 latin:keyLabelOption="hasPopupHint"
-                latin:popupCharacters="@string/alternates_for_f1"
+                latin:moreKeys="@string/more_keys_for_f1"
                 latin:parentStyle="functionalKeyStyle" />
         </case>
         <!-- clobberSettingsKey="false -->
@@ -43,7 +43,7 @@
             <key-style
                 latin:styleName="f1PopupStyle"
                 latin:keyLabelOption="hasPopupHint"
-                latin:popupCharacters="@string/alternates_for_f1_settings"
+                latin:moreKeys="@string/more_keys_for_f1_settings"
                 latin:parentStyle="functionalKeyStyle" />
         </case>
         <!-- clobberSettingsKey="false" hasSettingsKey="true" -->
@@ -53,7 +53,7 @@
             <key-style
                 latin:styleName="f1PopupStyle"
                 latin:keyLabelOption="hasPopupHint"
-                latin:popupCharacters="@string/alternates_for_f1_navigate"
+                latin:moreKeys="@string/more_keys_for_f1_navigate"
                 latin:parentStyle="functionalKeyStyle" />
         </case>
         <!-- clobberSettingsKey="false" and hasSettingsKey="true" navigateAction="false" -->
@@ -61,7 +61,7 @@
             <key-style
                 latin:styleName="f1PopupStyle"
                 latin:keyLabelOption="hasPopupHint"
-                latin:popupCharacters="@string/alternates_for_f1"
+                latin:moreKeys="@string/more_keys_for_f1"
                 latin:parentStyle="functionalKeyStyle" />
         </default>
     </switch>
@@ -90,8 +90,8 @@
                 latin:keyLabel=":-)"
                 latin:keyOutputText=":-) "
                 latin:keyLabelOption="hasPopupHint"
-                latin:popupCharacters="@string/alternates_for_smiley"
-                latin:maxMiniKeyboardColumn="5"
+                latin:moreKeys="@string/more_keys_for_smiley"
+                latin:maxMoreKeysColumn="5"
                 latin:parentStyle="functionalKeyStyle" />
         </case>
         <case
@@ -220,7 +220,7 @@
         latin:keyLabel="."
         latin:keyHintLabel="@string/keyhintlabel_for_punctuation"
         latin:keyLabelOption="hasPopupHint"
-        latin:popupCharacters="@string/alternates_for_punctuation"
-        latin:maxMiniKeyboardColumn="@integer/mini_keyboard_column_for_punctuation"
+        latin:moreKeys="@string/more_keys_for_punctuation"
+        latin:maxMoreKeysColumn="@integer/mini_keyboard_column_for_punctuation"
         latin:parentStyle="functionalKeyStyle" />
 </merge>
diff --git a/java/res/xml/kbd_mini_keyboard_template.xml b/java/res/xml/kbd_mini_keyboard_template.xml
index 79db081..d25878b 100644
--- a/java/res/xml/kbd_mini_keyboard_template.xml
+++ b/java/res/xml/kbd_mini_keyboard_template.xml
@@ -20,8 +20,6 @@
 
 <Keyboard xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
     latin:keyWidth="10%p"
-    latin:horizontalGap="@fraction/key_horizontal_gap"
-    latin:verticalGap="0px"
     latin:rowHeight="@dimen/popup_key_height"
     >
 </Keyboard>
diff --git a/java/res/xml/kbd_qwerty_row1.xml b/java/res/xml/kbd_qwerty_row1.xml
index daa1382..e8e8d1b 100644
--- a/java/res/xml/kbd_qwerty_row1.xml
+++ b/java/res/xml/kbd_qwerty_row1.xml
@@ -27,43 +27,43 @@
         <Key
             latin:keyLabel="q"
             latin:keyHintLabel="1"
-            latin:popupCharacters="@string/alternates_for_q" />
+            latin:moreKeys="@string/more_keys_for_q" />
         <Key
             latin:keyLabel="w"
             latin:keyHintLabel="2"
-            latin:popupCharacters="@string/alternates_for_w" />
+            latin:moreKeys="@string/more_keys_for_w" />
         <Key
             latin:keyLabel="e"
             latin:keyHintLabel="3"
-            latin:popupCharacters="@string/alternates_for_e" />
+            latin:moreKeys="@string/more_keys_for_e" />
         <Key
             latin:keyLabel="r"
             latin:keyHintLabel="4"
-            latin:popupCharacters="@string/alternates_for_r" />
+            latin:moreKeys="@string/more_keys_for_r" />
         <Key
             latin:keyLabel="t"
             latin:keyHintLabel="5"
-            latin:popupCharacters="@string/alternates_for_t" />
+            latin:moreKeys="@string/more_keys_for_t" />
         <Key
             latin:keyLabel="y"
             latin:keyHintLabel="6"
-            latin:popupCharacters="@string/alternates_for_y" />
+            latin:moreKeys="@string/more_keys_for_y" />
         <Key
             latin:keyLabel="u"
             latin:keyHintLabel="7"
-            latin:popupCharacters="@string/alternates_for_u" />
+            latin:moreKeys="@string/more_keys_for_u" />
         <Key
             latin:keyLabel="i"
             latin:keyHintLabel="8"
-            latin:popupCharacters="@string/alternates_for_i" />
+            latin:moreKeys="@string/more_keys_for_i" />
         <Key
             latin:keyLabel="o"
             latin:keyHintLabel="9"
-            latin:popupCharacters="@string/alternates_for_o" />
+            latin:moreKeys="@string/more_keys_for_o" />
         <Key
             latin:keyLabel="p"
             latin:keyHintLabel="0"
-            latin:popupCharacters="@string/alternates_for_p"
+            latin:moreKeys="@string/more_keys_for_p"
             latin:keyWidth="fillRight" />
     </Row>
 </merge>
diff --git a/java/res/xml/kbd_qwerty_row2.xml b/java/res/xml/kbd_qwerty_row2.xml
index 6e4872e..8986780 100644
--- a/java/res/xml/kbd_qwerty_row2.xml
+++ b/java/res/xml/kbd_qwerty_row2.xml
@@ -26,29 +26,29 @@
     >
         <Key
             latin:keyLabel="a"
-            latin:popupCharacters="@string/alternates_for_a"
+            latin:moreKeys="@string/more_keys_for_a"
             latin:keyXPos="5%p" />
         <Key
             latin:keyLabel="s"
-            latin:popupCharacters="@string/alternates_for_s" />
+            latin:moreKeys="@string/more_keys_for_s" />
         <Key
             latin:keyLabel="d"
-            latin:popupCharacters="@string/alternates_for_d" />
+            latin:moreKeys="@string/more_keys_for_d" />
         <Key
             latin:keyLabel="f" />
         <Key
             latin:keyLabel="g"
-            latin:popupCharacters="@string/alternates_for_g" />
+            latin:moreKeys="@string/more_keys_for_g" />
         <Key
             latin:keyLabel="h" />
         <Key
             latin:keyLabel="j" />
         <Key
             latin:keyLabel="k"
-            latin:popupCharacters="@string/alternates_for_k" />
+            latin:moreKeys="@string/more_keys_for_k" />
         <Key
             latin:keyLabel="l"
-            latin:popupCharacters="@string/alternates_for_l" />
+            latin:moreKeys="@string/more_keys_for_l" />
         <!-- Here is 5%p space -->
     </Row>
 </merge>
diff --git a/java/res/xml/kbd_qwerty_row3.xml b/java/res/xml/kbd_qwerty_row3.xml
index 6a20355..c2b45e7 100644
--- a/java/res/xml/kbd_qwerty_row3.xml
+++ b/java/res/xml/kbd_qwerty_row3.xml
@@ -30,20 +30,20 @@
             latin:visualInsetsRight="1%p" />
         <Key
             latin:keyLabel="z"
-            latin:popupCharacters="@string/alternates_for_z" />
+            latin:moreKeys="@string/more_keys_for_z" />
         <Key
             latin:keyLabel="x" />
         <Key
             latin:keyLabel="c"
-            latin:popupCharacters="@string/alternates_for_c" />
+            latin:moreKeys="@string/more_keys_for_c" />
         <Key
             latin:keyLabel="v"
-            latin:popupCharacters="@string/alternates_for_v" />
+            latin:moreKeys="@string/more_keys_for_v" />
         <Key
             latin:keyLabel="b" />
         <Key
             latin:keyLabel="n"
-            latin:popupCharacters="@string/alternates_for_n" />
+            latin:moreKeys="@string/more_keys_for_n" />
         <Key
             latin:keyLabel="m" />
         <Key
diff --git a/java/res/xml/kbd_rows_arabic.xml b/java/res/xml/kbd_rows_arabic.xml
index daa2a65..569ac7e 100644
--- a/java/res/xml/kbd_rows_arabic.xml
+++ b/java/res/xml/kbd_rows_arabic.xml
@@ -29,47 +29,47 @@
         <Key
             latin:keyLabel="ض"
             latin:keyHintLabel="1"
-            latin:popupCharacters="1,١" />
+            latin:moreKeys="1,١" />
         <Key
             latin:keyLabel="ص"
             latin:keyHintLabel="2"
-            latin:popupCharacters="2,٢" />
+            latin:moreKeys="2,٢" />
         <Key
             latin:keyLabel="ق"
             latin:keyHintLabel="3"
-            latin:popupCharacters="3,٣" />
+            latin:moreKeys="3,٣" />
         <!-- \u06a4: ARABIC LETTER VEH -->
         <Key
             latin:keyLabel="ف"
             latin:keyHintLabel="4"
-            latin:popupCharacters="4,٤,\u06a4" />
+            latin:moreKeys="4,٤,\u06a4" />
         <Key
             latin:keyLabel="غ"
             latin:keyHintLabel="5"
-            latin:popupCharacters="5,٥" />
+            latin:moreKeys="5,٥" />
         <Key
             latin:keyLabel="ع"
             latin:keyHintLabel="6"
-            latin:popupCharacters="6,٦" />
+            latin:moreKeys="6,٦" />
         <!-- \ufeeb: ARABIC LETTER HEH INITIAL FORM
              \u0647\u0640: ARABIC LETTER HEH + ARABIC TATWEEL -->
         <Key
             latin:keyLabel="ه"
             latin:keyHintLabel="7"
-            latin:popupCharacters="7,٧,\ufeeb|\u0647\u0640" />
+            latin:moreKeys="7,٧,\ufeeb|\u0647\u0640" />
         <Key
             latin:keyLabel="خ"
             latin:keyHintLabel="8"
-            latin:popupCharacters="8,٨" />
+            latin:moreKeys="8,٨" />
         <Key
             latin:keyLabel="ح"
             latin:keyHintLabel="9"
-            latin:popupCharacters="9,٩" />
+            latin:moreKeys="9,٩" />
         <!-- \u0686: ARABIC LETTER TCHEH -->
         <Key
             latin:keyLabel="ج"
             latin:keyHintLabel="0"
-            latin:popupCharacters="0,٠,\u0686"
+            latin:moreKeys="0,٠,\u0686"
             latin:keyWidth="fillRight" />
     </Row>
     <Row
@@ -83,10 +83,10 @@
              \u0649: ARABIC LETTER ALEF MAKSURA -->
         <Key
             latin:keyLabel="ي"
-            latin:popupCharacters="\u0626,\u0649" />
+            latin:moreKeys="\u0626,\u0649" />
         <Key
             latin:keyLabel="ب"
-            latin:popupCharacters="پ" />
+            latin:moreKeys="پ" />
         <!-- \ufefb: ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
              \u0644: ARABIC LETTER LAM
              \u0627: ARABIC LETTER ALEF
@@ -98,24 +98,24 @@
              \u0622: ARABIC LETTER ALEF WITH MADDA ABOVE -->
         <Key
             latin:keyLabel="ل"
-            latin:popupCharacters="\ufefb|\u0644\u0627,\ufef7|\u0644\u0623,\ufef9|\u0644\u0625,\ufef5|\u0644\u0622" />
+            latin:moreKeys="\ufefb|\u0644\u0627,\ufef7|\u0644\u0623,\ufef9|\u0644\u0625,\ufef5|\u0644\u0622" />
         <!-- \u0621: ARABIC LETTER HAMZA
              \u0623: ARABIC LETTER ALEF WITH HAMZA ABOVE
              \u0625: ARABIC LETTER ALEF WITH HAMZA BELOW
              \u0622: ARABIC LETTER ALEF WITH MADDA ABOVE -->
         <Key
             latin:keyLabel="ا"
-            latin:popupCharacters="\u0621,\u0623,\u0625,\u0622" />
+            latin:moreKeys="\u0621,\u0623,\u0625,\u0622" />
         <Key
             latin:keyLabel="ت"
-            latin:popupCharacters="ث" />
+            latin:moreKeys="ث" />
         <Key
             latin:keyLabel="ن" />
         <Key
             latin:keyLabel="م" />
         <Key
             latin:keyLabel="ك"
-            latin:popupCharacters="گ"
+            latin:moreKeys="گ"
             latin:keyWidth="fillRight" />
     </Row>
     <Row
@@ -132,14 +132,14 @@
             latin:keyLabel="د" />
         <Key
             latin:keyLabel="ز"
-            latin:popupCharacters="ژ" />
+            latin:moreKeys="ژ" />
         <Key
             latin:keyLabel="ر" />
         <Key
             latin:keyLabel="ة" />
         <Key
             latin:keyLabel="و"
-            latin:popupCharacters="ؤ" />
+            latin:moreKeys="ؤ" />
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyWidth="fillRight"
diff --git a/java/res/xml/kbd_rows_azerty.xml b/java/res/xml/kbd_rows_azerty.xml
index dbf25eb..54fe546 100644
--- a/java/res/xml/kbd_rows_azerty.xml
+++ b/java/res/xml/kbd_rows_azerty.xml
@@ -29,43 +29,43 @@
         <Key
             latin:keyLabel="a"
             latin:keyHintLabel="1"
-            latin:popupCharacters="@string/alternates_for_a" />
+            latin:moreKeys="@string/more_keys_for_a" />
         <Key
             latin:keyLabel="z"
             latin:keyHintLabel="2"
-            latin:popupCharacters="@string/alternates_for_z" />
+            latin:moreKeys="@string/more_keys_for_z" />
         <Key
             latin:keyLabel="e"
             latin:keyHintLabel="3"
-            latin:popupCharacters="@string/alternates_for_e" />
+            latin:moreKeys="@string/more_keys_for_e" />
         <Key
             latin:keyLabel="r"
             latin:keyHintLabel="4"
-            latin:popupCharacters="@string/alternates_for_r" />
+            latin:moreKeys="@string/more_keys_for_r" />
         <Key
             latin:keyLabel="t"
             latin:keyHintLabel="5"
-            latin:popupCharacters="@string/alternates_for_t" />
+            latin:moreKeys="@string/more_keys_for_t" />
         <Key
             latin:keyLabel="y"
             latin:keyHintLabel="6"
-            latin:popupCharacters="@string/alternates_for_y" />
+            latin:moreKeys="@string/more_keys_for_y" />
         <Key
             latin:keyLabel="u"
             latin:keyHintLabel="7"
-            latin:popupCharacters="@string/alternates_for_u" />
+            latin:moreKeys="@string/more_keys_for_u" />
         <Key
             latin:keyLabel="i"
             latin:keyHintLabel="8"
-            latin:popupCharacters="@string/alternates_for_i" />
+            latin:moreKeys="@string/more_keys_for_i" />
         <Key
             latin:keyLabel="o"
             latin:keyHintLabel="9"
-            latin:popupCharacters="@string/alternates_for_o" />
+            latin:moreKeys="@string/more_keys_for_o" />
         <Key
             latin:keyLabel="p"
             latin:keyHintLabel="0"
-            latin:popupCharacters="@string/alternates_for_p"
+            latin:moreKeys="@string/more_keys_for_p"
             latin:keyWidth="fillRight" />
     </Row>
     <Row
@@ -73,28 +73,28 @@
     >
         <Key
             latin:keyLabel="q"
-            latin:popupCharacters="@string/alternates_for_q" />
+            latin:moreKeys="@string/more_keys_for_q" />
         <Key
             latin:keyLabel="s"
-            latin:popupCharacters="@string/alternates_for_s" />
+            latin:moreKeys="@string/more_keys_for_s" />
         <Key
             latin:keyLabel="d"
-            latin:popupCharacters="@string/alternates_for_d" />
+            latin:moreKeys="@string/more_keys_for_d" />
         <Key
             latin:keyLabel="f" />
         <Key
             latin:keyLabel="g"
-            latin:popupCharacters="@string/alternates_for_g" />
+            latin:moreKeys="@string/more_keys_for_g" />
         <Key
             latin:keyLabel="h" />
         <Key
             latin:keyLabel="j" />
         <Key
             latin:keyLabel="k"
-            latin:popupCharacters="@string/alternates_for_k" />
+            latin:moreKeys="@string/more_keys_for_k" />
         <Key
             latin:keyLabel="l"
-            latin:popupCharacters="@string/alternates_for_l" />
+            latin:moreKeys="@string/more_keys_for_l" />
         <Key
             latin:keyLabel="m"
             latin:keyWidth="fillRight" />
@@ -108,24 +108,24 @@
             latin:visualInsetsRight="1%p" />
         <Key
             latin:keyLabel="w"
-            latin:popupCharacters="@string/alternates_for_w" />
+            latin:moreKeys="@string/more_keys_for_w" />
         <Key
             latin:keyLabel="x" />
         <Key
             latin:keyLabel="c"
 
-            latin:popupCharacters="@string/alternates_for_c" />
+            latin:moreKeys="@string/more_keys_for_c" />
         <Key
             latin:keyLabel="v"
-            latin:popupCharacters="@string/alternates_for_v" />
+            latin:moreKeys="@string/more_keys_for_v" />
         <Key
             latin:keyLabel="b" />
         <Key
             latin:keyLabel="n"
-            latin:popupCharacters="@string/alternates_for_n" />
+            latin:moreKeys="@string/more_keys_for_n" />
         <Key
             latin:keyLabel="\'"
-            latin:popupCharacters="‘,’,‚,‛" />
+            latin:moreKeys="‘,’,‚,‛" />
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyWidth="fillRight"
diff --git a/java/res/xml/kbd_rows_hebrew.xml b/java/res/xml/kbd_rows_hebrew.xml
index 1ec0768..6be8174 100644
--- a/java/res/xml/kbd_rows_hebrew.xml
+++ b/java/res/xml/kbd_rows_hebrew.xml
@@ -57,17 +57,17 @@
             latin:keyLabel="ד" />
         <Key
             latin:keyLabel="ג"
-            latin:popupCharacters="ג׳" />
+            latin:moreKeys="ג׳" />
         <Key
             latin:keyLabel="כ" />
         <Key
             latin:keyLabel="ע" />
         <Key
             latin:keyLabel="י"
-            latin:popupCharacters="ײַ" />
+            latin:moreKeys="ײַ" />
         <Key
             latin:keyLabel="ח"
-            latin:popupCharacters="ח׳" />
+            latin:moreKeys="ח׳" />
         <Key
             latin:keyLabel="ל" />
         <Key
@@ -81,7 +81,7 @@
     >
         <Key
             latin:keyLabel="ז"
-            latin:popupCharacters="ז׳"
+            latin:moreKeys="ז׳"
             latin:keyXPos="5%p" />
         <Key
             latin:keyLabel="ס" />
@@ -95,13 +95,13 @@
             latin:keyLabel="מ" />
         <Key
             latin:keyLabel="צ"
-            latin:popupCharacters="צ׳" />
+            latin:moreKeys="צ׳" />
         <Key
             latin:keyLabel="ת"
-            latin:popupCharacters="ת׳" />
+            latin:moreKeys="ת׳" />
         <Key
             latin:keyLabel="ץ"
-            latin:popupCharacters="ץ׳" />
+            latin:moreKeys="ץ׳" />
         <!-- Here is 5%p space -->
     </Row>
     <include
diff --git a/java/res/xml/kbd_rows_qwertz.xml b/java/res/xml/kbd_rows_qwertz.xml
index f948921..71bb601 100644
--- a/java/res/xml/kbd_rows_qwertz.xml
+++ b/java/res/xml/kbd_rows_qwertz.xml
@@ -29,43 +29,43 @@
         <Key
             latin:keyLabel="q"
             latin:keyHintLabel="1"
-            latin:popupCharacters="@string/alternates_for_q" />
+            latin:moreKeys="@string/more_keys_for_q" />
         <Key
             latin:keyLabel="w"
             latin:keyHintLabel="2"
-            latin:popupCharacters="@string/alternates_for_w" />
+            latin:moreKeys="@string/more_keys_for_w" />
         <Key
             latin:keyLabel="e"
             latin:keyHintLabel="3"
-            latin:popupCharacters="@string/alternates_for_e" />
+            latin:moreKeys="@string/more_keys_for_e" />
         <Key
             latin:keyLabel="r"
             latin:keyHintLabel="4"
-            latin:popupCharacters="@string/alternates_for_r" />
+            latin:moreKeys="@string/more_keys_for_r" />
         <Key
             latin:keyLabel="t"
             latin:keyHintLabel="5"
-            latin:popupCharacters="@string/alternates_for_t" />
+            latin:moreKeys="@string/more_keys_for_t" />
         <Key
             latin:keyLabel="z"
             latin:keyHintLabel="6"
-            latin:popupCharacters="@string/alternates_for_z" />
+            latin:moreKeys="@string/more_keys_for_z" />
         <Key
             latin:keyLabel="u"
             latin:keyHintLabel="7"
-            latin:popupCharacters="@string/alternates_for_u" />
+            latin:moreKeys="@string/more_keys_for_u" />
         <Key
             latin:keyLabel="i"
             latin:keyHintLabel="8"
-            latin:popupCharacters="@string/alternates_for_i" />
+            latin:moreKeys="@string/more_keys_for_i" />
         <Key
             latin:keyLabel="o"
             latin:keyHintLabel="9"
-            latin:popupCharacters="@string/alternates_for_o" />
+            latin:moreKeys="@string/more_keys_for_o" />
         <Key
             latin:keyLabel="p"
             latin:keyHintLabel="0"
-            latin:popupCharacters="@string/alternates_for_p"
+            latin:moreKeys="@string/more_keys_for_p"
             latin:keyWidth="fillRight" />
     </Row>
     <include
@@ -79,20 +79,20 @@
             latin:visualInsetsRight="1%p" />
         <Key
             latin:keyLabel="y"
-            latin:popupCharacters="@string/alternates_for_y" />
+            latin:moreKeys="@string/more_keys_for_y" />
         <Key
             latin:keyLabel="x" />
         <Key
             latin:keyLabel="c"
-            latin:popupCharacters="@string/alternates_for_c" />
+            latin:moreKeys="@string/more_keys_for_c" />
         <Key
             latin:keyLabel="v"
-            latin:popupCharacters="@string/alternates_for_v" />
+            latin:moreKeys="@string/more_keys_for_v" />
         <Key
             latin:keyLabel="b" />
         <Key
             latin:keyLabel="n"
-            latin:popupCharacters="@string/alternates_for_n" />
+            latin:moreKeys="@string/more_keys_for_n" />
         <Key
             latin:keyLabel="m" />
         <Key
diff --git a/java/res/xml/kbd_rows_russian.xml b/java/res/xml/kbd_rows_russian.xml
index 0c7a237..d6075d2 100644
--- a/java/res/xml/kbd_rows_russian.xml
+++ b/java/res/xml/kbd_rows_russian.xml
@@ -29,47 +29,47 @@
         <Key
             latin:keyLabel="й"
             latin:keyHintLabel="1"
-            latin:popupCharacters="1"
+            latin:moreKeys="1"
             latin:keyWidth="8.75%p" />
         <Key
             latin:keyLabel="ц"
             latin:keyHintLabel="2"
-            latin:popupCharacters="2" />
+            latin:moreKeys="2" />
         <Key
             latin:keyLabel="у"
             latin:keyHintLabel="3"
-            latin:popupCharacters="3" />
+            latin:moreKeys="3" />
         <Key
             latin:keyLabel="к"
             latin:keyHintLabel="4"
-            latin:popupCharacters="4" />
+            latin:moreKeys="4" />
         <Key
             latin:keyLabel="е"
             latin:keyHintLabel="5"
-            latin:popupCharacters="@string/alternates_for_cyrillic_e" />
+            latin:moreKeys="@string/more_keys_for_cyrillic_e" />
         <Key
             latin:keyLabel="н"
             latin:keyHintLabel="6"
-            latin:popupCharacters="6" />
+            latin:moreKeys="6" />
         <Key
             latin:keyLabel="г"
             latin:keyHintLabel="7"
-            latin:popupCharacters="7" />
+            latin:moreKeys="7" />
         <Key
             latin:keyLabel="ш"
             latin:keyHintLabel="8"
-            latin:popupCharacters="8" />
+            latin:moreKeys="8" />
         <Key
             latin:keyLabel="щ"
             latin:keyHintLabel="9"
-            latin:popupCharacters="9" />
+            latin:moreKeys="9" />
         <Key
             latin:keyLabel="з"
             latin:keyHintLabel="0"
-            latin:popupCharacters="0" />
+            latin:moreKeys="0" />
         <Key
             latin:keyLabel="х"
-            latin:popupCharacters="@string/alternates_for_cyrillic_ha"
+            latin:moreKeys="@string/more_keys_for_cyrillic_ha"
             latin:keyWidth="fillRight" />
     </Row>
     <Row
@@ -120,7 +120,7 @@
             latin:keyLabel="т" />
         <Key
             latin:keyLabel="ь"
-            latin:popupCharacters="@string/alternates_for_cyrillic_soft_sign" />
+            latin:moreKeys="@string/more_keys_for_cyrillic_soft_sign" />
         <Key
             latin:keyLabel="б" />
         <Key
diff --git a/java/res/xml/kbd_rows_scandinavian.xml b/java/res/xml/kbd_rows_scandinavian.xml
index 7e8902e..6ef54eb 100644
--- a/java/res/xml/kbd_rows_scandinavian.xml
+++ b/java/res/xml/kbd_rows_scandinavian.xml
@@ -29,44 +29,44 @@
         <Key
             latin:keyLabel="q"
             latin:keyHintLabel="1"
-            latin:popupCharacters="@string/alternates_for_q"
+            latin:moreKeys="@string/more_keys_for_q"
             latin:keyWidth="8.75%p" />
         <Key
             latin:keyLabel="w"
             latin:keyHintLabel="2"
-            latin:popupCharacters="@string/alternates_for_w" />
+            latin:moreKeys="@string/more_keys_for_w" />
         <Key
             latin:keyLabel="e"
             latin:keyHintLabel="3"
-            latin:popupCharacters="@string/alternates_for_e" />
+            latin:moreKeys="@string/more_keys_for_e" />
         <Key
             latin:keyLabel="r"
             latin:keyHintLabel="4"
-            latin:popupCharacters="@string/alternates_for_r" />
+            latin:moreKeys="@string/more_keys_for_r" />
         <Key
             latin:keyLabel="t"
             latin:keyHintLabel="5"
-            latin:popupCharacters="@string/alternates_for_t" />
+            latin:moreKeys="@string/more_keys_for_t" />
         <Key
             latin:keyLabel="y"
             latin:keyHintLabel="6"
-            latin:popupCharacters="@string/alternates_for_y" />
+            latin:moreKeys="@string/more_keys_for_y" />
         <Key
             latin:keyLabel="u"
             latin:keyHintLabel="7"
-            latin:popupCharacters="@string/alternates_for_u" />
+            latin:moreKeys="@string/more_keys_for_u" />
         <Key
             latin:keyLabel="i"
             latin:keyHintLabel="8"
-            latin:popupCharacters="@string/alternates_for_i" />
+            latin:moreKeys="@string/more_keys_for_i" />
         <Key
             latin:keyLabel="o"
             latin:keyHintLabel="9"
-            latin:popupCharacters="@string/alternates_for_o" />
+            latin:moreKeys="@string/more_keys_for_o" />
         <Key
             latin:keyLabel="p"
             latin:keyHintLabel="0"
-            latin:popupCharacters="@string/alternates_for_p" />
+            latin:moreKeys="@string/more_keys_for_p" />
         <Key
             latin:keyLabel="å"
             latin:keyWidth="fillRight" />
@@ -76,35 +76,35 @@
     >
         <Key
             latin:keyLabel="a"
-            latin:popupCharacters="@string/alternates_for_a"
+            latin:moreKeys="@string/more_keys_for_a"
             latin:keyWidth="8.75%p" />
         <Key
             latin:keyLabel="s"
-            latin:popupCharacters="@string/alternates_for_s" />
+            latin:moreKeys="@string/more_keys_for_s" />
         <Key
             latin:keyLabel="d"
-            latin:popupCharacters="@string/alternates_for_d" />
+            latin:moreKeys="@string/more_keys_for_d" />
         <Key
             latin:keyLabel="f" />
         <Key
             latin:keyLabel="g"
-            latin:popupCharacters="@string/alternates_for_g" />
+            latin:moreKeys="@string/more_keys_for_g" />
         <Key
             latin:keyLabel="h" />
         <Key
             latin:keyLabel="j" />
         <Key
             latin:keyLabel="k"
-            latin:popupCharacters="@string/alternates_for_k" />
+            latin:moreKeys="@string/more_keys_for_k" />
         <Key
             latin:keyLabel="l"
-            latin:popupCharacters="@string/alternates_for_l" />
+            latin:moreKeys="@string/more_keys_for_l" />
         <Key
             latin:keyLabel="@string/keylabel_for_scandinavia_row2_10"
-            latin:popupCharacters="@string/alternates_for_scandinavia_row2_10" />
+            latin:moreKeys="@string/more_keys_for_scandinavia_row2_10" />
         <Key
             latin:keyLabel="@string/keylabel_for_scandinavia_row2_11"
-            latin:popupCharacters="@string/alternates_for_scandinavia_row2_11"
+            latin:moreKeys="@string/more_keys_for_scandinavia_row2_11"
             latin:keyWidth="fillRight" />
     </Row>
     <include
diff --git a/java/res/xml/kbd_rows_serbian.xml b/java/res/xml/kbd_rows_serbian.xml
index 73c807f..c911ae8 100644
--- a/java/res/xml/kbd_rows_serbian.xml
+++ b/java/res/xml/kbd_rows_serbian.xml
@@ -29,43 +29,43 @@
         <Key
             latin:keyLabel="љ"
             latin:keyHintLabel="1"
-            latin:popupCharacters="1" />
+            latin:moreKeys="1" />
         <Key
             latin:keyLabel="њ"
             latin:keyHintLabel="2"
-            latin:popupCharacters="2" />
+            latin:moreKeys="2" />
         <Key
             latin:keyLabel="е"
             latin:keyHintLabel="3"
-            latin:popupCharacters="3" />
+            latin:moreKeys="3" />
         <Key
             latin:keyLabel="р"
             latin:keyHintLabel="4"
-            latin:popupCharacters="4" />
+            latin:moreKeys="4" />
         <Key
             latin:keyLabel="т"
             latin:keyHintLabel="5"
-            latin:popupCharacters="5" />
+            latin:moreKeys="5" />
         <Key
             latin:keyLabel="з"
             latin:keyHintLabel="6"
-            latin:popupCharacters="6" />
+            latin:moreKeys="6" />
         <Key
             latin:keyLabel="у"
             latin:keyHintLabel="7"
-            latin:popupCharacters="7" />
+            latin:moreKeys="7" />
         <Key
             latin:keyLabel="и"
             latin:keyHintLabel="8"
-            latin:popupCharacters="8" />
+            latin:moreKeys="8" />
         <Key
             latin:keyLabel="о"
             latin:keyHintLabel="9"
-            latin:popupCharacters="9" />
+            latin:moreKeys="9" />
         <Key
             latin:keyLabel="п"
             latin:keyHintLabel="0"
-            latin:popupCharacters="0" />
+            latin:moreKeys="0" />
         <Key
             latin:keyLabel="ш"
             latin:keyWidth="fillRight" />
diff --git a/java/res/xml/kbd_rows_spanish.xml b/java/res/xml/kbd_rows_spanish.xml
index 6d00718..03d631e 100644
--- a/java/res/xml/kbd_rows_spanish.xml
+++ b/java/res/xml/kbd_rows_spanish.xml
@@ -30,28 +30,28 @@
     >
         <Key
             latin:keyLabel="a"
-            latin:popupCharacters="@string/alternates_for_a" />
+            latin:moreKeys="@string/more_keys_for_a" />
         <Key
             latin:keyLabel="s"
-            latin:popupCharacters="@string/alternates_for_s" />
+            latin:moreKeys="@string/more_keys_for_s" />
         <Key
             latin:keyLabel="d"
-            latin:popupCharacters="@string/alternates_for_d" />
+            latin:moreKeys="@string/more_keys_for_d" />
         <Key
             latin:keyLabel="f" />
         <Key
             latin:keyLabel="g"
-            latin:popupCharacters="@string/alternates_for_g" />
+            latin:moreKeys="@string/more_keys_for_g" />
         <Key
             latin:keyLabel="h" />
         <Key
             latin:keyLabel="j" />
         <Key
             latin:keyLabel="k"
-            latin:popupCharacters="@string/alternates_for_k" />
+            latin:moreKeys="@string/more_keys_for_k" />
         <Key
             latin:keyLabel="l"
-            latin:popupCharacters="@string/alternates_for_l" />
+            latin:moreKeys="@string/more_keys_for_l" />
         <Key
             latin:keyLabel="ñ" />
     </Row>
diff --git a/java/res/xml/kbd_rows_symbols.xml b/java/res/xml/kbd_rows_symbols.xml
index 5880d52..e0ede8b 100644
--- a/java/res/xml/kbd_rows_symbols.xml
+++ b/java/res/xml/kbd_rows_symbols.xml
@@ -30,34 +30,34 @@
     >
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_1"
-            latin:popupCharacters="@string/alternates_for_symbols_1" />
+            latin:moreKeys="@string/more_keys_for_symbols_1" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_2"
-            latin:popupCharacters="@string/alternates_for_symbols_2" />
+            latin:moreKeys="@string/more_keys_for_symbols_2" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_3"
-            latin:popupCharacters="@string/alternates_for_symbols_3" />
+            latin:moreKeys="@string/more_keys_for_symbols_3" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_4"
-            latin:popupCharacters="@string/alternates_for_symbols_4" />
+            latin:moreKeys="@string/more_keys_for_symbols_4" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_5"
-            latin:popupCharacters="@string/alternates_for_symbols_5" />
+            latin:moreKeys="@string/more_keys_for_symbols_5" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_6"
-            latin:popupCharacters="@string/alternates_for_symbols_6" />
+            latin:moreKeys="@string/more_keys_for_symbols_6" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_7"
-            latin:popupCharacters="@string/alternates_for_symbols_7" />
+            latin:moreKeys="@string/more_keys_for_symbols_7" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_8"
-            latin:popupCharacters="@string/alternates_for_symbols_8" />
+            latin:moreKeys="@string/more_keys_for_symbols_8" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_9"
-            latin:popupCharacters="@string/alternates_for_symbols_9" />
+            latin:moreKeys="@string/more_keys_for_symbols_9" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_0"
-            latin:popupCharacters="@string/alternates_for_symbols_0"
+            latin:moreKeys="@string/more_keys_for_symbols_0"
             latin:keyWidth="fillRight" />
     </Row>
     <Row
@@ -71,24 +71,24 @@
             latin:keyStyle="currencyKeyStyle" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_percent"
-            latin:popupCharacters="@string/alternates_for_symbols_percent" />
+            latin:moreKeys="@string/more_keys_for_symbols_percent" />
         <Key
             latin:keyLabel="&amp;" />
         <Key
             latin:keyLabel="*"
-            latin:popupCharacters="†,‡,★" />
+            latin:moreKeys="†,‡,★" />
         <Key
             latin:keyLabel="-"
-            latin:popupCharacters="_,–,—" />
+            latin:moreKeys="_,–,—" />
         <Key
             latin:keyLabel="+"
-            latin:popupCharacters="±" />
+            latin:moreKeys="±" />
         <Key
             latin:keyLabel="("
-            latin:popupCharacters="[,{,&lt;" />
+            latin:moreKeys="[,{,&lt;" />
         <Key
             latin:keyLabel=")"
-            latin:popupCharacters="],},&gt;"
+            latin:moreKeys="],},&gt;"
             latin:keyWidth="fillRight" />
     </Row>
     <Row
@@ -100,26 +100,26 @@
             latin:visualInsetsRight="1%p" />
         <Key
             latin:keyLabel="!"
-            latin:popupCharacters="¡" />
+            latin:moreKeys="¡" />
         <!-- Note: DroidSans doesn't have double-high-reversed-quotation '\u201f' glyph. -->
-        <!-- latin:popupCharacters="“,”,„,‟,«,»" -->
+        <!-- latin:moreKeys="“,”,„,‟,«,»" -->
         <Key
             latin:keyLabel="&quot;"
-            latin:popupCharacters="“,”,«,»"
-            latin:maxMiniKeyboardColumn="6" />
+            latin:moreKeys="“,”,«,»"
+            latin:maxMoreKeysColumn="6" />
         <Key
             latin:keyLabel="\'"
-            latin:popupCharacters="‘,’,‚,‛" />
+            latin:moreKeys="‘,’,‚,‛" />
         <Key
             latin:keyLabel=":" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_semicolon"
-            latin:popupCharacters="@string/alternates_for_symbols_semicolon" />
+            latin:moreKeys="@string/more_keys_for_symbols_semicolon" />
         <Key
             latin:keyLabel="/" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_question"
-            latin:popupCharacters="@string/alternates_for_symbols_question" />
+            latin:moreKeys="@string/more_keys_for_symbols_question" />
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyWidth="fillRight"
diff --git a/java/res/xml/kbd_rows_symbols_shift.xml b/java/res/xml/kbd_rows_symbols_shift.xml
index ff272f1..66c14fe 100644
--- a/java/res/xml/kbd_rows_symbols_shift.xml
+++ b/java/res/xml/kbd_rows_symbols_shift.xml
@@ -34,12 +34,12 @@
             latin:keyLabel="|" />
         <Key
             latin:keyLabel="•"
-            latin:popupCharacters="♪,♥,♠,♦,♣" />
+            latin:moreKeys="♪,♥,♠,♦,♣" />
         <Key
             latin:keyLabel="√" />
         <Key
             latin:keyLabel="π"
-            latin:popupCharacters="Π" />
+            latin:moreKeys="Π" />
         <Key
             latin:keyLabel="÷" />
         <Key
@@ -63,15 +63,15 @@
             latin:keyLabel="€" />
         <Key
             latin:keyLabel="°"
-            latin:popupCharacters="′,″" />
+            latin:moreKeys="′,″" />
         <Key
             latin:keyLabel="^"
-            latin:popupCharacters="↑,↓,←,→" />
+            latin:moreKeys="↑,↓,←,→" />
         <Key
             latin:keyLabel="_" />
         <Key
             latin:keyLabel="="
-            latin:popupCharacters="≠,≈,∞" />
+            latin:moreKeys="≠,≈,∞" />
         <Key
             latin:keyLabel="[" />
         <Key
@@ -93,15 +93,15 @@
             latin:keyLabel="©" />
         <Key
             latin:keyLabel="¶"
-            latin:popupCharacters="§" />
+            latin:moreKeys="§" />
         <Key
             latin:keyLabel="\\" />
         <Key
             latin:keyLabel="&lt;"
-            latin:popupCharacters="≤,«,‹" />
+            latin:moreKeys="≤,«,‹" />
         <Key
             latin:keyLabel="&gt;"
-            latin:popupCharacters="≥,»,›" />
+            latin:moreKeys="≥,»,›" />
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyWidth="fillRight"
diff --git a/java/res/xml-sw600dp/kbd_popup_template.xml b/java/res/xml/kbd_suggestions_pane_template.xml
similarity index 82%
copy from java/res/xml-sw600dp/kbd_popup_template.xml
copy to java/res/xml/kbd_suggestions_pane_template.xml
index d976499..21316e6 100644
--- a/java/res/xml-sw600dp/kbd_popup_template.xml
+++ b/java/res/xml/kbd_suggestions_pane_template.xml
@@ -19,9 +19,7 @@
 -->
 
 <Keyboard xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
-    latin:keyWidth="8%p"
-    latin:horizontalGap="@fraction/key_horizontal_gap"
-    latin:verticalGap="0px"
-    latin:rowHeight="@dimen/popup_key_height"
+    latin:keyWidth="10%p"
+    latin:rowHeight="@dimen/more_suggestions_row_height"
     >
 </Keyboard>
diff --git a/java/res/xml/kbd_symbols_shift_row4.xml b/java/res/xml/kbd_symbols_shift_row4.xml
index bcab19b..c8d5293 100644
--- a/java/res/xml/kbd_symbols_shift_row4.xml
+++ b/java/res/xml/kbd_symbols_shift_row4.xml
@@ -34,7 +34,7 @@
                     latin:keyWidth="15%p" />
                 <Key
                     latin:keyLabel="„"
-                    latin:popupCharacters="“,”,„,‟,«,»,‘,’,‚,‛"
+                    latin:moreKeys="“,”,„,‟,«,»,‘,’,‚,‛"
                     latin:keyStyle="functionalKeyStyle" />
                 <Key
                     latin:keyStyle="spaceKeyStyle"
@@ -55,7 +55,7 @@
                     latin:keyboardLayout="@xml/kbd_settings_or_tab" />
                 <Key
                     latin:keyLabel="„"
-                    latin:popupCharacters="“,”,„,‟,«,»,‘,’,‚,‛"
+                    latin:moreKeys="“,”,„,‟,«,»,‘,’,‚,‛"
                     latin:keyWidth="9.2%p"
                     latin:keyStyle="functionalKeyStyle" />
                 <Key
diff --git a/java/res/xml/method.xml b/java/res/xml/method.xml
index 452294e..f2f3178 100644
--- a/java/res/xml/method.xml
+++ b/java/res/xml/method.xml
@@ -20,7 +20,7 @@
 <!-- The attributes in this XML file provide configuration information -->
 <!-- for the Input Method Manager. -->
 
-<!-- Keyboard: en_US, en_GB, ar, cs, da, de, de_ZZ, es, es_US, fi, fr, fr_CA, fr_CH, hr, hu, it, iw, nb, nl, pl, pt, ru, sr, sv, tr -->
+<!-- Keyboard: en_US, en_GB, ar, cs, da, de, de(QWERTY), es, es_US, fi, fr, fr_CA, fr_CH, hr, hu, it, iw, nb, nl, pl, pt, ru, sr, sv, tr -->
 <!-- TODO: use <lang>_keyboard icon instead of a common keyboard icon. -->
 <!-- If IME doesn't have an applicable subtype, the first subtype will be used as a default
      subtype.-->
@@ -64,9 +64,9 @@
     />
     <subtype android:icon="@drawable/ic_subtype_keyboard"
             android:label="@string/subtype_de_qwerty"
-            android:imeSubtypeLocale="de_ZZ"
+            android:imeSubtypeLocale="de"
             android:imeSubtypeMode="keyboard"
-            android:imeSubtypeExtraValue="AsciiCapable"
+            android:imeSubtypeExtraValue="AsciiCapable,KeyboardLocale=de_ZZ"
     />
     <subtype android:icon="@drawable/ic_subtype_keyboard"
             android:label="@string/subtype_generic"
diff --git a/java/src/com/android/inputmethod/compat/InputMethodServiceCompatWrapper.java b/java/src/com/android/inputmethod/compat/InputMethodServiceCompatWrapper.java
index 7aab66d..8e2ee0f 100644
--- a/java/src/com/android/inputmethod/compat/InputMethodServiceCompatWrapper.java
+++ b/java/src/com/android/inputmethod/compat/InputMethodServiceCompatWrapper.java
@@ -73,16 +73,17 @@
     // This call is required to let LatinIME itself know a subtype changed
     // event when the API level is 10 or previous.
     @SuppressWarnings("unused")
-    public void notifyOnCurrentInputMethodSubtypeChanged(InputMethodSubtypeCompatWrapper subtype) {
+    public void notifyOnCurrentInputMethodSubtypeChanged(
+            InputMethodSubtypeCompatWrapper newSubtype) {
         // Do nothing when the API level is 11 or later
         // and FORCE_ENABLE_VOICE_EVEN_WITH_NO_VOICE_SUBTYPES is not true
         if (CAN_HANDLE_ON_CURRENT_INPUT_METHOD_SUBTYPE_CHANGED && !InputMethodManagerCompatWrapper.
                 FORCE_ENABLE_VOICE_EVEN_WITH_NO_VOICE_SUBTYPES) {
             return;
         }
-        if (subtype == null) {
-            subtype = mImm.getCurrentInputMethodSubtype();
-        }
+        final InputMethodSubtypeCompatWrapper subtype = (newSubtype == null)
+                ? mImm.getCurrentInputMethodSubtype()
+                : newSubtype;
         if (subtype != null) {
             if (!InputMethodManagerCompatWrapper.FORCE_ENABLE_VOICE_EVEN_WITH_NO_VOICE_SUBTYPES
                     && !subtype.isDummy()) return;
diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java
index 8baf3f7..b919bcf 100644
--- a/java/src/com/android/inputmethod/keyboard/Key.java
+++ b/java/src/com/android/inputmethod/keyboard/Key.java
@@ -30,7 +30,7 @@
 import com.android.inputmethod.keyboard.internal.KeyboardBuilder.ParseException;
 import com.android.inputmethod.keyboard.internal.KeyboardIconsSet;
 import com.android.inputmethod.keyboard.internal.KeyboardParams;
-import com.android.inputmethod.keyboard.internal.PopupCharactersParser;
+import com.android.inputmethod.keyboard.internal.MoreKeySpecParser;
 import com.android.inputmethod.keyboard.internal.Row;
 import com.android.inputmethod.latin.R;
 
@@ -90,10 +90,10 @@
     public final int mY;
     /** Text to output when pressed. This can be multiple characters, like ".com" */
     public final CharSequence mOutputText;
-    /** Popup characters */
-    public final CharSequence[] mPopupCharacters;
-    /** Popup keyboard maximum column number */
-    public final int mMaxMiniKeyboardColumn;
+    /** More keys */
+    public final CharSequence[] mMoreKeys;
+    /** More keys maximum column number */
+    public final int mMaxMoreKeysColumn;
 
     /**
      * Flags that specify the anchoring to edges of the keyboard for detecting touch events
@@ -192,22 +192,22 @@
         }
     }
 
-    private static int getCode(Resources res, KeyboardParams params, String popupSpec) {
+    private static int getCode(Resources res, KeyboardParams params, String moreKeySpec) {
         return getRtlParenthesisCode(
-                PopupCharactersParser.getCode(res, popupSpec), params.mIsRtlKeyboard);
+                MoreKeySpecParser.getCode(res, moreKeySpec), params.mIsRtlKeyboard);
     }
 
-    private static Drawable getIcon(KeyboardParams params, String popupSpec) {
-        return params.mIconsSet.getIcon(PopupCharactersParser.getIconId(popupSpec));
+    private static Drawable getIcon(KeyboardParams params, String moreKeySpec) {
+        return params.mIconsSet.getIcon(MoreKeySpecParser.getIconId(moreKeySpec));
     }
 
     /**
-     * This constructor is being used only for key in popup mini keyboard.
+     * This constructor is being used only for key in more keys keyboard.
      */
-    public Key(Resources res, KeyboardParams params, String popupSpec,
+    public Key(Resources res, KeyboardParams params, String moreKeySpec,
             int x, int y, int width, int height, int edgeFlags) {
-        this(params, PopupCharactersParser.getLabel(popupSpec), null, getIcon(params, popupSpec),
-                getCode(res, params, popupSpec), PopupCharactersParser.getOutputText(popupSpec),
+        this(params, MoreKeySpecParser.getLabel(moreKeySpec), null, getIcon(params, moreKeySpec),
+                getCode(res, params, moreKeySpec), MoreKeySpecParser.getOutputText(moreKeySpec),
                 x, y, width, height, edgeFlags);
     }
 
@@ -227,8 +227,8 @@
         mFunctional = false;
         mSticky = false;
         mRepeatable = false;
-        mPopupCharacters = null;
-        mMaxMiniKeyboardColumn = 0;
+        mMoreKeys = null;
+        mMaxMoreKeysColumn = 0;
         mLabel = label;
         mOutputText = outputText;
         mCode = code;
@@ -312,19 +312,19 @@
             mY = y;
             mWidth = keyWidth - mHorizontalGap;
 
-            final CharSequence[] popupCharacters = style.getTextArray(
-                    keyAttr, R.styleable.Keyboard_Key_popupCharacters);
-            // In Arabic symbol layouts, we'd like to keep digits in popup characters regardless of
-            // config_digit_popup_characters_enabled.
+            final CharSequence[] moreKeys = style.getTextArray(
+                    keyAttr, R.styleable.Keyboard_Key_moreKeys);
+            // In Arabic symbol layouts, we'd like to keep digits in more keys regardless of
+            // config_digit_more_keys_enabled.
             if (params.mId.isAlphabetKeyboard() && !res.getBoolean(
-                    R.bool.config_digit_popup_characters_enabled)) {
-                mPopupCharacters = PopupCharactersParser.filterOut(
-                        res, popupCharacters, PopupCharactersParser.DIGIT_FILTER);
+                    R.bool.config_digit_more_keys_enabled)) {
+                mMoreKeys = MoreKeySpecParser.filterOut(
+                        res, moreKeys, MoreKeySpecParser.DIGIT_FILTER);
             } else {
-                mPopupCharacters = popupCharacters;
+                mMoreKeys = moreKeys;
             }
-            mMaxMiniKeyboardColumn = style.getInt(keyboardAttr,
-                    R.styleable.Keyboard_Key_maxMiniKeyboardColumn,
+            mMaxMoreKeysColumn = style.getInt(keyboardAttr,
+                    R.styleable.Keyboard_Key_maxMoreKeysColumn,
                     params.mMaxMiniKeyboardColumn);
 
             mRepeatable = style.getBoolean(keyAttr, R.styleable.Keyboard_Key_isRepeatable, false);
diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java
index 5dabb93..3a8a1d4 100644
--- a/java/src/com/android/inputmethod/keyboard/Keyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java
@@ -101,8 +101,8 @@
 
     public final int mMostCommonKeyWidth;
 
-    /** Popup keyboard template */
-    public final int mPopupTemplateId;
+    /** More keys keyboard template */
+    public final int mMoreKeysTemplate;
 
     /** Maximum column for mini keyboard */
     public final int mMaxMiniKeyboardColumn;
@@ -130,7 +130,7 @@
         mWidth = params.mWidth;
         mMostCommonKeyWidth = params.mMostCommonKeyWidth;
         mIsRtlKeyboard = params.mIsRtlKeyboard;
-        mPopupTemplateId = params.mPopupTemplateId;
+        mMoreKeysTemplate = params.mMoreKeysTemplate;
         mMaxMiniKeyboardColumn = params.mMaxMiniKeyboardColumn;
 
         mDefaultRowHeight = params.mDefaultRowHeight;
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index 4c5c2bc..ceadc91 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -79,7 +79,7 @@
 
     // XML attributes
     protected final float mVerticalCorrection;
-    protected final int mPopupLayout;
+    protected final int mMoreKeysLayout;
     private final float mBackgroundDimAmount;
 
     // HORIZONTAL ELLIPSIS "...", character for popup hint.
@@ -343,7 +343,7 @@
         }
         mVerticalCorrection = a.getDimensionPixelOffset(
                 R.styleable.KeyboardView_verticalCorrection, 0);
-        mPopupLayout = a.getResourceId(R.styleable.KeyboardView_popupLayout, 0);
+        mMoreKeysLayout = a.getResourceId(R.styleable.KeyboardView_moreKeysLayout, 0);
         mBackgroundDimAmount = a.getFloat(R.styleable.KeyboardView_backgroundDimAmount, 0.5f);
         a.recycle();
 
@@ -679,7 +679,7 @@
         }
 
         // Draw popup hint "..." at the bottom right corner of the key.
-        if ((key.hasPopupHint() && key.mPopupCharacters != null && key.mPopupCharacters.length > 0)
+        if ((key.hasPopupHint() && key.mMoreKeys != null && key.mMoreKeys.length > 0)
                 || key.needsSpecialPopupHint()) {
             paint.setTextSize(params.mKeyHintLetterSize);
             paint.setColor(params.mKeyHintLabelColor);
@@ -880,7 +880,7 @@
 
         // Set the preview background state
         previewText.getBackground().setState(
-                key.mPopupCharacters != null ? LONG_PRESSABLE_STATE_SET : EMPTY_STATE_SET);
+                key.mMoreKeys != null ? LONG_PRESSABLE_STATE_SET : EMPTY_STATE_SET);
         previewText.setTextColor(params.mPreviewTextColor);
         FrameLayoutCompatUtils.placeViewAt(
                 previewText, previewX, previewY, previewWidth, previewHeight);
@@ -928,7 +928,7 @@
     }
 
     @Override
-    public boolean dismissPopupPanel() {
+    public boolean dismissMoreKeysPanel() {
         return false;
     }
 
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
index 1e7ec9e..777bae3 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
@@ -64,11 +64,11 @@
     private final int mKeyRepeatInterval;
 
     // Mini keyboard
-    private PopupWindow mPopupWindow;
-    private PopupPanel mPopupPanel;
-    private int mPopupPanelPointerTrackerId;
-    private final WeakHashMap<Key, PopupPanel> mPopupPanelCache =
-            new WeakHashMap<Key, PopupPanel>();
+    private PopupWindow mMoreKeysWindow;
+    private MoreKeysPanel mMoreKeysPanel;
+    private int mMoreKeysPanelPointerTrackerId;
+    private final WeakHashMap<Key, MoreKeysPanel> mMoreKeysPanelCache =
+            new WeakHashMap<Key, MoreKeysPanel>();
 
     /** Listener for {@link KeyboardActionListener}. */
     private KeyboardActionListener mKeyboardActionListener;
@@ -297,7 +297,7 @@
         mKeyDetector.setProximityThreshold(keyboard.mMostCommonKeyWidth);
         PointerTracker.setKeyDetector(mKeyDetector);
         mTouchScreenRegulator.setKeyboard(keyboard);
-        mPopupPanelCache.clear();
+        mMoreKeysPanelCache.clear();
     }
 
     /**
@@ -333,12 +333,12 @@
 
     private boolean openMiniKeyboardIfRequired(int keyIndex, PointerTracker tracker) {
         // Check if we have a popup layout specified first.
-        if (mPopupLayout == 0) {
+        if (mMoreKeysLayout == 0) {
             return false;
         }
 
         // Check if we are already displaying popup panel.
-        if (mPopupPanel != null)
+        if (mMoreKeysPanel != null)
             return false;
         final Key parentKey = tracker.getKey(keyIndex);
         if (parentKey == null)
@@ -353,12 +353,12 @@
         mKeyboardActionListener.onCodeInput(Keyboard.CODE_CAPSLOCK, null, 0, 0);
     }
 
-    // This default implementation returns a popup mini keyboard panel.
-    protected PopupPanel onCreatePopupPanel(Key parentKey) {
-        if (parentKey.mPopupCharacters == null)
+    // This default implementation returns a more keys panel.
+    protected MoreKeysPanel onCreateMoreKeysPanel(Key parentKey) {
+        if (parentKey.mMoreKeys == null)
             return null;
 
-        final View container = LayoutInflater.from(getContext()).inflate(mPopupLayout, null);
+        final View container = LayoutInflater.from(getContext()).inflate(mMoreKeysLayout, null);
         if (container == null)
             throw new NullPointerException();
 
@@ -366,7 +366,7 @@
                 (MiniKeyboardView)container.findViewById(R.id.mini_keyboard_view);
         final Keyboard parentKeyboard = getKeyboard();
         final Keyboard miniKeyboard = new MiniKeyboard.Builder(
-                this, parentKeyboard.mPopupTemplateId, parentKey, parentKeyboard).build();
+                this, parentKeyboard.mMoreKeysTemplate, parentKey, parentKeyboard).build();
         miniKeyboardView.setKeyboard(miniKeyboard);
         container.measure(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
 
@@ -375,7 +375,7 @@
 
     @Override
     protected boolean needsToDimKeyboard() {
-        return mPopupPanel != null;
+        return mMoreKeysPanel != null;
     }
 
     public void setSpacebarTextFadeFactor(float fadeFactor, LatinKeyboard oldKeyboard) {
@@ -417,10 +417,10 @@
                 tracker.onLongPressed();
                 return true;
             } else {
-                return openPopupPanel(parentKey, tracker);
+                return openMoreKeysPanel(parentKey, tracker);
             }
         } else {
-            return openPopupPanel(parentKey, tracker);
+            return openMoreKeysPanel(parentKey, tracker);
         }
     }
 
@@ -431,34 +431,35 @@
         return true;
     }
 
-    private boolean openPopupPanel(Key parentKey, PointerTracker tracker) {
-        PopupPanel popupPanel = mPopupPanelCache.get(parentKey);
-        if (popupPanel == null) {
-            popupPanel = onCreatePopupPanel(parentKey);
-            if (popupPanel == null)
+    private boolean openMoreKeysPanel(Key parentKey, PointerTracker tracker) {
+        MoreKeysPanel moreKeysPanel = mMoreKeysPanelCache.get(parentKey);
+        if (moreKeysPanel == null) {
+            moreKeysPanel = onCreateMoreKeysPanel(parentKey);
+            if (moreKeysPanel == null)
                 return false;
-            mPopupPanelCache.put(parentKey, popupPanel);
+            mMoreKeysPanelCache.put(parentKey, moreKeysPanel);
         }
-        if (mPopupWindow == null) {
-            mPopupWindow = new PopupWindow(getContext());
-            mPopupWindow.setBackgroundDrawable(null);
-            mPopupWindow.setAnimationStyle(R.style.MiniKeyboardAnimation);
+        if (mMoreKeysWindow == null) {
+            mMoreKeysWindow = new PopupWindow(getContext());
+            mMoreKeysWindow.setBackgroundDrawable(null);
+            mMoreKeysWindow.setAnimationStyle(R.style.MiniKeyboardAnimation);
             // Allow popup window to be drawn off the screen.
-            mPopupWindow.setClippingEnabled(false);
+            mMoreKeysWindow.setClippingEnabled(false);
         }
-        mPopupPanel = popupPanel;
-        mPopupPanelPointerTrackerId = tracker.mPointerId;
+        mMoreKeysPanel = moreKeysPanel;
+        mMoreKeysPanelPointerTrackerId = tracker.mPointerId;
 
         final Keyboard keyboard = getKeyboard();
-        popupPanel.setShifted(keyboard.isShiftedOrShiftLocked());
+        moreKeysPanel.setShifted(keyboard.isShiftedOrShiftLocked());
         final int pointX = (mConfigShowMiniKeyboardAtTouchedPoint) ? tracker.getLastX()
                 : parentKey.mX + parentKey.mWidth / 2;
         final int pointY = parentKey.mY - keyboard.mVerticalGap;
-        popupPanel.showPopupPanel(
-                this, this, pointX, pointY, mPopupWindow, getKeyboardActionListener());
-        final int translatedX = popupPanel.translateX(tracker.getLastX());
-        final int translatedY = popupPanel.translateY(tracker.getLastY());
-        tracker.onShowPopupPanel(translatedX, translatedY, SystemClock.uptimeMillis(), popupPanel);
+        moreKeysPanel.showMoreKeysPanel(
+                this, this, pointX, pointY, mMoreKeysWindow, getKeyboardActionListener());
+        final int translatedX = moreKeysPanel.translateX(tracker.getLastX());
+        final int translatedY = moreKeysPanel.translateY(tracker.getLastY());
+        tracker.onShowMoreKeysPanel(
+                translatedX, translatedY, SystemClock.uptimeMillis(), moreKeysPanel);
 
         invalidateAllKeys();
         return true;
@@ -469,7 +470,7 @@
     }
 
     public boolean isInSlidingKeyInput() {
-        if (mPopupPanel != null) {
+        if (mMoreKeysPanel != null) {
             return true;
         } else {
             return PointerTracker.isAnyInSlidingKeyInput();
@@ -504,7 +505,7 @@
         }
 
         // Gesture detector must be enabled only when mini-keyboard is not on the screen.
-        if (mPopupPanel == null && mGestureDetector != null
+        if (mMoreKeysPanel == null && mGestureDetector != null
                 && mGestureDetector.onTouchEvent(me)) {
             PointerTracker.dismissAllKeyPreviews();
             mKeyTimerHandler.cancelKeyTimers();
@@ -515,9 +516,9 @@
         final int index = me.getActionIndex();
         final int id = me.getPointerId(index);
         final int x, y;
-        if (mPopupPanel != null && id == mPopupPanelPointerTrackerId) {
-            x = mPopupPanel.translateX((int)me.getX(index));
-            y = mPopupPanel.translateY((int)me.getY(index));
+        if (mMoreKeysPanel != null && id == mMoreKeysPanelPointerTrackerId) {
+            x = mMoreKeysPanel.translateX((int)me.getX(index));
+            y = mMoreKeysPanel.translateY((int)me.getY(index));
         } else {
             x = (int)me.getX(index);
             y = (int)me.getY(index);
@@ -569,9 +570,10 @@
             for (int i = 0; i < pointerCount; i++) {
                 final PointerTracker tracker = getPointerTracker(me.getPointerId(i));
                 final int px, py;
-                if (mPopupPanel != null && tracker.mPointerId == mPopupPanelPointerTrackerId) {
-                    px = mPopupPanel.translateX((int)me.getX(i));
-                    py = mPopupPanel.translateY((int)me.getY(i));
+                if (mMoreKeysPanel != null
+                        && tracker.mPointerId == mMoreKeysPanelPointerTrackerId) {
+                    px = mMoreKeysPanel.translateX((int)me.getX(i));
+                    py = mMoreKeysPanel.translateY((int)me.getY(i));
                 } else {
                     px = (int)me.getX(i);
                     py = (int)me.getY(i);
@@ -608,16 +610,16 @@
     @Override
     public void closing() {
         super.closing();
-        dismissPopupPanel();
-        mPopupPanelCache.clear();
+        dismissMoreKeysPanel();
+        mMoreKeysPanelCache.clear();
     }
 
     @Override
-    public boolean dismissPopupPanel() {
-        if (mPopupWindow != null && mPopupWindow.isShowing()) {
-            mPopupWindow.dismiss();
-            mPopupPanel = null;
-            mPopupPanelPointerTrackerId = -1;
+    public boolean dismissMoreKeysPanel() {
+        if (mMoreKeysWindow != null && mMoreKeysWindow.isShowing()) {
+            mMoreKeysWindow.dismiss();
+            mMoreKeysPanel = null;
+            mMoreKeysPanelPointerTrackerId = -1;
             invalidateAllKeys();
             return true;
         }
@@ -625,7 +627,7 @@
     }
 
     public boolean handleBack() {
-        return dismissPopupPanel();
+        return dismissMoreKeysPanel();
     }
 
     @Override
diff --git a/java/src/com/android/inputmethod/keyboard/MiniKeyboard.java b/java/src/com/android/inputmethod/keyboard/MiniKeyboard.java
index 6119fa2..da91b62 100644
--- a/java/src/com/android/inputmethod/keyboard/MiniKeyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/MiniKeyboard.java
@@ -20,7 +20,7 @@
 
 import com.android.inputmethod.keyboard.internal.KeyboardBuilder;
 import com.android.inputmethod.keyboard.internal.KeyboardParams;
-import com.android.inputmethod.keyboard.internal.PopupCharactersParser;
+import com.android.inputmethod.keyboard.internal.MoreKeySpecParser;
 import com.android.inputmethod.latin.R;
 
 public class MiniKeyboard extends Keyboard {
@@ -36,7 +36,7 @@
     }
 
     public static class Builder extends KeyboardBuilder<Builder.MiniKeyboardParams> {
-        private final CharSequence[] mPopupCharacters;
+        private final CharSequence[] mMoreKeys;
 
         public static class MiniKeyboardParams extends KeyboardParams {
             /* package */int mTopRowAdjustment;
@@ -224,22 +224,22 @@
             // mParams.mVerticalGap = parentKeyboard.mVerticalGap;
 
             mParams.mIsRtlKeyboard = parentKeyboard.mIsRtlKeyboard;
-            mPopupCharacters = parentKey.mPopupCharacters;
+            mMoreKeys = parentKey.mMoreKeys;
 
-            final int keyWidth = getMaxKeyWidth(view, mPopupCharacters, mParams.mDefaultKeyWidth);
-            mParams.setParameters(mPopupCharacters.length, parentKey.mMaxMiniKeyboardColumn,
+            final int keyWidth = getMaxKeyWidth(view, mMoreKeys, mParams.mDefaultKeyWidth);
+            mParams.setParameters(mMoreKeys.length, parentKey.mMaxMoreKeysColumn,
                     keyWidth, parentKeyboard.mDefaultRowHeight, parentKey.mX
                             + (mParams.mDefaultKeyWidth - keyWidth) / 2, view.getMeasuredWidth());
         }
 
-        private static int getMaxKeyWidth(KeyboardView view, CharSequence[] popupCharacters,
+        private static int getMaxKeyWidth(KeyboardView view, CharSequence[] moreKeys,
                 int minKeyWidth) {
             final int padding = (int) view.getContext().getResources()
                     .getDimension(R.dimen.mini_keyboard_key_horizontal_padding);
             Paint paint = null;
             int maxWidth = minKeyWidth;
-            for (CharSequence popupSpec : popupCharacters) {
-                final CharSequence label = PopupCharactersParser.getLabel(popupSpec.toString());
+            for (CharSequence moreKeySpec : moreKeys) {
+                final CharSequence label = MoreKeySpecParser.getLabel(moreKeySpec.toString());
                 // If the label is single letter, minKeyWidth is enough to hold
                 // the label.
                 if (label != null && label.length() > 1) {
@@ -259,10 +259,10 @@
         @Override
         public MiniKeyboard build() {
             final MiniKeyboardParams params = mParams;
-            for (int n = 0; n < mPopupCharacters.length; n++) {
-                final String popupSpec = mPopupCharacters[n].toString();
+            for (int n = 0; n < mMoreKeys.length; n++) {
+                final String moreKeySpec = mMoreKeys[n].toString();
                 final int row = n / params.mNumColumns;
-                final Key key = new Key(mResources, params, popupSpec, params.getX(n, row),
+                final Key key = new Key(mResources, params, moreKeySpec, params.getX(n, row),
                         params.getY(row), params.mDefaultKeyWidth, params.mDefaultRowHeight,
                         params.getRowFlags(row));
                 params.onAddKey(key);
diff --git a/java/src/com/android/inputmethod/keyboard/MiniKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MiniKeyboardView.java
index 7a0f73f..f331662 100644
--- a/java/src/com/android/inputmethod/keyboard/MiniKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MiniKeyboardView.java
@@ -33,7 +33,7 @@
  * A view that renders a virtual {@link MiniKeyboard}. It handles rendering of keys and detecting
  * key presses and touch movements.
  */
-public class MiniKeyboardView extends KeyboardView implements PopupPanel {
+public class MiniKeyboardView extends KeyboardView implements MoreKeysPanel {
     private final int[] mCoordinates = new int[2];
 
     private final KeyDetector mKeyDetector;
@@ -88,16 +88,7 @@
         }
     }
 
-    private static final TimerProxy EMPTY_TIMER_PROXY = new TimerProxy() {
-        @Override
-        public void startKeyRepeatTimer(long delay, int keyIndex, PointerTracker tracker) {}
-        @Override
-        public void startLongPressTimer(long delay, int keyIndex, PointerTracker tracker) {}
-        @Override
-        public void cancelLongPressTimer() {}
-        @Override
-        public void cancelKeyTimers() {}
-    };
+    private static final TimerProxy EMPTY_TIMER_PROXY = new TimerProxy.Adapter();
 
     private final KeyboardActionListener mMiniKeyboardListener =
             new KeyboardActionListener.Adapter() {
@@ -196,7 +187,7 @@
     }
 
     @Override
-    public void showPopupPanel(View parentView, Controller controller, int pointX, int pointY,
+    public void showMoreKeysPanel(View parentView, Controller controller, int pointX, int pointY,
             PopupWindow window, KeyboardActionListener listener) {
         mController = controller;
         mListener = listener;
@@ -232,8 +223,8 @@
     }
 
     @Override
-    public boolean dismissPopupPanel() {
-        return mController.dismissPopupPanel();
+    public boolean dismissMoreKeysPanel() {
+        return mController.dismissMoreKeysPanel();
     }
 
     @Override
diff --git a/java/src/com/android/inputmethod/keyboard/MoreKeysPanel.java b/java/src/com/android/inputmethod/keyboard/MoreKeysPanel.java
new file mode 100644
index 0000000..6314a99
--- /dev/null
+++ b/java/src/com/android/inputmethod/keyboard/MoreKeysPanel.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2011 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.
+ */
+
+package com.android.inputmethod.keyboard;
+
+import android.view.View;
+import android.widget.PopupWindow;
+
+public interface MoreKeysPanel extends PointerTracker.KeyEventHandler {
+    public interface Controller {
+        public boolean dismissMoreKeysPanel();
+    }
+
+    public void setShifted(boolean shifted);
+
+    /**
+     * Show more keys panel.
+     *
+     * @param parentView the parent view of this more keys panel
+     * @param controller the controller that can dismiss this more keys panel
+     * @param pointX x coordinate of this more keys panel
+     * @param pointY y coordinate of this more keys panel
+     * @param window PopupWindow to be used to show this more keys panel
+     * @param listener the listener that will receive keyboard action from this more keys panel.
+     */
+    public void showMoreKeysPanel(View parentView, Controller controller, int pointX, int pointY,
+            PopupWindow window, KeyboardActionListener listener);
+
+    /**
+     * Translate X-coordinate of touch event to the local X-coordinate of this
+     * {@link MoreKeysPanel}.
+     *
+     * @param x the global X-coordinate
+     * @return the local X-coordinate to this {@link MoreKeysPanel}
+     */
+    public int translateX(int x);
+
+    /**
+     * Translate Y-coordinate of touch event to the local Y-coordinate of this
+     * {@link MoreKeysPanel}.
+     *
+     * @param y the global Y-coordinate
+     * @return the local Y-coordinate to this {@link MoreKeysPanel}
+     */
+    public int translateY(int y);
+}
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index 7ae6220..0314867 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -63,7 +63,7 @@
         public TimerProxy getTimerProxy();
     }
 
-    public interface DrawingProxy extends PopupPanel.Controller {
+    public interface DrawingProxy extends MoreKeysPanel.Controller {
         public void invalidateKey(Key key);
         public TextView inflateKeyPreviewText();
         public void showKeyPreview(int keyIndex, PointerTracker tracker);
@@ -76,6 +76,17 @@
         public void startLongPressTimer(long delay, int keyIndex, PointerTracker tracker);
         public void cancelLongPressTimer();
         public void cancelKeyTimers();
+
+        public static class Adapter implements TimerProxy {
+            @Override
+            public void startKeyRepeatTimer(long delay, int keyIndex, PointerTracker tracker) {}
+            @Override
+            public void startLongPressTimer(long delay, int keyIndex, PointerTracker tracker) {}
+            @Override
+            public void cancelLongPressTimer() {}
+            @Override
+            public void cancelKeyTimers() {}
+        }
     }
 
     private static KeyboardSwitcher sKeyboardSwitcher;
@@ -123,8 +134,8 @@
     // true if event is already translated to a key action.
     private boolean mKeyAlreadyProcessed;
 
-    // true if this pointer has been long-pressed and is showing a popup panel.
-    private boolean mIsShowingPopupPanel;
+    // true if this pointer has been long-pressed and is showing a more keys panel.
+    private boolean mIsShowingMoreKeysPanel;
 
     // true if this pointer is repeatable key
     private boolean mIsRepeatableKey;
@@ -572,9 +583,9 @@
         }
         final int keyIndex = onUpKey(keyX, keyY, eventTime);
         setReleasedKeyGraphics(keyIndex);
-        if (mIsShowingPopupPanel) {
-            mDrawingProxy.dismissPopupPanel();
-            mIsShowingPopupPanel = false;
+        if (mIsShowingMoreKeysPanel) {
+            mDrawingProxy.dismissMoreKeysPanel();
+            mIsShowingMoreKeysPanel = false;
         }
         if (mKeyAlreadyProcessed)
             return;
@@ -583,10 +594,10 @@
         }
     }
 
-    public void onShowPopupPanel(int x, int y, long eventTime, KeyEventHandler handler) {
+    public void onShowMoreKeysPanel(int x, int y, long eventTime, KeyEventHandler handler) {
         onLongPressed();
         onDownEvent(x, y, eventTime, handler);
-        mIsShowingPopupPanel = true;
+        mIsShowingMoreKeysPanel = true;
     }
 
     public void onLongPressed() {
@@ -615,9 +626,9 @@
         mDrawingProxy.cancelShowKeyPreview(this);
         setReleasedKeyGraphics(mKeyIndex);
         mIsInSlidingKeyInput = false;
-        if (mIsShowingPopupPanel) {
-            mDrawingProxy.dismissPopupPanel();
-            mIsShowingPopupPanel = false;
+        if (mIsShowingMoreKeysPanel) {
+            mDrawingProxy.dismissMoreKeysPanel();
+            mIsShowingMoreKeysPanel = false;
         }
     }
 
diff --git a/java/src/com/android/inputmethod/keyboard/PopupPanel.java b/java/src/com/android/inputmethod/keyboard/PopupPanel.java
deleted file mode 100644
index 5e51fd5..0000000
--- a/java/src/com/android/inputmethod/keyboard/PopupPanel.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-package com.android.inputmethod.keyboard;
-
-import android.view.View;
-import android.widget.PopupWindow;
-
-public interface PopupPanel extends PointerTracker.KeyEventHandler {
-    public interface Controller {
-        public boolean dismissPopupPanel();
-    }
-
-    public void setShifted(boolean shifted);
-
-    /**
-     * Show popup panel.
-     * @param parentView the parent view of this popup panel
-     * @param controller the controller that can dismiss this popup panel
-     * @param pointX x coordinate of this popup panel
-     * @param pointY y coordinate of this popup panel
-     * @param window PopupWindow to be used to show this popup panel
-     * @param listener the listener that will receive keyboard action from this popup panel.
-     */
-    public void showPopupPanel(View parentView, Controller controller, int pointX, int pointY,
-            PopupWindow window, KeyboardActionListener listener);
-
-    /**
-     * Translate X-coordinate of touch event to the local X-coordinate of this PopupPanel.
-     * @param x the global X-coordinate
-     * @return the local X-coordinate to this PopupPanel
-     */
-    public int translateX(int x);
-
-    /**
-     * Translate Y-coordinate of touch event to the local Y-coordinate of this PopupPanel.
-     * @param y the global Y-coordinate
-     * @return the local Y-coordinate to this PopupPanel
-     */
-    public int translateY(int y);
-}
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java b/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java
index 66dde05..6d78e85 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java
@@ -166,12 +166,12 @@
             readText(keyAttr, R.styleable.Keyboard_Key_keyLabel);
             readText(keyAttr, R.styleable.Keyboard_Key_keyOutputText);
             readText(keyAttr, R.styleable.Keyboard_Key_keyHintLabel);
-            readTextArray(keyAttr, R.styleable.Keyboard_Key_popupCharacters);
+            readTextArray(keyAttr, R.styleable.Keyboard_Key_moreKeys);
             readFlag(keyAttr, R.styleable.Keyboard_Key_keyLabelOption);
             readInt(keyAttr, R.styleable.Keyboard_Key_keyIcon);
             readInt(keyAttr, R.styleable.Keyboard_Key_keyIconPreview);
             readInt(keyAttr, R.styleable.Keyboard_Key_keyIconShifted);
-            readInt(keyAttr, R.styleable.Keyboard_Key_maxMiniKeyboardColumn);
+            readInt(keyAttr, R.styleable.Keyboard_Key_maxMoreKeysColumn);
             readBoolean(keyAttr, R.styleable.Keyboard_Key_isFunctional);
             readBoolean(keyAttr, R.styleable.Keyboard_Key_isSticky);
             readBoolean(keyAttr, R.styleable.Keyboard_Key_isRepeatable);
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
index 5c76fac..c605deb 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
@@ -255,10 +255,10 @@
 
             mParams.mIsRtlKeyboard = keyboardAttr.getBoolean(
                     R.styleable.Keyboard_isRtlKeyboard, false);
-            mParams.mPopupTemplateId = keyboardAttr.getResourceId(
-                    R.styleable.Keyboard_popupTemplate, 0);
+            mParams.mMoreKeysTemplate = keyboardAttr.getResourceId(
+                    R.styleable.Keyboard_moreKeysTemplate, 0);
             mParams.mMaxMiniKeyboardColumn = keyAttr.getInt(
-                    R.styleable.Keyboard_Key_maxMiniKeyboardColumn, 5);
+                    R.styleable.Keyboard_Key_maxMoreKeysColumn, 5);
 
             mParams.mIconsSet.loadIcons(keyboardAttr);
         } finally {
@@ -365,9 +365,9 @@
             checkEndTag(TAG_KEY, parser);
         } else {
             Key key = new Key(mResources, mParams, row, mCurrentX, mCurrentY, parser, mKeyStyles);
-            if (DEBUG) Log.d(TAG, String.format("<%s%s keyLabel=%s code=%d popupCharacters=%s />",
+            if (DEBUG) Log.d(TAG, String.format("<%s%s keyLabel=%s code=%d moreKeys=%s />",
                     TAG_KEY, (key.isEnabled() ? "" : " disabled"), key.mLabel, key.mCode,
-                    Arrays.toString(key.mPopupCharacters)));
+                    Arrays.toString(key.mMoreKeys)));
             checkEndTag(TAG_KEY, parser);
             mParams.onAddKey(key);
             endKey(key);
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardParams.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardParams.java
index e748dbb..4432ee1 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardParams.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardParams.java
@@ -49,7 +49,7 @@
     public int mVerticalGap;
 
     public boolean mIsRtlKeyboard;
-    public int mPopupTemplateId;
+    public int mMoreKeysTemplate;
     public int mMaxMiniKeyboardColumn;
 
     public int GRID_WIDTH;
diff --git a/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParser.java b/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParser.java
new file mode 100644
index 0000000..a490b0a
--- /dev/null
+++ b/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParser.java
@@ -0,0 +1,230 @@
+/*
+ * Copyright (C) 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.
+ */
+
+package com.android.inputmethod.keyboard.internal;
+
+import android.content.res.Resources;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.inputmethod.keyboard.Keyboard;
+import com.android.inputmethod.latin.R;
+
+import java.util.ArrayList;
+
+/**
+ * String parser of moreKeys attribute of Key.
+ * The string is comma separated texts each of which represents one "more key".
+ * Each "more key" specification is one of the following:
+ * - A single letter (Letter)
+ * - Label optionally followed by keyOutputText or code (keyLabel|keyOutputText).
+ * - Icon followed by keyOutputText or code (@icon/icon_number|@integer/key_code)
+ * Special character, comma ',' backslash '\', and bar '|' can be escaped by '\'
+ * character.
+ * Note that the character '@' and '\' are also parsed by XML parser and CSV parser as well.
+ * See {@link KeyboardIconsSet} about icon_number.
+ */
+public class MoreKeySpecParser {
+    private static final String TAG = MoreKeySpecParser.class.getSimpleName();
+
+    private static final char ESCAPE = '\\';
+    private static final String LABEL_END = "|";
+    private static final String PREFIX_AT = "@";
+    private static final String PREFIX_ICON = PREFIX_AT + "icon/";
+    private static final String PREFIX_CODE = PREFIX_AT + "integer/";
+
+    private MoreKeySpecParser() {
+        // Intentional empty constructor for utility class.
+    }
+
+    private static boolean hasIcon(String moreKeySpec) {
+        if (moreKeySpec.startsWith(PREFIX_ICON)) {
+            final int end = indexOfLabelEnd(moreKeySpec, 0);
+            if (end > 0)
+                return true;
+            throw new MoreKeySpecParserError("outputText or code not specified: " + moreKeySpec);
+        }
+        return false;
+    }
+
+    private static boolean hasCode(String moreKeySpec) {
+        final int end = indexOfLabelEnd(moreKeySpec, 0);
+        if (end > 0 && end + 1 < moreKeySpec.length()
+                && moreKeySpec.substring(end + 1).startsWith(PREFIX_CODE)) {
+            return true;
+        }
+        return false;
+    }
+
+    private static String parseEscape(String text) {
+        if (text.indexOf(ESCAPE) < 0)
+            return text;
+        final int length = text.length();
+        final StringBuilder sb = new StringBuilder();
+        for (int pos = 0; pos < length; pos++) {
+            final char c = text.charAt(pos);
+            if (c == ESCAPE && pos + 1 < length) {
+                sb.append(text.charAt(++pos));
+            } else {
+                sb.append(c);
+            }
+        }
+        return sb.toString();
+    }
+
+    private static int indexOfLabelEnd(String moreKeySpec, int start) {
+        if (moreKeySpec.indexOf(ESCAPE, start) < 0) {
+            final int end = moreKeySpec.indexOf(LABEL_END, start);
+            if (end == 0)
+                throw new MoreKeySpecParserError(LABEL_END + " at " + start + ": " + moreKeySpec);
+            return end;
+        }
+        final int length = moreKeySpec.length();
+        for (int pos = start; pos < length; pos++) {
+            final char c = moreKeySpec.charAt(pos);
+            if (c == ESCAPE && pos + 1 < length) {
+                pos++;
+            } else if (moreKeySpec.startsWith(LABEL_END, pos)) {
+                return pos;
+            }
+        }
+        return -1;
+    }
+
+    public static String getLabel(String moreKeySpec) {
+        if (hasIcon(moreKeySpec))
+            return null;
+        final int end = indexOfLabelEnd(moreKeySpec, 0);
+        final String label = (end > 0) ? parseEscape(moreKeySpec.substring(0, end))
+                : parseEscape(moreKeySpec);
+        if (TextUtils.isEmpty(label))
+            throw new MoreKeySpecParserError("Empty label: " + moreKeySpec);
+        return label;
+    }
+
+    public static String getOutputText(String moreKeySpec) {
+        if (hasCode(moreKeySpec))
+            return null;
+        final int end = indexOfLabelEnd(moreKeySpec, 0);
+        if (end > 0) {
+            if (indexOfLabelEnd(moreKeySpec, end + 1) >= 0)
+                    throw new MoreKeySpecParserError("Multiple " + LABEL_END + ": "
+                            + moreKeySpec);
+            final String outputText = parseEscape(moreKeySpec.substring(end + LABEL_END.length()));
+            if (!TextUtils.isEmpty(outputText))
+                return outputText;
+            throw new MoreKeySpecParserError("Empty outputText: " + moreKeySpec);
+        }
+        final String label = getLabel(moreKeySpec);
+        if (label == null)
+            throw new MoreKeySpecParserError("Empty label: " + moreKeySpec);
+        // Code is automatically generated for one letter label. See {@link getCode()}.
+        if (label.length() == 1)
+            return null;
+        return label;
+    }
+
+    public static int getCode(Resources res, String moreKeySpec) {
+        if (hasCode(moreKeySpec)) {
+            final int end = indexOfLabelEnd(moreKeySpec, 0);
+            if (indexOfLabelEnd(moreKeySpec, end + 1) >= 0)
+                throw new MoreKeySpecParserError("Multiple " + LABEL_END + ": " + moreKeySpec);
+            final int resId = getResourceId(res,
+                    moreKeySpec.substring(end + LABEL_END.length() + PREFIX_AT.length()));
+            final int code = res.getInteger(resId);
+            return code;
+        }
+        if (indexOfLabelEnd(moreKeySpec, 0) > 0)
+            return Keyboard.CODE_DUMMY;
+        final String label = getLabel(moreKeySpec);
+        // Code is automatically generated for one letter label.
+        if (label != null && label.length() == 1)
+            return label.charAt(0);
+        return Keyboard.CODE_DUMMY;
+    }
+
+    public static int getIconId(String moreKeySpec) {
+        if (hasIcon(moreKeySpec)) {
+            int end = moreKeySpec.indexOf(LABEL_END, PREFIX_ICON.length() + 1);
+            final String iconId = moreKeySpec.substring(PREFIX_ICON.length(), end);
+            try {
+                return Integer.valueOf(iconId);
+            } catch (NumberFormatException e) {
+                Log.w(TAG, "illegal icon id specified: " + iconId);
+                return KeyboardIconsSet.ICON_UNDEFINED;
+            }
+        }
+        return KeyboardIconsSet.ICON_UNDEFINED;
+    }
+
+    private static int getResourceId(Resources res, String name) {
+        String packageName = res.getResourcePackageName(R.string.english_ime_name);
+        int resId = res.getIdentifier(name, null, packageName);
+        if (resId == 0)
+            throw new MoreKeySpecParserError("Unknown resource: " + name);
+        return resId;
+    }
+
+    @SuppressWarnings("serial")
+    public static class MoreKeySpecParserError extends RuntimeException {
+        public MoreKeySpecParserError(String message) {
+            super(message);
+        }
+    }
+
+    public interface CodeFilter {
+        public boolean shouldFilterOut(int code);
+    }
+
+    public static final CodeFilter DIGIT_FILTER = new CodeFilter() {
+        @Override
+        public boolean shouldFilterOut(int code) {
+            return Character.isDigit(code);
+        }
+    };
+
+    public static CharSequence[] filterOut(Resources res, CharSequence[] moreKeys,
+            CodeFilter filter) {
+        if (moreKeys == null || moreKeys.length < 1) {
+            return null;
+        }
+        if (moreKeys.length == 1
+                && filter.shouldFilterOut(getCode(res, moreKeys[0].toString()))) {
+            return null;
+        }
+        ArrayList<CharSequence> filtered = null;
+        for (int i = 0; i < moreKeys.length; i++) {
+            final CharSequence moreKeySpec = moreKeys[i];
+            if (filter.shouldFilterOut(getCode(res, moreKeySpec.toString()))) {
+                if (filtered == null) {
+                    filtered = new ArrayList<CharSequence>();
+                    for (int j = 0; j < i; j++) {
+                        filtered.add(moreKeys[j]);
+                    }
+                }
+            } else if (filtered != null) {
+                filtered.add(moreKeySpec);
+            }
+        }
+        if (filtered == null) {
+            return moreKeys;
+        }
+        if (filtered.size() == 0) {
+            return null;
+        }
+        return filtered.toArray(new CharSequence[filtered.size()]);
+    }
+}
diff --git a/java/src/com/android/inputmethod/keyboard/internal/PopupCharactersParser.java b/java/src/com/android/inputmethod/keyboard/internal/PopupCharactersParser.java
deleted file mode 100644
index 7c5abe3..0000000
--- a/java/src/com/android/inputmethod/keyboard/internal/PopupCharactersParser.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Copyright (C) 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.
- */
-
-package com.android.inputmethod.keyboard.internal;
-
-import android.content.res.Resources;
-import android.text.TextUtils;
-import android.util.Log;
-
-import com.android.inputmethod.keyboard.Keyboard;
-import com.android.inputmethod.latin.R;
-
-import java.util.ArrayList;
-
-/**
- * String parser of popupCharacters attribute of Key.
- * The string is comma separated texts each of which represents one popup key.
- * Each popup key text is one of the following:
- * - A single letter (Letter)
- * - Label optionally followed by keyOutputText or code (keyLabel|keyOutputText).
- * - Icon followed by keyOutputText or code (@icon/icon_number|@integer/key_code)
- * Special character, comma ',' backslash '\', and bar '|' can be escaped by '\'
- * character.
- * Note that the character '@' and '\' are also parsed by XML parser and CSV parser as well.
- * See {@link KeyboardIconsSet} about icon_number.
- */
-public class PopupCharactersParser {
-    private static final String TAG = PopupCharactersParser.class.getSimpleName();
-
-    private static final char ESCAPE = '\\';
-    private static final String LABEL_END = "|";
-    private static final String PREFIX_AT = "@";
-    private static final String PREFIX_ICON = PREFIX_AT + "icon/";
-    private static final String PREFIX_CODE = PREFIX_AT + "integer/";
-
-    private PopupCharactersParser() {
-        // Intentional empty constructor for utility class.
-    }
-
-    private static boolean hasIcon(String popupSpec) {
-        if (popupSpec.startsWith(PREFIX_ICON)) {
-            final int end = indexOfLabelEnd(popupSpec, 0);
-            if (end > 0)
-                return true;
-            throw new PopupCharactersParserError("outputText or code not specified: " + popupSpec);
-        }
-        return false;
-    }
-
-    private static boolean hasCode(String popupSpec) {
-        final int end = indexOfLabelEnd(popupSpec, 0);
-        if (end > 0 && end + 1 < popupSpec.length()
-                && popupSpec.substring(end + 1).startsWith(PREFIX_CODE)) {
-            return true;
-        }
-        return false;
-    }
-
-    private static String parseEscape(String text) {
-        if (text.indexOf(ESCAPE) < 0)
-            return text;
-        final int length = text.length();
-        final StringBuilder sb = new StringBuilder();
-        for (int pos = 0; pos < length; pos++) {
-            final char c = text.charAt(pos);
-            if (c == ESCAPE && pos + 1 < length) {
-                sb.append(text.charAt(++pos));
-            } else {
-                sb.append(c);
-            }
-        }
-        return sb.toString();
-    }
-
-    private static int indexOfLabelEnd(String popupSpec, int start) {
-        if (popupSpec.indexOf(ESCAPE, start) < 0) {
-            final int end = popupSpec.indexOf(LABEL_END, start);
-            if (end == 0)
-                throw new PopupCharactersParserError(LABEL_END + " at " + start + ": " + popupSpec);
-            return end;
-        }
-        final int length = popupSpec.length();
-        for (int pos = start; pos < length; pos++) {
-            final char c = popupSpec.charAt(pos);
-            if (c == ESCAPE && pos + 1 < length) {
-                pos++;
-            } else if (popupSpec.startsWith(LABEL_END, pos)) {
-                return pos;
-            }
-        }
-        return -1;
-    }
-
-    public static String getLabel(String popupSpec) {
-        if (hasIcon(popupSpec))
-            return null;
-        final int end = indexOfLabelEnd(popupSpec, 0);
-        final String label = (end > 0) ? parseEscape(popupSpec.substring(0, end))
-                : parseEscape(popupSpec);
-        if (TextUtils.isEmpty(label))
-            throw new PopupCharactersParserError("Empty label: " + popupSpec);
-        return label;
-    }
-
-    public static String getOutputText(String popupSpec) {
-        if (hasCode(popupSpec))
-            return null;
-        final int end = indexOfLabelEnd(popupSpec, 0);
-        if (end > 0) {
-            if (indexOfLabelEnd(popupSpec, end + 1) >= 0)
-                    throw new PopupCharactersParserError("Multiple " + LABEL_END + ": "
-                            + popupSpec);
-            final String outputText = parseEscape(popupSpec.substring(end + LABEL_END.length()));
-            if (!TextUtils.isEmpty(outputText))
-                return outputText;
-            throw new PopupCharactersParserError("Empty outputText: " + popupSpec);
-        }
-        final String label = getLabel(popupSpec);
-        if (label == null)
-            throw new PopupCharactersParserError("Empty label: " + popupSpec);
-        // Code is automatically generated for one letter label. See {@link getCode()}.
-        if (label.length() == 1)
-            return null;
-        return label;
-    }
-
-    public static int getCode(Resources res, String popupSpec) {
-        if (hasCode(popupSpec)) {
-            final int end = indexOfLabelEnd(popupSpec, 0);
-            if (indexOfLabelEnd(popupSpec, end + 1) >= 0)
-                throw new PopupCharactersParserError("Multiple " + LABEL_END + ": " + popupSpec);
-            final int resId = getResourceId(res,
-                    popupSpec.substring(end + LABEL_END.length() + PREFIX_AT.length()));
-            final int code = res.getInteger(resId);
-            return code;
-        }
-        if (indexOfLabelEnd(popupSpec, 0) > 0)
-            return Keyboard.CODE_DUMMY;
-        final String label = getLabel(popupSpec);
-        // Code is automatically generated for one letter label.
-        if (label != null && label.length() == 1)
-            return label.charAt(0);
-        return Keyboard.CODE_DUMMY;
-    }
-
-    public static int getIconId(String popupSpec) {
-        if (hasIcon(popupSpec)) {
-            int end = popupSpec.indexOf(LABEL_END, PREFIX_ICON.length() + 1);
-            final String iconId = popupSpec.substring(PREFIX_ICON.length(), end);
-            try {
-                return Integer.valueOf(iconId);
-            } catch (NumberFormatException e) {
-                Log.w(TAG, "illegal icon id specified: " + iconId);
-                return KeyboardIconsSet.ICON_UNDEFINED;
-            }
-        }
-        return KeyboardIconsSet.ICON_UNDEFINED;
-    }
-
-    private static int getResourceId(Resources res, String name) {
-        String packageName = res.getResourcePackageName(R.string.english_ime_name);
-        int resId = res.getIdentifier(name, null, packageName);
-        if (resId == 0)
-            throw new PopupCharactersParserError("Unknown resource: " + name);
-        return resId;
-    }
-
-    @SuppressWarnings("serial")
-    public static class PopupCharactersParserError extends RuntimeException {
-        public PopupCharactersParserError(String message) {
-            super(message);
-        }
-    }
-
-    public interface CodeFilter {
-        public boolean shouldFilterOut(int code);
-    }
-
-    public static final CodeFilter DIGIT_FILTER = new CodeFilter() {
-        @Override
-        public boolean shouldFilterOut(int code) {
-            return Character.isDigit(code);
-        }
-    };
-
-    public static CharSequence[] filterOut(Resources res, CharSequence[] popupCharacters,
-            CodeFilter filter) {
-        if (popupCharacters == null || popupCharacters.length < 1) {
-            return null;
-        }
-        if (popupCharacters.length == 1
-                && filter.shouldFilterOut(getCode(res, popupCharacters[0].toString()))) {
-            return null;
-        }
-        ArrayList<CharSequence> filtered = null;
-        for (int i = 0; i < popupCharacters.length; i++) {
-            final CharSequence popupSpec = popupCharacters[i];
-            if (filter.shouldFilterOut(getCode(res, popupSpec.toString()))) {
-                if (filtered == null) {
-                    filtered = new ArrayList<CharSequence>();
-                    for (int j = 0; j < i; j++) {
-                        filtered.add(popupCharacters[j]);
-                    }
-                }
-            } else if (filtered != null) {
-                filtered.add(popupSpec);
-            }
-        }
-        if (filtered == null) {
-            return popupCharacters;
-        }
-        if (filtered.size() == 0) {
-            return null;
-        }
-        return filtered.toArray(new CharSequence[filtered.size()]);
-    }
-}
diff --git a/java/src/com/android/inputmethod/latin/CandidateView.java b/java/src/com/android/inputmethod/latin/CandidateView.java
index b9ded31..fe48f0b 100644
--- a/java/src/com/android/inputmethod/latin/CandidateView.java
+++ b/java/src/com/android/inputmethod/latin/CandidateView.java
@@ -23,6 +23,7 @@
 import android.graphics.Typeface;
 import android.graphics.drawable.Drawable;
 import android.os.Message;
+import android.os.SystemClock;
 import android.text.Spannable;
 import android.text.SpannableString;
 import android.text.Spanned;
@@ -34,8 +35,10 @@
 import android.text.style.StyleSpan;
 import android.text.style.UnderlineSpan;
 import android.util.AttributeSet;
+import android.util.DisplayMetrics;
 import android.view.Gravity;
 import android.view.LayoutInflater;
+import android.view.MotionEvent;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.View.OnLongClickListener;
@@ -46,6 +49,9 @@
 
 import com.android.inputmethod.compat.FrameLayoutCompatUtils;
 import com.android.inputmethod.compat.LinearLayoutCompatUtils;
+import com.android.inputmethod.keyboard.KeyboardActionListener;
+import com.android.inputmethod.keyboard.MoreKeysPanel;
+import com.android.inputmethod.keyboard.PointerTracker;
 import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
 
 import java.util.ArrayList;
@@ -58,16 +64,19 @@
     }
 
     // The maximum number of suggestions available. See {@link Suggest#mPrefMaxSuggestions}.
-    private static final int MAX_SUGGESTIONS = 18;
+    public static final int MAX_SUGGESTIONS = 18;
 
     private static final boolean DBG = LatinImeLogger.sDBG;
 
     private final ViewGroup mCandidatesPlacer;
     private final ViewGroup mCandidatesStrip;
-    private ViewGroup mCandidatesPane;
-    private ViewGroup mCandidatesPaneContainer;
     private View mKeyboardView;
 
+    private final View mMoreSuggestionsContainer;
+    private final MoreSuggestionsView mMoreSuggestionsView;
+    private final MoreSuggestions.Builder mMoreSuggestionsBuilder;
+    private final PopupWindow mMoreSuggestionsWindow;
+
     private final ArrayList<TextView> mWords = new ArrayList<TextView>();
     private final ArrayList<TextView> mInfos = new ArrayList<TextView>();
     private final ArrayList<View> mDividers = new ArrayList<View>();
@@ -80,7 +89,6 @@
     private boolean mShowingAutoCorrectionInverted;
 
     private final SuggestionsStripParams mStripParams;
-    private final SuggestionsPaneParams mPaneParams;
     private static final float MIN_TEXT_XSCALE = 0.70f;
 
     private final UiHandler mHandler = new UiHandler(this);
@@ -137,7 +145,6 @@
     private static class CandidateViewParams {
         public final int mPadding;
         public final int mDividerWidth;
-        public final int mDividerHeight;
         public final int mCandidateStripHeight;
 
         protected final List<TextView> mWords;
@@ -156,96 +163,9 @@
             divider.measure(
                     ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
             mDividerWidth = divider.getMeasuredWidth();
-            mDividerHeight = divider.getMeasuredHeight();
 
             final Resources res = word.getResources();
-            mCandidateStripHeight = res.getDimensionPixelOffset(R.dimen.candidate_strip_height);
-        }
-    }
-
-    private static class SuggestionsPaneParams extends CandidateViewParams {
-        public SuggestionsPaneParams(List<TextView> words, List<View> dividers,
-                List<TextView> infos) {
-            super(words, dividers, infos);
-        }
-
-        public int layout(SuggestedWords suggestions, ViewGroup paneView, int from, int textColor,
-                int paneWidth) {
-            final int count = Math.min(mWords.size(), suggestions.size());
-            View centeringFrom = null, lastView = null;
-            int x = 0, y = 0;
-            for (int index = from; index < count; index++) {
-                final int pos = index;
-                final TextView word = mWords.get(pos);
-                final View divider = mDividers.get(pos);
-                final TextPaint paint = word.getPaint();
-                word.setTextColor(textColor);
-                final CharSequence styled = suggestions.getWord(pos);
-
-                final TextView info;
-                if (DBG) {
-                    final CharSequence debugInfo = getDebugInfo(suggestions, index);
-                    if (debugInfo != null) {
-                        info = mInfos.get(index);
-                        info.setText(debugInfo);
-                    } else {
-                        info = null;
-                    }
-                } else {
-                    info = null;
-                }
-
-                final CharSequence text;
-                final float scaleX;
-                paint.setTextScaleX(1.0f);
-                final int textWidth = getTextWidth(styled, paint);
-                int available = paneWidth - x - mPadding;
-                if (textWidth >= available) {
-                    // Needs new row, centering previous row.
-                    centeringCandidates(paneView, centeringFrom, lastView, x, paneWidth);
-                    x = 0;
-                    y += mCandidateStripHeight;
-                }
-                if (x != 0) {
-                    // Add divider if this isn't the left most suggestion in current row.
-                    paneView.addView(divider);
-                    FrameLayoutCompatUtils.placeViewAt(divider, x, y
-                            + (mCandidateStripHeight - mDividerHeight) / 2, mDividerWidth,
-                            mDividerHeight);
-                    x += mDividerWidth;
-                }
-                available = paneWidth - x - mPadding;
-                text = getEllipsizedText(styled, available, paint);
-                scaleX = paint.getTextScaleX();
-                word.setText(text);
-                word.setTextScaleX(scaleX);
-                paneView.addView(word);
-                lastView = word;
-                if (x == 0)
-                    centeringFrom = word;
-                word.measure(ViewGroup.LayoutParams.WRAP_CONTENT,
-                        MeasureSpec.makeMeasureSpec(mCandidateStripHeight, MeasureSpec.EXACTLY));
-                final int width = word.getMeasuredWidth();
-                final int height = word.getMeasuredHeight();
-                FrameLayoutCompatUtils.placeViewAt(word, x, y + (mCandidateStripHeight - height)
-                        / 2, width, height);
-                x += width;
-                if (info != null) {
-                    paneView.addView(info);
-                    lastView = info;
-                    info.measure(ViewGroup.LayoutParams.WRAP_CONTENT,
-                            ViewGroup.LayoutParams.WRAP_CONTENT);
-                    final int infoWidth = info.getMeasuredWidth();
-                    FrameLayoutCompatUtils.placeViewAt(
-                            info, x - infoWidth, y, infoWidth, info.getMeasuredHeight());
-                }
-            }
-            if (x != 0) {
-                // Centering last candidates row.
-                centeringCandidates(paneView, centeringFrom, lastView, x, paneWidth);
-            }
-
-            return count - from;
+            mCandidateStripHeight = res.getDimensionPixelSize(R.dimen.candidate_strip_height);
         }
     }
 
@@ -257,7 +177,7 @@
         private final int mColorTypedWord;
         private final int mColorAutoCorrect;
         private final int mColorSuggestedCandidate;
-        private final int mCandidateCountInStrip;
+        public final int mCandidateCountInStrip;
         private final float mCenterCandidateWeight;
         private final int mCenterCandidateIndex;
         private final Drawable mMoreCandidateHint;
@@ -311,10 +231,6 @@
             mHintToSaveText = context.getText(R.string.hint_add_to_dictionary);
         }
 
-        public int getTextColor() {
-            return mColorTypedWord;
-        }
-
         private CharSequence getStyledCandidateWord(SuggestedWords suggestions, int pos) {
             final CharSequence word = suggestions.getWord(pos);
             final boolean isAutoCorrect = pos == 1 && willAutoCorrect(suggestions);
@@ -389,10 +305,11 @@
             return word;
         }
 
-        public int layout(SuggestedWords suggestions, ViewGroup stripView, ViewGroup placer,
+        public void layout(SuggestedWords suggestions, ViewGroup stripView, ViewGroup placer,
                 int stripWidth) {
             if (suggestions.isPunctuationSuggestions()) {
-                return layoutPunctuationSuggestions(suggestions, stripView);
+                layoutPunctuationSuggestions(suggestions, stripView);
+                return;
             }
 
             final int countInStrip = mCandidateCountInStrip;
@@ -449,8 +366,6 @@
                     }
                 }
             }
-
-            return countInStrip;
         }
 
         private int getCandidateWidth(int index, int maxWidth) {
@@ -482,7 +397,7 @@
             }
         }
 
-        private int layoutPunctuationSuggestions(SuggestedWords suggestions, ViewGroup stripView) {
+        private void layoutPunctuationSuggestions(SuggestedWords suggestions, ViewGroup stripView) {
             final int countInStrip = Math.min(suggestions.size(), PUNCTUATIONS_IN_STRIP);
             for (int index = 0; index < countInStrip; index++) {
                 if (index != 0) {
@@ -501,7 +416,6 @@
                 setLayoutWeight(word, 1.0f, mCandidateStripHeight);
             }
             mMoreSuggestionsAvailable = false;
-            return countInStrip;
         }
 
         public void layoutAddToDictionaryHint(CharSequence word, ViewGroup stripView,
@@ -583,8 +497,16 @@
 
         mStripParams = new SuggestionsStripParams(context, attrs, defStyle, mWords, mDividers,
                 mInfos);
-        mPaneParams = new SuggestionsPaneParams(mWords, mDividers, mInfos);
         mStripParams.mWordToSaveView.setOnClickListener(this);
+
+        mMoreSuggestionsContainer = inflater.inflate(R.layout.more_suggestions, null);
+        mMoreSuggestionsView = (MoreSuggestionsView)mMoreSuggestionsContainer
+                .findViewById(R.id.more_suggestions_view);
+        mMoreSuggestionsBuilder = new MoreSuggestions.Builder(mMoreSuggestionsView);
+        mMoreSuggestionsWindow = new PopupWindow(context);
+        mMoreSuggestionsWindow.setWindowLayoutMode(
+                ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
+        mMoreSuggestionsWindow.setBackgroundDrawable(null);
     }
 
     /**
@@ -594,11 +516,6 @@
     public void setListener(Listener listener, View inputView) {
         mListener = listener;
         mKeyboardView = inputView.findViewById(R.id.keyboard_view);
-        mCandidatesPane = FrameLayoutCompatUtils.getPlacer(
-                (ViewGroup)inputView.findViewById(R.id.candidates_pane));
-        mCandidatesPane.setOnClickListener(this);
-        mCandidatesPaneContainer = (ViewGroup)inputView.findViewById(
-                R.id.candidates_pane_container);
     }
 
     public void setSuggestions(SuggestedWords suggestions) {
@@ -614,15 +531,10 @@
 
     private void updateSuggestions() {
         clear();
-        closeCandidatesPane();
         if (mSuggestions.size() == 0)
             return;
 
-        final int width = getWidth();
-        final int countInStrip = mStripParams.layout(
-                mSuggestions, mCandidatesStrip, mCandidatesPlacer, width);
-        mPaneParams.layout(
-                mSuggestions, mCandidatesPane, countInStrip, mStripParams.getTextColor(), width);
+        mStripParams.layout(mSuggestions, mCandidatesStrip, mCandidatesPlacer, getWidth());
     }
 
     private static CharSequence getDebugInfo(SuggestedWords suggestions, int pos) {
@@ -648,26 +560,6 @@
         }
     }
 
-    private static void centeringCandidates(ViewGroup parent, View from, View to, int width,
-            int parentWidth) {
-        final int fromIndex = parent.indexOfChild(from);
-        final int toIndex = parent.indexOfChild(to);
-        final int offset = (parentWidth - width) / 2;
-        for (int index = fromIndex; index <= toIndex; index++) {
-            offsetMargin(parent.getChildAt(index), offset, 0);
-        }
-    }
-
-    private static void offsetMargin(View v, int dx, int dy) {
-        if (v == null)
-            return;
-        final ViewGroup.LayoutParams lp = v.getLayoutParams();
-        if (lp instanceof ViewGroup.MarginLayoutParams) {
-            final ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams)lp;
-            mlp.setMargins(mlp.leftMargin + dx, mlp.topMargin + dy, 0, 0);
-        }
-    }
-
     private static float getTextScaleX(CharSequence text, int maxWidth, TextPaint paint) {
         paint.setTextScaleX(1.0f);
         final int width = getTextWidth(text, paint);
@@ -730,25 +622,6 @@
         }
     }
 
-    private void expandCandidatesPane() {
-        mCandidatesPaneContainer.setMinimumHeight(mKeyboardView.getMeasuredHeight());
-        mCandidatesPaneContainer.setVisibility(VISIBLE);
-        mKeyboardView.setVisibility(GONE);
-    }
-
-    private void closeCandidatesPane() {
-        mCandidatesPaneContainer.setVisibility(GONE);
-        mKeyboardView.setVisibility(VISIBLE);
-    }
-
-    private void toggleCandidatesPane() {
-        if (mCandidatesPaneContainer.getVisibility() == VISIBLE) {
-            closeCandidatesPane();
-        } else {
-            expandCandidatesPane();
-        }
-    }
-
     public void onAutoCorrectionInverted(CharSequence autoCorrectedWord) {
         final CharSequence inverted = mStripParams.getInvertedText(autoCorrectedWord);
         if (inverted == null)
@@ -785,8 +658,7 @@
         mCandidatesPlacer.removeAllViews();
         mCandidatesPlacer.addView(mCandidatesStrip);
         mCandidatesStrip.removeAllViews();
-        mCandidatesPane.removeAllViews();
-        closeCandidatesPane();
+        mMoreSuggestionsWindow.dismiss();
     }
 
     private void hidePreview() {
@@ -823,16 +695,103 @@
         }
     }
 
+    private final KeyboardActionListener mMoreSuggestionsListener =
+            new KeyboardActionListener.Adapter() {
+        @Override
+        public boolean onCustomRequest(int requestCode) {
+            final int index = requestCode;
+            final CharSequence word = mSuggestions.getWord(index);
+            mListener.pickSuggestionManually(index, word);
+            mMoreSuggestionsView.dismissMoreKeysPanel();
+            return true;
+        }
+
+        @Override
+        public void onCancelInput() {
+            mMoreSuggestionsView.dismissMoreKeysPanel();
+        }
+    };
+
+    private final MoreKeysPanel.Controller mMoreSuggestionsController =
+            new MoreKeysPanel.Controller() {
+        @Override
+        public boolean dismissMoreKeysPanel() {
+            if (mMoreSuggestionsWindow.isShowing()) {
+                mMoreSuggestionsWindow.dismiss();
+                return true;
+            }
+            return false;
+        }
+    };
+
     @Override
     public boolean onLongClick(View view) {
-        if (mStripParams.mMoreSuggestionsAvailable) {
-            toggleCandidatesPane();
+        final SuggestionsStripParams params = mStripParams;
+        if (params.mMoreSuggestionsAvailable) {
+            final int stripWidth = getWidth();
+            final View container = mMoreSuggestionsContainer;
+            final int maxWidth = stripWidth - container.getPaddingLeft()
+                    - container.getPaddingRight();
+            final DisplayMetrics dm = getContext().getResources().getDisplayMetrics();
+            // TODO: Revise how we determine the height
+            final int maxHeight = dm.heightPixels - mKeyboardView.getHeight() - getHeight() * 3;
+            final MoreSuggestions.Builder builder = mMoreSuggestionsBuilder;
+            builder.layout(mSuggestions, params.mCandidateCountInStrip, maxWidth, maxHeight);
+            mMoreSuggestionsView.setKeyboard(builder.build());
+            container.measure(
+                    ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
+
+            final MoreKeysPanel moreKeysPanel = mMoreSuggestionsView;
+            final int pointX = stripWidth / 2;
+            final int pointY = 0;
+            moreKeysPanel.showMoreKeysPanel(
+                    this, mMoreSuggestionsController, pointX, pointY,
+                    mMoreSuggestionsWindow, mMoreSuggestionsListener);
+            // TODO: Should figure out how to select the pointer tracker correctly.
+            final PointerTracker tracker = PointerTracker.getPointerTracker(0, moreKeysPanel);
+            final int translatedX = moreKeysPanel.translateX(tracker.getLastX());
+            final int translatedY = moreKeysPanel.translateY(tracker.getLastY());
+            tracker.onShowMoreKeysPanel(
+                    translatedX, translatedY, SystemClock.uptimeMillis(), moreKeysPanel);
+            view.setPressed(false);
+            // TODO: Should gray out the keyboard here as well?
             return true;
         }
         return false;
     }
 
     @Override
+    public boolean dispatchTouchEvent(MotionEvent me) {
+        if (!mMoreSuggestionsWindow.isShowing()) {
+            return super.dispatchTouchEvent(me);
+        }
+        final int action = me.getAction();
+        final long eventTime = me.getEventTime();
+        final int index = me.getActionIndex();
+        final int id = me.getPointerId(index);
+        final PointerTracker tracker = PointerTracker.getPointerTracker(id, mMoreSuggestionsView);
+        final int x = mMoreSuggestionsView.translateX((int)me.getX(index));
+        final int y = mMoreSuggestionsView.translateY((int)me.getY(index));
+        switch (action) {
+        case MotionEvent.ACTION_DOWN:
+        case MotionEvent.ACTION_POINTER_DOWN:
+            tracker.onDownEvent(x, y, eventTime, mMoreSuggestionsView);
+            break;
+        case MotionEvent.ACTION_UP:
+        case MotionEvent.ACTION_POINTER_UP:
+            tracker.onUpEvent(x, y, eventTime);
+            break;
+        case MotionEvent.ACTION_MOVE:
+            tracker.onMoveEvent(x, y, eventTime);
+            break;
+        case MotionEvent.ACTION_CANCEL:
+            tracker.onCancelEvent(x, y, eventTime);
+            break;
+        }
+        return true;
+    }
+
+    @Override
     public void onClick(View view) {
         if (view == mStripParams.mWordToSaveView) {
             addToDictionary((CharSequence)view.getTag());
@@ -840,11 +799,6 @@
             return;
         }
 
-        if (view == mCandidatesPane) {
-            closeCandidatesPane();
-            return;
-        }
-
         final Object tag = view.getTag();
         if (!(tag instanceof Integer))
             return;
@@ -854,9 +808,6 @@
 
         final CharSequence word = mSuggestions.getWord(index);
         mListener.pickSuggestionManually(index, word);
-        // Because some punctuation letters are not treated as word separator depending on locale,
-        // {@link #setSuggestions} might not be called and candidates pane left opened.
-        closeCandidatesPane();
     }
 
     @Override
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 7559108..da6c221 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -118,6 +118,12 @@
      */
     public static final String SUBTYPE_EXTRA_VALUE_ASCII_CAPABLE = "AsciiCapable";
 
+    /**
+     * The subtype extra value used to indicate that the subtype keyboard layout should be loaded
+     * from the specified locale.
+     */
+    public static final String SUBTYPE_EXTRA_VALUE_KEYBOARD_LOCALE = "KeyboardLocale";
+
     private static final int EXTENDED_TOUCHABLE_REGION_HEIGHT = 100;
 
     // How many continuous deletes at which to start deleting at a higher speed.
diff --git a/java/src/com/android/inputmethod/latin/MoreSuggestions.java b/java/src/com/android/inputmethod/latin/MoreSuggestions.java
new file mode 100644
index 0000000..0446fb2
--- /dev/null
+++ b/java/src/com/android/inputmethod/latin/MoreSuggestions.java
@@ -0,0 +1,203 @@
+/*
+ * Copyright (C) 2011 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.
+ */
+
+package com.android.inputmethod.latin;
+
+import android.graphics.Paint;
+import android.text.TextUtils;
+
+import com.android.inputmethod.keyboard.Key;
+import com.android.inputmethod.keyboard.Keyboard;
+import com.android.inputmethod.keyboard.KeyboardSwitcher;
+import com.android.inputmethod.keyboard.KeyboardView;
+import com.android.inputmethod.keyboard.internal.KeyboardBuilder;
+import com.android.inputmethod.keyboard.internal.KeyboardParams;
+import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
+
+public class MoreSuggestions extends Keyboard {
+    private static final boolean DBG = LatinImeLogger.sDBG;
+
+    public static final int SUGGESTION_CODE_BASE = 1024;
+
+    private MoreSuggestions(Builder.MoreSuggestionsParam params) {
+        super(params);
+    }
+
+    public static class Builder extends KeyboardBuilder<Builder.MoreSuggestionsParam> {
+        private final MoreSuggestionsView mPaneView;
+        private SuggestedWords mSuggestions;
+        private int mFromPos;
+        private int mToPos;
+
+        public static class MoreSuggestionsParam extends KeyboardParams {
+            private final int[] mWidths = new int[CandidateView.MAX_SUGGESTIONS];
+            private final int[] mRowNumbers = new int[CandidateView.MAX_SUGGESTIONS];
+            private final int[] mColumnOrders = new int[CandidateView.MAX_SUGGESTIONS];
+            private final int[] mNumColumnsInRow = new int[CandidateView.MAX_SUGGESTIONS];
+            private static final int MAX_COLUMNS_IN_ROW = 3;
+            private int mNumRows;
+
+            public int layout(SuggestedWords suggestions, int fromPos, int maxWidth, int maxHeight,
+                    KeyboardView view) {
+                clearKeys();
+                final Paint paint = new Paint();
+                paint.setAntiAlias(true);
+                final int padding = (int) view.getContext().getResources()
+                        .getDimension(R.dimen.more_suggestions_key_horizontal_padding);
+
+                int row = 0;
+                int pos = fromPos, rowStartPos = fromPos;
+                final int size = Math.min(suggestions.size(), CandidateView.MAX_SUGGESTIONS);
+                while (pos < size) {
+                    final CharSequence word = suggestions.getWord(pos);
+                    // TODO: Should take care of text x-scaling.
+                    mWidths[pos] = (int)view.getDefaultLabelWidth(word, paint) + padding;
+                    final int numColumn = pos - rowStartPos + 1;
+                    if (numColumn > MAX_COLUMNS_IN_ROW
+                            || !fitInWidth(rowStartPos, pos + 1, maxWidth / numColumn)) {
+                        if ((row + 1) * mDefaultRowHeight > maxHeight) {
+                            break;
+                        }
+                        mNumColumnsInRow[row] = pos - rowStartPos;
+                        rowStartPos = pos;
+                        row++;
+                    }
+                    mColumnOrders[pos] = pos - rowStartPos;
+                    mRowNumbers[pos] = row;
+                    pos++;
+                }
+                mNumColumnsInRow[row] = pos - rowStartPos;
+                mNumRows = row + 1;
+                mWidth = mOccupiedWidth = calcurateMaxRowWidth(fromPos, pos);
+                mHeight = mOccupiedHeight = mNumRows * mDefaultRowHeight + mVerticalGap;
+                return pos - fromPos;
+            }
+
+            private boolean fitInWidth(int startPos, int endPos, int width) {
+                for (int pos = startPos; pos < endPos; pos++) {
+                    if (mWidths[pos] > width)
+                        return false;
+                }
+                return true;
+            }
+
+            private int calcurateMaxRowWidth(int startPos, int endPos) {
+                int maxRowWidth = 0;
+                int pos = startPos;
+                for (int row = 0; row < mNumRows; row++) {
+                    final int numColumn = mNumColumnsInRow[row];
+                    int maxKeyWidth = 0;
+                    while (pos < endPos && mRowNumbers[pos] == row) {
+                        maxKeyWidth = Math.max(maxKeyWidth, mWidths[pos]);
+                        pos++;
+                    }
+                    maxRowWidth = Math.max(maxRowWidth, maxKeyWidth * numColumn);
+                }
+                return maxRowWidth;
+            }
+
+            private static final int[][] COLUMN_ORDER_TO_NUMBER = {
+                { 0, },
+                { 1, 0, },
+                { 2, 0, 1},
+            };
+
+            private int getColumnNumber(int pos) {
+                final int columnOrder = mColumnOrders[pos];
+                final int numColumn = mNumColumnsInRow[mRowNumbers[pos]];
+                return COLUMN_ORDER_TO_NUMBER[numColumn - 1][columnOrder];
+            }
+
+            public int getX(int pos) {
+                final int columnNumber = getColumnNumber(pos);
+                return columnNumber * getWidth(pos);
+            }
+
+            public int getY(int pos) {
+                final int row = mRowNumbers[pos];
+                return (mNumRows -1 - row) * mDefaultRowHeight + mTopPadding;
+            }
+
+            public int getWidth(int pos) {
+                final int row = mRowNumbers[pos];
+                final int numColumn = mNumColumnsInRow[row];
+                return mWidth / numColumn;
+            }
+
+            public int getFlags(int pos) {
+                int rowFlags = 0;
+
+                final int row = mRowNumbers[pos];
+                if (row == 0)
+                    rowFlags |= Keyboard.EDGE_BOTTOM;
+                if (row == mNumRows - 1)
+                    rowFlags |= Keyboard.EDGE_TOP;
+
+                final int numColumn = mNumColumnsInRow[row];
+                final int column = getColumnNumber(pos);
+                if (column == 0)
+                    rowFlags |= Keyboard.EDGE_LEFT;
+                if (column == numColumn - 1)
+                    rowFlags |= Keyboard.EDGE_RIGHT;
+
+                return rowFlags;
+            }
+        }
+
+        public Builder(MoreSuggestionsView paneView) {
+            super(paneView.getContext(), new MoreSuggestionsParam());
+            mPaneView = paneView;
+        }
+
+        public Builder layout(SuggestedWords suggestions, int fromPos, int maxWidth,
+                int maxHeight) {
+            final Keyboard keyboard = KeyboardSwitcher.getInstance().getLatinKeyboard();
+            final int xmlId = R.xml.kbd_suggestions_pane_template;
+            load(keyboard.mId.cloneWithNewXml(mResources.getResourceEntryName(xmlId), xmlId));
+            mParams.mVerticalGap = mParams.mTopPadding = keyboard.mVerticalGap / 2;
+
+            final int count = mParams.layout(suggestions, fromPos, maxWidth, maxHeight, mPaneView);
+            mFromPos = fromPos;
+            mToPos = fromPos + count;
+            mSuggestions = suggestions;
+            return this;
+        }
+
+        private static String getDebugInfo(SuggestedWords suggestions, int pos) {
+            if (!DBG) return null;
+            final SuggestedWordInfo wordInfo = suggestions.getInfo(pos);
+            if (wordInfo == null) return null;
+            final String info = wordInfo.getDebugString();
+            if (TextUtils.isEmpty(info)) return null;
+            return info;
+        }
+
+        @Override
+        public MoreSuggestions build() {
+            final MoreSuggestionsParam params = mParams;
+            for (int pos = mFromPos; pos < mToPos; pos++) {
+                final String word = mSuggestions.getWord(pos).toString();
+                final String info = getDebugInfo(mSuggestions, pos);
+                final int index = pos + SUGGESTION_CODE_BASE;
+                final Key key = new Key(
+                        params, word, info, null, index, null, params.getX(pos), params.getY(pos),
+                        params.getWidth(pos), params.mDefaultRowHeight, params.getFlags(pos));
+                params.onAddKey(key);
+            }
+            return new MoreSuggestions(params);
+        }
+    }
+}
diff --git a/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java b/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java
new file mode 100644
index 0000000..8284901
--- /dev/null
+++ b/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java
@@ -0,0 +1,237 @@
+/*
+ * Copyright (C) 2011 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.
+ */
+
+package com.android.inputmethod.latin;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.util.AttributeSet;
+import android.view.Gravity;
+import android.view.View;
+import android.widget.PopupWindow;
+
+import com.android.inputmethod.keyboard.Key;
+import com.android.inputmethod.keyboard.KeyDetector;
+import com.android.inputmethod.keyboard.Keyboard;
+import com.android.inputmethod.keyboard.KeyboardActionListener;
+import com.android.inputmethod.keyboard.KeyboardView;
+import com.android.inputmethod.keyboard.MoreKeysPanel;
+import com.android.inputmethod.keyboard.PointerTracker;
+import com.android.inputmethod.keyboard.PointerTracker.DrawingProxy;
+import com.android.inputmethod.keyboard.PointerTracker.TimerProxy;
+
+import java.util.List;
+
+/**
+ * A view that renders a virtual {@link MoreSuggestions}. It handles rendering of keys and detecting
+ * key presses and touch movements.
+ */
+public class MoreSuggestionsView extends KeyboardView implements MoreKeysPanel {
+    private final int[] mCoordinates = new int[2];
+
+    private final KeyDetector mKeyDetector;
+
+    private Controller mController;
+    private KeyboardActionListener mListener;
+    private int mOriginX;
+    private int mOriginY;
+
+    private static class SuggestionsPaneKeyDetector extends KeyDetector {
+        private final int mSlideAllowanceSquare;
+        private final int mSlideAllowanceSquareTop;
+
+        public SuggestionsPaneKeyDetector(float slideAllowance) {
+            super(/* keyHysteresisDistance */0);
+            mSlideAllowanceSquare = (int)(slideAllowance * slideAllowance);
+            // Top slide allowance is slightly longer (sqrt(2) times) than other edges.
+            mSlideAllowanceSquareTop = mSlideAllowanceSquare * 2;
+        }
+
+        @Override
+        public boolean alwaysAllowsSlidingInput() {
+            return true;
+        }
+
+        @Override
+        protected int getMaxNearbyKeys() {
+            // No nearby key will be returned.
+            return 1;
+        }
+
+        @Override
+        public int getKeyIndexAndNearbyCodes(int x, int y, final int[] allCodes) {
+            final List<Key> keys = getKeyboard().mKeys;
+            final int touchX = getTouchX(x);
+            final int touchY = getTouchY(y);
+
+            int nearestIndex = NOT_A_KEY;
+            int nearestDist = (y < 0) ? mSlideAllowanceSquareTop : mSlideAllowanceSquare;
+            final int keyCount = keys.size();
+            for (int index = 0; index < keyCount; index++) {
+                final int dist = keys.get(index).squaredDistanceToEdge(touchX, touchY);
+                if (dist < nearestDist) {
+                    nearestIndex = index;
+                    nearestDist = dist;
+                }
+            }
+
+            if (allCodes != null && nearestIndex != NOT_A_KEY)
+                allCodes[0] = keys.get(nearestIndex).mCode;
+            return nearestIndex;
+        }
+    }
+
+    private static final TimerProxy EMPTY_TIMER_PROXY = new TimerProxy.Adapter();
+
+    private final KeyboardActionListener mSuggestionsPaneListener =
+            new KeyboardActionListener.Adapter() {
+        @Override
+        public void onPress(int primaryCode, boolean withSliding) {
+            mListener.onPress(primaryCode, withSliding);
+        }
+
+        @Override
+        public void onRelease(int primaryCode, boolean withSliding) {
+            mListener.onRelease(primaryCode, withSliding);
+        }
+
+        @Override
+        public void onCodeInput(int primaryCode, int[] keyCodes, int x, int y) {
+            mListener.onCustomRequest(primaryCode - MoreSuggestions.SUGGESTION_CODE_BASE);
+        }
+
+        @Override
+        public void onCancelInput() {
+            mListener.onCancelInput();
+        }
+    };
+
+    public MoreSuggestionsView(Context context, AttributeSet attrs) {
+        this(context, attrs, R.attr.suggestionsPaneViewStyle);
+    }
+
+    public MoreSuggestionsView(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+
+        final Resources res = context.getResources();
+        // Override default ProximityKeyDetector.
+        mKeyDetector = new SuggestionsPaneKeyDetector(res.getDimension(
+                R.dimen.more_suggestions_slide_allowance));
+        // Remove gesture detector on suggestions pane
+        setKeyPreviewPopupEnabled(false, 0);
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        final Keyboard keyboard = getKeyboard();
+        if (keyboard != null) {
+            final int width = keyboard.mOccupiedWidth + getPaddingLeft() + getPaddingRight();
+            final int height = keyboard.mOccupiedHeight + getPaddingTop() + getPaddingBottom();
+            setMeasuredDimension(width, height);
+        } else {
+            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+        }
+    }
+
+    @Override
+    public void setKeyboard(Keyboard keyboard) {
+        super.setKeyboard(keyboard);
+        mKeyDetector.setKeyboard(keyboard, -getPaddingLeft(),
+                -getPaddingTop() + mVerticalCorrection);
+    }
+
+    @Override
+    public KeyDetector getKeyDetector() {
+        return mKeyDetector;
+    }
+
+    @Override
+    public KeyboardActionListener getKeyboardActionListener() {
+        return mSuggestionsPaneListener;
+    }
+
+    @Override
+    public DrawingProxy getDrawingProxy() {
+        return  this;
+    }
+
+    @Override
+    public TimerProxy getTimerProxy() {
+        return EMPTY_TIMER_PROXY;
+    }
+
+    @Override
+    public void setKeyPreviewPopupEnabled(boolean previewEnabled, int delay) {
+        // Suggestions pane needs no pop-up key preview displayed, so we pass always false with a
+        // delay of 0. The delay does not matter actually since the popup is not shown anyway.
+        super.setKeyPreviewPopupEnabled(false, 0);
+    }
+
+    @Override
+    public void setShifted(boolean shifted) {
+        // Nothing to do with.
+    }
+
+    @Override
+    public void showMoreKeysPanel(View parentView, Controller controller, int pointX, int pointY,
+            PopupWindow window, KeyboardActionListener listener) {
+        mController = controller;
+        mListener = listener;
+        final View container = (View)getParent();
+        final MoreSuggestions pane = (MoreSuggestions)getKeyboard();
+
+        parentView.getLocationInWindow(mCoordinates);
+        final int paneLeft = pointX - (pane.mOccupiedWidth / 2) + parentView.getPaddingLeft();
+        final int x = wrapUp(Math.max(0, Math.min(paneLeft,
+                parentView.getWidth() - pane.mOccupiedWidth))
+                - container.getPaddingLeft() + mCoordinates[0],
+                container.getMeasuredWidth(), 0, parentView.getWidth());
+        final int y = pointY
+                - (container.getMeasuredHeight() - container.getPaddingBottom())
+                + parentView.getPaddingTop() + mCoordinates[1];
+
+        window.setContentView(container);
+        window.setWidth(container.getMeasuredWidth());
+        window.setHeight(container.getMeasuredHeight());
+        window.showAtLocation(parentView, Gravity.NO_GRAVITY, x, y);
+
+        mOriginX = x + container.getPaddingLeft() - mCoordinates[0];
+        mOriginY = y + container.getPaddingTop() - mCoordinates[1];
+    }
+
+    private static int wrapUp(int x, int width, int left, int right) {
+        if (x < left)
+            return left;
+        if (x + width > right)
+            return right - width;
+        return x;
+    }
+
+    @Override
+    public boolean dismissMoreKeysPanel() {
+        return mController.dismissMoreKeysPanel();
+    }
+
+    @Override
+    public int translateX(int x) {
+        return x - mOriginX;
+    }
+
+    @Override
+    public int translateY(int y) {
+        return y - mOriginY;
+    }
+}
diff --git a/java/src/com/android/inputmethod/latin/Settings.java b/java/src/com/android/inputmethod/latin/Settings.java
index b79c441..1e2ef48 100644
--- a/java/src/com/android/inputmethod/latin/Settings.java
+++ b/java/src/com/android/inputmethod/latin/Settings.java
@@ -336,7 +336,9 @@
                 R.string.auto_correction_threshold_mode_index_off);
         final String currentSetting = mAutoCorrectionThresholdPreference.getValue();
         mBigramSuggestion.setEnabled(!currentSetting.equals(autoCorrectionOff));
-        mBigramPrediction.setEnabled(!currentSetting.equals(autoCorrectionOff));
+        if (null != mBigramPrediction) {
+            mBigramPrediction.setEnabled(!currentSetting.equals(autoCorrectionOff));
+        }
     }
 
     public Activity getActivityInternal() {
diff --git a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
index 87d8549..a60f444 100644
--- a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
+++ b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
@@ -138,7 +138,7 @@
         mEnabledLanguagesOfCurrentInputMethod.clear();
         mEnabledKeyboardSubtypesOfCurrentInputMethod.clear();
         for (InputMethodSubtypeCompatWrapper ims : mAllEnabledSubtypesOfCurrentInputMethod) {
-            final String locale = ims.getLocale();
+            final String locale = getSubtypeLocale(ims);
             final String mode = ims.getMode();
             mLocaleSplitter.setString(locale);
             if (mLocaleSplitter.hasNext()) {
@@ -167,7 +167,7 @@
             Log.d(TAG, "Update shortcut IME from : "
                     + (mShortcutInputMethodInfo == null
                             ? "<null>" : mShortcutInputMethodInfo.getId()) + ", "
-                    + (mShortcutSubtype == null ? "<null>" : (mShortcutSubtype.getLocale()
+                    + (mShortcutSubtype == null ? "<null>" : (getSubtypeLocale(mShortcutSubtype)
                             + ", " + mShortcutSubtype.getMode())));
         }
         // TODO: Update an icon for shortcut IME
@@ -189,11 +189,17 @@
             Log.d(TAG, "Update shortcut IME to : "
                     + (mShortcutInputMethodInfo == null
                             ? "<null>" : mShortcutInputMethodInfo.getId()) + ", "
-                    + (mShortcutSubtype == null ? "<null>" : (mShortcutSubtype.getLocale()
+                    + (mShortcutSubtype == null ? "<null>" : (getSubtypeLocale(mShortcutSubtype)
                             + ", " + mShortcutSubtype.getMode())));
         }
     }
 
+    private static String getSubtypeLocale(InputMethodSubtypeCompatWrapper subtype) {
+        final String keyboardLocale = subtype.getExtraValueOf(
+                LatinIME.SUBTYPE_EXTRA_VALUE_KEYBOARD_LOCALE);
+        return keyboardLocale != null ? keyboardLocale : subtype.getLocale();
+    }
+
     // Update the current subtype. LatinIME.onCurrentInputMethodSubtypeChanged calls this function.
     public void updateSubtype(InputMethodSubtypeCompatWrapper newSubtype) {
         final String newLocale;
@@ -206,7 +212,7 @@
             newLocale = "en_US";
             newMode = KEYBOARD_MODE;
         } else {
-            newLocale = newSubtype.getLocale();
+            newLocale = getSubtypeLocale(newSubtype);
             newMode = newSubtype.getMode();
         }
         if (DBG) {
@@ -332,7 +338,7 @@
             final String imiPackageName = imi.getPackageName();
             if (DBG) {
                 Log.d(TAG, "Update icons of IME: " + imiPackageName + ","
-                        + subtype.getLocale() + "," + subtype.getMode());
+                        + getSubtypeLocale(subtype) + "," + subtype.getMode());
             }
             if (subtype != null) {
                 return pm.getDrawable(imiPackageName, subtype.getIconResId(),
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/PopupCharactersParserTests.java b/tests/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParserTests.java
similarity index 93%
rename from tests/src/com/android/inputmethod/keyboard/internal/PopupCharactersParserTests.java
rename to tests/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParserTests.java
index e4a1c68..798fca0 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/PopupCharactersParserTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParserTests.java
@@ -22,7 +22,7 @@
 import com.android.inputmethod.keyboard.Keyboard;
 import com.android.inputmethod.latin.R;
 
-public class PopupCharactersParserTests extends AndroidTestCase {
+public class MoreKeySpecParserTests extends AndroidTestCase {
     private Resources mRes;
 
     private static final int ICON_SETTINGS_KEY = 5;
@@ -45,28 +45,28 @@
         mCodeSettings = res.getInteger(codeId);
     }
 
-    private void assertParser(String message, String popupSpec, String expectedLabel,
+    private void assertParser(String message, String moreKeySpec, String expectedLabel,
             String expectedOutputText, int expectedIcon, int expectedCode) {
-        String actualLabel = PopupCharactersParser.getLabel(popupSpec);
+        String actualLabel = MoreKeySpecParser.getLabel(moreKeySpec);
         assertEquals(message + ": label:", expectedLabel, actualLabel);
 
-        String actualOutputText = PopupCharactersParser.getOutputText(popupSpec);
+        String actualOutputText = MoreKeySpecParser.getOutputText(moreKeySpec);
         assertEquals(message + ": ouptputText:", expectedOutputText, actualOutputText);
 
-        int actualIcon = PopupCharactersParser.getIconId(popupSpec);
+        int actualIcon = MoreKeySpecParser.getIconId(moreKeySpec);
         assertEquals(message + ": icon:", expectedIcon, actualIcon);
 
-        int actualCode = PopupCharactersParser.getCode(mRes, popupSpec);
+        int actualCode = MoreKeySpecParser.getCode(mRes, moreKeySpec);
         assertEquals(message + ": codes value:", expectedCode, actualCode);
     }
 
-    private void assertParserError(String message, String popupSpec, String expectedLabel,
+    private void assertParserError(String message, String moreKeySpec, String expectedLabel,
             String expectedOutputText, int expectedIcon, int expectedCode) {
         try {
-            assertParser(message, popupSpec, expectedLabel, expectedOutputText, expectedIcon,
+            assertParser(message, moreKeySpec, expectedLabel, expectedOutputText, expectedIcon,
                     expectedCode);
             fail(message);
-        } catch (PopupCharactersParser.PopupCharactersParserError pcpe) {
+        } catch (MoreKeySpecParser.MoreKeySpecParserError pcpe) {
             // success.
         }
     }