diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java
index ebf65630e78d47cd5212eec74ad9896ac3bada43..a0e6056256e21a2805ba91cdd7998ca65be32f07 100644
--- a/java/src/com/android/inputmethod/latin/WordComposer.java
+++ b/java/src/com/android/inputmethod/latin/WordComposer.java
@@ -16,6 +16,7 @@
 
 package com.android.inputmethod.latin;
 
+import com.android.inputmethod.annotations.UsedForTesting;
 import com.android.inputmethod.keyboard.Key;
 import com.android.inputmethod.keyboard.Keyboard;
 import com.android.inputmethod.latin.utils.StringUtils;
@@ -276,6 +277,8 @@ public final class WordComposer {
     /**
      * Add a dummy key by retrieving reasonable coordinates
      */
+    // TODO: make this private or remove it entirely. Right now it's used in the tests
+    @UsedForTesting
     public void addKeyInfo(final int codePoint, final Keyboard keyboard) {
         final int x, y;
         final Key key;
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java
index d6e5b75ad9a535434ea8d04ae09807732fff783d..98a0cfaa7f66c311d301299b67522e4f6d943f33 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java
@@ -312,11 +312,7 @@ public abstract class AndroidWordLevelSpellCheckerSession extends Session {
                             false /* reportAsTypo */);
                 }
                 final WordComposer composer = new WordComposer();
-                final int length = text.length();
-                for (int i = 0; i < length; i = text.offsetByCodePoints(i, 1)) {
-                    final int codePoint = text.codePointAt(i);
-                    composer.addKeyInfo(codePoint, dictInfo.getKeyboard(codePoint));
-                }
+                composer.setComposingWord(text, null /* previousWord */, dictInfo.mKeyboard);
                 // TODO: make a spell checker option to block offensive words or not
                 final ArrayList<SuggestedWordInfo> suggestions =
                         dictInfo.mDictionary.getSuggestions(composer, prevWord,
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/DictAndKeyboard.java b/java/src/com/android/inputmethod/latin/spellcheck/DictAndKeyboard.java
index b77f3e2c5af9c8f67b845c240be02f8ab9b41799..1ffe506815922d524a020fd26d35f024da7d7626 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/DictAndKeyboard.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/DictAndKeyboard.java
@@ -27,7 +27,7 @@ import com.android.inputmethod.keyboard.ProximityInfo;
  */
 public final class DictAndKeyboard {
     public final Dictionary mDictionary;
-    private final Keyboard mKeyboard;
+    public final Keyboard mKeyboard;
     private final Keyboard mManualShiftedKeyboard;
 
     public DictAndKeyboard(
@@ -43,13 +43,6 @@ public final class DictAndKeyboard {
                 keyboardLayoutSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET_MANUAL_SHIFTED);
     }
 
-    public Keyboard getKeyboard(final int codePoint) {
-        if (mKeyboard == null) {
-            return null;
-        }
-        return mKeyboard.getKey(codePoint) != null ? mKeyboard : mManualShiftedKeyboard;
-    }
-
     public ProximityInfo getProximityInfo() {
         return mKeyboard == null ? null : mKeyboard.getProximityInfo();
     }