Merge "Cache UserHistoryDictionary for each language" into jb-dev
diff --git a/java/res/values-am/strings.xml b/java/res/values-am/strings.xml
index fc0bec3..d70c05d 100644
--- a/java/res/values-am/strings.xml
+++ b/java/res/values-am/strings.xml
@@ -93,8 +93,7 @@
     <string name="spoken_description_mic" msgid="615536748882611950">"የድምፅ ግቤ ት"</string>
     <string name="spoken_description_smiley" msgid="2256309826200113918">"የፈገግታ ፊት"</string>
     <string name="spoken_description_return" msgid="8178083177238315647">"ተመለስ"</string>
-    <!-- no translation found for spoken_description_search (1247236163755920808) -->
-    <skip />
+    <string name="spoken_description_search" msgid="1247236163755920808">"ፍለጋ"</string>
     <string name="spoken_description_dot" msgid="40711082435231673">"ነጥብ"</string>
     <string name="spoken_description_shiftmode_on" msgid="5700440798609574589">"ቅያር ቁልፍ ነቅቷል"</string>
     <string name="spoken_description_shiftmode_locked" msgid="593175803181701830">"አቢያት ማድረጊያ ነቅቷል"</string>
diff --git a/java/res/values-ar/strings.xml b/java/res/values-ar/strings.xml
index 9b1b620..5678c40 100644
--- a/java/res/values-ar/strings.xml
+++ b/java/res/values-ar/strings.xml
@@ -93,8 +93,7 @@
     <string name="spoken_description_mic" msgid="615536748882611950">"إدخال صوتي"</string>
     <string name="spoken_description_smiley" msgid="2256309826200113918">"وجه مبتسم"</string>
     <string name="spoken_description_return" msgid="8178083177238315647">"رجوع"</string>
-    <!-- no translation found for spoken_description_search (1247236163755920808) -->
-    <skip />
+    <string name="spoken_description_search" msgid="1247236163755920808">"بحث"</string>
     <string name="spoken_description_dot" msgid="40711082435231673">"نقطة"</string>
     <string name="spoken_description_shiftmode_on" msgid="5700440798609574589">"تم تمكين Shift"</string>
     <string name="spoken_description_shiftmode_locked" msgid="593175803181701830">"تم تمكين Caps lock"</string>
diff --git a/java/res/values-da/strings.xml b/java/res/values-da/strings.xml
index fa8d804..50b0b0a 100644
--- a/java/res/values-da/strings.xml
+++ b/java/res/values-da/strings.xml
@@ -93,8 +93,7 @@
     <string name="spoken_description_mic" msgid="615536748882611950">"Stemmeinput"</string>
     <string name="spoken_description_smiley" msgid="2256309826200113918">"Smiley"</string>
     <string name="spoken_description_return" msgid="8178083177238315647">"Tilbage"</string>
-    <!-- no translation found for spoken_description_search (1247236163755920808) -->
-    <skip />
+    <string name="spoken_description_search" msgid="1247236163755920808">"Søg"</string>
     <string name="spoken_description_dot" msgid="40711082435231673">"Punktum"</string>
     <string name="spoken_description_shiftmode_on" msgid="5700440798609574589">"Skift er aktiveret"</string>
     <string name="spoken_description_shiftmode_locked" msgid="593175803181701830">"Caps lock er aktiveret"</string>
diff --git a/java/res/values-de/strings.xml b/java/res/values-de/strings.xml
index 2c3cac7..216aac5 100644
--- a/java/res/values-de/strings.xml
+++ b/java/res/values-de/strings.xml
@@ -93,8 +93,7 @@
     <string name="spoken_description_mic" msgid="615536748882611950">"Spracheingabe"</string>
     <string name="spoken_description_smiley" msgid="2256309826200113918">"Smiley"</string>
     <string name="spoken_description_return" msgid="8178083177238315647">"Eingabe"</string>
-    <!-- no translation found for spoken_description_search (1247236163755920808) -->
-    <skip />
+    <string name="spoken_description_search" msgid="1247236163755920808">"Suchen"</string>
     <string name="spoken_description_dot" msgid="40711082435231673">"Aufzählungspunkt"</string>
     <string name="spoken_description_shiftmode_on" msgid="5700440798609574589">"Umschalttaste aktiviert"</string>
     <string name="spoken_description_shiftmode_locked" msgid="593175803181701830">"Feststelltaste aktiviert"</string>
diff --git a/java/res/values-el/strings.xml b/java/res/values-el/strings.xml
index 356f9d2..486346a 100644
--- a/java/res/values-el/strings.xml
+++ b/java/res/values-el/strings.xml
@@ -93,8 +93,7 @@
     <string name="spoken_description_mic" msgid="615536748882611950">"Μικρόφωνο"</string>
     <string name="spoken_description_smiley" msgid="2256309826200113918">"Smiley"</string>
     <string name="spoken_description_return" msgid="8178083177238315647">"Πλήκτρο Return"</string>
-    <!-- no translation found for spoken_description_search (1247236163755920808) -->
-    <skip />
+    <string name="spoken_description_search" msgid="1247236163755920808">"Αναζήτηση"</string>
     <string name="spoken_description_dot" msgid="40711082435231673">"Κουκκίδα"</string>
     <string name="spoken_description_shiftmode_on" msgid="5700440798609574589">"Το Shift ενεργοποιημένο"</string>
     <string name="spoken_description_shiftmode_locked" msgid="593175803181701830">"Το Caps lock είναι ενεργοποιημένο"</string>
diff --git a/java/res/values-en-rGB/strings.xml b/java/res/values-en-rGB/strings.xml
index 746cb44..7639107 100644
--- a/java/res/values-en-rGB/strings.xml
+++ b/java/res/values-en-rGB/strings.xml
@@ -93,8 +93,7 @@
     <string name="spoken_description_mic" msgid="615536748882611950">"Voice input"</string>
     <string name="spoken_description_smiley" msgid="2256309826200113918">"Smiley face"</string>
     <string name="spoken_description_return" msgid="8178083177238315647">"Return"</string>
-    <!-- no translation found for spoken_description_search (1247236163755920808) -->
-    <skip />
+    <string name="spoken_description_search" msgid="1247236163755920808">"Search"</string>
     <string name="spoken_description_dot" msgid="40711082435231673">"Dot"</string>
     <string name="spoken_description_shiftmode_on" msgid="5700440798609574589">"Shift enabled"</string>
     <string name="spoken_description_shiftmode_locked" msgid="593175803181701830">"Caps lock enabled"</string>
diff --git a/java/res/values-es/strings.xml b/java/res/values-es/strings.xml
index 43260b7..bcc327f 100644
--- a/java/res/values-es/strings.xml
+++ b/java/res/values-es/strings.xml
@@ -23,7 +23,7 @@
     <string name="english_ime_name" msgid="7252517407088836577">"Teclado de Android"</string>
     <string name="aosp_android_keyboard_ime_name" msgid="7877134937939182296">"Teclado Android (AOSP)"</string>
     <string name="english_ime_settings" msgid="6661589557206947774">"Ajustes del teclado de Android"</string>
-    <string name="english_ime_input_options" msgid="3909945612939668554">"Opciones introducción texto"</string>
+    <string name="english_ime_input_options" msgid="3909945612939668554">"Opciones entrada texto"</string>
     <string name="spell_checker_service_name" msgid="7338064335159755926">"Corrector de Android"</string>
     <string name="aosp_spell_checker_service_name" msgid="6985142605330377819">"Corrector de Android (AOSP)"</string>
     <string name="android_spell_checker_settings" msgid="5822324635435443689">"Ajustes del corrector ortográfico"</string>
@@ -37,7 +37,7 @@
     <string name="misc_category" msgid="6894192814868233453">"Otras opciones"</string>
     <string name="advanced_settings" msgid="362895144495591463">"Ajustes avanzados"</string>
     <string name="advanced_settings_summary" msgid="4487980456152830271">"Opciones para expertos"</string>
-    <string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Otros métodos de introducción"</string>
+    <string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Otros métodos de entrada"</string>
     <string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"La tecla de cambio de idioma sirve también para otros métodos"</string>
     <string name="suppress_language_switch_key" msgid="8003788410354806368">"Quitar tecla de idioma"</string>
     <string name="key_preview_popup_dismiss_delay" msgid="6213164897443068248">"Retraso al ampliar tecla"</string>
@@ -110,13 +110,13 @@
     <string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Micrófono en teclado principal"</string>
     <string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Micrófono en teclado de símbolos"</string>
     <string name="voice_input_modes_summary_off" msgid="63875609591897607">"Entrada de voz inhabilitada"</string>
-    <string name="configure_input_method" msgid="373356270290742459">"Configurar métodos de introducción"</string>
+    <string name="configure_input_method" msgid="373356270290742459">"Configurar métodos de entrada"</string>
     <string name="language_selection_title" msgid="1651299598555326750">"Idiomas"</string>
     <string name="select_language" msgid="3693815588777926848">"Idiomas de entrada"</string>
     <string name="hint_add_to_dictionary" msgid="573678656946085380">"Toca otra vez para guardar."</string>
     <string name="has_dictionary" msgid="6071847973466625007">"Hay un diccionario disponible"</string>
     <string name="prefs_enable_log" msgid="6620424505072963557">"Habilitar comentarios de usuarios"</string>
