diff --git a/java/res/xml-sw600dp/key_styles_enter.xml b/java/res/xml-sw600dp/key_styles_enter.xml
index 0227d811b42c5cc958c256d6e8960af170c22642..d066d2d129e971be013837e9aa0e8176fde08714 100644
--- a/java/res/xml-sw600dp/key_styles_enter.xml
+++ b/java/res/xml-sw600dp/key_styles_enter.xml
@@ -22,20 +22,18 @@
     xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
 >
     <!-- Navigate more keys style -->
+    <include latin:keyboardLayout="@xml/key_styles_navigate_more_keys" />
     <switch>
-        <!-- latin:passwordInput="true" -->
         <case
             latin:imeAction="actionNext"
             latin:navigatePrevious="true"
         >
             <key-style
                 latin:styleName="navigateMoreKeysStyle"
-                latin:keyLabelFlags="hasPopupHint|preserveCase"
-                latin:moreKeys="!text/keyspec_action_previous" />
+                latin:parentStyle="navigatePreviousMoreKeysStyle" />
         </case>
         <case
             latin:imeAction="actionNext"
-            latin:navigatePrevious="false"
         >
             <key-style
                 latin:styleName="navigateMoreKeysStyle" />
@@ -46,12 +44,10 @@
         >
             <key-style
                 latin:styleName="navigateMoreKeysStyle"
-                latin:keyLabelFlags="hasPopupHint|preserveCase"
-                latin:moreKeys="!text/keyspec_action_next" />
+                latin:parentStyle="navigateNextMoreKeysStyle" />
         </case>
         <case
             latin:imeAction="actionPrevious"
-            latin:navigateNext="false"
         >
             <key-style
                 latin:styleName="navigateMoreKeysStyle" />
@@ -62,33 +58,21 @@
         >
             <key-style
                 latin:styleName="navigateMoreKeysStyle"
-                latin:keyLabelFlags="hasPopupHint|preserveCase"
-                latin:moreKeys="!fixedColumnOrder!2,!needsDividers!,!text/keyspec_action_previous,!text/keyspec_action_next" />
+                latin:parentStyle="navigatePreviousNextMoreKeysStyle" />
         </case>
         <case
             latin:navigateNext="true"
-            latin:navigatePrevious="false"
         >
             <key-style
                 latin:styleName="navigateMoreKeysStyle"
-                latin:keyLabelFlags="hasPopupHint|preserveCase"
-                latin:moreKeys="!text/keyspec_action_next" />
+                latin:parentStyle="navigateNextMoreKeysStyle" />
         </case>
         <case
-            latin:navigateNext="false"
             latin:navigatePrevious="true"
         >
             <key-style
                 latin:styleName="navigateMoreKeysStyle"
-                latin:keyLabelFlags="hasPopupHint|preserveCase"
-                latin:moreKeys="!text/keyspec_action_previous" />
-        </case>
-        <case
-            latin:navigateNext="false"
-            latin:navigatePrevious="false"
-        >
-            <key-style
-                latin:styleName="navigateMoreKeysStyle" />
+                latin:parentStyle="navigatePreviousMoreKeysStyle" />
         </case>
         <default>
             <key-style
@@ -103,6 +87,7 @@
         latin:keyActionFlags="noKeyPreview"
         latin:backgroundType="action"
         latin:parentStyle="navigateMoreKeysStyle" />
+    <include latin:keyboardLayout="@xml/key_styles_actions" />
     <switch>
         <!-- Shift + Enter in textMultiLine field. -->
         <case
@@ -114,135 +99,54 @@
                 latin:keySpec="!icon/enter_key|!code/key_shift_enter"
                 latin:parentStyle="defaultEnterKeyStyle" />
         </case>
-        <case
-            latin:imeAction="actionGo"
-            latin:isIconDefined="go_key"
-        >
-            <key-style
-                latin:styleName="enterKeyStyle"
-                latin:keySpec="!icon/go_key|!code/key_enter"
-                latin:backgroundType="action"
-                latin:parentStyle="defaultEnterKeyStyle" />
-        </case>
         <case
             latin:imeAction="actionGo"
         >
             <key-style
                 latin:styleName="enterKeyStyle"
-                latin:keySpec="!text/label_go_key|!code/key_enter"
-                latin:parentStyle="defaultEnterKeyStyle" />
+                latin:parentStyle="goActionKeyStyle" />
         </case>
         <case
             latin:imeAction="actionNext"
-            latin:isIconDefined="next_key"
         >
             <key-style
                 latin:styleName="enterKeyStyle"
-                latin:keySpec="!icon/next_key|!code/key_enter"
-                latin:backgroundType="action"
-                latin:parentStyle="defaultEnterKeyStyle" />
-        </case>
-        <case
-            latin:imeAction="actionNext"
-        >
-            <key-style
-                latin:styleName="enterKeyStyle"
-                latin:keySpec="!text/label_next_key|!code/key_enter"
-                latin:parentStyle="defaultEnterKeyStyle" />
+                latin:parentStyle="nextActionKeyStyle" />
         </case>
         <case
             latin:imeAction="actionPrevious"
