diff --git a/java/res/drawable-hdpi/btn_candidate_pressed.9.png b/java/res/drawable-hdpi/btn_suggestion_pressed.9.png
similarity index 100%
rename from java/res/drawable-hdpi/btn_candidate_pressed.9.png
rename to java/res/drawable-hdpi/btn_suggestion_pressed.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/candidate_feedback_background.9.png b/java/res/drawable-hdpi/suggestion_feedback_background.9.png
similarity index 100%
rename from java/res/drawable-hdpi/candidate_feedback_background.9.png
rename to java/res/drawable-hdpi/suggestion_feedback_background.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_candidate_pressed.9.png b/java/res/drawable-mdpi/btn_suggestion_pressed.9.png
similarity index 100%
rename from java/res/drawable-mdpi/btn_candidate_pressed.9.png
rename to java/res/drawable-mdpi/btn_suggestion_pressed.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/candidate_feedback_background.9.png b/java/res/drawable-mdpi/suggestion_feedback_background.9.png
similarity index 100%
rename from java/res/drawable-mdpi/candidate_feedback_background.9.png
rename to java/res/drawable-mdpi/suggestion_feedback_background.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_candidate_pressed.9.png b/java/res/drawable-xhdpi/btn_suggestion_pressed.9.png
similarity index 100%
rename from java/res/drawable-xhdpi/btn_candidate_pressed.9.png
rename to java/res/drawable-xhdpi/btn_suggestion_pressed.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/candidate_feedback_background.9.png b/java/res/drawable-xhdpi/suggestion_feedback_background.9.png
similarity index 100%
rename from java/res/drawable-xhdpi/candidate_feedback_background.9.png
rename to java/res/drawable-xhdpi/suggestion_feedback_background.9.png
Binary files differ
diff --git a/java/res/drawable/btn_candidate.xml b/java/res/drawable/btn_suggestion.xml
similarity index 86%
rename from java/res/drawable/btn_candidate.xml
rename to java/res/drawable/btn_suggestion.xml
index efcee9f..cde12fe 100644
--- a/java/res/drawable/btn_candidate.xml
+++ b/java/res/drawable/btn_suggestion.xml
@@ -2,7 +2,7 @@
 <!--
 /*
 **
-** Copyright 2010, The Android Open Source Project
+** Copyright 2011, The Android Open Source Project
 **
 ** Licensed under the Apache License, Version 2.0 (the "License");
 ** you may not use this file except in compliance with the License.
@@ -23,5 +23,5 @@
 >
     <item
         android:state_pressed="true"
-        android:drawable="@drawable/btn_candidate_pressed" />
+        android:drawable="@drawable/btn_suggestion_pressed" />
 </selector>
diff --git a/java/res/drawable/btn_candidate_ics.xml b/java/res/drawable/btn_suggestion_ics.xml
similarity index 100%
rename from java/res/drawable/btn_candidate_ics.xml
rename to java/res/drawable/btn_suggestion_ics.xml
diff --git a/java/res/layout/input_view.xml b/java/res/layout/input_view.xml
index 821082f..3284695 100644
--- a/java/res/layout/input_view.xml
+++ b/java/res/layout/input_view.xml
@@ -25,55 +25,34 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
 >
-    <!-- On tablets, the candidate strip is centered with horizontal paddings on both sides because
-         width of the landscape mode is too long for the candidate strip. This LinearLayout is
-         required to hold the paddings. -->
+    <!-- On tablets, the suggestions strip is centered with horizontal paddings on both sides
+         because width of the landscape mode is too long for the suggestions strip. This
+         LinearLayout is required to hold the paddings. -->
     <LinearLayout
-        android:id="@+id/candidates_container"
+        android:id="@+id/suggestions_container"
         android:orientation="horizontal"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:minHeight="@dimen/candidate_strip_minimum_height"
+        android:minHeight="@dimen/suggestions_strip_minimum_height"
         android:gravity="bottom"
     >
         <View
-            android:layout_width="@dimen/candidate_strip_padding"
-            android:layout_height="@dimen/candidate_strip_height"
+            android:layout_width="@dimen/suggestions_strip_padding"
+            android:layout_height="@dimen/suggestions_strip_height"
             style="?attr/suggestionsStripBackgroundStyle" />
-        <com.android.inputmethod.latin.CandidateView
-            android:id="@+id/candidates"
+        <com.android.inputmethod.latin.SuggestionsView
+            android:id="@+id/suggestions_view"
             android:layout_weight="1.0"
             android:layout_width="0dp"
-            android:layout_height="@dimen/candidate_strip_height"
+            android:layout_height="@dimen/suggestions_strip_height"
             android:gravity="center_vertical"
-            style="?attr/candidateViewStyle" />
+            style="?attr/suggestionsViewStyle" />
         <View
-            android:layout_width="@dimen/candidate_strip_padding"
-            android:layout_height="@dimen/candidate_strip_height"
+            android:layout_width="@dimen/suggestions_strip_padding"
+            android:layout_height="@dimen/suggestions_strip_height"
             style="?attr/suggestionsStripBackgroundStyle" />
     </LinearLayout>
 
-    <LinearLayout
-        android:id="@+id/candidates_pane_container"
-        android:orientation="horizontal"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:visibility="gone"
-        style="?attr/suggestionsStripBackgroundStyle"
-    >
-        <View
-            android:layout_width="@dimen/candidate_strip_padding"
-            android:layout_height="@dimen/candidate_strip_height" />
-        <FrameLayout
-            android:id="@+id/candidates_pane"
-            android:layout_weight="1.0"
-            android:layout_width="0dp"
-            android:layout_height="match_parent" />
-        <View
-            android:layout_width="@dimen/candidate_strip_padding"
-            android:layout_height="@dimen/candidate_strip_height" />
-    </LinearLayout>
-
     <com.android.inputmethod.keyboard.LatinKeyboardView
         android:id="@+id/keyboard_view"
         android:layout_alignParentBottom="true"
diff --git a/java/res/layout/more_suggestions.xml b/java/res/layout/more_suggestions.xml
index d387a15..6aa82e1 100644
--- a/java/res/layout/more_suggestions.xml
+++ b/java/res/layout/more_suggestions.xml
@@ -30,7 +30,7 @@
             android:layout_alignParentBottom="true"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            latin:keyLabelSize="@dimen/candidate_text_size"
+            latin:keyLabelSize="@dimen/suggestion_text_size"
             latin:keyHintLetterRatio="@fraction/more_suggestions_info_ratio"
             latin:keyHintLetterColor="@android:color/white"
             />
diff --git a/java/res/layout/candidate_divider.xml b/java/res/layout/suggestion_divider.xml
similarity index 94%
rename from java/res/layout/candidate_divider.xml
rename to java/res/layout/suggestion_divider.xml
index dc5e779..e38a725 100644
--- a/java/res/layout/candidate_divider.xml
+++ b/java/res/layout/suggestion_divider.xml
@@ -2,7 +2,7 @@
 <!--
 /*
 **
-** Copyright 2010, The Android Open Source Project
+** Copyright 2011, The Android Open Source Project
 **
 ** Licensed under the Apache License, Version 2.0 (the "License");
 ** you may not use this file except in compliance with the License.
diff --git a/java/res/layout/candidate_info.xml b/java/res/layout/suggestion_info.xml
similarity index 100%
rename from java/res/layout/candidate_info.xml
rename to java/res/layout/suggestion_info.xml
diff --git a/java/res/layout/candidate_preview.xml b/java/res/layout/suggestion_preview.xml
similarity index 81%
rename from java/res/layout/candidate_preview.xml
rename to java/res/layout/suggestion_preview.xml
index 32705c9..3c026ae 100644
--- a/java/res/layout/candidate_preview.xml
+++ b/java/res/layout/suggestion_preview.xml
@@ -1,19 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-/* 
+/*
 **
-** Copyright 2008, The Android Open Source Project
+** Copyright 2011, The Android Open Source Project
 **
-** Licensed under the Apache License, Version 2.0 (the "License"); 
-** you may not use this file except in compliance with the License. 
-** You may obtain a copy of the License at 
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
 **
-**     http://www.apache.org/licenses/LICENSE-2.0 
+**     http://www.apache.org/licenses/LICENSE-2.0
 **
-** Unless required by applicable law or agreed to in writing, software 
-** distributed under the License is distributed on an "AS IS" BASIS, 
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
-** See the License for the specific language governing permissions and 
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
 ** limitations under the License.
 */
 -->
