diff --git a/native/jni/src/bigram_dictionary.cpp b/native/jni/src/bigram_dictionary.cpp
index 927381f..e05e9d6 100644
--- a/native/jni/src/bigram_dictionary.cpp
+++ b/native/jni/src/bigram_dictionary.cpp
@@ -107,8 +107,8 @@
     mMaxBigrams = maxBigrams;
 
     const uint8_t* const root = DICT;
-    int pos = getBigramListForWord(root, prevWord, prevWordLength);
-    // getBigramListForWord returns 0 if this word is not in the dictionary or has no bigrams
+    int pos = getBigramListPositionForWord(prevWord, prevWordLength);
+    // getBigramListPositionForWord returns 0 if this word isn't in the dictionary or has no bigrams
     if (0 == pos) return 0;
     int bigramFlags;
     int bigramCount = 0;
@@ -133,8 +133,9 @@
 
 // Returns a pointer to the start of the bigram list.
 // If the word is not found or has no bigrams, this function returns 0.
-int BigramDictionary::getBigramListForWord(const uint8_t* const root,
-        const int32_t *prevWord, const int prevWordLength) {
+int BigramDictionary::getBigramListPositionForWord(const int32_t *prevWord,
+        const int prevWordLength) {
+    const uint8_t* const root = DICT;
     int pos = BinaryFormat::getTerminalPosition(root, prevWord, prevWordLength);
 
     if (NOT_VALID_WORD == pos) return 0;
diff --git a/native/jni/src/bigram_dictionary.h b/native/jni/src/bigram_dictionary.h
index 07e47f0..76f9039 100644
--- a/native/jni/src/bigram_dictionary.h
+++ b/native/jni/src/bigram_dictionary.h
@@ -27,8 +27,7 @@
     BigramDictionary(const unsigned char *dict, int maxWordLength, Dictionary *parentDictionary);
     int getBigrams(const int32_t *word, int length, int *codes, int codesSize,
             unsigned short *outWords, int *frequencies, int maxWordLength, int maxBigrams);
-    int getBigramListForWord(const uint8_t* const root,
-        const int32_t *prevWord, const int prevWordLength);
+    int getBigramListPositionForWord(const int32_t *prevWord, const int prevWordLength);
     ~BigramDictionary();
  private:
     bool addWordBigram(unsigned short *word, int length, int frequency);
diff --git a/native/jni/src/dictionary.h b/native/jni/src/dictionary.h
index 5b9ddb3..e0feeaf 100644
--- a/native/jni/src/dictionary.h
+++ b/native/jni/src/dictionary.h
@@ -33,12 +33,12 @@
             int fullWordMultiplier, int maxWordLength, int maxWords);
 
     int getSuggestions(ProximityInfo *proximityInfo, int *xcoordinates, int *ycoordinates,
-            int *codes, int codesSize, bool useFullEditDistance, unsigned short *outWords,
-            int *frequencies) {
+            int *codes, int codesSize, const int32_t* prevWordChars, const int prevWordLength,
+            bool useFullEditDistance, unsigned short *outWords, int *frequencies) {
         // bigramListPosition is, as an int, the offset of the bigram list in the file.
         // If none, it's zero.
-        // TODO: get this from the bigram dictionary instance
-        const int bigramListPosition = 0;
+        const int bigramListPosition = !prevWordChars ? 0
+                : mBigramDictionary->getBigramListPositionForWord(prevWordChars, prevWordLength);
         return mUnigramDictionary->getSuggestions(proximityInfo, mWordsPriorityQueuePool,
                 mCorrection, xcoordinates, ycoordinates, codes, codesSize, bigramListPosition,
                 useFullEditDistance, outWords, frequencies);