-            latin:isIconDefined="previous_key"
         >
             <key-style
                 latin:styleName="enterKeyStyle"
-                latin:keySpec="!icon/previous_key|!code/key_enter"
-                latin:backgroundType="action"
-                latin:parentStyle="defaultEnterKeyStyle" />
-        </case>
-        <case
-            latin:imeAction="actionPrevious"
-        >
-            <key-style
-                latin:styleName="enterKeyStyle"
-                latin:keySpec="!text/label_previous_key|!code/key_enter"
-                latin:parentStyle="defaultEnterKeyStyle" />
+                latin:parentStyle="previousActionKeyStyle" />
         </case>
         <case
             latin:imeAction="actionDone"
-            latin:isIconDefined="done_key"
         >
             <key-style
                 latin:styleName="enterKeyStyle"
-                latin:keySpec="!icon/done_key|!code/key_enter"
-                latin:backgroundType="action"
-                latin:parentStyle="defaultEnterKeyStyle" />
-        </case>
-        <case
-            latin:imeAction="actionDone"
-        >
-            <key-style
-                latin:styleName="enterKeyStyle"
-                latin:keySpec="!text/label_done_key|!code/key_enter"
-                latin:parentStyle="defaultEnterKeyStyle" />
+                latin:parentStyle="doneActionKeyStyle" />
         </case>
         <case
             latin:imeAction="actionSend"
-            latin:isIconDefined="send_key"
-        >
-            <key-style
-                latin:styleName="enterKeyStyle"
-                latin:keySpec="!icon/send_key|!code/key_enter"
-                latin:backgroundType="action"
-                latin:parentStyle="defaultEnterKeyStyle" />
-        </case>
-        <case
-            latin:imeAction="actionSend"
-        >
-            <key-style
-                latin:styleName="enterKeyStyle"
-                latin:keySpec="!text/label_send_key|!code/key_enter"
-                latin:parentStyle="defaultEnterKeyStyle" />
-        </case>
-        <case
-            latin:imeAction="actionSearch"
-            latin:isIconDefined="search_key"
         >
             <key-style
                 latin:styleName="enterKeyStyle"
-                latin:keySpec="!icon/search_key|!code/key_enter"
-                latin:backgroundType="action"
-                latin:parentStyle="defaultEnterKeyStyle" />
+                latin:parentStyle="sendActionKeyStyle" />
         </case>
         <case
             latin:imeAction="actionSearch"
         >
             <key-style
                 latin:styleName="enterKeyStyle"
-                latin:keySpec="!text/label_search_key|!code/key_enter"
-                latin:parentStyle="defaultEnterKeyStyle" />
+                latin:parentStyle="searchActionKeyStyle" />
         </case>
         <case
             latin:imeAction="actionCustomLabel"
-            latin:keyboardTheme="ICS|KLP"
         >
             <key-style
                 latin:styleName="enterKeyStyle"
-                latin:keySpec="dummy_label|!code/key_enter"
-                latin:keyLabelFlags="fromCustomActionLabel"
-                latin:backgroundType="action"
-                latin:parentStyle="defaultEnterKeyStyle" />
-        </case>
-        <case
-            latin:imeAction="actionCustomLabel"
-            latin:keyboardTheme="LXXLight|LXXDark"
-        >
-            <key-style
-                latin:styleName="enterKeyStyle"
-                latin:keySpec="dummy_label|!code/key_enter"
-                latin:keyLabelFlags="fromCustomActionLabel"
-                latin:backgroundType="functional"
-                latin:parentStyle="defaultEnterKeyStyle" />
+                latin:parentStyle="customLabelActionKeyStyle" />
         </case>
         <!-- imeAction is either actionNone or actionUnspecified. -->
         <default>
