diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 86992db2de703319cfe28482328149e93f3e9dd4..b7de26b4169da31af8ecdcd31ac1008823e91fbb 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1438,7 +1438,7 @@ public class LatinIME extends InputMethodService
 
         ((LatinKeyboard) mInputView.getKeyboard()).setPreferredLetters(nextLettersFrequencies);
 
-        boolean correctionAvailable = mSuggest.hasMinimalCorrection();
+        boolean correctionAvailable = !mInputTypeNoAutoCorrect && mSuggest.hasMinimalCorrection();
         //|| mCorrectionMode == mSuggest.CORRECTION_FULL;
         CharSequence typedWord = mWord.getTypedWord();
         // If we're in basic correct
@@ -1519,7 +1519,9 @@ public class LatinIME extends InputMethodService
         mJustAccepted = true;
         pickSuggestion(suggestion);
         // Add the word to the auto dictionary if it's not a known word
-        checkAddToDictionary(suggestion, AutoDictionary.FREQUENCY_FOR_PICKED);
+        if (index == 0) {
+            checkAddToDictionary(suggestion, AutoDictionary.FREQUENCY_FOR_PICKED);
+        }
         TextEntryState.acceptedSuggestion(mComposing.toString(), suggestion);
         // Follow it with a space
         if (mAutoSpace) {
@@ -1565,8 +1567,13 @@ public class LatinIME extends InputMethodService
     }
 
     private void checkAddToDictionary(CharSequence suggestion, int frequencyDelta) {
+        // Only auto-add to dictionary if auto-correct is ON. Otherwise we'll be
+        // adding words in situations where the user or application really didn't
+        // want corrections enabled or learned.
+        if (!(mCorrectionMode == Suggest.CORRECTION_FULL)) return;
         if (mAutoDictionary.isValidWord(suggestion)
-                || !mSuggest.isValidWord(suggestion.toString().toLowerCase())) {
+                || (!mSuggest.isValidWord(suggestion.toString())
+                    && !mSuggest.isValidWord(suggestion.toString().toLowerCase()))) {
             mAutoDictionary.addWord(suggestion.toString(), frequencyDelta);
         }
     }
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index b44717d0aa36acf9b1f909adfd2f1dcd0e4af882..14899e84ea33b5b3db8627b21c0845f8761e0052 100755
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -346,11 +346,10 @@ public class Suggest implements Dictionary.WordCallback {
         if (word == null || word.length() == 0) {
             return false;
         }
-        return (mCorrectionMode == CORRECTION_FULL && mMainDict.isValidWord(word)) 
-                || (mCorrectionMode > CORRECTION_NONE && 
-                    ((mUserDictionary != null && mUserDictionary.isValidWord(word)))
-                     || (mAutoDictionary != null && mAutoDictionary.isValidWord(word))
-                     || (mContactsDictionary != null && mContactsDictionary.isValidWord(word)));
+        return mMainDict.isValidWord(word)
+                || (mUserDictionary != null && mUserDictionary.isValidWord(word))
+                || (mAutoDictionary != null && mAutoDictionary.isValidWord(word))
+                || (mContactsDictionary != null && mContactsDictionary.isValidWord(word));
     }
     
     private void collectGarbage() {