diff --git a/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java b/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java
index 5c54fa5480f4bfc1c531ea2f93e25f730dcd0af6..876bd65f6b679756de337517cc7f57ea392ed24b 100644
--- a/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java
+++ b/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java
@@ -24,18 +24,22 @@ import android.text.Spannable;
 import android.text.SpannableString;
 import android.text.Spanned;
 import android.text.TextUtils;
+import android.util.Log;
 
 import java.lang.reflect.Constructor;
 import java.util.ArrayList;
 import java.util.Locale;
 
 public class SuggestionSpanUtils {
+    private static final String TAG = SuggestionSpanUtils.class.getSimpleName();
     // TODO: Use reflection to get field values
     public static final String ACTION_SUGGESTION_PICKED =
             "android.text.style.SUGGESTION_PICKED";
     public static final String SUGGESTION_SPAN_PICKED_AFTER = "after";
     public static final String SUGGESTION_SPAN_PICKED_BEFORE = "before";
     public static final String SUGGESTION_SPAN_PICKED_HASHCODE = "hashcode";
+    // TODO: Use the API constant after it gets public.
+    public static final int FLAG_AUTO_CORRECTION = 0x0004;
     public static final int SUGGESTION_MAX_SIZE = 5;
     public static final boolean SUGGESTION_SPAN_IS_SUPPORTED;
 
@@ -50,6 +54,25 @@ public class SuggestionSpanUtils {
                 CLASS_SuggestionSpan != null && CONSTRUCTOR_SuggestionSpan != null;
     }
 
+    public static CharSequence getTextWithAutoCorrectionIndicatorUnderline(
+            Context context, CharSequence text) {
+        if (TextUtils.isEmpty(text) || CONSTRUCTOR_SuggestionSpan == null) {
+            return text;
+        }
+        final Spannable spannable = text instanceof Spannable
+                ? (Spannable) text : new SpannableString(text);
+        final Object[] args =
+                { context, null, new String[] {}, FLAG_AUTO_CORRECTION,
+                        (Class<?>) SuggestionSpanPickedNotificationReceiver.class };
+        final Object ss = CompatUtils.newInstance(CONSTRUCTOR_SuggestionSpan, args);
+        if (ss == null) {
+            Log.w(TAG, "Suggestion span was not created.");
+            return text;
+        }
+        spannable.setSpan(ss, 0, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+        return spannable;
+    }
+
     public static CharSequence getTextWithSuggestionSpan(Context context,
             CharSequence pickedWord, SuggestedWords suggestedWords) {
         if (TextUtils.isEmpty(pickedWord) || CONSTRUCTOR_SuggestionSpan == null
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 36e97af11d0693c3757674d258106eacbd9fa03f..c5f336b3facc7fda8f6dff5deeec892096f7c662 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1601,6 +1601,17 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
             mKeyboardSwitcher.onAutoCorrectionStateChanged(
                     words.hasWordAboveAutoCorrectionScoreThreshold());
         }
+
+        // Put a blue underline to a word in TextView which will be auto-corrected.
+        final InputConnection ic = getCurrentInputConnection();
+        if (ic != null && Utils.willAutoCorrect(words)) {
+            final CharSequence textWithUnderline =
+                    SuggestionSpanUtils.getTextWithAutoCorrectionIndicatorUnderline(
+                            this, mComposingStringBuilder);
+            if (!TextUtils.isEmpty(textWithUnderline)) {
+                ic.setComposingText(textWithUnderline, 1);
+            }
+        }
     }
 
     public void updateSuggestions() {
diff --git a/java/src/com/android/inputmethod/latin/SuggestionsView.java b/java/src/com/android/inputmethod/latin/SuggestionsView.java
index fe54f4ae1e484ebf4dbb4c2e6e7d0da3c76a6cfe..3271b8253ff9916bc1fd0bab830ff00b754bd077 100644
--- a/java/src/com/android/inputmethod/latin/SuggestionsView.java
+++ b/java/src/com/android/inputmethod/latin/SuggestionsView.java
@@ -260,7 +260,7 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
 
         private CharSequence getStyledSuggestionWord(SuggestedWords suggestions, int pos) {
             final CharSequence word = suggestions.getWord(pos);
-            final boolean isAutoCorrect = pos == 1 && willAutoCorrect(suggestions);
+            final boolean isAutoCorrect = pos == 1 && Utils.willAutoCorrect(suggestions);
             final boolean isTypedWordValid = pos == 0 && suggestions.mTypedWordValid;
             if (!isAutoCorrect && !isTypedWordValid)
                 return word;
@@ -278,14 +278,10 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
             return spannedWord;
         }
 
-        private static boolean willAutoCorrect(SuggestedWords suggestions) {
-            return !suggestions.mTypedWordValid && suggestions.mHasMinimalSuggestion;
-        }
-
         private int getWordPosition(int index, SuggestedWords suggestions) {
             // TODO: This works for 3 suggestions. Revisit this algorithm when there are 5 or more
             // suggestions.
-            final int centerPos = willAutoCorrect(suggestions) ? 1 : 0;
+            final int centerPos = Utils.willAutoCorrect(suggestions) ? 1 : 0;
             if (index == mCenterSuggestionIndex) {
                 return centerPos;
             } else if (index == centerPos) {
@@ -300,7 +296,7 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
             final boolean isSuggested = (pos != 0);
 
             final int color;
-            if (index == mCenterSuggestionIndex && willAutoCorrect(suggestions)) {
+            if (index == mCenterSuggestionIndex && Utils.willAutoCorrect(suggestions)) {
                 color = mColorAutoCorrect;
             } else if (isSuggested) {
                 color = mColorSuggested;
diff --git a/java/src/com/android/inputmethod/latin/Utils.java b/java/src/com/android/inputmethod/latin/Utils.java
index 77127656753fd493d31b1c3e6414cb68c87f87fb..de29304609978a84970154915b5aa7ab334c5b5d 100644
--- a/java/src/com/android/inputmethod/latin/Utils.java
+++ b/java/src/com/android/inputmethod/latin/Utils.java
@@ -790,4 +790,8 @@ public class Utils {
         }
         return -1;
     }
+
+    public static boolean willAutoCorrect(SuggestedWords suggestions) {
+        return !suggestions.mTypedWordValid && suggestions.mHasMinimalSuggestion;
+    }
 }