diff --git a/java-overridable/src/com/android/inputmethod/latin/define/DecoderSpecificConstants.java b/java-overridable/src/com/android/inputmethod/latin/define/DecoderSpecificConstants.java
index 4789e208d73bf5c172399a2b1e13f93504f7b822..9e97b12a5c5a964c3c62aa342d13973e691dcfb8 100644
--- a/java-overridable/src/com/android/inputmethod/latin/define/DecoderSpecificConstants.java
+++ b/java-overridable/src/com/android/inputmethod/latin/define/DecoderSpecificConstants.java
@@ -30,4 +30,7 @@ public class DecoderSpecificConstants {
 
     public static final String DECODER_DICT_SUFFIX = "";
 
+    public static final boolean SHOULD_VERIFY_MAGIC_NUMBER = true;
+    public static final boolean SHOULD_VERIFY_CHECKSUM = true;
+    public static final boolean SHOULD_USE_DICT_VERSION = true;
 }
diff --git a/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java b/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java
index ce23eb7526ba825749e5e22ef3ba136a48dfafd2..73621f474dffbe56bfb0b9eadec29de47b502129 100644
--- a/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java
+++ b/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java
@@ -48,7 +48,7 @@ public class MetadataDbHelper extends SQLiteOpenHelper {
     private static final int METADATA_DATABASE_VERSION_WITH_CLIENTID = 6;
     // The current database version.
     // This MUST be increased every time the dictionary pack metadata URL changes.
-    private static final int CURRENT_METADATA_DATABASE_VERSION = 11;
+    private static final int CURRENT_METADATA_DATABASE_VERSION = 12;
 
     private final static long NOT_A_DOWNLOAD_ID = -1;
 
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
index 10b1f1b77c245fb958d482e6a530a7019836ef50..bc62f3ae3a0a462bff0c2ece4bbeab3a23d37fda 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
@@ -29,6 +29,7 @@ import android.util.Log;
 
 import com.android.inputmethod.dictionarypack.DictionaryPackConstants;
 import com.android.inputmethod.dictionarypack.MD5Calculator;
+import com.android.inputmethod.latin.define.DecoderSpecificConstants;
 import com.android.inputmethod.latin.utils.DictionaryInfoUtils;
 import com.android.inputmethod.latin.utils.DictionaryInfoUtils.DictionaryInfo;
 import com.android.inputmethod.latin.utils.FileTransforms;
@@ -67,6 +68,11 @@ public final class BinaryDictionaryFileDumper {
     private static final byte[] MAGIC_NUMBER_VERSION_2 =
             new byte[] { (byte)0x9B, (byte)0xC1, (byte)0x3A, (byte)0xFE };
 
+    private static final boolean SHOULD_VERIFY_MAGIC_NUMBER =
+            DecoderSpecificConstants.SHOULD_VERIFY_MAGIC_NUMBER;
+    private static final boolean SHOULD_VERIFY_CHECKSUM =
+            DecoderSpecificConstants.SHOULD_VERIFY_CHECKSUM;
+
     private static final String DICTIONARY_PROJECTION[] = { "id" };
 
     private static final String QUERY_PARAMETER_MAY_PROMPT_USER = "mayPrompt";
@@ -302,13 +308,18 @@ public final class BinaryDictionaryFileDumper {
                 checkMagicAndCopyFileTo(bufferedInputStream, bufferedOutputStream);
                 bufferedOutputStream.flush();
                 bufferedOutputStream.close();
-                final String actualRawChecksum = MD5Calculator.checksum(
-                        new BufferedInputStream(new FileInputStream(outputFile)));
-                Log.i(TAG, "Computed checksum for downloaded dictionary. Expected = " + rawChecksum
-                        + " ; actual = " + actualRawChecksum);
-                if (!TextUtils.isEmpty(rawChecksum) && !rawChecksum.equals(actualRawChecksum)) {
-                    throw new IOException("Could not decode the file correctly : checksum differs");
+
+                if (SHOULD_VERIFY_CHECKSUM) {
+                    final String actualRawChecksum = MD5Calculator.checksum(
+                            new BufferedInputStream(new FileInputStream(outputFile)));
+                    Log.i(TAG, "Computed checksum for downloaded dictionary. Expected = "
+                            + rawChecksum + " ; actual = " + actualRawChecksum);
+                    if (!TextUtils.isEmpty(rawChecksum) && !rawChecksum.equals(actualRawChecksum)) {
+                        throw new IOException(
+                                "Could not decode the file correctly : checksum differs");
+                    }
                 }
+
                 final File finalFile = new File(finalFileName);
                 finalFile.delete();
                 if (!outputFile.renameTo(finalFile)) {
@@ -444,9 +455,11 @@ public final class BinaryDictionaryFileDumper {
         if (readMagicNumberSize < length) {
             throw new IOException("Less bytes to read than the magic number length");
         }
-        if (!Arrays.equals(MAGIC_NUMBER_VERSION_2, magicNumberBuffer)) {
-            if (!Arrays.equals(MAGIC_NUMBER_VERSION_1, magicNumberBuffer)) {
-                throw new IOException("Wrong magic number for downloaded file");
+        if (SHOULD_VERIFY_MAGIC_NUMBER) {
+            if (!Arrays.equals(MAGIC_NUMBER_VERSION_2, magicNumberBuffer)) {
+                if (!Arrays.equals(MAGIC_NUMBER_VERSION_1, magicNumberBuffer)) {
+                    throw new IOException("Wrong magic number for downloaded file");
+                }
             }
         }
         output.write(magicNumberBuffer);
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
index 9c70cad0ae871653465c8d8749cccbdd47ea474d..e00532aa65ee8505e73ee72f5c147e0b1a95c4f0 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
@@ -22,6 +22,7 @@ import android.content.res.AssetFileDescriptor;
 import android.util.Log;
 
 import com.android.inputmethod.latin.common.LocaleUtils;
+import com.android.inputmethod.latin.define.DecoderSpecificConstants;
 import com.android.inputmethod.latin.makedict.DictionaryHeader;
 import com.android.inputmethod.latin.makedict.UnsupportedFormatException;
 import com.android.inputmethod.latin.utils.BinaryDictionaryUtils;
@@ -54,6 +55,9 @@ final public class BinaryDictionaryGetter {
      */
     private static final String COMMON_PREFERENCES_NAME = "LatinImeDictPrefs";
 
+    private static final boolean SHOULD_USE_DICT_VERSION =
+            DecoderSpecificConstants.SHOULD_USE_DICT_VERSION;
+
     // Name of the category for the main dictionary
     public static final String MAIN_DICTIONARY_CATEGORY = "main";
     public static final String ID_CATEGORY_SEPARATOR = ":";
@@ -224,6 +228,10 @@ final public class BinaryDictionaryGetter {
     // those do not include whitelist entries, the new code with an old version of the dictionary
     // would lose whitelist functionality.
     private static boolean hackCanUseDictionaryFile(final File file) {
+        if (!SHOULD_USE_DICT_VERSION) {
+            return true;
+        }
+
         try {
             // Read the version of the file
             final DictionaryHeader header = BinaryDictionaryUtils.getHeader(file);
diff --git a/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java b/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java
index 3348a37677f39a31d7df401a65dd77b81c9724ec..1e9f8e47ee5b8504096cd192c54563bbcb127fba 100644
--- a/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java
+++ b/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java
@@ -172,6 +172,8 @@ public final class FormatSpec {
     public static final int VERSION2 = 2;
     public static final int VERSION201 = 201;
     public static final int VERSION202 = 202;
+    // format version for Fava
+    public static final int VERSION300 = 300;
     public static final int MINIMUM_SUPPORTED_VERSION_OF_CODE_POINT_TABLE = VERSION201;
     // Dictionary version used for testing.
     public static final int VERSION4_ONLY_FOR_TESTING = 399;
@@ -180,7 +182,7 @@ public final class FormatSpec {
     public static final int VERSION4 = VERSION403;
     public static final int VERSION4_DEV = VERSION403;
     public static final int MINIMUM_SUPPORTED_STATIC_VERSION = VERSION202;
-    public static final int MAXIMUM_SUPPORTED_STATIC_VERSION = VERSION202;
+    public static final int MAXIMUM_SUPPORTED_STATIC_VERSION = VERSION300;
     static final int MINIMUM_SUPPORTED_DYNAMIC_VERSION = VERSION4;
     static final int MAXIMUM_SUPPORTED_DYNAMIC_VERSION = VERSION4_DEV;