diff --git a/java/res/values-ar/donottranslate-more-keys.xml b/java/res/values-ar/donottranslate-more-keys.xml
index e49677adb72355b42aab77587512e131c10cd042..6a14a3c55e5b82b2608e1b1dadc721d7617ec392 100644
--- a/java/res/values-ar/donottranslate-more-keys.xml
+++ b/java/res/values-ar/donottranslate-more-keys.xml
@@ -50,18 +50,18 @@
     <string name="keylabel_for_symbols_8">"Ù¨"</string>
     <string name="keylabel_for_symbols_9">"Ù©"</string>
     <string name="keylabel_for_symbols_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="additional_more_keys_for_symbols_1">1</string>
+    <string name="additional_more_keys_for_symbols_2">2</string>
+    <string name="additional_more_keys_for_symbols_3">3</string>
+    <string name="additional_more_keys_for_symbols_4">4</string>
+    <string name="additional_more_keys_for_symbols_5">5</string>
+    <string name="additional_more_keys_for_symbols_6">6</string>
+    <string name="additional_more_keys_for_symbols_7">7</string>
+    <string name="additional_more_keys_for_symbols_8">8</string>
+    <string name="additional_more_keys_for_symbols_9">9</string>
     <!-- \u066b: ARABIC DECIMAL SEPARATOR
          \u066c: ARABIC THOUSANDS SEPARATOR -->
-    <string name="more_keys_for_symbols_0">0,\u066b,\u066c</string>
+    <string name="additional_more_keys_for_symbols_0">0,\u066b,\u066c</string>
     <string name="keylabel_for_comma">\u060c</string>
     <string name="keylabel_for_f1">\u060c</string>
     <string name="keylabel_for_symbols_question">\u061f</string>
diff --git a/java/res/values-ca/donottranslate-more-keys.xml b/java/res/values-ca/donottranslate-more-keys.xml
index bd9fb7ccda71652953e78be7f34a39785da34818..512a86110662480cb84d1ffc17b868cd71a2480f 100644
--- a/java/res/values-ca/donottranslate-more-keys.xml
+++ b/java/res/values-ca/donottranslate-more-keys.xml
@@ -19,10 +19,10 @@
 -->
 <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_e">è,é,ë,ê,ę,ė,ē</string>
+    <string name="more_keys_for_i">í,ï,ì,î,į,ī</string>
+    <string name="more_keys_for_o">ò,ó,ö,ô,õ,ø,œ,ō,º</string>
+    <string name="more_keys_for_u">ú,ü,ù,û,ū</string>
     <string name="more_keys_for_n">ñ,ń</string>
     <string name="more_keys_for_c">ç,ć,č</string>
     <string name="more_keys_for_l">Å€,Å‚</string>
diff --git a/java/res/values-cs/donottranslate-more-keys.xml b/java/res/values-cs/donottranslate-more-keys.xml
index 70b3f3ee7a841c2dcc645625f09f48c8135102ce..3701adb1b77a57c32569b9f9ad4d6f7036363ca9 100644
--- a/java/res/values-cs/donottranslate-more-keys.xml
+++ b/java/res/values-cs/donottranslate-more-keys.xml
@@ -19,16 +19,16 @@
 -->
 <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_e">é,ě,è,ê,ë,ę,ė,ē</string>
+    <string name="more_keys_for_i">í,î,ï,ì,į,ī</string>
+    <string name="more_keys_for_o">ó,ö,ô,ò,õ,œ,ø,ō</string>
+    <string name="more_keys_for_u">ú,ů,û,ü,ù,ū</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>
+    <string name="more_keys_for_r">Å™</string>
+    <string name="more_keys_for_t">Å¥</string>
+    <string name="more_keys_for_z">ž,ź,ż</string>
 </resources>
diff --git a/java/res/values-da/donottranslate-more-keys.xml b/java/res/values-da/donottranslate-more-keys.xml
index bed034d40bf3683b61009afb76f0b611248b6b6c..b1c8d207207b44d386cd750fd90f09d6c626aed4 100644
--- a/java/res/values-da/donottranslate-more-keys.xml
+++ b/java/res/values-da/donottranslate-more-keys.xml
@@ -19,13 +19,13 @@
 -->
 <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_e">é,ë</string>
+    <string name="more_keys_for_i">í,ï</string>
+    <string name="more_keys_for_o">ó,ô,ò,õ,œ,ō</string>
+    <string name="more_keys_for_u">ú,ü,û,ù,ū</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_y">ý,ÿ</string>
     <string name="more_keys_for_d">ð</string>
     <string name="more_keys_for_l">Å‚</string>
     <string name="keylabel_for_scandinavia_row1_11">Ã¥</string>
diff --git a/java/res/values-de-rZZ/donottranslate-more-keys.xml b/java/res/values-de-rZZ/donottranslate-more-keys.xml
deleted file mode 100644
index e7ec5e152b820328f9da940ca63e6a273aaf6d3b..0000000000000000000000000000000000000000
--- a/java/res/values-de-rZZ/donottranslate-more-keys.xml
+++ /dev/null
@@ -1,23 +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="more_keys_for_y">6</string>
-    <string name="more_keys_for_z"></string>
-</resources>
diff --git a/java/res/values-de/donottranslate-more-keys.xml b/java/res/values-de/donottranslate-more-keys.xml
index 80aa32ae2a9822678961d716fece5bf963c98247..48462c59d8fd9092aa2d9310b5982274d7518487 100644
--- a/java/res/values-de/donottranslate-more-keys.xml
+++ b/java/res/values-de/donottranslate-more-keys.xml
@@ -19,11 +19,9 @@
 -->
 <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_o">9,ö,ô,ò,ó,õ,œ,ø,ō</string>
-    <string name="more_keys_for_u">7,ü,û,ù,ú,ū</string>
+    <string name="more_keys_for_e">Ä—</string>
+    <string name="more_keys_for_o">ö,ô,ò,ó,õ,œ,ø,ō</string>
+    <string name="more_keys_for_u">ü,û,ù,ú,ū</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-more-keys.xml b/java/res/values-en/donottranslate-more-keys.xml
index bc26c6aa0c01e6d8601fa46d2e0eb35d6f89437f..9073d3b4f489a7c11ac4d487c23820b2947e6580 100644
--- a/java/res/values-en/donottranslate-more-keys.xml
+++ b/java/res/values-en/donottranslate-more-keys.xml
@@ -19,11 +19,11 @@
 -->
 <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_e">è,é,ê,ë,ē</string>
+    <string name="more_keys_for_i">î,ï,í,ī,ì</string>
+    <string name="more_keys_for_o">ô,ö,ò,ó,œ,ø,ō,õ</string>
     <string name="more_keys_for_s">ß</string>
-    <string name="more_keys_for_u">7,û,ü,ù,ú,ū</string>
+    <string name="more_keys_for_u">û,ü,ù,ú,ū</string>
     <string name="more_keys_for_n">ñ</string>
     <string name="more_keys_for_c">ç</string>
 </resources>
diff --git a/java/res/values-es/donottranslate-more-keys.xml b/java/res/values-es/donottranslate-more-keys.xml
index d5a8ed19d7807f944db9e6e5d5829d062e4f0dbf..429273647303b35c3a7580cc41de745f474d3988 100644
--- a/java/res/values-es/donottranslate-more-keys.xml
+++ b/java/res/values-es/donottranslate-more-keys.xml
@@ -19,10 +19,10 @@
 -->
 <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_e">é,è,ë,ê,ę,ė,ē</string>
+    <string name="more_keys_for_i">í,ï,ì,î,į,ī</string>
+    <string name="more_keys_for_o">ó,ò,ö,ô,õ,ø,œ,ō,º</string>
+    <string name="more_keys_for_u">ú,ü,ù,û,ū</string>
     <string name="more_keys_for_n">ñ,ń</string>
     <string name="more_keys_for_c">ç,ć,č</string>
     <string name="more_keys_for_punctuation">"\\,,\?,!,¿,¡,:,-,\',\",),(,/,;,+,&amp;,\@"</string>
diff --git a/java/res/values-et/donottranslate-more-keys.xml b/java/res/values-et/donottranslate-more-keys.xml
index 1011347cd537f9c7db4577c9e77cc69f10371391..bda22fcec6daa2876c83080079106a057e8593f7 100644
--- a/java/res/values-et/donottranslate-more-keys.xml
+++ b/java/res/values-et/donottranslate-more-keys.xml
@@ -19,17 +19,17 @@
 -->
 <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_e">ē,è,ė,é,ê,ë,ę,ě</string>
+    <string name="more_keys_for_i">ī,ì,į,í,î,ï,ı</string>
+    <string name="more_keys_for_o">ö,õ,ò,ó,ô,œ,ő,ø</string>
+    <string name="more_keys_for_u">ü,ū,ų,ù,ú,û,ů,ű</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_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_r">Å—,Å™,Å•</string>
+    <string name="more_keys_for_t">Å£,Å¥</string>
     <string name="more_keys_for_z">ž,ż,ź</string>
     <string name="more_keys_for_k">Ä·</string>
     <string name="more_keys_for_l">ļ,ł,ĺ,ľ</string>
diff --git a/java/res/values-fi/donottranslate-more-keys.xml b/java/res/values-fi/donottranslate-more-keys.xml
index e1dfa2bcf6579db543dd8de5641c799b552fe056..b922fe21d91d22fa9c3904f0e67cd967a7734b8f 100644
--- a/java/res/values-fi/donottranslate-more-keys.xml
+++ b/java/res/values-fi/donottranslate-more-keys.xml
@@ -19,8 +19,8 @@
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <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_o">ø,ô,ò,ó,õ,œ,ō</string>
+    <string name="more_keys_for_u">ü</string>
     <string name="more_keys_for_s">š,ß,ś</string>
     <string name="more_keys_for_z">ž,ź,ż</string>
     <string name="keylabel_for_scandinavia_row1_11">Ã¥</string>
