diff --git a/java/res/layout/input_view.xml b/java/res/layout/input_view.xml
index 3284695..88b48fc 100644
--- a/java/res/layout/input_view.xml
+++ b/java/res/layout/input_view.xml
@@ -33,7 +33,7 @@
         android:orientation="horizontal"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:minHeight="@dimen/suggestions_strip_minimum_height"
+        android:minHeight="@dimen/suggestions_view_minimum_height"
         android:gravity="bottom"
     >
         <View
diff --git a/java/res/values-land/dimens.xml b/java/res/values-land/dimens.xml
index 322b6a6..9149b5d 100644
--- a/java/res/values-land/dimens.xml
+++ b/java/res/values-land/dimens.xml
@@ -60,7 +60,7 @@
 
     <dimen name="suggestions_strip_height">36dip</dimen>
     <dimen name="more_suggestions_row_height">36dip</dimen>
-    <dimen name="suggestions_strip_minimum_height">160sp</dimen>
+    <dimen name="suggestions_view_minimum_height">160sp</dimen>
     <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. -->
     <!-- popup_key_height x 1.2 -->
     <dimen name="mini_keyboard_slide_allowance">0.336in</dimen>
diff --git a/java/res/values-sw768dp/dimens.xml b/java/res/values-sw768dp/dimens.xml
index 7db1df7..7d2ac48 100644
--- a/java/res/values-sw768dp/dimens.xml
+++ b/java/res/values-sw768dp/dimens.xml
@@ -71,7 +71,7 @@
 
     <dimen name="suggestions_strip_height">44dip</dimen>
     <dimen name="more_suggestions_row_height">44dip</dimen>
-    <dimen name="suggestions_strip_minimum_height">200sp</dimen>
+    <dimen name="suggestions_view_minimum_height">200sp</dimen>
     <dimen name="suggestions_strip_padding">15.0mm</dimen>
     <dimen name="suggestion_min_width">46dip</dimen>
     <dimen name="suggestion_padding">8dip</dimen>
diff --git a/java/res/values/dimens.xml b/java/res/values/dimens.xml
index bd8c156..a506ed7 100644
--- a/java/res/values/dimens.xml
+++ b/java/res/values/dimens.xml
@@ -81,7 +81,7 @@
     <dimen name="more_suggestions_row_height">40dip</dimen>
     <dimen name="more_suggestions_slide_allowance">0.2in</dimen>
     <fraction name="more_suggestions_info_ratio">12%</fraction>
-    <dimen name="suggestions_strip_minimum_height">200sp</dimen>
+    <dimen name="suggestions_view_minimum_height">200sp</dimen>
     <dimen name="suggestions_strip_padding">0dip</dimen>
     <dimen name="suggestion_min_width">44dip</dimen>
     <dimen name="suggestion_padding">6dip</dimen>
diff --git a/java/src/com/android/inputmethod/latin/SuggestionsView.java b/java/src/com/android/inputmethod/latin/SuggestionsView.java
index 07a44f7..10cd73d 100644
--- a/java/src/com/android/inputmethod/latin/SuggestionsView.java
+++ b/java/src/com/android/inputmethod/latin/SuggestionsView.java
@@ -89,7 +89,7 @@
     private SuggestedWords mSuggestions = SuggestedWords.EMPTY;
     private boolean mShowingAutoCorrectionInverted;
 
-    private final SuggestionsStripParams mStripParams;
+    private final SuggestionsViewParams mParams;
     private static final float MIN_TEXT_XSCALE = 0.70f;
 
     private final UiHandler mHandler = new UiHandler(this);
