diff --git a/java/res/xml-sw600dp/rows_nepali_romanized.xml b/java/res/xml-sw600dp/rows_nepali_romanized.xml
index fe73fbd9ead7d221ebb1f2724fd7072f742398d5..41cd2f9b4585c4a418f2a22632c603c834037c95 100644
--- a/java/res/xml-sw600dp/rows_nepali_romanized.xml
+++ b/java/res/xml-sw600dp/rows_nepali_romanized.xml
@@ -39,7 +39,7 @@
             latin:keyWidth="fillRight" />
     </Row>
     <Row
-        latin:keyWidth="8.182%p"
+        latin:keyWidth="8.0%p"
         latin:keyLabelFlags="fontNormal"
     >
         <Key
@@ -47,6 +47,9 @@
             latin:keyWidth="10.0%p" />
         <include latin:keyboardLayout="@xml/rowkeys_nepali_romanized3" />
         <include latin:keyboardLayout="@xml/keys_exclamation_question" />
+        <Key
+            latin:keyStyle="shiftKeyStyle"
+            latin:keyWidth="fillRight" />
     </Row>
     <include latin:keyboardLayout="@xml/row_qwerty4" />
 </merge>
diff --git a/java/res/xml-sw600dp/rows_nepali_traditional.xml b/java/res/xml-sw600dp/rows_nepali_traditional.xml
index e56271f21c45f2a74bcf250916d76bd9ea82be41..d23ca24e46cdd6a555a356b0102d7cf9f2202f14 100644
--- a/java/res/xml-sw600dp/rows_nepali_traditional.xml
+++ b/java/res/xml-sw600dp/rows_nepali_traditional.xml
@@ -45,8 +45,8 @@
         <Key
             latin:keyStyle="shiftKeyStyle"
             latin:keyWidth="10.0%p" />
-        <include latin:keyboardLayout="@xml/rowkeys_nepali_traditional3_left6" />
-        <include latin:keyboardLayout="@xml/rowkeys_nepali_traditional3_right5" />
-    </Row>
+        <include latin:keyboardLayout="@xml/rowkeys_nepali_traditional3" />
+        <include latin:keyboardLayout="@xml/keys_exclamation_question" />
+        </Row>
     <include latin:keyboardLayout="@xml/row_qwerty4" />
 </merge>
diff --git a/java/res/xml/key_period.xml b/java/res/xml/key_period.xml
index 10325ef1aa0a42ea9177a8a92c2fde68158345f2..5b59cff192f6796ff68461bd77067ffe0fd8ea29 100644
--- a/java/res/xml/key_period.xml
+++ b/java/res/xml/key_period.xml
@@ -22,21 +22,6 @@
     xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
 >
     <switch>
-        <case
-            latin:languageCode="ne"
-            latin:keyboardLayoutSet="nepali_traditional"
-        >
-            <!-- Because the font rendering system prior to API version 16 can't automatically
-                 render dotted circle for incomplete combining letter of some scripts, different
-                 set of Key definitions are needed based on the API version. -->
-            <include
-                latin:keyboardLayout="@xml/keystyle_devanagari_sign_virama" />
-            <Key
-                latin:keyStyle="baseKeyDevanagariSignVirama"
-                latin:keyLabelFlags="hasPopupHint"
-                latin:moreKeys="!text/morekeys_punctuation"
-                latin:backgroundType="functional" />
-        </case>
         <case
             latin:keyboardLayoutSet="dvorak"
         >
diff --git a/java/res/xml/rowkeys_nepali_romanized3.xml b/java/res/xml/rowkeys_nepali_romanized3.xml
index 24f5908328d14e0b56232135007c579782c83a08..c6a1e283e5fa8ba7a314525bd7c64f4e9b829c27 100644
--- a/java/res/xml/rowkeys_nepali_romanized3.xml
+++ b/java/res/xml/rowkeys_nepali_romanized3.xml
@@ -43,11 +43,6 @@
             <Key latin:keyStyle="baseKeyDevanagariSignAnusvara" />
             <!-- U+0919: "ङ" DEVANAGARI LETTER NGA -->
             <Key latin:keySpec="&#x0919;" />
-            <!-- Because the font rendering system prior to API version 16 can't automatically
-                 render dotted circle for incomplete combining letter of some scripts, different
-                 set of Key definitions are needed based on the API version. -->
-            <include latin:keyboardLayout="@xml/keystyle_devanagari_sign_virama" />
-            <Key latin:keyStyle="baseKeyDevanagariSignVirama" />
         </case>
         <default>
             <!-- U+0937: "ष" DEVANAGARI LETTER SSA -->
@@ -64,16 +59,14 @@
             <Key latin:keySpec="&#x0928;" />
             <!-- U+092E: "म" DEVANAGARI LETTER MA -->
             <Key latin:keySpec="&#x092E;" />
-            <!-- U+0964: "।" DEVANAGARI DANDA
-                 U+093D: "ऽ" DEVANAGARI SIGN AVAGRAHA -->
-            <Key
-                latin:keySpec="&#x0964;"
-                latin:moreKeys="&#x093D;" />
             <!-- Because the font rendering system prior to API version 16 can't automatically
                  render dotted circle for incomplete combining letter of some scripts, different
                  set of Key definitions are needed based on the API version. -->
             <include latin:keyboardLayout="@xml/keystyle_devanagari_sign_virama" />
-            <Key latin:keyStyle="baseKeyDevanagariSignVirama" />
+            <!-- U+093D: "ऽ" DEVANAGARI SIGN AVAGRAHA -->
+            <Key
+                latin:keyStyle="baseKeyDevanagariSignVirama"
+                latin:moreKeys="&#x093D;" />
         </default>
     </switch>
 </merge>
diff --git a/java/res/xml/rowkeys_nepali_traditional3_right5.xml b/java/res/xml/rowkeys_nepali_traditional3.xml
similarity index 62%
rename from java/res/xml/rowkeys_nepali_traditional3_right5.xml
rename to java/res/xml/rowkeys_nepali_traditional3.xml
index c7c73a446058eac26cdd710e97745f7425d3acbc..c43c593863fca80423f22f0bbb1371d00c7775e7 100644
--- a/java/res/xml/rowkeys_nepali_traditional3_right5.xml
+++ b/java/res/xml/rowkeys_nepali_traditional3.xml
@@ -21,6 +21,27 @@
 <merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
     <switch>
         <case latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted">
+            <!-- U+0915/U+094D: "क्" DEVANAGARI LETTER KA/DEVANAGARI SIGN VIRAMA -->
+            <Key
+                latin:keySpec="&#x0915;&#x094D;"
+                latin:keyLabelFlags="followKeyLetterRatio" />
+            <!-- U+0939/U+094D/U+092E: "ह्म" DEVANAGARI LETTER HA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER MA -->
+            <Key
+                latin:keySpec="&#x0939;&#x094D;&#x092E;"
+                latin:keyLabelFlags="followKeyLetterRatio" />
+            <!-- U+090B: "ऋ" DEVANAGARI LETTER VOCALIC R -->
+            <Key latin:keySpec="&#x090B;" />
+            <!-- U+0950: "ॐ" DEVANAGARI OM -->
+            <Key latin:keySpec="&#x0950;" />
+            <!-- Because the font rendering system prior to API version 16 can't automatically
+                 render dotted circle for incomplete combining letter of some scripts, different
+                 set of Key definitions are needed based on the API version. -->
+            <include latin:keyboardLayout="@xml/keystyle_devanagari_vowel_sign_au" />
+            <Key latin:keyStyle="baseKeyDevanagariVowelSignAu" />
+            <!-- U+0926/U+094D/U+092F: "द्य" DEVANAGARI LETTER DA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER YA -->
+            <Key
+                latin:keySpec="&#x0926;&#x094D;&#x092F;"
+                latin:keyLabelFlags="followKeyLetterRatio" />
             <!-- Because the font rendering system prior to API version 16 can't automatically
                  render dotted circle for incomplete combining letter of some scripts, different
                  set of Key definitions are needed based on the API version. -->