diff --git a/java/res/values-fr-rCA/donottranslate-more-keys.xml b/java/res/values-fr-rCA/donottranslate-more-keys.xml
deleted file mode 100644
index 80e9d93460cd61f539bd9e6f783352f200a964d2..0000000000000000000000000000000000000000
--- a/java/res/values-fr-rCA/donottranslate-more-keys.xml
+++ /dev/null
@@ -1,25 +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="more_keys_for_a">à,â,æ,á,ä,ã,å,ā,ª</string>
-    <string name="more_keys_for_q">1</string>
-    <string name="more_keys_for_w">2</string>
-    <string name="more_keys_for_z"></string>
-</resources>
diff --git a/java/res/values-fr-rCH/donottranslate-more-keys.xml b/java/res/values-fr-rCH/donottranslate-more-keys.xml
deleted file mode 100644
index 561c5e52f10aca0b63098badc03c304a5683600a..0000000000000000000000000000000000000000
--- a/java/res/values-fr-rCH/donottranslate-more-keys.xml
+++ /dev/null
@@ -1,26 +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="more_keys_for_a">à,â,æ,á,ä,ã,å,ā,ª</string>
-    <string name="more_keys_for_y">ÿ</string>
-    <string name="more_keys_for_q">1</string>
-    <string name="more_keys_for_w">2</string>
-    <string name="more_keys_for_z">6</string>
-</resources>
diff --git a/java/res/values-fr/donottranslate-more-keys.xml b/java/res/values-fr/donottranslate-more-keys.xml
index cd6d49bada0600d897a3ae08c636799a71f0b97d..0f78e7cd99e0cc081b61c501efbdc4cf717c0538 100644
--- a/java/res/values-fr/donottranslate-more-keys.xml
+++ b/java/res/values-fr/donottranslate-more-keys.xml
@@ -18,14 +18,11 @@
 */
 -->
 <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_a">à,â,%,æ,á,ä,ã,å,ā,ª</string>
+    <string name="more_keys_for_e">é,è,ê,ë,%,ę,ė,ē</string>
+    <string name="more_keys_for_i">î,%,ï,ì,í,į,ī</string>
+    <string name="more_keys_for_o">ô,œ,%,ö,ò,ó,õ,ø,ō,º</string>
+    <string name="more_keys_for_u">ù,û,%,ü,ú,ū</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>
+    <string name="more_keys_for_y">%,ÿ</string>
 </resources>
diff --git a/java/res/values-hr/donottranslate-more-keys.xml b/java/res/values-hr/donottranslate-more-keys.xml
index c34e0e6466ec09c1c8369bfe1cab8c4d031f1e34..112c444c308c1a6e384f81ef609cb54633293512 100644
--- a/java/res/values-hr/donottranslate-more-keys.xml
+++ b/java/res/values-hr/donottranslate-more-keys.xml
@@ -21,7 +21,7 @@
     <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_z">ž,ź,ż</string>
     <string name="more_keys_for_c">č,ć,ç</string>
     <string name="more_keys_for_d">Ä‘</string>
 </resources>
diff --git a/java/res/values-hu/donottranslate-more-keys.xml b/java/res/values-hu/donottranslate-more-keys.xml
index 42b330199e08346dcde9b521c3bf52e0b5623a39..cc23dff48b7ed83cf49105a644e83edab02c5914 100644
--- a/java/res/values-hu/donottranslate-more-keys.xml
+++ b/java/res/values-hu/donottranslate-more-keys.xml
@@ -19,10 +19,8 @@
 -->
 <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_y"></string>
-    <string name="more_keys_for_z">6</string>
+    <string name="more_keys_for_e">é,è,ê,ë,ę,ė,ē</string>
+    <string name="more_keys_for_i">í,î,ï,ì,į,ī</string>
+    <string name="more_keys_for_o">ó,ö,ő,ô,ò,õ,œ,ø,ō</string>
+    <string name="more_keys_for_u">ú,ü,ű,û,ù,ū</string>
 </resources>
diff --git a/java/res/values-it/donottranslate-more-keys.xml b/java/res/values-it/donottranslate-more-keys.xml
index fa1537becf0d5c570e77d7cb9ff57b494915dc1c..69659a389350872ddffe49d25f1f4fe5adb5e964 100644
--- a/java/res/values-it/donottranslate-more-keys.xml
+++ b/java/res/values-it/donottranslate-more-keys.xml
@@ -19,8 +19,8 @@
 -->
 <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_e">è,é,ê,ë,ę,ė,ē</string>
+    <string name="more_keys_for_i">ì,í,î,ï,į,ī</string>
+    <string name="more_keys_for_o">ò,ó,ô,ö,õ,œ,ø,ō,º</string>
+    <string name="more_keys_for_u">ù,ú,û,ü,ū</string>
 </resources>
diff --git a/java/res/values-ky/donottranslate-more-keys.xml b/java/res/values-ky/donottranslate-more-keys.xml
index d56cde57711e23ff4af1e34ca2999d743c9833a8..44720aa7f529bdebd604bb7de6a45af0ce73dc76 100644
--- a/java/res/values-ky/donottranslate-more-keys.xml
+++ b/java/res/values-ky/donottranslate-more-keys.xml
@@ -18,7 +18,7 @@
 */
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="more_keys_for_slavic_u">3,Ò¯</string>
-    <string name="more_keys_for_slavic_en">6,Ò£</string>
+    <string name="more_keys_for_slavic_u">Ò¯</string>
+    <string name="more_keys_for_slavic_en">Ò£</string>
     <string name="more_keys_for_slavic_o">Ó©</string>
 </resources>
diff --git a/java/res/values-lt/donottranslate-more-keys.xml b/java/res/values-lt/donottranslate-more-keys.xml
index e36ce6a66ecfa5a37ce35311a2d5b9a18a5d2157..fc6c84b2df2715c5f4b88c0825a8b8e10a5ee0d2 100644
--- a/java/res/values-lt/donottranslate-more-keys.xml
+++ b/java/res/values-lt/donottranslate-more-keys.xml
@@ -19,17 +19,17 @@
 -->
 <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_e">ė,ę,ē,è,é,ê,ë,ě</string>
+    <string name="more_keys_for_i">į,ī,ì,í,î,ï,ı</string>
+    <string name="more_keys_for_o">ö,õ,ò,ó,ô,œ,ő,ø</string>
+    <string name="more_keys_for_u">ū,ų,ü,ū,ù,ú,û,ů,ű</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_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_r">Å—,Å™,Å•</string>
+    <string name="more_keys_for_t">Å£,Å¥</string>
     <string name="more_keys_for_z">ž,ż,ź</string>
     <string name="more_keys_for_k">Ä·</string>
     <string name="more_keys_for_l">ļ,ł,ĺ,ľ</string>
diff --git a/java/res/values-lv/donottranslate-more-keys.xml b/java/res/values-lv/donottranslate-more-keys.xml
index 8514e738d23e9f4360e3ab606ae355a24018bc8c..3b937dfe3de0ca1c0f4f04de257077713df3aa63 100644
--- a/java/res/values-lv/donottranslate-more-keys.xml
+++ b/java/res/values-lv/donottranslate-more-keys.xml
@@ -19,17 +19,17 @@
 -->
 <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_e">ē,ė,è,é,ê,ë,ę,ě</string>
+    <string name="more_keys_for_i">ī,į,ì,í,î,ï,ı</string>
+    <string name="more_keys_for_o">ò,ó,ô,õ,ö,œ,ő,ø</string>
+    <string name="more_keys_for_u">ū,ų,ù,ú,û,ü,ů,ű</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_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_r">Å—,Å™,Å•</string>
+    <string name="more_keys_for_t">Å£,Å¥</string>
     <string name="more_keys_for_z">ž,ż,ź</string>
     <string name="more_keys_for_k">Ä·</string>
     <string name="more_keys_for_l">ļ,ł,ĺ,ľ</string>
diff --git a/java/res/values-nb/donottranslate-more-keys.xml b/java/res/values-nb/donottranslate-more-keys.xml
index e83d6b76884d3b20d99f70d261949396be1cfc94..cf6e4d1ce35b959bdd1e55ff762bdf65da956f84 100644
--- a/java/res/values-nb/donottranslate-more-keys.xml
+++ b/java/res/values-nb/donottranslate-more-keys.xml
@@ -19,9 +19,9 @@
 -->
 <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_o">9,ô,ò,ó,ö,õ,œ,ō</string>
-    <string name="more_keys_for_u">7,ü,û,ù,ú,ū</string>
+    <string name="more_keys_for_e">é,è,ê,ë,ę,ė,ē</string>
+    <string name="more_keys_for_o">ô,ò,ó,ö,õ,œ,ō</string>
+    <string name="more_keys_for_u">ü,û,ù,ú,ū</string>
     <string name="keylabel_for_scandinavia_row1_11">Ã¥</string>
     <string name="keylabel_for_scandinavia_row2_10">ø</string>
     <string name="keylabel_for_scandinavia_row2_11">æ</string>
diff --git a/java/res/values-nl/donottranslate-more-keys.xml b/java/res/values-nl/donottranslate-more-keys.xml
index 49cc41964254d8040eb86b584074ca581dc2050e..ac03872f33f5cdd9031c32b6f382720b0e17183a 100644
--- a/java/res/values-nl/donottranslate-more-keys.xml
+++ b/java/res/values-nl/donottranslate-more-keys.xml
@@ -19,9 +19,9 @@
 -->
 <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_e">é,ë,ê,è,ę,ė,ē</string>
+    <string name="more_keys_for_i">í,ï,ì,î,į,ī</string>
+    <string name="more_keys_for_o">ó,ö,ô,ò,õ,œ,ø,ō</string>
+    <string name="more_keys_for_u">ú,ü,û,ù,ū</string>
     <string name="more_keys_for_n">ñ,ń</string>
 </resources>
diff --git a/java/res/values-pl/donottranslate-more-keys.xml b/java/res/values-pl/donottranslate-more-keys.xml
index 18e1499917e5208d0fa126aac1b4b1a251402231..84e74e8496ee9a5e04a5094524d25e6160ca3403 100644
--- a/java/res/values-pl/donottranslate-more-keys.xml
+++ b/java/res/values-pl/donottranslate-more-keys.xml
@@ -19,8 +19,8 @@
 -->
 <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_o">9,ó,ö,ô,ò,õ,œ,ø,ō</string>
+    <string name="more_keys_for_e">ę,è,é,ê,ë,ė,ē</string>
+    <string name="more_keys_for_o">ó,ö,ô,ò,õ,œ,ø,ō</string>
     <string name="more_keys_for_s">ś,ß,š</string>
     <string name="more_keys_for_n">ń,ñ</string>
     <string name="more_keys_for_c">ć,ç,č</string>
diff --git a/java/res/values-pt/donottranslate-more-keys.xml b/java/res/values-pt/donottranslate-more-keys.xml
index 31d9417ab6d127f5eaf4b5a491e990af652173ef..868fe7824f0e2d1a3627e838680368fac786f0e4 100644
--- a/java/res/values-pt/donottranslate-more-keys.xml
+++ b/java/res/values-pt/donottranslate-more-keys.xml
@@ -19,9 +19,9 @@
 -->
 <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_e">é,ê,è,ę,ė,ē,ë</string>
+    <string name="more_keys_for_i">í,î,ì,ï,į,ī</string>
+    <string name="more_keys_for_o">ó,õ,ô,ò,ö,œ,ø,ō,º</string>
+    <string name="more_keys_for_u">ú,ü,ù,û,ū</string>
     <string name="more_keys_for_c">ç,č,ć</string>
 </resources>
