diff --git a/java/res/values/config.xml b/java/res/values/config.xml
index 4e2936c5c0d7f8dce58d08fa2cec6a684dc9ae48..f2e76bd29b57dcd188d2b639afa7d82c5c8bcea8 100644
--- a/java/res/values/config.xml
+++ b/java/res/values/config.xml
@@ -111,8 +111,9 @@
         <!-- Aggressive -->
         <item>0.067</item>
         <!-- Very Aggressive : Suggestion whose normalized score is greater than this value
-             will be subject to auto-correction. -->
-        <item>0</item>
+             will be subject to auto-correction. "floatNegativeInfinity" is a special marker
+             string for Float.NEGATIVE_INFINITY -->
+        <item>floatNegativeInfinity</item>
     </string-array>
     <!-- Threshold of the normalized score of the best suggestion for the spell checker to declare
          a word to be "recommended" -->
diff --git a/java/src/com/android/inputmethod/latin/SettingsValues.java b/java/src/com/android/inputmethod/latin/SettingsValues.java
index f77a928853dd1a2b8640082e49bbedb855f2e06f..838863c7149592ec150c5cb2616715486909ce5d 100644
--- a/java/src/com/android/inputmethod/latin/SettingsValues.java
+++ b/java/src/com/android/inputmethod/latin/SettingsValues.java
@@ -34,6 +34,9 @@ import java.util.Arrays;
  */
 public final class SettingsValues {
     private static final String TAG = SettingsValues.class.getSimpleName();
+    // "floatNegativeInfinity" is a special marker string for Float.NEGATIVE_INFINITE
+    // currently used for auto-correction
+    private static final String FLOAT_NEGATIVE_INFINITY_MARKER_STRING = "floatNegativeInfinity";
 
     // From resources:
     public final int mDelayUpdateOldSuggestions;
@@ -266,8 +269,12 @@ public final class SettingsValues {
         try {
             final int arrayIndex = Integer.valueOf(currentAutoCorrectionSetting);
             if (arrayIndex >= 0 && arrayIndex < autoCorrectionThresholdValues.length) {
-                autoCorrectionThreshold = Float.parseFloat(
-                        autoCorrectionThresholdValues[arrayIndex]);
+                final String val = autoCorrectionThresholdValues[arrayIndex];
+                if (FLOAT_NEGATIVE_INFINITY_MARKER_STRING.equals(val)) {
+                    autoCorrectionThreshold = Float.NEGATIVE_INFINITY;
+                } else {
+                    autoCorrectionThreshold = Float.parseFloat(val);
+                }
             }
         } catch (NumberFormatException e) {
             // Whenever the threshold settings are correct, never come here.
@@ -275,7 +282,7 @@ public final class SettingsValues {
             Log.w(TAG, "Cannot load auto correction threshold setting."
                     + " currentAutoCorrectionSetting: " + currentAutoCorrectionSetting
                     + ", autoCorrectionThresholdValues: "
-                    + Arrays.toString(autoCorrectionThresholdValues));
+                    + Arrays.toString(autoCorrectionThresholdValues), e);
         }
         return autoCorrectionThreshold;
     }