-    <string name="prefs_description_log" msgid="5827825607258246003">"Ayuda a mejorar este editor de método de introducción de texto enviando estadísticas de uso e informes de error a Google."</string>
+    <string name="prefs_description_log" msgid="5827825607258246003">"Ayuda a mejorar este editor de método de entrada de texto enviando estadísticas de uso e informes de error a Google."</string>
     <string name="keyboard_layout" msgid="8451164783510487501">"Tema de teclado"</string>
     <string name="subtype_en_GB" msgid="88170601942311355">"inglés (Reino Unido)"</string>
     <string name="subtype_en_US" msgid="6160452336634534239">"inglés (EE.UU.)"</string>
diff --git a/java/res/values-fr/strings.xml b/java/res/values-fr/strings.xml
index 4bf0e9e..285d222 100644
--- a/java/res/values-fr/strings.xml
+++ b/java/res/values-fr/strings.xml
@@ -93,8 +93,7 @@
     <string name="spoken_description_mic" msgid="615536748882611950">"Saisie vocale"</string>
     <string name="spoken_description_smiley" msgid="2256309826200113918">"Émoticône"</string>
     <string name="spoken_description_return" msgid="8178083177238315647">"Entrée"</string>
-    <!-- no translation found for spoken_description_search (1247236163755920808) -->
-    <skip />
+    <string name="spoken_description_search" msgid="1247236163755920808">"Rechercher"</string>
     <string name="spoken_description_dot" msgid="40711082435231673">"Point"</string>
     <string name="spoken_description_shiftmode_on" msgid="5700440798609574589">"Touche Maj activée"</string>
     <string name="spoken_description_shiftmode_locked" msgid="593175803181701830">"Verrouillage des majuscules activé"</string>
diff --git a/java/res/values-hi/strings.xml b/java/res/values-hi/strings.xml
index 62aef99..2b18084 100644
--- a/java/res/values-hi/strings.xml
+++ b/java/res/values-hi/strings.xml
@@ -93,8 +93,7 @@
     <string name="spoken_description_mic" msgid="615536748882611950">"ध्‍वनि इनपुट"</string>
     <string name="spoken_description_smiley" msgid="2256309826200113918">"मुस्कुराता चेहरा"</string>
     <string name="spoken_description_return" msgid="8178083177238315647">"रिटर्न"</string>
-    <!-- no translation found for spoken_description_search (1247236163755920808) -->
-    <skip />
+    <string name="spoken_description_search" msgid="1247236163755920808">"खोजें"</string>
     <string name="spoken_description_dot" msgid="40711082435231673">"बिंदु"</string>
     <string name="spoken_description_shiftmode_on" msgid="5700440798609574589">"Shift सक्षम किया गया"</string>
     <string name="spoken_description_shiftmode_locked" msgid="593175803181701830">"Caps lock सक्षम किया गया"</string>
diff --git a/java/res/values-hu/strings.xml b/java/res/values-hu/strings.xml
index 2426921..0eac1a9 100644
--- a/java/res/values-hu/strings.xml
+++ b/java/res/values-hu/strings.xml
@@ -93,8 +93,7 @@
     <string name="spoken_description_mic" msgid="615536748882611950">"Hangbevitel"</string>
     <string name="spoken_description_smiley" msgid="2256309826200113918">"Mosolygós arc"</string>
     <string name="spoken_description_return" msgid="8178083177238315647">"Enter"</string>
-    <!-- no translation found for spoken_description_search (1247236163755920808) -->
-    <skip />
+    <string name="spoken_description_search" msgid="1247236163755920808">"Keresés"</string>
     <string name="spoken_description_dot" msgid="40711082435231673">"Pont"</string>
     <string name="spoken_description_shiftmode_on" msgid="5700440798609574589">"Shift bekapcsolva"</string>
     <string name="spoken_description_shiftmode_locked" msgid="593175803181701830">"Caps lock bekapcsolva"</string>
diff --git a/java/res/values-in/strings.xml b/java/res/values-in/strings.xml
index 49fba2e..e0e92b5 100644
--- a/java/res/values-in/strings.xml
+++ b/java/res/values-in/strings.xml
@@ -93,8 +93,7 @@
     <string name="spoken_description_mic" msgid="615536748882611950">"Masukan suara"</string>
     <string name="spoken_description_smiley" msgid="2256309826200113918">"Wajah tersenyum"</string>
     <string name="spoken_description_return" msgid="8178083177238315647">"Kembali"</string>
-    <!-- no translation found for spoken_description_search (1247236163755920808) -->
-    <skip />
+    <string name="spoken_description_search" msgid="1247236163755920808">"Telusuri"</string>
     <string name="spoken_description_dot" msgid="40711082435231673">"Titik"</string>
     <string name="spoken_description_shiftmode_on" msgid="5700440798609574589">"Shift diaktifkan"</string>
     <string name="spoken_description_shiftmode_locked" msgid="593175803181701830">"Caps lock diaktifkan"</string>
diff --git a/java/res/values-it/strings.xml b/java/res/values-it/strings.xml
index cf972a6..1929035 100644
--- a/java/res/values-it/strings.xml
+++ b/java/res/values-it/strings.xml
@@ -93,8 +93,7 @@
     <string name="spoken_description_mic" msgid="615536748882611950">"Input vocale"</string>
     <string name="spoken_description_smiley" msgid="2256309826200113918">"Smile"</string>
     <string name="spoken_description_return" msgid="8178083177238315647">"Invio"</string>
-    <!-- no translation found for spoken_description_search (1247236163755920808) -->
-    <skip />
+    <string name="spoken_description_search" msgid="1247236163755920808">"Ricerca"</string>
     <string name="spoken_description_dot" msgid="40711082435231673">"Pallino"</string>
     <string name="spoken_description_shiftmode_on" msgid="5700440798609574589">"Maiuscolo attivo"</string>
     <string name="spoken_description_shiftmode_locked" msgid="593175803181701830">"Blocco maiuscole attivo"</string>
diff --git a/java/res/values-iw/strings.xml b/java/res/values-iw/strings.xml
index cbc3cfd..323cac1 100644
--- a/java/res/values-iw/strings.xml
+++ b/java/res/values-iw/strings.xml
@@ -93,8 +93,7 @@
     <string name="spoken_description_mic" msgid="615536748882611950">"קלט קולי"</string>
     <string name="spoken_description_smiley" msgid="2256309826200113918">"פרצוף סמיילי"</string>
     <string name="spoken_description_return" msgid="8178083177238315647">"חזור"</string>
-    <!-- no translation found for spoken_description_search (1247236163755920808) -->
-    <skip />
+    <string name="spoken_description_search" msgid="1247236163755920808">"חיפוש"</string>
     <string name="spoken_description_dot" msgid="40711082435231673">"נקודה"</string>
     <string name="spoken_description_shiftmode_on" msgid="5700440798609574589">"Shift מופעל"</string>
     <string name="spoken_description_shiftmode_locked" msgid="593175803181701830">"Caps Lock מופעל"</string>
diff --git a/java/res/values-ko/strings.xml b/java/res/values-ko/strings.xml
index 3040fb0..536f06d 100644
--- a/java/res/values-ko/strings.xml
+++ b/java/res/values-ko/strings.xml
@@ -93,8 +93,7 @@
     <string name="spoken_description_mic" msgid="615536748882611950">"음성 입력"</string>
     <string name="spoken_description_smiley" msgid="2256309826200113918">"웃는 얼굴"</string>
     <string name="spoken_description_return" msgid="8178083177238315647">"리턴 키"</string>
-    <!-- no translation found for spoken_description_search (1247236163755920808) -->
-    <skip />
+    <string name="spoken_description_search" msgid="1247236163755920808">"검색"</string>
     <string name="spoken_description_dot" msgid="40711082435231673">"점"</string>
     <string name="spoken_description_shiftmode_on" msgid="5700440798609574589">"Shift 사용"</string>
     <string name="spoken_description_shiftmode_locked" msgid="593175803181701830">"Caps Lock 사용"</string>
diff --git a/java/res/values-lv/strings.xml b/java/res/values-lv/strings.xml
index 7f68314..93727a8 100644
--- a/java/res/values-lv/strings.xml
+++ b/java/res/values-lv/strings.xml
@@ -93,8 +93,7 @@
     <string name="spoken_description_mic" msgid="615536748882611950">"Balss ievade"</string>
     <string name="spoken_description_smiley" msgid="2256309826200113918">"Smaidoša seja"</string>
     <string name="spoken_description_return" msgid="8178083177238315647">"Ievadīšanas taustiņš"</string>
