diff --git a/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java b/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
index fa3cf2224c94cc9bd79cb045a0f6e92f15d775a7..fdcf0ad4eabb82e45001c33863c44b91a708dec4 100644
--- a/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
+++ b/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
@@ -75,6 +75,7 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
     private final LatinIME mInputMethodService;
     private final LanguageSwitcher mLanguageSwitcher;
 
+    private ModifierKeyState mSymbolKeyState = new ModifierKeyState();
     private KeyboardId mSymbolsId;
     private KeyboardId mSymbolsShiftedId;
 
@@ -382,6 +383,23 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
         mInputView.setShiftLocked(shiftLocked);
     }
 
+    public void onPressSymbol() {
+        mSymbolKeyState.onPress();
+    }
+
+    public void onReleaseSymbol() {
+        mSymbolKeyState.onRelease();
+    }
+
+    public boolean isSymbolMomentary() {
+        return mSymbolKeyState.isMomentary();
+    }
+
+    public void onOtherKeyPressed() {
+        // TODO: shift key state will be handled too.
+        mSymbolKeyState.onOtherKeyPressed();
+    }
+
     public void toggleShift() {
         if (isAlphabetMode())
             return;
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index b3ac17b07c171356e7e77c3d1fa566f4c3564248..c18174b57b51cc41429ac7a990c471df5c5efcd7 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -241,7 +241,6 @@ public class LatinIME extends InputMethodService
 
     // Modifier keys state
     private final ModifierKeyState mShiftKeyState = new ModifierKeyState();
-    private final ModifierKeyState mSymbolKeyState = new ModifierKeyState();
 
     private Tutorial mTutorial;
 
@@ -2323,11 +2322,11 @@ public class LatinIME extends InputMethodService
                 handleShift();
             }
         } else if (distinctMultiTouch && primaryCode == BaseKeyboard.KEYCODE_MODE_CHANGE) {
-            mSymbolKeyState.onPress();
+            switcher.onPressSymbol();
             changeKeyboardMode();
         } else {
             mShiftKeyState.onOtherKeyPressed();
-            mSymbolKeyState.onOtherKeyPressed();
+            switcher.onOtherKeyPressed();
         }
     }
 
@@ -2352,10 +2351,10 @@ public class LatinIME extends InputMethodService
             }
             mShiftKeyState.onRelease();
         } else if (distinctMultiTouch && primaryCode == BaseKeyboard.KEYCODE_MODE_CHANGE) {
-            if (mSymbolKeyState.isMomentary()) {
+            if (switcher.isSymbolMomentary()) {
                 changeKeyboardMode();
             }
-            mSymbolKeyState.onRelease();
+            switcher.onReleaseSymbol();
         }
     }