diff --git a/java/res/values-rm/donottranslate-more-keys.xml b/java/res/values-rm/donottranslate-more-keys.xml
index ea9a559447b325576727e4280d9b860d8458148c..c40c29b13e2d319506c85534eab2ae3060d251c5 100644
--- a/java/res/values-rm/donottranslate-more-keys.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="more_keys_for_o">9,ò,ó,ö,ô,õ,œ,ø</string>
+    <string name="more_keys_for_o">ò,ó,ö,ô,õ,œ,ø</string>
 </resources>
diff --git a/java/res/values-ro/donottranslate-more-keys.xml b/java/res/values-ro/donottranslate-more-keys.xml
index 51df56099595a9a4f833c7e26e18e93416bae56a..42fd913363632d0f1155eb36d9e89fa446e514a5 100644
--- a/java/res/values-ro/donottranslate-more-keys.xml
+++ b/java/res/values-ro/donottranslate-more-keys.xml
@@ -19,7 +19,7 @@
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="more_keys_for_a">â,ã,ă,à,á,ä,æ,å,ā</string>
-    <string name="more_keys_for_i">8,î,ï,ì,í,į,ī</string>
+    <string name="more_keys_for_i">î,ï,ì,í,į,ī</string>
     <string name="more_keys_for_s">ș,ß,ś,š</string>
-    <string name="more_keys_for_t">5,È›</string>
+    <string name="more_keys_for_t">È›</string>
 </resources>
diff --git a/java/res/values-ru/donottranslate-more-keys.xml b/java/res/values-ru/donottranslate-more-keys.xml
index 7ae9ffbdace9756f3d37e84d09ee8c95e0aee6c0..b7e74660db42ce14a97fe2bef102930acd635c2f 100644
--- a/java/res/values-ru/donottranslate-more-keys.xml
+++ b/java/res/values-ru/donottranslate-more-keys.xml
@@ -18,5 +18,5 @@
 */
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="more_keys_for_slavic_ye">5,Ñ‘</string>
+    <string name="more_keys_for_slavic_ye">Ñ‘</string>
 </resources>
diff --git a/java/res/values-sk/donottranslate-more-keys.xml b/java/res/values-sk/donottranslate-more-keys.xml
index b6b35c1a3715afbbd66385b8bcf944964d22d671..574eedb1f30c2f4a3308b8741deea162fda15708 100644
--- a/java/res/values-sk/donottranslate-more-keys.xml
+++ b/java/res/values-sk/donottranslate-more-keys.xml
@@ -19,17 +19,17 @@
 -->
 <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_e">é,ě,ē,ė,è,ê,ë,ę</string>
+    <string name="more_keys_for_i">í,ī,į,ì,î,ï,ı</string>
+    <string name="more_keys_for_o">ô,ó,ö,ò,õ,œ,ő,ø</string>
+    <string name="more_keys_for_u">ú,ů,ü,ū,ų,ù,û,ű</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_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_r">Å•,Å™,Å—</string>
+    <string name="more_keys_for_t">Å¥,Å£</string>
     <string name="more_keys_for_z">ž,ż,ź</string>
     <string name="more_keys_for_k">Ä·</string>
     <string name="more_keys_for_l">ľ,ĺ,ļ,ł</string>
diff --git a/java/res/values-sv/donottranslate-more-keys.xml b/java/res/values-sv/donottranslate-more-keys.xml
index d391be5ab5ce27c2d69f9b588b29f8d33264489f..6d9800e57c7e1bcaa87c3767bae65078abe6a5eb 100644
--- a/java/res/values-sv/donottranslate-more-keys.xml
+++ b/java/res/values-sv/donottranslate-more-keys.xml
@@ -18,9 +18,9 @@
 */
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <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_e">é,è,ê,ë,ę</string>
+    <string name="more_keys_for_o">œ,ô,ò,ó,õ,ō</string>
+    <string name="more_keys_for_u">ü,û,ù,ú,ū</string>
     <string name="more_keys_for_s">ß,ś,š</string>
     <string name="keylabel_for_scandinavia_row1_11">Ã¥</string>
     <string name="keylabel_for_scandinavia_row2_10">ö</string>
diff --git a/java/res/values-sw600dp/config.xml b/java/res/values-sw600dp/config.xml
index 35da3009f9883548d34fffed16fe0fcd25947e4d..40c674190d2f9eb33f952d67fa5c60b774c77908 100644
--- a/java/res/values-sw600dp/config.xml
+++ b/java/res/values-sw600dp/config.xml
@@ -24,7 +24,6 @@
     <bool name="config_enable_show_voice_key_option">false</bool>
     <bool name="config_enable_show_popup_on_keypress_option">false</bool>
     <bool name="config_enable_bigram_suggestions_option">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>
diff --git a/java/res/values-sw768dp/config.xml b/java/res/values-sw768dp/config.xml
index ddeadaf0f0f5b1abbfa6a249c9bea3430f817053..98d722aba97b376c1eb42cbe381cf9948cd08e40 100644
--- a/java/res/values-sw768dp/config.xml
+++ b/java/res/values-sw768dp/config.xml
@@ -24,7 +24,6 @@
     <bool name="config_enable_show_voice_key_option">false</bool>
     <bool name="config_enable_show_popup_on_keypress_option">false</bool>
     <bool name="config_enable_bigram_suggestions_option">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>
diff --git a/java/res/values-tr/donottranslate-more-keys.xml b/java/res/values-tr/donottranslate-more-keys.xml
index 6906b358015c0851e5da28a601f2246a8b398139..227ebf98c95dea62312beb4e5487db80e29c68c3 100644
--- a/java/res/values-tr/donottranslate-more-keys.xml
+++ b/java/res/values-tr/donottranslate-more-keys.xml
@@ -19,9 +19,9 @@
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <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_i">ı,î,ï,ì,í,į,ī</string>
+    <string name="more_keys_for_o">ö,ô,œ,ò,ó,õ,ø,ō</string>
+    <string name="more_keys_for_u">ü,û,ù,ú,ū</string>
     <string name="more_keys_for_s">ş,ß,ś,š</string>
     <string name="more_keys_for_g">ÄŸ</string>
     <string name="more_keys_for_c">ç,ć,č</string>
diff --git a/java/res/values-vi/donottranslate-more-keys.xml b/java/res/values-vi/donottranslate-more-keys.xml
index 97a7d79aeccff710de64ab657644d38b41dee958..9e2f6b8fde5b69abb4e5e4f45705e536334aea9b 100644
--- a/java/res/values-vi/donottranslate-more-keys.xml
+++ b/java/res/values-vi/donottranslate-more-keys.xml
@@ -19,10 +19,10 @@
 -->
 <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_y">6,ỳ,ý,ỷ,ỹ,ỵ</string>
+    <string name="more_keys_for_e">è,é,ẻ,ẽ,ẹ,ê,ề,ế,ể,ễ,ệ</string>
+    <string name="more_keys_for_i">ì,í,ỉ,ĩ,ị</string>
+    <string name="more_keys_for_o">ò,ó,ỏ,õ,ọ,ô,ồ,ố,ổ,ỗ,ộ,ơ,ờ,ớ,ở,ỡ,ợ</string>
+    <string name="more_keys_for_u">ù,ú,ủ,ũ,ụ,ư,ừ,ứ,ử,ữ,ự</string>
+    <string name="more_keys_for_y">ỳ,ý,ỷ,ỹ,ỵ</string>
     <string name="more_keys_for_d">Ä‘</string>
 </resources>
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index bd7c550c1711841551e05722ef394224ddf3693c..8d00f7aa5e48fd03bdc50b126f2a04444b5f4315 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -227,6 +227,12 @@
         <attr name="altCode" format="integer" />
         <!-- The keys to display in the more keys keyboard. -->
         <attr name="moreKeys" format="string" />
+        <!-- The keys to display in the more keys keyboard in addition to moreKeys.
+             The additional more keys are inserted at the '%' markers in the moreKeys if any.
+             They are inserted at the head of moreKeys if none.
+             If there are remaining entries of additionalMoreKeys even after all '%' markers have
+             been replaced, those remaining entries are appended at the end of moreKeys. -->
+        <attr name="additionalMoreKeys" format="string" />
         <!-- Maximum column of more keys keyboard -->
         <attr name="maxMoreKeysColumn" format="integer" />
         <attr name="backgroundType" format="enum">
diff --git a/java/res/values/config.xml b/java/res/values/config.xml
index 32041df7450d6d53c3a3532f7b6f9a72b66bf4a6..c3f8edf8aea8ca8cede83d72017781f8c408b001 100644
--- a/java/res/values/config.xml
+++ b/java/res/values/config.xml
@@ -27,7 +27,6 @@
     <bool name="config_enable_bigram_suggestions_option">true</bool>
     <!-- TODO: Disable the following configuration for production. -->
     <bool name="config_enable_usability_study_mode_option">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 suggestions for a word should we weigh
diff --git a/java/res/values/donottranslate-more-keys.xml b/java/res/values/donottranslate-more-keys.xml
index ce1538131a852b0d60ea0eddf07f82b88cc11b32..07f4bf38b22f81580cbbfac9b919662155073795 100644
--- a/java/res/values/donottranslate-more-keys.xml
+++ b/java/res/values/donottranslate-more-keys.xml
@@ -19,24 +19,21 @@
 -->
 <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_e"></string>
+    <string name="more_keys_for_i"></string>
+    <string name="more_keys_for_o"></string>
+    <string name="more_keys_for_u"></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_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_r"></string>
+    <string name="more_keys_for_t"></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_row1_11"></string>
     <string name="keylabel_for_scandinavia_row2_10"></string>
@@ -46,9 +43,9 @@
     <string name="keylabel_for_slavic_shcha">щ</string>
     <string name="keylabel_for_slavic_yery">Ñ‹</string>
     <string name="keylabel_for_slavic_i">и</string>
-    <string name="more_keys_for_slavic_u">3</string>
-    <string name="more_keys_for_slavic_ye">5</string>
-    <string name="more_keys_for_slavic_en">6</string>
+    <string name="more_keys_for_slavic_u"></string>
+    <string name="more_keys_for_slavic_ye"></string>
+    <string name="more_keys_for_slavic_en"></string>
     <string name="more_keys_for_slavic_ha">ÑŠ</string>
     <string name="more_keys_for_slavic_yery"></string>
     <string name="more_keys_for_slavic_o"></string>
@@ -74,6 +71,16 @@
     <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="additional_more_keys_for_symbols_1"></string>
