diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index ec40879..a6d2b7a 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1977,23 +1977,23 @@
             return;
         }
 
-        final SuggestedWords.Builder builder;
+        final SuggestedWords suggestedWords;
         if (mCorrectionMode == Suggest.CORRECTION_FULL_BIGRAM) {
             final CharSequence prevWord = EditingUtils.getThisWord(getCurrentInputConnection(),
                     mSettingsValues.mWordSeparators);
             if (!TextUtils.isEmpty(prevWord)) {
-                builder = mSuggest.getBigramPredictionWordBuilder(prevWord);
+                suggestedWords = mSuggest.getBigramPredictionWordBuilder(prevWord).build();
             } else {
-                builder = null;
+                suggestedWords = null;
             }
         } else {
-            builder = null;
+            suggestedWords = null;
         }
 
-        if (null != builder && builder.size() > 0) {
+        if (null != suggestedWords && suggestedWords.size() > 0) {
             // Explicitly supply an empty typed word (the no-second-arg version of
             // showSuggestions will retrieve the word near the cursor, we don't want that here)
-            showSuggestions(builder.build(), "");
+            showSuggestions(suggestedWords, "");
         } else {
             if (!isShowingPunctuationList()) setPunctuationSuggestions();
         }
diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java
index 03ff5de..0def1d4 100644
--- a/java/src/com/android/inputmethod/latin/SuggestedWords.java
+++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java
@@ -141,29 +141,6 @@
                     mIsPunctuationSuggestions, mShouldBlockAutoCorrectionBySafetyNet,
                     mAllowsToBeAutoCorrected, mSuggestedWordInfoList);
         }
-
-        public int size() {
-            return mSuggestedWordInfoList.size();
-        }
-
-        public CharSequence getWord(int pos) {
-            return mSuggestedWordInfoList.get(pos).mWord;
-        }
-
-        public boolean allowsToBeAutoCorrected() {
-            return mAllowsToBeAutoCorrected;
-        }
-
-        @Override
-        public String toString() {
-            // Pretty-print method to help debug
-            return "SuggestedWords.Builder:"
-                    + " mTypedWordValid=" + mTypedWordValid
-                    + " mHasMinimalSuggestion=" + mHasMinimalSuggestion
-                    + " mIsPunctuationSuggestions=" + mIsPunctuationSuggestions
-                    + " mShouldBlockAutoCorrectionBySafetyNet="
-                    + mShouldBlockAutoCorrectionBySafetyNet;
-        }
     }
 
     public static class SuggestedWordInfo {