-    <!-- no translation found for spoken_description_search (1247236163755920808) -->
-    <skip />
+    <string name="spoken_description_search" msgid="1247236163755920808">"Meklēt"</string>
     <string name="spoken_description_dot" msgid="40711082435231673">"Punkts"</string>
     <string name="spoken_description_shiftmode_on" msgid="5700440798609574589">"Pārslēgšanas režīms iespējots"</string>
     <string name="spoken_description_shiftmode_locked" msgid="593175803181701830">"Burtslēgs iespējots"</string>
diff --git a/java/res/values-nl/strings.xml b/java/res/values-nl/strings.xml
index 7912cd4..a7d499b 100644
--- a/java/res/values-nl/strings.xml
+++ b/java/res/values-nl/strings.xml
@@ -93,8 +93,7 @@
     <string name="spoken_description_mic" msgid="615536748882611950">"Spraakinvoer"</string>
     <string name="spoken_description_smiley" msgid="2256309826200113918">"Smiley-gezichtje"</string>
     <string name="spoken_description_return" msgid="8178083177238315647">"Return"</string>
-    <!-- no translation found for spoken_description_search (1247236163755920808) -->
-    <skip />
+    <string name="spoken_description_search" msgid="1247236163755920808">"Zoeken"</string>
     <string name="spoken_description_dot" msgid="40711082435231673">"Stip"</string>
     <string name="spoken_description_shiftmode_on" msgid="5700440798609574589">"Shift ingeschakeld"</string>
     <string name="spoken_description_shiftmode_locked" msgid="593175803181701830">"Caps Lock ingeschakeld"</string>
diff --git a/java/res/values-pt-rPT/strings.xml b/java/res/values-pt-rPT/strings.xml
index 2926af5..ccb042e 100644
--- a/java/res/values-pt-rPT/strings.xml
+++ b/java/res/values-pt-rPT/strings.xml
@@ -93,8 +93,7 @@
     <string name="spoken_description_mic" msgid="615536748882611950">"Entrada de voz"</string>
     <string name="spoken_description_smiley" msgid="2256309826200113918">"Cara sorridente"</string>
     <string name="spoken_description_return" msgid="8178083177238315647">"Enter"</string>
-    <!-- no translation found for spoken_description_search (1247236163755920808) -->
-    <skip />
+    <string name="spoken_description_search" msgid="1247236163755920808">"Pesquisar"</string>
     <string name="spoken_description_dot" msgid="40711082435231673">"Ponto"</string>
     <string name="spoken_description_shiftmode_on" msgid="5700440798609574589">"Shift ativado"</string>
     <string name="spoken_description_shiftmode_locked" msgid="593175803181701830">"Caps lock ativado"</string>
diff --git a/java/res/values-sv/strings.xml b/java/res/values-sv/strings.xml
index de5c174..75e80d4 100644
--- a/java/res/values-sv/strings.xml
+++ b/java/res/values-sv/strings.xml
@@ -93,8 +93,7 @@
     <string name="spoken_description_mic" msgid="615536748882611950">"Röstinmatning"</string>
     <string name="spoken_description_smiley" msgid="2256309826200113918">"Uttryckssymbol"</string>
     <string name="spoken_description_return" msgid="8178083177238315647">"Retur"</string>
-    <!-- no translation found for spoken_description_search (1247236163755920808) -->
-    <skip />
+    <string name="spoken_description_search" msgid="1247236163755920808">"Sök"</string>
     <string name="spoken_description_dot" msgid="40711082435231673">"Punkt"</string>
     <string name="spoken_description_shiftmode_on" msgid="5700440798609574589">"Skift är aktiverat"</string>
     <string name="spoken_description_shiftmode_locked" msgid="593175803181701830">"Caps Lock är aktiverat"</string>
diff --git a/java/res/values-sw/strings.xml b/java/res/values-sw/strings.xml
index 52d81d7..82c867e 100644
--- a/java/res/values-sw/strings.xml
+++ b/java/res/values-sw/strings.xml
@@ -93,8 +93,7 @@
     <string name="spoken_description_mic" msgid="615536748882611950">"Uingizaji sauti"</string>
     <string name="spoken_description_smiley" msgid="2256309826200113918">"Uso wenye tabasamu"</string>
     <string name="spoken_description_return" msgid="8178083177238315647">"Rudi"</string>
-    <!-- no translation found for spoken_description_search (1247236163755920808) -->
-    <skip />
+    <string name="spoken_description_search" msgid="1247236163755920808">"Tafuta"</string>
     <string name="spoken_description_dot" msgid="40711082435231673">"Nukta"</string>
     <string name="spoken_description_shiftmode_on" msgid="5700440798609574589">"Shift imewezeshwa"</string>
     <string name="spoken_description_shiftmode_locked" msgid="593175803181701830">"Caps lock imewezeshwa"</string>
diff --git a/java/res/values-th/strings.xml b/java/res/values-th/strings.xml
index 5c4aeba..da20d66 100644
--- a/java/res/values-th/strings.xml
+++ b/java/res/values-th/strings.xml
@@ -93,8 +93,7 @@
     <string name="spoken_description_mic" msgid="615536748882611950">"การป้อนข้อมูลด้วยเสียง"</string>
     <string name="spoken_description_smiley" msgid="2256309826200113918">"หน้ายิ้ม"</string>
     <string name="spoken_description_return" msgid="8178083177238315647">"Return"</string>
-    <!-- no translation found for spoken_description_search (1247236163755920808) -->
-    <skip />
+    <string name="spoken_description_search" msgid="1247236163755920808">"ค้นหา"</string>
     <string name="spoken_description_dot" msgid="40711082435231673">"เครื่องหมายจุด"</string>
     <string name="spoken_description_shiftmode_on" msgid="5700440798609574589">"เปิดใช้งาน Shift แล้ว"</string>
     <string name="spoken_description_shiftmode_locked" msgid="593175803181701830">"เปิดใช้งาน Caps Lock แล้ว"</string>
diff --git a/java/res/values-zu/strings.xml b/java/res/values-zu/strings.xml
index af4a02e..d3f80e4 100644
--- a/java/res/values-zu/strings.xml
+++ b/java/res/values-zu/strings.xml
@@ -93,8 +93,7 @@
     <string name="spoken_description_mic" msgid="615536748882611950">"Okungenayo kwezwi"</string>
     <string name="spoken_description_smiley" msgid="2256309826200113918">"Ubuso-obumomothekayo"</string>
     <string name="spoken_description_return" msgid="8178083177238315647">"Buyisela"</string>
-    <!-- no translation found for spoken_description_search (1247236163755920808) -->
-    <skip />
+    <string name="spoken_description_search" msgid="1247236163755920808">"Sesha"</string>
     <string name="spoken_description_dot" msgid="40711082435231673">"Icashazi"</string>
     <string name="spoken_description_shiftmode_on" msgid="5700440798609574589">"U-Shift uvunyelwe"</string>
     <string name="spoken_description_shiftmode_locked" msgid="593175803181701830">"Ofeleba bavunyelwe"</string>
diff --git a/java/res/xml-sw600dp/key_apostrophe.xml b/java/res/xml-sw600dp/key_apostrophe.xml
index 7da4b62..0c838db 100644
--- a/java/res/xml-sw600dp/key_apostrophe.xml
+++ b/java/res/xml-sw600dp/key_apostrophe.xml
@@ -23,20 +23,11 @@
 >
     <switch>
         <case
-            latin:mode="email"
+            latin:mode="email|url"
         >
             <Key
                 latin:keyLabel="-" />
         </case>
-        <case
-            latin:mode="url"
-        >
-            <Key
-                latin:keyLabel="/"
-                latin:keyHintLabel=":"
-                latin:moreKeys=":"
-                latin:keyStyle="hasShiftedLetterHintStyle" />
-        </case>
         <default>
             <Key
                 latin:keyLabel="!text/keylabel_for_apostrophe"
diff --git a/java/res/xml-sw600dp/key_dash.xml b/java/res/xml-sw600dp/key_dash.xml
index f7e0b34..8f91eff 100644
--- a/java/res/xml-sw600dp/key_dash.xml
+++ b/java/res/xml-sw600dp/key_dash.xml
@@ -23,7 +23,7 @@
 >
     <switch>
         <case
-            latin:mode="email"
+            latin:mode="email|url"
         >
             <Key
                 latin:keyLabel="_" />
