diff --git a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
index 4077d12..1adf349 100644
--- a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
@@ -27,7 +27,6 @@
 import com.android.inputmethod.latin.makedict.WordProperty;
 import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
 import com.android.inputmethod.latin.utils.AsyncResultHolder;
-import com.android.inputmethod.latin.utils.BinaryDictionaryUtils;
 import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.CombinedFormatUtils;
 import com.android.inputmethod.latin.utils.ExecutorUtils;
@@ -233,24 +232,24 @@
         mBinaryDictionary = null;
     }
 
-    private void createBinaryDictionaryLocked() {
-        BinaryDictionaryUtils.createEmptyDictFile(mDictFile.getAbsolutePath(),
-                DICTIONARY_FORMAT_VERSION, mLocale, getHeaderAttributeMap());
-    }
-
     private void openBinaryDictionaryLocked() {
         mBinaryDictionary = new BinaryDictionary(
                 mDictFile.getAbsolutePath(), 0 /* offset */, mDictFile.length(),
                 true /* useFullEditDistance */, mLocale, mDictType, true /* isUpdatable */);
     }
 
+    private void createOnMemoryBinaryDictionaryLocked() {
+        mBinaryDictionary = new BinaryDictionary(
+                mDictFile.getAbsolutePath(), true /* useFullEditDistance */, mLocale, mDictType,
+                DICTIONARY_FORMAT_VERSION, getHeaderAttributeMap());
+    }
+
     public void clear() {
         ExecutorUtils.getExecutor(mDictName).execute(new Runnable() {
             @Override
             public void run() {
                 removeBinaryDictionaryLocked();
-                createBinaryDictionaryLocked();
-                openBinaryDictionaryLocked();
+                createOnMemoryBinaryDictionaryLocked();
             }
         });
     }
@@ -512,8 +511,7 @@
                     + mDictNameDictionaryUpdateController.mLastUpdateTime);
         }
         removeBinaryDictionaryLocked();
-        createBinaryDictionaryLocked();
-        openBinaryDictionaryLocked();
+        createOnMemoryBinaryDictionaryLocked();
         loadInitialContentsLocked();
         // Run GC and flush to file when initial contents have been loaded.
         mBinaryDictionary.flushWithGCIfHasUpdated();
diff --git a/java/src/com/android/inputmethod/latin/utils/BinaryDictionaryUtils.java b/java/src/com/android/inputmethod/latin/utils/BinaryDictionaryUtils.java
index b4658b5..5d7deba 100644
--- a/java/src/com/android/inputmethod/latin/utils/BinaryDictionaryUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/BinaryDictionaryUtils.java
@@ -91,6 +91,7 @@
         return false;
     }
 
+    @UsedForTesting
     public static boolean createEmptyDictFile(final String filePath, final long dictVersion,
             final Locale locale, final Map<String, String> attributeMap) {
         final String[] keyArray = new String[attributeMap.size()];
