diff --git a/java/res/values/bools.xml b/java/res/values/bools.xml
index f5f2c3d..1f8051b 100644
--- a/java/res/values/bools.xml
+++ b/java/res/values/bools.xml
@@ -28,4 +28,5 @@
     <bool name="config_swipeDisambiguation">true</bool>
     <!-- Whether or not Popup on key press is enabled by default -->
     <bool name="default_popup_preview">true</bool>
+    <bool name="default_recorrection_enabled">true</bool>
 </resources>
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index cfdc441..65b4c59 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -339,6 +339,10 @@
     <string name="prefs_enable_log">Enable user feedback</string>
     <!-- Description for enabling to send user statistics to Google. -->
     <string name="prefs_description_log">Help improve this input method editor by automatically sending usage statistics and crash reports to Google.</string>
+    <!-- Preferences item for enabling to re-correct suggestions .   -->
+    <string name="prefs_enable_recorrection">Tap to re-correction</string>
+    <!-- The summary for the preferences item for enabling to re-correct suggestions .   -->
+    <string name="prefs_enable_recorrection_summary">You can re-correct words by tapping words you have typed</string>
 
     <!-- Description for keyboard theme switcher -->
     <string name="keyboard_layout">Keyboard Theme</string>
diff --git a/java/res/xml/prefs.xml b/java/res/xml/prefs.xml
index be484b2..a9ff8ca 100644
--- a/java/res/xml/prefs.xml
+++ b/java/res/xml/prefs.xml
@@ -38,6 +38,13 @@
             />
 
     <CheckBoxPreference
+            android:key="recorrection_enabled"
+            android:title="@string/prefs_enable_recorrection"
+            android:persistent="true"
+            android:defaultValue="@bool/default_recorrection_enabled"
+            />
+
+    <CheckBoxPreference
             android:key="auto_cap"
             android:title="@string/auto_cap"
             android:persistent="true"
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 72efc96..3357789 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -127,6 +127,7 @@
 
     public static final String PREF_SELECTED_LANGUAGES = "selected_languages";
     public static final String PREF_INPUT_LANGUAGE = "input_language";
+    private static final String PREF_RECORRECTION_ENABLED = "recorrection_enabled";
 
     private static final int MSG_UPDATE_SUGGESTIONS = 0;
     private static final int MSG_START_TUTORIAL = 1;
@@ -193,6 +194,7 @@
     private boolean mAutoSpace;
     private boolean mJustAddedAutoSpace;
     private boolean mAutoCorrectEnabled;
+    private boolean mReCorrectionEnabled;
     private boolean mBigramSuggestionEnabled;
     private boolean mAutoCorrectOn;
     // TODO move this state variable outside LatinIME
@@ -360,6 +362,8 @@
         if (inputLanguage == null) {
             inputLanguage = conf.locale.toString();
         }
+        mReCorrectionEnabled = prefs.getBoolean(PREF_RECORRECTION_ENABLED,
+                getResources().getBoolean(R.bool.default_recorrection_enabled));
 
         LatinIMEUtil.GCUtils.getInstance().reset();
         boolean tryGC = true;
@@ -768,21 +772,22 @@
         mLastSelectionStart = newSelStart;
         mLastSelectionEnd = newSelEnd;
 
-
-        // Don't look for corrections if the keyboard is not visible
-        if (mKeyboardSwitcher != null && mKeyboardSwitcher.getInputView() != null
-                && mKeyboardSwitcher.getInputView().isShown()) {
-            // Check if we should go in or out of correction mode.
-            if (isPredictionOn()
-                    && mJustRevertedSeparator == null
-                    && (candidatesStart == candidatesEnd || newSelStart != oldSelStart
-                            || TextEntryState.isCorrecting())
-                    && (newSelStart < newSelEnd - 1 || (!mPredicting))
-                    && !mVoiceInputHighlighted) {
-                if (isCursorTouchingWord() || mLastSelectionStart < mLastSelectionEnd) {
-                    postUpdateOldSuggestions();
-                } else {
-                    abortCorrection(false);
+        if (mReCorrectionEnabled) {
+            // Don't look for corrections if the keyboard is not visible
+            if (mKeyboardSwitcher != null && mKeyboardSwitcher.getInputView() != null
+                    && mKeyboardSwitcher.getInputView().isShown()) {
+                // Check if we should go in or out of correction mode.
+                if (isPredictionOn()
+                        && mJustRevertedSeparator == null
+                        && (candidatesStart == candidatesEnd || newSelStart != oldSelStart
+                                || TextEntryState.isCorrecting())
+                                && (newSelStart < newSelEnd - 1 || (!mPredicting))
+                                && !mVoiceInputHighlighted) {
+                    if (isCursorTouchingWord() || mLastSelectionStart < mLastSelectionEnd) {
+                        postUpdateOldSuggestions();
+                    } else {
+                        abortCorrection(false);
+                    }
                 }
             }
         }
@@ -2180,6 +2185,9 @@
         if (PREF_SELECTED_LANGUAGES.equals(key)) {
             mLanguageSwitcher.loadLocales(sharedPreferences);
             mRefreshKeyboardRequired = true;
+        } else if (PREF_RECORRECTION_ENABLED.equals(key)) {
+            mReCorrectionEnabled = sharedPreferences.getBoolean(PREF_RECORRECTION_ENABLED,
+                    getResources().getBoolean(R.bool.default_recorrection_enabled));
         }
     }
 