diff --git a/java/res/layout/candidate_word.xml b/java/res/layout/suggestion_word.xml
similarity index 79%
rename from java/res/layout/candidate_word.xml
rename to java/res/layout/suggestion_word.xml
index b711e8f..d64cacf 100644
--- a/java/res/layout/candidate_word.xml
+++ b/java/res/layout/suggestion_word.xml
@@ -2,7 +2,7 @@
 <!--
 /*
 **
-** Copyright 2010, The Android Open Source Project
+** Copyright 2011, The Android Open Source Project
 **
 ** Licensed under the Apache License, Version 2.0 (the "License");
 ** you may not use this file except in compliance with the License.
@@ -22,12 +22,12 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:minWidth="@dimen/candidate_min_width"
-    android:textSize="@dimen/candidate_text_size"
+    android:minWidth="@dimen/suggestion_min_width"
+    android:textSize="@dimen/suggestion_text_size"
     android:gravity="center"
-    android:paddingLeft="@dimen/candidate_padding"
+    android:paddingLeft="@dimen/suggestion_padding"
     android:paddingTop="0dp"
-    android:paddingRight="@dimen/candidate_padding"
+    android:paddingRight="@dimen/suggestion_padding"
     android:paddingBottom="0dp"
     android:focusable="false"
     android:clickable="false"
diff --git a/java/res/layout/candidates_strip.xml b/java/res/layout/suggestions_strip.xml
similarity index 92%
rename from java/res/layout/candidates_strip.xml
rename to java/res/layout/suggestions_strip.xml
index fdb13f7..9252017 100644
--- a/java/res/layout/candidates_strip.xml
+++ b/java/res/layout/suggestions_strip.xml
@@ -24,12 +24,12 @@
 >
     <!-- Placer for debug information -->
     <RelativeLayout
-        android:id="@+id/candidates_placer"
+        android:id="@+id/suggestions_placer"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
     >
         <LinearLayout
-            android:id="@+id/candidates_strip"
+            android:id="@+id/suggestions_strip"
             android:orientation="horizontal"
             android:layout_width="match_parent"
             android:layout_height="match_parent" />
diff --git a/java/res/values-land/dimens.xml b/java/res/values-land/dimens.xml
index 4bf0e20..322b6a6 100644
--- a/java/res/values-land/dimens.xml
+++ b/java/res/values-land/dimens.xml
@@ -58,10 +58,9 @@
 
     <dimen name="key_preview_offset_ics">0.01in</dimen>
 
-    <dimen name="candidate_strip_height">36dip</dimen>
+    <dimen name="suggestions_strip_height">36dip</dimen>
     <dimen name="more_suggestions_row_height">36dip</dimen>
-    <dimen name="candidate_strip_minimum_height">160sp</dimen>
-    <dimen name="candidate_strip_fading_edge_length">63dip</dimen>
+    <dimen name="suggestions_strip_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-sw600dp-land/dimens.xml b/java/res/values-sw600dp-land/dimens.xml
index 1d26338..f1715af 100644
--- a/java/res/values-sw600dp-land/dimens.xml
+++ b/java/res/values-sw600dp-land/dimens.xml
@@ -50,5 +50,5 @@
     <fraction name="key_hint_label_ratio">34%</fraction>
     <fraction name="key_uppercase_letter_ratio">29%</fraction>
 
-    <dimen name="candidate_strip_padding">40.0mm</dimen>
+    <dimen name="suggestions_strip_padding">40.0mm</dimen>
 </resources>
diff --git a/java/res/values-sw600dp/dimens.xml b/java/res/values-sw600dp/dimens.xml
index 6ce23cc..6955736 100644
--- a/java/res/values-sw600dp/dimens.xml
+++ b/java/res/values-sw600dp/dimens.xml
@@ -66,10 +66,10 @@
     <dimen name="key_preview_height_ics">15.0mm</dimen>
     <dimen name="key_preview_offset_ics">0.05in</dimen>
 
-    <dimen name="candidate_strip_height">44dip</dimen>
+    <dimen name="suggestions_strip_height">44dip</dimen>
     <dimen name="more_suggestions_row_height">44dip</dimen>
-    <dimen name="candidate_strip_padding">15.0mm</dimen>
-    <dimen name="candidate_min_width">0.3in</dimen>
-    <dimen name="candidate_padding">12dip</dimen>
-    <dimen name="candidate_text_size">22dip</dimen>
+    <dimen name="suggestions_strip_padding">15.0mm</dimen>
+    <dimen name="suggestion_min_width">0.3in</dimen>
+    <dimen name="suggestion_padding">12dip</dimen>
+    <dimen name="suggestion_text_size">22dip</dimen>
 </resources>
diff --git a/java/res/values-sw768dp-land/dimens.xml b/java/res/values-sw768dp-land/dimens.xml
index 0cfdffd..7303ea1 100644
--- a/java/res/values-sw768dp-land/dimens.xml
+++ b/java/res/values-sw768dp-land/dimens.xml
@@ -58,5 +58,5 @@
     <dimen name="key_preview_height_ics">26.5mm</dimen>
     <dimen name="key_preview_offset_ics">0.05in</dimen>
 
-    <dimen name="candidate_strip_padding">40.0mm</dimen>
+    <dimen name="suggestions_strip_padding">40.0mm</dimen>
 </resources>
diff --git a/java/res/values-sw768dp/dimens.xml b/java/res/values-sw768dp/dimens.xml
index 9b307e6..7db1df7 100644
--- a/java/res/values-sw768dp/dimens.xml
+++ b/java/res/values-sw768dp/dimens.xml
@@ -69,11 +69,11 @@
     <dimen name="key_preview_height_ics">15.0mm</dimen>
     <dimen name="key_preview_offset_ics">0.05in</dimen>
 
-    <dimen name="candidate_strip_height">44dip</dimen>
+    <dimen name="suggestions_strip_height">44dip</dimen>
     <dimen name="more_suggestions_row_height">44dip</dimen>
-    <dimen name="candidate_strip_minimum_height">200sp</dimen>
-    <dimen name="candidate_strip_padding">15.0mm</dimen>
-    <dimen name="candidate_min_width">46dip</dimen>
-    <dimen name="candidate_padding">8dip</dimen>
-    <dimen name="candidate_text_size">22dip</dimen>
+    <dimen name="suggestions_strip_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>
+    <dimen name="suggestion_text_size">22dip</dimen>
 </resources>
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 9d34268..fa6b2eb 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -30,7 +30,7 @@
         <attr name="suggestionsPaneViewStyle" format="reference" />
         <attr name="suggestionBackgroundStyle" format="reference" />
         <attr name="suggestionPreviewBackgroundStyle" format="reference" />
-        <attr name="candidateViewStyle" format="reference" />
+        <attr name="suggestionsViewStyle" format="reference" />
     </declare-styleable>
 
     <declare-styleable name="KeyboardView">
@@ -112,7 +112,7 @@
         </attr>
     </declare-styleable>
 
-    <declare-styleable name="CandidateView">
+    <declare-styleable name="SuggestionsView">
         <attr name="suggestionStripOption" format="integer">
             <flag name="autoCorrectBold" value="0x01" />
             <flag name="autoCorrectUnderline" value="0x02" />
@@ -122,8 +122,8 @@
         <attr name="colorTypedWord" format="color" />
         <attr name="colorAutoCorrect" format="color" />
         <attr name="colorSuggested" format="color" />
-        <attr name="candidateCountInStrip" format="integer" />
-        <attr name="centerCandidatePercentile" format="integer" />
+        <attr name="suggestionsCountInStrip" format="integer" />
+        <attr name="centerSuggestionPercentile" format="integer" />
     </declare-styleable>
 
     <declare-styleable name="Keyboard">
diff --git a/java/res/values/config.xml b/java/res/values/config.xml
index 923e37d..1ffbbac 100644
--- a/java/res/values/config.xml
+++ b/java/res/values/config.xml
@@ -30,11 +30,11 @@
     <bool name="config_digit_more_keys_enabled">true</bool>
     <!-- Whether or not Popup on key press is enabled by default -->
     <bool name="config_default_popup_preview">true</bool>
-    <!-- Default value for bigram suggestion: while showing candidates for a word should we weigh
+    <!-- Default value for bigram suggestion: while showing suggestions for a word should we weigh
          in the previous word? -->
     <bool name="config_default_bigram_suggestions">true</bool>
     <!-- Default value for bigram prediction: after entering a word and a space only, should we look
-         at input history to suggest a hopefully helpful candidate for the next word? -->
+         at input history to suggest a hopefully helpful suggestions for the next word? -->
     <bool name="config_default_bigram_prediction">false</bool>
     <bool name="config_default_compat_recorrection_enabled">true</bool>
     <bool name="config_default_sound_enabled">false</bool>
diff --git a/java/res/values/dimens.xml b/java/res/values/dimens.xml
index b7609a4..bd8c156 100644
--- a/java/res/values/dimens.xml
+++ b/java/res/values/dimens.xml
@@ -76,19 +76,18 @@
     <dimen name="key_preview_height_ics">80sp</dimen>
     <dimen name="key_preview_offset_ics">0.05in</dimen>
 
-    <dimen name="candidate_strip_height">40dip</dimen>
+    <dimen name="suggestions_strip_height">40dip</dimen>
     <dimen name="more_suggestions_key_horizontal_padding">12dip</dimen>
     <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="candidate_strip_minimum_height">200sp</dimen>
-    <dimen name="candidate_strip_fading_edge_length">63dip</dimen>
-    <dimen name="candidate_strip_padding">0dip</dimen>
-    <dimen name="candidate_min_width">44dip</dimen>
-    <dimen name="candidate_padding">6dip</dimen>
-    <dimen name="candidate_text_size">18dip</dimen>
-    <integer name="candidate_count_in_strip">3</integer>
-    <integer name="center_candidate_percentile">36</integer>
+    <dimen name="suggestions_strip_minimum_height">200sp</dimen>
+    <dimen name="suggestions_strip_padding">0dip</dimen>
+    <dimen name="suggestion_min_width">44dip</dimen>
+    <dimen name="suggestion_padding">6dip</dimen>
+    <dimen name="suggestion_text_size">18dip</dimen>
+    <integer name="suggestions_count_in_strip">3</integer>
+    <integer name="center_suggestion_percentile">36</integer>
 
     <!-- If the screen height in landscape is larger than the below value, then the keyboard
          will not go into extract (fullscreen) mode. -->
diff --git a/java/res/values/donottranslate.xml b/java/res/values/donottranslate.xml
index 5cd995b..228380d 100644
--- a/java/res/values/donottranslate.xml
+++ b/java/res/values/donottranslate.xml
@@ -44,13 +44,6 @@
     <!-- Label for "switch to phone symbols" key.  Must be short to fit on key! -->
     <string name="label_to_phone_symbols_key">\uff0a\uff03</string>
 
-    <!-- Character for candidate divider (BOX DRAWINGS LIGHT VERTICAL) -->
-    <string name="label_candidate_divider">\u2502</string>
-    <!-- Character for expand candidates pane (BLACK DOWN-POINTING TRIANGLE) -->
-    <string name="label_expand_candidates_pane">\u25bc</string>
-    <!-- Character for close candidates pane (BLACK UP-POINTING TRIANGLE) -->
-    <string name="label_close_candidates_pane">\u25b2</string>
-
     <!--  Always show the suggestion strip -->
     <string name="prefs_suggestion_visibility_show_value">0</string>
     <!--  Show the suggestion strip only on portrait mode -->
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index 2a3d705..fa80519 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -99,11 +99,11 @@
     <string name="auto_correction_summary">Spacebar and punctuation automatically correct mistyped words</string>
     <!-- Option to disable auto correction. [CHAR LIMIT=20] -->
     <string name="auto_correction_threshold_mode_off">Off</string>
-    <!-- Option to suggest auto correction candidates modestly. Auto-corrects only to a word which has small edit distance from typed word. [CHAR LIMIT=20] -->
+    <!-- Option to suggest auto correction suggestions modestly. Auto-corrects only to a word which has small edit distance from typed word. [CHAR LIMIT=20] -->
     <string name="auto_correction_threshold_mode_modest">Modest</string>
-    <!-- Option to suggest auto correction candidates aggressively. Auto-corrects to a word which has even large edit distance from typed word. [CHAR LIMIT=20] -->
+    <!-- Option to suggest auto correction suggestions aggressively. Auto-corrects to a word which has even large edit distance from typed word. [CHAR LIMIT=20] -->
     <string name="auto_correction_threshold_mode_aggeressive">Aggressive</string>
-    <!-- Option to suggest auto correction candidates very aggressively. Auto-corrects to a word which has even large edit distance from typed word. [CHAR LIMIT=20] -->
+    <!-- Option to suggest auto correction suggestions very aggressively. Auto-corrects to a word which has even large edit distance from typed word. [CHAR LIMIT=20] -->
     <string name="auto_correction_threshold_mode_very_aggeressive">Very aggressive</string>
 
     <!-- Option to enable bigram correction -->
diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml
index 4cc2a53..17b3d14 100644
--- a/java/res/values/styles.xml
+++ b/java/res/values/styles.xml
@@ -88,21 +88,21 @@
         <item name="android:background">@drawable/keyboard_suggest_strip</item>
     </style>
     <style name="SuggestionBackgroundStyle">
-        <item name="android:background">@drawable/btn_candidate</item>
+        <item name="android:background">@drawable/btn_suggestion</item>
     </style>
     <style name="SuggestionPreviewBackgroundStyle">
-        <item name="android:background">@drawable/candidate_feedback_background</item>
+        <item name="android:background">@drawable/suggestion_feedback_background</item>
     </style>
     <style
-        name="CandidateViewStyle"
+        name="SuggestionsViewStyle"
         parent="SuggestionsStripBackgroundStyle"
     >
         <item name="suggestionStripOption">autoCorrectBold</item>
         <item name="colorTypedWord">#FFFFFFFF</item>
         <item name="colorAutoCorrect">#FFFCAE00</item>
         <item name="colorSuggested">#FFFCAE00</item>
-        <item name="candidateCountInStrip">@integer/candidate_count_in_strip</item>
-        <item name="centerCandidatePercentile">@integer/center_candidate_percentile</item>
+        <item name="suggestionsCountInStrip">@integer/suggestions_count_in_strip</item>
+        <item name="centerSuggestionPercentile">@integer/center_suggestion_percentile</item>
     </style>
     <!-- Theme "Basic high contrast" -->
     <style
@@ -233,7 +233,7 @@
         <item name="android:background">@drawable/keyboard_suggest_strip_holo</item>
     </style>
     <style name="SuggestionBackgroundStyle.IceCreamSandwich">
-        <item name="android:background">@drawable/btn_candidate_ics</item>
+        <item name="android:background">@drawable/btn_suggestion_ics</item>
     </style>
     <style
         name="SuggestionPreviewBackgroundStyle.IceCreamSandwich"
@@ -246,15 +246,15 @@
     >
     </style>
     <style
-        name="CandidateViewStyle.IceCreamSandwich"
+        name="SuggestionsViewStyle.IceCreamSandwich"
         parent="SuggestionsStripBackgroundStyle.IceCreamSandwich"
     >
         <item name="suggestionStripOption">autoCorrectBold|validTypedWordBold</item>
         <item name="colorTypedWord">#FFBCBEC0</item>
         <item name="colorAutoCorrect">#FF0099CC</item>
         <item name="colorSuggested">#FFA7A9AC</item>
-        <item name="candidateCountInStrip">@integer/candidate_count_in_strip</item>
-        <item name="centerCandidatePercentile">@integer/center_candidate_percentile</item>
+        <item name="suggestionsCountInStrip">@integer/suggestions_count_in_strip</item>
+        <item name="centerSuggestionPercentile">@integer/center_suggestion_percentile</item>
     </style>
     <style name="MiniKeyboardAnimation">
         <item name="android:windowEnterAnimation">@anim/mini_keyboard_fadein</item>
diff --git a/java/res/values/themes-basic-highcontrast.xml b/java/res/values/themes-basic-highcontrast.xml
index 51bf2f1..ee41093 100644
--- a/java/res/values/themes-basic-highcontrast.xml
+++ b/java/res/values/themes-basic-highcontrast.xml
@@ -25,6 +25,6 @@
         <item name="suggestionsPaneViewStyle">@style/SuggestionsPaneViewStyle</item>
         <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item>
         <item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle</item>
-        <item name="candidateViewStyle">@style/CandidateViewStyle</item>
+        <item name="suggestionsViewStyle">@style/SuggestionsViewStyle</item>
     </style>
 </resources>
diff --git a/java/res/values/themes-basic.xml b/java/res/values/themes-basic.xml
index 7288dba..ff7f9ed 100644
--- a/java/res/values/themes-basic.xml
+++ b/java/res/values/themes-basic.xml
@@ -25,6 +25,6 @@
         <item name="suggestionsPaneViewStyle">@style/SuggestionsPaneViewStyle</item>
         <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item>
         <item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle</item>
-        <item name="candidateViewStyle">@style/CandidateViewStyle</item>
+        <item name="suggestionsViewStyle">@style/SuggestionsViewStyle</item>
     </style>
 </resources>
diff --git a/java/res/values/themes-gingerbread.xml b/java/res/values/themes-gingerbread.xml
index 5b62378..af91c3b 100644
--- a/java/res/values/themes-gingerbread.xml
+++ b/java/res/values/themes-gingerbread.xml
@@ -25,6 +25,6 @@
         <item name="suggestionsPaneViewStyle">@style/SuggestionsPaneViewStyle</item>
         <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item>
         <item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle</item>
-        <item name="candidateViewStyle">@style/CandidateViewStyle</item>
+        <item name="suggestionsViewStyle">@style/SuggestionsViewStyle</item>
     </style>
 </resources>
diff --git a/java/res/values/themes-ics.xml b/java/res/values/themes-ics.xml
index 597d87b..341afcc 100644
--- a/java/res/values/themes-ics.xml
+++ b/java/res/values/themes-ics.xml
@@ -25,6 +25,6 @@
         <item name="suggestionsPaneViewStyle">@style/SuggestionsPaneViewStyle.IceCreamSandwich</item>
         <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle.IceCreamSandwich</item>
         <item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle.IceCreamSandwich</item>
-        <item name="candidateViewStyle">@style/CandidateViewStyle.IceCreamSandwich</item>
+        <item name="suggestionsViewStyle">@style/SuggestionsViewStyle.IceCreamSandwich</item>
     </style>
 </resources>
diff --git a/java/res/values/themes-stone-bold.xml b/java/res/values/themes-stone-bold.xml
index ff7107d..915f226 100644
--- a/java/res/values/themes-stone-bold.xml
+++ b/java/res/values/themes-stone-bold.xml
@@ -25,6 +25,6 @@
         <item name="suggestionsPaneViewStyle">@style/SuggestionsPaneViewStyle</item>
             <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item>
         <item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle</item>
-        <item name="candidateViewStyle">@style/CandidateViewStyle</item>
+        <item name="suggestionsViewStyle">@style/SuggestionsViewStyle</item>
     </style>
 </resources>
diff --git a/java/res/values/themes-stone.xml b/java/res/values/themes-stone.xml
index 35390d1..6d5b9db 100644
--- a/java/res/values/themes-stone.xml
+++ b/java/res/values/themes-stone.xml
@@ -25,6 +25,6 @@
         <item name="suggestionsPaneViewStyle">@style/SuggestionsPaneViewStyle</item>
         <item name="suggestionBackgroundStyle">@style/SuggestionBackgroundStyle</item>
         <item name="suggestionPreviewBackgroundStyle">@style/SuggestionPreviewBackgroundStyle</item>
-        <item name="candidateViewStyle">@style/CandidateViewStyle</item>
+        <item name="suggestionsViewStyle">@style/SuggestionsViewStyle</item>
     </style>
 </resources>
diff --git a/java/src/com/android/inputmethod/deprecated/recorrection/Recorrection.java b/java/src/com/android/inputmethod/deprecated/recorrection/Recorrection.java
index bf2512d..75efa52 100644
--- a/java/src/com/android/inputmethod/deprecated/recorrection/Recorrection.java
+++ b/java/src/com/android/inputmethod/deprecated/recorrection/Recorrection.java
@@ -16,21 +16,6 @@
 
 package com.android.inputmethod.deprecated.recorrection;
 
-import com.android.inputmethod.compat.InputConnectionCompatUtils;
-import com.android.inputmethod.compat.SuggestionSpanUtils;
-import com.android.inputmethod.deprecated.VoiceProxy;
-import com.android.inputmethod.keyboard.KeyboardSwitcher;
-import com.android.inputmethod.latin.AutoCorrection;
-import com.android.inputmethod.latin.CandidateView;
-import com.android.inputmethod.latin.EditingUtils;
-import com.android.inputmethod.latin.LatinIME;
-import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.Settings;
-import com.android.inputmethod.latin.Suggest;
-import com.android.inputmethod.latin.SuggestedWords;
-import com.android.inputmethod.latin.TextEntryState;
-import com.android.inputmethod.latin.WordComposer;
-
 import android.content.SharedPreferences;
 import android.content.res.Resources;
 import android.text.TextUtils;
@@ -38,6 +23,21 @@
 import android.view.inputmethod.ExtractedTextRequest;
 import android.view.inputmethod.InputConnection;
 
+import com.android.inputmethod.compat.InputConnectionCompatUtils;
+import com.android.inputmethod.compat.SuggestionSpanUtils;
+import com.android.inputmethod.deprecated.VoiceProxy;
+import com.android.inputmethod.keyboard.KeyboardSwitcher;
+import com.android.inputmethod.latin.AutoCorrection;
+import com.android.inputmethod.latin.EditingUtils;
+import com.android.inputmethod.latin.LatinIME;
+import com.android.inputmethod.latin.R;
+import com.android.inputmethod.latin.Settings;
+import com.android.inputmethod.latin.Suggest;
+import com.android.inputmethod.latin.SuggestedWords;
+import com.android.inputmethod.latin.SuggestionsView;
+import com.android.inputmethod.latin.TextEntryState;
+import com.android.inputmethod.latin.WordComposer;
+
 import java.util.ArrayList;
 
 /**
@@ -107,7 +107,7 @@
     }
 
     public void updateRecorrectionSelection(KeyboardSwitcher keyboardSwitcher,
-            CandidateView candidateView, int candidatesStart, int candidatesEnd,
+            SuggestionsView suggestionsView, int candidatesStart, int candidatesEnd,
             int newSelStart, int newSelEnd, int oldSelStart, int lastSelectionStart,
             int lastSelectionEnd, boolean hasUncommittedTypedChars) {
         if (SuggestionSpanUtils.SUGGESTION_SPAN_IS_SUPPORTED || !mRecorrectionEnabled) return;
@@ -127,7 +127,7 @@
                 // If showing the "touch again to save" hint, do not replace it. Else,
                 // show the bigrams if we are at the end of the text, punctuation
                 // otherwise.
-                if (candidateView != null && !candidateView.isShowingAddToDictionaryHint()) {
+                if (suggestionsView != null && !suggestionsView.isShowingAddToDictionaryHint()) {
                     InputConnection ic = mService.getCurrentInputConnection();
                     if (null == ic || !TextUtils.isEmpty(ic.getTextAfterCursor(1, 0))) {
                         if (!mService.isShowingPunctuationList()) {
@@ -219,13 +219,13 @@
     }
 
     public void fetchAndDisplayRecorrectionSuggestions(VoiceProxy voiceProxy,
-            CandidateView candidateView, Suggest suggest, KeyboardSwitcher keyboardSwitcher,
+            SuggestionsView suggestionsView, Suggest suggest, KeyboardSwitcher keyboardSwitcher,
             WordComposer word, boolean hasUncommittedTypedChars, int lastSelectionStart,
             int lastSelectionEnd, String wordSeparators) {
         if (!InputConnectionCompatUtils.RECORRECTION_SUPPORTED) return;
         if (SuggestionSpanUtils.SUGGESTION_SPAN_IS_SUPPORTED || !mRecorrectionEnabled) return;
         voiceProxy.setShowingVoiceSuggestions(false);
-        if (candidateView != null && candidateView.isShowingAddToDictionaryHint()) {
+        if (suggestionsView != null && suggestionsView.isShowingAddToDictionaryHint()) {
             return;
         }
         InputConnection ic = mService.getCurrentInputConnection();
@@ -260,7 +260,7 @@
         if (SuggestionSpanUtils.SUGGESTION_SPAN_IS_SUPPORTED) return;
         if (force || TextEntryState.isRecorrecting()) {
             TextEntryState.onAbortRecorrection();
-            mService.setCandidatesViewShown(mService.isCandidateStripVisible());
+            mService.setCandidatesViewShown(mService.isSuggestionsStripVisible());
             mService.getCurrentInputConnection().finishComposingText();
             mService.clearSuggestions();
         }
diff --git a/java/src/com/android/inputmethod/latin/AutoCorrection.java b/java/src/com/android/inputmethod/latin/AutoCorrection.java
index d311979..e6ae2c5 100644
--- a/java/src/com/android/inputmethod/latin/AutoCorrection.java
+++ b/java/src/com/android/inputmethod/latin/AutoCorrection.java
@@ -119,15 +119,15 @@
         if (wordComposer.size() > 1 && (correctionMode == Suggest.CORRECTION_FULL
                 || correctionMode == Suggest.CORRECTION_FULL_BIGRAM)
                 && typedWord != null && suggestions.size() > 0 && sortedScores.length > 0) {
-            final CharSequence autoCorrectionCandidate = suggestions.get(0);
-            final int autoCorrectionCandidateScore = sortedScores[0];
+            final CharSequence autoCorrectionSuggestion = suggestions.get(0);
+            final int autoCorrectionSuggestionScore = sortedScores[0];
             // TODO: when the normalized score of the first suggestion is nearly equals to
             //       the normalized score of the second suggestion, behave less aggressive.
             mNormalizedScore = Utils.calcNormalizedScore(
-                    typedWord,autoCorrectionCandidate, autoCorrectionCandidateScore);
+                    typedWord,autoCorrectionSuggestion, autoCorrectionSuggestionScore);
             if (DBG) {
-                Log.d(TAG, "Normalized " + typedWord + "," + autoCorrectionCandidate + ","
-                        + autoCorrectionCandidateScore + ", " + mNormalizedScore
+                Log.d(TAG, "Normalized " + typedWord + "," + autoCorrectionSuggestion + ","
+                        + autoCorrectionSuggestionScore + ", " + mNormalizedScore
                         + "(" + autoCorrectionThreshold + ")");
             }
             if (mNormalizedScore >= autoCorrectionThreshold) {
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index da6c221..85363fd 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -77,7 +77,7 @@
  * Input method implementation for Qwerty'ish keyboard.
  */
 public class LatinIME extends InputMethodServiceCompatWrapper implements KeyboardActionListener,
