diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index b75b21a..3d03271 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -58,6 +58,11 @@
     <!-- Description for delay for dismissing a popup on screen: default value of the delay [CHAR LIMIT=15] -->
     <string name="key_preview_popup_dismiss_default_delay">Default</string>
 
+    <!-- Option name for enabling or disabling the use of names of people in Contacts for suggestion and correction [CHAR LIMIT=25] -->
+    <string name="use_contacts_dict">Suggest Contact names</string>
+    <!-- Description for option enabling or disabling the use of names of people in Contacts for suggestion and correction [CHAR LIMIT=65] -->
+    <string name="use_contacts_dict_summary">Use names from Contacts for suggestions and corrections</string>
+
     <!-- Option to enable auto capitalization of sentences -->
     <string name="auto_cap">Auto-capitalization</string>
 
diff --git a/java/res/xml/prefs.xml b/java/res/xml/prefs.xml
index b0497a5..5f4a27d 100644
--- a/java/res/xml/prefs.xml
+++ b/java/res/xml/prefs.xml
@@ -138,6 +138,12 @@
           <ListPreference
               android:key="pref_key_preview_popup_dismiss_delay"
               android:title="@string/key_preview_popup_dismiss_delay" />
+          <CheckBoxPreference
+             android:key="pref_key_use_contacts_dict"
+             android:title="@string/use_contacts_dict"
+             android:summary="@string/use_contacts_dict_summary"
+             android:persistent="true"
+             android:defaultValue="true" />
     </PreferenceScreen>
     <!-- <Preference
         android:title="Debug Settings"
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 5b242b1..940f6b8 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -155,7 +155,6 @@
 
     private UserDictionary mUserDictionary;
     private UserBigramDictionary mUserBigramDictionary;
-    private ContactsDictionary mContactsDictionary;
     private AutoDictionary mAutoDictionary;
 
     // TODO: Create an inner class to group options and pseudo-options to improve readability.
@@ -407,6 +406,7 @@
         if (null == mPrefs) mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
         if (null == mSubtypeSwitcher) mSubtypeSwitcher = SubtypeSwitcher.getInstance();
         mSettingsValues = new Settings.Values(mPrefs, this, mSubtypeSwitcher.getInputLocaleStr());
+        resetContactsDictionary();
     }
 
     private void initSuggest() {
@@ -429,8 +429,7 @@
         mUserDictionary = new UserDictionary(this, localeStr);
         mSuggest.setUserDictionary(mUserDictionary);
 
-        mContactsDictionary = new ContactsDictionary(this, Suggest.DIC_CONTACTS);
-        mSuggest.setContactsDictionary(mContactsDictionary);
+        resetContactsDictionary();
 
         mAutoDictionary = new AutoDictionary(this, this, localeStr, Suggest.DIC_AUTO);
         mSuggest.setAutoDictionary(mAutoDictionary);
@@ -443,6 +442,13 @@
         Utils.setSystemLocale(res, savedLocale);
     }
 
+    private void resetContactsDictionary() {
+        if (null == mSuggest) return;
+        ContactsDictionary contactsDictionary = mSettingsValues.mUseContactsDict
+                ? new ContactsDictionary(this, Suggest.DIC_CONTACTS) : null;
+        mSuggest.setContactsDictionary(contactsDictionary);
+    }
+
     /* package private */ void resetSuggestMainDict() {
         final String localeStr = mSubtypeSwitcher.getInputLocaleStr();
         final Locale keyboardLocale = Utils.constructLocaleFromString(localeStr);
diff --git a/java/src/com/android/inputmethod/latin/Settings.java b/java/src/com/android/inputmethod/latin/Settings.java
index 956c51e..3ad2a59 100644
--- a/java/src/com/android/inputmethod/latin/Settings.java
+++ b/java/src/com/android/inputmethod/latin/Settings.java
@@ -79,6 +79,8 @@
 
     public static final String PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY =
             "pref_key_preview_popup_dismiss_delay";
+    public static final String PREF_KEY_USE_CONTACTS_DICT =
+            "pref_key_use_contacts_dict";
 
     public static final String PREF_USABILITY_STUDY_MODE = "usability_study_mode";
 
@@ -114,6 +116,7 @@
         public final boolean mBigramSuggestionEnabled;
         // Prediction: use bigrams to predict the next word when there is no input for it yet
         public final boolean mBigramPredictionEnabled;
+        public final boolean mUseContactsDict;
 
         public Values(final SharedPreferences prefs, final Context context,
                 final String localeStr) {
@@ -175,6 +178,8 @@
 
             mAutoCorrectionThreshold = getAutoCorrectionThreshold(prefs, res);
 
+            mUseContactsDict = prefs.getBoolean(Settings.PREF_KEY_USE_CONTACTS_DICT, true);
+
             Utils.setSystemLocale(res, savedLocale);
         }
 
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index ca75866..33f9820 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -184,12 +184,17 @@
     }
 
     /**
-     * Sets an optional contacts dictionary resource to be loaded.
+     * Sets an optional contacts dictionary resource to be loaded. It is also possible to remove
+     * the contacts dictionary by passing null to this method. In this case no contacts dictionary
+     * won't be used.
      */
     public void setContactsDictionary(Dictionary contactsDictionary) {
         if (contactsDictionary != null) {
             mUnigramDictionaries.put(DICT_KEY_CONTACTS, contactsDictionary);
             mBigramDictionaries.put(DICT_KEY_CONTACTS, contactsDictionary);
+        } else {
+            mUnigramDictionaries.remove(DICT_KEY_CONTACTS);
+            mBigramDictionaries.remove(DICT_KEY_CONTACTS);
         }
     }
 
