diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 2bbda78..f41972e 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -927,10 +927,10 @@
                     SuggestedWords.Builder.getFromApplicationSpecifiedCompletions(
                             applicationSpecifiedCompletions);
             SuggestedWords.Builder builder = new SuggestedWords.Builder(applicationSuggestedWords,
+                    false /* typedWordValid */,
+                    false /* hasMinimalSuggestion */,
                     false /* allowsToBeAutoCorrected */,
-                    false /* isPunctuationSuggestions */)
-                    .setTypedWordValid(false)
-                    .setHasMinimalSuggestion(false);
+                    false /* isPunctuationSuggestions */);
             // When in fullscreen mode, show completions generated by the application
             final SuggestedWords words = builder.build();
             final boolean isAutoCorrection = false;
@@ -1789,11 +1789,10 @@
                             typedWord, previousSuggestions);
             final SuggestedWords.Builder obsoleteSuggestionsBuilder =
                     new SuggestedWords.Builder(typedWordAndPreviousSuggestions,
+                            false /* typedWordValid */,
+                            false /* hasMinimalSuggestion */,
                             false /* allowsToBeAutoCorrected */,
-                            false /* isPunctuationSuggestions */)
-                            .setTypedWordValid(false)
-                            .setHasMinimalSuggestion(false);
-
+                            false /* isPunctuationSuggestions */);
             showSuggestions(obsoleteSuggestionsBuilder.build(), typedWord);
         }
     }
diff --git a/java/src/com/android/inputmethod/latin/SettingsValues.java b/java/src/com/android/inputmethod/latin/SettingsValues.java
index c5198b3..0a4aea1 100644
--- a/java/src/com/android/inputmethod/latin/SettingsValues.java
+++ b/java/src/com/android/inputmethod/latin/SettingsValues.java
@@ -184,6 +184,8 @@
             }
         }
         final SuggestedWords.Builder builder = new SuggestedWords.Builder(puncList,
+                false /* typedWordValid */,
+                false /* hasMinimalSuggestion */,
                 false /* allowsToBeAutoCorrected */,
                 true /* isPunctuationSuggestions */);
         return builder.build();
@@ -204,6 +206,8 @@
             }
         }
         final SuggestedWords.Builder builder = new SuggestedWords.Builder(puncOutputTextList,
+                false /* typedWordValid */,
+                false /* hasMinimalSuggestion */,
                 false /* allowsToBeAutoCorrected */,
                 true /* isPunctuationSuggestions */);
         return builder.build();
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index 28cbc97..28d3b44 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -271,6 +271,8 @@
 
         return new SuggestedWords.Builder(
                 SuggestedWords.Builder.getFromCharSequenceList(mSuggestions),
+                false /* typedWordValid */,
+                false /* hasMinimalSuggestion */,
                 false /* allowsToBeAutoCorrected */,
                 false /* isPunctuationSuggestions */);
     }
@@ -435,10 +437,11 @@
         }
         // Don't auto-correct words with multiple capital letter
         autoCorrectionAvailable &= !wordComposer.isMostlyCaps();
-        builder = new SuggestedWords.Builder(scoreInfoList, allowsToBeAutoCorrected,
+        builder = new SuggestedWords.Builder(scoreInfoList,
+                !allowsToBeAutoCorrected /* typedWordValid */,
+                autoCorrectionAvailable /* hasMinimalSuggestion */,
+                allowsToBeAutoCorrected /* allowsToBeAutoCorrected */,
                 false /* isPunctuationSuggestions */);
-        builder.setTypedWordValid(!allowsToBeAutoCorrected).setHasMinimalSuggestion(
-                autoCorrectionAvailable);
         if (allowsToBeAutoCorrected && builder.size() > 1 && mAutoCorrectionThreshold > 0
                 && Suggest.shouldBlockAutoCorrectionBySafetyNet(typedWord, builder.getWord(1))) {
             builder.setShouldBlockAutoCorrectionBySafetyNet();
diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java
index f62e99c..144e674 100644
--- a/java/src/com/android/inputmethod/latin/SuggestedWords.java
+++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java
@@ -73,17 +73,21 @@
     }
 
     public static class Builder {
-        private boolean mTypedWordValid;
-        private boolean mHasMinimalSuggestion;
+        private final boolean mTypedWordValid;
+        private final boolean mHasMinimalSuggestion;
         private final boolean mIsPunctuationSuggestions;
         private boolean mShouldBlockAutoCorrectionBySafetyNet;
         private final boolean mAllowsToBeAutoCorrected;
         private final List<SuggestedWordInfo> mSuggestedWordInfoList;
 
         public Builder(final List<SuggestedWordInfo> suggestedWordInfoList,
+                final boolean typedWordValid,
+                final boolean hasMinimalSuggestion,
                 final boolean allowsToBeAutoCorrected,
                 final boolean isPunctuationSuggestions) {
             mSuggestedWordInfoList = suggestedWordInfoList;
+            mTypedWordValid = typedWordValid;
+            mHasMinimalSuggestion = hasMinimalSuggestion;
             mAllowsToBeAutoCorrected = allowsToBeAutoCorrected;
             mIsPunctuationSuggestions = isPunctuationSuggestions;
         }
@@ -106,16 +110,6 @@
             return result;
         }
 
-        public Builder setTypedWordValid(boolean typedWordValid) {
-            mTypedWordValid = typedWordValid;
-            return this;
-        }
-
-        public Builder setHasMinimalSuggestion(boolean hasMinimalSuggestion) {
-            mHasMinimalSuggestion = hasMinimalSuggestion;
-            return this;
-        }
-
         public Builder setShouldBlockAutoCorrectionBySafetyNet() {
             mShouldBlockAutoCorrectionBySafetyNet = true;
             return this;
