diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index 54a8ab4..aa963b7 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -157,6 +157,12 @@
     private SmartDialController mSmartDialAdapter;
 
     private SmartDialCache mSmartDialCache;
+
+    /**
+     * Use latin character map by default
+     */
+    private SmartDialMap mSmartDialMap = new LatinSmartDialMap();
+
     /**
      * Master switch controlling whether or not smart dialing is enabled, and whether the
      * smart dialing suggestion strip is visible.
@@ -1694,7 +1700,8 @@
         }
 
         // Update only when the digits have changed.
-        final String digits = SmartDialNameMatcher.normalizeNumber(mDigits.getText().toString());
+        final String digits = SmartDialNameMatcher.normalizeNumber(mDigits.getText().toString(),
+                mSmartDialMap);
         if (TextUtils.equals(digits, mLastDigitsForSmartDial)) {
             return;
         }
@@ -1721,7 +1728,7 @@
         if (mSmartDialEnabled) {
             mSmartDialContainer.setVisibility(View.VISIBLE);
             mSmartDialCache = SmartDialCache.getInstance(getActivity(),
-                    mContactsPrefs.getDisplayOrder());
+                    mContactsPrefs.getDisplayOrder(), mSmartDialMap);
             // Don't force recache if this is the first time onResume is being called, since
             // caching should already happen in setUserVisibleHint.
             if (!mFirstLaunch || getUserVisibleHint()) {
diff --git a/src/com/android/dialer/dialpad/LatinSmartDialMap.java b/src/com/android/dialer/dialpad/LatinSmartDialMap.java
new file mode 100644
index 0000000..ef1ec0a
--- /dev/null
+++ b/src/com/android/dialer/dialpad/LatinSmartDialMap.java
@@ -0,0 +1,413 @@
+package com.android.dialer.dialpad;
+
+public class LatinSmartDialMap implements SmartDialMap {
+
+    private static final char[] LATIN_LETTERS_TO_DIGITS = {
+        '2', '2', '2', // A,B,C -> 2
+        '3', '3', '3', // D,E,F -> 3
+        '4', '4', '4', // G,H,I -> 4
+        '5', '5', '5', // J,K,L -> 5
+        '6', '6', '6', // M,N,O -> 6
+        '7', '7', '7', '7', // P,Q,R,S -> 7
+        '8', '8', '8', // T,U,V -> 8
+        '9', '9', '9', '9' // W,X,Y,Z -> 9
+    };
+
+    @Override
+    public boolean isValidDialpadAlphabeticChar(char ch) {
+        return (ch >= 'a' && ch <= 'z');
+    }
+
+    @Override
+    public boolean isValidDialpadNumericChar(char ch) {
+        return (ch >= '0' && ch <= '9');
+    }
+
+    @Override
+    public boolean isValidDialpadCharacter(char ch) {
+        return (isValidDialpadAlphabeticChar(ch) || isValidDialpadNumericChar(ch));
+    }
+
+    /*
+     * The switch statement in this function was generated using the python code:
+     * from unidecode import unidecode
+     * for i in range(192, 564):
+     *     char = unichr(i)
+     *     decoded = unidecode(char)
+     *     # Unicode characters that decompose into multiple characters i.e.
+     *     #  into ss are not supported for now
+     *     if (len(decoded) == 1 and decoded.isalpha()):
+     *         print "case '" + char + "': return '" + unidecode(char) +  "';"
+     *
+     * This gives us a way to map characters containing accents/diacritics to their
+     * alphabetic equivalents. The unidecode library can be found at:
+     * http://pypi.python.org/pypi/Unidecode/0.04.1
+     *
+     * Also remaps all upper case latin characters to their lower case equivalents.
+     */
+    @Override
+    public char normalizeCharacter(char ch) {
+        switch (ch) {
+            case 'À': return 'a';
+            case 'Á': return 'a';
+            case 'Â': return 'a';
+            case 'Ã': return 'a';
+            case 'Ä': return 'a';
+            case 'Å': return 'a';
+            case 'Ç': return 'c';
+            case 'È': return 'e';
+            case 'É': return 'e';
+            case 'Ê': return 'e';
+            case 'Ë': return 'e';
+            case 'Ì': return 'i';
+            case 'Í': return 'i';
+            case 'Î': return 'i';
+            case 'Ï': return 'i';
+            case 'Ð': return 'd';
+            case 'Ñ': return 'n';
+            case 'Ò': return 'o';
+            case 'Ó': return 'o';
+            case 'Ô': return 'o';
+            case 'Õ': return 'o';
+            case 'Ö': return 'o';
+            case '×': return 'x';
+            case 'Ø': return 'o';
+            case 'Ù': return 'u';
+            case 'Ú': return 'u';
+            case 'Û': return 'u';
+            case 'Ü': return 'u';
+            case 'Ý': return 'u';
+            case 'à': return 'a';
+            case 'á': return 'a';
+            case 'â': return 'a';
+            case 'ã': return 'a';
+            case 'ä': return 'a';
+            case 'å': return 'a';
+            case 'ç': return 'c';
+            case 'è': return 'e';
+            case 'é': return 'e';
+            case 'ê': return 'e';
+            case 'ë': return 'e';
+            case 'ì': return 'i';
+            case 'í': return 'i';
+            case 'î': return 'i';
+            case 'ï': return 'i';
+            case 'ð': return 'd';
+            case 'ñ': return 'n';
+            case 'ò': return 'o';
+            case 'ó': return 'o';
+            case 'ô': return 'o';
+            case 'õ': return 'o';
+            case 'ö': return 'o';
+            case 'ø': return 'o';
+            case 'ù': return 'u';
+            case 'ú': return 'u';
+            case 'û': return 'u';
+            case 'ü': return 'u';
+            case 'ý': return 'y';
+            case 'ÿ': return 'y';
+            case 'Ā': return 'a';
+            case 'ā': return 'a';
+            case 'Ă': return 'a';
+            case 'ă': return 'a';
+            case 'Ą': return 'a';
+            case 'ą': return 'a';
+            case 'Ć': return 'c';
+            case 'ć': return 'c';
+            case 'Ĉ': return 'c';
+            case 'ĉ': return 'c';
+            case 'Ċ': return 'c';
+            case 'ċ': return 'c';
+            case 'Č': return 'c';
+            case 'č': return 'c';
+            case 'Ď': return 'd';
+            case 'ď': return 'd';
+            case 'Đ': return 'd';
+            case 'đ': return 'd';
+            case 'Ē': return 'e';
+            case 'ē': return 'e';
+            case 'Ĕ': return 'e';
+            case 'ĕ': return 'e';
+            case 'Ė': return 'e';
+            case 'ė': return 'e';
+            case 'Ę': return 'e';
+            case 'ę': return 'e';
+            case 'Ě': return 'e';
+            case 'ě': return 'e';
+            case 'Ĝ': return 'g';
+            case 'ĝ': return 'g';
+            case 'Ğ': return 'g';
+            case 'ğ': return 'g';
+            case 'Ġ': return 'g';
+            case 'ġ': return 'g';
+            case 'Ģ': return 'g';
+            case 'ģ': return 'g';
+            case 'Ĥ': return 'h';
+            case 'ĥ': return 'h';
+            case 'Ħ': return 'h';
+            case 'ħ': return 'h';
+            case 'Ĩ': return 'i';
+            case 'ĩ': return 'i';
+            case 'Ī': return 'i';
+            case 'ī': return 'i';
+            case 'Ĭ': return 'i';
+            case 'ĭ': return 'i';
+            case 'Į': return 'i';
+            case 'į': return 'i';
+            case 'İ': return 'i';
+            case 'ı': return 'i';
+            case 'Ĵ': return 'j';
+            case 'ĵ': return 'j';
+            case 'Ķ': return 'k';
+            case 'ķ': return 'k';
+            case 'ĸ': return 'k';
+            case 'Ĺ': return 'l';
+            case 'ĺ': return 'l';
+            case 'Ļ': return 'l';
+            case 'ļ': return 'l';
+            case 'Ľ': return 'l';
+            case 'ľ': return 'l';
+            case 'Ŀ': return 'l';
+            case 'ŀ': return 'l';
+            case 'Ł': return 'l';
+            case 'ł': return 'l';
+            case 'Ń': return 'n';
+            case 'ń': return 'n';
+            case 'Ņ': return 'n';
+            case 'ņ': return 'n';
+            case 'Ň': return 'n';
+            case 'ň': return 'n';
+            case 'Ō': return 'o';
+            case 'ō': return 'o';
+            case 'Ŏ': return 'o';
+            case 'ŏ': return 'o';
+            case 'Ő': return 'o';
+            case 'ő': return 'o';
+            case 'Ŕ': return 'r';
+            case 'ŕ': return 'r';
+            case 'Ŗ': return 'r';
+            case 'ŗ': return 'r';
+            case 'Ř': return 'r';
+            case 'ř': return 'r';
+            case 'Ś': return 's';
+            case 'ś': return 's';
+            case 'Ŝ': return 's';
+            case 'ŝ': return 's';
+            case 'Ş': return 's';
+            case 'ş': return 's';
+            case 'Š': return 's';
+            case 'š': return 's';
+            case 'Ţ': return 't';
+            case 'ţ': return 't';
+            case 'Ť': return 't';
+            case 'ť': return 't';
+            case 'Ŧ': return 't';
+            case 'ŧ': return 't';
+            case 'Ũ': return 'u';
+            case 'ũ': return 'u';
+            case 'Ū': return 'u';
+            case 'ū': return 'u';
+            case 'Ŭ': return 'u';
+            case 'ŭ': return 'u';
+            case 'Ů': return 'u';
+            case 'ů': return 'u';
+            case 'Ű': return 'u';
+            case 'ű': return 'u';
+            case 'Ų': return 'u';
+            case 'ų': return 'u';
+            case 'Ŵ': return 'w';
+            case 'ŵ': return 'w';
+            case 'Ŷ': return 'y';
+            case 'ŷ': return 'y';
+            case 'Ÿ': return 'y';
+            case 'Ź': return 'z';
+            case 'ź': return 'z';
+            case 'Ż': return 'z';
+            case 'ż': return 'z';
+            case 'Ž': return 'z';
+            case 'ž': return 'z';
+            case 'ſ': return 's';
+            case 'ƀ': return 'b';
+            case 'Ɓ': return 'b';
+            case 'Ƃ': return 'b';
+            case 'ƃ': return 'b';
+            case 'Ɔ': return 'o';
+            case 'Ƈ': return 'c';
+            case 'ƈ': return 'c';
+            case 'Ɖ': return 'd';
+            case 'Ɗ': return 'd';
+            case 'Ƌ': return 'd';
+            case 'ƌ': return 'd';
+            case 'ƍ': return 'd';
+            case 'Ɛ': return 'e';
+            case 'Ƒ': return 'f';
+            case 'ƒ': return 'f';
+            case 'Ɠ': return 'g';
+            case 'Ɣ': return 'g';
+            case 'Ɩ': return 'i';
+            case 'Ɨ': return 'i';
+            case 'Ƙ': return 'k';
+            case 'ƙ': return 'k';
+            case 'ƚ': return 'l';
+            case 'ƛ': return 'l';
+            case 'Ɯ': return 'w';
+            case 'Ɲ': return 'n';
+            case 'ƞ': return 'n';
+            case 'Ɵ': return 'o';
+            case 'Ơ': return 'o';
+            case 'ơ': return 'o';
+            case 'Ƥ': return 'p';
+            case 'ƥ': return 'p';
+            case 'ƫ': return 't';
+            case 'Ƭ': return 't';
+            case 'ƭ': return 't';
+            case 'Ʈ': return 't';
+            case 'Ư': return 'u';
+            case 'ư': return 'u';
+            case 'Ʊ': return 'y';
+            case 'Ʋ': return 'v';
+            case 'Ƴ': return 'y';
+            case 'ƴ': return 'y';
+            case 'Ƶ': return 'z';
+            case 'ƶ': return 'z';
+            case 'ƿ': return 'w';
+            case 'Ǎ': return 'a';
+            case 'ǎ': return 'a';
+            case 'Ǐ': return 'i';
+            case 'ǐ': return 'i';
+            case 'Ǒ': return 'o';
+            case 'ǒ': return 'o';
+            case 'Ǔ': return 'u';
+            case 'ǔ': return 'u';
+            case 'Ǖ': return 'u';
+            case 'ǖ': return 'u';
+            case 'Ǘ': return 'u';
+            case 'ǘ': return 'u';
+            case 'Ǚ': return 'u';
+            case 'ǚ': return 'u';
+            case 'Ǜ': return 'u';
+            case 'ǜ': return 'u';
+            case 'Ǟ': return 'a';
+            case 'ǟ': return 'a';
+            case 'Ǡ': return 'a';
+            case 'ǡ': return 'a';
+            case 'Ǥ': return 'g';
+            case 'ǥ': return 'g';
+            case 'Ǧ': return 'g';
+            case 'ǧ': return 'g';
+            case 'Ǩ': return 'k';
+            case 'ǩ': return 'k';
+            case 'Ǫ': return 'o';
+            case 'ǫ': return 'o';
+            case 'Ǭ': return 'o';
+            case 'ǭ': return 'o';
+            case 'ǰ': return 'j';
+            case 'ǲ': return 'd';
+            case 'Ǵ': return 'g';
+            case 'ǵ': return 'g';
+            case 'Ƿ': return 'w';
+            case 'Ǹ': return 'n';
+            case 'ǹ': return 'n';
+            case 'Ǻ': return 'a';
+            case 'ǻ': return 'a';
+            case 'Ǿ': return 'o';
+            case 'ǿ': return 'o';
+            case 'Ȁ': return 'a';
+            case 'ȁ': return 'a';
+            case 'Ȃ': return 'a';
+            case 'ȃ': return 'a';
+            case 'Ȅ': return 'e';
+            case 'ȅ': return 'e';
+            case 'Ȇ': return 'e';
+            case 'ȇ': return 'e';
+            case 'Ȉ': return 'i';
+            case 'ȉ': return 'i';
+            case 'Ȋ': return 'i';
+            case 'ȋ': return 'i';
+            case 'Ȍ': return 'o';
+            case 'ȍ': return 'o';
+            case 'Ȏ': return 'o';
+            case 'ȏ': return 'o';
+            case 'Ȑ': return 'r';
+            case 'ȑ': return 'r';
+            case 'Ȓ': return 'r';
+            case 'ȓ': return 'r';
+            case 'Ȕ': return 'u';
+            case 'ȕ': return 'u';
+            case 'Ȗ': return 'u';
+            case 'ȗ': return 'u';
+            case 'Ș': return 's';
+            case 'ș': return 's';
+            case 'Ț': return 't';
+            case 'ț': return 't';
+            case 'Ȝ': return 'y';
+            case 'ȝ': return 'y';
+            case 'Ȟ': return 'h';
+            case 'ȟ': return 'h';
+            case 'Ȥ': return 'z';
+            case 'ȥ': return 'z';
+            case 'Ȧ': return 'a';
+            case 'ȧ': return 'a';
+            case 'Ȩ': return 'e';
+            case 'ȩ': return 'e';
+            case 'Ȫ': return 'o';
+            case 'ȫ': return 'o';
+            case 'Ȭ': return 'o';
+            case 'ȭ': return 'o';
+            case 'Ȯ': return 'o';
+            case 'ȯ': return 'o';
+            case 'Ȱ': return 'o';
+            case 'ȱ': return 'o';
+            case 'Ȳ': return 'y';
+            case 'ȳ': return 'y';
+            case 'A': return 'a';
+            case 'B': return 'b';
+            case 'C': return 'c';
+            case 'D': return 'd';
+            case 'E': return 'e';
+            case 'F': return 'f';
+            case 'G': return 'g';
+            case 'H': return 'h';
+            case 'I': return 'i';
+            case 'J': return 'j';
+            case 'K': return 'k';
+            case 'L': return 'l';
+            case 'M': return 'm';
+            case 'N': return 'n';
+            case 'O': return 'o';
+            case 'P': return 'p';
+            case 'Q': return 'q';
+            case 'R': return 'r';
+            case 'S': return 's';
+            case 'T': return 't';
+            case 'U': return 'u';
+            case 'V': return 'v';
+            case 'W': return 'w';
+            case 'X': return 'x';
+            case 'Y': return 'y';
+            case 'Z': return 'z';
+            default:
+                return ch;
+        }
+    }
+
+    @Override
+    public byte getDialpadIndex(char ch) {
+        if (ch >= '0' && ch <= '9') {
+            return (byte) (ch - '0');
+        } else if (ch >= 'a' && ch <= 'z') {
+            return (byte) (LATIN_LETTERS_TO_DIGITS[ch - 'a'] - '0');
+        } else {
+            return -1;
+        }
+    }
+
+    @Override
+    public char getDialpadNumericCharacter(char ch) {
+        if (ch >= 'a' && ch <= 'z') {
+            return LATIN_LETTERS_TO_DIGITS[ch - 'a'];
+        }
+        return ch;
+    }
+
+}
diff --git a/src/com/android/dialer/dialpad/SmartDialCache.java b/src/com/android/dialer/dialpad/SmartDialCache.java
index 3294bfb..3d4a563 100644
--- a/src/com/android/dialer/dialpad/SmartDialCache.java
+++ b/src/com/android/dialer/dialpad/SmartDialCache.java
@@ -144,6 +144,7 @@
 
     private SmartDialTrie mContactsCache;
     private static AtomicInteger mCacheStatus;