@@ -144,41 +144,22 @@
     }
 
     private static class SuggestionsViewParams {
-        public final int mPadding;
-        public final int mDividerWidth;
-        public final int mSuggestionsStripHeight;
-
-        protected final List<TextView> mWords;
-        protected final List<View> mDividers;
-        protected final List<TextView> mInfos;
-
-        protected SuggestionsViewParams(List<TextView> words, List<View> dividers,
-                List<TextView> infos) {
-            mWords = words;
-            mDividers = dividers;
-            mInfos = infos;
-
-            final TextView word = words.get(0);
-            final View divider = dividers.get(0);
-            mPadding = word.getCompoundPaddingLeft() + word.getCompoundPaddingRight();
-            divider.measure(
-                    ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
-            mDividerWidth = divider.getMeasuredWidth();
-
-            final Resources res = word.getResources();
-            mSuggestionsStripHeight = res.getDimensionPixelSize(R.dimen.suggestions_strip_height);
-        }
-    }
-
-    private static class SuggestionsStripParams extends SuggestionsViewParams {
         private static final int DEFAULT_SUGGESTIONS_COUNT_IN_STRIP = 3;
         private static final int DEFAULT_CENTER_SUGGESTION_PERCENTILE = 40;
         private static final int PUNCTUATIONS_IN_STRIP = 6;
 
+        public final int mPadding;
+        public final int mDividerWidth;
+        public final int mSuggestionsStripHeight;
+        public final int mSuggestionsCountInStrip;
+
+        private final List<TextView> mWords;
+        private final List<View> mDividers;
+        private final List<TextView> mInfos;
+
         private final int mColorTypedWord;
         private final int mColorAutoCorrect;
         private final int mColorSuggested;
-        public final int mSuggestionsCountInStrip;
         private final float mCenterSuggestionWeight;
         private final int mCenterSuggestionIndex;
         private final Drawable mMoreSuggestionsHint;
@@ -202,9 +183,22 @@
         private final TextView mHintToSaveView;
         private final CharSequence mHintToSaveText;
 
-        public SuggestionsStripParams(Context context, AttributeSet attrs, int defStyle,
+        public SuggestionsViewParams(Context context, AttributeSet attrs, int defStyle,
                 List<TextView> words, List<View> dividers, List<TextView> infos) {
-            super(words, dividers, infos);
+            mWords = words;
+            mDividers = dividers;
+            mInfos = infos;
+
+            final TextView word = words.get(0);
+            final View divider = dividers.get(0);
+            mPadding = word.getCompoundPaddingLeft() + word.getCompoundPaddingRight();
+            divider.measure(
+                    ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
+            mDividerWidth = divider.getMeasuredWidth();
+
+            final Resources res = word.getResources();
+            mSuggestionsStripHeight = res.getDimensionPixelSize(R.dimen.suggestions_strip_height);
+
             final TypedArray a = context.obtainStyledAttributes(
                     attrs, R.styleable.SuggestionsView, defStyle, R.style.SuggestionsViewStyle);
             mSuggestionStripOption = a.getInt(R.styleable.SuggestionsView_suggestionStripOption, 0);
@@ -220,7 +214,6 @@
             a.recycle();
 
             mCenterSuggestionIndex = mSuggestionsCountInStrip / 2;
-            final Resources res = context.getResources();
             mMoreSuggestionsHint = res.getDrawable(R.drawable.more_suggestions_hint);
 
             mInvertedForegroundColorSpan = new ForegroundColorSpan(mColorTypedWord ^ 0x00ffffff);
@@ -496,9 +489,8 @@
             mInfos.add((TextView)inflater.inflate(R.layout.suggestion_info, null));
         }
 
-        mStripParams = new SuggestionsStripParams(context, attrs, defStyle, mWords, mDividers,
-                mInfos);
-        mStripParams.mWordToSaveView.setOnClickListener(this);
+        mParams = new SuggestionsViewParams(context, attrs, defStyle, mWords, mDividers, mInfos);
+        mParams.mWordToSaveView.setOnClickListener(this);
 
         mMoreSuggestionsContainer = inflater.inflate(R.layout.more_suggestions, null);
         mMoreSuggestionsView = (MoreSuggestionsView)mMoreSuggestionsContainer
@@ -535,7 +527,7 @@
         if (mSuggestions.size() == 0)
             return;
 
-        mStripParams.layout(mSuggestions, mSuggestionsStrip, mSuggestionsPlacer, getWidth());
+        mParams.layout(mSuggestions, mSuggestionsStrip, mSuggestionsPlacer, getWidth());
     }
 
     private static CharSequence getDebugInfo(SuggestedWords suggestions, int pos) {
@@ -624,7 +616,7 @@
     }
 
     public void onAutoCorrectionInverted(CharSequence autoCorrectedWord) {
-        final CharSequence inverted = mStripParams.getInvertedText(autoCorrectedWord);
+        final CharSequence inverted = mParams.getInvertedText(autoCorrectedWord);
         if (inverted == null)
             return;
         final TextView tv = mWords.get(1);
@@ -634,12 +626,12 @@
 
     public boolean isShowingAddToDictionaryHint() {
         return mSuggestionsStrip.getChildCount() > 0
-                && mSuggestionsStrip.getChildAt(0) == mStripParams.mWordToSaveView;
+                && mSuggestionsStrip.getChildAt(0) == mParams.mWordToSaveView;
     }
 
     public void showAddToDictionaryHint(CharSequence word) {
         clear();
-        mStripParams.layoutAddToDictionaryHint(word, mSuggestionsStrip, getWidth());
+        mParams.layoutAddToDictionaryHint(word, mSuggestionsStrip, getWidth());
     }
 
     public boolean dismissAddToDictionaryHint() {
@@ -671,7 +663,7 @@
             return;
 
         final TextView previewText = mPreviewText;
-        previewText.setTextColor(mStripParams.mColorTypedWord);
+        previewText.setTextColor(mParams.mColorTypedWord);
         previewText.setText(word);
         previewText.measure(
                 ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
@@ -692,7 +684,7 @@
     private void addToDictionary(CharSequence word) {
         if (mListener.addWordToDictionary(word.toString())) {
             final CharSequence message = getContext().getString(R.string.added_word, word);
-            showPreview(mStripParams.mWordToSaveView, message);
+            showPreview(mParams.mWordToSaveView, message);
         }
     }
 
@@ -732,7 +724,7 @@
 
     @Override
     public boolean onLongClick(View view) {
-        final SuggestionsStripParams params = mStripParams;
+        final SuggestionsViewParams params = mParams;
         if (params.mMoreSuggestionsAvailable) {
             final int stripWidth = getWidth();
             final View container = mMoreSuggestionsContainer;
@@ -799,7 +791,7 @@
 
     @Override
     public void onClick(View view) {
-        if (view == mStripParams.mWordToSaveView) {
+        if (view == mParams.mWordToSaveView) {
             addToDictionary((CharSequence)view.getTag());
             clear();
             return;