diff --git a/java/res/xml/key_styles_actions.xml b/java/res/xml/key_styles_actions.xml
new file mode 100644
index 0000000000000000000000000000000000000000..83901cad9a4526f7cd63c944003d4a401639e1bb
--- /dev/null
+++ b/java/res/xml/key_styles_actions.xml
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2014, 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"
+>
+    <!-- Go key -->
+    <switch>
+        <case latin:isIconDefined="go_key">
+            <key-style
+                latin:styleName="goActionKeyStyle"
+                latin:keySpec="!icon/go_key|!code/key_enter"
+                latin:parentStyle="defaultEnterKeyStyle" />
+        </case>
+        <default>
+            <key-style
+                latin:styleName="goActionKeyStyle"
+                latin:keySpec="!text/label_go_key|!code/key_enter"
+                latin:parentStyle="defaultEnterKeyStyle" />
+        </default>
+    </switch>
+    <!-- Next key -->
+    <switch>
+        <case latin:isIconDefined="next_key">
+            <key-style
+                latin:styleName="nextActionKeyStyle"
+                latin:keySpec="!icon/next_key|!code/key_enter"
+                latin:parentStyle="defaultEnterKeyStyle" />
+        </case>
+        <default>
+            <key-style
+                latin:styleName="nextActionKeyStyle"
+                latin:keySpec="!text/label_next_key|!code/key_enter"
+                latin:parentStyle="defaultEnterKeyStyle" />
+        </default>
+    </switch>
+    <!-- Previous key -->
+    <switch>
+        <case latin:isIconDefined="previous_key">
+            <key-style
+                latin:styleName="previousActionKeyStyle"
+                latin:keySpec="!icon/previous_key|!code/key_enter"
+                latin:parentStyle="defaultEnterKeyStyle" />
+        </case>
+        <default>
+            <key-style
+                latin:styleName="previousActionKeyStyle"
+                latin:keySpec="!text/label_previous_key|!code/key_enter"
+                latin:parentStyle="defaultEnterKeyStyle" />
+        </default>
+    </switch>
+    <!-- Done key -->
+    <switch>
+        <case latin:isIconDefined="done_key">
+            <key-style
+                latin:styleName="doneActionKeyStyle"
+                latin:keySpec="!icon/done_key|!code/key_enter"
+                latin:parentStyle="defaultEnterKeyStyle" />
+        </case>
+        <default>
+            <key-style
+                latin:styleName="doneActionKeyStyle"
+                latin:keySpec="!text/label_done_key|!code/key_enter"
+                latin:parentStyle="defaultEnterKeyStyle" />
+        </default>
+    </switch>
+    <!-- Send key -->
+    <switch>
+        <case latin:isIconDefined="send_key">
+            <key-style
+                latin:styleName="sendActionKeyStyle"
+                latin:keySpec="!icon/send_key|!code/key_enter"
+                latin:parentStyle="defaultEnterKeyStyle" />
+        </case>
+        <default>
+            <key-style
+                latin:styleName="sendActionKeyStyle"
+                latin:keySpec="!text/label_send_key|!code/key_enter"
+                latin:parentStyle="defaultEnterKeyStyle" />
+        </default>
+    </switch>
+    <!-- Seartch key -->
+    <switch>
+        <case latin:isIconDefined="search_key">
+            <key-style
+                latin:styleName="searchActionKeyStyle"
+                latin:keySpec="!icon/search_key|!code/key_enter"
+                latin:parentStyle="defaultEnterKeyStyle" />
+        </case>
+        <default>
+            <key-style
+                latin:styleName="searchActionKeyStyle"
+                latin:keySpec="!text/label_search_key|!code/key_enter"
+                latin:parentStyle="defaultEnterKeyStyle" />
+        </default>
+    </switch>
+    <switch>
+        <case latin:keyboardTheme="ICS|KLP">
+            <key-style
+                latin:styleName="customLabelActionKeyStyle"
+                latin:keySpec="dummy_label|!code/key_enter"
+                latin:keyLabelFlags="fromCustomActionLabel"
+                latin:backgroundType="action"
+                latin:parentStyle="defaultEnterKeyStyle" />
+        </case>
+        <!-- keyboardTheme="LXXLight|LXXDark" -->
+        <default>
+            <key-style
+                latin:styleName="customLabelActionKeyStyle"
+                latin:keySpec="dummy_label|!code/key_enter"
+                latin:keyLabelFlags="fromCustomActionLabel"
+                latin:backgroundType="functional"
+                latin:parentStyle="defaultEnterKeyStyle" />
+        </default>
+    </switch>
+</merge>
diff --git a/java/res/xml/key_styles_enter.xml b/java/res/xml/key_styles_enter.xml
index 7aea1ceff623568fee2ba00e566fd41d944ec9fb..d6d01b86233c401cc846132205792d755ab53bf3 100644
--- a/java/res/xml/key_styles_enter.xml
+++ b/java/res/xml/key_styles_enter.xml
@@ -21,8 +21,8 @@
 <merge
     xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
 >
-    <!-- TODO: Stop using many conditional cases for keyspec_emoji_action_key. There are way too many to maintain. -->
     <!-- Navigate more keys style -->
+    <include latin:keyboardLayout="@xml/key_styles_navigate_more_keys" />
     <switch>
         <!-- latin:passwordInput="true" -->
         <case
@@ -32,12 +32,10 @@
         >
             <key-style
                 latin:styleName="navigateMoreKeysStyle"
-                latin:keyLabelFlags="hasPopupHint|preserveCase"
-                latin:moreKeys="!text/keyspec_action_previous" />
+                latin:parentStyle="navigatePreviousMoreKeysStyle" />
         </case>
         <case
             latin:imeAction="actionNext"