+    <string name="additional_more_keys_for_symbols_2"></string>
+    <string name="additional_more_keys_for_symbols_3"></string>
+    <string name="additional_more_keys_for_symbols_4"></string>
+    <string name="additional_more_keys_for_symbols_5"></string>
+    <string name="additional_more_keys_for_symbols_6"></string>
+    <string name="additional_more_keys_for_symbols_7"></string>
+    <string name="additional_more_keys_for_symbols_8"></string>
+    <string name="additional_more_keys_for_symbols_9"></string>
+    <string name="additional_more_keys_for_symbols_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>
diff --git a/java/res/xml-sw600dp/row_qwerty1.xml b/java/res/xml-sw600dp/row_qwerty1.xml
index 07d8e2296765ce6cb3426da3dbfa5577137d3570..3d3a1a8ff264573e7e6ad102152a5342212e91a9 100644
--- a/java/res/xml-sw600dp/row_qwerty1.xml
+++ b/java/res/xml-sw600dp/row_qwerty1.xml
@@ -25,11 +25,9 @@
         latin:keyWidth="9.0%p"
     >
         <Key
-            latin:keyLabel="q"
-            latin:moreKeys="@string/more_keys_for_q" />
+            latin:keyLabel="q" />
         <Key
-            latin:keyLabel="w"
-            latin:moreKeys="@string/more_keys_for_w" />
+            latin:keyLabel="w" />
         <Key
             latin:keyLabel="e"
             latin:moreKeys="@string/more_keys_for_e" />
@@ -52,8 +50,7 @@
             latin:keyLabel="o"
             latin:moreKeys="@string/more_keys_for_o" />
         <Key
-            latin:keyLabel="p"
-            latin:moreKeys="@string/more_keys_for_p" />
+            latin:keyLabel="p" />
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-10.0%p"
diff --git a/java/res/xml-sw600dp/rows_azerty.xml b/java/res/xml-sw600dp/rows_azerty.xml
index c9a9dab06596c694a54c5cceebfac190c2438fb8..c29d291ea2cc4d7e11aa423f5a7c938558081697 100644
--- a/java/res/xml-sw600dp/rows_azerty.xml
+++ b/java/res/xml-sw600dp/rows_azerty.xml
@@ -54,8 +54,7 @@
             latin:keyLabel="o"
             latin:moreKeys="@string/more_keys_for_o" />
         <Key
-            latin:keyLabel="p"
-            latin:moreKeys="@string/more_keys_for_p" />
+            latin:keyLabel="p" />
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-10.0%p"
@@ -66,7 +65,6 @@
     >
         <Key
             latin:keyLabel="q"
-            latin:moreKeys="@string/more_keys_for_q"
             latin:keyXPos="5.0%p" />
         <Key
             latin:keyLabel="s"
@@ -103,8 +101,7 @@
             latin:keyStyle="shiftKeyStyle"
             latin:keyWidth="10.0%p" />
         <Key
-            latin:keyLabel="w"
-            latin:moreKeys="@string/more_keys_for_w" />
+            latin:keyLabel="w" />
         <Key
             latin:keyLabel="x" />
         <Key
diff --git a/java/res/xml-sw600dp/rows_qwertz.xml b/java/res/xml-sw600dp/rows_qwertz.xml
index fe93a705e2344695336c6af5fff99ebd7062e118..6912f1c6d443a41523aaedd078ba738883a5d81e 100644
--- a/java/res/xml-sw600dp/rows_qwertz.xml
+++ b/java/res/xml-sw600dp/rows_qwertz.xml
@@ -27,11 +27,9 @@
         latin:keyWidth="9.0%p"
     >
         <Key
-            latin:keyLabel="q"
-            latin:moreKeys="@string/more_keys_for_q" />
+            latin:keyLabel="q" />
         <Key
-            latin:keyLabel="w"
-            latin:moreKeys="@string/more_keys_for_w" />
+            latin:keyLabel="w" />
         <Key
             latin:keyLabel="e"
             latin:moreKeys="@string/more_keys_for_e" />
@@ -54,8 +52,7 @@
             latin:keyLabel="o"
             latin:moreKeys="@string/more_keys_for_o" />
         <Key
-            latin:keyLabel="p"
-            latin:moreKeys="@string/more_keys_for_p" />
+            latin:keyLabel="p" />
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-10.0%p"
diff --git a/java/res/xml-sw600dp/rows_scandinavian.xml b/java/res/xml-sw600dp/rows_scandinavian.xml
index f334f8b5e6cf9235df7d7258940c980595124347..5ecb7d24281c33f5debc99e7ab78fe1556d925f6 100644
--- a/java/res/xml-sw600dp/rows_scandinavian.xml
+++ b/java/res/xml-sw600dp/rows_scandinavian.xml
@@ -27,11 +27,9 @@
         latin:keyWidth="7.9%p"
     >
         <Key
-            latin:keyLabel="q"
-            latin:moreKeys="@string/more_keys_for_q" />
+            latin:keyLabel="q" />
         <Key
-            latin:keyLabel="w"
-            latin:moreKeys="@string/more_keys_for_w" />
+            latin:keyLabel="w" />
         <Key
             latin:keyLabel="e"
             latin:moreKeys="@string/more_keys_for_e" />
@@ -54,8 +52,7 @@
             latin:keyLabel="o"
             latin:moreKeys="@string/more_keys_for_o" />
         <Key
-            latin:keyLabel="p"
-            latin:moreKeys="@string/more_keys_for_p" />
+            latin:keyLabel="p" />
         <Key
             latin:keyLabel="@string/keylabel_for_scandinavia_row1_11" />
         <Key
diff --git a/java/res/xml-sw600dp/rows_symbols.xml b/java/res/xml-sw600dp/rows_symbols.xml
index e345a23f7c215a9104b88af80995c82d5a40a913..701c35470f0bc4a7107be5547ccea6eebd983d50 100644
--- a/java/res/xml-sw600dp/rows_symbols.xml
+++ b/java/res/xml-sw600dp/rows_symbols.xml
@@ -30,33 +30,43 @@
     >
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_1"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_1"
             latin:moreKeys="@string/more_keys_for_symbols_1" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_2"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_2"
             latin:moreKeys="@string/more_keys_for_symbols_2" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_3"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_3"
             latin:moreKeys="@string/more_keys_for_symbols_3" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_4"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_4"
             latin:moreKeys="@string/more_keys_for_symbols_4" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_5"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_5"
             latin:moreKeys="@string/more_keys_for_symbols_5" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_6"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_6"
             latin:moreKeys="@string/more_keys_for_symbols_6" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_7"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_7"
             latin:moreKeys="@string/more_keys_for_symbols_7" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_8"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_8"
             latin:moreKeys="@string/more_keys_for_symbols_8" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_9"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_9"
             latin:moreKeys="@string/more_keys_for_symbols_9" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_0"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_0"
             latin:moreKeys="@string/more_keys_for_symbols_0" />
         <Key
             latin:keyStyle="deleteKeyStyle"
diff --git a/java/res/xml-sw768dp/row_qwerty1.xml b/java/res/xml-sw768dp/row_qwerty1.xml
index de91013319b461467bd0323eca7b7fbd3d010fd7..f6600ad032c50edba94dced617df90f7c03bf7bf 100644
--- a/java/res/xml-sw768dp/row_qwerty1.xml
+++ b/java/res/xml-sw768dp/row_qwerty1.xml
@@ -29,11 +29,9 @@
             latin:keyLabelFlags="alignLeft"
             latin:keyWidth="7.969%p" />
         <Key
-            latin:keyLabel="q"
-            latin:moreKeys="@string/more_keys_for_q" />
+            latin:keyLabel="q" />
         <Key
-            latin:keyLabel="w"
-            latin:moreKeys="@string/more_keys_for_w" />
+            latin:keyLabel="w" />
         <Key
             latin:keyLabel="e"
             latin:moreKeys="@string/more_keys_for_e" />
@@ -56,8 +54,7 @@
             latin:keyLabel="o"
             latin:moreKeys="@string/more_keys_for_o" />
         <Key
-            latin:keyLabel="p"
-            latin:moreKeys="@string/more_keys_for_p" />
+            latin:keyLabel="p" />
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-9.219%p"
diff --git a/java/res/xml-sw768dp/rows_azerty.xml b/java/res/xml-sw768dp/rows_azerty.xml
index c97ac408945d4920206ad9d8e4b9f6ab6b3a67cd..066778c87bff9c62b95011c29e79ea56de049f18 100644
--- a/java/res/xml-sw768dp/rows_azerty.xml
+++ b/java/res/xml-sw768dp/rows_azerty.xml
@@ -58,8 +58,7 @@
             latin:keyLabel="o"
             latin:moreKeys="@string/more_keys_for_o" />
         <Key
-            latin:keyLabel="p"
-            latin:moreKeys="@string/more_keys_for_p" />
+            latin:keyLabel="p" />
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-9.219%p"
@@ -73,8 +72,7 @@
             latin:keyLabelFlags="alignLeft"
             latin:keyWidth="10.167%p" />
         <Key
-            latin:keyLabel="q"
-            latin:moreKeys="@string/more_keys_for_q" />
+            latin:keyLabel="q" />
         <Key
             latin:keyLabel="s"
             latin:moreKeys="@string/more_keys_for_s" />
@@ -110,8 +108,7 @@
             latin:keyStyle="shiftKeyStyle"
             latin:keyWidth="13.829%p" />
         <Key
-            latin:keyLabel="w"
-            latin:moreKeys="@string/more_keys_for_w" />
+            latin:keyLabel="w" />
         <Key
             latin:keyLabel="x" />
         <Key
diff --git a/java/res/xml-sw768dp/rows_qwertz.xml b/java/res/xml-sw768dp/rows_qwertz.xml
index 05a2a9c035e7d1ff1a9f9dbab2eb08cacada43a6..7056a94ea73e05d67314281473a391ef8afac180 100644
--- a/java/res/xml-sw768dp/rows_qwertz.xml
+++ b/java/res/xml-sw768dp/rows_qwertz.xml
@@ -31,11 +31,9 @@
             latin:keyLabelFlags="alignLeft"
             latin:keyWidth="7.969%p" />
         <Key
-            latin:keyLabel="q"
-            latin:moreKeys="@string/more_keys_for_q" />
+            latin:keyLabel="q" />
         <Key
-            latin:keyLabel="w"
-            latin:moreKeys="@string/more_keys_for_w" />
+            latin:keyLabel="w" />
         <Key
             latin:keyLabel="e"
             latin:moreKeys="@string/more_keys_for_e" />
@@ -58,8 +56,7 @@
             latin:keyLabel="o"
             latin:moreKeys="@string/more_keys_for_o" />
         <Key