diff --git a/java/res/xml-sw600dp/key_f1.xml b/java/res/xml-sw600dp/key_f1.xml
new file mode 100644
index 0000000..77afe4e
--- /dev/null
+++ b/java/res/xml-sw600dp/key_f1.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, 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.
+*/
+-->
+
+<merge
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+    <switch>
+        <case
+            latin:keyboardLayoutSetElement="symbols"
+            latin:mode="url"
+        >
+            <Key
+                latin:keyLabel=":" />
+        </case>
+        <case
+            latin:keyboardLayoutSetElement="symbols"
+        >
+            <Key
+                latin:keyLabel="\@" />
+        </case>
+        <!-- keyboardLayoutSetElement != "symbols" -->
+        <case
+            latin:mode="email"
+        >
+            <Key
+                latin:keyLabel="\@" />
+        </case>
+        <case
+            latin:mode="url"
+        >
+            <Key
+                latin:keyLabel="/"
+                latin:keyHintLabel=":"
+                latin:moreKeys=":"
+                latin:keyStyle="hasShiftedLetterHintStyle" />
+        </case>
+        <default>
+            <Key
+                latin:keyLabel="/"
+                latin:keyHintLabel="\@"
+                latin:moreKeys="\@"
+                latin:keyStyle="hasShiftedLetterHintStyle" />
+        </default>
+    </switch>
+</merge>
diff --git a/java/res/xml-sw600dp/key_f2.xml b/java/res/xml-sw600dp/key_f2.xml
new file mode 100644
index 0000000..ca3b30b
--- /dev/null
+++ b/java/res/xml-sw600dp/key_f2.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, 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.
+*/
+-->
+
+<merge
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+    <switch>
+        <case
+            latin:mode="email|url"
+        >
+            <Key
+                latin:keyStyle="comKeyStyle" />
+        </case>
+        <case
+            latin:imeAction="actionSearch"
+        >
+            <Key
+                latin:keyLabel=":"
+                latin:keyHintLabel="+"
+                latin:moreKeys="+"
+                latin:keyStyle="hasShiftedLetterHintStyle" />
+        </case>
+        <default>
+            <Key
+                latin:keyStyle="smileyKeyStyle" />
+        </default>
+    </switch>
+</merge>
diff --git a/java/res/xml-sw600dp/key_question_exclamation.xml b/java/res/xml-sw600dp/key_question_exclamation.xml
index f1495de..860a0be 100644
--- a/java/res/xml-sw600dp/key_question_exclamation.xml
+++ b/java/res/xml-sw600dp/key_question_exclamation.xml
@@ -23,20 +23,11 @@
 >
     <switch>
         <case
-            latin:mode="email"
+            latin:mode="email|url"
         >
             <Key
                 latin:keyLabel="-" />
         </case>
-        <case
-            latin:mode="url"
-        >
-            <Key
-                latin:keyLabel="/"
-                latin:keyHintLabel=":"
-                latin:moreKeys=":"
-                latin:keyStyle="hasShiftedLetterHintStyle" />
-        </case>
         <default>
             <Key
                 latin:keyLabel="\?"
diff --git a/java/res/xml-sw600dp/keys_f1f2.xml b/java/res/xml-sw600dp/keys_f1f2.xml
deleted file mode 100644
index 721bfc7..0000000
--- a/java/res/xml-sw600dp/keys_f1f2.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2012, 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.
-*/
--->
-
-<merge
-    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
->
-    <switch>
-        <case
-            latin:mode="url"
-        >
-            <Key
-                latin:keyStyle="comKeyStyle"
-                latin:keyWidth="18.0%p" />
-        </case>
-        <default>
-            <switch>
-                <case
-                    latin:mode="email"
-                >
-                    <Key
-                        latin:keyStyle="comKeyStyle" />
-                </case>
-                <case
-                    latin:imeAction="actionSearch"
-                >
-                    <Key
-                        latin:keyLabel=":"
-                        latin:keyHintLabel="+"
-                        latin:moreKeys="+"
-                        latin:keyStyle="hasShiftedLetterHintStyle" />
-                </case>
-                <default>
-                    <Key
-                        latin:keyStyle="smileyKeyStyle" />
-                </default>
-            </switch>
-            <switch>
-                <case
-                    latin:mode="email"
-                >
-                    <Key
-                        latin:keyLabel="\@" />
-                </case>
-                <default>
-                    <Key
-                        latin:keyLabel="/"
-                        latin:keyHintLabel="\@"
-                        latin:moreKeys="\@"
-                        latin:keyStyle="hasShiftedLetterHintStyle" />
-                </default>
-            </switch>
-        </default>
-    </switch>
-</merge>
diff --git a/java/res/xml-sw600dp/row_dvorak4.xml b/java/res/xml-sw600dp/row_dvorak4.xml
index ffc3427..47cee45 100644
--- a/java/res/xml-sw600dp/row_dvorak4.xml
+++ b/java/res/xml-sw600dp/row_dvorak4.xml
@@ -23,22 +23,24 @@
 >
     <Row
         latin:keyWidth="9.0%p"
+        backgroundType="functional"
     >
         <Key
             latin:keyStyle="toSymbolKeyStyle"
             latin:keyWidth="10.0%p" />
         <include
-            latin:keyboardLayout="@xml/keys_f1f2" />
+            latin:keyboardLayout="@xml/key_shortcut" />
+        <include
+            latin:keyboardLayout="@xml/key_f1" />
         <include
             latin:keyXPos="28.0%p"
-            latin:keyboardLayout="@xml/key_space" />
+            latin:keyboardLayout="@xml/key_space"
+            latin:backgroundType="normal" />
         <include
             latin:keyboardLayout="@xml/key_question_exclamation" />
         <include
             latin:keyboardLayout="@xml/key_dash" />
         <include
-            latin:keyXPos="-9.0%p"
-            latin:keyWidth="fillRight"
-            latin:keyboardLayout="@xml/key_shortcut" />
+            latin:keyboardLayout="@xml/key_f2" />
     </Row>
 </merge>
diff --git a/java/res/xml-sw600dp/row_hebrew4.xml b/java/res/xml-sw600dp/row_hebrew4.xml
index 114a5cc..f429f97 100644
--- a/java/res/xml-sw600dp/row_hebrew4.xml
+++ b/java/res/xml-sw600dp/row_hebrew4.xml
@@ -23,20 +23,22 @@
 >
     <Row
         latin:keyWidth="9.0%p"
+        latin:backgroundType="functional"
     >
         <Key
             latin:keyStyle="toSymbolKeyStyle"
             latin:keyWidth="10.0%p" />
         <include
-            latin:keyboardLayout="@xml/keys_f1f2" />
+            latin:keyboardLayout="@xml/key_shortcut" />
+        <include
+            latin:keyboardLayout="@xml/key_f1" />
         <include
             latin:keyXPos="28.0%p"
-            latin:keyboardLayout="@xml/key_space" />
+            latin:keyboardLayout="@xml/key_space"
+            latin:backgroundType="normal" />
         <include
             latin:keyboardLayout="@xml/keys_comma_period" />
         <include
-            latin:keyXPos="-9.0%p"
-            latin:keyWidth="fillRight"
-            latin:keyboardLayout="@xml/key_shortcut" />
+            latin:keyboardLayout="@xml/key_f2" />
     </Row>
 </merge>
diff --git a/java/res/xml-sw600dp/row_qwerty4.xml b/java/res/xml-sw600dp/row_qwerty4.xml
index a4ba8a4..fa43363 100644
--- a/java/res/xml-sw600dp/row_qwerty4.xml
+++ b/java/res/xml-sw600dp/row_qwerty4.xml
@@ -23,22 +23,24 @@
 >
     <Row
         latin:keyWidth="9.0%p"
+        latin:backgroundType="functional"
     >
         <Key
             latin:keyStyle="toSymbolKeyStyle"
             latin:keyWidth="10.0%p" />
         <include
-            latin:keyboardLayout="@xml/keys_f1f2" />
+            latin:keyboardLayout="@xml/key_shortcut" />
+        <include
+            latin:keyboardLayout="@xml/key_f1" />
         <include
             latin:keyXPos="28.0%p"
-            latin:keyboardLayout="@xml/key_space" />
+            latin:keyboardLayout="@xml/key_space"
+            latin:backgroundType="normal" />
         <include
             latin:keyboardLayout="@xml/key_apostrophe" />
         <include
             latin:keyboardLayout="@xml/key_dash" />
         <include
-            latin:keyXPos="-9.0%p"
-            latin:keyWidth="fillRight"
-            latin:keyboardLayout="@xml/key_shortcut" />
+            latin:keyboardLayout="@xml/key_f2" />
     </Row>
 </merge>
diff --git a/java/res/xml-sw600dp/row_symbols4.xml b/java/res/xml-sw600dp/row_symbols4.xml
index 20d1a7d..73a5b17 100644
--- a/java/res/xml-sw600dp/row_symbols4.xml
+++ b/java/res/xml-sw600dp/row_symbols4.xml
@@ -23,25 +23,24 @@
 >
     <Row
         latin:keyWidth="9.0%p"
+        latin:backgroundType="functional"
     >
         <Key
             latin:keyStyle="toAlphaKeyStyle"
             latin:keyWidth="10.0%p" />
         <Key
             latin:keyLabel="/" />
-        <Key
-            latin:keyLabel="\@" />
+        <include
+            latin:keyboardLayout="@xml/key_f1" />
         <include
             latin:keyXPos="28.0%p"
-            latin:keyboardLayout="@xml/key_space" />
+            latin:keyboardLayout="@xml/key_space"
+            latin:backgroundType="normal" />
         <Key
             latin:keyLabel="&quot;"
             latin:moreKeys="!text/more_keys_for_tablet_double_quote" />
         <Key
             latin:keyLabel="_" />