-            latin:navigatePrevious="false"
             latin:passwordInput="true"
         >
             <key-style
@@ -50,12 +48,10 @@
         >
             <key-style
                 latin:styleName="navigateMoreKeysStyle"
-                latin:keyLabelFlags="hasPopupHint|preserveCase"
-                latin:moreKeys="!text/keyspec_action_next" />
+                latin:parentStyle="navigateNextMoreKeysStyle" />
         </case>
         <case
             latin:imeAction="actionPrevious"
-            latin:navigateNext="false"
             latin:passwordInput="true"
         >
             <key-style
@@ -68,32 +64,25 @@
         >
             <key-style
                 latin:styleName="navigateMoreKeysStyle"
-                latin:keyLabelFlags="hasPopupHint|preserveCase"
-                latin:moreKeys="!fixedColumnOrder!2,!needsDividers!,!text/keyspec_action_previous,!text/keyspec_action_next" />
+                latin:parentStyle="navigatePreviousNextMoreKeysStyle" />
         </case>
         <case
             latin:navigateNext="true"
-            latin:navigatePrevious="false"
             latin:passwordInput="true"
         >
             <key-style
                 latin:styleName="navigateMoreKeysStyle"
-                latin:keyLabelFlags="hasPopupHint|preserveCase"
-                latin:moreKeys="!text/keyspec_action_next" />
+                latin:parentStyle="navigateNextMoreKeysStyle" />
         </case>
         <case
-            latin:navigateNext="false"
             latin:navigatePrevious="true"
             latin:passwordInput="true"
         >
             <key-style
                 latin:styleName="navigateMoreKeysStyle"
-                latin:keyLabelFlags="hasPopupHint|preserveCase"
-                latin:moreKeys="!text/keyspec_action_previous" />
+                latin:parentStyle="navigatePreviousMoreKeysStyle" />
         </case>
         <case
-            latin:navigateNext="false"
-            latin:navigatePrevious="false"
             latin:passwordInput="true"
         >
             <key-style
@@ -107,12 +96,10 @@
         >
             <key-style
                 latin:styleName="navigateMoreKeysStyle"
-                latin:keyLabelFlags="hasPopupHint|preserveCase"
-                latin:moreKeys="!text/keyspec_action_previous" />
+                latin:parentStyle="navigatePreviousMoreKeysStyle" />
         </case>
         <case
             latin:imeAction="actionNext"
-            latin:navigatePrevious="false"
             latin:mode="email|url|phone|number|date|time|datetime"
         >
             <key-style
@@ -125,12 +112,10 @@
         >
             <key-style
                 latin:styleName="navigateMoreKeysStyle"
-                latin:keyLabelFlags="hasPopupHint|preserveCase"
-                latin:moreKeys="!text/keyspec_action_next" />
+                latin:parentStyle="navigateNextMoreKeysStyle" />
         </case>
         <case
             latin:imeAction="actionPrevious"
-            latin:navigateNext="false"
             latin:mode="email|url|phone|number|date|time|datetime"
         >
             <key-style
@@ -143,32 +128,25 @@
         >
             <key-style
                 latin:styleName="navigateMoreKeysStyle"
-                latin:keyLabelFlags="hasPopupHint|preserveCase"
-                latin:moreKeys="!fixedColumnOrder!2,!needsDividers!,!text/keyspec_action_previous,!text/keyspec_action_next" />
+                latin:parentStyle="navigatePreviousNextMoreKeysStyle" />
         </case>
         <case
             latin:navigateNext="true"
-            latin:navigatePrevious="false"
             latin:mode="email|url|phone|number|date|time|datetime"
         >
             <key-style
                 latin:styleName="navigateMoreKeysStyle"
-                latin:keyLabelFlags="hasPopupHint|preserveCase"
-                latin:moreKeys="!text/keyspec_action_next" />
+                latin:parentStyle="navigateNextMoreKeysStyle" />
         </case>
         <case
-            latin:navigateNext="false"
             latin:navigatePrevious="true"
             latin:mode="email|url|phone|number|date|time|datetime"
         >
             <key-style
                 latin:styleName="navigateMoreKeysStyle"
-                latin:keyLabelFlags="hasPopupHint|preserveCase"
-                latin:moreKeys="!text/keyspec_action_previous" />
+                latin:parentStyle="navigatePreviousMoreKeysStyle" />
         </case>
         <case
-            latin:navigateNext="false"
-            latin:navigatePrevious="false"
             latin:mode="email|url|phone|number|date|time|datetime"
         >
             <key-style
@@ -181,17 +159,14 @@
         >
             <key-style
                 latin:styleName="navigateMoreKeysStyle"