-            latin:keyLabel="p"
-            latin:moreKeys="@string/more_keys_for_p" />
+            latin:keyLabel="p" />
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyXPos="-9.219%p"
diff --git a/java/res/xml-sw768dp/rows_scandinavian.xml b/java/res/xml-sw768dp/rows_scandinavian.xml
index 373617bfc487ece2d564e2a2d426e0e98da36faa..9e5ad148fb6f8d417f4a20f56cb13b579e9dab15 100644
--- a/java/res/xml-sw768dp/rows_scandinavian.xml
+++ b/java/res/xml-sw768dp/rows_scandinavian.xml
@@ -31,11 +31,9 @@
             latin:keyLabelFlags="alignLeft"
             latin:keyWidth="7.500%p" />
         <Key
-            latin:keyLabel="q"
-            latin:moreKeys="@string/more_keys_for_q" />
+            latin:keyLabel="q" />
         <Key
-            latin:keyLabel="w"
-            latin:moreKeys="@string/more_keys_for_w" />
+            latin:keyLabel="w" />
         <Key
             latin:keyLabel="e"
             latin:moreKeys="@string/more_keys_for_e" />
@@ -58,8 +56,7 @@
             latin:keyLabel="o"
             latin:moreKeys="@string/more_keys_for_o" />
         <Key
-            latin:keyLabel="p"
-            latin:moreKeys="@string/more_keys_for_p" />
+            latin:keyLabel="p" />
         <Key
             latin:keyLabel="@string/keylabel_for_scandinavia_row1_11" />
         <Key
diff --git a/java/res/xml-sw768dp/rows_symbols.xml b/java/res/xml-sw768dp/rows_symbols.xml
index 820e5f7d2283698493d8802f232d87cf2ebfa04b..7458b366a158996ca09c3a0414deae569c8d46d6 100644
--- a/java/res/xml-sw768dp/rows_symbols.xml
+++ b/java/res/xml-sw768dp/rows_symbols.xml
@@ -34,33 +34,43 @@
             latin:keyWidth="7.969%p" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_1"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_1"
             latin:moreKeys="@string/more_keys_for_symbols_1" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_2"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_2"
             latin:moreKeys="@string/more_keys_for_symbols_2" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_3"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_3"
             latin:moreKeys="@string/more_keys_for_symbols_3" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_4"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_4"
             latin:moreKeys="@string/more_keys_for_symbols_4" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_5"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_5"
             latin:moreKeys="@string/more_keys_for_symbols_5" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_6"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_6"
             latin:moreKeys="@string/more_keys_for_symbols_6" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_7"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_7"
             latin:moreKeys="@string/more_keys_for_symbols_7" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_8"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_8"
             latin:moreKeys="@string/more_keys_for_symbols_8" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_9"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_9"
             latin:moreKeys="@string/more_keys_for_symbols_9" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_0"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_0"
             latin:moreKeys="@string/more_keys_for_symbols_0" />
         <Key
             latin:keyStyle="deleteKeyStyle"
diff --git a/java/res/xml/row_qwerty1.xml b/java/res/xml/row_qwerty1.xml
index e8e8d1b463fc014ab3a41efa11ffd95eedd2adef..cb1f4d297fd454af7260d80e76b1bcf764972616 100644
--- a/java/res/xml/row_qwerty1.xml
+++ b/java/res/xml/row_qwerty1.xml
@@ -27,43 +27,50 @@
         <Key
             latin:keyLabel="q"
             latin:keyHintLabel="1"
-            latin:moreKeys="@string/more_keys_for_q" />
+            latin:additionalMoreKeys="1" />
         <Key
             latin:keyLabel="w"
             latin:keyHintLabel="2"
-            latin:moreKeys="@string/more_keys_for_w" />
+            latin:additionalMoreKeys="2" />
         <Key
             latin:keyLabel="e"
             latin:keyHintLabel="3"
+            latin:additionalMoreKeys="3"
             latin:moreKeys="@string/more_keys_for_e" />
         <Key
             latin:keyLabel="r"
             latin:keyHintLabel="4"
+            latin:additionalMoreKeys="4"
             latin:moreKeys="@string/more_keys_for_r" />
         <Key
             latin:keyLabel="t"
             latin:keyHintLabel="5"
+            latin:additionalMoreKeys="5"
             latin:moreKeys="@string/more_keys_for_t" />
         <Key
             latin:keyLabel="y"
             latin:keyHintLabel="6"
+            latin:additionalMoreKeys="6"
             latin:moreKeys="@string/more_keys_for_y" />
         <Key
             latin:keyLabel="u"
             latin:keyHintLabel="7"
+            latin:additionalMoreKeys="7"
             latin:moreKeys="@string/more_keys_for_u" />
         <Key
             latin:keyLabel="i"
             latin:keyHintLabel="8"
+            latin:additionalMoreKeys="8"
             latin:moreKeys="@string/more_keys_for_i" />
         <Key
             latin:keyLabel="o"
             latin:keyHintLabel="9"
+            latin:additionalMoreKeys="9"
             latin:moreKeys="@string/more_keys_for_o" />
         <Key
             latin:keyLabel="p"
             latin:keyHintLabel="0"
-            latin:moreKeys="@string/more_keys_for_p"
+            latin:additionalMoreKeys="0"
             latin:keyWidth="fillRight" />
     </Row>
 </merge>
diff --git a/java/res/xml/rows_arabic.xml b/java/res/xml/rows_arabic.xml
index dcee10ef556bf8f9fca22b073e14aa06204149c9..2dcd831c2f1d372a2bf96607f71e9ebd3578c141 100644
--- a/java/res/xml/rows_arabic.xml
+++ b/java/res/xml/rows_arabic.xml
@@ -30,18 +30,19 @@
         <Key
             latin:keyLabel="ض"
             latin:keyHintLabel="1"
-            latin:moreKeys="1,Ù¡" />
+            latin:additionalMoreKeys="1,Ù¡" />
         <!-- \u0635: ARABIC LETTER SAD -->
         <Key
             latin:keyLabel="ص"
             latin:keyHintLabel="2"
-            latin:moreKeys="2,Ù¢" />
+            latin:additionalMoreKeys="2,Ù¢" />
         <!-- \u0642: ARABIC LETTER QAF
              \u06a8: ARABIC LETTER QAF WITH THREE DOTS ABOVE -->
         <Key
             latin:keyLabel="Ù‚"
             latin:keyHintLabel="3"
-            latin:moreKeys="3,Ù£,\u06a8" />
+            latin:additionalMoreKeys="3,Ù£"
+            latin:moreKeys="\u06a8" />
         <!-- \u0641: ARABIC LETTER FEH
              \u06a4: ARABIC LETTER VEH
              \u06a2: ARABIC LETTER FEH WITH DOT MOVED BELOW
@@ -49,40 +50,43 @@
         <Key
             latin:keyLabel="ف"
             latin:keyHintLabel="4"
-            latin:moreKeys="4,Ù¤,\u06a4,\u06a2,\u06a5" />
+            latin:additionalMoreKeys="4,Ù¤"
+            latin:moreKeys="\u06a4,\u06a2,\u06a5" />
         <!-- \u063a: ARABIC LETTER GHAIN -->
         <Key
             latin:keyLabel="غ"
             latin:keyHintLabel="5"
-            latin:moreKeys="5,Ù¥" />
+            latin:additionalMoreKeys="5,Ù¥" />
         <!-- \u0639: ARABIC LETTER AIN -->
         <Key
             latin:keyLabel="ع"
             latin:keyHintLabel="6"
-            latin:moreKeys="6,Ù¦" />
+            latin:additionalMoreKeys="6,Ù¦" />
         <!-- \u0647: ARABIC LETTER HEH
              \ufeeb: ARABIC LETTER HEH INITIAL FORM
              \u0647\u0640: ARABIC LETTER HEH + Zero width joiner -->
         <Key
             latin:keyLabel="Ù‡"
             latin:keyHintLabel="7"
-            latin:moreKeys="7,Ù§,\ufeeb|\u0647\u200D" />
+            latin:additionalMoreKeys="7,Ù§"
+            latin:moreKeys="\ufeeb|\u0647\u200D" />
         <!-- \u062e: ARABIC LETTER KHAH -->
         <Key
             latin:keyLabel="Ø®"
             latin:keyHintLabel="8"
-            latin:moreKeys="8,Ù¨" />
+            latin:additionalMoreKeys="8,Ù¨" />
         <!-- \u062d: ARABIC LETTER HAH -->
         <Key
             latin:keyLabel="Ø­"
             latin:keyHintLabel="9"
-            latin:moreKeys="9,Ù©" />
+            latin:additionalMoreKeys="9,Ù©" />
         <!-- \u062c: ARABIC LETTER JEEM
              \u0686: ARABIC LETTER TCHEH -->
         <Key
             latin:keyLabel="ج"
             latin:keyHintLabel="0"
-            latin:moreKeys="0,Ù ,\u0686"
+            latin:additionalMoreKeys="0,Ù "
+            latin:moreKeys="\u0686"
             latin:keyWidth="fillRight" />
     </Row>
     <Row
diff --git a/java/res/xml/rows_azerty.xml b/java/res/xml/rows_azerty.xml
index b7a0936b455a6dacca394e1c6f64ef71a6adea02..142ebc0a699fcb334a2596fe2f8182b9cce80a45 100644
--- a/java/res/xml/rows_azerty.xml
+++ b/java/res/xml/rows_azerty.xml
@@ -29,51 +29,59 @@
         <Key
             latin:keyLabel="a"
             latin:keyHintLabel="1"
+            latin:additionalMoreKeys="1"
             latin:moreKeys="@string/more_keys_for_a" />
         <Key
             latin:keyLabel="z"
             latin:keyHintLabel="2"
+            latin:additionalMoreKeys="2"
             latin:moreKeys="@string/more_keys_for_z" />
         <Key
             latin:keyLabel="e"
             latin:keyHintLabel="3"
+            latin:additionalMoreKeys="3"
             latin:moreKeys="@string/more_keys_for_e" />
         <Key
             latin:keyLabel="r"
             latin:keyHintLabel="4"
+            latin:additionalMoreKeys="4"
             latin:moreKeys="@string/more_keys_for_r" />
         <Key
             latin:keyLabel="t"
             latin:keyHintLabel="5"
+            latin:additionalMoreKeys="5"
             latin:moreKeys="@string/more_keys_for_t" />
         <Key
             latin:keyLabel="y"
             latin:keyHintLabel="6"
+            latin:additionalMoreKeys="6"
             latin:moreKeys="@string/more_keys_for_y" />
         <Key
             latin:keyLabel="u"
             latin:keyHintLabel="7"
+            latin:additionalMoreKeys="7"
             latin:moreKeys="@string/more_keys_for_u" />
         <Key
             latin:keyLabel="i"
             latin:keyHintLabel="8"
+            latin:additionalMoreKeys="8"
             latin:moreKeys="@string/more_keys_for_i" />
         <Key
             latin:keyLabel="o"
             latin:keyHintLabel="9"