-        <include
-            latin:keyXPos="-9.0%p"
-            latin:keyWidth="fillRight"
-            latin:keyboardLayout="@xml/key_shortcut" />
+        <!-- Here is empty space. -->
     </Row>
 </merge>
diff --git a/java/res/xml-sw600dp/row_symbols_shift4.xml b/java/res/xml-sw600dp/row_symbols_shift4.xml
index fd7b370..6f3aac7 100644
--- a/java/res/xml-sw600dp/row_symbols_shift4.xml
+++ b/java/res/xml-sw600dp/row_symbols_shift4.xml
@@ -23,16 +23,16 @@
 >
     <Row
         latin:keyWidth="9.0%p"
+        latin:backgroundType="functional"
     >
         <Key
             latin:keyStyle="toAlphaKeyStyle"
             latin:keyWidth="10.0%p" />
+        <!-- Here is empty space. -->
         <include
             latin:keyXPos="28.0%p"
-            latin:keyboardLayout="@xml/key_space" />
-        <include
-            latin:keyXPos="-9.0%p"
-            latin:keyWidth="fillRight"
-            latin:keyboardLayout="@xml/key_shortcut" />
+            latin:keyboardLayout="@xml/key_space"
+            latin:backgroundType="normal" />
+        <!-- Here is empty space. -->
     </Row>
 </merge>
diff --git a/java/res/xml-sw600dp/rows_number_normal.xml b/java/res/xml-sw600dp/rows_number_normal.xml
index 3954b00..48b3040 100644
--- a/java/res/xml-sw600dp/rows_number_normal.xml
+++ b/java/res/xml-sw600dp/rows_number_normal.xml
@@ -25,15 +25,18 @@
         <Key
             latin:keyLabel="-"
             latin:keyStyle="numKeyStyle"
-            latin:keyWidth="10%p" />
+            latin:keyWidth="10%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyLabel="+"
             latin:keyStyle="numKeyStyle"
-            latin:keyWidth="10%p" />
+            latin:keyWidth="10%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyLabel="."
             latin:keyStyle="numKeyStyle"
-            latin:keyWidth="10%p" />
+            latin:keyWidth="10%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyLabel="1"
             latin:keyStyle="numKeyStyle"
@@ -52,11 +55,13 @@
     <Row>
         <Key
             latin:keyStyle="numStarKeyStyle"
-            latin:keyWidth="10%p" />
+            latin:keyWidth="10%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyLabel="/"
             latin:keyStyle="numKeyStyle"
-            latin:keyWidth="10%p" />
+            latin:keyWidth="10%p"
+            latin:backgroundType="functional" />
         <switch>
             <case
                 latin:mode="time|datetime"
@@ -66,13 +71,15 @@
                     latin:keyLabelFlags="hasPopupHint"
                     latin:moreKeys="!text/more_keys_for_am_pm"
                     latin:keyStyle="numKeyStyle"
-                    latin:keyWidth="10%p" />
+                    latin:keyWidth="10%p"
+                    latin:backgroundType="functional" />
             </case>
             <default>
                 <Key
                     latin:keyLabel=","
                     latin:keyStyle="numKeyStyle"
-                    latin:keyWidth="10%p" />
+                    latin:keyWidth="10%p"
+                    latin:backgroundType="functional" />
             </default>
         </switch>
         <Key
@@ -94,11 +101,13 @@
         <Key
             latin:keyLabel="("
             latin:keyStyle="numKeyStyle"
-            latin:keyWidth="10%p" />
+            latin:keyWidth="10%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyLabel=")"
             latin:keyStyle="numKeyStyle"
-            latin:keyWidth="10%p" />
+            latin:keyWidth="10%p"
+            latin:backgroundType="functional" />
         <switch>
             <case
                 latin:mode="time|datetime"
@@ -106,13 +115,15 @@
                 <Key
                     latin:keyLabel=":"
                     latin:keyStyle="numKeyStyle"
-                    latin:keyWidth="10%p" />
+                    latin:keyWidth="10%p"
+                    latin:backgroundType="functional" />
             </case>
             <default>
                 <Key
                     latin:keyLabel="="
                     latin:keyStyle="numKeyStyle"
-                    latin:keyWidth="10%p" />
+                    latin:keyWidth="10%p"
+                    latin:backgroundType="functional" />
             </default>
         </switch>
         <Key
@@ -131,7 +142,8 @@
     <Row>
         <Key
             latin:keyStyle="spaceKeyStyle"
-            latin:keyWidth="30%p" />
+            latin:keyWidth="30%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyStyle="numStarKeyStyle"
             latin:keyXPos="31%p" />
@@ -141,9 +153,5 @@
         <Key
             latin:keyLabel="#"
             latin:keyStyle="numKeyStyle" />
-        <include
-            latin:keyXPos="-10%p"
-            latin:keyWidth="fillRight"
-            latin:keyboardLayout="@xml/key_shortcut" />
     </Row>
 </merge>
diff --git a/java/res/xml-sw600dp/rows_phone.xml b/java/res/xml-sw600dp/rows_phone.xml
index 113ce1f..dcc4fde 100644
--- a/java/res/xml-sw600dp/rows_phone.xml
+++ b/java/res/xml-sw600dp/rows_phone.xml
@@ -29,14 +29,17 @@
         <Key
             latin:keyLabel="-"
             latin:keyStyle="numKeyStyle"
-            latin:keyWidth="10%p" />
+            latin:keyWidth="10%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyLabel="+"
             latin:keyStyle="numKeyStyle"
-            latin:keyWidth="10%p" />
+            latin:keyWidth="10%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyStyle="numPauseKeyStyle"
-            latin:keyWidth="10%p" />
+            latin:keyWidth="10%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyStyle="num1KeyStyle"
             latin:keyXPos="31%p" />
@@ -53,14 +56,17 @@
         <Key
             latin:keyLabel=","
             latin:keyStyle="numKeyStyle"
-            latin:keyWidth="10%p" />
+            latin:keyWidth="10%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyLabel="."
             latin:keyStyle="numKeyStyle"
-            latin:keyWidth="10%p" />
+            latin:keyWidth="10%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyStyle="numWaitKeyStyle"
-            latin:keyWidth="10%p" />
+            latin:keyWidth="10%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyStyle="num4KeyStyle"
             latin:keyXPos="31%p" />
@@ -77,15 +83,18 @@
         <Key
             latin:keyLabel="("
             latin:keyStyle="numKeyStyle"
-            latin:keyWidth="10%p" />
+            latin:keyWidth="10%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyLabel=")"
             latin:keyStyle="numKeyStyle"
-            latin:keyWidth="10%p" />
+            latin:keyWidth="10%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyLabel="N"
             latin:keyStyle="numKeyStyle"
-            latin:keyWidth="10%p" />
+            latin:keyWidth="10%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyStyle="num7KeyStyle"
             latin:keyXPos="31%p" />
@@ -99,7 +108,8 @@
     <Row>
         <Key
             latin:keyStyle="spaceKeyStyle"
-            latin:keyWidth="30%p" />
+            latin:keyWidth="30%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyStyle="numStarKeyStyle"
             latin:keyXPos="31%p" />
@@ -108,9 +118,5 @@
         <Key
             latin:keyLabel="#"
             latin:keyStyle="numKeyStyle" />
-        <include
-            latin:keyXPos="-10%p"
-            latin:keyWidth="fillRight"
-            latin:keyboardLayout="@xml/key_shortcut" />
     </Row>
 </merge>
diff --git a/java/res/xml-sw768dp/key_settings.xml b/java/res/xml-sw768dp/key_settings.xml
index 0359a99..0d3bb59 100644
--- a/java/res/xml-sw768dp/key_settings.xml
+++ b/java/res/xml-sw768dp/key_settings.xml
@@ -32,4 +32,4 @@
             <Spacer />
         </default>
     </switch>
- </merge>
+</merge>
diff --git a/java/res/xml-sw768dp/key_shortcut.xml b/java/res/xml-sw768dp/key_shortcut.xml
index 9052705..2d09ebb 100644
--- a/java/res/xml-sw768dp/key_shortcut.xml
+++ b/java/res/xml-sw768dp/key_shortcut.xml
@@ -28,5 +28,9 @@
             <Key
                 latin:keyStyle="shortcutKeyStyle" />
         </case>
+        <default>
+            <!-- The empty space instead of shortcut key. -->
+            <Spacer />
+        </default>
     </switch>
 </merge>
diff --git a/java/res/xml-sw768dp/key_styles_common.xml b/java/res/xml-sw768dp/key_styles_common.xml
index f2fb90b..40082ac 100644
--- a/java/res/xml-sw768dp/key_styles_common.xml
+++ b/java/res/xml-sw768dp/key_styles_common.xml
@@ -74,12 +74,6 @@
     <include
         latin:keyboardLayout="@xml/key_styles_enter" />
     <key-style
-        latin:styleName="defaultActionKeyStyle"
-        latin:code="!code/key_action_enter"
-        latin:keyIcon="!icon/undefined"
-        latin:backgroundType="functional"
-        latin:parentStyle="defaultEnterKeyStyle" />
-    <key-style
         latin:styleName="spaceKeyStyle"
         latin:code="!code/key_space"
         latin:keyActionFlags="noKeyPreview" />
