diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 478a5c0204bb2041dd18b889d8c26d22b07fed6c..80bf704dbcf97e9415f5f1dffd6f67b3e0e14f27 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -161,7 +161,7 @@
 
     <declare-styleable name="SuggestionStripView">
         <attr name="suggestionStripOption" format="integer">
-            <!-- This should be aligned with SuggestionStripViewParams.AUTO_CORRECT_* and etc. -->
+            <!-- This should be aligned with SuggestionStripLayoutHelper.AUTO_CORRECT_* and etc. -->
             <flag name="autoCorrectBold" value="0x01" />
             <flag name="autoCorrectUnderline" value="0x02" />
             <flag name="validTypedWordBold" value="0x04" />
diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java
index 1f453273b3d27009da2d2acfc0581dc4c92ba743..7a16595a7a999095875085df931ffd5755d6ae8a 100644
--- a/java/src/com/android/inputmethod/latin/SuggestedWords.java
+++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java
@@ -24,6 +24,9 @@ import java.util.Arrays;
 import java.util.HashSet;
 
 public final class SuggestedWords {
+    public static final int INDEX_OF_TYPED_WORD = 0;
+    public static final int INDEX_OF_AUTO_CORRECTION = 1;
+
     private static final ArrayList<SuggestedWordInfo> EMPTY_WORD_INFO_LIST =
             CollectionUtils.newArrayList(0);
     public static final SuggestedWords EMPTY = new SuggestedWords(
@@ -61,12 +64,12 @@ public final class SuggestedWords {
         return mSuggestedWordInfoList.size();
     }
 
-    public String getWord(int pos) {
-        return mSuggestedWordInfoList.get(pos).mWord;
+    public String getWord(final int index) {
+        return mSuggestedWordInfoList.get(index).mWord;
     }
 
-    public SuggestedWordInfo getInfo(int pos) {
-        return mSuggestedWordInfoList.get(pos);
+    public SuggestedWordInfo getInfo(final int index) {
+        return mSuggestedWordInfoList.get(index);
     }
 
     public boolean willAutoCorrect() {
@@ -108,8 +111,8 @@ public final class SuggestedWords {
                 SuggestedWordInfo.KIND_TYPED, Dictionary.TYPE_USER_TYPED));
         alreadySeen.add(typedWord.toString());
         final int previousSize = previousSuggestions.size();
-        for (int pos = 1; pos < previousSize; pos++) {
-            final SuggestedWordInfo prevWordInfo = previousSuggestions.getInfo(pos);
+        for (int index = 1; index < previousSize; index++) {
+            final SuggestedWordInfo prevWordInfo = previousSuggestions.getInfo(index);
             final String prevWord = prevWordInfo.mWord;
             // Filter out duplicate suggestion.
             if (!alreadySeen.contains(prevWord)) {
diff --git a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java
index 09f81d4c7dd5fe0c9a07428ef54dce65afc3a113..322ae5b0fe35d64edb1a43c53b5c86db3416959d 100644
--- a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java
+++ b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java
@@ -61,7 +61,7 @@ public final class MoreSuggestions extends Keyboard {
             super();
         }
 
-        public int layout(final SuggestedWords suggestedWords, final int fromPos,
+        public int layout(final SuggestedWords suggestedWords, final int fromIndex,
                 final int maxWidth, final int minWidth, final int maxRow, final Paint paint,
                 final Resources res) {
             clearKeys();
@@ -70,53 +70,54 @@ public final class MoreSuggestions extends Keyboard {
             final float padding = res.getDimension(R.dimen.more_suggestions_key_horizontal_padding);
 
             int row = 0;
-            int pos = fromPos, rowStartPos = fromPos;
+            int index = fromIndex;
+            int rowStartIndex = fromIndex;
             final int size = Math.min(suggestedWords.size(), SuggestionStripView.MAX_SUGGESTIONS);
-            while (pos < size) {
-                final String word = suggestedWords.getWord(pos);
+            while (index < size) {
+                final String word = suggestedWords.getWord(index);
                 // TODO: Should take care of text x-scaling.
-                mWidths[pos] = (int)(TypefaceUtils.getLabelWidth(word, paint) + padding);
-                final int numColumn = pos - rowStartPos + 1;
+                mWidths[index] = (int)(TypefaceUtils.getLabelWidth(word, paint) + padding);
+                final int numColumn = index - rowStartIndex + 1;
                 final int columnWidth =
                         (maxWidth - mDividerWidth * (numColumn - 1)) / numColumn;
                 if (numColumn > MAX_COLUMNS_IN_ROW
-                        || !fitInWidth(rowStartPos, pos + 1, columnWidth)) {
+                        || !fitInWidth(rowStartIndex, index + 1, columnWidth)) {
                     if ((row + 1) >= maxRow) {
                         break;
                     }
-                    mNumColumnsInRow[row] = pos - rowStartPos;
-                    rowStartPos = pos;
+                    mNumColumnsInRow[row] = index - rowStartIndex;
+                    rowStartIndex = index;
                     row++;
                 }
-                mColumnOrders[pos] = pos - rowStartPos;
-                mRowNumbers[pos] = row;
-                pos++;
+                mColumnOrders[index] = index - rowStartIndex;
+                mRowNumbers[index] = row;
+                index++;
             }
-            mNumColumnsInRow[row] = pos - rowStartPos;
+            mNumColumnsInRow[row] = index - rowStartIndex;
             mNumRows = row + 1;
             mBaseWidth = mOccupiedWidth = Math.max(
-                    minWidth, calcurateMaxRowWidth(fromPos, pos));
+                    minWidth, calcurateMaxRowWidth(fromIndex, index));
             mBaseHeight = mOccupiedHeight = mNumRows * mDefaultRowHeight + mVerticalGap;
-            return pos - fromPos;
+            return index - fromIndex;
         }
 
-        private boolean fitInWidth(final int startPos, final int endPos, final int width) {
-            for (int pos = startPos; pos < endPos; pos++) {
-                if (mWidths[pos] > width)
+        private boolean fitInWidth(final int startIndex, final int endIndex, final int width) {
+            for (int index = startIndex; index < endIndex; index++) {
+                if (mWidths[index] > width)
                     return false;
             }
             return true;
         }
 
-        private int calcurateMaxRowWidth(final int startPos, final int endPos) {
+        private int calcurateMaxRowWidth(final int startIndex, final int endIndex) {
             int maxRowWidth = 0;
-            int pos = startPos;
+            int index = startIndex;
             for (int row = 0; row < mNumRows; row++) {
                 final int numColumnInRow = mNumColumnsInRow[row];
                 int maxKeyWidth = 0;
-                while (pos < endPos && mRowNumbers[pos] == row) {
-                    maxKeyWidth = Math.max(maxKeyWidth, mWidths[pos]);
-                    pos++;
+                while (index < endIndex && mRowNumbers[index] == row) {
+                    maxKeyWidth = Math.max(maxKeyWidth, mWidths[index]);
+                    index++;
                 }
                 maxRowWidth = Math.max(maxRowWidth,
                         maxKeyWidth * numColumnInRow + mDividerWidth * (numColumnInRow - 1));
@@ -130,40 +131,40 @@ public final class MoreSuggestions extends Keyboard {
             { 2, 0, 1},
         };
 
-        public int getNumColumnInRow(final int pos) {
-            return mNumColumnsInRow[mRowNumbers[pos]];
+        public int getNumColumnInRow(final int index) {
+            return mNumColumnsInRow[mRowNumbers[index]];
         }
 
-        public int getColumnNumber(final int pos) {
-            final int columnOrder = mColumnOrders[pos];
-            final int numColumn = getNumColumnInRow(pos);
+        public int getColumnNumber(final int index) {
+            final int columnOrder = mColumnOrders[index];
+            final int numColumn = getNumColumnInRow(index);
             return COLUMN_ORDER_TO_NUMBER[numColumn - 1][columnOrder];
         }
 
-        public int getX(final int pos) {
-            final int columnNumber = getColumnNumber(pos);
-            return columnNumber * (getWidth(pos) + mDividerWidth);
+        public int getX(final int index) {
+            final int columnNumber = getColumnNumber(index);
+            return columnNumber * (getWidth(index) + mDividerWidth);
         }
 
-        public int getY(final int pos) {
-            final int row = mRowNumbers[pos];
+        public int getY(final int index) {
+            final int row = mRowNumbers[index];
             return (mNumRows -1 - row) * mDefaultRowHeight + mTopPadding;
         }
 
-        public int getWidth(final int pos) {
-            final int numColumnInRow = getNumColumnInRow(pos);
+        public int getWidth(final int index) {
+            final int numColumnInRow = getNumColumnInRow(index);
             return (mOccupiedWidth - mDividerWidth * (numColumnInRow - 1)) / numColumnInRow;
         }
 
-        public void markAsEdgeKey(final Key key, final int pos) {
-            final int row = mRowNumbers[pos];
+        public void markAsEdgeKey(final Key key, final int index) {
+            final int row = mRowNumbers[index];
             if (row == 0)
                 key.markAsBottomEdge(this);
             if (row == mNumRows - 1)
                 key.markAsTopEdge(this);
 
             final int numColumnInRow = mNumColumnsInRow[row];
-            final int column = getColumnNumber(pos);
+            final int column = getColumnNumber(index);
             if (column == 0)
                 key.markAsLeftEdge(this);
             if (column == numColumnInRow - 1)
@@ -174,15 +175,15 @@ public final class MoreSuggestions extends Keyboard {
     public static final class Builder extends KeyboardBuilder<MoreSuggestionsParam> {
         private final MoreSuggestionsView mPaneView;
         private SuggestedWords mSuggestedWords;
-        private int mFromPos;
-        private int mToPos;
+        private int mFromIndex;
+        private int mToIndex;
 
         public Builder(final Context context, final MoreSuggestionsView paneView) {
             super(context, new MoreSuggestionsParam());
             mPaneView = paneView;
         }
 
-        public Builder layout(final SuggestedWords suggestedWords, final int fromPos,
+        public Builder layout(final SuggestedWords suggestedWords, final int fromIndex,
                 final int maxWidth, final int minWidth, final int maxRow,
                 final Keyboard parentKeyboard) {
             final int xmlId = R.xml.kbd_suggestions_pane_template;
@@ -190,10 +191,10 @@ public final class MoreSuggestions extends Keyboard {
             mParams.mVerticalGap = mParams.mTopPadding = parentKeyboard.mVerticalGap / 2;
 
             mPaneView.updateKeyboardGeometry(mParams.mDefaultRowHeight);
-            final int count = mParams.layout(suggestedWords, fromPos, maxWidth, minWidth, maxRow,
+            final int count = mParams.layout(suggestedWords, fromIndex, maxWidth, minWidth, maxRow,
                     mPaneView.newLabelPaint(null /* key */), mResources);
-            mFromPos = fromPos;
-            mToPos = fromPos + count;
+            mFromIndex = fromIndex;
+            mToIndex = fromIndex + count;
             mSuggestedWords = suggestedWords;
             return this;
         }
@@ -201,20 +202,20 @@ public final class MoreSuggestions extends Keyboard {
         @Override
         public MoreSuggestions build() {
             final MoreSuggestionsParam params = mParams;
-            for (int pos = mFromPos; pos < mToPos; pos++) {
-                final int x = params.getX(pos);
-                final int y = params.getY(pos);
-                final int width = params.getWidth(pos);
-                final String word = mSuggestedWords.getWord(pos);
-                final String info = Utils.getDebugInfo(mSuggestedWords, pos);
-                final int index = pos + SUGGESTION_CODE_BASE;
+            for (int index = mFromIndex; index < mToIndex; index++) {
+                final int x = params.getX(index);
+                final int y = params.getY(index);
+                final int width = params.getWidth(index);
+                final String word = mSuggestedWords.getWord(index);
+                final String info = Utils.getDebugInfo(mSuggestedWords, index);
+                final int indexInMoreSuggestions = index + SUGGESTION_CODE_BASE;
                 final Key key = new Key(
-                        params, word, info, KeyboardIconsSet.ICON_UNDEFINED, index, null, x, y,
-                        width, params.mDefaultRowHeight, 0);
-                params.markAsEdgeKey(key, pos);
+                        params, word, info, KeyboardIconsSet.ICON_UNDEFINED, indexInMoreSuggestions,
+                        null, x, y, width, params.mDefaultRowHeight, 0);
+                params.markAsEdgeKey(key, index);
                 params.onAddKey(key);
-                final int columnNumber = params.getColumnNumber(pos);
-                final int numColumnInRow = params.getNumColumnInRow(pos);
+                final int columnNumber = params.getColumnNumber(index);
+                final int numColumnInRow = params.getNumColumnInRow(index);
                 if (columnNumber < numColumnInRow - 1) {
                     final Divider divider = new Divider(params, params.mDivider, x + width, y,
                             params.mDividerWidth, params.mDefaultRowHeight);
diff --git a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelper.java b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelper.java
index d9bb3eaf4d9ba65528693fad3709383e9a10fcb9..2f2ec356024da39b47a3812d41986ba4464e843c 100644
--- a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelper.java
+++ b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelper.java
@@ -23,9 +23,9 @@ import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.Color;
 import android.graphics.Paint;
+import android.graphics.Paint.Align;
 import android.graphics.Rect;
 import android.graphics.Typeface;
-import android.graphics.Paint.Align;
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.text.Spannable;
@@ -40,14 +40,13 @@ import android.util.AttributeSet;
 import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.View;
-import android.view.ViewGroup;
 import android.view.View.OnClickListener;
+import android.view.ViewGroup;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
 import com.android.inputmethod.keyboard.ViewLayoutUtils;
 import com.android.inputmethod.latin.AutoCorrection;
-import com.android.inputmethod.latin.CollectionUtils;
 import com.android.inputmethod.latin.LatinImeLogger;
 import com.android.inputmethod.latin.R;
 import com.android.inputmethod.latin.ResourceUtils;
@@ -71,7 +70,11 @@ final class SuggestionStripLayoutHelper {
     private int mMaxMoreSuggestionsRow;
     public final float mMinMoreSuggestionsWidth;
     public final int mMoreSuggestionsBottomGap;
+    public boolean mMoreSuggestionsAvailable;
 
+    // The index of these {@link ArrayList} is the position in the suggestion strip. The indices
+    // increase towards the right for LTR scripts and the left for RTL scripts, starting with 0.
+    // The position of the most important suggestion is in {@link #mCenterPositionInStrip}
     private final ArrayList<TextView> mWordViews;
     private final ArrayList<View> mDividerViews;
     private final ArrayList<TextView> mDebugInfoViews;
@@ -89,16 +92,14 @@ final class SuggestionStripLayoutHelper {
 
     private static final CharacterStyle BOLD_SPAN = new StyleSpan(Typeface.BOLD);
     private static final CharacterStyle UNDERLINE_SPAN = new UnderlineSpan();
+
+    private final int mSuggestionStripOption;
+    // These constants are the flag values of
+    // {@link R.styleable#SuggestionStripView_suggestionStripOption} attribute.
     private static final int AUTO_CORRECT_BOLD = 0x01;
     private static final int AUTO_CORRECT_UNDERLINE = 0x02;
     private static final int VALID_TYPED_WORD_BOLD = 0x04;
 
-    private final int mSuggestionStripOption;
-
-    private final ArrayList<CharSequence> mWords = CollectionUtils.newArrayList();
-
-    public boolean mMoreSuggestionsAvailable;
-
     private final TextView mWordToSaveView;
     private final TextView mLeftwardsArrowView;
     private final TextView mHintToSaveView;
@@ -205,7 +206,7 @@ final class SuggestionStripLayoutHelper {
         return new BitmapDrawable(res, buffer);
     }
 
-    private CharSequence getStyledSuggestionWord(final SuggestedWords suggestedWords,
+    private CharSequence getStyledSuggestedWord(final SuggestedWords suggestedWords,
             final int indexInSuggestedWords) {
         final String word = suggestedWords.getWord(indexInSuggestedWords);
         final boolean isAutoCorrect = indexInSuggestedWords == 1
@@ -233,7 +234,8 @@ final class SuggestionStripLayoutHelper {
             final SuggestedWords suggestedWords) {
         // TODO: This works for 3 suggestions. Revisit this algorithm when there are 5 or more
         // suggestions.
-        final int mostImportantIndexInSuggestedWords = suggestedWords.willAutoCorrect() ? 1 : 0;
+        final int mostImportantIndexInSuggestedWords = suggestedWords.willAutoCorrect()
+                ? SuggestedWords.INDEX_OF_AUTO_CORRECTION : SuggestedWords.INDEX_OF_TYPED_WORD;
         if (positionInStrip == mCenterPositionInStrip) {
             return mostImportantIndexInSuggestedWords;
         }
@@ -245,10 +247,9 @@ final class SuggestionStripLayoutHelper {
 
     private int getSuggestionTextColor(final int positionInStrip,
             final SuggestedWords suggestedWords) {
-        final int indexInSuggestedWords = getIndexInSuggestedWords(
-                positionInStrip, suggestedWords);
+        final int indexInSuggestedWords = getIndexInSuggestedWords(positionInStrip, suggestedWords);
         // TODO: Need to revisit this logic with bigram suggestions
-        final boolean isSuggested = (indexInSuggestedWords != 0);
+        final boolean isSuggested = (indexInSuggestedWords != SuggestedWords.INDEX_OF_TYPED_WORD);
 
         final int color;
         if (positionInStrip == mCenterPositionInStrip && suggestedWords.willAutoCorrect()) {
@@ -265,7 +266,8 @@ final class SuggestionStripLayoutHelper {
             // is in slot 1.
             if (positionInStrip == mCenterPositionInStrip
                     && AutoCorrection.shouldBlockAutoCorrectionBySafetyNet(
-                            suggestedWords.getWord(1), suggestedWords.getWord(0))) {
+                            suggestedWords.getWord(SuggestedWords.INDEX_OF_AUTO_CORRECTION),
+                            suggestedWords.getWord(SuggestedWords.INDEX_OF_TYPED_WORD))) {
                 return 0xFFFF0000;
             }
         }
@@ -296,7 +298,7 @@ final class SuggestionStripLayoutHelper {
         }
 
         final int countInStrip = mSuggestionsCountInStrip;
-        setupWords(suggestedWords, countInStrip);
+        setupWordViewsTextAndColor(suggestedWords, countInStrip);
         mMoreSuggestionsAvailable = (suggestedWords.size() > countInStrip);
         int x = 0;
         for (int positionInStrip = 0; positionInStrip < countInStrip; positionInStrip++) {
@@ -308,41 +310,37 @@ final class SuggestionStripLayoutHelper {
             }
 
             final int width = getSuggestionWidth(positionInStrip, placerView.getWidth());
-            final TextView wordView = layoutWord(suggestedWords, positionInStrip, width);
+            final TextView wordView = layoutWord(positionInStrip, width);
             stripView.addView(wordView);
             setLayoutWeight(wordView, getSuggestionWeight(positionInStrip),
                     ViewGroup.LayoutParams.MATCH_PARENT);
             x += wordView.getMeasuredWidth();
 
             if (SuggestionStripView.DBG) {
-                layoutDebugInfo(suggestedWords, positionInStrip, placerView, x);
+                layoutDebugInfo(positionInStrip, placerView, x);
             }
         }
     }
 
     /**
-     * Format appropriately the suggested word indirectly specified by
-     * <code>positionInStrip</code> as text in a corresponding {@link TextView}. When the
-     * suggested word doesn't exist, the corresponding {@link TextView} will be disabled
-     * and never respond to user interaction. The suggested word may be shrunk or ellipsized to
-     * fit in the specified width.
+     * Format appropriately the suggested word in {@link #mWordViews} specified by
+     * <code>positionInStrip</code>. When the suggested word doesn't exist, the corresponding
+     * {@link TextView} will be disabled and never respond to user interaction. The suggested word
+     * may be shrunk or ellipsized to fit in the specified width.
      *
      * The <code>positionInStrip</code> argument is the index in the suggestion strip. The indices
      * increase towards the right for LTR scripts and the left for RTL scripts, starting with 0.
-     * The index of the most important suggestion is in {@link #mCenterPositionInStrip}. This
+     * The position of the most important suggestion is in {@link #mCenterPositionInStrip}. This
      * usually doesn't match the index in <code>suggedtedWords</code> -- see
      * {@link #getIndexInSuggestedWords(int,SuggestedWords)}.
      *
-     * @param suggestedWords the list of suggestions.
-     * @param positionInStrip the in the suggestion strip.
+     * @param positionInStrip the position in the suggestion strip.
      * @param width the maximum width for layout in pixels.
      * @return the {@link TextView} containing the suggested word appropriately formatted.
      */
-    private TextView layoutWord(final SuggestedWords suggestedWords, final int positionInStrip,
-            final int width) {
-        final int indexInSuggestedWords = getIndexInSuggestedWords(positionInStrip, suggestedWords);
-        final CharSequence word = mWords.get(indexInSuggestedWords);
-        final TextView wordView = mWordViews.get(indexInSuggestedWords);
+    private TextView layoutWord(final int positionInStrip, final int width) {
+        final TextView wordView = mWordViews.get(positionInStrip);
+        final CharSequence word = wordView.getText();
         if (positionInStrip == mCenterPositionInStrip && mMoreSuggestionsAvailable) {
             // TODO: This "more suggestions hint" should have a nicely designed icon.
             wordView.setCompoundDrawablesWithIntrinsicBounds(
@@ -355,7 +353,6 @@ final class SuggestionStripLayoutHelper {
 
         // Disable this suggestion if the suggestion is null or empty.
         wordView.setEnabled(!TextUtils.isEmpty(word));
-        wordView.setTextColor(getSuggestionTextColor(positionInStrip, suggestedWords));
         final CharSequence text = getEllipsizedText(word, width, wordView.getPaint());
         final float scaleX = wordView.getTextScaleX();
         wordView.setText(text); // TextView.setText() resets text scale x to 1.0.
@@ -363,18 +360,13 @@ final class SuggestionStripLayoutHelper {
         return wordView;
     }
 
-    private void layoutDebugInfo(final SuggestedWords suggestedWords, final int positionInStrip,
-            final ViewGroup placerView, final int x) {
-        final int indexInSuggestedWords = getIndexInSuggestedWords(positionInStrip, suggestedWords);
-        if (indexInSuggestedWords >= suggestedWords.size()) {
-            return;
-        }
-        final String debugInfo = Utils.getDebugInfo(suggestedWords, indexInSuggestedWords);
+    private void layoutDebugInfo(final int positionInStrip, final ViewGroup placerView,
+            final int x) {
+        final TextView debugInfoView = mDebugInfoViews.get(positionInStrip);
+        final CharSequence debugInfo = debugInfoView.getText();
         if (debugInfo == null) {
             return;
         }
-        final TextView debugInfoView = mDebugInfoViews.get(indexInSuggestedWords);
-        debugInfoView.setText(debugInfo);
         placerView.addView(debugInfoView);
         debugInfoView.measure(
                 ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
@@ -399,39 +391,52 @@ final class SuggestionStripLayoutHelper {
         return (1.0f - mCenterSuggestionWeight) / (mSuggestionsCountInStrip - 1);
     }
 
-    private void setupWords(final SuggestedWords suggestedWords, final int countInStrip) {
-        mWords.clear();
+    private void setupWordViewsTextAndColor(final SuggestedWords suggestedWords,
+            final int countInStrip) {
         final int count = Math.min(suggestedWords.size(), countInStrip);
-        for (int pos = 0; pos < count; pos++) {
-            final CharSequence styled = getStyledSuggestionWord(suggestedWords, pos);
-            mWords.add(styled);
+        for (int positionInStrip = 0; positionInStrip < count; positionInStrip++) {
+            final int indexInSuggestedWords =
+                    getIndexInSuggestedWords(positionInStrip, suggestedWords);
+            final TextView wordView = mWordViews.get(positionInStrip);
+            // {@link TextView#getTag()} is used to get the index in suggestedWords at
+            // {@link SuggestionStripView#onClick(View)}.
+            wordView.setTag(indexInSuggestedWords);
+            wordView.setText(getStyledSuggestedWord(suggestedWords, indexInSuggestedWords));
+            wordView.setTextColor(getSuggestionTextColor(positionInStrip, suggestedWords));
+            if (SuggestionStripView.DBG) {
+                mDebugInfoViews.get(positionInStrip).setText(
+                        Utils.getDebugInfo(suggestedWords, indexInSuggestedWords));
+            }
         }
-        for (int pos = count; pos < countInStrip; pos++) {
-            // Make this inactive for touches in layout().
-            mWords.add(null);
+        for (int positionInStrip = count; positionInStrip < countInStrip; positionInStrip++) {
+            mWordViews.get(positionInStrip).setText(null);
+            // Make this inactive for touches in {@link #layoutWord(int,int)}.
+            if (SuggestionStripView.DBG) {
+                mDebugInfoViews.get(positionInStrip).setText(null);
+            }
         }
     }
 
     private void layoutPunctuationSuggestions(final SuggestedWords suggestedWords,
             final ViewGroup stripView) {
         final int countInStrip = Math.min(suggestedWords.size(), PUNCTUATIONS_IN_STRIP);
-        for (int indexInStrip = 0; indexInStrip < countInStrip; indexInStrip++) {
-            if (indexInStrip != 0) {
+        for (int positionInStrip = 0; positionInStrip < countInStrip; positionInStrip++) {
+            if (positionInStrip != 0) {
                 // Add divider if this isn't the left most suggestion in suggestions strip.
-                addDivider(stripView, mDividerViews.get(indexInStrip));
+                addDivider(stripView, mDividerViews.get(positionInStrip));
             }
 
-            final TextView word = mWordViews.get(indexInStrip);
-            word.setEnabled(true);
-            word.setTextColor(mColorAutoCorrect);
-            final String text = suggestedWords.getWord(indexInStrip);
-            word.setText(text);
-            word.setTextScaleX(1.0f);
-            word.setCompoundDrawables(null, null, null, null);
-            stripView.addView(word);
-            setLayoutWeight(word, 1.0f, mSuggestionsStripHeight);
+            final TextView wordView = mWordViews.get(positionInStrip);
+            wordView.setEnabled(true);
+            wordView.setTextColor(mColorAutoCorrect);
+            final String punctuation = suggestedWords.getWord(positionInStrip);
+            wordView.setText(punctuation);
+            wordView.setTextScaleX(1.0f);
+            wordView.setCompoundDrawables(null, null, null, null);
+            stripView.addView(wordView);
+            setLayoutWeight(wordView, 1.0f, mSuggestionsStripHeight);
         }
-        mMoreSuggestionsAvailable = false;
+        mMoreSuggestionsAvailable = (suggestedWords.size() > countInStrip);
     }
 
     public void layoutAddToDictionaryHint(final String word, final ViewGroup stripView,
diff --git a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java
index 226bf873e25e7118382c509f43cd746857227d39..b2b9427af3b5d68a9a59b7679a7adbd5f5fa5f89 100644
--- a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java
+++ b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java
@@ -93,12 +93,10 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
         mSuggestionsStrip = (ViewGroup)findViewById(R.id.suggestions_strip);
         for (int pos = 0; pos < MAX_SUGGESTIONS; pos++) {
             final TextView word = (TextView)inflater.inflate(R.layout.suggestion_word, null);
-            word.setTag(pos);
             word.setOnClickListener(this);
             word.setOnLongClickListener(this);
             mWordViews.add(word);
             final View divider = inflater.inflate(R.layout.suggestion_divider, null);
-            divider.setTag(pos);
             divider.setOnClickListener(this);
             mDividerViews.add(divider);
             mDebugInfoViews.add((TextView)inflater.inflate(R.layout.suggestion_info, null));