+    private final SmartDialMap mMap;
     private final int mNameDisplayOrder;
     private final Context mContext;
     private final static Object mLock = new Object();
@@ -162,8 +163,9 @@
 
     private static final boolean DEBUG = false;
 
-    private SmartDialCache(Context context, int nameDisplayOrder) {
+    private SmartDialCache(Context context, int nameDisplayOrder, SmartDialMap map) {
         mNameDisplayOrder = nameDisplayOrder;
+        mMap = map;
         Preconditions.checkNotNull(context, "Context must not be null");
         mContext = context.getApplicationContext();
         mCacheStatus = new AtomicInteger(CACHE_NEEDS_RECACHE);
@@ -201,9 +203,10 @@
      *        {@link android.provider.ContactsContract.Preferences#DISPLAY_ORDER}.
      * @return An instance of SmartDialCache
      */
-    public static synchronized SmartDialCache getInstance(Context context, int nameDisplayOrder) {
+    public static synchronized SmartDialCache getInstance(Context context, int nameDisplayOrder,
+            SmartDialMap map) {
         if (instance == null) {
-            instance = new SmartDialCache(context, nameDisplayOrder);
+            instance = new SmartDialCache(context, nameDisplayOrder, map);
         }
         return instance;
     }
@@ -236,8 +239,7 @@
                 mCacheStatus.getAndSet(CACHE_NEEDS_RECACHE);
                 return;
             }
-            final SmartDialTrie cache = new SmartDialTrie(
-                    SmartDialNameMatcher.LATIN_LETTERS_TO_DIGITS, sUserInNanpRegion);
+            final SmartDialTrie cache = new SmartDialTrie(mMap, sUserInNanpRegion);
             try {
                 c.moveToPosition(-1);
                 int affinityCount = 0;
@@ -350,6 +352,10 @@
 
     }
 
+    public SmartDialMap getMap() {
+        return mMap;
+    }
+
     public boolean getUserInNanpRegion() {
         return sUserInNanpRegion;
     }
diff --git a/src/com/android/dialer/dialpad/SmartDialLoaderTask.java b/src/com/android/dialer/dialpad/SmartDialLoaderTask.java
index 216697d..d584c17 100644
--- a/src/com/android/dialer/dialpad/SmartDialLoaderTask.java
+++ b/src/com/android/dialer/dialpad/SmartDialLoaderTask.java
@@ -68,8 +68,9 @@
     public SmartDialLoaderTask(SmartDialLoaderCallback callback, String query,
             SmartDialCache cache) {
         this.mCallback = callback;
-        this.mNameMatcher = new SmartDialNameMatcher(PhoneNumberUtils.normalizeNumber(query));
         this.mContactsCache = cache;
+        this.mNameMatcher = new SmartDialNameMatcher(PhoneNumberUtils.normalizeNumber(query),
+                cache.getMap());
         this.mQuery = query;
     }
 
@@ -127,7 +128,7 @@
                     Contacts.getLookupUri(contact.id, contact.lookupKey),
                     contact.phoneNumber,
                     mNameMatcher.getMatchPositions(),
-                    SmartDialNameMatcher.matchesNumber(contact.phoneNumber,
+                    mNameMatcher.matchesNumber(contact.phoneNumber,
                             mNameMatcher.getQuery(), matchNanp)
                     ));
             if (candidates.size() >= MAX_ENTRIES) {
diff --git a/src/com/android/dialer/dialpad/SmartDialMap.java b/src/com/android/dialer/dialpad/SmartDialMap.java
new file mode 100644
index 0000000..b51891a
--- /dev/null
+++ b/src/com/android/dialer/dialpad/SmartDialMap.java
@@ -0,0 +1,43 @@
+package com.android.dialer.dialpad;
+
+/**
+ * Note: These methods currently take characters as arguments. For future planned language support,
+ * they will need to be changed to use codepoints instead of characters.
+ *
+ * http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#codePointAt(int)
+ *
+ * If/when this change is made, LatinSmartDialMap(which operates on chars) will continue to work
+ * by simply casting from a codepoint to a character.
+ */
+public interface SmartDialMap {
+    /*
+     * Returns true if the provided character can be mapped to a key on the dialpad
+     */
+    public boolean isValidDialpadCharacter(char ch);
+
+    /*
+     * Returns true if the provided character is a letter, and can be mapped to a key on the dialpad
+     */
+    public boolean isValidDialpadAlphabeticChar(char ch);
+
+    /*
+     * Returns true if the provided character is a digit, and can be mapped to a key on the dialpad
+     */
+    public boolean isValidDialpadNumericChar(char ch);
+
+    /*
+     * Get the index of the key on the dialpad which the character corresponds to
+     */
+    public byte getDialpadIndex(char ch);
+
+    /*
+     * Get the actual numeric character on the dialpad which the character corresponds to
+     */
+    public char getDialpadNumericCharacter(char ch);
+
+    /*
+     * Converts uppercase characters to lower case ones, and on a best effort basis, strips accents
+     * from accented characters.
+     */
+    public char normalizeCharacter(char ch);
+}
diff --git a/src/com/android/dialer/dialpad/SmartDialNameMatcher.java b/src/com/android/dialer/dialpad/SmartDialNameMatcher.java
index f7ae1c2..dcf3f04 100644
--- a/src/com/android/dialer/dialpad/SmartDialNameMatcher.java
+++ b/src/com/android/dialer/dialpad/SmartDialNameMatcher.java
@@ -36,17 +36,6 @@
 
     private final String mQuery;
 
-    public static final char[] LATIN_LETTERS_TO_DIGITS = {
-        '2', '2', '2', // A,B,C -> 2
-        '3', '3', '3', // D,E,F -> 3
-        '4', '4', '4', // G,H,I -> 4
-        '5', '5', '5', // J,K,L -> 5
-        '6', '6', '6', // M,N,O -> 6
-        '7', '7', '7', '7', // P,Q,R,S -> 7
-        '8', '8', '8', // T,U,V -> 8
-        '9', '9', '9', '9' // W,X,Y,Z -> 9
-    };
-
     // Whether or not we allow matches like 57 - (J)ohn (S)mith
     private static final boolean ALLOW_INITIAL_MATCH = true;
 
@@ -54,371 +43,19 @@
     // positives
     private static final int INITIAL_LENGTH_LIMIT = 1;
 
-    /*
-     * The switch statement in this function was generated using the python code:
-     * from unidecode import unidecode
-     * for i in range(192, 564):
-     *     char = unichr(i)
-     *     decoded = unidecode(char)
-     *     # Unicode characters that decompose into multiple characters i.e.
-     *     #  into ss are not supported for now
-     *     if (len(decoded) == 1 and decoded.isalpha()):
-     *         print "case '" + char + "': return '" + unidecode(char) +  "';"
-     *
-     * This gives us a way to map characters containing accents/diacritics to their
-     * alphabetic equivalents. The unidecode library can be found at:
-     * http://pypi.python.org/pypi/Unidecode/0.04.1
-     *
-     * Also remaps all upper case latin characters to their lower case equivalents.
-     */
-    public static char remapAccentedChars(char c) {
-        switch (c) {
-            case 'À': return 'a';
-            case 'Á': return 'a';
-            case 'Â': return 'a';
-            case 'Ã': return 'a';
-            case 'Ä': return 'a';
-            case 'Å': return 'a';
-            case 'Ç': return 'c';
-            case 'È': return 'e';
-            case 'É': return 'e';
-            case 'Ê': return 'e';
-            case 'Ë': return 'e';
-            case 'Ì': return 'i';
-            case 'Í': return 'i';
-            case 'Î': return 'i';
-            case 'Ï': return 'i';
-            case 'Ð': return 'd';
-            case 'Ñ': return 'n';
-            case 'Ò': return 'o';
-            case 'Ó': return 'o';
-            case 'Ô': return 'o';
-            case 'Õ': return 'o';
-            case 'Ö': return 'o';
-            case '×': return 'x';
-            case 'Ø': return 'o';
-            case 'Ù': return 'u';
-            case 'Ú': return 'u';
-            case 'Û': return 'u';
-            case 'Ü': return 'u';
-            case 'Ý': return 'u';
-            case 'à': return 'a';
-            case 'á': return 'a';
-            case 'â': return 'a';
-            case 'ã': return 'a';
-            case 'ä': return 'a';
-            case 'å': return 'a';
-            case 'ç': return 'c';
-            case 'è': return 'e';
-            case 'é': return 'e';
-            case 'ê': return 'e';
-            case 'ë': return 'e';
-            case 'ì': return 'i';
-            case 'í': return 'i';
-            case 'î': return 'i';
-            case 'ï': return 'i';
-            case 'ð': return 'd';
-            case 'ñ': return 'n';
-            case 'ò': return 'o';
-            case 'ó': return 'o';
-            case 'ô': return 'o';
-            case 'õ': return 'o';
-            case 'ö': return 'o';
-            case 'ø': return 'o';
-            case 'ù': return 'u';
-            case 'ú': return 'u';
-            case 'û': return 'u';
-            case 'ü': return 'u';
-            case 'ý': return 'y';
-            case 'ÿ': return 'y';
-            case 'Ā': return 'a';
-            case 'ā': return 'a';
-            case 'Ă': return 'a';
-            case 'ă': return 'a';
-            case 'Ą': return 'a';
-            case 'ą': return 'a';
-            case 'Ć': return 'c';
-            case 'ć': return 'c';
-            case 'Ĉ': return 'c';
-            case 'ĉ': return 'c';
-            case 'Ċ': return 'c';
-            case 'ċ': return 'c';
-            case 'Č': return 'c';
-            case 'č': return 'c';
-            case 'Ď': return 'd';
-            case 'ď': return 'd';
-            case 'Đ': return 'd';
-            case 'đ': return 'd';
-            case 'Ē': return 'e';
-            case 'ē': return 'e';
-            case 'Ĕ': return 'e';
-            case 'ĕ': return 'e';
-            case 'Ė': return 'e';
-            case 'ė': return 'e';
-            case 'Ę': return 'e';
-            case 'ę': return 'e';
-            case 'Ě': return 'e';
-            case 'ě': return 'e';
-            case 'Ĝ': return 'g';
-            case 'ĝ': return 'g';
-            case 'Ğ': return 'g';
-            case 'ğ': return 'g';
-            case 'Ġ': return 'g';
-            case 'ġ': return 'g';
-            case 'Ģ': return 'g';
-            case 'ģ': return 'g';
-            case 'Ĥ': return 'h';
-            case 'ĥ': return 'h';
-            case 'Ħ': return 'h';
-            case 'ħ': return 'h';
-            case 'Ĩ': return 'i';
-            case 'ĩ': return 'i';
-            case 'Ī': return 'i';
-            case 'ī': return 'i';
-            case 'Ĭ': return 'i';
-            case 'ĭ': return 'i';
-            case 'Į': return 'i';
-            case 'į': return 'i';
-            case 'İ': return 'i';
-            case 'ı': return 'i';
-            case 'Ĵ': return 'j';
-            case 'ĵ': return 'j';
-            case 'Ķ': return 'k';
-            case 'ķ': return 'k';
-            case 'ĸ': return 'k';
-            case 'Ĺ': return 'l';
-            case 'ĺ': return 'l';
-            case 'Ļ': return 'l';
-            case 'ļ': return 'l';
-            case 'Ľ': return 'l';
-            case 'ľ': return 'l';
-            case 'Ŀ': return 'l';
-            case 'ŀ': return 'l';
-            case 'Ł': return 'l';
-            case 'ł': return 'l';
-            case 'Ń': return 'n';
-            case 'ń': return 'n';
-            case 'Ņ': return 'n';
-            case 'ņ': return 'n';
-            case 'Ň': return 'n';
-            case 'ň': return 'n';
-            case 'Ō': return 'o';
-            case 'ō': return 'o';
-            case 'Ŏ': return 'o';
-            case 'ŏ': return 'o';
-            case 'Ő': return 'o';
-            case 'ő': return 'o';
-            case 'Ŕ': return 'r';
-            case 'ŕ': return 'r';
-            case 'Ŗ': return 'r';
-            case 'ŗ': return 'r';
-            case 'Ř': return 'r';
-            case 'ř': return 'r';
-            case 'Ś': return 's';
-            case 'ś': return 's';
-            case 'Ŝ': return 's';
-            case 'ŝ': return 's';
-            case 'Ş': return 's';
-            case 'ş': return 's';
-            case 'Š': return 's';
-            case 'š': return 's';
-            case 'Ţ': return 't';
-            case 'ţ': return 't';
-            case 'Ť': return 't';
-            case 'ť': return 't';
-            case 'Ŧ': return 't';
-            case 'ŧ': return 't';
-            case 'Ũ': return 'u';
-            case 'ũ': return 'u';
-            case 'Ū': return 'u';
-            case 'ū': return 'u';
-            case 'Ŭ': return 'u';
-            case 'ŭ': return 'u';
-            case 'Ů': return 'u';
-            case 'ů': return 'u';
-            case 'Ű': return 'u';
-            case 'ű': return 'u';
-            case 'Ų': return 'u';
-            case 'ų': return 'u';
-            case 'Ŵ': return 'w';
-            case 'ŵ': return 'w';
-            case 'Ŷ': return 'y';
-            case 'ŷ': return 'y';
-            case 'Ÿ': return 'y';
-            case 'Ź': return 'z';
-            case 'ź': return 'z';
-            case 'Ż': return 'z';
-            case 'ż': return 'z';
-            case 'Ž': return 'z';
-            case 'ž': return 'z';
-            case 'ſ': return 's';
-            case 'ƀ': return 'b';
-            case 'Ɓ': return 'b';
-            case 'Ƃ': return 'b';
-            case 'ƃ': return 'b';
-            case 'Ɔ': return 'o';
-            case 'Ƈ': return 'c';
-            case 'ƈ': return 'c';
-            case 'Ɖ': return 'd';
-            case 'Ɗ': return 'd';
-            case 'Ƌ': return 'd';
-            case 'ƌ': return 'd';
-            case 'ƍ': return 'd';
-            case 'Ɛ': return 'e';
-            case 'Ƒ': return 'f';
-            case 'ƒ': return 'f';
-            case 'Ɠ': return 'g';
-            case 'Ɣ': return 'g';
-            case 'Ɩ': return 'i';
-            case 'Ɨ': return 'i';
-            case 'Ƙ': return 'k';
-            case 'ƙ': return 'k';
-            case 'ƚ': return 'l';
-            case 'ƛ': return 'l';
-            case 'Ɯ': return 'w';
-            case 'Ɲ': return 'n';
-            case 'ƞ': return 'n';
-            case 'Ɵ': return 'o';
-            case 'Ơ': return 'o';
-            case 'ơ': return 'o';
-            case 'Ƥ': return 'p';
-            case 'ƥ': return 'p';
-            case 'ƫ': return 't';
-            case 'Ƭ': return 't';
-            case 'ƭ': return 't';
-            case 'Ʈ': return 't';
-            case 'Ư': return 'u';
-            case 'ư': return 'u';
-            case 'Ʊ': return 'y';
-            case 'Ʋ': return 'v';
-            case 'Ƴ': return 'y';
-            case 'ƴ': return 'y';
-            case 'Ƶ': return 'z';
-            case 'ƶ': return 'z';
-            case 'ƿ': return 'w';
-            case 'Ǎ': return 'a';
-            case 'ǎ': return 'a';
-            case 'Ǐ': return 'i';
-            case 'ǐ': return 'i';
-            case 'Ǒ': return 'o';
-            case 'ǒ': return 'o';
-            case 'Ǔ': return 'u';
-            case 'ǔ': return 'u';
-            case 'Ǖ': return 'u';
-            case 'ǖ': return 'u';
-            case 'Ǘ': return 'u';
-            case 'ǘ': return 'u';
-            case 'Ǚ': return 'u';
-            case 'ǚ': return 'u';
-            case 'Ǜ': return 'u';
-            case 'ǜ': return 'u';
-            case 'Ǟ': return 'a';
-            case 'ǟ': return 'a';
-            case 'Ǡ': return 'a';
-            case 'ǡ': return 'a';
-            case 'Ǥ': return 'g';
-            case 'ǥ': return 'g';
-            case 'Ǧ': return 'g';
-            case 'ǧ': return 'g';
-            case 'Ǩ': return 'k';
-            case 'ǩ': return 'k';
-            case 'Ǫ': return 'o';
-            case 'ǫ': return 'o';
-            case 'Ǭ': return 'o';
-            case 'ǭ': return 'o';
-            case 'ǰ': return 'j';
-            case 'ǲ': return 'd';
-            case 'Ǵ': return 'g';
-            case 'ǵ': return 'g';
-            case 'Ƿ': return 'w';
-            case 'Ǹ': return 'n';
-            case 'ǹ': return 'n';
-            case 'Ǻ': return 'a';
-            case 'ǻ': return 'a';
-            case 'Ǿ': return 'o';
-            case 'ǿ': return 'o';
-            case 'Ȁ': return 'a';
-            case 'ȁ': return 'a';
-            case 'Ȃ': return 'a';
-            case 'ȃ': return 'a';
-            case 'Ȅ': return 'e';
-            case 'ȅ': return 'e';
-            case 'Ȇ': return 'e';
-            case 'ȇ': return 'e';
-            case 'Ȉ': return 'i';
-            case 'ȉ': return 'i';
-            case 'Ȋ': return 'i';
-            case 'ȋ': return 'i';
-            case 'Ȍ': return 'o';
-            case 'ȍ': return 'o';
-            case 'Ȏ': return 'o';
-            case 'ȏ': return 'o';
-            case 'Ȑ': return 'r';
-            case 'ȑ': return 'r';
-            case 'Ȓ': return 'r';
-            case 'ȓ': return 'r';
-            case 'Ȕ': return 'u';
-            case 'ȕ': return 'u';
-            case 'Ȗ': return 'u';
-            case 'ȗ': return 'u';
-            case 'Ș': return 's';
-            case 'ș': return 's';
-            case 'Ț': return 't';
-            case 'ț': return 't';
-            case 'Ȝ': return 'y';
-            case 'ȝ': return 'y';
-            case 'Ȟ': return 'h';
-            case 'ȟ': return 'h';
-            case 'Ȥ': return 'z';
-            case 'ȥ': return 'z';
-            case 'Ȧ': return 'a';
-            case 'ȧ': return 'a';
-            case 'Ȩ': return 'e';
-            case 'ȩ': return 'e';
-            case 'Ȫ': return 'o';
-            case 'ȫ': return 'o';
-            case 'Ȭ': return 'o';
-            case 'ȭ': return 'o';
-            case 'Ȯ': return 'o';
-            case 'ȯ': return 'o';
-            case 'Ȱ': return 'o';
-            case 'ȱ': return 'o';
-            case 'Ȳ': return 'y';
-            case 'ȳ': return 'y';
-            case 'A': return 'a';
-            case 'B': return 'b';
-            case 'C': return 'c';
-            case 'D': return 'd';
-            case 'E': return 'e';
-            case 'F': return 'f';
-            case 'G': return 'g';
-            case 'H': return 'h';
-            case 'I': return 'i';
-            case 'J': return 'j';
-            case 'K': return 'k';
-            case 'L': return 'l';
-            case 'M': return 'm';
-            case 'N': return 'n';
-            case 'O': return 'o';
-            case 'P': return 'p';
-            case 'Q': return 'q';
-            case 'R': return 'r';
-            case 'S': return 's';
-            case 'T': return 't';
-            case 'U': return 'u';
-            case 'V': return 'v';
-            case 'W': return 'w';
-            case 'X': return 'x';
-            case 'Y': return 'y';
-            case 'Z': return 'z';
-            default: return c;
-        }
-    }
-
     private final ArrayList<SmartDialMatchPosition> mMatchPositions = Lists.newArrayList();
 
+    private static final SmartDialMap LATIN_SMART_DIAL_MAP = new LatinSmartDialMap();
+
+    private final SmartDialMap mMap;
+
     public SmartDialNameMatcher(String query) {
+        this(query, LATIN_SMART_DIAL_MAP);
+    }
+
+    public SmartDialNameMatcher(String query, SmartDialMap map) {
         mQuery = query;
+        mMap = map;
     }
 
     /**
@@ -427,8 +64,8 @@
      * @param number Phone number we want to normalize
      * @return Phone number consisting of digits from 0-9
      */
-    public static String normalizeNumber(String number) {
-        return normalizeNumber(number, 0);
+    public static String normalizeNumber(String number, SmartDialMap map) {
+        return normalizeNumber(number, 0, map);
     }
 
     /**
@@ -438,11 +75,11 @@
      * @param offset Offset to start from
      * @return Phone number consisting of digits from 0-9
      */
-    public static String normalizeNumber(String number, int offset) {
+    public static String normalizeNumber(String number, int offset, SmartDialMap map) {
         final StringBuilder s = new StringBuilder();
         for (int i = offset; i < number.length(); i++) {
             char ch = number.charAt(i);
-            if (ch >= '0' && ch <= '9') {
+            if (map.isValidDialpadNumericChar(ch)) {
                 s.append(ch);
             }
         }
@@ -459,7 +96,7 @@
      * @return {@literal null} if the number and the query don't match, a valid
      *         SmartDialMatchPosition with the matching positions otherwise
      */
-    public static SmartDialMatchPosition matchesNumber(String phoneNumber, String query,
+    public SmartDialMatchPosition matchesNumber(String phoneNumber, String query,
             boolean matchNanp) {
         // Try matching the number as is
         SmartDialMatchPosition matchPos = matchesNumberWithOffset(phoneNumber, query, 0);
@@ -472,7 +109,8 @@
             }
             if (matchPos == null && matchNanp) {
                 // Try matching NANP numbers
-                final int[] offsets = SmartDialTrie.getOffsetForNANPNumbers(phoneNumber);
+                final int[] offsets = SmartDialTrie.getOffsetForNANPNumbers(phoneNumber,
+                        mMap);
                 for (int i = 0; i < offsets.length; i++) {
                     matchPos = matchesNumberWithOffset(phoneNumber, query, offsets[i]);
                     if (matchPos != null) break;
@@ -492,7 +130,7 @@
      * @return {@literal null} if the number and the query don't match, a valid
      *         SmartDialMatchPosition with the matching positions otherwise
      */
-    private static SmartDialMatchPosition matchesNumberWithOffset(String phoneNumber, String query,
+    private SmartDialMatchPosition matchesNumberWithOffset(String phoneNumber, String query,
             int offset) {
         if (TextUtils.isEmpty(phoneNumber) || TextUtils.isEmpty(query)) {
             return null;
@@ -504,7 +142,7 @@
                 break;
             }
             char ch = phoneNumber.charAt(i);
-            if (ch >= '0' && ch <= '9') {
+            if (mMap.isValidDialpadNumericChar(ch)) {
                 if (ch != query.charAt(queryAt)) {
                     return null;
                 }
@@ -592,11 +230,10 @@
         while (nameStart < nameLength && queryStart < queryLength) {
             char ch = displayName.charAt(nameStart);
             // Strip diacritics from accented characters if any
-            ch = remapAccentedChars(ch);
-            if (isLowercaseLatinLetterOrDigit(ch)) {
-                if (ch >= 'a' && ch <= 'z') {
-                    // a starts at index 0. If ch >= '0' && ch <= '9', we don't have to do anything
-                    ch = LATIN_LETTERS_TO_DIGITS[ch - 'a'];
+            ch = mMap.normalizeCharacter(ch);
+            if (mMap.isValidDialpadCharacter(ch)) {
+                if (mMap.isValidDialpadAlphabeticChar(ch)) {
+                    ch = mMap.getDialpadNumericCharacter(ch);
                 }
                 if (ch != query.charAt(queryStart)) {
                     // Failed to match the current character in the query.
@@ -615,11 +252,11 @@
                     // Yo-Yoghurt because the query match would fail on the 3rd character, and
                     // then skip to the end of the "Yoghurt" token.
 
-                    if (queryStart == 0 || isLowercaseLatinLetterOrDigit(remapAccentedChars(
+                    if (queryStart == 0 || mMap.isValidDialpadCharacter(mMap.normalizeCharacter(
                             displayName.charAt(nameStart - 1)))) {
                         // skip to the next token, in the case of 1 or 2.
                         while (nameStart < nameLength &&
-                                isLowercaseLatinLetterOrDigit(remapAccentedChars(
+                                mMap.isValidDialpadCharacter(mMap.normalizeCharacter(
                                         displayName.charAt(nameStart)))) {
                             nameStart++;
                         }
@@ -645,7 +282,7 @@
                         // find the next separator in the query string
                         int j;
                         for (j = nameStart; j < nameLength; j++) {
-                            if (!isLowercaseLatinLetterOrDigit(remapAccentedChars(
+                            if (!mMap.isValidDialpadCharacter(mMap.normalizeCharacter(
                                     displayName.charAt(j)))) {
                                 break;
                             }
@@ -699,13 +336,6 @@
         return false;
     }
 
-    /*
-     * Returns true if the character is a lowercase latin character or digit(i.e. non-separator).
-     */
-    private boolean isLowercaseLatinLetterOrDigit(char ch) {
-        return (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9');
-    }
-
     public boolean matches(String displayName) {
         mMatchPositions.clear();
         return matchesCombination(displayName, mQuery, mMatchPositions);
diff --git a/src/com/android/dialer/dialpad/SmartDialTrie.java b/src/com/android/dialer/dialpad/SmartDialTrie.java
index ab935b7..c62210b 100644
--- a/src/com/android/dialer/dialpad/SmartDialTrie.java
+++ b/src/com/android/dialer/dialpad/SmartDialTrie.java
@@ -66,7 +66,7 @@
 
     final Node mRoot = new Node();
     private int mSize = 0;
-    private final char[] mCharacterMap;
+    private final SmartDialMap mMap;
     private final boolean mFormatNanp;
 
     private static final int LAST_TOKENS_FOR_INITIALS = 2;
@@ -77,7 +77,7 @@
 
     public SmartDialTrie() {
         // Use the latin letter to digit map by default if none provided
-        this(SmartDialNameMatcher.LATIN_LETTERS_TO_DIGITS, false);
+        this(new LatinSmartDialMap(), false);
     }
 
     /**
@@ -88,7 +88,7 @@
      */
     @VisibleForTesting
     public SmartDialTrie(boolean formatNanp) {
-        this(SmartDialNameMatcher.LATIN_LETTERS_TO_DIGITS, formatNanp);
+        this(new LatinSmartDialMap(), formatNanp);
     }
 
     /**
@@ -98,8 +98,8 @@
      * @param formatNanp True if inserted numbers are to be treated as NANP numbers
      * such that numbers are automatically broken up by country prefix and area code.
      */
-    public SmartDialTrie(char[] charMap, boolean formatNanp) {
-        mCharacterMap = charMap;
+    public SmartDialTrie(SmartDialMap map, boolean formatNanp) {
+        mMap = map;
         mFormatNanp = formatNanp;
     }
 
@@ -161,7 +161,7 @@
             if ((code.countryCode.equals("1") || code.offset == 0) && mFormatNanp) {
                 // Special case handling for NANP numbers (1-xxx-xxx-xxxx)
                 final String stripped = SmartDialNameMatcher.normalizeNumber(
-                        contact.phoneNumber, code.offset);
+                        contact.phoneNumber, code.offset, mMap);
                 if (!TextUtils.isEmpty(stripped)) {
                     int trunkPrefixOffset = 0;
                     if (stripped.charAt(0) == '1') {
@@ -211,14 +211,14 @@
      * and an array containing integer offsets for the number (starting after the '1' prefix,
      * and the area code prefix respectively.
      */
-    public static int[] getOffsetForNANPNumbers(String number) {
+    public static int[] getOffsetForNANPNumbers(String number, SmartDialMap map) {
         int validDigits = 0;
         boolean hasPrefix = false;
         int firstOffset = 0; // Tracks the location of the first digit after the '1' prefix
         int secondOffset = 0; // Tracks the location of the first digit after the area code
         for (int i = 0; i < number.length(); i++) {
             final char ch = number.charAt(i);
-            if (ch >= '0' && ch <= '9') {
+            if (map.isValidDialpadNumericChar(ch)) {
                 if (validDigits == 0) {
                     // Check the first digit to see if it is 1
                     if (ch == '1') {
@@ -264,19 +264,13 @@
         int tokenCount = 0;
         boolean atSeparator = true;
         for (int i = 0; i < length; i++) {
-            c = SmartDialNameMatcher.remapAccentedChars(chars.charAt(i));
-            if (c >= 'a' && c <= 'z' || c >= '0' && c <= '9') {
+            c = mMap.normalizeCharacter(chars.charAt(i));
+            if (mMap.isValidDialpadCharacter(c)) {
                 if (atSeparator) {
                     tokenCount++;
                 }
                 atSeparator = false;
-                if (c <= '9') {
-                    // 0-9
-                    result[i] = (byte) (c - '0');
-                } else {
-                    // a-z
-                    result[i] = (byte) (mCharacterMap[c - 'a'] - '0');
-                }
+                result[i] = mMap.getDialpadIndex(c);
             } else {
                 // Found the last character of the current token
                 if (!atSeparator) {
@@ -310,7 +304,7 @@
         char ch;
         for (int i = offSet; i < length; i++) {
             ch = phoneNumber.charAt(i);
-            if (ch >= '0' && ch <= '9') {
+            if (mMap.isValidDialpadNumericChar(ch)) {
                 current = current.getChild(ch, true);
             }
         }
diff --git a/tests/src/com/android/dialer/dialpad/SmartDialNameMatcherTest.java b/tests/src/com/android/dialer/dialpad/SmartDialNameMatcherTest.java
index eb6f050..47edaf3 100644
--- a/tests/src/com/android/dialer/dialpad/SmartDialNameMatcherTest.java
+++ b/tests/src/com/android/dialer/dialpad/SmartDialNameMatcherTest.java
@@ -236,7 +236,8 @@
 
     private void checkMatchesNumber(String number, String query, boolean expectedMatches,
             boolean matchNanp, int matchStart, int matchEnd) {
-        final SmartDialMatchPosition pos = SmartDialNameMatcher.matchesNumber(number, query,
+        final SmartDialNameMatcher matcher = new SmartDialNameMatcher(query);
+        final SmartDialMatchPosition pos = matcher.matchesNumber(number, query,
                 matchNanp);
         assertEquals(expectedMatches, pos != null);
         if (expectedMatches) {