diff --git a/java/res/xml-sw768dp/keys_f1f2.xml b/java/res/xml-sw768dp/keys_f1f2.xml
deleted file mode 100644
index 5697035..0000000
--- a/java/res/xml-sw768dp/keys_f1f2.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2012, 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.
-*/
--->
-
-<merge
-    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
->
-    <switch>
-        <case
-            latin:mode="url"
-        >
-            <Key
-                latin:keyStyle="comKeyStyle"
-                latin:keyWidth="16.084%p" />
-        </case>
-        <default>
-            <switch>
-                <case
-                    latin:mode="email"
-                >
-                    <Key
-                        latin:keyStyle="comKeyStyle" />
-                </case>
-                <case
-                    latin:imeAction="actionSearch"
-                >
-                    <Key
-                        latin:keyLabel=":"
-                        latin:keyHintLabel="+"
-                        latin:moreKeys="+"
-                        latin:keyStyle="hasShiftedLetterHintStyle" />
-                </case>
-                <default>
-                    <Key
-                        latin:keyStyle="smileyKeyStyle" />
-                </default>
-            </switch>
-            <switch>
-                <case
-                    latin:mode="email"
-                >
-                    <Key
-                        latin:keyLabel="\@" />
-                </case>
-                <default>
-                    <Key
-                        latin:keyLabel="/"
-                        latin:keyHintLabel="\@"
-                        latin:moreKeys="\@"
-                        latin:keyStyle="hasShiftedLetterHintStyle" />
-                </default>
-            </switch>
-        </default>
-    </switch>
-</merge>
diff --git a/java/res/xml-sw768dp/row_dvorak4.xml b/java/res/xml-sw768dp/row_dvorak4.xml
index ebe517d..0827815 100644
--- a/java/res/xml-sw768dp/row_dvorak4.xml
+++ b/java/res/xml-sw768dp/row_dvorak4.xml
@@ -23,22 +23,24 @@
 >
     <Row
         latin:keyWidth="8.047%p"
+        latin:backgroundType="functional"
     >
         <include
+            latin:keyXPos="5.782%p"
             latin:keyboardLayout="@xml/key_settings" />
         <include
-            latin:keyXPos="13.829%p"
-            latin:keyboardLayout="@xml/keys_f1f2" />
+            latin:keyboardLayout="@xml/key_shortcut" />
+        <include
+            latin:keyboardLayout="@xml/key_f1" />
         <include
             latin:keyXPos="29.923%p"
-            latin:keyboardLayout="@xml/key_space" />
+            latin:keyboardLayout="@xml/key_space"
+            latin:backgroundType="normal" />
         <include
             latin:keyboardLayout="@xml/key_question_exclamation" />
         <include
             latin:keyboardLayout="@xml/key_dash" />
         <include
-            latin:keyXPos="-8.047%p"
-            latin:keyWidth="fillRight"
-            latin:keyboardLayout="@xml/key_shortcut" />
+            latin:keyboardLayout="@xml/key_f2" />
     </Row>
 </merge>
diff --git a/java/res/xml-sw768dp/row_hebrew4.xml b/java/res/xml-sw768dp/row_hebrew4.xml
index 477fd0d..180c564 100644
--- a/java/res/xml-sw768dp/row_hebrew4.xml
+++ b/java/res/xml-sw768dp/row_hebrew4.xml
@@ -23,20 +23,22 @@
 >
     <Row
         latin:keyWidth="8.047%p"
+        latin:backgroundType="functional"
     >
         <include
+            latin:keyXPos="5.782%p"
             latin:keyboardLayout="@xml/key_settings" />
         <include
-            latin:keyXPos="13.829%p"
-            latin:keyboardLayout="@xml/keys_f1f2" />
+            latin:keyboardLayout="@xml/key_shortcut" />
+        <include
+            latin:keyboardLayout="@xml/key_f1" />
         <include
             latin:keyXPos="29.923%p"
-            latin:keyboardLayout="@xml/key_space" />
+            latin:keyboardLayout="@xml/key_space"
+            latin:backgroundType="normal" />
         <include
             latin:keyboardLayout="@xml/keys_comma_period" />
         <include
-            latin:keyXPos="-8.047%p"
-            latin:keyWidth="fillRight"
-            latin:keyboardLayout="@xml/key_shortcut" />
+            latin:keyboardLayout="@xml/key_f2" />
     </Row>
 </merge>
diff --git a/java/res/xml-sw768dp/row_qwerty4.xml b/java/res/xml-sw768dp/row_qwerty4.xml
index 32a6476..92411f5 100644
--- a/java/res/xml-sw768dp/row_qwerty4.xml
+++ b/java/res/xml-sw768dp/row_qwerty4.xml
@@ -23,22 +23,24 @@
 >
     <Row
         latin:keyWidth="8.047%p"
+        latin:backgroundType="functional"
     >
         <include
+            latin:keyXPos="5.782%p"
             latin:keyboardLayout="@xml/key_settings" />
         <include
-            latin:keyXPos="13.829%p"
-            latin:keyboardLayout="@xml/keys_f1f2" />
+            latin:keyboardLayout="@xml/key_shortcut" />
+        <include
+            latin:keyboardLayout="@xml/key_f1" />
         <include
             latin:keyXPos="29.923%p"
-            latin:keyboardLayout="@xml/key_space" />
+            latin:keyboardLayout="@xml/key_space"
+            latin:backgroundType="normal" />
         <include
             latin:keyboardLayout="@xml/key_apostrophe" />
         <include
             latin:keyboardLayout="@xml/key_dash" />
         <include
-            latin:keyXPos="-8.047%p"
-            latin:keyWidth="fillRight"
-            latin:keyboardLayout="@xml/key_shortcut" />
+            latin:keyboardLayout="@xml/key_f2" />
     </Row>
 </merge>
diff --git a/java/res/xml-sw768dp/row_symbols4.xml b/java/res/xml-sw768dp/row_symbols4.xml
index bd85b40..4e1c119 100644
--- a/java/res/xml-sw768dp/row_symbols4.xml
+++ b/java/res/xml-sw768dp/row_symbols4.xml
@@ -23,25 +23,22 @@
 >
     <Row
         latin:keyWidth="8.047%p"
+        latin:backgroundType="functional"
     >
+        <Key
+            latin:keyXPos="13.829%p"
+            latin:keyLabel="/" />
         <include
-            latin:keyboardLayout="@xml/key_settings" />
-        <Key
-            latin:keyLabel="/"
-            latin:keyXPos="13.829%p" />
-        <Key
-            latin:keyLabel="\@" />
+            latin:keyboardLayout="@xml/key_f1" />
         <include
             latin:keyXPos="29.923%p"
-            latin:keyboardLayout="@xml/key_space" />
+            latin:keyboardLayout="@xml/key_space"
+            latin:backgroundType="normal" />
         <Key
             latin:keyLabel="&quot;"
             latin:moreKeys="!text/more_keys_for_tablet_double_quote" />
         <Key
             latin:keyLabel="_" />
-        <include
-            latin:keyXPos="-8.047%p"
-            latin:keyWidth="fillRight"
-            latin:keyboardLayout="@xml/key_shortcut" />
+        <!-- Here is empty space. -->
     </Row>
 </merge>
diff --git a/java/res/xml-sw768dp/row_symbols_shift4.xml b/java/res/xml-sw768dp/row_symbols_shift4.xml
index 82c1d17..561351c 100644
--- a/java/res/xml-sw768dp/row_symbols_shift4.xml
+++ b/java/res/xml-sw768dp/row_symbols_shift4.xml
@@ -23,15 +23,13 @@
 >
     <Row
         latin:keyWidth="8.047%p"
+        latin:backgroundType="functional"
     >
-        <include
-            latin:keyboardLayout="@xml/key_settings" />
+        <!-- Here is empty space. -->
         <include
             latin:keyXPos="29.923%p"
-            latin:keyboardLayout="@xml/key_space" />
-        <include
-            latin:keyXPos="-8.047%p"
-            latin:keyWidth="fillRight"
-            latin:keyboardLayout="@xml/key_shortcut" />
+            latin:keyboardLayout="@xml/key_space"
+            latin:backgroundType="normal" />
+        <!-- Here is empty space. -->
     </Row>
 </merge>
diff --git a/java/res/xml-sw768dp/rows_number_normal.xml b/java/res/xml-sw768dp/rows_number_normal.xml
index 42697ce..84910a8 100644
--- a/java/res/xml-sw768dp/rows_number_normal.xml
+++ b/java/res/xml-sw768dp/rows_number_normal.xml
@@ -30,15 +30,18 @@
             latin:keyLabel="-"
             latin:keyStyle="numKeyStyle"
             latin:keyXPos="13.829%p"
-            latin:keyWidth="8.047%p" />
+            latin:keyWidth="8.047%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyLabel="+"
             latin:keyStyle="numKeyStyle"