+            latin:additionalMoreKeys="9"
             latin:moreKeys="@string/more_keys_for_o" />
         <Key
             latin:keyLabel="p"
             latin:keyHintLabel="0"
-            latin:moreKeys="@string/more_keys_for_p"
+            latin:additionalMoreKeys="0"
             latin:keyWidth="fillRight" />
     </Row>
     <Row
         latin:keyWidth="10%p"
     >
         <Key
-            latin:keyLabel="q"
-            latin:moreKeys="@string/more_keys_for_q" />
+            latin:keyLabel="q" />
         <Key
             latin:keyLabel="s"
             latin:moreKeys="@string/more_keys_for_s" />
@@ -107,8 +115,7 @@
             latin:keyWidth="15%p"
             latin:visualInsetsRight="1%p" />
         <Key
-            latin:keyLabel="w"
-            latin:moreKeys="@string/more_keys_for_w" />
+            latin:keyLabel="w" />
         <Key
             latin:keyLabel="x" />
         <Key
diff --git a/java/res/xml/rows_bulgarian.xml b/java/res/xml/rows_bulgarian.xml
index 9b5a5e6cfa7d76541e2976f625c2f5939653acd8..2eac93a7e7316ea4e7974baa50066ae133b3d515 100644
--- a/java/res/xml/rows_bulgarian.xml
+++ b/java/res/xml/rows_bulgarian.xml
@@ -29,43 +29,44 @@
         <Key
             latin:keyLabel="ч"
             latin:keyHintLabel="1"
-            latin:moreKeys="1" />
+            latin:additionalMoreKeys="1" />
         <Key
             latin:keyLabel="ш"
             latin:keyHintLabel="2"
-            latin:moreKeys="2" />
+            latin:additionalMoreKeys="2" />
         <Key
             latin:keyLabel="е"
             latin:keyHintLabel="3"
-            latin:moreKeys="3" />
+            latin:additionalMoreKeys="3" />
         <Key
             latin:keyLabel="Ñ€"
             latin:keyHintLabel="4"
-            latin:moreKeys="4" />
+            latin:additionalMoreKeys="4" />
         <Key
             latin:keyLabel="Ñ‚"
             latin:keyHintLabel="5"
-            latin:moreKeys="5" />
+            latin:additionalMoreKeys="5" />
         <Key
             latin:keyLabel="ÑŠ"
             latin:keyHintLabel="6"
-            latin:moreKeys="6" />
+            latin:additionalMoreKeys="6" />
         <Key
             latin:keyLabel="у"
             latin:keyHintLabel="7"
-            latin:moreKeys="7" />
+            latin:additionalMoreKeys="7" />
         <Key
             latin:keyLabel="и"
             latin:keyHintLabel="8"
-            latin:moreKeys="8,ѝ" />
+            latin:additionalMoreKeys="8"
+            latin:moreKeys="ѝ" />
         <Key
             latin:keyLabel="о"
             latin:keyHintLabel="9"
-            latin:moreKeys="9" />
+            latin:additionalMoreKeys="9" />
         <Key
             latin:keyLabel="п"
             latin:keyHintLabel="0"
-            latin:moreKeys="0" />
+            latin:additionalMoreKeys="0" />
         <Key
             latin:keyLabel="я"
             latin:keyWidth="fillRight" />
diff --git a/java/res/xml/rows_qwertz.xml b/java/res/xml/rows_qwertz.xml
index e578f9aaa7a4f864ee8a74adbfec1c97088bf8b8..11fd9332cdf626d0cd65124e63b31e29a1dac290 100644
--- a/java/res/xml/rows_qwertz.xml
+++ b/java/res/xml/rows_qwertz.xml
@@ -29,43 +29,50 @@
         <Key
             latin:keyLabel="q"
             latin:keyHintLabel="1"
-            latin:moreKeys="@string/more_keys_for_q" />
+            latin:additionalMoreKeys="1" />
         <Key
             latin:keyLabel="w"
             latin:keyHintLabel="2"
-            latin:moreKeys="@string/more_keys_for_w" />
+            latin:additionalMoreKeys="2" />
         <Key
             latin:keyLabel="e"
             latin:keyHintLabel="3"
+            latin:additionalMoreKeys="3"
             latin:moreKeys="@string/more_keys_for_e" />
         <Key
             latin:keyLabel="r"
             latin:keyHintLabel="4"
+            latin:additionalMoreKeys="4"
             latin:moreKeys="@string/more_keys_for_r" />
         <Key
             latin:keyLabel="t"
             latin:keyHintLabel="5"
+            latin:additionalMoreKeys="5"
             latin:moreKeys="@string/more_keys_for_t" />
         <Key
             latin:keyLabel="z"
             latin:keyHintLabel="6"
+            latin:additionalMoreKeys="6"
             latin:moreKeys="@string/more_keys_for_z" />
         <Key
             latin:keyLabel="u"
             latin:keyHintLabel="7"
+            latin:additionalMoreKeys="7"
             latin:moreKeys="@string/more_keys_for_u" />
         <Key
             latin:keyLabel="i"
             latin:keyHintLabel="8"
+            latin:additionalMoreKeys="8"
             latin:moreKeys="@string/more_keys_for_i" />
         <Key
             latin:keyLabel="o"
             latin:keyHintLabel="9"
+            latin:additionalMoreKeys="9"
             latin:moreKeys="@string/more_keys_for_o" />
         <Key
             latin:keyLabel="p"
             latin:keyHintLabel="0"
-            latin:moreKeys="@string/more_keys_for_p"
+            latin:additionalMoreKeys="0"
             latin:keyWidth="fillRight" />
     </Row>
     <include
diff --git a/java/res/xml/rows_scandinavian.xml b/java/res/xml/rows_scandinavian.xml
index 2bd246b45de6ab2f91ce43421ca4bcd4f58fa14c..f5ba96c27ebaeed372d71ea3b3a1ef450122d650 100644
--- a/java/res/xml/rows_scandinavian.xml
+++ b/java/res/xml/rows_scandinavian.xml
@@ -29,43 +29,50 @@
         <Key
             latin:keyLabel="q"
             latin:keyHintLabel="1"
-            latin:moreKeys="@string/more_keys_for_q" />
+            latin:additionalMoreKeys="1" />
         <Key
             latin:keyLabel="w"
             latin:keyHintLabel="2"
-            latin:moreKeys="@string/more_keys_for_w" />
+            latin:additionalMoreKeys="2" />
         <Key
             latin:keyLabel="e"
             latin:keyHintLabel="3"
+            latin:additionalMoreKeys="3"
             latin:moreKeys="@string/more_keys_for_e" />
         <Key
             latin:keyLabel="r"
             latin:keyHintLabel="4"
+            latin:additionalMoreKeys="4"
             latin:moreKeys="@string/more_keys_for_r" />
         <Key
             latin:keyLabel="t"
             latin:keyHintLabel="5"
+            latin:additionalMoreKeys="5"
             latin:moreKeys="@string/more_keys_for_t" />
         <Key
             latin:keyLabel="y"
             latin:keyHintLabel="6"
+            latin:additionalMoreKeys="6"
             latin:moreKeys="@string/more_keys_for_y" />
         <Key
             latin:keyLabel="u"
             latin:keyHintLabel="7"
+            latin:additionalMoreKeys="7"
             latin:moreKeys="@string/more_keys_for_u" />
         <Key
             latin:keyLabel="i"
             latin:keyHintLabel="8"
+            latin:additionalMoreKeys="8"
             latin:moreKeys="@string/more_keys_for_i" />
         <Key
             latin:keyLabel="o"
             latin:keyHintLabel="9"
+            latin:additionalMoreKeys="9"
             latin:moreKeys="@string/more_keys_for_o" />
         <Key
             latin:keyLabel="p"
             latin:keyHintLabel="0"
-            latin:moreKeys="@string/more_keys_for_p" />
+            latin:additionalMoreKeys="0" />
         <Key
             latin:keyLabel="@string/keylabel_for_scandinavia_row1_11"
             latin:keyWidth="fillRight" />
diff --git a/java/res/xml/rows_serbian.xml b/java/res/xml/rows_serbian.xml
index beb04d5245642985aaaee71c0d6adc6a29fe971f..d2203ce9cb223e0b07b57d00f1a4c6a1cbfca14d 100644
--- a/java/res/xml/rows_serbian.xml
+++ b/java/res/xml/rows_serbian.xml
@@ -29,43 +29,43 @@
         <Key
             latin:keyLabel="Ñ™"
             latin:keyHintLabel="1"
-            latin:moreKeys="1" />
+            latin:additionalMoreKeys="1" />
         <Key
             latin:keyLabel="Ñš"
             latin:keyHintLabel="2"
-            latin:moreKeys="2" />
+            latin:additionalMoreKeys="2" />
         <Key
             latin:keyLabel="е"
             latin:keyHintLabel="3"
-            latin:moreKeys="3" />
+            latin:additionalMoreKeys="3" />
         <Key
             latin:keyLabel="Ñ€"
             latin:keyHintLabel="4"
-            latin:moreKeys="4" />
+            latin:additionalMoreKeys="4" />
         <Key
             latin:keyLabel="Ñ‚"
             latin:keyHintLabel="5"
-            latin:moreKeys="5" />
+            latin:additionalMoreKeys="5" />
         <Key
             latin:keyLabel="з"
             latin:keyHintLabel="6"
-            latin:moreKeys="6" />
+            latin:additionalMoreKeys="6" />
         <Key
             latin:keyLabel="у"
             latin:keyHintLabel="7"
-            latin:moreKeys="7" />
+            latin:additionalMoreKeys="7" />
         <Key
             latin:keyLabel="и"
             latin:keyHintLabel="8"
-            latin:moreKeys="8" />
+            latin:additionalMoreKeys="8" />
         <Key
             latin:keyLabel="о"
             latin:keyHintLabel="9"
-            latin:moreKeys="9" />
+            latin:additionalMoreKeys="9" />
         <Key
             latin:keyLabel="п"
             latin:keyHintLabel="0"
-            latin:moreKeys="0" />
+            latin:additionalMoreKeys="0" />
         <Key
             latin:keyLabel="ш"
             latin:keyWidth="fillRight" />
diff --git a/java/res/xml/rows_slavic.xml b/java/res/xml/rows_slavic.xml
index 52f5af4c91c023fbce0084fe0262eff5254b8b3d..71e442c7cd9c13bbdbc842625af83b5a8e8207ef 100644
--- a/java/res/xml/rows_slavic.xml
+++ b/java/res/xml/rows_slavic.xml
@@ -29,43 +29,46 @@
         <Key
             latin:keyLabel="й"
             latin:keyHintLabel="1"
-            latin:moreKeys="1" />
+            latin:additionalMoreKeys="1" />
         <Key
             latin:keyLabel="ц"
             latin:keyHintLabel="2"