-        CandidateView.Listener {
+        SuggestionsView.Listener {
     private static final String TAG = LatinIME.class.getSimpleName();
     private static final boolean PERF_DEBUG = false;
     private static final boolean TRACE = false;
@@ -157,9 +157,9 @@
 
     private Settings.Values mSettingsValues;
 
-    private View mCandidateViewContainer;
-    private int mCandidateStripHeight;
-    private CandidateView mCandidateView;
+    private View mSuggestionsContainer;
+    private int mSuggestionsStripHeight;
+    private SuggestionsView mSuggestionsView;
     private Suggest mSuggest;
     private CompletionInfo[] mApplicationSpecifiedCompletions;
 
@@ -254,7 +254,7 @@
                 break;
             case MSG_UPDATE_OLD_SUGGESTIONS:
                 latinIme.mRecorrection.fetchAndDisplayRecorrectionSuggestions(
-                        latinIme.mVoiceProxy, latinIme.mCandidateView,
+                        latinIme.mVoiceProxy, latinIme.mSuggestionsView,
                         latinIme.mSuggest, latinIme.mKeyboardSwitcher, latinIme.mWordComposer,
                         latinIme.mHasUncommittedTypedChars, latinIme.mLastSelectionStart,
                         latinIme.mLastSelectionEnd, latinIme.mSettingsValues.mWordSeparators);
@@ -607,11 +607,11 @@
     @Override
     public void setInputView(View view) {
         super.setInputView(view);
-        mCandidateViewContainer = view.findViewById(R.id.candidates_container);
-        mCandidateView = (CandidateView) view.findViewById(R.id.candidates);
-        if (mCandidateView != null)
-            mCandidateView.setListener(this, view);
-        mCandidateStripHeight = (int)mResources.getDimension(R.dimen.candidate_strip_height);
+        mSuggestionsContainer = view.findViewById(R.id.suggestions_container);
+        mSuggestionsView = (SuggestionsView) view.findViewById(R.id.suggestions_view);
+        if (mSuggestionsView != null)
+            mSuggestionsView.setListener(this, view);
+        mSuggestionsStripHeight = (int)mResources.getDimension(R.dimen.suggestions_strip_height);
     }
 
     @Override
@@ -678,9 +678,10 @@
             switcher.loadKeyboard(attribute, mSettingsValues);
         }
 
-        if (mCandidateView != null)
-            mCandidateView.clear();
-        setSuggestionStripShownInternal(isCandidateStripVisible(), /* needsInputViewShown */ false);
+        if (mSuggestionsView != null)
+            mSuggestionsView.clear();
+        setSuggestionStripShownInternal(
+                isSuggestionsStripVisible(), /* needsInputViewShown */ false);
         // Delay updating suggestions because keyboard input view may not be shown at this point.
         mHandler.postUpdateSuggestions();
 
@@ -708,7 +709,7 @@
 
         if ((inputType & InputType.TYPE_MASK_CLASS) == InputType.TYPE_CLASS_TEXT) {
             mIsSettingsSuggestionStripOn = true;
-            // Make sure that passwords are not displayed in candidate view
+            // Make sure that passwords are not displayed in {@link SuggestionsView}.
             if (InputTypeCompatUtils.isPasswordInputType(inputType)
                     || InputTypeCompatUtils.isVisiblePasswordInputType(inputType)) {
                 mIsSettingsSuggestionStripOn = false;
@@ -819,7 +820,7 @@
                 && (selectionChanged || candidatesCleared)) {
             if (candidatesCleared) {
                 // If the composing span has been cleared, save the typed word in the history for
-                // recorrection before we reset the candidate strip.  Then, we'll be able to show
+                // recorrection before we reset the suggestions strip.  Then, we'll be able to show
                 // suggestions for recorrection right away.
                 mRecorrection.saveRecorrectionSuggestion(mWordComposer, mComposingStringBuilder);
             }
@@ -853,7 +854,7 @@
         mLastSelectionEnd = newSelEnd;
 
         mRecorrection.updateRecorrectionSelection(mKeyboardSwitcher,
-                mCandidateView, candidatesStart, candidatesEnd, newSelStart,
+                mSuggestionsView, candidatesStart, candidatesEnd, newSelStart,
                 newSelEnd, oldSelStart, mLastSelectionStart,
                 mLastSelectionEnd, mHasUncommittedTypedChars);
     }
@@ -866,10 +867,10 @@
     /**
      * This is called when the user has clicked on the extracted text view,
      * when running in fullscreen mode.  The default implementation hides
-     * the candidates view when this happens, but only if the extracted text
+     * the suggestions view when this happens, but only if the extracted text
      * editor has a vertical scroll bar because its text doesn't fit.
      * Here we override the behavior due to the possibility that a re-correction could
-     * cause the candidate strip to disappear and re-appear.
+     * cause the suggestions strip to disappear and re-appear.
      */
     @Override
     public void onExtractedTextClicked() {
@@ -881,11 +882,11 @@
     /**
      * This is called when the user has performed a cursor movement in the
      * extracted text view, when it is running in fullscreen mode.  The default
-     * implementation hides the candidates view when a vertical movement
+     * implementation hides the suggestions view when a vertical movement
      * happens, but only if the extracted text editor has a vertical scroll bar
      * because its text doesn't fit.
      * Here we override the behavior due to the possibility that a re-correction could
-     * cause the candidate strip to disappear and re-appear.
+     * cause the suggestions strip to disappear and re-appear.
      */
     @Override
     public void onExtractedCursorMovement(int dx, int dy) {
@@ -938,20 +939,20 @@
     }
 
     private void setSuggestionStripShownInternal(boolean shown, boolean needsInputViewShown) {
-        // TODO: Modify this if we support candidates with hard keyboard
-        if (onEvaluateInputViewShown() && mCandidateViewContainer != null) {
-            final boolean shouldShowCandidates = shown
+        // TODO: Modify this if we support suggestions with hard keyboard
+        if (onEvaluateInputViewShown() && mSuggestionsContainer != null) {
+            final boolean shouldShowSuggestions = shown
                     && (needsInputViewShown ? mKeyboardSwitcher.isInputViewShown() : true);
             if (isFullscreenMode()) {
                 // No need to have extra space to show the key preview.
-                mCandidateViewContainer.setMinimumHeight(0);
-                mCandidateViewContainer.setVisibility(
-                        shouldShowCandidates ? View.VISIBLE : View.GONE);
+                mSuggestionsContainer.setMinimumHeight(0);
+                mSuggestionsContainer.setVisibility(
+                        shouldShowSuggestions ? View.VISIBLE : View.GONE);
             } else {
                 // We must control the visibility of the suggestion strip in order to avoid clipped
                 // key previews, even when we don't show the suggestion strip.
-                mCandidateViewContainer.setVisibility(
-                        shouldShowCandidates ? View.VISIBLE : View.INVISIBLE);
+                mSuggestionsContainer.setVisibility(
+                        shouldShowSuggestions ? View.VISIBLE : View.INVISIBLE);
             }
         }
     }
@@ -964,14 +965,14 @@
     public void onComputeInsets(InputMethodService.Insets outInsets) {
         super.onComputeInsets(outInsets);
         final KeyboardView inputView = mKeyboardSwitcher.getKeyboardView();
-        if (inputView == null || mCandidateViewContainer == null)
+        if (inputView == null || mSuggestionsContainer == null)
             return;
-        final int containerHeight = mCandidateViewContainer.getHeight();
+        final int containerHeight = mSuggestionsContainer.getHeight();
         int touchY = containerHeight;
         // Need to set touchable region only if input view is being shown
         if (mKeyboardSwitcher.isInputViewShown()) {
-            if (mCandidateViewContainer.getVisibility() == View.VISIBLE) {
-                touchY -= mCandidateStripHeight;
+            if (mSuggestionsContainer.getVisibility() == View.VISIBLE) {
+                touchY -= mSuggestionsStripHeight;
             }
             final int touchWidth = inputView.getWidth();
             final int touchHeight = inputView.getHeight() + containerHeight
@@ -1321,7 +1322,7 @@
         if (mEnteredText != null && sameAsTextBeforeCursor(ic, mEnteredText)) {
             ic.deleteSurroundingText(mEnteredText.length(), 0);
         } else if (deleteChar) {
-            if (mCandidateView != null && mCandidateView.dismissAddToDictionaryHint()) {
+            if (mSuggestionsView != null && mSuggestionsView.dismissAddToDictionaryHint()) {
                 // Go back to the suggestion mode if the user canceled the
                 // "Touch again to save".
                 // NOTE: In gerenal, we don't revert the word when backspacing
@@ -1440,7 +1441,7 @@
         mVoiceProxy.handleSeparator();
 
         // Should dismiss the "Touch again to save" message when handling separator
-        if (mCandidateView != null && mCandidateView.dismissAddToDictionaryHint()) {
+        if (mSuggestionsView != null && mSuggestionsView.dismissAddToDictionaryHint()) {
             mHandler.cancelUpdateBigramPredictions();
             mHandler.postUpdateSuggestions();
         }
@@ -1491,8 +1492,8 @@
             if (!TextUtils.isEmpty(typedWord) && !typedWord.equals(mBestWord)) {
                 InputConnectionCompatUtils.commitCorrection(
                         ic, mLastSelectionEnd - typedWord.length(), typedWord, mBestWord);
-                if (mCandidateView != null)
-                    mCandidateView.onAutoCorrectionInverted(mBestWord);
+                if (mSuggestionsView != null)
+                    mSuggestionsView.onAutoCorrectionInverted(mBestWord);
             }
         }
         if (Keyboard.CODE_SPACE == primaryCode) {
@@ -1527,7 +1528,7 @@
     }
 
     public boolean isShowingPunctuationList() {
-        return mSettingsValues.mSuggestPuncList == mCandidateView.getSuggestions();
+        return mSettingsValues.mSuggestPuncList == mSuggestionsView.getSuggestions();
     }
 
     public boolean isShowingSuggestionsStrip() {
@@ -1536,10 +1537,10 @@
                         && mDisplayOrientation == Configuration.ORIENTATION_PORTRAIT);
     }
 
-    public boolean isCandidateStripVisible() {
-        if (mCandidateView == null)
+    public boolean isSuggestionsStripVisible() {
+        if (mSuggestionsView == null)
             return false;
-        if (mCandidateView.isShowingAddToDictionaryHint() || TextEntryState.isRecorrecting())
+        if (mSuggestionsView.isShowingAddToDictionaryHint() || TextEntryState.isRecorrecting())
             return true;
         if (!isShowingSuggestionsStrip())
             return false;
@@ -1561,7 +1562,7 @@
             }
             setInputView(v);
         }
-        setSuggestionStripShown(isCandidateStripVisible());
+        setSuggestionStripShown(isSuggestionsStripVisible());
         updateInputViewShown();
         mHandler.postUpdateSuggestions();
     }
@@ -1571,8 +1572,8 @@
     }
 
     public void setSuggestions(SuggestedWords words) {
-        if (mCandidateView != null) {
-            mCandidateView.setSuggestions(words);
+        if (mSuggestionsView != null) {
+            mSuggestionsView.setSuggestions(words);
             mKeyboardSwitcher.onAutoCorrectionStateChanged(
                     words.hasWordAboveAutoCorrectionScoreThreshold());
         }
@@ -1625,11 +1626,11 @@
         // length == 1).
         if (typedWord != null) {
             if (builder.size() > 1 || typedWord.length() == 1 || typedWordValid
-                    || mCandidateView.isShowingAddToDictionaryHint()) {
+                    || mSuggestionsView.isShowingAddToDictionaryHint()) {
                 builder.setTypedWordValid(typedWordValid).setHasMinimalSuggestion(
                         autoCorrectionAvailable);
             } else {
-                final SuggestedWords previousSuggestions = mCandidateView.getSuggestions();
+                final SuggestedWords previousSuggestions = mSuggestionsView.getSuggestions();
                 if (previousSuggestions == mSettingsValues.mSuggestPuncList)
                     return;
                 builder.addTypedWordAndPreviousSuggestions(typedWord, previousSuggestions);
@@ -1651,11 +1652,11 @@
         } else {
             mBestWord = null;
         }
-        setSuggestionStripShown(isCandidateStripVisible());
+        setSuggestionStripShown(isSuggestionsStripVisible());
     }
 
     private boolean pickDefaultSuggestion(int separatorCode) {
-        // Complete any pending candidate query first
+        // Complete any pending suggestions query first
         if (mHandler.hasPendingUpdateSuggestions()) {
             mHandler.cancelUpdateSuggestions();
             updateSuggestions();
@@ -1674,7 +1675,7 @@
 
     @Override
     public void pickSuggestionManually(int index, CharSequence suggestion) {
-        SuggestedWords suggestions = mCandidateView.getSuggestions();
+        SuggestedWords suggestions = mSuggestionsView.getSuggestions();
         mVoiceProxy.flushAndLogAllTextModificationCounters(index, suggestion,
                 mSettingsValues.mWordSeparators);
 
@@ -1690,8 +1691,8 @@
                 ic.commitCompletion(completionInfo);
             }
             mCommittedLength = suggestion.length();
-            if (mCandidateView != null) {
-                mCandidateView.clear();
+            if (mSuggestionsView != null) {
+                mSuggestionsView.clear();
             }
             mKeyboardSwitcher.updateShiftState();
             if (ic != null) {
@@ -1786,7 +1787,7 @@
         }
         if (showingAddToDictionaryHint) {
             if (mIsUserDictionaryAvaliable) {
-                mCandidateView.showAddToDictionaryHint(suggestion);
+                mSuggestionsView.showAddToDictionaryHint(suggestion);
             } else {
                 mHandler.postUpdateSuggestions();
             }
@@ -1806,7 +1807,7 @@
         final InputConnection ic = getCurrentInputConnection();
         if (ic != null) {
             mVoiceProxy.rememberReplacedWord(bestWord, mSettingsValues.mWordSeparators);
-            SuggestedWords suggestedWords = mCandidateView.getSuggestions();
+            SuggestedWords suggestedWords = mSuggestionsView.getSuggestions();
             ic.commitText(SuggestionSpanUtils.getTextWithSuggestionSpan(
                     this, bestWord, suggestedWords), 1);
         }
@@ -1842,7 +1843,7 @@
 
     public void setPunctuationSuggestions() {
         setSuggestions(mSettingsValues.mSuggestPuncList);
-        setSuggestionStripShown(isCandidateStripVisible());
+        setSuggestionStripShown(isSuggestionsStripVisible());
     }
 
     private void addToUserUnigramAndBigramDictionaries(CharSequence suggestion,
diff --git a/java/src/com/android/inputmethod/latin/MoreSuggestions.java b/java/src/com/android/inputmethod/latin/MoreSuggestions.java
index 0446fb2..a9e75b7 100644
--- a/java/src/com/android/inputmethod/latin/MoreSuggestions.java
+++ b/java/src/com/android/inputmethod/latin/MoreSuggestions.java
@@ -43,10 +43,10 @@
         private int mToPos;
 
         public static class MoreSuggestionsParam extends KeyboardParams {
-            private final int[] mWidths = new int[CandidateView.MAX_SUGGESTIONS];
-            private final int[] mRowNumbers = new int[CandidateView.MAX_SUGGESTIONS];
-            private final int[] mColumnOrders = new int[CandidateView.MAX_SUGGESTIONS];
-            private final int[] mNumColumnsInRow = new int[CandidateView.MAX_SUGGESTIONS];
+            private final int[] mWidths = new int[SuggestionsView.MAX_SUGGESTIONS];
+            private final int[] mRowNumbers = new int[SuggestionsView.MAX_SUGGESTIONS];
+            private final int[] mColumnOrders = new int[SuggestionsView.MAX_SUGGESTIONS];
+            private final int[] mNumColumnsInRow = new int[SuggestionsView.MAX_SUGGESTIONS];
             private static final int MAX_COLUMNS_IN_ROW = 3;
             private int mNumRows;
 
@@ -60,7 +60,7 @@
 
                 int row = 0;
                 int pos = fromPos, rowStartPos = fromPos;
-                final int size = Math.min(suggestions.size(), CandidateView.MAX_SUGGESTIONS);
+                final int size = Math.min(suggestions.size(), SuggestionsView.MAX_SUGGESTIONS);
                 while (pos < size) {
                     final CharSequence word = suggestions.getWord(pos);
                     // TODO: Should take care of text x-scaling.
diff --git a/java/src/com/android/inputmethod/latin/CandidateView.java b/java/src/com/android/inputmethod/latin/SuggestionsView.java
similarity index 82%
rename from java/src/com/android/inputmethod/latin/CandidateView.java
rename to java/src/com/android/inputmethod/latin/SuggestionsView.java
index fe48f0b..617d7f1 100644
--- a/java/src/com/android/inputmethod/latin/CandidateView.java
+++ b/java/src/com/android/inputmethod/latin/SuggestionsView.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010 The Android Open Source Project
+ * Copyright (C) 2011 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
@@ -57,7 +57,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-public class CandidateView extends LinearLayout implements OnClickListener, OnLongClickListener {
+public class SuggestionsView extends LinearLayout implements OnClickListener, OnLongClickListener {
     public interface Listener {
         public boolean addWordToDictionary(String word);
         public void pickSuggestionManually(int index, CharSequence word);
@@ -68,8 +68,8 @@
 
     private static final boolean DBG = LatinImeLogger.sDBG;
 
-    private final ViewGroup mCandidatesPlacer;
-    private final ViewGroup mCandidatesStrip;
+    private final ViewGroup mSuggestionsPlacer;
+    private final ViewGroup mSuggestionsStrip;
     private View mKeyboardView;
 
     private final View mMoreSuggestionsContainer;
@@ -93,26 +93,26 @@
 
     private final UiHandler mHandler = new UiHandler(this);
 
-    private static class UiHandler extends StaticInnerHandlerWrapper<CandidateView> {
+    private static class UiHandler extends StaticInnerHandlerWrapper<SuggestionsView> {
         private static final int MSG_HIDE_PREVIEW = 0;
         private static final int MSG_UPDATE_SUGGESTION = 1;
 
         private static final long DELAY_HIDE_PREVIEW = 1300;
         private static final long DELAY_UPDATE_SUGGESTION = 300;
 
-        public UiHandler(CandidateView outerInstance) {
+        public UiHandler(SuggestionsView outerInstance) {
             super(outerInstance);
         }
 
         @Override
         public void dispatchMessage(Message msg) {
-            final CandidateView candidateView = getOuterInstance();
+            final SuggestionsView suggestionsView = getOuterInstance();
             switch (msg.what) {
             case MSG_HIDE_PREVIEW:
-                candidateView.hidePreview();
+                suggestionsView.hidePreview();
                 break;
             case MSG_UPDATE_SUGGESTION:
-                candidateView.updateSuggestions();
+                suggestionsView.updateSuggestions();
                 break;
             }
         }
@@ -142,16 +142,16 @@
         }
     }
 
-    private static class CandidateViewParams {
+    private static class SuggestionsViewParams {
         public final int mPadding;
         public final int mDividerWidth;
-        public final int mCandidateStripHeight;
+        public final int mSuggestionsStripHeight;
 
         protected final List<TextView> mWords;
         protected final List<View> mDividers;
         protected final List<TextView> mInfos;
 
-        protected CandidateViewParams(List<TextView> words, List<View> dividers,
+        protected SuggestionsViewParams(List<TextView> words, List<View> dividers,
                 List<TextView> infos) {
             mWords = words;
             mDividers = dividers;
@@ -165,22 +165,22 @@
             mDividerWidth = divider.getMeasuredWidth();
 
             final Resources res = word.getResources();
-            mCandidateStripHeight = res.getDimensionPixelSize(R.dimen.candidate_strip_height);
+            mSuggestionsStripHeight = res.getDimensionPixelSize(R.dimen.suggestions_strip_height);
         }
     }
 
-    private static class SuggestionsStripParams extends CandidateViewParams {
-        private static final int DEFAULT_CANDIDATE_COUNT_IN_STRIP = 3;
-        private static final int DEFAULT_CENTER_CANDIDATE_PERCENTILE = 40;
+    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;
 
         private final int mColorTypedWord;
         private final int mColorAutoCorrect;
-        private final int mColorSuggestedCandidate;
-        public final int mCandidateCountInStrip;
-        private final float mCenterCandidateWeight;
-        private final int mCenterCandidateIndex;
-        private final Drawable mMoreCandidateHint;
+        private final int mColorSuggested;
+        public final int mSuggestionsCountInStrip;
+        private final float mCenterSuggestionWeight;
+        private final int mCenterSuggestionIndex;
+        private final Drawable mMoreSuggestionsHint;
 
         private static final CharacterStyle BOLD_SPAN = new StyleSpan(Typeface.BOLD);
         private static final CharacterStyle UNDERLINE_SPAN = new UnderlineSpan();
@@ -205,33 +205,33 @@
                 List<TextView> words, List<View> dividers, List<TextView> infos) {
             super(words, dividers, infos);
             final TypedArray a = context.obtainStyledAttributes(
-                    attrs, R.styleable.CandidateView, defStyle, R.style.CandidateViewStyle);
-            mSuggestionStripOption = a.getInt(R.styleable.CandidateView_suggestionStripOption, 0);
-            mColorTypedWord = a.getColor(R.styleable.CandidateView_colorTypedWord, 0);
-            mColorAutoCorrect = a.getColor(R.styleable.CandidateView_colorAutoCorrect, 0);
-            mColorSuggestedCandidate = a.getColor(R.styleable.CandidateView_colorSuggested, 0);
-            mCandidateCountInStrip = a.getInt(
-                    R.styleable.CandidateView_candidateCountInStrip,
-                    DEFAULT_CANDIDATE_COUNT_IN_STRIP);
-            mCenterCandidateWeight = a.getInt(
-                    R.styleable.CandidateView_centerCandidatePercentile,
-                    DEFAULT_CENTER_CANDIDATE_PERCENTILE) / 100.0f;
+                    attrs, R.styleable.SuggestionsView, defStyle, R.style.SuggestionsViewStyle);
+            mSuggestionStripOption = a.getInt(R.styleable.SuggestionsView_suggestionStripOption, 0);
+            mColorTypedWord = a.getColor(R.styleable.SuggestionsView_colorTypedWord, 0);
+            mColorAutoCorrect = a.getColor(R.styleable.SuggestionsView_colorAutoCorrect, 0);
+            mColorSuggested = a.getColor(R.styleable.SuggestionsView_colorSuggested, 0);
+            mSuggestionsCountInStrip = a.getInt(
+                    R.styleable.SuggestionsView_suggestionsCountInStrip,
+                    DEFAULT_SUGGESTIONS_COUNT_IN_STRIP);
+            mCenterSuggestionWeight = a.getInt(
+                    R.styleable.SuggestionsView_centerSuggestionPercentile,
+                    DEFAULT_CENTER_SUGGESTION_PERCENTILE) / 100.0f;
             a.recycle();
 
-            mCenterCandidateIndex = mCandidateCountInStrip / 2;
+            mCenterSuggestionIndex = mSuggestionsCountInStrip / 2;
             final Resources res = context.getResources();
-            mMoreCandidateHint = res.getDrawable(R.drawable.more_suggestions_hint);
+            mMoreSuggestionsHint = res.getDrawable(R.drawable.more_suggestions_hint);
 
             mInvertedForegroundColorSpan = new ForegroundColorSpan(mColorTypedWord ^ 0x00ffffff);
             mInvertedBackgroundColorSpan = new BackgroundColorSpan(mColorTypedWord);
 
             final LayoutInflater inflater = LayoutInflater.from(context);
-            mWordToSaveView = (TextView)inflater.inflate(R.layout.candidate_word, null);
-            mHintToSaveView = (TextView)inflater.inflate(R.layout.candidate_word, null);
+            mWordToSaveView = (TextView)inflater.inflate(R.layout.suggestion_word, null);
+            mHintToSaveView = (TextView)inflater.inflate(R.layout.suggestion_word, null);
             mHintToSaveText = context.getText(R.string.hint_add_to_dictionary);
         }
 
-        private CharSequence getStyledCandidateWord(SuggestedWords suggestions, int pos) {
+        private CharSequence getStyledSuggestionWord(SuggestedWords suggestions, int pos) {
             final CharSequence word = suggestions.getWord(pos);
             final boolean isAutoCorrect = pos == 1 && willAutoCorrect(suggestions);
             final boolean isTypedWordValid = pos == 0 && suggestions.mTypedWordValid;
@@ -259,24 +259,24 @@
             // TODO: This works for 3 suggestions. Revisit this algorithm when there are 5 or more
             // suggestions.
             final int centerPos = willAutoCorrect(suggestions) ? 1 : 0;
-            if (index == mCenterCandidateIndex) {
+            if (index == mCenterSuggestionIndex) {
                 return centerPos;
             } else if (index == centerPos) {
-                return mCenterCandidateIndex;
+                return mCenterSuggestionIndex;
             } else {
                 return index;
             }
         }
 
-        private int getCandidateTextColor(int index, SuggestedWords suggestions, int pos) {
+        private int getSuggestionTextColor(int index, SuggestedWords suggestions, int pos) {
             // TODO: Need to revisit this logic with bigram suggestions
-            final boolean isSuggestedCandidate = (pos != 0);
+            final boolean isSuggested = (pos != 0);
 
             final int color;
-            if (index == mCenterCandidateIndex && willAutoCorrect(suggestions)) {
+            if (index == mCenterSuggestionIndex && willAutoCorrect(suggestions)) {
                 color = mColorAutoCorrect;
-            } else if (isSuggestedCandidate) {
-                color = mColorSuggestedCandidate;
+            } else if (isSuggested) {
+                color = mColorSuggested;
             } else {
                 color = mColorTypedWord;
             }
@@ -312,7 +312,7 @@
                 return;
             }
 
-            final int countInStrip = mCandidateCountInStrip;
+            final int countInStrip = mSuggestionsCountInStrip;
             setupTexts(suggestions, countInStrip);
             mMoreSuggestionsAvailable = (suggestions.size() > countInStrip);
             int x = 0;
@@ -321,34 +321,34 @@
 
                 if (index != 0) {
                     final View divider = mDividers.get(pos);
-                    // Add divider if this isn't the left most suggestion in candidate strip.
+                    // Add divider if this isn't the left most suggestion in suggestions strip.
                     stripView.addView(divider);
                     x += divider.getMeasuredWidth();
                 }
 
                 final CharSequence styled = mTexts.get(pos);
                 final TextView word = mWords.get(pos);
-                if (index == mCenterCandidateIndex && mMoreSuggestionsAvailable) {
+                if (index == mCenterSuggestionIndex && mMoreSuggestionsAvailable) {
                     // TODO: This "more suggestions hint" should have nicely designed icon.
                     word.setCompoundDrawablesWithIntrinsicBounds(
-                            null, null, null, mMoreCandidateHint);
+                            null, null, null, mMoreSuggestionsHint);
                     // HACK: To align with other TextView that has no compound drawables.
-                    word.setCompoundDrawablePadding(-mMoreCandidateHint.getIntrinsicHeight());
+                    word.setCompoundDrawablePadding(-mMoreSuggestionsHint.getIntrinsicHeight());
                 } else {
                     word.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
                 }
 
-                // Disable this candidate if the suggestion is null or empty.
+                // Disable this suggestion if the suggestion is null or empty.
                 word.setEnabled(!TextUtils.isEmpty(styled));
-                word.setTextColor(getCandidateTextColor(index, suggestions, pos));
-                final int width = getCandidateWidth(index, stripWidth);
+                word.setTextColor(getSuggestionTextColor(index, suggestions, pos));
+                final int width = getSuggestionWidth(index, stripWidth);
                 final CharSequence text = getEllipsizedText(styled, width, word.getPaint());
                 final float scaleX = word.getTextScaleX();
                 word.setText(text); // TextView.setText() resets text scale x to 1.0.
                 word.setTextScaleX(scaleX);
                 stripView.addView(word);
                 setLayoutWeight(
-                        word, getCandidateWeight(index), ViewGroup.LayoutParams.MATCH_PARENT);
+                        word, getSuggestionWeight(index), ViewGroup.LayoutParams.MATCH_PARENT);
                 x += word.getMeasuredWidth();
 
                 if (DBG) {
@@ -368,19 +368,19 @@
             }
         }
 
-        private int getCandidateWidth(int index, int maxWidth) {
-            final int paddings = mPadding * mCandidateCountInStrip;
-            final int dividers = mDividerWidth * (mCandidateCountInStrip - 1);
+        private int getSuggestionWidth(int index, int maxWidth) {
+            final int paddings = mPadding * mSuggestionsCountInStrip;
+            final int dividers = mDividerWidth * (mSuggestionsCountInStrip - 1);
             final int availableWidth = maxWidth - paddings - dividers;
-            return (int)(availableWidth * getCandidateWeight(index));
+            return (int)(availableWidth * getSuggestionWeight(index));
         }
 
-        private float getCandidateWeight(int index) {
-            if (index == mCenterCandidateIndex) {
-                return mCenterCandidateWeight;
+        private float getSuggestionWeight(int index) {
+            if (index == mCenterSuggestionIndex) {
+                return mCenterSuggestionWeight;
             } else {
                 // TODO: Revisit this for cases of 5 or more suggestions
-                return (1.0f - mCenterCandidateWeight) / (mCandidateCountInStrip - 1);
+                return (1.0f - mCenterSuggestionWeight) / (mSuggestionsCountInStrip - 1);
             }
         }
 
@@ -388,7 +388,7 @@
             mTexts.clear();
             final int count = Math.min(suggestions.size(), countInStrip);
             for (int pos = 0; pos < count; pos++) {
-                final CharSequence styled = getStyledCandidateWord(suggestions, pos);
+                final CharSequence styled = getStyledSuggestionWord(suggestions, pos);
                 mTexts.add(styled);
             }
             for (int pos = count; pos < countInStrip; pos++) {
@@ -401,7 +401,7 @@
             final int countInStrip = Math.min(suggestions.size(), PUNCTUATIONS_IN_STRIP);
             for (int index = 0; index < countInStrip; index++) {
                 if (index != 0) {
-                    // Add divider if this isn't the left most suggestion in candidate strip.
+                    // Add divider if this isn't the left most suggestion in suggestions strip.
                     stripView.addView(mDividers.get(index));
                 }
 
@@ -413,7 +413,7 @@
                 word.setTextScaleX(1.0f);
                 word.setCompoundDrawables(null, null, null, null);
                 stripView.addView(word);
-                setLayoutWeight(word, 1.0f, mCandidateStripHeight);
+                setLayoutWeight(word, 1.0f, mSuggestionsStripHeight);
             }
             mMoreSuggestionsAvailable = false;
         }
@@ -424,14 +424,14 @@
 
             final TextView wordView = mWordToSaveView;
             wordView.setTextColor(mColorTypedWord);
-            final int wordWidth = (int)(width * mCenterCandidateWeight);
+            final int wordWidth = (int)(width * mCenterSuggestionWeight);
             final CharSequence text = getEllipsizedText(word, wordWidth, wordView.getPaint());
             final float wordScaleX = wordView.getTextScaleX();
             wordView.setTag(word);
             wordView.setText(text);
             wordView.setTextScaleX(wordScaleX);
             stripView.addView(wordView);
-            setLayoutWeight(wordView, mCenterCandidateWeight, ViewGroup.LayoutParams.MATCH_PARENT);
+            setLayoutWeight(wordView, mCenterSuggestionWeight, ViewGroup.LayoutParams.MATCH_PARENT);
 
             stripView.addView(mDividers.get(0));
 
@@ -443,56 +443,56 @@
             hintView.setTextScaleX(hintScaleX);
             stripView.addView(hintView);
             setLayoutWeight(
-                    hintView, 1.0f - mCenterCandidateWeight, ViewGroup.LayoutParams.MATCH_PARENT);
+                    hintView, 1.0f - mCenterSuggestionWeight, ViewGroup.LayoutParams.MATCH_PARENT);
         }
     }
 
     /**
-     * Construct a CandidateView for showing suggested words for completion.
+     * Construct a {@link SuggestionsView} for showing suggested words for completion.
      * @param context
      * @param attrs
      */
-    public CandidateView(Context context, AttributeSet attrs) {
-        this(context, attrs, R.attr.candidateViewStyle);
+    public SuggestionsView(Context context, AttributeSet attrs) {
+        this(context, attrs, R.attr.suggestionsViewStyle);
     }
 
-    public CandidateView(Context context, AttributeSet attrs, int defStyle) {
+    public SuggestionsView(Context context, AttributeSet attrs, int defStyle) {
         // Note: Up to version 10 (Gingerbread) of the API, LinearLayout doesn't have 3-argument
         // constructor.
         // TODO: Call 3-argument constructor, super(context, attrs, defStyle), when we abandon
         // backward compatibility with the version 10 or earlier of the API.
         super(context, attrs);
-        if (defStyle != R.attr.candidateViewStyle) {
+        if (defStyle != R.attr.suggestionsViewStyle) {
             throw new IllegalArgumentException(
-                    "can't accept defStyle other than R.attr.candidateViewStyle: defStyle="
+                    "can't accept defStyle other than R.attr.suggestionsViewStyle: defStyle="
                     + defStyle);
         }
         setBackgroundDrawable(LinearLayoutCompatUtils.getBackgroundDrawable(
-                context, attrs, defStyle, R.style.CandidateViewStyle));
+                context, attrs, defStyle, R.style.SuggestionsViewStyle));
 
         final LayoutInflater inflater = LayoutInflater.from(context);
-        inflater.inflate(R.layout.candidates_strip, this);
+        inflater.inflate(R.layout.suggestions_strip, this);
 
         mPreviewPopup = new PopupWindow(context);
-        mPreviewText = (TextView) inflater.inflate(R.layout.candidate_preview, null);
+        mPreviewText = (TextView) inflater.inflate(R.layout.suggestion_preview, null);
         mPreviewPopup.setWindowLayoutMode(
                 ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
         mPreviewPopup.setContentView(mPreviewText);
         mPreviewPopup.setBackgroundDrawable(null);
 
-        mCandidatesPlacer = (ViewGroup)findViewById(R.id.candidates_placer);
-        mCandidatesStrip = (ViewGroup)findViewById(R.id.candidates_strip);
+        mSuggestionsPlacer = (ViewGroup)findViewById(R.id.suggestions_placer);
+        mSuggestionsStrip = (ViewGroup)findViewById(R.id.suggestions_strip);
         for (int pos = 0; pos < MAX_SUGGESTIONS; pos++) {
-            final TextView word = (TextView)inflater.inflate(R.layout.candidate_word, null);
+            final TextView word = (TextView)inflater.inflate(R.layout.suggestion_word, null);
             word.setTag(pos);
             word.setOnClickListener(this);
             word.setOnLongClickListener(this);
             mWords.add(word);
-            final View divider = inflater.inflate(R.layout.candidate_divider, null);
+            final View divider = inflater.inflate(R.layout.suggestion_divider, null);
             divider.setTag(pos);
             divider.setOnClickListener(this);
             mDividers.add(divider);
-            mInfos.add((TextView)inflater.inflate(R.layout.candidate_info, null));
+            mInfos.add((TextView)inflater.inflate(R.layout.suggestion_info, null));
         }
 
         mStripParams = new SuggestionsStripParams(context, attrs, defStyle, mWords, mDividers,
@@ -534,7 +534,7 @@
         if (mSuggestions.size() == 0)
             return;
 
-        mStripParams.layout(mSuggestions, mCandidatesStrip, mCandidatesPlacer, getWidth());
+        mStripParams.layout(mSuggestions, mSuggestionsStrip, mSuggestionsPlacer, getWidth());
     }
 
     private static CharSequence getDebugInfo(SuggestedWords suggestions, int pos) {
@@ -632,13 +632,13 @@
     }
 
     public boolean isShowingAddToDictionaryHint() {
-        return mCandidatesStrip.getChildCount() > 0
-                && mCandidatesStrip.getChildAt(0) == mStripParams.mWordToSaveView;
+        return mSuggestionsStrip.getChildCount() > 0
+                && mSuggestionsStrip.getChildAt(0) == mStripParams.mWordToSaveView;
     }
 
     public void showAddToDictionaryHint(CharSequence word) {
         clear();
-        mStripParams.layoutAddToDictionaryHint(word, mCandidatesStrip, getWidth());
+        mStripParams.layoutAddToDictionaryHint(word, mSuggestionsStrip, getWidth());
     }
 
     public boolean dismissAddToDictionaryHint() {
@@ -655,9 +655,9 @@
 
     public void clear() {
         mShowingAutoCorrectionInverted = false;
-        mCandidatesPlacer.removeAllViews();
-        mCandidatesPlacer.addView(mCandidatesStrip);
-        mCandidatesStrip.removeAllViews();
+        mSuggestionsPlacer.removeAllViews();
+        mSuggestionsPlacer.addView(mSuggestionsStrip);
+        mSuggestionsStrip.removeAllViews();
         mMoreSuggestionsWindow.dismiss();
     }
 
@@ -736,7 +736,7 @@
             // TODO: Revise how we determine the height
             final int maxHeight = dm.heightPixels - mKeyboardView.getHeight() - getHeight() * 3;
             final MoreSuggestions.Builder builder = mMoreSuggestionsBuilder;
-            builder.layout(mSuggestions, params.mCandidateCountInStrip, maxWidth, maxHeight);
+            builder.layout(mSuggestions, params.mSuggestionsCountInStrip, maxWidth, maxHeight);
             mMoreSuggestionsView.setKeyboard(builder.build());
             container.measure(
                     ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
diff --git a/java/src/com/android/inputmethod/latin/Utils.java b/java/src/com/android/inputmethod/latin/Utils.java
index 60a4cfb..6263ebe 100644
--- a/java/src/com/android/inputmethod/latin/Utils.java
+++ b/java/src/com/android/inputmethod/latin/Utils.java
@@ -16,15 +16,7 @@
 
 package com.android.inputmethod.latin;
 
-import com.android.inputmethod.compat.InputMethodInfoCompatWrapper;
-import com.android.inputmethod.compat.InputMethodManagerCompatWrapper;
-import com.android.inputmethod.compat.InputMethodSubtypeCompatWrapper;
-import com.android.inputmethod.compat.InputTypeCompatUtils;
-import com.android.inputmethod.keyboard.Keyboard;
-import com.android.inputmethod.keyboard.KeyboardId;
-
 import android.content.Context;
-import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.inputmethodservice.InputMethodService;
 import android.os.AsyncTask;
@@ -37,6 +29,13 @@
 import android.util.Log;
 import android.view.inputmethod.EditorInfo;
 
+import com.android.inputmethod.compat.InputMethodInfoCompatWrapper;
+import com.android.inputmethod.compat.InputMethodManagerCompatWrapper;
+import com.android.inputmethod.compat.InputMethodSubtypeCompatWrapper;
+import com.android.inputmethod.compat.InputTypeCompatUtils;
+import com.android.inputmethod.keyboard.Keyboard;
+import com.android.inputmethod.keyboard.KeyboardId;
+
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -47,7 +46,6 @@
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
 
@@ -175,21 +173,21 @@
         // If user selected aggressive auto correction mode, there is no need to use the safety
         // net.
         if (suggest.isAggressiveAutoCorrectionMode()) return false;
-        CharSequence typedWord = suggestions.getWord(0);
+        final CharSequence typedWord = suggestions.getWord(0);
         // If the length of typed word is less than MINIMUM_SAFETY_NET_CHAR_LENGTH,
         // we should not use net because relatively edit distance can be big.
         if (typedWord.length() < MINIMUM_SAFETY_NET_CHAR_LENGTH) return false;
-        CharSequence candidateWord = suggestions.getWord(1);
+        final CharSequence suggestionWord = suggestions.getWord(1);
         final int typedWordLength = typedWord.length();
         final int maxEditDistanceOfNativeDictionary = typedWordLength < 5 ? 2 : typedWordLength / 2;
-        final int distance = Utils.editDistance(typedWord, candidateWord);
+        final int distance = Utils.editDistance(typedWord, suggestionWord);
         if (DBG) {
             Log.d(TAG, "Autocorrected edit distance = " + distance
                     + ", " + maxEditDistanceOfNativeDictionary);
         }
         if (distance > maxEditDistanceOfNativeDictionary) {
             if (DBG) {
-                Log.d(TAG, "Safety net: before = " + typedWord + ", after = " + candidateWord);
+                Log.d(TAG, "Safety net: before = " + typedWord + ", after = " + suggestionWord);
                 Log.w(TAG, "(Error) The edit distance of this correction exceeds limit. "
                         + "Turning off auto-correction.");
             }
@@ -717,7 +715,7 @@
         // Don't cache suggestions.size(), since we may be removing items
         while (i < suggestions.size()) {
             final CharSequence cur = suggestions.get(i);
-            // Compare each candidate with each previous candidate
+            // Compare each suggestion with each previous suggestion
             for (int j = 0; j < i; j++) {
                 CharSequence previous = suggestions.get(j);
                 if (TextUtils.equals(cur, previous)) {