-                latin:keyLabelFlags="hasPopupHint|preserveCase"
-                latin:moreKeys="!fixedColumnOrder!2,!needsDividers!,!text/keyspec_emoji_action_key,!text/keyspec_action_previous" />
+                latin:parentStyle="navigateEmojiPreviousMoreKeysStyle" />
         </case>
         <case
             latin:imeAction="actionNext"
-            latin:navigatePrevious="false"
         >
             <key-style
                 latin:styleName="navigateMoreKeysStyle"
-                latin:keyLabelFlags="hasPopupHint|preserveCase"
-                latin:moreKeys="!text/keyspec_emoji_action_key" />
+                latin:parentStyle="navigateEmojiMoreKeysStyle" />
         </case>
         <case
             latin:imeAction="actionPrevious"
@@ -199,17 +174,14 @@
         >
             <key-style
                 latin:styleName="navigateMoreKeysStyle"
-                latin:keyLabelFlags="hasPopupHint|preserveCase"
-                latin:moreKeys="!fixedColumnOrder!2,!needsDividers!,!text/keyspec_emoji_action_key,!text/keyspec_action_next" />
+                latin:parentStyle="navigateEmojiNextMoreKeysStyle" />
         </case>
         <case
             latin:imeAction="actionPrevious"
-            latin:navigateNext="false"
         >
             <key-style
                 latin:styleName="navigateMoreKeysStyle"
-                latin:keyLabelFlags="hasPopupHint|preserveCase"
-                latin:moreKeys="!text/keyspec_emoji_action_key" />
+                latin:parentStyle="navigateEmojiMoreKeysStyle" />
         </case>
         <case
             latin:navigateNext="true"
@@ -217,39 +189,26 @@
         >
             <key-style
                 latin:styleName="navigateMoreKeysStyle"
-                latin:keyLabelFlags="hasPopupHint|preserveCase"
-                latin:moreKeys="!fixedColumnOrder!3,!needsDividers!,!text/keyspec_emoji_action_key,!text/keyspec_action_previous,!text/keyspec_action_next" />
+                latin:parentStyle="navigateEmojiPreviousNextMoreKeysStyle" />
         </case>
         <case
             latin:navigateNext="true"
-            latin:navigatePrevious="false"
         >
             <key-style
                 latin:styleName="navigateMoreKeysStyle"
-                latin:keyLabelFlags="hasPopupHint|preserveCase"
-                latin:moreKeys="!fixedColumnOrder!2,!needsDividers!,!text/keyspec_emoji_action_key,!text/keyspec_action_next" />
+                latin:parentStyle="navigateEmojiNextMoreKeysStyle" />
         </case>
         <case
-            latin:navigateNext="false"
             latin:navigatePrevious="true"
         >
             <key-style
                 latin:styleName="navigateMoreKeysStyle"
-                latin:keyLabelFlags="hasPopupHint|preserveCase"
-                latin:moreKeys="!fixedColumnOrder!2,!needsDividers!,!text/keyspec_emoji_action_key,!text/keyspec_action_previous" />
-        </case>
-        <case
-            latin:navigateNext="false"
-            latin:navigatePrevious="false"
-        >
-            <key-style
-                latin:styleName="navigateMoreKeysStyle"
-                latin:keyLabelFlags="hasPopupHint|preserveCase"
-                latin:moreKeys="!text/keyspec_emoji_action_key" />
+                latin:parentStyle="navigateEmojiPreviousMoreKeysStyle" />
         </case>
         <default>
             <key-style
-                latin:styleName="navigateMoreKeysStyle" />
+                latin:styleName="navigateMoreKeysStyle"
+                latin:parentStyle="navigateEmojiMoreKeysStyle" />
         </default>
     </switch>
     <!-- Enter key style -->
@@ -260,10 +219,7 @@
         latin:keyActionFlags="noKeyPreview"
         latin:backgroundType="action"
         latin:parentStyle="navigateMoreKeysStyle" />
-    <key-style
-        latin:styleName="shiftEnterKeyStyle"
-        latin:keySpec="!icon/enter_key|!code/key_shift_enter"
-        latin:parentStyle="defaultEnterKeyStyle" />
+    <include latin:keyboardLayout="@xml/key_styles_actions" />
     <switch>
         <!-- Shift + Enter in textMultiLine field. -->
         <case
@@ -272,7 +228,8 @@
         >
             <key-style
                 latin:styleName="enterKeyStyle"
-                latin:parentStyle="shiftEnterKeyStyle" />
+                latin:keySpec="!icon/enter_key|!code/key_shift_enter"
+                latin:parentStyle="defaultEnterKeyStyle" />
         </case>
         <!-- Smiley in textShortMessage field.
              This <case> should be after Shift + Enter <case> and before any of action <case>. -->
@@ -285,139 +242,57 @@
         </case>
         <case
             latin:imeAction="actionGo"
-            latin:isIconDefined="go_key"
         >
             <key-style
                 latin:styleName="enterKeyStyle"
