diff --git a/java/res/values/keycodes.xml b/java/res/values/keycodes.xml
index 4f8bfed..b3f71d2 100644
--- a/java/res/values/keycodes.xml
+++ b/java/res/values/keycodes.xml
@@ -23,10 +23,12 @@
     <integer name="key_tab">9</integer>
     <integer name="key_return">10</integer>
     <integer name="key_space">32</integer>
-    <integer name="key_dummy">0</integer>
     <integer name="key_shift">-1</integer>
     <integer name="key_switch_alpha_symbol">-2</integer>
+    <integer name="key_capslock">-3</integer>
+    <integer name="key_output_text">-4</integer>
     <integer name="key_delete">-5</integer>
     <integer name="key_settings">-6</integer>
     <integer name="key_shortcut">-7</integer>
+    <integer name="key_unspecified">-9</integer>
 </resources>
diff --git a/java/res/xml-sw600dp/kbd_key_styles.xml b/java/res/xml-sw600dp/kbd_key_styles.xml
index 1dd0307..ab90c98 100644
--- a/java/res/xml-sw600dp/kbd_key_styles.xml
+++ b/java/res/xml-sw600dp/kbd_key_styles.xml
@@ -78,14 +78,12 @@
         latin:keyIcon="iconShortcutKey"
         latin:keyIconDisabled="iconDisabledShortcutKey"
         latin:keyActionFlags="noKeyPreview|altCodeWhileTyping"
-        latin:altCode="@integer/key_dummy"
         latin:parentStyle="f2PopupStyle" />
     <key-style
         latin:styleName="settingsKeyStyle"
         latin:code="@integer/key_settings"
         latin:keyIcon="iconSettingsKey"
         latin:keyActionFlags="noKeyPreview|altCodeWhileTyping"
-        latin:altCode="@integer/key_dummy"
         latin:backgroundType="functional" />
     <key-style
         latin:styleName="tabKeyStyle"
diff --git a/java/res/xml-sw768dp/kbd_key_styles.xml b/java/res/xml-sw768dp/kbd_key_styles.xml
index 7292fe1..72a1a4c 100644
--- a/java/res/xml-sw768dp/kbd_key_styles.xml
+++ b/java/res/xml-sw768dp/kbd_key_styles.xml
@@ -60,14 +60,12 @@
         latin:keyIcon="iconShortcutKey"
         latin:keyIconDisabled="iconDisabledShortcutKey"
         latin:keyActionFlags="noKeyPreview|altCodeWhileTyping"
-        latin:altCode="@integer/key_dummy"
         latin:backgroundType="functional" />
     <key-style
         latin:styleName="settingsKeyStyle"
         latin:code="@integer/key_settings"
         latin:keyIcon="iconSettingsKey"
         latin:keyActionFlags="noKeyPreview|altCodeWhileTyping"
-        latin:altCode="@integer/key_dummy"
         latin:backgroundType="functional" />
     <key-style
         latin:styleName="tabKeyStyle"
diff --git a/java/res/xml/kbd_settings_or_tab.xml b/java/res/xml/kbd_settings_or_tab.xml
index b947d18..2d35e3b 100644
--- a/java/res/xml/kbd_settings_or_tab.xml
+++ b/java/res/xml/kbd_settings_or_tab.xml
@@ -26,10 +26,10 @@
             latin:hasSettingsKey="true"
         >
             <!-- Because this settings key is not adjacent to the space key, this key should be
-                 just ignored while typing (altCode=CODE_DUMMY). -->
+                 just ignored while typing (altCode=CODE_UNSPECIFIED). -->
             <Key
                 latin:keyStyle="settingsKeyStyle"
-                latin:altCode="@integer/key_dummy"
+                latin:altCode="@integer/key_unspecified"
                 latin:keyWidth="9.2%p" />
         </case>
         <!-- hasSettingsKey="false" -->
diff --git a/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java b/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java
index 3d5ab05..efaf58f 100644
--- a/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java
+++ b/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java
@@ -142,7 +142,7 @@
         }
 
         // Just attempt to speak the description.
