diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 22d1a4025..dc5bd2efc 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -922,11 +922,11 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
                 return;
             }
 
-            final List<CharSequence> applicationSuggestedWords =
+            final List<SuggestedWords.SuggestedWordInfo> applicationSuggestedWords =
                     SuggestedWords.Builder.getFromApplicationSpecifiedCompletions(
                             applicationSpecifiedCompletions);
             SuggestedWords.Builder builder = new SuggestedWords.Builder()
-                    .addWords(applicationSuggestedWords, null)
+                    .addWords(applicationSuggestedWords)
                     .setTypedWordValid(false)
                     .setHasMinimalSuggestion(false);
             // When in fullscreen mode, show completions generated by the application
diff --git a/java/src/com/android/inputmethod/latin/SettingsValues.java b/java/src/com/android/inputmethod/latin/SettingsValues.java
index 1f4909f73..7e7702002 100644
--- a/java/src/com/android/inputmethod/latin/SettingsValues.java
+++ b/java/src/com/android/inputmethod/latin/SettingsValues.java
@@ -175,32 +175,36 @@ public class SettingsValues {
     }
 
     private static SuggestedWords createSuggestPuncList(final String[] puncs) {
-        final ArrayList<CharSequence> puncList = new ArrayList<CharSequence>();
+        final ArrayList<SuggestedWords.SuggestedWordInfo> puncList =
+                new ArrayList<SuggestedWords.SuggestedWordInfo>();
         if (puncs != null) {
             for (final String puncSpec : puncs) {
-                puncList.add(KeySpecParser.getLabel(puncSpec));
+                puncList.add(new SuggestedWords.SuggestedWordInfo(
+                        KeySpecParser.getLabel(puncSpec)));
             }
         }
         final SuggestedWords.Builder builder = new SuggestedWords.Builder()
-                .addWords(puncList, null)
+                .addWords(puncList)
                 .setIsPunctuationSuggestions();
         return builder.build();
     }
 
     private static SuggestedWords createSuggestPuncOutputTextList(final String[] puncs) {
-        final ArrayList<CharSequence> puncOutputTextList = new ArrayList<CharSequence>();
+        final ArrayList<SuggestedWords.SuggestedWordInfo> puncOutputTextList =
+                new ArrayList<SuggestedWords.SuggestedWordInfo>();
         if (puncs != null) {
             for (final String puncSpec : puncs) {
                 final String outputText = KeySpecParser.getOutputText(puncSpec);
                 if (outputText != null) {
-                    puncOutputTextList.add(outputText);
+                    puncOutputTextList.add(new SuggestedWords.SuggestedWordInfo(outputText));
                 } else {
-                    puncOutputTextList.add(KeySpecParser.getLabel(puncSpec));
+                    puncOutputTextList.add(new SuggestedWords.SuggestedWordInfo(
+                            KeySpecParser.getLabel(puncSpec)));
                 }
             }
         }
         final SuggestedWords.Builder builder = new SuggestedWords.Builder()
-                .addWords(puncOutputTextList, null)
+                .addWords(puncOutputTextList)
                 .setIsPunctuationSuggestions();
         return builder.build();
     }
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index f17c1d95a..e04a4e8d1 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -291,7 +291,8 @@ public class Suggest implements Dictionary.WordCallback {
 
         StringUtils.removeDupes(mSuggestions);
 
-        return new SuggestedWords.Builder().addWords(mSuggestions, null)
+        return new SuggestedWords.Builder()
+                .addWords(SuggestedWords.Builder.getFromCharSequenceList(mSuggestions))
                 .setAllowsToBeAutoCorrected(false)
                 .setHasAutoCorrection(false);
     }
@@ -445,11 +446,12 @@ public class Suggest implements Dictionary.WordCallback {
                 scoreInfoList.add(new SuggestedWords.SuggestedWordInfo(mSuggestions.get(i),
                         "--", false));
             }
-            builder = new SuggestedWords.Builder().addWords(mSuggestions, scoreInfoList)
+            builder = new SuggestedWords.Builder().addWords(scoreInfoList)
                     .setAllowsToBeAutoCorrected(allowsToBeAutoCorrected)
                     .setHasAutoCorrection(hasAutoCorrection);
         } else {
-            builder = new SuggestedWords.Builder().addWords(mSuggestions, null)
+            builder = new SuggestedWords.Builder()
+                    .addWords(SuggestedWords.Builder.getFromCharSequenceList(mSuggestions))
                     .setAllowsToBeAutoCorrected(allowsToBeAutoCorrected)
                     .setHasAutoCorrection(hasAutoCorrection);
         }
diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java
index 9959292cb..7dd85f65b 100644
--- a/java/src/com/android/inputmethod/latin/SuggestedWords.java
+++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java
@@ -87,19 +87,17 @@ public class SuggestedWords {
             // Nothing to do here.
         }
 
-        public Builder addWords(List<CharSequence> words,
-                List<SuggestedWordInfo> suggestedWordInfoList) {
-            final int N = words.size();
+        // TODO: the following method is a wrapper to satisfy tests. Update tests and remove it.
+        public Builder addWords(final List<CharSequence> words,
+                final List<SuggestedWordInfo> suggestedWordInfoList) {
+            return addWords(suggestedWordInfoList);
+        }
+
+        public Builder addWords(List<SuggestedWordInfo> suggestedWordInfoList) {
+            final int N = suggestedWordInfoList.size();
             for (int i = 0; i < N; ++i) {
-                final CharSequence word = words.get(i);
-                SuggestedWordInfo suggestedWordInfo = null;
-                if (suggestedWordInfoList != null) {
-                    suggestedWordInfo = suggestedWordInfoList.get(i);
-                }
-                if (suggestedWordInfo == null) {
-                    suggestedWordInfo = new SuggestedWordInfo(word);
-                }
-                addWord(word, suggestedWordInfo);
+                SuggestedWordInfo suggestedWordInfo = suggestedWordInfoList.get(i);
+                addWord(suggestedWordInfo.mWord, suggestedWordInfo);
             }
             return this;
         }
@@ -113,11 +111,20 @@ public class SuggestedWords {
             return this;
         }
 
-        public static List<CharSequence> getFromApplicationSpecifiedCompletions(
+        public static List<SuggestedWordInfo> getFromCharSequenceList(
+                final List<CharSequence> wordList) {
+            final ArrayList<SuggestedWordInfo> result = new ArrayList<SuggestedWordInfo>();
+            for (CharSequence word : wordList) {
+                if (null != word) result.add(new SuggestedWordInfo(word, null, false));
+            }
+            return result;
+        }
+
+        public static List<SuggestedWordInfo> getFromApplicationSpecifiedCompletions(
                 final CompletionInfo[] infos) {
-            final ArrayList<CharSequence> result = new ArrayList<CharSequence>();
+            final ArrayList<SuggestedWordInfo> result = new ArrayList<SuggestedWordInfo>();
             for (CompletionInfo info : infos) {
-                if (null != info) result.add(info.getText());
+                if (null != info) result.add(new SuggestedWordInfo(info.getText(), null, false));
             }
             return result;
         }