diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
index 9bad1a9f3daea02992209f6411f231ac9711fad0..54b1c1f095f24e9116fca48b0665d7851eddc9cf 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
@@ -338,7 +338,11 @@ public class KeyboardState {
             final boolean isShiftLocked = mAlphabetShiftState.isShiftLocked();
             if (mShiftKeyState.isMomentary()) {
                 // After chording input while normal state.
-                setShifted(SwitchActions.UNSHIFT);
+                if (mAlphabetShiftState.isShiftLockShifted()) {
+                    setShiftLocked(true);
+                } else {
+                    setShifted(SwitchActions.UNSHIFT);
+                }
             } else if (isShiftLocked && !mAlphabetShiftState.isShiftLockShifted()
                     && (mShiftKeyState.isPressing() || mShiftKeyState.isPressingOnShifted())
                     && !withSliding) {
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java
index 0394ad73160bd1e9bb72c9b872cc41b469aa6e4f..7ca65cd694569d7cfe64de9501cbc77e45af68af 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java
@@ -52,21 +52,18 @@ public class KeyboardStateMultiTouchTests extends KeyboardStateTestsBase {
         chordingPressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
         chordingPressAndReleaseKey('X', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
 
-        // TODO: This test fails due to bug, though external behavior is correct.
-//        // Release shift key, switch back to alphabet shift locked.
-//        releaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCKED);
-        releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
+        // Release shift key, switch back to alphabet shift locked.
+        releaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCKED);
 
-        // TODO: This test fails due to bug, though external behavior is correct.
-//        // Press symbols key and hold, enter into choring symbols state.
-//        pressKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
-//
-//        // Press/release symbol letter keys.
-//        chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
-//        chordingPressAndReleaseKey('2', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
-//
-//        // Release symbols key, switch back to alphabet shift locked.
-//        releaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED);
+        // Press symbols key and hold, enter into choring symbols state.
+        pressKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
+
+        // Press/release symbol letter keys.
+        chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+        chordingPressAndReleaseKey('2', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+
+        // Release symbols key, switch back to alphabet shift locked.
+        releaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED);
     }
 
     // Symbols key chording input.