-        if (key.mCode != Keyboard.CODE_DUMMY) {
+        if (key.mCode != Keyboard.CODE_UNSPECIFIED) {
             return getDescriptionForKeyCode(context, keyboard, key, shouldObscure);
         }
 
diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java
index e1e74fc..ebd6150 100644
--- a/java/src/com/android/inputmethod/keyboard/Key.java
+++ b/java/src/com/android/inputmethod/keyboard/Key.java
@@ -198,7 +198,7 @@
         mLabel = label;
         mOutputText = outputText;
         mCode = code;
-        mAltCode = Keyboard.CODE_DUMMY;
+        mAltCode = Keyboard.CODE_UNSPECIFIED;
         mIcon = icon;
         mDisabledIcon = null;
         mPreviewIcon = null;
@@ -299,13 +299,13 @@
             }
             final int firstChar = mLabel.charAt(0);
             mCode = getRtlParenthesisCode(firstChar, params.mIsRtlKeyboard);
-        } else if (code != Keyboard.CODE_UNSPECIFIED) {
-            mCode = code;
+        } else if (code == Keyboard.CODE_UNSPECIFIED && mOutputText != null) {
+            mCode = Keyboard.CODE_OUTPUT_TEXT;
         } else {
-            mCode = Keyboard.CODE_DUMMY;
+            mCode = code;
         }
         mAltCode = style.getInt(keyAttr,
-                R.styleable.Keyboard_Key_altCode, Keyboard.CODE_DUMMY);
+                R.styleable.Keyboard_Key_altCode, Keyboard.CODE_UNSPECIFIED);
         mHashCode = hashCode(this);
 
         keyAttr.recycle();
@@ -508,7 +508,7 @@
      * @param y the y-coordinate of the point
      * @return whether or not the point falls on the key. If the key is attached to an edge, it
      * will assume that all points between the key and the edge are considered to be on the key.
