diff --git a/java/res/layout/candidates_strip.xml b/java/res/layout/candidates_strip.xml
index 46cd691..fdb13f7 100644
--- a/java/res/layout/candidates_strip.xml
+++ b/java/res/layout/candidates_strip.xml
@@ -22,9 +22,16 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
 >
-    <LinearLayout
-        android:id="@+id/candidates_strip"
-        android:orientation="horizontal"
+    <!-- Placer for debug information -->
+    <RelativeLayout
+        android:id="@+id/candidates_placer"
         android:layout_width="match_parent"
-        android:layout_height="match_parent" />
+        android:layout_height="match_parent"
+    >
+        <LinearLayout
+            android:id="@+id/candidates_strip"
+            android:orientation="horizontal"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+    </RelativeLayout>
 </merge>
diff --git a/java/src/com/android/inputmethod/latin/CandidateView.java b/java/src/com/android/inputmethod/latin/CandidateView.java
index 85870f3..cf88529 100644
--- a/java/src/com/android/inputmethod/latin/CandidateView.java
+++ b/java/src/com/android/inputmethod/latin/CandidateView.java
@@ -64,6 +64,7 @@
 
     private static final boolean DBG = LatinImeLogger.sDBG;
 
+    private final ViewGroup mCandidatesPlacer;
     private final ViewGroup mCandidatesStrip;
     private ViewGroup mCandidatesPane;
     private ViewGroup mCandidatesPaneContainer;
@@ -235,8 +236,8 @@
                     lastView = info;
                     info.measure(WRAP_CONTENT, WRAP_CONTENT);
                     final int infoWidth = info.getMeasuredWidth();
-                    FrameLayoutCompatUtils.placeViewAt(info, x - infoWidth, y, infoWidth,
-                            info.getMeasuredHeight());
+                    FrameLayoutCompatUtils.placeViewAt(
+                            info, x - infoWidth, y, infoWidth, info.getMeasuredHeight());
                 }
             }
             if (x != 0) {
@@ -388,7 +389,7 @@
             return word;
         }
 
-        public int layout(SuggestedWords suggestions, ViewGroup stripView, ViewGroup paneView,
+        public int layout(SuggestedWords suggestions, ViewGroup stripView, ViewGroup placer,
                 int stripWidth) {
             if (suggestions.isPunctuationSuggestions()) {
                 return layoutPunctuationSuggestions(suggestions, stripView);
@@ -405,6 +406,7 @@
                     final View divider = mDividers.get(pos);
                     // Add divider if this isn't the left most suggestion in candidate strip.
                     stripView.addView(divider);
+                    x += divider.getMeasuredWidth();
                 }
 
                 final CharSequence styled = mTexts.get(pos);
@@ -429,18 +431,19 @@
                 word.setTextScaleX(scaleX);
                 stripView.addView(word);
                 setLayoutWeight(word, getCandidateWeight(index), MATCH_PARENT);
+                x += word.getMeasuredWidth();
 
                 if (DBG) {
                     final CharSequence debugInfo = getDebugInfo(suggestions, pos);
                     if (debugInfo != null) {
                         final TextView info = mInfos.get(pos);
                         info.setText(debugInfo);
-                        paneView.addView(info);
+                        placer.addView(info);
                         info.measure(WRAP_CONTENT, WRAP_CONTENT);
                         final int infoWidth = info.getMeasuredWidth();
                         final int y = info.getMeasuredHeight();
-                        FrameLayoutCompatUtils.placeViewAt(info, x, 0, infoWidth, y);
-                        x += infoWidth * 2;
+                        FrameLayoutCompatUtils.placeViewAt(
+                                info, x - infoWidth, y, infoWidth, info.getMeasuredHeight());
                     }
                 }
             }
@@ -559,6 +562,7 @@
         mPreviewPopup.setContentView(mPreviewText);
         mPreviewPopup.setBackgroundDrawable(null);
 
+        mCandidatesPlacer = (ViewGroup)findViewById(R.id.candidates_placer);
         mCandidatesStrip = (ViewGroup)findViewById(R.id.candidates_strip);
         for (int pos = 0; pos < MAX_SUGGESTIONS; pos++) {
             final TextView word = (TextView)inflater.inflate(R.layout.candidate_word, null);
@@ -612,7 +616,7 @@
 
         final int width = getWidth();
         final int countInStrip = mStripParams.layout(
-                mSuggestions, mCandidatesStrip, mCandidatesPane, width);
+                mSuggestions, mCandidatesStrip, mCandidatesPlacer, width);
         mPaneParams.layout(
                 mSuggestions, mCandidatesPane, countInStrip, mStripParams.getTextColor(), width);
     }
@@ -774,6 +778,8 @@
 
     public void clear() {
         mShowingAutoCorrectionInverted = false;
+        mCandidatesPlacer.removeAllViews();
+        mCandidatesPlacer.addView(mCandidatesStrip);
         mCandidatesStrip.removeAllViews();
         mCandidatesPane.removeAllViews();
         closeCandidatesPane();
