diff --git a/java/res/values-en/whitelist.xml b/java/res/values-en/whitelist.xml
new file mode 100644
index 0000000..9395f4c
--- /dev/null
+++ b/java/res/values-en/whitelist.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2011, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!--
+        An entry of the whitelist word should be:
+        1. (int)frequency
+        2. (String)before
+        3. (String)after
+     -->
+    <string-array name="wordlist_whitelist" translatable="false">
+
+        <item>255</item>
+        <item>ill</item>
+        <item>I\'ll</item>
+
+        <item>255</item>
+        <item>thisd</item>
+        <item>this\'d</item>
+
+    </string-array>
+</resources>
diff --git a/java/res/values/whitelist.xml b/java/res/values/whitelist.xml
index ced52e7..d4ecbfa 100644
--- a/java/res/values/whitelist.xml
+++ b/java/res/values/whitelist.xml
@@ -25,14 +25,5 @@
         3. (String)after
      -->
     <string-array name="wordlist_whitelist">
-
-        <item>255</item>
-        <item>ill</item>
-        <item>I\'ll</item>
-
-        <item>255</item>
-        <item>thisd</item>
-        <item>this\'d</item>
-
     </string-array>
 </resources>
diff --git a/java/src/com/android/inputmethod/latin/AutoDictionary.java b/java/src/com/android/inputmethod/latin/AutoDictionary.java
index c264616..460930f 100644
--- a/java/src/com/android/inputmethod/latin/AutoDictionary.java
+++ b/java/src/com/android/inputmethod/latin/AutoDictionary.java
@@ -41,13 +41,8 @@
     static final int FREQUENCY_FOR_PICKED = 3;
     // Weight added to a user typing a new word that doesn't get corrected (or is reverted)
     static final int FREQUENCY_FOR_TYPED = 1;
-    // A word that is frequently typed and gets promoted to the user dictionary, uses this
-    // frequency.
-    static final int FREQUENCY_FOR_AUTO_ADD = 250;
     // If the user touches a typed word 2 times or more, it will become valid.
     private static final int VALIDITY_THRESHOLD = 2 * FREQUENCY_FOR_PICKED;
-    // If the user touches a typed word 4 times or more, it will be added to the user dict.
-    private static final int PROMOTION_THRESHOLD = 4 * FREQUENCY_FOR_PICKED;
 
     private LatinIME mIme;
     // Locale for which this auto dictionary is storing words
@@ -151,11 +146,6 @@
         freq = freq < 0 ? addFrequency : freq + addFrequency;
         super.addWord(word, freq);
 
-        if (freq >= PROMOTION_THRESHOLD) {
-            mIme.promoteToUserDictionary(word, FREQUENCY_FOR_AUTO_ADD);
-            freq = 0;
-        }
-
         synchronized (mPendingWritesLock) {
             // Write a null frequency if it is to be deleted from the db
             mPendingWrites.put(word, freq == 0 ? null : new Integer(freq));
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index d625951..3a71b54 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1635,8 +1635,6 @@
     /**
      * Commits the chosen word to the text field and saves it for later
      * retrieval.
-     * @param suggestion the suggestion picked by the user to be committed to
-     *            the text field
      */
     private void commitBestWord(CharSequence bestWord) {
         KeyboardSwitcher switcher = mKeyboardSwitcher;
@@ -1924,11 +1922,6 @@
         }
     }
 
-    public void promoteToUserDictionary(String word, int frequency) {
-        if (mUserDictionary.isValidWord(word)) return;
-        mUserDictionary.addWord(word, frequency);
-    }
-
     public WordComposer getCurrentWord() {
         return mWord;
     }
diff --git a/java/src/com/android/inputmethod/latin/WhitelistDictionary.java b/java/src/com/android/inputmethod/latin/WhitelistDictionary.java
index 2389d4e..4377373 100644
--- a/java/src/com/android/inputmethod/latin/WhitelistDictionary.java
+++ b/java/src/com/android/inputmethod/latin/WhitelistDictionary.java
@@ -39,6 +39,7 @@
     public static WhitelistDictionary init(Context context) {
         synchronized (sInstance) {
             if (context != null) {
+                // Wordlist is initialized by the proper language in Suggestion.java#init
                 sInstance.initWordlist(
                         context.getResources().getStringArray(R.array.wordlist_whitelist));
             } else {