-            latin:moreKeys="2" />
+            latin:additionalMoreKeys="2" />
         <Key
             latin:keyLabel="у"
             latin:keyHintLabel="3"
+            latin:additionalMoreKeys="3"
             latin:moreKeys="@string/more_keys_for_slavic_u" />
         <Key
             latin:keyLabel="к"
             latin:keyHintLabel="4"
-            latin:moreKeys="4" />
+            latin:additionalMoreKeys="4" />
         <Key
             latin:keyLabel="е"
             latin:keyHintLabel="5"
+            latin:additionalMoreKeys="5"
             latin:moreKeys="@string/more_keys_for_slavic_ye" />
         <Key
             latin:keyLabel="н"
             latin:keyHintLabel="6"
+            latin:additionalMoreKeys="6"
             latin:moreKeys="@string/more_keys_for_slavic_en" />
         <Key
             latin:keyLabel="г"
             latin:keyHintLabel="7"
-            latin:moreKeys="7" />
+            latin:additionalMoreKeys="7" />
         <Key
             latin:keyLabel="ш"
             latin:keyHintLabel="8"
-            latin:moreKeys="8" />
+            latin:additionalMoreKeys="8" />
         <Key
             latin:keyLabel="@string/keylabel_for_slavic_shcha"
             latin:keyHintLabel="9"
-            latin:moreKeys="9" />
+            latin:additionalMoreKeys="9" />
         <Key
             latin:keyLabel="з"
             latin:keyHintLabel="0"
-            latin:moreKeys="0" />
+            latin:additionalMoreKeys="0" />
         <Key
             latin:keyLabel="Ñ…"
             latin:moreKeys="@string/more_keys_for_slavic_ha"
diff --git a/java/res/xml/rows_symbols.xml b/java/res/xml/rows_symbols.xml
index fe9efbbc607850516db38a297459fe88ccb11f6f..d0d0edbc85f86f41441ddede57a054ec224b90a9 100644
--- a/java/res/xml/rows_symbols.xml
+++ b/java/res/xml/rows_symbols.xml
@@ -30,33 +30,43 @@
     >
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_1"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_1"
             latin:moreKeys="@string/more_keys_for_symbols_1" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_2"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_2"
             latin:moreKeys="@string/more_keys_for_symbols_2" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_3"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_3"
             latin:moreKeys="@string/more_keys_for_symbols_3" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_4"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_4"
             latin:moreKeys="@string/more_keys_for_symbols_4" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_5"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_5"
             latin:moreKeys="@string/more_keys_for_symbols_5" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_6"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_6"
             latin:moreKeys="@string/more_keys_for_symbols_6" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_7"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_7"
             latin:moreKeys="@string/more_keys_for_symbols_7" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_8"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_8"
             latin:moreKeys="@string/more_keys_for_symbols_8" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_9"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_9"
             latin:moreKeys="@string/more_keys_for_symbols_9" />
         <Key
             latin:keyLabel="@string/keylabel_for_symbols_0"
+            latin:additionalMoreKeys="@string/additional_more_keys_for_symbols_0"
             latin:moreKeys="@string/more_keys_for_symbols_0"
             latin:keyWidth="fillRight" />
     </Row>
diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java
index bb90653c16b1c2492992c1e7f5e3a21a405db067..a2d379643e71d51b144ba77aaeaae0ebdc335c72 100644
--- a/java/src/com/android/inputmethod/keyboard/Key.java
+++ b/java/src/com/android/inputmethod/keyboard/Key.java
@@ -285,22 +285,17 @@ public class Key {
         mLabelFlags = style.getFlag(keyAttr, R.styleable.Keyboard_Key_keyLabelFlags, 0);
         final boolean preserveCase = (mLabelFlags & LABEL_FLAGS_PRESERVE_CASE) != 0;
 
-        final String[] moreKeys = style.getStringArray(keyAttr, R.styleable.Keyboard_Key_moreKeys);
+        final String[] additionalMoreKeys = style.getStringArray(
+                keyAttr, R.styleable.Keyboard_Key_additionalMoreKeys);
+        final String[] moreKeys = MoreKeySpecParser.insertAddtionalMoreKeys(style.getStringArray(
+                keyAttr, R.styleable.Keyboard_Key_moreKeys), additionalMoreKeys);
         if (moreKeys != null) {
             for (int i = 0; i < moreKeys.length; i++) {
                 moreKeys[i] = adjustCaseOfStringForKeyboardId(
                         moreKeys[i], preserveCase, params.mId);
             }
         }
-        // TODO: Add new key label flag to control this.
-        // 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_more_keys_enabled)) {
-            mMoreKeys = MoreKeySpecParser.filterOut(res, moreKeys, MoreKeySpecParser.DIGIT_FILTER);
-        } else {
-            mMoreKeys = moreKeys;
-        }
+        mMoreKeys = moreKeys;
         mMaxMoreKeysColumn = style.getInt(keyAttr,
                 R.styleable.Keyboard_Key_maxMoreKeysColumn, params.mMaxMiniKeyboardColumn);
 
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java b/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java
index b7215ec1ba281d9c6ddab2d7eef6c4f476e34cc9..1450192b25f4d5a082e6fe2b0ebffcf987f78910 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java
@@ -173,6 +173,7 @@ public class KeyStyles {
             readString(keyAttr, R.styleable.Keyboard_Key_keyOutputText);
             readString(keyAttr, R.styleable.Keyboard_Key_keyHintLabel);
             readStringArray(keyAttr, R.styleable.Keyboard_Key_moreKeys);
+            readStringArray(keyAttr, R.styleable.Keyboard_Key_additionalMoreKeys);
             readFlag(keyAttr, R.styleable.Keyboard_Key_keyLabelFlags);
             readInt(keyAttr, R.styleable.Keyboard_Key_keyIcon);
             readInt(keyAttr, R.styleable.Keyboard_Key_keyIconDisabled);
diff --git a/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParser.java b/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParser.java
index 16777733e1ec487759b11b593615f9134b1b120a..abebfec01214307d7761734e1aee8ed8a1cea326 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParser.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParser.java
@@ -20,10 +20,12 @@ import android.content.res.Resources;
 import android.text.TextUtils;
 
 import com.android.inputmethod.keyboard.Keyboard;
+import com.android.inputmethod.latin.LatinImeLogger;
 import com.android.inputmethod.latin.R;
 import com.android.inputmethod.latin.Utils;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 
 /**
  * String parser of moreKeys attribute of Key.
@@ -38,9 +40,11 @@ import java.util.ArrayList;
  * See {@link KeyboardIconsSet} about icon_number.
  */
 public class MoreKeySpecParser {
+    private static final boolean DEBUG = LatinImeLogger.sDBG;
     private static final char LABEL_END = '|';
     private static final String PREFIX_ICON = Utils.PREFIX_AT + "icon" + Utils.SUFFIX_SLASH;
     private static final String PREFIX_CODE = Utils.PREFIX_AT + "integer" + Utils.SUFFIX_SLASH;
+    private static final String ADDITIONAL_MORE_KEY_MARKER = "%";
 
     private MoreKeySpecParser() {
         // Intentional empty constructor for utility class.
@@ -173,51 +177,80 @@ public class MoreKeySpecParser {
         return KeyboardIconsSet.ICON_UNDEFINED;
     }
 
-    @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 String[] filterOut(Resources res, String[] moreKeys, CodeFilter filter) {
-        if (moreKeys == null || moreKeys.length < 1) {
-            return null;
-        }
-        if (moreKeys.length == 1 && filter.shouldFilterOut(getCode(res, moreKeys[0]))) {
-            return null;
-        }
-        ArrayList<String> filtered = null;
-        for (int i = 0; i < moreKeys.length; i++) {
-            final String moreKeySpec = moreKeys[i];
-            if (filter.shouldFilterOut(getCode(res, moreKeySpec))) {
-                if (filtered == null) {
-                    filtered = new ArrayList<String>();
-                    for (int j = 0; j < i; j++) {
-                        filtered.add(moreKeys[j]);
+    public static String[] insertAddtionalMoreKeys(String[] moreKeys, String[] additionalMoreKeys) {
+        final int moreKeysCount = (moreKeys != null) ? moreKeys.length : 0;
+        final int additionalCount = (additionalMoreKeys != null) ? additionalMoreKeys.length : 0;
+        ArrayList<String> out = null;
+        int additionalIndex = 0;
+        for (int moreKeyIndex = 0; moreKeyIndex < moreKeysCount; moreKeyIndex++) {
+            final String moreKeySpec = moreKeys[moreKeyIndex];
+            if (moreKeySpec.equals(ADDITIONAL_MORE_KEY_MARKER)) {
+                if (additionalIndex < additionalCount) {
+                    // Replace '%' marker with additional more key specification.
+                    final String additionalMoreKey = additionalMoreKeys[additionalIndex];
+                    if (out != null) {
+                        out.add(additionalMoreKey);
+                    } else {
+                        moreKeys[moreKeyIndex] = additionalMoreKey;
+                    }
+                    additionalIndex++;
+                } else {
+                    // Filter out excessive '%' marker.
+                    if (out == null) {
+                        out = new ArrayList<String>(moreKeyIndex);
+                        for (int i = 0; i < moreKeyIndex; i++) {
+                            out.add(moreKeys[i]);
+                        }
                     }
                 }
-            } else if (filtered != null) {
-                filtered.add(moreKeySpec);
+            } else {
+                if (out != null) {
+                    out.add(moreKeySpec);
+                }
+            }
+        }
+        if (additionalCount > 0 && additionalIndex == 0) {
+            // No '%' marker is found in more keys.
+            // Insert all additional more keys to the head of more keys.
+            if (DEBUG && out != null) {
+                throw new RuntimeException("Internal logic error:"
+                        + " moreKeys=" + Arrays.toString(moreKeys)
+                        + " additionalMoreKeys=" + Arrays.toString(additionalMoreKeys));
+            }
+            out = new ArrayList<String>(additionalCount + moreKeysCount);
+            for (int i = additionalIndex; i < additionalCount; i++) {
+                out.add(additionalMoreKeys[i]);
+            }
+            for (int i = 0; i < moreKeysCount; i++) {
+                out.add(moreKeys[i]);
+            }
+        } else if (additionalIndex < additionalCount) {
+            // The number of '%' markers are less than additional more keys.
+            // Append remained additional more keys to the tail of more keys.
+            if (DEBUG && out != null) {
+                throw new RuntimeException("Internal logic error:"
+                        + " moreKeys=" + Arrays.toString(moreKeys)
+                        + " additionalMoreKeys=" + Arrays.toString(additionalMoreKeys));
+            }
+            out = new ArrayList<String>(moreKeysCount);
+            for (int i = 0; i < moreKeysCount; i++) {
+                out.add(moreKeys[i]);
+            }
+            for (int i = additionalIndex; i < additionalCount; i++) {
+                out.add(additionalMoreKeys[additionalIndex]);
             }
         }
-        if (filtered == null) {
+        if (out != null) {
+            return out.size() > 0 ? out.toArray(new String[out.size()]) : null;
+        } else {
             return moreKeys;
         }
-        if (filtered.size() == 0) {
-            return null;
+    }
+
+    @SuppressWarnings("serial")
+    public static class MoreKeySpecParserError extends RuntimeException {
+        public MoreKeySpecParserError(String message) {
+            super(message);
         }
-        return filtered.toArray(new String[filtered.size()]);
     }
 }
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParserTests.java b/tests/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParserTests.java
index 74aaf9af8b96adab5ed30790c05350617472d9f7..bc38cc16cc3e262109a2f245731648d88c450289 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParserTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParserTests.java
@@ -22,6 +22,8 @@ import android.test.AndroidTestCase;
 import com.android.inputmethod.keyboard.Keyboard;
 import com.android.inputmethod.latin.R;
 
+import java.util.Arrays;
+
 public class MoreKeySpecParserTests extends AndroidTestCase {
     private Resources mRes;
 
@@ -217,4 +219,212 @@ public class MoreKeySpecParserTests extends AndroidTestCase {
                 ICON_SETTINGS + "|" + CODE_SETTINGS + "|c",
                 null, null, ICON_SETTINGS_KEY, mCodeSettings);
     }
+
+    private void assertMoreKeys(String message, String[] moreKeys, String[] additionalMoreKeys,
+            String[] expected) {
+        final String[] actual = MoreKeySpecParser.insertAddtionalMoreKeys(
+                moreKeys, additionalMoreKeys);
+        if (expected == null && actual == null) {
+            return;
+        }
+        if (expected == null || actual == null) {
+            assertEquals(message, Arrays.toString(expected), Arrays.toString(actual));
+        } else {
+            if (expected.length != actual.length) {
+                assertEquals(message, Arrays.toString(expected), Arrays.toString(actual));
+            }
+            for (int i = 0; i < expected.length; i++) {
+                if (!actual[i].equals(expected[i])) {
+                    assertEquals(message, Arrays.toString(expected), Arrays.toString(actual));
+                }
+            }
+        }
+    }
+
+    public void testInsertAdditionalMoreKeys() {
+        // Escaped marker.
+        assertMoreKeys("escaped marker",
+                new String[] { "\\%", "%-)" },
+                new String[] { "1", "2" },
+                new String[] { "1", "2", "\\%", "%-)" });
+
+        // 0 more key.
+        assertMoreKeys("null & null", null, null, null);
+        assertMoreKeys("null & 1 additional",
+                null,
+                new String[] { "1" },
+                new String[] { "1" });
+        assertMoreKeys("null & 2 additionals",
+                null,
+                new String[] { "1", "2" },
+                new String[] { "1", "2" });
+
+        // 0 additional more key.
+        assertMoreKeys("1 more key & null",
+                new String[] { "A" },
+                null,
+                new String[] { "A" });
+        assertMoreKeys("2 more keys & null",
+                new String[] { "A", "B" },
+                null,
+                new String[] { "A", "B" });
+
+        // No marker.
+        assertMoreKeys("1 more key & 1 addtional & no marker",
+                new String[] { "A" },
+                new String[] { "1" },
+                new String[] { "1", "A" });
+        assertMoreKeys("1 more key & 2 addtionals & no marker",
+                new String[] { "A" },
+                new String[] { "1", "2" },
+                new String[] { "1", "2", "A" });
+        assertMoreKeys("2 more keys & 1 addtional & no marker",
+                new String[] { "A", "B" },
+                new String[] { "1" },
+                new String[] { "1", "A", "B" });
+        assertMoreKeys("2 more keys & 2 addtionals & no marker",
+                new String[] { "A", "B" },
+                new String[] { "1", "2" },
+                new String[] { "1", "2", "A", "B" });
+
+        // 1 marker.
+        assertMoreKeys("1 more key & 1 additional & marker at head",
+                new String[] { "%", "A" },
+                new String[] { "1" },
+                new String[] { "1", "A" });
+        assertMoreKeys("1 more key & 1 additional & marker at tail",
+                new String[] { "A", "%" },
+                new String[] { "1" },
+                new String[] { "A", "1" });
+        assertMoreKeys("2 more keys & 1 additional & marker at middle",
+                new String[] { "A", "%", "B" },
+                new String[] { "1" },
+                new String[] { "A", "1", "B" });
+
+        // 1 marker & excess additional more keys.
+        assertMoreKeys("1 more key & 2 additionals & marker at head",
+                new String[] { "%", "A", "B" },
+                new String[] { "1", "2" },
+                new String[] { "1", "A", "B", "2" });
+        assertMoreKeys("1 more key & 2 additionals & marker at tail",
+                new String[] { "A", "B", "%" },
+                new String[] { "1", "2" },
+                new String[] { "A", "B", "1", "2" });
+        assertMoreKeys("2 more keys & 2 additionals & marker at middle",
+                new String[] { "A", "%", "B" },
+                new String[] { "1", "2" },
+                new String[] { "A", "1", "B", "2" });
+
+        // 2 markers.
+        assertMoreKeys("0 more key & 2 addtional & 2 markers",
+                new String[] { "%", "%" },
+                new String[] { "1", "2" },
+                new String[] { "1", "2" });
+        assertMoreKeys("1 more key & 2 addtional & 2 markers at head",
+                new String[] { "%", "%", "A" },
+                new String[] { "1", "2" },
+                new String[] { "1", "2", "A" });
+        assertMoreKeys("1 more key & 2 addtional & 2 markers at tail",
+                new String[] { "A", "%", "%" },
+                new String[] { "1", "2" },
+                new String[] { "A", "1", "2" });
+        assertMoreKeys("2 more keys & 2 addtional & 2 markers at middle",
+                new String[] { "A", "%", "%", "B" },
+                new String[] { "1", "2" },
+                new String[] { "A", "1", "2", "B" });
+        assertMoreKeys("2 more keys & 2 addtional & 2 markers at head & middle",
+                new String[] { "%", "A", "%", "B" },
+                new String[] { "1", "2" },
+                new String[] { "1", "A", "2", "B" });
+        assertMoreKeys("2 more keys & 2 addtional & 2 markers at head & tail",
+                new String[] { "%", "A", "B", "%" },
+                new String[] { "1", "2" },
+                new String[] { "1", "A", "B", "2" });
+        assertMoreKeys("2 more keys & 2 addtional & 2 markers at middle & tail",
+                new String[] { "A", "%", "B", "%" },
+                new String[] { "1", "2" },
+                new String[] { "A", "1", "B", "2" });
+
+        // 2 markers & excess additional keys.
+        assertMoreKeys("0 more key & 2 addtional & 2 markers",
+                new String[] { "%", "%" },
+                new String[] { "1", "2", "3" },
+                new String[] { "1", "2", "3" });
+        assertMoreKeys("1 more key & 2 addtional & 2 markers at head",
+                new String[] { "%", "%", "A" },
+                new String[] { "1", "2", "3" },
+                new String[] { "1", "2", "A", "3" });
+        assertMoreKeys("1 more key & 2 addtional & 2 markers at tail",
+                new String[] { "A", "%", "%" },
+                new String[] { "1", "2", "3" },
+                new String[] { "A", "1", "2", "3" });
+        assertMoreKeys("2 more keys & 2 addtional & 2 markers at middle",
+                new String[] { "A", "%", "%", "B" },
+                new String[] { "1", "2", "3" },
+                new String[] { "A", "1", "2", "B", "3" });
+        assertMoreKeys("2 more keys & 2 addtional & 2 markers at head & middle",
+                new String[] { "%", "A", "%", "B" },
+                new String[] { "1", "2", "3" },
+                new String[] { "1", "A", "2", "B", "3" });
+        assertMoreKeys("2 more keys & 2 addtional & 2 markers at head & tail",
+                new String[] { "%", "A", "B", "%" },
+                new String[] { "1", "2", "3" },
+                new String[] { "1", "A", "B", "2", "3" });
+        assertMoreKeys("2 more keys & 2 addtional & 2 markers at middle & tail",
+                new String[] { "A", "%", "B", "%" },
+                new String[] { "1", "2", "3" },
+                new String[] { "A", "1", "B", "2", "3" });
+
+        // 0 addtional more key and excess markers.
+        assertMoreKeys("0 more key & null & excess marker",
+                new String[] { "%" },
+                null,
+                null);
+        assertMoreKeys("1 more key & null & excess marker at head",
+                new String[] { "%", "A" },
+                null,
+                new String[] { "A" });
+        assertMoreKeys("1 more key & null & excess marker at tail",
+                new String[] { "A", "%" },
+                null,
+                new String[] { "A" });
+        assertMoreKeys("2 more keys & null & excess marker at middle",
+                new String[] { "A", "%", "B" },
+                null,
+                new String[] { "A", "B" });
+        assertMoreKeys("2 more keys & null & excess markers",
+                new String[] { "%", "A", "%", "B", "%" },
+                null,
+                new String[] { "A", "B" });
+
+        // Excess markers.
+        assertMoreKeys("0 more key & 1 addtional & excess marker",
+                new String[] { "%", "%" },
+                new String[] { "1" },
+                new String[] { "1" });
+        assertMoreKeys("1 more key & 1 addtional & excess marker at head",
+                new String[] { "%", "%", "A" },
+                new String[] { "1" },
+                new String[] { "1", "A" });
+        assertMoreKeys("1 more key & 1 addtional & excess marker at tail",
+                new String[] { "A", "%", "%" },
+                new String[] { "1" },
+                new String[] { "A", "1" });
+        assertMoreKeys("2 more keys & 1 addtional & excess marker at middle",
+                new String[] { "A", "%", "%", "B" },
+                new String[] { "1" },
+                new String[] { "A", "1", "B" });
+        assertMoreKeys("2 more keys & 1 addtional & excess markers",
+                new String[] { "%", "A", "%", "B", "%" },
+                new String[] { "1" },
+                new String[] { "1", "A", "B" });
+        assertMoreKeys("2 more keys & 2 addtionals & excess markers",
+                new String[] { "%", "A", "%", "B", "%" },
+                new String[] { "1", "2" },
+                new String[] { "1", "A", "2", "B" });
+        assertMoreKeys("2 more keys & 3 addtionals & excess markers",
+                new String[] { "%", "A", "%", "%", "B", "%" },
+                new String[] { "1", "2", "3" },
+                new String[] { "1", "A", "2", "3", "B" });
+    }
 }