diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index d0f94bb..62ba8d9 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -926,16 +926,16 @@
             final List<SuggestedWords.SuggestedWordInfo> applicationSuggestedWords =
                     SuggestedWords.getFromApplicationSpecifiedCompletions(
                             applicationSpecifiedCompletions);
-            SuggestedWords.Builder builder = new SuggestedWords.Builder(applicationSuggestedWords,
+            final SuggestedWords suggestedWords = SuggestedWords.getSuggestedWords(
+                    applicationSuggestedWords,
                     false /* typedWordValid */,
                     false /* hasMinimalSuggestion */,
                     false /* allowsToBeAutoCorrected */,
                     false /* isPunctuationSuggestions */,
                     false /* shouldBlockAutoCorrectionBySafetyNet */);
             // When in fullscreen mode, show completions generated by the application
-            final SuggestedWords words = builder.build();
             final boolean isAutoCorrection = false;
-            setSuggestions(words, isAutoCorrection);
+            setSuggestions(suggestedWords, isAutoCorrection);
             setAutoCorrectionIndicator(isAutoCorrection);
             // TODO: is this the right thing to do? What should we auto-correct to in
             // this case? This says to keep whatever the user typed.
@@ -1789,14 +1789,14 @@
             final ArrayList<SuggestedWords.SuggestedWordInfo> typedWordAndPreviousSuggestions =
                     SuggestedWords.getTypedWordAndPreviousSuggestions(
                             typedWord, previousSuggestions);
-            final SuggestedWords.Builder obsoleteSuggestionsBuilder =
-                    new SuggestedWords.Builder(typedWordAndPreviousSuggestions,
+            final SuggestedWords obsoleteSuggestedWords =
+                    SuggestedWords.getSuggestedWords(typedWordAndPreviousSuggestions,
                             false /* typedWordValid */,
                             false /* hasMinimalSuggestion */,
                             false /* allowsToBeAutoCorrected */,
                             false /* isPunctuationSuggestions */,
                             false /* shouldBlockAutoCorrectionBySafetyNet */);
-            showSuggestions(obsoleteSuggestionsBuilder.build(), typedWord);
+            showSuggestions(obsoleteSuggestedWords, typedWord);
         }
     }
 
diff --git a/java/src/com/android/inputmethod/latin/SettingsValues.java b/java/src/com/android/inputmethod/latin/SettingsValues.java
index 7ae9532..df0e169 100644
--- a/java/src/com/android/inputmethod/latin/SettingsValues.java
+++ b/java/src/com/android/inputmethod/latin/SettingsValues.java
@@ -183,13 +183,12 @@
                         KeySpecParser.getLabel(puncSpec)));
             }
         }
-        final SuggestedWords.Builder builder = new SuggestedWords.Builder(puncList,
+        return SuggestedWords.getSuggestedWords(puncList,
                 false /* typedWordValid */,
                 false /* hasMinimalSuggestion */,
                 false /* allowsToBeAutoCorrected */,
                 true /* isPunctuationSuggestions */,
                 false /* shouldBlockAutoCorrectionBySafetyNet */);
-        return builder.build();
     }
 
     private static SuggestedWords createSuggestPuncOutputTextList(final String[] puncs) {
@@ -206,13 +205,12 @@
                 }
             }
         }
-        final SuggestedWords.Builder builder = new SuggestedWords.Builder(puncOutputTextList,
+        return SuggestedWords.getSuggestedWords(puncOutputTextList,
                 false /* typedWordValid */,
                 false /* hasMinimalSuggestion */,
                 false /* allowsToBeAutoCorrected */,
                 true /* isPunctuationSuggestions */,
                 false /* shouldBlockAutoCorrectionBySafetyNet */);
-        return builder.build();
     }
 
     private static String createWordSeparators(final String weakSpaceStrippers,
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index 236a341..fea1b83 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -269,13 +269,13 @@
 
         StringUtils.removeDupes(mSuggestions);
 
-        return new SuggestedWords.Builder(
+        return SuggestedWords.getSuggestedWords(
                 SuggestedWords.getFromCharSequenceList(mSuggestions),
                 false /* typedWordValid */,
                 false /* hasMinimalSuggestion */,
                 false /* allowsToBeAutoCorrected */,
                 false /* isPunctuationSuggestions */,
-                false /* shouldBlockAutoCorrectionBySafetyNet */).build();
+                false /* shouldBlockAutoCorrectionBySafetyNet */);
     }
 
     // TODO: cleanup dictionaries looking up and suggestions building with SuggestedWords.Builder
@@ -445,12 +445,12 @@
         } else {
             shouldBlockAutoCorrectionBySatefyNet = false;
         }
-        return new SuggestedWords.Builder(scoreInfoList,
+        return SuggestedWords.getSuggestedWords(scoreInfoList,
                 !allowsToBeAutoCorrected /* typedWordValid */,
                 autoCorrectionAvailable /* hasMinimalSuggestion */,
                 allowsToBeAutoCorrected /* allowsToBeAutoCorrected */,
                 false /* isPunctuationSuggestions */,
-                shouldBlockAutoCorrectionBySatefyNet).build();
+                shouldBlockAutoCorrectionBySatefyNet);
     }
 
     @Override
diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java
index 5fae06f..758b81e 100644
--- a/java/src/com/android/inputmethod/latin/SuggestedWords.java
+++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java
@@ -33,7 +33,7 @@
     public final boolean mAllowsToBeAutoCorrected;
     private final List<SuggestedWordInfo> mSuggestedWordInfoList;
 
-    SuggestedWords(final boolean typedWordValid,
+    private SuggestedWords(final boolean typedWordValid,
             final boolean hasAutoCorrectionCandidate,
             final boolean isPunctuationSuggestions,
             final boolean shouldBlockAutoCorrectionBySafetyNet,
@@ -76,7 +76,7 @@
                 + " mIsPunctuationSuggestions=" + mIsPunctuationSuggestions;
     }
 
-    public static class Builder {
+    private static class Builder {
         private final boolean mTypedWordValid;
         private final boolean mHasMinimalSuggestion;
         private final boolean mIsPunctuationSuggestions;
@@ -84,7 +84,7 @@
         private final boolean mAllowsToBeAutoCorrected;
         private final List<SuggestedWordInfo> mSuggestedWordInfoList;
 
-        public Builder(final List<SuggestedWordInfo> suggestedWordInfoList,
+        private Builder(final List<SuggestedWordInfo> suggestedWordInfoList,
                 final boolean typedWordValid,
                 final boolean hasMinimalSuggestion,
                 final boolean allowsToBeAutoCorrected,
@@ -105,6 +105,21 @@
         }
     }
 
+    public static SuggestedWords getSuggestedWords(
+            final List<SuggestedWordInfo> suggestedWordInfoList,
+            final boolean typedWordValid,
+            final boolean hasMinimalSuggestion,
+            final boolean allowsToBeAutoCorrected,
+            final boolean isPunctuationSuggestions,
+            final boolean shouldBlockAutoCorrectionBySafetyNet) {
+        return new Builder(suggestedWordInfoList,
+                typedWordValid,
+                hasMinimalSuggestion,
+                allowsToBeAutoCorrected,
+                isPunctuationSuggestions,
+                shouldBlockAutoCorrectionBySafetyNet).build();
+    }
+
     public static ArrayList<SuggestedWordInfo> getFromCharSequenceList(
             final List<CharSequence> wordList) {
         final ArrayList<SuggestedWordInfo> result = new ArrayList<SuggestedWordInfo>();