-                latin:keySpec="!icon/go_key|!code/key_enter"
-                latin:backgroundType="action"
-                latin:parentStyle="defaultEnterKeyStyle" />
-        </case>
-        <case
-            latin:imeAction="actionGo"
-        >
-            <key-style
-                latin:styleName="enterKeyStyle"
-                latin:keySpec="!text/label_go_key|!code/key_enter"
-                latin:parentStyle="defaultEnterKeyStyle" />
+                latin:parentStyle="goActionKeyStyle" />
         </case>
         <case
             latin:imeAction="actionNext"
-            latin:isIconDefined="next_key"
         >
             <key-style
                 latin:styleName="enterKeyStyle"
-                latin:keySpec="!icon/next_key|!code/key_enter"
-                latin:backgroundType="action"
-                latin:parentStyle="defaultEnterKeyStyle" />
-        </case>
-        <case
-            latin:imeAction="actionNext"
-        >
-            <key-style
-                latin:styleName="enterKeyStyle"
-                latin:keySpec="!text/label_next_key|!code/key_enter"
-                latin:parentStyle="defaultEnterKeyStyle" />
+                latin:parentStyle="nextActionKeyStyle" />
         </case>
         <case
             latin:imeAction="actionPrevious"
-            latin:isIconDefined="previous_key"
         >
             <key-style
                 latin:styleName="enterKeyStyle"
-                latin:keySpec="!icon/previous_key|!code/key_enter"
-                latin:backgroundType="action"
-                latin:parentStyle="defaultEnterKeyStyle" />
-        </case>
-        <case
-            latin:imeAction="actionPrevious"
-        >
-            <key-style
-                latin:styleName="enterKeyStyle"
-                latin:keySpec="!text/label_previous_key|!code/key_enter"
-                latin:parentStyle="defaultEnterKeyStyle" />
+                latin:parentStyle="previousActionKeyStyle" />
         </case>
         <case
             latin:imeAction="actionDone"
-            latin:isIconDefined="done_key"
         >
             <key-style
                 latin:styleName="enterKeyStyle"
-                latin:keySpec="!icon/done_key|!code/key_enter"
-                latin:backgroundType="action"
-                latin:parentStyle="defaultEnterKeyStyle" />
-        </case>
-        <case
-            latin:imeAction="actionDone"
-        >
-            <key-style
-                latin:styleName="enterKeyStyle"
-                latin:keySpec="!text/label_done_key|!code/key_enter"
-                latin:parentStyle="defaultEnterKeyStyle" />
+                latin:parentStyle="doneActionKeyStyle" />
         </case>
         <case
             latin:imeAction="actionSend"
-            latin:isIconDefined="send_key"
-        >
-            <key-style
-                latin:styleName="enterKeyStyle"
-                latin:keySpec="!icon/send_key|!code/key_enter"
-                latin:backgroundType="action"
-                latin:parentStyle="defaultEnterKeyStyle" />
-        </case>
-        <case
-            latin:imeAction="actionSend"
-        >
-            <key-style
-                latin:styleName="enterKeyStyle"
-                latin:keySpec="!text/label_send_key|!code/key_enter"
-                latin:parentStyle="defaultEnterKeyStyle" />
-        </case>
-        <case
-            latin:imeAction="actionSearch"
-            latin:isIconDefined="search_key"
         >
             <key-style
                 latin:styleName="enterKeyStyle"
-                latin:keySpec="!icon/search_key|!code/key_enter"
-                latin:backgroundType="action"
-                latin:parentStyle="defaultEnterKeyStyle" />
+                latin:parentStyle="sendActionKeyStyle" />
         </case>
         <case
             latin:imeAction="actionSearch"
         >
             <key-style
                 latin:styleName="enterKeyStyle"
-                latin:keySpec="!text/label_search_key|!code/key_enter"
-                latin:parentStyle="defaultEnterKeyStyle" />
-        </case>
-        <case
-            latin:imeAction="actionCustomLabel"
-            latin:keyboardTheme="ICS|KLP"
-        >
-            <key-style
-                latin:styleName="enterKeyStyle"
-                latin:keySpec="dummy_label|!code/key_enter"
-                latin:keyLabelFlags="fromCustomActionLabel"
-                latin:backgroundType="action"
-                latin:parentStyle="defaultEnterKeyStyle" />
+                latin:parentStyle="searchActionKeyStyle" />
         </case>
         <case
             latin:imeAction="actionCustomLabel"
-            latin:keyboardTheme="LXXLight|LXXDark"
         >
             <key-style
                 latin:styleName="enterKeyStyle"
-                latin:keySpec="dummy_label|!code/key_enter"
-                latin:keyLabelFlags="fromCustomActionLabel"
-                latin:backgroundType="functional"
-                latin:parentStyle="defaultEnterKeyStyle" />
+                latin:parentStyle="customLabelActionKeyStyle" />
         </case>
         <!-- imeAction is either actionNone or actionUnspecified. -->
         <default>
             <key-style
                 latin:styleName="enterKeyStyle"