@@ -33,44 +54,36 @@
                  set of Key definitions are needed based on the API version. -->
             <include latin:keyboardLayout="@xml/keystyle_devanagari_vowel_sign_ai" />
             <Key latin:keyStyle="baseKeyDevanagariVowelSignAi" />
-            <!-- U+0930/U+0941: "रु" DEVANAGARI LETTER RA/DEVANAGARI VOWEL SIGN U -->
-            <Key
-                latin:keySpec="&#x0930;&#x0941;"
-                latin:moreKeys="!"
-                latin:keyLabelFlags="followKeyLetterRatio" />
-            <Key
-                latin:keySpec="\?"
-                latin:keyLabelFlags="fontDefault" />
         </case>
         <default>
-            <!-- Because the font rendering system prior to API version 16 can't automatically
-                 render dotted circle for incomplete combining letter of some scripts, different
-                 set of Key definitions are needed based on the API version. -->
-            <include latin:keyboardLayout="@xml/keystyle_devanagari_sign_visarga" />
-            <!-- U+093D: "ऽ" DEVANAGARI SIGN AVAGRAHA -->
-            <Key
-                latin:keyStyle="baseKeyDevanagariSignVisarga"
-                latin:moreKeys="&#x093D;" />
+            <!-- U+0936: "श" DEVANAGARI LETTER SHA -->
+            <Key latin:keySpec="&#x0936;" />
+            <!-- U+0939: "ह" DEVANAGARI LETTER HA -->
+            <Key latin:keySpec="&#x0939;" />
+            <!-- U+0905: "अ" DEVANAGARI LETTER A -->
+            <Key latin:keySpec="&#x0905;" />
+            <!-- U+0916: "ख" DEVANAGARI LETTER KHA -->
+            <Key latin:keySpec="&#x0916;" />
+            <!-- U+0926: "द" DEVANAGARI LETTER DA -->
+            <Key latin:keySpec="&#x0926;" />
+            <!-- U+0932: "ल" DEVANAGARI LETTER LA -->
+            <Key latin:keySpec="&#x0932;" />
             <!-- Because the font rendering system prior to API version 16 can't automatically
                  render dotted circle for incomplete combining letter of some scripts, different
                  set of Key definitions are needed based on the API version. -->
             <include latin:keyboardLayout="@xml/keystyle_devanagari_vowel_sign_e" />
-            <!-- Override more keys with empty definition -->
-            <key-style latin:styleName="moreKeysDevanagariVowelSignE" />
             <Key latin:keyStyle="baseKeyDevanagariVowelSignE" />
-            <!-- U+0964: "।" DEVANAGARI DANDA -->
-            <Key latin:keySpec="&#x0964;" />
-            <!-- U+0930: "र" DEVANAGARI LETTER RA -->
-            <Key
-                latin:keySpec="&#x0930;"
-                latin:moreKeys="!" />
             <!-- Because the font rendering system prior to API version 16 can't automatically
                  render dotted circle for incomplete combining letter of some scripts, different
                  set of Key definitions are needed based on the API version. -->
-            <include latin:keyboardLayout="@xml/keystyle_devanagari_sign_virama" />
+            <include
+                latin:keyboardLayout="@xml/keystyle_devanagari_sign_virama" />
+            <Key latin:keyStyle="baseKeyDevanagariSignVirama" />
+            <!-- U+0930: "र" DEVANAGARI LETTER RA
+                 U+0930/U+0941: "रु" DEVANAGARI LETTER RA/DEVANAGARI VOWEL SIGN U -->
             <Key
-                latin:keyStyle="baseKeyDevanagariSignVirama"
-                latin:moreKeys="\?" />
+                latin:keySpec="&#x0930;"
+                latin:moreKeys="&#x0930;&#x0941;" />
         </default>
     </switch>
 </merge>
diff --git a/java/res/xml/rowkeys_nepali_traditional3_left6.xml b/java/res/xml/rowkeys_nepali_traditional3_left6.xml
deleted file mode 100644
index ade278710db00068e470f9efe004303d669f415d..0000000000000000000000000000000000000000
--- a/java/res/xml/rowkeys_nepali_traditional3_left6.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2013, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
-    <switch>
-        <case latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted">
-            <!-- U+0915/U+094D: "क्" DEVANAGARI LETTER KA/DEVANAGARI SIGN VIRAMA -->
-            <Key
-                latin:keySpec="&#x0915;&#x094D;"
-                latin:keyLabelFlags="followKeyLetterRatio" />
-            <!-- U+0939/U+094D/U+092E: "ह्म" DEVANAGARI LETTER HA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER MA -->
-            <Key
-                latin:keySpec="&#x0939;&#x094D;&#x092E;"
-                latin:keyLabelFlags="followKeyLetterRatio" />
-            <!-- U+090B: "ऋ" DEVANAGARI LETTER VOCALIC R -->
-            <Key latin:keySpec="&#x090B;" />
-            <!-- U+0950: "ॐ" DEVANAGARI OM -->
-            <Key latin:keySpec="&#x0950;" />
-            <!-- Because the font rendering system prior to API version 16 can't automatically
-                 render dotted circle for incomplete combining letter of some scripts, different
-                 set of Key definitions are needed based on the API version. -->
-            <include latin:keyboardLayout="@xml/keystyle_devanagari_vowel_sign_au" />
-            <Key latin:keyStyle="baseKeyDevanagariVowelSignAu" />
-            <!-- U+0926/U+094D/U+092F: "द्य" DEVANAGARI LETTER DA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER YA -->
-            <Key
-                latin:keySpec="&#x0926;&#x094D;&#x092F;"
-                latin:keyLabelFlags="followKeyLetterRatio" />
-        </case>
-        <default>
-            <!-- U+0936: "श" DEVANAGARI LETTER SHA -->
-            <Key latin:keySpec="&#x0936;" />
-            <!-- U+0939: "ह" DEVANAGARI LETTER HA -->
-            <Key latin:keySpec="&#x0939;" />
-            <!-- U+0905: "अ" DEVANAGARI LETTER A -->
-            <Key latin:keySpec="&#x0905;" />
-            <!-- U+0916: "ख" DEVANAGARI LETTER KHA -->
-            <Key latin:keySpec="&#x0916;" />
-            <!-- U+0926: "द" DEVANAGARI LETTER DA -->
-            <Key latin:keySpec="&#x0926;" />
-            <!-- U+0932: "ल" DEVANAGARI LETTER LA -->
-            <Key latin:keySpec="&#x0932;" />
-        </default>
-    </switch>
-</merge>
diff --git a/java/res/xml/rowkeys_nepali_traditional3_right3.xml b/java/res/xml/rowkeys_nepali_traditional3_right3.xml
deleted file mode 100644
index 4db438d81e0bfe01a318eca2773ea568cc5a78c4..0000000000000000000000000000000000000000
--- a/java/res/xml/rowkeys_nepali_traditional3_right3.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2013, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
-    <switch>
-        <case latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted">
-            <!-- Because the font rendering system prior to API version 16 can't automatically
-                 render dotted circle for incomplete combining letter of some scripts, different
-                 set of Key definitions are needed based on the API version. -->
-            <include latin:keyboardLayout="@xml/keystyle_devanagari_sign_anusvara" />
-            <Key latin:keyStyle="baseKeyDevanagariSignAnusvara" />
-            <!-- U+0919: "ङ" DEVANAGARI LETTER NGA -->
-            <Key latin:keySpec="&#x0919;" />
-            <!-- Because the font rendering system prior to API version 16 can't automatically
-                 render dotted circle for incomplete combining letter of some scripts, different
-                 set of Key definitions are needed based on the API version. -->
-            <include latin:keyboardLayout="@xml/keystyle_devanagari_vowel_sign_ai" />
-            <Key latin:keyStyle="baseKeyDevanagariVowelSignAi" />
-        </case>
-        <default>
-            <!-- Because the font rendering system prior to API version 16 can't automatically
-                 render dotted circle for incomplete combining letter of some scripts, different
-                 set of Key definitions are needed based on the API version. -->
-            <include latin:keyboardLayout="@xml/keystyle_devanagari_vowel_sign_e" />
-            <Key latin:keyStyle="baseKeyDevanagariVowelSignE" />
-            <!-- U+0964: "।" DEVANAGARI DANDA -->
-            <Key latin:keySpec="&#x0964;" />
-            <!-- U+0930: "र" DEVANAGARI LETTER RA
-                 U+0930/U+0941: "रु" DEVANAGARI LETTER RA/DEVANAGARI VOWEL SIGN U -->
-            <Key
-                latin:keySpec="&#x0930;"
-                latin:moreKeys="&#x0930;&#x0941;" />
-        </default>
-    </switch>
-</merge>
diff --git a/java/res/xml/rows_nepali_romanized.xml b/java/res/xml/rows_nepali_romanized.xml
index daca3ee86fd26e7a6d29f2d84da7406c7b774804..26737ec8af1475b1f46b267421c54a843a8f4b02 100644
--- a/java/res/xml/rows_nepali_romanized.xml
+++ b/java/res/xml/rows_nepali_romanized.xml
@@ -33,16 +33,18 @@
         <include latin:keyboardLayout="@xml/rowkeys_nepali_romanized2" />
     </Row>
     <Row
