diff --git a/java/src/com/android/inputmethod/latin/AutoCorrection.java b/java/src/com/android/inputmethod/latin/AutoCorrection.java
index c4c9446..15b9f18 100644
--- a/java/src/com/android/inputmethod/latin/AutoCorrection.java
+++ b/java/src/com/android/inputmethod/latin/AutoCorrection.java
@@ -25,30 +25,21 @@
 public class AutoCorrection {
     private static final boolean DBG = LatinImeLogger.sDBG;
     private static final String TAG = AutoCorrection.class.getSimpleName();
-    private CharSequence mAutoCorrectionWord;
 
-    public void init() {
-        mAutoCorrectionWord = null;
-    }
-
-    public boolean hasAutoCorrection() {
-        return null != mAutoCorrectionWord;
-    }
-
-    public CharSequence updateAutoCorrectionStatus(Map<String, Dictionary> dictionaries,
+    public static CharSequence updateAutoCorrectionStatus(Map<String, Dictionary> dictionaries,
             WordComposer wordComposer, ArrayList<CharSequence> suggestions, int[] sortedScores,
             CharSequence typedWord, double autoCorrectionThreshold, int correctionMode,
             CharSequence whitelistedWord) {
         if (hasAutoCorrectionForWhitelistedWord(whitelistedWord)) {
-            mAutoCorrectionWord = whitelistedWord;
+            return whitelistedWord;
         } else if (hasAutoCorrectionForTypedWord(
                 dictionaries, wordComposer, suggestions, typedWord, correctionMode)) {
-            mAutoCorrectionWord = typedWord;
+            return typedWord;
         } else if (hasAutoCorrectionForBinaryDictionary(wordComposer, suggestions, correctionMode,
                 sortedScores, typedWord, autoCorrectionThreshold)) {
-            mAutoCorrectionWord = suggestions.get(0);
+            return suggestions.get(0);
         }
-        return mAutoCorrectionWord;
+        return null;
     }
 
     public static boolean isValidWord(
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index 6f2ca83..f188b7a 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -84,6 +84,7 @@
     private static final boolean DBG = LatinImeLogger.sDBG;
 
     private AutoCorrection mAutoCorrection;
+    private boolean mHasAutoCorrection;
 
     private Dictionary mMainDict;
     private ContactsDictionary mContactsDict;
@@ -364,9 +365,11 @@
         CharSequence whitelistedWord = capitalizeWord(mIsAllUpperCase, mIsFirstCharCapitalized,
                 mWhiteListDictionary.getWhitelistedWord(consideredWordString));
 
-        mAutoCorrection.updateAutoCorrectionStatus(mUnigramDictionaries, wordComposer,
+        final CharSequence autoCorrection =
+                mAutoCorrection.updateAutoCorrectionStatus(mUnigramDictionaries, wordComposer,
                 mSuggestions, mScores, consideredWord, mAutoCorrectionThreshold, correctionMode,
                 whitelistedWord);
+        mHasAutoCorrection = (null != autoCorrection);
 
         if (whitelistedWord != null) {
             if (mTrailingSingleQuotesCount > 0) {
@@ -415,7 +418,7 @@
     }
 
     public boolean hasAutoCorrection() {
-        return mAutoCorrection.hasAutoCorrection();
+        return mHasAutoCorrection;
     }
 
     @Override