-                latin:keySpec="!icon/enter_key|!code/key_enter"
                 latin:parentStyle="defaultEnterKeyStyle" />
         </default>
     </switch>
diff --git a/java/res/xml/key_styles_navigate_more_keys.xml b/java/res/xml/key_styles_navigate_more_keys.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f97114db90485b084005300142220bc3580bdeac
--- /dev/null
+++ b/java/res/xml/key_styles_navigate_more_keys.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2014, 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:keyboardTheme="ICS|KLP">
+            <key-style
+                latin:styleName="navigateNextMoreKeysStyle"
+                latin:keyLabelFlags="hasPopupHint|preserveCase"
+                latin:moreKeys="!text/keyspec_action_next" />
+            <key-style
+                latin:styleName="navigatePreviousMoreKeysStyle"
+                latin:keyLabelFlags="hasPopupHint|preserveCase"
+                latin:moreKeys="!text/keyspec_action_previous" />
+            <key-style
+                latin:styleName="navigatePreviousNextMoreKeysStyle"
+                latin:keyLabelFlags="hasPopupHint|preserveCase"
+                latin:moreKeys="!fixedColumnOrder!2,!needsDividers!,!text/keyspec_action_previous,!text/keyspec_action_next" />
+            <key-style
+                latin:styleName="navigateEmojiMoreKeysStyle"
+                latin:keyLabelFlags="hasPopupHint|preserveCase"
+                latin:moreKeys="!text/keyspec_emoji_action_key" />
+            <key-style
+                latin:styleName="navigateEmojiNextMoreKeysStyle"
+                latin:keyLabelFlags="hasPopupHint|preserveCase"
+                latin:moreKeys="!fixedColumnOrder!2,!needsDividers!,!text/keyspec_emoji_action_key,!text/keyspec_action_next" />
+            <key-style
+                latin:styleName="navigateEmojiPreviousMoreKeysStyle"
+                latin:keyLabelFlags="hasPopupHint|preserveCase"
+                latin:moreKeys="!fixedColumnOrder!2,!needsDividers!,!text/keyspec_emoji_action_key,!text/keyspec_action_previous" />
+            <key-style
+                latin:styleName="navigateEmojiPreviousNextMoreKeysStyle"
+                latin:keyLabelFlags="hasPopupHint|preserveCase"
+                latin:moreKeys="!fixedColumnOrder!3,!needsDividers!,!text/keyspec_emoji_action_key,!text/keyspec_action_previous,!text/keyspec_action_next" />
+        </case>
+        <default>
+            <key-style
+                latin:styleName="navigateNextMoreKeysStyle"
+                latin:keyLabelFlags="hasPopupHint|preserveCase"
+                latin:moreKeys="!icon/next_key|!code/key_action_next" />
+            <key-style
+                latin:styleName="navigatePreviousMoreKeysStyle"
+                latin:keyLabelFlags="hasPopupHint|preserveCase"
+                latin:moreKeys="!icon/previous_key|!code/key_action_previous" />
+            <key-style
+                latin:styleName="navigatePreviousNextMoreKeysStyle"
+                latin:keyLabelFlags="hasPopupHint|preserveCase"
+                latin:moreKeys="!fixedColumnOrder!2,!needsDividers!,!icon/previous_key|!code/key_action_previous,!icon/next_key|!code/key_action_next" />
+            <key-style
+                latin:styleName="navigateEmojiMoreKeysStyle"
+                latin:keyLabelFlags="hasPopupHint|preserveCase"
+                latin:moreKeys="!text/keyspec_emoji_action_key" />
+            <key-style
+                latin:styleName="navigateEmojiNextMoreKeysStyle"
+                latin:keyLabelFlags="hasPopupHint|preserveCase"
+                latin:moreKeys="!fixedColumnOrder!2,!needsDividers!,!text/keyspec_emoji_action_key,!icon/next_key|!code/key_action_next" />
+            <key-style
+                latin:styleName="navigateEmojiPreviousMoreKeysStyle"
+                latin:keyLabelFlags="hasPopupHint|preserveCase"
+                latin:moreKeys="!fixedColumnOrder!2,!needsDividers!,!text/keyspec_emoji_action_key,!icon/previous_key|!code/key_action_previous" />
+            <key-style
+                latin:styleName="navigateEmojiPreviousNextMoreKeysStyle"
+                latin:keyLabelFlags="hasPopupHint|preserveCase"
+                latin:moreKeys="!fixedColumnOrder!3,!needsDividers!,!text/keyspec_emoji_action_key,!icon/previous_key|!code/key_action_previous,!icon/next_key|!code/key_action_next" />
+        </default>
+    </switch>
+</merge>
diff --git a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetNavigateMoreKeysBase.java b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetNavigateMoreKeysBase.java
index 1fce362b534fa141c0b3dcfc23d87eecf61cf506..8a55455d0b8684271f0e93c2919311a72537da47 100644
--- a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetNavigateMoreKeysBase.java
+++ b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetNavigateMoreKeysBase.java
@@ -35,12 +35,24 @@ abstract class KeyboardLayoutSetNavigateMoreKeysBase extends KeyboardLayoutSetTe
     private ExpectedMoreKey mExpectedNavigatePreviousMoreKey;
     private ExpectedMoreKey mExpectedEmojiMoreKey;
 
