diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index 847174c0a78bf9361083345543cd2370c8326e03..24eb7592bf8540dd84774284dc1dae8156653dac 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -99,7 +99,7 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
 
     // Main keyboard
     private Keyboard mKeyboard;
-    private final KeyDrawParams mKeyDrawParams;
+    protected final KeyDrawParams mKeyDrawParams;
 
     // Key preview
     private final int mKeyPreviewLayoutId;
@@ -171,7 +171,7 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
         }
     }
 
-    /* package */ static class KeyDrawParams {
+    protected static class KeyDrawParams {
         // XML attributes
         public final int mKeyTextColor;
         public final int mKeyTextInactivatedColor;
@@ -351,7 +351,6 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
         mDelayAfterPreview = mKeyPreviewDrawParams.mLingerTimeout;
 
         mPaint.setAntiAlias(true);
-        mPaint.setTextAlign(Align.CENTER);
     }
 
     // Read fraction value in TypedArray as float.
@@ -729,10 +728,10 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
         }
     }
 
-    private static int getCharGeometryCacheKey(char reference, Paint paint) {
+    private static int getCharGeometryCacheKey(char referenceChar, Paint paint) {
         final int labelSize = (int)paint.getTextSize();
         final Typeface face = paint.getTypeface();
-        final int codePointOffset = reference << 15;
+        final int codePointOffset = referenceChar << 15;
         if (face == Typeface.DEFAULT) {
             return codePointOffset + labelSize;
         } else if (face == Typeface.DEFAULT_BOLD) {
@@ -747,41 +746,35 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
     // Working variable for the following methods.
     private final Rect mTextBounds = new Rect();
 
-    private float getCharHeight(char[] character, Paint paint) {
-        final Integer key = getCharGeometryCacheKey(character[0], paint);
+    private float getCharHeight(char[] referenceChar, Paint paint) {
+        final Integer key = getCharGeometryCacheKey(referenceChar[0], paint);
         final Float cachedValue = sTextHeightCache.get(key);
         if (cachedValue != null)
             return cachedValue;
 
-        paint.getTextBounds(character, 0, 1, mTextBounds);
+        paint.getTextBounds(referenceChar, 0, 1, mTextBounds);
         final float height = mTextBounds.height();
         sTextHeightCache.put(key, height);
         return height;
     }
 
-    private float getCharWidth(char[] character, Paint paint) {
-        final Integer key = getCharGeometryCacheKey(character[0], paint);
+    private float getCharWidth(char[] referenceChar, Paint paint) {
+        final Integer key = getCharGeometryCacheKey(referenceChar[0], paint);
         final Float cachedValue = sTextWidthCache.get(key);
         if (cachedValue != null)
             return cachedValue;
 
-        paint.getTextBounds(character, 0, 1, mTextBounds);
+        paint.getTextBounds(referenceChar, 0, 1, mTextBounds);
         final float width = mTextBounds.width();
         sTextWidthCache.put(key, width);
         return width;
     }
 
-    protected float getLabelWidth(CharSequence label, Paint paint) {
+    public float getLabelWidth(String label, Paint paint) {
         paint.getTextBounds(label.toString(), 0, label.length(), mTextBounds);
         return mTextBounds.width();
     }
 
-    public float getDefaultLabelWidth(String label, Paint paint) {
-        paint.setTextSize(mKeyDrawParams.mKeyLabelSize);
-        paint.setTypeface(mKeyDrawParams.mKeyTextStyle);
-        return getLabelWidth(label, paint);
-    }
-
     protected static void drawIcon(Canvas canvas, Drawable icon, int x, int y, int width,
             int height) {
         canvas.translate(x, y);
@@ -815,6 +808,14 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
         canvas.translate(-x, -y);
     }
 
+    public Paint newDefaultLabelPaint() {
+        final Paint paint = new Paint();
+        paint.setAntiAlias(true);
+        paint.setTypeface(mKeyDrawParams.mKeyTextStyle);
+        paint.setTextSize(mKeyDrawParams.mKeyLabelSize);
+        return paint;
+    }
+
     public void cancelAllMessages() {
         mDrawingHandler.cancelAllMessages();
     }
diff --git a/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboard.java b/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboard.java
index 904a81de41c224292ec33c0a68b03bf76fa97154..72a5d0f056b9a9ce52d7ef2ce3183370fb9bba0c 100644
--- a/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboard.java
@@ -296,17 +296,16 @@ public class MoreKeysKeyboard extends Keyboard {
             final int padding = (int)(view.getResources()
                     .getDimension(R.dimen.more_keys_keyboard_key_horizontal_padding)
                     + (parentKey.hasLabelsInMoreKeys() ? minKeyWidth * LABEL_PADDING_RATIO : 0));
-            Paint paint = null;
+            final Paint paint = view.newDefaultLabelPaint();
+            paint.setTextSize(parentKey.hasLabelsInMoreKeys()
+                    ? view.mKeyDrawParams.mKeyLabelSize
+                    : view.mKeyDrawParams.mKeyLetterSize);
             int maxWidth = minKeyWidth;
             for (String moreKeySpec : parentKey.mMoreKeys) {
                 final String label = KeySpecParser.getLabel(moreKeySpec);
                 // If the label is single letter, minKeyWidth is enough to hold the label.
                 if (label != null && StringUtils.codePointCount(label) > 1) {
-                    if (paint == null) {
-                        paint = new Paint();
-                        paint.setAntiAlias(true);
-                    }
-                    final int width = (int)view.getDefaultLabelWidth(label, paint) + padding;
+                    final int width = (int)view.getLabelWidth(label, paint) + padding;
                     if (maxWidth < width) {
                         maxWidth = width;
                     }
diff --git a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java
index c9c88fd23be700584918d2615b13268ea1864170..dd83a0c4ea80f7c6a2609f7fc407898e82a795e8 100644
--- a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java
+++ b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java
@@ -23,9 +23,7 @@ import android.graphics.drawable.Drawable;
 import com.android.inputmethod.keyboard.Key;
 import com.android.inputmethod.keyboard.Keyboard;
 import com.android.inputmethod.keyboard.KeyboardSwitcher;
-import com.android.inputmethod.keyboard.KeyboardView;
 import com.android.inputmethod.keyboard.internal.KeyboardIconsSet;
-import com.android.inputmethod.latin.LatinImeLogger;
 import com.android.inputmethod.latin.R;
 import com.android.inputmethod.latin.SuggestedWords;
 import com.android.inputmethod.latin.Utils;
@@ -38,8 +36,6 @@ public class MoreSuggestions extends Keyboard {
     }
 
     public static class Builder extends Keyboard.Builder<Builder.MoreSuggestionsParam> {
-        private static final boolean DBG = LatinImeLogger.sDBG;
-
         private final MoreSuggestionsView mPaneView;
         private SuggestedWords mSuggestions;
         private int mFromPos;
@@ -56,10 +52,8 @@ public class MoreSuggestions extends Keyboard {
             public int mDividerWidth;
 
             public int layout(SuggestedWords suggestions, int fromPos, int maxWidth, int minWidth,
-                    int maxRow, KeyboardView view) {
+                    int maxRow, MoreSuggestionsView view) {
                 clearKeys();
-                final Paint paint = new Paint();
-                paint.setAntiAlias(true);
                 final Resources res = view.getContext().getResources();
                 mDivider = res.getDrawable(R.drawable.more_suggestions_divider);
                 // TODO: Drawable itself should have an alpha value.
@@ -67,6 +61,7 @@ public class MoreSuggestions extends Keyboard {
                 mDividerWidth = mDivider.getIntrinsicWidth();
                 final int padding = (int) res.getDimension(
                         R.dimen.more_suggestions_key_horizontal_padding);
+                final Paint paint = view.newDefaultLabelPaint();
 
                 int row = 0;
                 int pos = fromPos, rowStartPos = fromPos;
@@ -74,7 +69,7 @@ public class MoreSuggestions extends Keyboard {
                 while (pos < size) {
                     final String word = suggestions.getWord(pos).toString();
                     // TODO: Should take care of text x-scaling.
-                    mWidths[pos] = (int)view.getDefaultLabelWidth(word, paint) + padding;
+                    mWidths[pos] = (int)view.getLabelWidth(word, paint) + padding;
                     final int numColumn = pos - rowStartPos + 1;
                     final int columnWidth =
                             (maxWidth - mDividerWidth * (numColumn - 1)) / numColumn;
diff --git a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java
index f11b1a4c1dde39c49fd1e1a27c0126eee2ab2639..e64e7a6853cacdda33e9829070cd87fa622838e1 100644
--- a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java
+++ b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java
@@ -43,17 +43,17 @@ import com.android.inputmethod.latin.R;
 public class MoreSuggestionsView extends KeyboardView implements MoreKeysPanel {
     private final int[] mCoordinates = new int[2];
 
-    private final KeyDetector mModalPanelKeyDetector;
+    final KeyDetector mModalPanelKeyDetector;
     private final KeyDetector mSlidingPanelKeyDetector;
 
     private Controller mController;
-    private KeyboardActionListener mListener;
+    KeyboardActionListener mListener;
     private int mOriginX;
     private int mOriginY;
 
-    private static final TimerProxy EMPTY_TIMER_PROXY = new TimerProxy.Adapter();
+    static final TimerProxy EMPTY_TIMER_PROXY = new TimerProxy.Adapter();
 
-    private final KeyboardActionListener mSuggestionsPaneListener =
+    final KeyboardActionListener mSuggestionsPaneListener =
             new KeyboardActionListener.Adapter() {
         @Override
         public void onPressKey(int primaryCode) {
diff --git a/java/src/com/android/inputmethod/latin/suggestions/SuggestionsView.java b/java/src/com/android/inputmethod/latin/suggestions/SuggestionsView.java
index d3c3afb73515b2e2501af51ec3f883aab92e99c6..f6c1b163c98942737f80edbe4c2134d48c7f2fb1 100644
--- a/java/src/com/android/inputmethod/latin/suggestions/SuggestionsView.java
+++ b/java/src/com/android/inputmethod/latin/suggestions/SuggestionsView.java
@@ -62,7 +62,6 @@ import com.android.inputmethod.latin.R;
 import com.android.inputmethod.latin.StaticInnerHandlerWrapper;
 import com.android.inputmethod.latin.Suggest;
 import com.android.inputmethod.latin.SuggestedWords;
-import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
 import com.android.inputmethod.latin.Utils;
 
 import java.util.ArrayList;