diff --git a/java/com/android/dialer/database/DialerDatabaseHelper.java b/java/com/android/dialer/database/DialerDatabaseHelper.java
index cb07615..8431a90 100644
--- a/java/com/android/dialer/database/DialerDatabaseHelper.java
+++ b/java/com/android/dialer/database/DialerDatabaseHelper.java
@@ -374,7 +374,12 @@
       }
 
       do {
-        Long deleteContactId = deletedContactCursor.getLong(DeleteContactQuery.DELETED_CONTACT_ID);
+        if (deletedContactCursor.isNull(DeleteContactQuery.DELETED_CONTACT_ID)) {
+          LogUtil.i("DialerDatabaseHelper.removeDeletedContacts", "null contact id, skipping row");
+          continue;
+        }
+
+        long deleteContactId = deletedContactCursor.getLong(DeleteContactQuery.DELETED_CONTACT_ID);
 
         Selection smartDialSelection =
             Selection.column(SmartDialDbColumns.CONTACT_ID).is("=", deleteContactId);
diff --git a/java/com/android/dialer/dialpadview/DialpadCharMappings.java b/java/com/android/dialer/dialpadview/DialpadCharMappings.java
index 0bb28ae..15793a5 100644
--- a/java/com/android/dialer/dialpadview/DialpadCharMappings.java
+++ b/java/com/android/dialer/dialpadview/DialpadCharMappings.java
@@ -18,16 +18,12 @@
 
 import android.content.Context;
 import android.support.annotation.NonNull;
-import android.support.annotation.VisibleForTesting;
 import android.support.v4.util.SimpleArrayMap;
 import com.android.dialer.common.Assert;
 import com.android.dialer.compat.CompatUtils;
-import com.android.dialer.configprovider.ConfigProviderBindings;
 
 /** A class containing character mappings for the dialpad. */
 public class DialpadCharMappings {
-  @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
-  public static final String FLAG_ENABLE_DUAL_ALPHABETS = "enable_dual_alphabets_on_t9";
 
   /** The character mapping for the Latin alphabet (the default mapping) */
   private static class Latin {
@@ -134,17 +130,10 @@
 
   /**
    * Returns the character-key map of the ISO 639-2 language code of the 1st language preference or
-   * null if
-   *
-   * <ul>
-   *   <li>no character-key map for the language code is defined, or
-   *   <li>the support for dual alphabets is disabled.
-   * </ul>
+   * null if no character-key map for the language code is defined.
    */
   public static SimpleArrayMap<Character, Character> getCharToKeyMap(@NonNull Context context) {
-    return isDualAlphabetsEnabled(context)
-        ? CHAR_TO_KEY_MAPS.get(CompatUtils.getLocale(context).getISO3Language())
-        : null;
+    return CHAR_TO_KEY_MAPS.get(CompatUtils.getLocale(context).getISO3Language());
   }
 
   /**
@@ -171,17 +160,10 @@
 
   /**
    * Returns the key-characters map of the given ISO 639-2 language code of the 1st language
-   * preference or null if
-   *
-   * <ul>
-   *   <li>no key-characters map for the language code is defined, or
-   *   <li>the support for dual alphabets is disabled.
-   * </ul>
+   * preference or null if no key-characters map for the language code is defined.
    */
-  public static String[] getKeyToCharsMap(@NonNull Context context) {
-    return isDualAlphabetsEnabled(context)
-        ? KEY_TO_CHAR_MAPS.get(CompatUtils.getLocale(context).getISO3Language())
-        : null;
+  static String[] getKeyToCharsMap(@NonNull Context context) {
+    return KEY_TO_CHAR_MAPS.get(CompatUtils.getLocale(context).getISO3Language());
   }
 
   /** Returns the default key-characters map (the one that uses the Latin alphabet). */
@@ -189,10 +171,6 @@
     return Latin.KEY_TO_CHARS;
   }
 
-  private static boolean isDualAlphabetsEnabled(Context context) {
-    return ConfigProviderBindings.get(context).getBoolean(FLAG_ENABLE_DUAL_ALPHABETS, false);
-  }
-
   /**
    * Given a array representing a key-characters map, return its reverse map.
    *
diff --git a/java/com/android/dialer/smartdial/map/CompositeSmartDialMap.java b/java/com/android/dialer/smartdial/map/CompositeSmartDialMap.java
index df32d4c..112cb19 100644
--- a/java/com/android/dialer/smartdial/map/CompositeSmartDialMap.java
+++ b/java/com/android/dialer/smartdial/map/CompositeSmartDialMap.java
@@ -20,7 +20,6 @@
 import android.support.annotation.VisibleForTesting;
 import android.support.v4.util.SimpleArrayMap;
 import com.android.dialer.compat.CompatUtils;
-import com.android.dialer.configprovider.ConfigProviderBindings;
 import com.google.common.base.Optional;
 
 /**
@@ -35,8 +34,6 @@
  */
 @SuppressWarnings("Guava")
 public class CompositeSmartDialMap {
-  @VisibleForTesting
-  public static final String FLAG_ENABLE_DUAL_ALPHABETS = "enable_dual_alphabets_on_t9";
 
   private static final SmartDialMap DEFAULT_MAP = LatinSmartDialMap.getInstance();
 
@@ -160,10 +157,6 @@
 
   @VisibleForTesting
   static Optional<SmartDialMap> getExtraMap(Context context) {
-    if (!ConfigProviderBindings.get(context).getBoolean(FLAG_ENABLE_DUAL_ALPHABETS, false)) {
-      return Optional.absent();
-    }
-
     String languageCode = CompatUtils.getLocale(context).getISO3Language();
     return EXTRA_MAPS.containsKey(languageCode)
         ? Optional.of(EXTRA_MAPS.get(languageCode))