-            latin:keyWidth="8.047%p" />
+            latin:keyWidth="8.047%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyLabel="."
             latin:keyStyle="numKeyStyle"
-            latin:keyWidth="8.047%p" />
+            latin:keyWidth="8.047%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyLabel="1"
             latin:keyStyle="numKeyStyle"
@@ -60,11 +63,13 @@
             latin:keyWidth="13.829%p" />
         <Key
             latin:keyStyle="numStarKeyStyle"
-            latin:keyWidth="8.047%p" />
+            latin:keyWidth="8.047%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyLabel="/"
             latin:keyStyle="numKeyStyle"
-            latin:keyWidth="8.047%p" />
+            latin:keyWidth="8.047%p"
+            latin:backgroundType="functional" />
         <switch>
             <case
                 latin:mode="time|datetime"
@@ -74,13 +79,15 @@
                     latin:keyLabelFlags="hasPopupHint"
                     latin:moreKeys="!text/more_keys_for_am_pm"
                     latin:keyStyle="numKeyStyle"
-                    latin:keyWidth="8.047%p" />
+                    latin:keyWidth="8.047%p"
+                    latin:backgroundType="functional" />
             </case>
             <default>
                 <Key
                     latin:keyLabel=","
                     latin:keyStyle="numKeyStyle"
-                    latin:keyWidth="8.047%p" />
+                    latin:keyWidth="8.047%p"
+                    latin:backgroundType="functional" />
             </default>
         </switch>
         <Key
@@ -105,11 +112,13 @@
         <Key
             latin:keyLabel="("
             latin:keyStyle="numKeyStyle"
-            latin:keyWidth="8.047%p" />
+            latin:keyWidth="8.047%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyLabel=")"
             latin:keyStyle="numKeyStyle"
-            latin:keyWidth="8.047%p" />
+            latin:keyWidth="8.047%p"
+            latin:backgroundType="functional" />
         <switch>
             <case
                 latin:mode="time|datetime"
@@ -117,13 +126,15 @@
                 <Key
                     latin:keyLabel=":"
                     latin:keyStyle="numKeyStyle"
-                    latin:keyWidth="8.047%p" />
+                    latin:keyWidth="8.047%p"
+                    latin:backgroundType="functional" />
             </case>
             <default>
                 <Key
                     latin:keyLabel="="
                     latin:keyStyle="numKeyStyle"
-                    latin:keyWidth="8.047%p" />
+                    latin:keyWidth="8.047%p"
+                    latin:backgroundType="functional" />
             </default>
         </switch>
         <Key
@@ -146,7 +157,8 @@
         <Key
             latin:keyStyle="spaceKeyStyle"
             latin:keyXPos="13.829%p"
-            latin:keyWidth="24.140%p" />
+            latin:keyWidth="24.140%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyStyle="numStarKeyStyle"
             latin:keyXPos="43.125%p" />
@@ -156,9 +168,5 @@
         <Key
             latin:keyLabel="#"
             latin:keyStyle="numKeyStyle" />
-        <include
-            latin:keyXPos="-8.047%p"
-            latin:keyWidth="fillRight"
-            latin:keyboardLayout="@xml/key_shortcut" />
     </Row>
 </merge>
diff --git a/java/res/xml-sw768dp/rows_phone.xml b/java/res/xml-sw768dp/rows_phone.xml
index b3b3521..2f718db 100644
--- a/java/res/xml-sw768dp/rows_phone.xml
+++ b/java/res/xml-sw768dp/rows_phone.xml
@@ -34,14 +34,17 @@
             latin:keyLabel="-"
             latin:keyStyle="numKeyStyle"
             latin:keyXPos="13.829%p"
-            latin:keyWidth="8.047%p" />
+            latin:keyWidth="8.047%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyLabel="+"
             latin:keyStyle="numKeyStyle"
-            latin:keyWidth="8.047%p" />
+            latin:keyWidth="8.047%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyStyle="numPauseKeyStyle"
-            latin:keyWidth="8.047%p" />
+            latin:keyWidth="8.047%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyStyle="num1KeyStyle"
             latin:keyXPos="43.125%p" />
@@ -62,14 +65,17 @@
             latin:keyLabel=","
             latin:keyStyle="numKeyStyle"
             latin:keyXPos="13.829%p"
-            latin:keyWidth="8.047%p" />
+            latin:keyWidth="8.047%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyLabel="."
             latin:keyStyle="numKeyStyle"
-            latin:keyWidth="8.047%p" />
+            latin:keyWidth="8.047%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyStyle="numWaitKeyStyle"
-            latin:keyWidth="8.047%p" />
+            latin:keyWidth="8.047%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyStyle="num4KeyStyle"
             latin:keyXPos="43.125%p" />
@@ -89,15 +95,18 @@
         <Key
             latin:keyLabel="("
             latin:keyStyle="numKeyStyle"
-            latin:keyWidth="8.047%p" />
+            latin:keyWidth="8.047%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyLabel=")"
             latin:keyStyle="numKeyStyle"
-            latin:keyWidth="8.047%p" />
+            latin:keyWidth="8.047%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyLabel="N"
             latin:keyStyle="numKeyStyle"
-            latin:keyWidth="8.047%p" />
+            latin:keyWidth="8.047%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyStyle="num7KeyStyle"
             latin:keyXPos="43.125%p" />
@@ -115,7 +124,8 @@
         <Key
             latin:keyStyle="spaceKeyStyle"
             latin:keyXPos="13.829%p"
-            latin:keyWidth="24.140%p" />
+            latin:keyWidth="24.140%p"
+            latin:backgroundType="functional" />
         <Key
             latin:keyStyle="numStarKeyStyle"
             latin:keyXPos="43.125%p" />
@@ -124,9 +134,5 @@
         <Key
             latin:keyLabel="#"
             latin:keyStyle="numKeyStyle" />
-        <include
-            latin:keyXPos="-8.047%p"
-            latin:keyWidth="fillRight"
-            latin:keyboardLayout="@xml/key_shortcut" />
-    </Row>
+   </Row>
 </merge>
diff --git a/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java b/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java
index 9986f6e..ba08c59 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java
+++ b/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java
@@ -85,9 +85,20 @@
      */
     public void setView(KeyboardView keyboardView) {
         mKeyboardView = keyboardView;
-
-        assignVirtualViewIds();
         updateParentLocation();
+
+        // Since this class is constructed lazily, we might not get a subsequent
+        // call to setKeyboard() and therefore need to call it now.
+        setKeyboard(mKeyboardView.getKeyboard());
+    }
+
+    /**
+     * Sets the keyboard represented by this node provider.
+     *
+     * @param keyboard The keyboard to represent.
+     */
+    public void setKeyboard(Keyboard keyboard) {
+        assignVirtualViewIds();
     }
 
     /**
diff --git a/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java b/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
index 59f1eec..f6376d5 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
+++ b/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
@@ -86,6 +86,12 @@
         }
     }
 
+    public void setKeyboard(Keyboard keyboard) {
+        if (mAccessibilityNodeProvider != null) {
+            mAccessibilityNodeProvider.setKeyboard(keyboard);
+        }
+    }
+
     /**
      * Proxy method for View.getAccessibilityNodeProvider(). This method is
      * called in SDK version 15 and higher to obtain the virtual node hierarchy
diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java
index ed873a7..e1e1ca9 100644
--- a/java/src/com/android/inputmethod/keyboard/Key.java
+++ b/java/src/com/android/inputmethod/keyboard/Key.java
@@ -227,7 +227,7 @@
         row.setXPos(keyXPos + keyWidth);
 
         mBackgroundType = style.getInt(keyAttr,
-                R.styleable.Keyboard_Key_backgroundType, BACKGROUND_TYPE_NORMAL);
+                R.styleable.Keyboard_Key_backgroundType, row.getDefaultBackgroundType());
 
         mVisualInsetsLeft = Math.round(Keyboard.Builder.getDimensionOrFraction(keyAttr,
                 R.styleable.Keyboard_Key_visualInsetsLeft, params.mBaseWidth, 0));
diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java
index 0be4cf3..21f175d 100644
--- a/java/src/com/android/inputmethod/keyboard/Keyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java
@@ -533,6 +533,8 @@
             public final int mRowHeight;
             /** Default keyLabelFlags in this row. */
             private int mDefaultKeyLabelFlags;
+            /** Default backgroundType for this row */
+            private int mDefaultBackgroundType;
 
             private final int mCurrentY;
             // Will be updated by {@link Key}'s constructor.
@@ -551,8 +553,11 @@
                 mDefaultKeyWidth = Builder.getDimensionOrFraction(keyAttr,
                         R.styleable.Keyboard_Key_keyWidth,
                         params.mBaseWidth, params.mDefaultKeyWidth);
+                mDefaultBackgroundType = keyAttr.getInt(R.styleable.Keyboard_Key_backgroundType,
+                        Key.BACKGROUND_TYPE_NORMAL);
                 keyAttr.recycle();
 
