diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java
index 22f5f5c..addc8f2 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java
@@ -173,25 +173,4 @@
     void dumpDictionaryForDebug(final String dictName);
 
     ArrayList<Pair<String, DictionaryStats>> getStatsOfEnabledSubDicts();
-
-    void addOrIncrementTerm(String fileName,
-            String finalWordToBeAdded,
-            NgramContext ngramContext,
-            int increment,
-            int timeStampInSeconds);
-
-    void clearLanguageModel(String filePath);
-
-    /**
-     * Lets callers iterate over a given dynamic language model. Each iterate call
-     * results in ngrams, their counts, their last updated timestamps and an iteration token
-     * that can be used for the next {@link #iterateOverLanguageModel} call.
-     *
-     * Use empty string for starting the iterator from the begining.
-     * Returns empty string if there are no more entries to iterate upon.
-     * TODO: Encapsulate the result arrays into a java class.
-     */
-    String  iterateOverLanguageModel(String filePath, String iterationToken,
-            ArrayList<String> outputNgramEntries, ArrayList<Integer> outputNgramCounts,
-            ArrayList<Integer> outputNgramTimestamps);
 }
diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorImpl.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorImpl.java
index 6bc97ca..1e08854 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorImpl.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013 The Android Open Source Project
+7 * Copyright (C) 2013 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.
@@ -772,10 +772,12 @@
         }
     }
 
+    @Override
     public void clearUserHistoryDictionary() {
         clearSubDictionary(Dictionary.TYPE_USER_HISTORY);
     }
 
+    @Override
     public void dumpDictionaryForDebug(final String dictName) {
         final DictionaryGroup[] dictionaryGroups = mDictionaryGroups;
         for (final DictionaryGroup dictionaryGroup : dictionaryGroups) {
@@ -789,6 +791,7 @@
         }
     }
 
+    @Override
     public ArrayList<Pair<String, DictionaryStats>> getStatsOfEnabledSubDicts() {
         final ArrayList<Pair<String, DictionaryStats>> statsOfEnabledSubDicts = new ArrayList<>();
         final DictionaryGroup[] dictionaryGroups = mDictionaryGroups;
@@ -801,26 +804,4 @@
         }
         return statsOfEnabledSubDicts;
     }
-
-    @Override
-    public void addOrIncrementTerm(String fileName,
-            String word,
-            NgramContext ngramContext,
-            int increment,
-            int timeStampInSeconds) {
-        // Do nothing.
-    }
-
-    @Override
-    public void clearLanguageModel(String filePath) {
-        // Do nothing.
-    }
-
-    @Override
-    public String iterateOverLanguageModel(String filePath, String iterationToken,
-            ArrayList<String> outputNgramEntries, ArrayList<Integer> outputNgramCounts,
-            ArrayList<Integer> outputNgramTimestamps) {
-        // Do nothing.
-        return "";
-    }
 }