-        latin:keyWidth="8.711%p"
+        latin:keyWidth="8.75%p"
         latin:keyLabelFlags="fontNormal"
     >
         <Key
             latin:keyStyle="shiftKeyStyle"
-            latin:keyWidth="10.8%p" />
+            latin:keyWidth="15%p"
+            latin:visualInsetsRight="1%p" />
         <include latin:keyboardLayout="@xml/rowkeys_nepali_romanized3" />
         <Key
             latin:keyStyle="deleteKeyStyle"
-            latin:keyWidth="fillRight" />
+            latin:keyWidth="fillRight"
+            latin:visualInsetsLeft="1%p" />
     </Row>
     <include latin:keyboardLayout="@xml/row_qwerty4" />
 </merge>
diff --git a/java/res/xml/rows_nepali_traditional.xml b/java/res/xml/rows_nepali_traditional.xml
index edcc73a20a2cde4cce56b34a1887edaad082a602..e2e710ce8ba77802e94d98da4ea35cfc154421e9 100644
--- a/java/res/xml/rows_nepali_traditional.xml
+++ b/java/res/xml/rows_nepali_traditional.xml
@@ -40,8 +40,7 @@
         <Key
             latin:keyStyle="shiftKeyStyle"
             latin:keyWidth="10.8%p" />
