diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
index 7247a1f20aebd149f27440adb3f1f730bf58674e..1d087439da80f4c45369493ac7f10bedab7e535f 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
@@ -345,7 +345,7 @@ public final class BinaryDictionary extends Dictionary {
     }
 
     @Override
-    public boolean isValidWord(final String word) {
+    public boolean isInDictionary(final String word) {
         return getFrequency(word) != NOT_A_PROBABILITY;
     }
 
diff --git a/java/src/com/android/inputmethod/latin/Dictionary.java b/java/src/com/android/inputmethod/latin/Dictionary.java
index bc7276b9af72e418b3b923151ecd441b5404bcaa..b55ed125f88280ecd0edf1bba3b39ad5f4c25625 100644
--- a/java/src/com/android/inputmethod/latin/Dictionary.java
+++ b/java/src/com/android/inputmethod/latin/Dictionary.java
@@ -16,6 +16,7 @@
 
 package com.android.inputmethod.latin;
 
+import com.android.inputmethod.annotations.UsedForTesting;
 import com.android.inputmethod.keyboard.ProximityInfo;
 import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
 
@@ -85,11 +86,19 @@ public abstract class Dictionary {
             final int sessionId, final float[] inOutLanguageWeight);
 
     /**
-     * Checks if the given word occurs in the dictionary
+     * Checks if the given word has to be treated as a valid word. Please note that some
+     * dictionaries have entries that should be treated as invalid words.
      * @param word the word to search for. The search should be case-insensitive.
-     * @return true if the word exists, false otherwise
+     * @return true if the word is valid, false otherwise
      */
-    abstract public boolean isValidWord(final String word);
+    public boolean isValidWord(final String word) {
+        return isInDictionary(word);
+    }
+
+    /**
+     * Checks if the given word is in the dictionary regardless of it being valid or not.
+     */
+    abstract public boolean isInDictionary(final String word);
 
     public int getFrequency(final String word) {
         return NOT_A_PROBABILITY;
@@ -165,7 +174,7 @@ public abstract class Dictionary {
         }
 
         @Override
-        public boolean isValidWord(String word) {
+        public boolean isInDictionary(String word) {
             return false;
         }
     }
diff --git a/java/src/com/android/inputmethod/latin/DictionaryCollection.java b/java/src/com/android/inputmethod/latin/DictionaryCollection.java
index 53c78fd001281bee98a50c33231af1ce2dd85f18..89d61ce2a7779866a7d0a79fa5c51c7e4fc76928 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryCollection.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryCollection.java
@@ -78,9 +78,9 @@ public final class DictionaryCollection extends Dictionary {
     }
 
     @Override
-    public boolean isValidWord(final String word) {
+    public boolean isInDictionary(final String word) {
         for (int i = mDictionaries.size() - 1; i >= 0; --i)
-            if (mDictionaries.get(i).isValidWord(word)) return true;
+            if (mDictionaries.get(i).isInDictionary(word)) return true;
         return false;
     }
 
diff --git a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
index 8664c09e4065528e44afc8ee25d07af93b832cb5..e5e00d59a62149796556df024a3035626279416a 100644
--- a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
@@ -414,7 +414,7 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
     }
 
     @Override
-    public boolean isValidWord(final String word) {
+    public boolean isInDictionary(final String word) {
         reloadDictionaryIfRequired();
         boolean lockAcquired = false;
         try {
@@ -424,10 +424,10 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
                 if (mBinaryDictionary == null) {
                     return false;
                 }
-                return isValidWordLocked(word);
+                return isInDictionaryLocked(word);
             }
         } catch (final InterruptedException e) {
-            Log.e(TAG, "Interrupted tryLock() in isValidWord().", e);
+            Log.e(TAG, "Interrupted tryLock() in isInDictionary().", e);
         } finally {
             if (lockAcquired) {
                 mLock.readLock().unlock();
@@ -436,9 +436,9 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
         return false;
     }
 
-    protected boolean isValidWordLocked(final String word) {
+    protected boolean isInDictionaryLocked(final String word) {
         if (mBinaryDictionary == null) return false;
-        return mBinaryDictionary.isValidWord(word);
+        return mBinaryDictionary.isInDictionary(word);
     }
 
     @Override
@@ -590,20 +590,6 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
         });
     }
 
-    // TODO: Implement BinaryDictionary.isInDictionary().
-    @UsedForTesting
-    public boolean isInUnderlyingBinaryDictionaryForTests(final String word) {
-        mLock.readLock().lock();
-        try {
-            if (mBinaryDictionary != null && mDictType == Dictionary.TYPE_USER_HISTORY) {
-                return mBinaryDictionary.isValidWord(word);
-            }
-            return false;
-        } finally {
-            mLock.readLock().unlock();
-        }
-    }
-
     @UsedForTesting
     public void waitAllTasksForTests() {
         final CountDownLatch countDownLatch = new CountDownLatch(1);
diff --git a/java/src/com/android/inputmethod/latin/ReadOnlyBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ReadOnlyBinaryDictionary.java
index 7989346f4149a95a908c35bcc03d28d12cee1d6a..e59ef7563657c7bfd84c3f841d6acf2f5c2970e3 100644
--- a/java/src/com/android/inputmethod/latin/ReadOnlyBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ReadOnlyBinaryDictionary.java
@@ -66,10 +66,10 @@ public final class ReadOnlyBinaryDictionary extends Dictionary {
     }
 
     @Override
-    public boolean isValidWord(final String word) {
+    public boolean isInDictionary(final String word) {
         if (mLock.readLock().tryLock()) {
             try {
-                return mBinaryDictionary.isValidWord(word);
+                return mBinaryDictionary.isInDictionary(word);
             } finally {
                 mLock.readLock().unlock();
             }
diff --git a/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java b/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java
index be658ceff7199cb98afec6fd88427fca76b94000..1ba7b366f4e644fc18ea0ff4b8c61405d8e18534 100644
--- a/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java
+++ b/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java
@@ -80,4 +80,10 @@ public abstract class DecayingExpandableBinaryDictionaryBase extends ExpandableB
     /* package */ void runGCIfRequired() {
         runGCIfRequired(false /* mindsBlockByGC */);
     }
+
+    @Override
+    public boolean isValidWord(final String word) {
+        // Strings out of this dictionary should not be considered existing words.
+        return false;
+    }
 }
diff --git a/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionary.java b/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionary.java
index 1423fceff9620b2bed5fdef00469b907fc1bf027..19fa29e5fb9ef3fec21c9b86c10b72c65e276a26 100644
--- a/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionary.java
+++ b/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionary.java
@@ -38,10 +38,4 @@ public class PersonalizationDictionary extends DecayingExpandableBinaryDictionar
             final Locale locale, final File dictFile) {
         return PersonalizationHelper.getPersonalizationDictionary(context, locale);
     }
-
-    @Override
-    public boolean isValidWord(final String word) {
-        // Strings out of this dictionary should not be considered existing words.
-        return false;
-    }
 }
diff --git a/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java b/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java
index 67ad54fb7e1dfed103e06f991e69d7aae4047232..ea1035612add3fee69b5900fc1969e32ca56fae6 100644
--- a/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java
@@ -47,12 +47,6 @@ public class UserHistoryDictionary extends DecayingExpandableBinaryDictionaryBas
         return PersonalizationHelper.getUserHistoryDictionary(context, locale);
     }
 
-    @Override
-    public boolean isValidWord(final String word) {
-        // Strings out of this dictionary should not be considered existing words.
-        return false;
-    }
-
     /**
      * Add a word to the user history dictionary.
      *
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java b/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java
index 1331d52d555df54ec4f1678be7a8c0c5850d33fa..cc52a3e0f6664aef6c80e5491d8a638aab0934a3 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java
@@ -58,7 +58,7 @@ public final class DictionaryPool extends LinkedBlockingQueue<DictAndKeyboard> {
                     return noSuggestions;
                 }
                 @Override
-                public boolean isValidWord(final String word) {
+                public boolean isInDictionary(final String word) {
                     // This is never called. However if for some strange reason it ever gets
                     // called, returning true is less destructive (it will not underline the
                     // word in red).
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedContactsBinaryDictionary.java b/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedContactsBinaryDictionary.java
index 75075664faaba0d86b3b645b8dc1c8fc0c09da8c..a6437bac37d53673e9e982af6eb8ada6a56f4a58 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedContactsBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedContactsBinaryDictionary.java
@@ -47,9 +47,9 @@ public final class SynchronouslyLoadedContactsBinaryDictionary extends ContactsB
     }
 
     @Override
-    public boolean isValidWord(final String word) {
+    public boolean isInDictionary(final String word) {
         synchronized (mLock) {
-            return super.isValidWord(word);
+            return super.isInDictionary(word);
         }
     }
 }
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedUserBinaryDictionary.java b/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedUserBinaryDictionary.java
index f2d981a9d2255d60e6be126246b868b15a8f812f..8c9d5d6819cc472623971004373091fdc819c90a 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedUserBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedUserBinaryDictionary.java
@@ -52,9 +52,9 @@ public final class SynchronouslyLoadedUserBinaryDictionary extends UserBinaryDic
     }
 
     @Override
-    public boolean isValidWord(final String word) {
+    public boolean isInDictionary(final String word) {
         synchronized (mLock) {
-            return super.isValidWord(word);
+            return super.isInDictionary(word);
         }
     }
 }
diff --git a/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java b/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java
index c67d1fa5e7c5d591b1772e251947aa27b217a6f9..48d3a1cadfe19ebda83e6a4118f49c7bfe8f978c 100644
--- a/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java
+++ b/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java
@@ -134,7 +134,7 @@ public class UserHistoryDictionaryTests extends AndroidTestCase {
             dict.waitAllTasksForTests();
             for (int i = 0; i < numberOfWords; ++i) {
                 final String word = words.get(i);
-                assertTrue(dict.isInUnderlyingBinaryDictionaryForTests(word));
+                assertTrue(dict.isInDictionary(word));
             }
         }
         // write to file.
@@ -268,19 +268,19 @@ public class UserHistoryDictionaryTests extends AndroidTestCase {
                     DistracterFilter.EMPTY_DISTRACTER_FILTER);
             prevWordsInfo = new PrevWordsInfo(word);
             dict.waitAllTasksForTests();
-            assertTrue(dict.isInUnderlyingBinaryDictionaryForTests(word));
+            assertTrue(dict.isInDictionary(word));
         }
         forcePassingShortTime();
         dict.runGCIfRequired();
         dict.waitAllTasksForTests();
         for (final String word : words) {
-            assertTrue(dict.isInUnderlyingBinaryDictionaryForTests(word));
+            assertTrue(dict.isInDictionary(word));
         }
         forcePassingLongTime();
         dict.runGCIfRequired();
         dict.waitAllTasksForTests();
         for (final String word : words) {
-            assertFalse(dict.isInUnderlyingBinaryDictionaryForTests(word));
+            assertFalse(dict.isInDictionary(word));
         }
     }
 }