diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
index fb95172..8a8a45f 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
@@ -44,6 +44,10 @@
 public class DictionaryFacilitatorForSuggest {
     public static final String TAG = DictionaryFacilitatorForSuggest.class.getSimpleName();
 
+    // HACK: This threshold is being used when adding a capitalized entry in the User History
+    // dictionary.
+    private static final int CAPITALIZED_FORM_MAX_PROBABILITY_FOR_INSERT = 140;
+
     private final Context mContext;
     public final Locale mLocale;
 
@@ -389,7 +393,26 @@
         if (maxFreq == 0) {
             return;
         }
-        final String secondWord = wasAutoCapitalized ? suggestion.toLowerCase(mLocale) : suggestion;
+        final String suggestionLowerCase = suggestion.toLowerCase(mLocale);
+        final String secondWord;
+        if (wasAutoCapitalized) {
+            secondWord = suggestionLowerCase;
+        } else {
+            // HACK: We'd like to avoid adding the capitalized form of common words to the User
+            // History dictionary in order to avoid suggesting them until the dictionary
+            // consolidation is done.
+            // TODO: Remove this hack when ready.
+            final int lowerCasefreqInMainDict = mMainDictionary != null ?
+                    mMainDictionary.getFrequency(suggestionLowerCase) :
+                            Dictionary.NOT_A_PROBABILITY;
+            if (maxFreq < lowerCasefreqInMainDict
+                    && lowerCasefreqInMainDict >= CAPITALIZED_FORM_MAX_PROBABILITY_FOR_INSERT) {
+                // Use lower cased word as the word can be a distracter of the popular word.
+                secondWord = suggestionLowerCase;
+            } else {
+                secondWord = suggestion;
+            }
+        }
         // We demote unrecognized words (frequency < 0, below) by specifying them as "invalid".
         // We don't add words with 0-frequency (assuming they would be profanity etc.).
         final boolean isValid = maxFreq > 0;
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index c2483eb..944fa73 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1011,8 +1011,7 @@
                 false /* isObsoleteSuggestions */,
                 false /* isPrediction */);
         // When in fullscreen mode, show completions generated by the application
-        setSuggestedWords(suggestedWords);
-        setSuggestionStripShown(true);
+        setSuggestedWords(suggestedWords, true /* shouldShow */);
         if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
             ResearchLogger.latinIME_onDisplayCompletions(applicationSpecifiedCompletions);
         }
@@ -1035,10 +1034,6 @@
         }
     }
 
-    private void setSuggestionStripShown(final boolean shown) {
-        setSuggestionStripShownInternal(shown, /* needsInputViewShown */true);
-    }
-
     private int getAdjustedBackingViewHeight() {
         final int currentHeight = mKeyPreviewBackingView.getHeight();
         if (currentHeight > 0) {
@@ -1330,7 +1325,7 @@
     }
 
     // TODO[IL]: Define a clear interface for this
-    public void setSuggestedWords(final SuggestedWords words) {
+    public void setSuggestedWords(final SuggestedWords words, final boolean shouldShow) {
         if (mSuggestionStripView != null) {
             mSuggestionStripView.setSuggestions(
                     words, SubtypeLocaleUtils.isRtlLanguage(mSubtypeSwitcher.getCurrentSubtype()));
@@ -1350,6 +1345,7 @@
             // the practice.
             mInputLogic.mConnection.setComposingText(textWithUnderline, 1);
         }
+        setSuggestionStripShownInternal(shouldShow, true /* needsInputViewShown */);
     }
 
     // TODO[IL]: Move this out of LatinIME.
@@ -1438,8 +1434,7 @@
         if (SuggestedWords.EMPTY != suggestedWords) {
             mInputLogic.mWordComposer.setAutoCorrection(autoCorrection);
         }
-        setSuggestedWords(suggestedWords);
-        setSuggestionStripShown(isSuggestionsStripVisible());
+        setSuggestedWords(suggestedWords, isSuggestionsStripVisible());
         // Cache the auto-correction in accessibility code so we can speak it if the user
         // touches a key that will insert it.
         AccessibilityUtils.getInstance().setAutoCorrection(suggestedWords, typedWord);
@@ -1552,11 +1547,11 @@
     public void setNeutralSuggestionStrip() {
         final SettingsValues currentSettings = mSettings.getCurrent();
         if (currentSettings.mBigramPredictionEnabled) {
-            setSuggestedWords(SuggestedWords.EMPTY);
+            setSuggestedWords(SuggestedWords.EMPTY, isSuggestionsStripVisible());
         } else {
-            setSuggestedWords(currentSettings.mSpacingAndPunctuations.mSuggestPuncList);
+            setSuggestedWords(currentSettings.mSpacingAndPunctuations.mSuggestPuncList,
+                    isSuggestionsStripVisible());
         }
-        setSuggestionStripShown(isSuggestionsStripVisible());
     }
 
     public void unsetIsAutoCorrectionIndicatorOnAndCallShowSuggestionStrip(
