diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
index deb94a4..cc7540e 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
@@ -56,30 +56,6 @@
     private final int[] mScores = new int[MAX_WORDS];
     private final int[] mBigramScores = new int[MAX_BIGRAMS];
 
-    public static final Flag FLAG_REQUIRES_GERMAN_UMLAUT_PROCESSING =
-            new Flag(R.bool.config_require_umlaut_processing, 0x1);
-    public static final Flag FLAG_REQUIRES_FRENCH_LIGATURES_PROCESSING =
-            new Flag(R.bool.config_require_ligatures_processing, 0x4);
-
-    // Can create a new flag from extravalue :
-    // public static final Flag FLAG_MYFLAG =
-    //         new Flag("my_flag", 0x02);
-
-    // ALL_CONFIG_FLAGS is a collection of flags that enable reading all flags from configuration.
-    // This is but a mask - it does not mean the flags will be on, only that the configuration
-    // will be read for this particular flag.
-    public static final Flag[] ALL_CONFIG_FLAGS = {
-        // Here should reside all flags that trigger some special processing
-        // These *must* match the definition in UnigramDictionary enum in
-        // unigram_dictionary.h so please update both at the same time.
-        // Please note that flags created with a resource are of type CONFIG while flags
-        // created with a string are of type EXTRAVALUE. These behave like masks, and the
-        // actual value will be read from the configuration/extra value at run time for
-        // the configuration at dictionary creation time.
-        FLAG_REQUIRES_GERMAN_UMLAUT_PROCESSING,
-        FLAG_REQUIRES_FRENCH_LIGATURES_PROCESSING,
-    };
-
     private final boolean mUseFullEditDistance;
 
     /**
diff --git a/java/src/com/android/inputmethod/latin/Flag.java b/java/src/com/android/inputmethod/latin/Flag.java
deleted file mode 100644
index 4ba6c80..0000000
--- a/java/src/com/android/inputmethod/latin/Flag.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 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.
- */
-
-package com.android.inputmethod.latin;
-
-import android.content.Context;
-import android.content.res.Resources;
-
-public class Flag {
-    public final String mName;
-    public final int mResource;
-    public final int mMask;
-    public final int mSource;
-
-    private static final int SOURCE_CONFIG = 1;
-    private static final int SOURCE_EXTRAVALUE = 2;
-    private static final int SOURCE_PARAM = 3;
-
-    public Flag(int resourceId, int mask) {
-        mName = null;
-        mResource = resourceId;
-        mSource = SOURCE_CONFIG;
-        mMask = mask;
-    }
-
-    public Flag(String name, int mask) {
-        mName = name;
-        mResource = 0;
-        mSource = SOURCE_EXTRAVALUE;
-        mMask = mask;
-    }
-
-    public Flag(int mask) {
-        mName = null;
-        mResource = 0;
-        mSource = SOURCE_PARAM;
-        mMask = mask;
-    }
-
-    // If context/switcher are null, set all related flags in flagArray to on.
-    public static int initFlags(Flag[] flagArray, Context context, SubtypeSwitcher switcher) {
-        int flags = 0;
-        final Resources res = null == context ? null : context.getResources();
-        for (Flag entry : flagArray) {
-            switch (entry.mSource) {
-                case Flag.SOURCE_CONFIG:
-                    if (res == null || res.getBoolean(entry.mResource))
-                        flags |= entry.mMask;
-                    break;
-                case Flag.SOURCE_EXTRAVALUE:
-                    if (switcher == null ||
-                            switcher.currentSubtypeContainsExtraValueKey(entry.mName))
-                        flags |= entry.mMask;
-                    break;
-                case Flag.SOURCE_PARAM:
-                    flags |= entry.mMask;
-                    break;
-            }
-        }
-        return flags;
-    }
-}
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
index 86a0824..9729614 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
@@ -33,7 +33,6 @@
 import com.android.inputmethod.latin.Dictionary.WordCallback;
 import com.android.inputmethod.latin.DictionaryCollection;
 import com.android.inputmethod.latin.DictionaryFactory;
-import com.android.inputmethod.latin.Flag;
 import com.android.inputmethod.latin.LocaleUtils;
 import com.android.inputmethod.latin.R;
 import com.android.inputmethod.latin.StringUtils;