+    protected ExpectedMoreKey getExpectedNavigateNextMoreKey() {
+        return new ExpectedMoreKey(R.string.label_next_key);
+    }
+
+    protected ExpectedMoreKey getExpectedNavigatePreviousMoreKey() {
+        return new ExpectedMoreKey(R.string.label_previous_key);
+    }
+
+    protected ExpectedMoreKey getExpectedEmojiMoreKey() {
+        return new ExpectedMoreKey(KeyboardIconsSet.NAME_EMOJI_ACTION_KEY);
+    }
+
     @Override
     protected void setUp() throws Exception {
         super.setUp();
-        mExpectedNavigateNextMoreKey = new ExpectedMoreKey(R.string.label_next_key);
-        mExpectedNavigatePreviousMoreKey = new ExpectedMoreKey(R.string.label_previous_key);
-        mExpectedEmojiMoreKey = new ExpectedMoreKey(KeyboardIconsSet.NAME_EMOJI_ACTION_KEY);
+        mExpectedNavigateNextMoreKey = getExpectedNavigateNextMoreKey();
+        mExpectedNavigatePreviousMoreKey =  getExpectedNavigatePreviousMoreKey();
+        mExpectedEmojiMoreKey = getExpectedEmojiMoreKey();
     }
 
     /**
@@ -90,6 +102,7 @@ abstract class KeyboardLayoutSetNavigateMoreKeysBase extends KeyboardLayoutSetTe
             assertEquals(tag + " column",
                     expectedMoreKeys.length, actualKey.getMoreKeysColumnNumber());
         }
+        assertNotNull(tag + " moreKeys", actualMoreKeys);
         assertEquals(tag, expectedMoreKeys.length, actualMoreKeys.length);
         for (int index = 0; index < actualMoreKeys.length; index++) {
             final int expectedLabelResId = expectedMoreKeys[index].mLabelResId;
diff --git a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetNavigateMoreKeysLxxTests.java b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetNavigateMoreKeysLxxTests.java
index 02593cb4996016f598086c7fa01dcce34d2d698d..d2bb41e5d6732aa6688b6b388ff71e099dba7e1c 100644
--- a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetNavigateMoreKeysLxxTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetNavigateMoreKeysLxxTests.java
@@ -18,6 +18,8 @@ package com.android.inputmethod.keyboard;
 
 import android.test.suitebuilder.annotation.SmallTest;
 
+import com.android.inputmethod.keyboard.internal.KeyboardIconsSet;
+
 @SmallTest
 public class KeyboardLayoutSetNavigateMoreKeysLxxTests
         extends KeyboardLayoutSetNavigateMoreKeysBase {
@@ -25,4 +27,14 @@ public class KeyboardLayoutSetNavigateMoreKeysLxxTests
     protected int getKeyboardThemeForTests() {
         return KeyboardTheme.THEME_ID_LXX_LIGHT;
     }
+
+    @Override
+    protected ExpectedMoreKey getExpectedNavigateNextMoreKey() {
+        return new ExpectedMoreKey(KeyboardIconsSet.NAME_NEXT_KEY);
+    }
+
+    @Override
+    protected ExpectedMoreKey getExpectedNavigatePreviousMoreKey() {
+        return new ExpectedMoreKey(KeyboardIconsSet.NAME_PREVIOUS_KEY);
+    }
 }
diff --git a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetTestsBase.java b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetTestsBase.java
index f95ba3caccbefcb0172855a5e28235da171d5eff..a002bbe482842d3d75817b4aeaf3bd7c240e6301 100644
--- a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetTestsBase.java
+++ b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetTestsBase.java
@@ -52,6 +52,7 @@ public abstract class KeyboardLayoutSetTestsBase extends AndroidTestCase {
         final KeyboardTheme keyboardTheme = KeyboardTheme.searchKeyboardThemeById(
                 getKeyboardThemeForTests());
         setContext(new ContextThemeWrapper(getContext(), keyboardTheme.mStyleId));
+        KeyboardLayoutSet.onKeyboardThemeChanged();
 
         final Context context = getContext();
         mScreenMetrics = context.getResources().getInteger(R.integer.config_screen_metrics);