-        <include latin:keyboardLayout="@xml/rowkeys_nepali_traditional3_left6" />
-        <include latin:keyboardLayout="@xml/rowkeys_nepali_traditional3_right3" />
+        <include latin:keyboardLayout="@xml/rowkeys_nepali_traditional3" />
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyWidth="fillRight" />
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
index 978194a3b65d6e67cbc288fd4fe61183d910d4e3..a81d7ea2a34e9fa7f7c507da37f30752ba7a0db4 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
@@ -136,37 +136,37 @@ public final class KeyboardTextsTable {
         /*  50: 5 */ "additional_morekeys_symbols_8",
         /*  51: 5 */ "additional_morekeys_symbols_9",
         /*  52: 5 */ "additional_morekeys_symbols_0",
-        /*  53: 4 */ "morekeys_nordic_row2_11",
-        /*  54: 4 */ "morekeys_punctuation",
-        /*  55: 4 */ "keyspec_tablet_comma",
-        /*  56: 4 */ "morekeys_tablet_period",
-        /*  57: 3 */ "keyspec_swiss_row1_11",
-        /*  58: 3 */ "keyspec_swiss_row2_10",
-        /*  59: 3 */ "keyspec_swiss_row2_11",
-        /*  60: 3 */ "morekeys_swiss_row1_11",
-        /*  61: 3 */ "morekeys_swiss_row2_10",
-        /*  62: 3 */ "morekeys_swiss_row2_11",
-        /*  63: 3 */ "morekeys_star",
-        /*  64: 3 */ "keyspec_left_parenthesis",
-        /*  65: 3 */ "keyspec_right_parenthesis",
-        /*  66: 3 */ "keyspec_left_square_bracket",
-        /*  67: 3 */ "keyspec_right_square_bracket",
-        /*  68: 3 */ "keyspec_left_curly_bracket",
-        /*  69: 3 */ "keyspec_right_curly_bracket",
-        /*  70: 3 */ "keyspec_less_than",
-        /*  71: 3 */ "keyspec_greater_than",
-        /*  72: 3 */ "keyspec_less_than_equal",
-        /*  73: 3 */ "keyspec_greater_than_equal",
-        /*  74: 3 */ "keyspec_left_double_angle_quote",
-        /*  75: 3 */ "keyspec_right_double_angle_quote",
-        /*  76: 3 */ "keyspec_left_single_angle_quote",
-        /*  77: 3 */ "keyspec_right_single_angle_quote",
-        /*  78: 3 */ "keyspec_comma",
-        /*  79: 3 */ "morekeys_tablet_comma",
-        /*  80: 3 */ "keyspec_period",
-        /*  81: 3 */ "keyhintlabel_period",
-        /*  82: 3 */ "morekeys_period",
-        /*  83: 3 */ "keyspec_tablet_period",
+        /*  53: 5 */ "morekeys_tablet_period",
+        /*  54: 4 */ "morekeys_nordic_row2_11",
+        /*  55: 4 */ "morekeys_punctuation",
+        /*  56: 4 */ "keyspec_tablet_comma",
+        /*  57: 4 */ "keyspec_period",
+        /*  58: 4 */ "morekeys_period",
+        /*  59: 4 */ "keyspec_tablet_period",
+        /*  60: 3 */ "keyspec_swiss_row1_11",
+        /*  61: 3 */ "keyspec_swiss_row2_10",
+        /*  62: 3 */ "keyspec_swiss_row2_11",
+        /*  63: 3 */ "morekeys_swiss_row1_11",
+        /*  64: 3 */ "morekeys_swiss_row2_10",
+        /*  65: 3 */ "morekeys_swiss_row2_11",
+        /*  66: 3 */ "morekeys_star",
+        /*  67: 3 */ "keyspec_left_parenthesis",
+        /*  68: 3 */ "keyspec_right_parenthesis",
+        /*  69: 3 */ "keyspec_left_square_bracket",
+        /*  70: 3 */ "keyspec_right_square_bracket",
+        /*  71: 3 */ "keyspec_left_curly_bracket",
+        /*  72: 3 */ "keyspec_right_curly_bracket",
+        /*  73: 3 */ "keyspec_less_than",
+        /*  74: 3 */ "keyspec_greater_than",
+        /*  75: 3 */ "keyspec_less_than_equal",
+        /*  76: 3 */ "keyspec_greater_than_equal",
+        /*  77: 3 */ "keyspec_left_double_angle_quote",
+        /*  78: 3 */ "keyspec_right_double_angle_quote",
+        /*  79: 3 */ "keyspec_left_single_angle_quote",
+        /*  80: 3 */ "keyspec_right_single_angle_quote",
+        /*  81: 3 */ "keyspec_comma",
+        /*  82: 3 */ "morekeys_tablet_comma",
+        /*  83: 3 */ "keyhintlabel_period",
         /*  84: 3 */ "morekeys_question",
         /*  85: 2 */ "morekeys_h",
         /*  86: 2 */ "morekeys_w",
@@ -298,11 +298,16 @@ public final class KeyboardTextsTable {
         // Label for "switch to symbols" key.
         /* keylabel_to_symbol */ "?123",
         /* additional_morekeys_symbols_1 ~ */
-        EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
-        /* ~ morekeys_nordic_row2_11 */
+        EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
+        /* ~ additional_morekeys_symbols_0 */
+        /* morekeys_tablet_period */ "!text/morekeys_tablet_punctuation",
+        /* morekeys_nordic_row2_11 */ EMPTY,
         /* morekeys_punctuation */ "!autoColumnOrder!8,\\,,?,!,#,!text/keyspec_right_parenthesis,!text/keyspec_left_parenthesis,/,;,',@,:,-,\",+,\\%,&",
         /* keyspec_tablet_comma */ ",",
-        /* morekeys_tablet_period */ "!text/morekeys_tablet_punctuation",
+        // Period key
+        /* keyspec_period */ ".",
+        /* morekeys_period */ "!text/morekeys_punctuation",
+        /* keyspec_tablet_period */ ".",
         /* keyspec_swiss_row1_11 ~ */
         EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
         /* ~ morekeys_swiss_row2_11 */
@@ -335,11 +340,7 @@ public final class KeyboardTextsTable {
         // Comma key
         /* keyspec_comma */ ",",
         /* morekeys_tablet_comma */ EMPTY,
-        // Period key
-        /* keyspec_period */ ".",
         /* keyhintlabel_period */ EMPTY,
-        /* morekeys_period */ "!text/morekeys_punctuation",
-        /* keyspec_tablet_period */ ".",
         // U+00BF: "¿" INVERTED QUESTION MARK
         /* morekeys_question */ "\u00BF",
         /* morekeys_h ~ */
@@ -587,15 +588,17 @@ public final class KeyboardTextsTable {
         // U+066B: "Ù«" ARABIC DECIMAL SEPARATOR
         // U+066C: "Ù¬" ARABIC THOUSANDS SEPARATOR
         /* additional_morekeys_symbols_0 */ "0,\u066B,\u066C",
+        /* morekeys_tablet_period */ "!text/morekeys_arabic_diacritics",
         /* morekeys_nordic_row2_11 */ null,
         /* morekeys_punctuation */ null,
         // U+061F: "ØŸ" ARABIC QUESTION MARK
         // U+060C: "،" ARABIC COMMA
         // U+061B: "Ø›" ARABIC SEMICOLON
         /* keyspec_tablet_comma */ "\u060C",
-        /* morekeys_tablet_period */ "!text/morekeys_arabic_diacritics",
-        /* keyspec_swiss_row1_11 ~ */
-        null, null, null, null, null, null,
+        /* keyspec_period */ null,
+        /* morekeys_period */ "!text/morekeys_arabic_diacritics",
+        /* keyspec_tablet_period ~ */
+        null, null, null, null, null, null, null,
         /* ~ morekeys_swiss_row2_11 */
         // U+2605: "★" BLACK STAR
         // U+066D: "Ù­" ARABIC FIVE POINTED STAR
@@ -623,11 +626,8 @@ public final class KeyboardTextsTable {
         // U+060C: "،" ARABIC COMMA
         /* keyspec_comma */ "\u060C",
         /* morekeys_tablet_comma */ "!fixedColumnOrder!4,:,!,\u061F,\u061B,-,\",\'",
-        /* keyspec_period */ null,
         // U+0651: "Ù‘" ARABIC SHADDA
         /* keyhintlabel_period */ "\u0651",
-        /* morekeys_period */ "!text/morekeys_arabic_diacritics",
-        /* keyspec_tablet_period */ null,
         // U+00BF: "¿" INVERTED QUESTION MARK
         /* morekeys_question */ "?,\u00BF",
         /* morekeys_h ~ */
@@ -877,14 +877,14 @@ public final class KeyboardTextsTable {
         /* morekeys_g ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null, null,
+        null, null, null, null, null, null, null, null,
         /* ~ morekeys_nordic_row2_11 */
         // U+00B7: "·" MIDDLE DOT
         /* morekeys_punctuation */ "!autoColumnOrder!9,\\,,?,!,\u00B7,#,),(,/,;,',@,:,-,\",+,\\%,&",
         /* keyspec_tablet_comma ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null, null, null, null, null, null, null,
+        null, null, null, null, null, null, null, null, null, null, null,
         /* ~ keyspec_south_slavic_row3_8 */
         /* morekeys_tablet_punctuation */ "!autoColumnOrder!8,\\,,',\u00B7,#,),(,/,;,@,:,-,\",+,\\%,&",
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
@@ -1038,8 +1038,8 @@ public final class KeyboardTextsTable {
         /* morekeys_nordic_row2_10 */ "\u00E4",
         /* keyspec_east_slavic_row1_9 ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null, null, null, null, null, null,
-        /* ~ additional_morekeys_symbols_0 */
+        null, null, null, null, null, null, null, null, null, null, null, null,
+        /* ~ morekeys_tablet_period */
         // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
         /* morekeys_nordic_row2_11 */ "\u00F6",
     };
@@ -1096,8 +1096,8 @@ public final class KeyboardTextsTable {
         /* morekeys_r ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null, null,
-        /* ~ morekeys_tablet_period */
+        null, null, null, null, null, null, null, null, null, null,
+        /* ~ keyspec_tablet_period */
         // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
         /* keyspec_swiss_row1_11 */ "\u00FC",
         // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
@@ -1378,7 +1378,7 @@ public final class KeyboardTextsTable {
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null,
+        null, null,
         /* ~ morekeys_nordic_row2_11 */
         // U+00A1: "¡" INVERTED EXCLAMATION MARK
         // U+00BF: "¿" INVERTED QUESTION MARK
@@ -1597,6 +1597,7 @@ public final class KeyboardTextsTable {
         // U+066B: "Ù«" ARABIC DECIMAL SEPARATOR
         // U+066C: "Ù¬" ARABIC THOUSANDS SEPARATOR
         /* additional_morekeys_symbols_0 */ "0,\u066B,\u066C",
+        /* morekeys_tablet_period */ "!text/morekeys_arabic_diacritics",
         /* morekeys_nordic_row2_11 */ null,
         /* morekeys_punctuation */ null,
         // U+060C: "،" ARABIC COMMA
@@ -1605,9 +1606,10 @@ public final class KeyboardTextsTable {
         // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
         // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
         /* keyspec_tablet_comma */ "\u060C",
-        /* morekeys_tablet_period */ "!text/morekeys_arabic_diacritics",
-        /* keyspec_swiss_row1_11 ~ */
-        null, null, null, null, null, null,
+        /* keyspec_period */ null,
+        /* morekeys_period */ "!text/morekeys_arabic_diacritics",
+        /* keyspec_tablet_period ~ */
+        null, null, null, null, null, null, null,
         /* ~ morekeys_swiss_row2_11 */
         // U+2605: "★" BLACK STAR
         // U+066D: "Ù­" ARABIC FIVE POINTED STAR
@@ -1629,11 +1631,8 @@ public final class KeyboardTextsTable {
         // U+060C: "،" ARABIC COMMA
         /* keyspec_comma */ "\u060C",
         /* morekeys_tablet_comma */ "!fixedColumnOrder!4,:,!,\u061F,\u061B,-,!text/keyspec_left_double_angle_quote,!text/keyspec_right_double_angle_quote",
-        /* keyspec_period */ null,
         // U+064B: "Ù‹" ARABIC FATHATAN
         /* keyhintlabel_period */ "\u064B",
-        /* morekeys_period */ "!text/morekeys_arabic_diacritics",
-        /* keyspec_tablet_period */ null,
         // U+00BF: "¿" INVERTED QUESTION MARK
         /* morekeys_question */ "?,\u00BF",
         /* morekeys_h ~ */
@@ -1737,8 +1736,8 @@ public final class KeyboardTextsTable {
         /* morekeys_nordic_row2_10 */ "\u00F8",
         /* keyspec_east_slavic_row1_9 ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null, null, null, null, null, null,
-        /* ~ additional_morekeys_symbols_0 */
+        null, null, null, null, null, null, null, null, null, null, null, null,
+        /* ~ morekeys_tablet_period */
         // U+00E6: "æ" LATIN SMALL LETTER AE
         /* morekeys_nordic_row2_11 */ "\u00E6",
     };
@@ -1800,8 +1799,9 @@ public final class KeyboardTextsTable {
         /* morekeys_z ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        /* ~ morekeys_tablet_period */
+        null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+        null, null,
+        /* ~ keyspec_tablet_period */
         // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
         /* keyspec_swiss_row1_11 */ "\u00E8",
         // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
@@ -1921,17 +1921,12 @@ public final class KeyboardTextsTable {
         /* additional_morekeys_symbols_8 */ "8",
         /* additional_morekeys_symbols_9 */ "9",
         /* additional_morekeys_symbols_0 */ "0",
+        /* morekeys_tablet_period */ "!autoColumnOrder!8,\\,,.,',#,),(,/,;,@,:,-,\",+,\\%,&",
         /* morekeys_nordic_row2_11 ~ */
         null, null, null,
         /* ~ keyspec_tablet_comma */
-        /* morekeys_tablet_period */ "!autoColumnOrder!8,\\,,.,',#,),(,/,;,@,:,-,\",+,\\%,&",
-        /* keyspec_swiss_row1_11 ~ */
-        null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null, null, null,
-        /* ~ morekeys_tablet_comma */
         // U+0964: "।" DEVANAGARI DANDA
         /* keyspec_period */ "\u0964",
-        /* keyhintlabel_period */ null,
         /* morekeys_period */ "!autoColumnOrder!9,\\,,.,?,!,#,),(,/,;,',@,:,-,\",+,\\%,&",
         /* keyspec_tablet_period */ "\u0964",
     };
@@ -2065,8 +2060,10 @@ public final class KeyboardTextsTable {
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null,
-        /* ~ morekeys_nordic_row2_11 */
+        null, null, null,
+        /* ~ additional_morekeys_symbols_0 */
+        /* morekeys_tablet_period */ "!text/morekeys_punctuation",
+        /* morekeys_nordic_row2_11 */ null,
         // U+055E: "Õž" ARMENIAN QUESTION MARK
         // U+055C: "՜" ARMENIAN EXCLAMATION MARK
         // U+055A: "Õš" ARMENIAN APOSTROPHE
@@ -2079,7 +2076,10 @@ public final class KeyboardTextsTable {
         // U+055F: "ÕŸ" ARMENIAN ABBREVIATION MARK
         /* morekeys_punctuation */ "!autoColumnOrder!8,\\,,\u055E,\u055C,.,\u055A,\u0559,?,!,\u055D,\u055B,\u058A,\u00BB,\u00AB,\u055F,;,:",
         /* keyspec_tablet_comma */ "\u055D",
-        /* morekeys_tablet_period */ "!text/morekeys_punctuation",
+        // U+0589: "Ö‰" ARMENIAN FULL STOP
+        /* keyspec_period */ "\u0589",
+        /* morekeys_period */ null,
+        /* keyspec_tablet_period */ "\u0589",
         /* keyspec_swiss_row1_11 ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null,
@@ -2091,11 +2091,7 @@ public final class KeyboardTextsTable {
         // U+055D: "՝" ARMENIAN COMMA
         /* keyspec_comma */ "\u055D",
         /* morekeys_tablet_comma */ null,
-        // U+0589: "Ö‰" ARMENIAN FULL STOP
-        /* keyspec_period */ "\u0589",
         /* keyhintlabel_period */ null,
-        /* morekeys_period */ null,
-        /* keyspec_tablet_period */ "\u0589",
         // U+055E: "Õž" ARMENIAN QUESTION MARK
         // U+00BF: "¿" INVERTED QUESTION MARK
         /* morekeys_question */ "\u055E,\u00BF",
@@ -2216,8 +2212,8 @@ public final class KeyboardTextsTable {
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null,
-        /* ~ morekeys_tablet_period */
+        null, null, null, null, null, null, null, null, null,
+        /* ~ keyspec_tablet_period */
         // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
         /* keyspec_swiss_row1_11 */ "\u00FC",
         // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
@@ -2254,7 +2250,7 @@ public final class KeyboardTextsTable {
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null,
+        null, null, null, null, null, null, null, null, null,
         /* ~ morekeys_swiss_row2_11 */
         // U+2605: "★" BLACK STAR
         /* morekeys_star */ "\u2605",
@@ -2284,7 +2280,7 @@ public final class KeyboardTextsTable {
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null, null,
+        null, null, null, null,
         /* ~ morekeys_currency_dollar */
         // U+00B1: "±" PLUS-MINUS SIGN
         // U+FB29: "﬩" HEBREW LETTER ALTERNATIVE PLUS SIGN
@@ -2799,21 +2795,21 @@ public final class KeyboardTextsTable {
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null,
+        null, null, null, null, null,
         /* ~ morekeys_nordic_row2_11 */
         /* morekeys_punctuation */ "!autoColumnOrder!9,\u104A,.,?,!,#,),(,/,;,...,',@,:,-,\",+,\\%,&",
         // U+104A: "၊" MYANMAR SIGN LITTLE SECTION
         // U+104B: "။" MYANMAR SIGN SECTION
         /* keyspec_tablet_comma */ "\u104A",
-        /* morekeys_tablet_period ~ */
+        /* keyspec_period */ "\u104B",
+        /* morekeys_period */ null,
+        /* keyspec_tablet_period */ "\u104B",
+        /* keyspec_swiss_row1_11 ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null, null, null,
+        null, null, null, null, null, null, null,
         /* ~ keyspec_comma */
         /* morekeys_tablet_comma */ "\\,",
-        /* keyspec_period */ "\u104B",
         /* keyhintlabel_period */ "\u104A",
-        /* morekeys_period */ null,
-        /* keyspec_tablet_period */ "\u104B",
         /* morekeys_question ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null,
         /* ~ keyspec_south_slavic_row3_8 */
@@ -2873,8 +2869,8 @@ public final class KeyboardTextsTable {
         /* morekeys_nordic_row2_10 */ "\u00F6",
         /* keyspec_east_slavic_row1_9 ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null, null, null, null, null, null,
-        /* ~ additional_morekeys_symbols_0 */
+        null, null, null, null, null, null, null, null, null, null, null, null,
+        /* ~ morekeys_tablet_period */
         // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS
         /* morekeys_nordic_row2_11 */ "\u00E4",
     };
@@ -2930,6 +2926,14 @@ public final class KeyboardTextsTable {
         /* additional_morekeys_symbols_8 */ "8",
         /* additional_morekeys_symbols_9 */ "9",
         /* additional_morekeys_symbols_0 */ "0",
+        /* morekeys_tablet_period */ "!autoColumnOrder!8,.,\\,,',#,),(,/,;,@,:,-,\",+,\\%,&",
+        /* morekeys_nordic_row2_11 ~ */
+        null, null, null,
+        /* ~ keyspec_tablet_comma */
+        // U+0964: "।" DEVANAGARI DANDA
+        /* keyspec_period */ "\u0964",
+        /* morekeys_period */ "!autoColumnOrder!9,.,\\,,?,!,#,),(,/,;,',@,:,-,\",+,\\%,&",
+        /* keyspec_tablet_period */ "\u0964",
     };
 
     /* Locale nl: Dutch */
@@ -3510,8 +3514,8 @@ public final class KeyboardTextsTable {
         /* morekeys_nordic_row2_10 */ "\u00F8,\u0153",
         /* keyspec_east_slavic_row1_9 ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null, null, null, null, null, null,
-        /* ~ additional_morekeys_symbols_0 */
+        null, null, null, null, null, null, null, null, null, null, null, null,
+        /* ~ morekeys_tablet_period */
         // U+00E6: "æ" LATIN SMALL LETTER AE
         /* morekeys_nordic_row2_11 */ "\u00E6",
     };
@@ -4153,25 +4157,25 @@ public final class KeyboardTextsTable {
         "bn_IN"  , TEXTS_bn_IN, /*   2/ 12 Bengali (India) */
         "ca"     , TEXTS_ca,    /*  11/ 99 Catalan */
         "cs"     , TEXTS_cs,    /*  17/ 21 Czech */
-        "da"     , TEXTS_da,    /*  19/ 54 Danish */
-        "de"     , TEXTS_de,    /*  16/ 63 German */
+        "da"     , TEXTS_da,    /*  19/ 55 Danish */
+        "de"     , TEXTS_de,    /*  16/ 66 German */
         "el"     , TEXTS_el,    /*   1/  5 Greek */
         "en"     , TEXTS_en,    /*   8/ 10 English */
         "eo"     , TEXTS_eo,    /*  26/126 Esperanto */
-        "es"     , TEXTS_es,    /*   8/ 55 Spanish */
+        "es"     , TEXTS_es,    /*   8/ 56 Spanish */
         "et_EE"  , TEXTS_et_EE, /*  22/ 27 Estonian (Estonia) */
         "eu_ES"  , TEXTS_eu_ES, /*   7/  8 Basque (Spain) */
         "fa"     , TEXTS_fa,    /*  58/133 Persian */
-        "fi"     , TEXTS_fi,    /*  10/ 54 Finnish */
-        "fr"     , TEXTS_fr,    /*  13/ 63 French */
+        "fi"     , TEXTS_fi,    /*  10/ 55 Finnish */
+        "fr"     , TEXTS_fr,    /*  13/ 66 French */
         "gl_ES"  , TEXTS_gl_ES, /*   7/  8 Gallegan (Spain) */
-        "hi"     , TEXTS_hi,    /*  27/ 84 Hindi */
+        "hi"     , TEXTS_hi,    /*  27/ 60 Hindi */
         "hi_ZZ"  , TEXTS_hi_ZZ, /*   9/118 Hindi (ZZ) */
         "hr"     , TEXTS_hr,    /*   9/ 20 Croatian */
         "hu"     , TEXTS_hu,    /*   9/ 20 Hungarian */
         "hy_AM"  , TEXTS_hy_AM, /*   9/134 Armenian (Armenia) */
         "is"     , TEXTS_is,    /*  10/ 16 Icelandic */
-        "it"     , TEXTS_it,    /*  11/ 63 Italian */
+        "it"     , TEXTS_it,    /*  11/ 66 Italian */
         "iw"     , TEXTS_iw,    /*  20/131 Hebrew */
         "ka_GE"  , TEXTS_ka_GE, /*   3/ 11 Georgian (Georgia) */
         "kk"     , TEXTS_kk,    /*  15/129 Kazakh */
@@ -4186,8 +4190,8 @@ public final class KeyboardTextsTable {
         "mn_MN"  , TEXTS_mn_MN, /*   2/ 12 Mongolian (Mongolia) */
         "mr_IN"  , TEXTS_mr_IN, /*  23/ 53 Marathi (India) */
         "my_MM"  , TEXTS_my_MM, /*   8/ 98 Burmese (Myanmar) */
-        "nb"     , TEXTS_nb,    /*  11/ 54 Norwegian Bokmål */
-        "ne_NP"  , TEXTS_ne_NP, /*  23/ 53 Nepali (Nepal) */
+        "nb"     , TEXTS_nb,    /*  11/ 55 Norwegian Bokmål */
+        "ne_NP"  , TEXTS_ne_NP, /*  27/ 60 Nepali (Nepal) */
         "nl"     , TEXTS_nl,    /*   9/ 13 Dutch */
         "pl"     , TEXTS_pl,    /*  10/ 17 Polish */
         "pt"     , TEXTS_pt,    /*   6/  8 Portuguese */
@@ -4199,7 +4203,7 @@ public final class KeyboardTextsTable {
         "sl"     , TEXTS_sl,    /*   8/ 20 Slovenian */
         "sr"     , TEXTS_sr,    /*  11/ 97 Serbian */
         "sr_ZZ"  , TEXTS_sr_ZZ, /*  14/118 Serbian (ZZ) */
-        "sv"     , TEXTS_sv,    /*  21/ 54 Swedish */
+        "sv"     , TEXTS_sv,    /*  21/ 55 Swedish */
         "sw"     , TEXTS_sw,    /*   9/ 18 Swahili */
         "ta_IN"  , TEXTS_ta_IN, /*   2/ 12 Tamil (India) */
         "ta_LK"  , TEXTS_ta_LK, /*   2/ 12 Tamil (Sri Lanka) */
diff --git a/tests/src/com/android/inputmethod/keyboard/layout/NepaliRomanized.java b/tests/src/com/android/inputmethod/keyboard/layout/NepaliRomanized.java
index 640b63dd6a88914cdc10f6a91ee7430580400a60..299cb61b276d04bc5fe0bdb65c5d2096e0b00df4 100644
--- a/tests/src/com/android/inputmethod/keyboard/layout/NepaliRomanized.java
+++ b/tests/src/com/android/inputmethod/keyboard/layout/NepaliRomanized.java
@@ -33,26 +33,17 @@ public final class NepaliRomanized extends LayoutBase {
     private static final String LAYOUT_NAME = "nepali_romanized";
 
     public NepaliRomanized(final Locale locale) {
-        super(new NepaliRomanizedCustomizer(locale), HindiSymbols.class, SymbolsShifted.class);
+        super(new NepaliCustomizer(locale), HindiSymbols.class, SymbolsShifted.class);
     }
 
     @Override
     public String getName() { return LAYOUT_NAME; }
 
-    private static class NepaliRomanizedCustomizer extends NepaliCustomizer {
-        NepaliRomanizedCustomizer(final Locale locale) { super(locale); }
-
-        @Override
-        public ExpectedKey[] getRightShiftKeys(final boolean isPhone) {
-            return isPhone ? EMPTY_KEYS : EXCLAMATION_AND_QUESTION_MARKS;
-        }
-    }
-
     @Override
-    ExpectedKey[][] getCommonAlphabetLayout(boolean isPhone) { return ALPHABET_COMMON; }
+    ExpectedKey[][] getCommonAlphabetLayout(final boolean isPhone) { return ALPHABET_COMMON; }
 
     @Override
-    ExpectedKey[][] getCommonAlphabetShiftLayout(boolean isPhone, final int elementId) {
+    ExpectedKey[][] getCommonAlphabetShiftLayout(final boolean isPhone, final int elementId) {
         if (elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED) {
             return getCommonAlphabetLayout(isPhone);
         }
@@ -118,11 +109,9 @@ public final class NepaliRomanized extends LayoutBase {
                     // U+0928: "न" DEVANAGARI LETTER NA
                     // U+092E: "म" DEVANAGARI LETTER MA
                     "\u0937", "\u0921", "\u091A", "\u0935", "\u092C", "\u0928", "\u092E",
-                    // U+0964: "।" DEVANAGARI DANDA
-                    // U+093D: "ऽ" DEVANAGARI SIGN AVAGRAHA
-                    key("\u0964", moreKey("\u093D")),
                     // U+094D: "्" DEVANAGARI SIGN VIRAMA
-                    key(SIGN_VIRAMA, "\u094D"))
+                    // U+093D: "ऽ" DEVANAGARI SIGN AVAGRAHA
+                    key(SIGN_VIRAMA, "\u094D", moreKey("\u093D")))
             .build();
 
     private static final ExpectedKey[][] ALPHABET_SHIFTED_COMMON = new ExpectedKeyboardBuilder()
@@ -172,8 +161,6 @@ public final class NepaliRomanized extends LayoutBase {
                     // U+0902: "ं" DEVANAGARI SIGN ANUSVARA
                     key(SIGN_ANUSVARA, "\u0902"),
                     // U+0919: "ङ" DEVANAGARI LETTER NGA
-                    "\u0919",
-                    // U+094D: "्" DEVANAGARI SIGN VIRAMA
-                    key(SIGN_VIRAMA, "\u094D"))
+                    "\u0919")
             .build();
 }
diff --git a/tests/src/com/android/inputmethod/keyboard/layout/NepaliTraditional.java b/tests/src/com/android/inputmethod/keyboard/layout/NepaliTraditional.java
index 17e226f7745e3261d04b4f8f74a89ea929abdb1a..0a2bea342c1750a227bda848abfba66ffecd11db 100644
--- a/tests/src/com/android/inputmethod/keyboard/layout/NepaliTraditional.java
+++ b/tests/src/com/android/inputmethod/keyboard/layout/NepaliTraditional.java
@@ -43,82 +43,20 @@ public final class NepaliTraditional extends LayoutBase {
         NepaliTraditionalCustomizer(final Locale locale) { super(locale); }
 
         @Override
-        public ExpectedKey[] getRightShiftKeys(final boolean isPhone) { return EMPTY_KEYS; }
-
-        @Override
-        public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) {
-            if (isPhone) {
-                // U+094D: "्" DEVANAGARI SIGN VIRAMA
-                return joinKeys(key(SIGN_VIRAMA, "\u094D", PHONE_PUNCTUATION_MORE_KEYS));
-            }
-            return super.getKeysRightToSpacebar(isPhone);
+        public ExpectedKey[] getRightShiftKeys(final boolean isPhone) {
+            return isPhone ? EMPTY_KEYS : EXCLAMATION_AND_QUESTION_MARKS;
         }
     }
 
     @Override
-    ExpectedKey[][] getCommonAlphabetLayout(boolean isPhone) {
-        final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON);
-        if (isPhone) {
-            builder.addKeysOnTheRightOfRow(3,
-                    // U+0947: "े" DEVANAGARI VOWEL SIGN E
-                    // U+0903: "ः‍" DEVANAGARI SIGN VISARGA
-                    // U+093D: "ऽ" DEVANAGARI SIGN AVAGRAHA
-                    key(VOWEL_SIGN_E, "\u0947", joinMoreKeys(
-                            moreKey(SIGN_VISARGA, "\u0903"), "\u093D")),
-                    // U+0964: "।" DEVANAGARI DANDA
-                    "\u0964",
-                    // U+0930: "र" DEVANAGARI LETTER RA
-                    // U+0930/U+0941: "रु" DEVANAGARI LETTER RA/DEVANAGARI VOWEL SIGN U
-                    key("\u0930", moreKey("\u0930\u0941")));
-        } else {
-            builder.addKeysOnTheRightOfRow(3,
-                    // U+0903: "ः" DEVANAGARI SIGN VISARGA
-                    // U+093D: "ऽ" DEVANAGARI SIGN AVAGRAHA
-                    key(SIGN_VISARGA, "\u0903", moreKey("\u093D")),
-                    // U+0947: "े" DEVANAGARI VOWEL SIGN E
-                    key(VOWEL_SIGN_E, "\u0947"),
-                    // U+0964: "।" DEVANAGARI DANDA
-                    "\u0964",
-                    // U+0930: "र" DEVANAGARI LETTER RA
-                    key("\u0930", moreKey("!")),
-                    // U+094D: "्" DEVANAGARI SIGN VIRAMA
-                    key(SIGN_VIRAMA, "\u094D", moreKey("?")));
-        }
-        return builder.build();
-    }
+    ExpectedKey[][] getCommonAlphabetLayout(final boolean isPhone) { return ALPHABET_COMMON; }
 
     @Override
-    ExpectedKey[][] getCommonAlphabetShiftLayout(boolean isPhone, final int elementId) {
+    ExpectedKey[][] getCommonAlphabetShiftLayout(final boolean isPhone, final int elementId) {
         if (elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED) {
             return getCommonAlphabetLayout(isPhone);
         }
-        final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(
-                ALPHABET_SHIFTED_COMMON);
-        if (isPhone) {
-            builder.addKeysOnTheRightOfRow(3,
-                    // U+0902: "ं" DEVANAGARI SIGN ANUSVARA
-                    key(SIGN_ANUSVARA, "\u0902"),
-                    // U+0919: "ङ" DEVANAGARI LETTER NGA
-                    "\u0919",
-                    // U+0948: "ै" DEVANAGARI VOWEL SIGN AI
-                    // U+0936/U+094D/U+0930:
-                    //     "श्र" DEVANAGARI LETTER SHA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER RA
-                    key(VOWEL_SIGN_AI, "\u0948", moreKey("\u0936\u094D\u0930")));
-        } else {
-            builder.addKeysOnTheRightOfRow(3,
-                    // U+0902: "ं" DEVANAGARI SIGN ANUSVARA
-                    key(SIGN_ANUSVARA, "\u0902"),
-                    // U+0919: "ङ" DEVANAGARI LETTER NGA
-                    "\u0919",
-                    // U+0948: "ै" DEVANAGARI VOWEL SIGN AI
-                    // U+0936/U+094D/U+0930:
-                    //     "श्र" DEVANAGARI LETTER SHA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER RA
-                    key(VOWEL_SIGN_AI, "\u0948", moreKey("\u0936\u094D\u0930")),
-                    // U+0930/U+0941: "रु" DEVANAGARI LETTER RA/DEVANAGARI VOWEL SIGN U
-                    key("\u0930\u0941", moreKey("!")),
-                    "?");
-        }
-        return builder.build();
+        return ALPHABET_SHIFTED_COMMON;
     }
 
     private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder()
@@ -181,7 +119,17 @@ public final class NepaliTraditional extends LayoutBase {
                     // U+0916: "ख" DEVANAGARI LETTER KHA
                     // U+0926: "द" DEVANAGARI LETTER DA
                     // U+0932: "ल" DEVANAGARI LETTER LA
-                    "\u0936", "\u0939", "\u0905", "\u0916", "\u0926", "\u0932")
+                    "\u0936", "\u0939", "\u0905", "\u0916", "\u0926", "\u0932",
+                    // U+0947: "े" DEVANAGARI VOWEL SIGN E
+                    // U+0903: "ः‍" DEVANAGARI SIGN VISARGA
+                    // U+093D: "ऽ" DEVANAGARI SIGN AVAGRAHA
+                    key(VOWEL_SIGN_E, "\u0947", joinMoreKeys(
+                            moreKey(SIGN_VISARGA, "\u0903"), "\u093D")),
+                    // U+094D: "्" DEVANAGARI SIGN VIRAMA
+                    key(SIGN_VIRAMA, "\u094D"),
+                    // U+0930: "र" DEVANAGARI LETTER RA
+                    // U+0930/U+0941: "रु" DEVANAGARI LETTER RA/DEVANAGARI VOWEL SIGN U
+                    key("\u0930", moreKey("\u0930\u0941")))
             .build();
 
     private static final ExpectedKey[][] ALPHABET_SHIFTED_COMMON = new ExpectedKeyboardBuilder()
@@ -264,6 +212,14 @@ public final class NepaliTraditional extends LayoutBase {
                     key(VOWEL_SIGN_AU, "\u094C"),
                     // U+0926/U+094D/U+092F:
                     //     "द्य" DEVANAGARI LETTER DA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER YA
-                    "\u0926\u094D\u092F")
+                    "\u0926\u094D\u092F",
+                    // U+0902: "ं" DEVANAGARI SIGN ANUSVARA
+                    key(SIGN_ANUSVARA, "\u0902"),
+                    // U+0919: "ङ" DEVANAGARI LETTER NGA
+                    "\u0919",
+                    // U+0948: "ै" DEVANAGARI VOWEL SIGN AI
+                    // U+0936/U+094D/U+0930:
+                    //     "श्र" DEVANAGARI LETTER SHA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER RA
+                    key(VOWEL_SIGN_AI, "\u0948", moreKey("\u0936\u094D\u0930")))
             .build();
 }
diff --git a/tests/src/com/android/inputmethod/keyboard/layout/customizer/NepaliCustomizer.java b/tests/src/com/android/inputmethod/keyboard/layout/customizer/NepaliCustomizer.java
index 7a00d80a0208550ee9834819f58fc0711a7cd790..264322f54fe90ac894936a612cb470fb0d3604f5 100644
--- a/tests/src/com/android/inputmethod/keyboard/layout/customizer/NepaliCustomizer.java
+++ b/tests/src/com/android/inputmethod/keyboard/layout/customizer/NepaliCustomizer.java
@@ -38,8 +38,30 @@ public class NepaliCustomizer extends DevanagariCustomizer {
         return joinKeys(LANGUAGE_SWITCH_KEY, SPACE_KEY, key(ZWNJ_KEY, ZWJ_KEY));
     }
 
+    @Override
+    public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) {
+        // U+0964: "।" DEVANAGARI DANDA
+        final ExpectedKey periodKey = key("\u0964", getPunctuationMoreKeys(isPhone));
+        return joinKeys(periodKey);
+    }
+
+    @Override
+    public ExpectedKey[] getPunctuationMoreKeys(final boolean isPhone) {
+        return isPhone ? NEPALI_PHONE_PUNCTUATION_MORE_KEYS
+                : NEPALI_TABLET_PUNCTUATION_MORE_KEYS;
+    }
+
     // U+0930/U+0941/U+002E "रु." NEPALESE RUPEE SIGN
     private static final ExpectedKey CURRENCY_NEPALI = key("\u0930\u0941\u002E",
             Symbols.DOLLAR_SIGN, Symbols.CENT_SIGN, Symbols.EURO_SIGN, Symbols.POUND_SIGN,
             Symbols.YEN_SIGN, Symbols.PESO_SIGN);
+
+    // Punctuation more keys for phone form factor.
+    private static final ExpectedKey[] NEPALI_PHONE_PUNCTUATION_MORE_KEYS = joinKeys(
+            ".", ",", "?", "!", "#", ")", "(", "/", ";",
+            "'", "@", ":", "-", "\"", "+", "%", "&");
+    // Punctuation more keys for tablet form factor.
+    private static final ExpectedKey[] NEPALI_TABLET_PUNCTUATION_MORE_KEYS = joinKeys(
+            ".", ",", "'", "#", ")", "(", "/", ";",
+            "@", ":", "-", "\"", "+", "%", "&");
 }
diff --git a/tools/make-keyboard-text/res/values-ne-rNP/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-ne-rNP/donottranslate-more-keys.xml
index 97c50d1b8b3866985509a788692377258f516382..56b594f3a18a74e5c39d1fc8d8e5cebb57790e48 100644
--- a/tools/make-keyboard-text/res/values-ne-rNP/donottranslate-more-keys.xml
+++ b/tools/make-keyboard-text/res/values-ne-rNP/donottranslate-more-keys.xml
@@ -57,4 +57,9 @@
     <string name="additional_morekeys_symbols_0">0</string>
     <!-- U+0930/U+0941/U+002E "रु." NEPALESE RUPEE SIGN -->
     <string name="keyspec_currency">&#x0930;&#x0941;&#x002E;</string>
+    <!-- U+0964: "।" DEVANAGARI DANDA -->
+    <string name="keyspec_period">&#x0964;</string>
+    <string name="keyspec_tablet_period">&#x0964;</string>
+    <string name="morekeys_period">"!autoColumnOrder!9,.,\\,,?,!,#,),(,/,;,',@,:,-,\",+,\\%,&amp;"</string>
+    <string name="morekeys_tablet_period">"!autoColumnOrder!8,.,\\,,',#,),(,/,;,@,:,-,\",+,\\%,&amp;"</string>
 </resources>