+                // TODO: Initialize this with <Row> attribute as backgroundType is done.
                 mDefaultKeyLabelFlags = 0;
                 mCurrentY = y;
                 mCurrentX = 0.0f;
@@ -574,6 +579,14 @@
                 mDefaultKeyLabelFlags = keyLabelFlags;
             }
 
+            public int getDefaultBackgroundType() {
+                return mDefaultBackgroundType;
+            }
+
+            public void setDefaultBackgroundType(int backgroundType) {
+                mDefaultBackgroundType = backgroundType;
+            }
+
             public void setXPos(float keyXPos) {
                 mCurrentX = keyXPos;
             }
@@ -952,6 +965,7 @@
                 int keyboardLayout = 0;
                 float savedDefaultKeyWidth = 0;
                 int savedDefaultKeyLabelFlags = 0;
+                int savedDefaultBackgroundType = Key.BACKGROUND_TYPE_NORMAL;
                 try {
                     XmlParseUtils.checkAttributeExists(keyboardAttr,
                             R.styleable.Keyboard_Include_keyboardLayout, "keyboardLayout",
@@ -959,22 +973,26 @@
                     keyboardLayout = keyboardAttr.getResourceId(
                             R.styleable.Keyboard_Include_keyboardLayout, 0);
                     if (row != null) {
-                        savedDefaultKeyWidth = row.getDefaultKeyWidth();
-                        savedDefaultKeyLabelFlags = row.getDefaultKeyLabelFlags();
                         if (keyAttr.hasValue(R.styleable.Keyboard_Key_keyXPos)) {
                             // Override current x coordinate.
                             row.setXPos(row.getKeyX(keyAttr));
                         }
+                        // TODO: Remove this if-clause and do the same as backgroundType below.
+                        savedDefaultKeyWidth = row.getDefaultKeyWidth();
                         if (keyAttr.hasValue(R.styleable.Keyboard_Key_keyWidth)) {
                             // Override default key width.
                             row.setDefaultKeyWidth(row.getKeyWidth(keyAttr));
                         }
-                        if (keyAttr.hasValue(R.styleable.Keyboard_Key_keyLabelFlags)) {
-                            // Override default key label flags.
-                            row.setDefaultKeyLabelFlags(
-                                    keyAttr.getInt(R.styleable.Keyboard_Key_keyLabelFlags, 0)
-                                    | savedDefaultKeyLabelFlags);
-                        }
+                        savedDefaultKeyLabelFlags = row.getDefaultKeyLabelFlags();
+                        // Bitwise-or default keyLabelFlag if exists.
+                        row.setDefaultKeyLabelFlags(keyAttr.getInt(
+                                R.styleable.Keyboard_Key_keyLabelFlags, 0)
+                                | savedDefaultKeyLabelFlags);
+                        savedDefaultBackgroundType = row.getDefaultBackgroundType();
+                        // Override default backgroundType if exists.
+                        row.setDefaultBackgroundType(keyAttr.getInt(
+                                R.styleable.Keyboard_Key_backgroundType,
+                                savedDefaultBackgroundType));
                     }
                 } finally {
                     keyboardAttr.recycle();
@@ -991,9 +1009,10 @@
                     parseMerge(parserForInclude, row, skip);
                 } finally {
                     if (row != null) {
-                        // Restore default key width and key label flags.
+                        // Restore default keyWidth, keyLabelFlags, and backgroundType.
                         row.setDefaultKeyWidth(savedDefaultKeyWidth);
                         row.setDefaultKeyLabelFlags(savedDefaultKeyLabelFlags);
+                        row.setDefaultBackgroundType(savedDefaultBackgroundType);
                     }
                     parserForInclude.close();
                 }
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
index e917a81..383298d 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
@@ -468,6 +468,10 @@
         if (ProductionFlag.IS_EXPERIMENTAL) {
             ResearchLogger.latinKeyboardView_setKeyboard(keyboard);
         }
+
+        // This always needs to be set since the accessibility state can
+        // potentially change without the keyboard being set again.
+        AccessibleKeyboardViewProxy.getInstance().setKeyboard(keyboard);
     }
 
     /**
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index a30ec79..bfdc1e3 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -969,7 +969,9 @@
         final KeyboardView inputView = mKeyboardSwitcher.getKeyboardView();
         if (inputView == null || mSuggestionsContainer == null)
             return;
-        final int backingHeight = getAdjustedBackingViewHeight();
+        final int adjustedBackingHeight = getAdjustedBackingViewHeight();
+        final boolean backingGone = (mKeyPreviewBackingView.getVisibility() == View.GONE);
+        final int backingHeight = backingGone ? 0 : adjustedBackingHeight;
         // In fullscreen mode, the height of the extract area managed by InputMethodService should
         // be considered.
         // See {@link android.inputmethodservice.InputMethodService#onComputeInsets}.
diff --git a/java/src/com/android/inputmethod/latin/SynchronouslyLoadedContactsBinaryDictionary.java b/java/src/com/android/inputmethod/latin/SynchronouslyLoadedContactsBinaryDictionary.java
index 4994e59..673b545 100644
--- a/java/src/com/android/inputmethod/latin/SynchronouslyLoadedContactsBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/SynchronouslyLoadedContactsBinaryDictionary.java
@@ -20,12 +20,13 @@
 
 import com.android.inputmethod.keyboard.ProximityInfo;
 
+import java.util.Locale;
+
 public class SynchronouslyLoadedContactsBinaryDictionary extends ContactsBinaryDictionary {
     private boolean mClosed;
 
-    public SynchronouslyLoadedContactsBinaryDictionary(final Context context) {
-        // TODO: add locale information.
-        super(context, Suggest.DIC_CONTACTS, null);
+    public SynchronouslyLoadedContactsBinaryDictionary(final Context context, final Locale locale) {
+        super(context, Suggest.DIC_CONTACTS, locale);
     }
 
     @Override
@@ -51,4 +52,4 @@
         mClosed = true;
         super.close();
     }
-}
\ No newline at end of file
+}
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
index 0e3bf80..8128779 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
@@ -99,11 +99,13 @@
         // List of the supported languages and their associated script. We won't check
         // words written in another script than the selected script, because we know we
         // don't have those in our dictionary so we will underline everything and we
-        // will never have any suggestions, so it makes no sense checking them.
+        // will never have any suggestions, so it makes no sense checking them, and this
+        // is done in {@link #shouldFilterOut}. Also, the script is used to choose which
+        // proximity to pass to the dictionary descent algorithm.
+        // IMPORTANT: this only contains languages - do not write countries in there.
+        // Only the language is searched from the map.
         mLanguageToScript = new TreeMap<String, Integer>();
         mLanguageToScript.put("en", SCRIPT_LATIN);
-        mLanguageToScript.put("en_US", SCRIPT_LATIN);
-        mLanguageToScript.put("en_GB", SCRIPT_LATIN);
         mLanguageToScript.put("fr", SCRIPT_LATIN);
         mLanguageToScript.put("de", SCRIPT_LATIN);
         mLanguageToScript.put("nl", SCRIPT_LATIN);
@@ -111,7 +113,7 @@
         mLanguageToScript.put("es", SCRIPT_LATIN);
         mLanguageToScript.put("it", SCRIPT_LATIN);
         mLanguageToScript.put("hr", SCRIPT_LATIN);
-        mLanguageToScript.put("pt_BR", SCRIPT_LATIN);
+        mLanguageToScript.put("pt", SCRIPT_LATIN);
         mLanguageToScript.put("ru", SCRIPT_CYRILLIC);
         // TODO: Make a persian proximity, and activate the Farsi subtype.
         // mLanguageToScript.put("fa", SCRIPT_PERSIAN);
@@ -152,7 +154,13 @@
 
     private void startUsingContactsDictionaryLocked() {
         if (null == mContactsDictionary) {
-            mContactsDictionary = new SynchronouslyLoadedContactsDictionary(this);
+            if (LatinIME.USE_BINARY_CONTACTS_DICTIONARY) {
+                // TODO: use the right locale for each session
+                mContactsDictionary =
+                        new SynchronouslyLoadedContactsBinaryDictionary(this, Locale.getDefault());
+            } else {
+                mContactsDictionary = new SynchronouslyLoadedContactsDictionary(this);
+            }
         }
         final Iterator<WeakReference<DictionaryCollection>> iterator =
                 mDictionaryCollectionsList.iterator();
@@ -430,7 +438,11 @@
                     // TODO: revert to the concrete type when USE_BINARY_CONTACTS_DICTIONARY is no
                     // longer needed
                     if (LatinIME.USE_BINARY_CONTACTS_DICTIONARY) {
-                        mContactsDictionary = new SynchronouslyLoadedContactsBinaryDictionary(this);
+                        // TODO: use the right locale. We can't do it right now because the
+                        // spell checker is reusing the contacts dictionary across sessions
+                        // without regard for their locale, so we need to fix that first.
+                        mContactsDictionary = new SynchronouslyLoadedContactsBinaryDictionary(this,
+                                Locale.getDefault());
                     } else {
                         mContactsDictionary = new SynchronouslyLoadedContactsDictionary(this);
                     }