-     * @see #markAsLeftEdge(KeyboardParams) etc.
+     * @see #markAsLeftEdge(Keyboard.Params) etc.
      */
     public boolean isOnKey(int x, int y) {
         return mHitBox.contains(x, y);
@@ -615,7 +615,7 @@
          * This constructor is being used only for divider in more keys keyboard.
          */
         public Spacer(Keyboard.Params params, Drawable icon, int x, int y, int width, int height) {
-            super(params, null, null, icon, Keyboard.CODE_DUMMY, null, x, y, width, height);
+            super(params, null, null, icon, Keyboard.CODE_UNSPECIFIED, null, x, y, width, height);
         }
 
         @Override
diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java
index fad12cc..c1d024c 100644
--- a/java/src/com/android/inputmethod/keyboard/Keyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java
@@ -86,19 +86,20 @@
     public static final int CODE_CLOSING_ANGLE_BRACKET = '>';
     public static final int CODE_DIGIT0 = '0';
     public static final int CODE_PLUS = '+';
+    private static final int MINIMUM_LETTER_CODE = CODE_TAB;
 
-    /** Special keys code. Must be non-positive.
+    /** Special keys code. Must be negative.
      * These should be aligned with values/keycodes.xml
      */
-    public static final int CODE_DUMMY = 0;
     public static final int CODE_SHIFT = -1;
     public static final int CODE_SWITCH_ALPHA_SYMBOL = -2;
     public static final int CODE_CAPSLOCK = -3;
+    public static final int CODE_OUTPUT_TEXT = -4;
     public static final int CODE_DELETE = -5;
     public static final int CODE_SETTINGS = -6;
     public static final int CODE_SHORTCUT = -7;
     // Code value representing the code is not specified.
-    public static final int CODE_UNSPECIFIED = -99;
+    public static final int CODE_UNSPECIFIED = -9;
 
     public final KeyboardId mId;
     public final int mThemeId;
@@ -167,7 +168,7 @@
     }
 
     public Key getKey(int code) {
-        if (code == CODE_DUMMY) {
+        if (code == CODE_UNSPECIFIED) {
             return null;
         }
         final Integer keyCode = code;
@@ -253,7 +254,7 @@
     }
 
     public static boolean isLetterCode(int code) {
-        return code > CODE_DUMMY;
+        return code >= MINIMUM_LETTER_CODE;
     }
 
     public static class Params {
@@ -428,9 +429,9 @@
         case CODE_SHIFT: return "shift";
         case CODE_SWITCH_ALPHA_SYMBOL: return "symbol";
         case CODE_CAPSLOCK: return "capslock";
+        case CODE_OUTPUT_TEXT: return "text";
         case CODE_DELETE: return "delete";
         case CODE_SHORTCUT: return "shortcut";
-        case CODE_DUMMY: return "dummy";
         case CODE_UNSPECIFIED: return "unspec";
         default:
             if (code < 0) Log.w(TAG, "Unknow negative key code=" + code);
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index 7c14b58..2183e8e 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -262,10 +262,8 @@
         final boolean ignoreModifierKey = mIgnoreModifierKey && key.isModifier();
         final boolean alterCode = key.altCodeWhileTyping() && mTimerProxy.isTyping();
         final int code = alterCode ? key.mAltCode : primaryCode;
-        // If code is CODE_DUMMY here, this key will be ignored or generate text.
-        final CharSequence text = (code != Keyboard.CODE_DUMMY) ? null : key.mOutputText;
         if (DEBUG_LISTENER) {
-            Log.d(TAG, "onCodeInput: " + Keyboard.printableCode(code) + " text=" + text
+            Log.d(TAG, "onCodeInput: " + Keyboard.printableCode(code) + " text=" + key.mOutputText
                     + " codes="+ KeyDetector.printableCodes(keyCodes) + " x=" + x + " y=" + y
                     + " ignoreModifier=" + ignoreModifierKey + " alterCode=" + alterCode
                     + " enabled=" + key.isEnabled());
@@ -274,10 +272,10 @@
             return;
         }
         if (key.isEnabled()) {
-            if (code != Keyboard.CODE_DUMMY) {
+            if (code == Keyboard.CODE_OUTPUT_TEXT) {
+                mListener.onTextInput(key.mOutputText);
+            } else if (code != Keyboard.CODE_UNSPECIFIED) {
                 mListener.onCodeInput(code, keyCodes, x, y);
-            } else if (text != null) {
-                mListener.onTextInput(text);
             }
             if (!key.altCodeWhileTyping() && !key.isModifier()) {
                 mTimerProxy.startKeyTypedTimer(sIgnoreSpecialKeyTimeout);
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
index c0adf97..f54bdbb 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
@@ -434,7 +434,8 @@
             }
             break;
         case SWITCH_STATE_SYMBOL_BEGIN:
-            if (!isSpaceCharacter(code) && code >= 0) {
+            if (!isSpaceCharacter(code) && (Keyboard.isLetterCode(code)
+                    || code == Keyboard.CODE_OUTPUT_TEXT)) {
                 mSwitchState = SWITCH_STATE_SYMBOL;
             }
             // Snap back to alpha keyboard mode immediately if user types a quote character.
diff --git a/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParser.java b/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParser.java
index a490b0a..93be31e 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParser.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParser.java
@@ -148,12 +148,12 @@
             return code;
         }
         if (indexOfLabelEnd(moreKeySpec, 0) > 0)
-            return Keyboard.CODE_DUMMY;
+            return Keyboard.CODE_UNSPECIFIED;
         final String label = getLabel(moreKeySpec);
         // Code is automatically generated for one letter label.
         if (label != null && label.length() == 1)
             return label.charAt(0);
-        return Keyboard.CODE_DUMMY;
+        return Keyboard.CODE_UNSPECIFIED;
     }
 
     public static int getIconId(String moreKeySpec) {
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index e6478b6..4cb6055 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1305,7 +1305,7 @@
         ic.commitText(text, 1);
         ic.endBatchEdit();
         mKeyboardSwitcher.updateShiftState();
-        mKeyboardSwitcher.onCodeInput(Keyboard.CODE_DUMMY);
+        mKeyboardSwitcher.onCodeInput(Keyboard.CODE_OUTPUT_TEXT);
         mSpaceState = SPACE_STATE_NONE;
         mEnteredText = text;
         mWordComposer.reset();
