diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
index 3b29446..90a0373 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
@@ -126,7 +126,10 @@
         final int count;
         if (!composer.isBatchMode() && composer.size() <= 1) {
             if (TextUtils.isEmpty(prevWord)) return null;
-            count = getBigramsInternal(composer, prevWordCodePointArray);
+            int tmpCount = getBigramsNative(mNativeDict, prevWordCodePointArray,
+                    prevWordCodePointArray.length, mInputCodes, composerSize,
+                    mOutputChars, mOutputScores, MAX_WORD_LENGTH, MAX_BIGRAMS);
+            count = Math.min(tmpCount, MAX_BIGRAMS);
         } else {
             count = getWordsInternal(composer, prevWordCodePointArray, proximityInfo);
         }
@@ -148,19 +151,6 @@
     }
 
     // TODO: move to native code
-    private int getBigramsInternal(final WordComposer codes,
-            final int[] previousWord) {
-        int codesSize = codes.size();
-
-        int count = getBigramsNative(mNativeDict, previousWord, previousWord.length, mInputCodes,
-                codesSize, mOutputChars, mOutputScores, MAX_WORD_LENGTH, MAX_BIGRAMS);
-        if (count > MAX_BIGRAMS) {
-            count = MAX_BIGRAMS;
-        }
-        return count;
-    }
-
-    // TODO: move to native code
     // proximityInfo and/or prevWordForBigrams may not be null.
     private int getWordsInternal(final WordComposer codes,
             final int[] prevWord, final ProximityInfo proximityInfo) {
