Merge "Update an outdated comment"
diff --git a/dictionaries/de_wordlist.xml b/dictionaries/de_wordlist.xml
index 7455944..b895f23 100644
--- a/dictionaries/de_wordlist.xml
+++ b/dictionaries/de_wordlist.xml
@@ -1,4 +1,4 @@
-<wordlist locale="de" description="Deutsch" date="1338184280" version="12" options="german_umlaut_processing">
+<wordlist locale="de" description="Deutsch" date="1339787575" version="15" options="german_umlaut_processing">
  <w f="203" flags="">der</w>
  <w f="200" flags="">und</w>
  <w f="198" flags="">die</w>
@@ -3043,6 +3043,7 @@
  <w f="105" flags="abbreviation">SK</w>
  <w f="105" flags="">Sankt</w>
  <w f="105" flags="">Sendung</w>
+ <w f="105" flags="">Süßigkeit</w>
  <w f="105" flags="">Teilnahme</w>
  <w f="105" flags="">Texas</w>
  <w f="105" flags="">Theodor</w>
@@ -8448,6 +8449,8 @@
  <w f="90" flags="">Gestapo</w>
  <w f="90" flags="">Gewässern</w>
  <w f="90" flags="">Giuseppe</w>
+ <w f="90">Gmail</w>
+ <w f="90">Google</w>
  <w f="90" flags="">Gräber</w>
  <w f="90" flags="">Gymnasiums</w>
  <w f="90" flags="">Göttin</w>
@@ -15609,6 +15612,7 @@
  <w f="80" flags="">Landesgrenze</w>
  <w f="80" flags="">Landeshauptmann</w>
  <w f="80" flags="">Lebensbedingungen</w>
+ <w f="80">Lecker</w>
  <w f="80" flags="">Leeds</w>
  <w f="80" flags="">Lehramt</w>
  <w f="80" flags="">Leitungen</w>
@@ -22727,7 +22731,6 @@
  <w f="74" flags="">dreizählig</w>
  <w f="74" flags="">duale</w>
  <w f="74" flags="">duftenden</w>
- <w f="74" flags="">dumm</w>
  <w f="74" flags="">durchgehender</w>
  <w f="74" flags="">durchschaut</w>
  <w f="74" flags="">durchschneidet</w>
@@ -27903,7 +27906,7 @@
  <w f="70" flags="">Bürgers</w>
  <w f="70" flags="abbreviation">CNRS</w>
  <w f="70" flags="abbreviation">CSD</w>
- <w f="70" flags="">Cafe</w>
+ <w f="70" flags="">Café</w>
  <w f="70" flags="">Calais</w>
  <w f="70" flags="">Calder</w>
  <w f="70" flags="">Casimir</w>
@@ -61063,7 +61066,6 @@
  <w f="56" flags="">Firmung</w>
  <w f="56" flags="">Fiskus</w>
  <w f="56" flags="">Fitch</w>
- <w f="56" flags="">Flecke</w>
  <w f="56" flags="">Fliehburg</w>
  <w f="56" flags="">Flipper</w>
  <w f="56" flags="">Flugboot</w>
@@ -100003,7 +100005,6 @@
  <w f="46" flags="">Südlibanon</w>
  <w f="46" flags="">Südnorwegen</w>
  <w f="46" flags="">Süskind</w>
- <w f="46" flags="">Süßigkeit</w>
  <w f="46" flags="">Süßwasserfisch</w>
  <w f="46" flags="">Tabakrauch</w>
  <w f="46" flags="">Tabellenvorletzter</w>
@@ -104069,6 +104070,7 @@
  <w f="45" flags="">Nordwestufer</w>
  <w f="45" flags="">Notausgang</w>
  <w f="45" flags="">Notausgänge</w>
+ <w f="45">Notizblock</w>
  <w f="45" flags="">Novellensammlung</w>
  <w f="45" flags="">Novizinnen</w>
  <w f="45" flags="">Nutzholz</w>
@@ -107670,7 +107672,6 @@
  <w f="44" flags="">Dubais</w>
  <w f="44" flags="">Dugan</w>
  <w f="44" flags="">Duisdorf</w>
- <w f="44" flags="">Dummkopf</w>
  <w f="44" flags="">Duncans</w>
  <w f="44" flags="">Dunmore</w>
  <w f="44" flags="">Dunois</w>
@@ -128553,7 +128554,6 @@
  <w f="40" flags="">glitzernd</w>
  <w f="40" flags="">glückten</w>
  <w f="40" flags="">goldne</w>
- <w f="40" flags="">google</w>
  <w f="40" flags="">gottesfürchtige</w>
  <w f="40" flags="">grampositives</w>
  <w f="40" flags="">grazile</w>
@@ -192953,6 +192953,7 @@
  <w f="25" flags="">Dünnschichttechnologie</w>
  <w f="25" flags="">Dünnschliff</w>
  <w f="25" flags="">Düsentriebwerke</w>
+ <w f="25" flags="">E-Mail</w>
  <w f="25" flags="">Echtzeitsystemen</w>
  <w f="25" flags="">Eckpavillon</w>
  <w f="25" flags="">Edelmänner</w>
@@ -193796,6 +193797,7 @@
  <w f="25" flags="">Flaschengeist</w>
  <w f="25" flags="">Flaschengrößen</w>
  <w f="25" flags="">Flaschenzüge</w>
+ <w f="25" flags="">Flecke</w>
  <w f="25" flags="">Fleischbrücke</w>
  <w f="25" flags="">Fleischersatz</w>
  <w f="25" flags="">Fleischteile</w>
@@ -201588,7 +201590,6 @@
  <w f="25" flags="">einreisenden</w>
  <w f="25" flags="">einriss</w>
  <w f="25" flags="">elektronendichte</w>
- <w f="25" flags="">email</w>
  <w f="25" flags="">enterprises</w>
  <w f="25" flags="">entfetten</w>
  <w f="25" flags="">epitome</w>
@@ -202700,6 +202701,8 @@
  <w f="21" flags="">zwanzigstel</w>
  <w f="21" flags="">zwischenlagern</w>
  <w f="21" flags="">übersprechen</w>
+ <w f="20">BBQ</w>
+ <w f="20">Germanwings</w>
  <w f="18" flags="">Fernfachhochschule</w>
  <w f="18" flags="">Finanzverbund</w>
  <w f="18" flags="">Taxibus</w>
@@ -205754,6 +205757,7 @@
  <w f="1" flags="">ökotest</w>
  <w f="1" flags="">übergangszeiten</w>
  <w f="1" flags="">überparteilichkeit</w>
+ <w f="0" flags="">Dummkopf</w>
  <w f="0" flags="n">after</w>
  <w f="0" flags="n">anal</w>
  <w f="0" flags="n">angekettet</w>
@@ -205767,6 +205771,7 @@
  <w f="0" flags="n">chicks</w>
  <w f="0" flags="n">dreckig</w>
  <w f="0" flags="n">dreier</w>
+ <w f="0" flags="">dumm</w>
  <w f="0" flags="n">eindringen</w>
  <w f="0" flags="n">entblößt</w>
  <w f="0" flags="n">erotisch</w>
diff --git a/dictionaries/en_gb_wordlist.xml b/dictionaries/en_gb_wordlist.xml
index 024c78f..c2af46e 100644
--- a/dictionaries/en_gb_wordlist.xml
+++ b/dictionaries/en_gb_wordlist.xml
@@ -1,4 +1,4 @@
-<wordlist locale="en_GB" description="English (UK)" date="1338457498" version="14">
+<wordlist locale="en_GB" description="English (UK)" date="1340038724" version="16">
  <w f="222" flags="">the</w>
  <w f="214" flags="">of</w>
  <w f="212" flags="">and</w>
@@ -29,6 +29,7 @@
  <w f="182" flags="">has</w>
  <w f="181" flags="">but</w>
  <w f="180" flags="">first</w>
+ <w f="180" flags="">very</w>
  <w f="180" flags="">we</w>
  <w f="179" flags="">one</w>
  <w f="179" flags="">their</w>
@@ -163,7 +164,6 @@
  <w f="160" flags="">too</w>
  <w f="160" flags="n">up</w>
  <w f="160" flags="">us</w>
- <w f="160" flags="">very</w>
  <w f="160" flags="">won</w>
  <w f="160" flags="">yes</w>
  <w f="160" flags="">you're</w>
@@ -6579,7 +6579,6 @@
  <w f="112" flags="">outskirts</w>
  <w f="112" flags="">overlooking</w>
  <w f="112" flags="">overnight</w>
- <w f="112" flags="">overs</w>
  <w f="112" flags="">palm</w>
  <w f="112" flags="">papal</w>
  <w f="112" flags="">partnerships</w>
@@ -7266,6 +7265,7 @@
  <w f="110" flags="">jumped</w>
  <w f="110" flags="">keeper</w>
  <w f="110" flags="">kindergarten</w>
+ <w f="110" flags="">kitten</w>
  <w f="110" flags="">knight</w>
  <w f="110" flags="">lasts</w>
  <w f="110" flags="">latitude</w>
@@ -7688,6 +7688,7 @@
  <w f="109" flags="abbreviation">kHz</w>
  <w f="109" flags="">kernel</w>
  <w f="109" flags="">kidney</w>
+ <w f="109" flags="">kittens</w>
  <w f="109" flags="">knockout</w>
  <w f="109" flags="">laboratories</w>
  <w f="109" flags="">lamp</w>
@@ -11906,6 +11907,7 @@
  <w f="100" flags="">helmets</w>
  <w f="100" flags="">heyday</w>
  <w f="100" flags="">highlighting</w>
+ <w f="100">how've</w>
  <w f="100" flags="">hugely</w>
  <w f="100" flags="">iPhone</w>
  <w f="100" flags="">identifiable</w>
@@ -12734,6 +12736,7 @@
  <w f="99" flags="">snail</w>
  <w f="99" flags="">snout</w>
  <w f="99" flags="">socket</w>
+ <w f="99" flags="">spacious</w>
  <w f="99" flags="">spawning</w>
  <w f="99" flags="">spearheaded</w>
  <w f="99" flags="">spelt</w>
@@ -13375,7 +13378,6 @@
  <w f="98" flags="">sourced</w>
  <w f="98" flags="">spaceship</w>
  <w f="98" flags="">spacing</w>
- <w f="98" flags="">spacious</w>
  <w f="98" flags="">spam</w>
  <w f="98" flags="">specialising</w>
  <w f="98" flags="">spectroscopy</w>
@@ -14837,7 +14839,6 @@
  <w f="95" flags="">Kazakhstan</w>
  <w f="95" flags="">Kirby</w>
  <w f="95" flags="">Kumar</w>
- <w f="95" flags="">LAN</w>
  <w f="95" flags="abbreviation">LPGA</w>
  <w f="95" flags="">Lahore</w>
  <w f="95" flags="">Lakers</w>
@@ -15737,7 +15738,6 @@
  <w f="94" flags="">demolish</w>
  <w f="94" flags="">detonation</w>
  <w f="94" flags="">dialogues</w>
- <w f="94">didst</w>
  <w f="94" flags="">diminish</w>
  <w f="94" flags="">din</w>
  <w f="94" flags="">diner</w>
@@ -19291,6 +19291,8 @@
  <w f="90" flags="">weir</w>
  <w f="90">well-being</w>
  <w f="90" flags="">wettest</w>
+ <w f="90">when's</w>
+ <w f="90">where'll</w>
  <w f="90" flags="">whipped</w>
  <w f="90" flags="">widowers</w>
  <w f="90" flags="">winner's</w>
@@ -22587,7 +22589,6 @@
  <w f="86" flags="">newsroom</w>
  <w f="86" flags="">nicely</w>
  <w f="86" flags="">nonviolent</w>
- <w f="86" flags="abbreviation">nos</w>
  <w f="86" flags="">noses</w>
  <w f="86" flags="">notations</w>
  <w f="86" flags="">novelization</w>
@@ -25625,7 +25626,6 @@
  <w f="83" flags="">kilowatts</w>
  <w f="83" flags="">kindergartens</w>
  <w f="83" flags="">kingdom's</w>
- <w f="83" flags="">kitten</w>
  <w f="83" flags="">knack</w>
  <w f="83" flags="">labours</w>
  <w f="83" flags="">lacquer</w>
@@ -26730,7 +26730,6 @@
  <w f="82" flags="">keenly</w>
  <w f="82" flags="">keypad</w>
  <w f="82" flags="">kidnappings</w>
- <w f="82" flags="">kittens</w>
  <w f="82" flags="">knitted</w>
  <w f="82" flags="">knuckle</w>
  <w f="82" flags="">lagged</w>
@@ -27165,7 +27164,6 @@
  <w f="82" flags="">wonderfully</w>
  <w f="82" flags="">workable</w>
  <w f="82" flags="">workmanship</w>
- <w f="82" flags="">yew</w>
  <w f="82" flags="">yin</w>
  <w f="82" flags="">zig</w>
  <w f="81" flags="">Aachen</w>
@@ -31437,7 +31435,6 @@
  <w f="78" flags="">lakeshore</w>
  <w f="78" flags="">laminar</w>
  <w f="78" flags="">landforms</w>
- <w f="78" flags="">lang</w>
  <w f="78" flags="">larceny</w>
  <w f="78" flags="">lard</w>
  <w f="78" flags="">largemouth</w>
@@ -32718,7 +32715,6 @@
  <w f="77" flags="">kitsch</w>
  <w f="77" flags="">knight's</w>
  <w f="77" flags="">knockouts</w>
- <w f="77" flags="">lain</w>
  <w f="77" flags="">landmines</w>
  <w f="77" flags="">language's</w>
  <w f="77" flags="">lapel</w>
@@ -33006,7 +33002,6 @@
  <w f="77" flags="">sidereal</w>
  <w f="77" flags="">simulcasted</w>
  <w f="77" flags="">sinuous</w>
- <w f="77" flags="">siting</w>
  <w f="77" flags="">skips</w>
  <w f="77" flags="">skylight</w>
  <w f="77" flags="">slays</w>
@@ -37295,6 +37290,7 @@
  <w f="73" flags="">Klondike</w>
  <w f="73" flags="">Kodiak</w>
  <w f="73" flags="">Kursk</w>
+ <w f="73">LAX</w>
  <w f="73" flags="abbreviation">LGPL</w>
  <w f="73" flags="abbreviation">LMP</w>
  <w f="73" flags="abbreviation">LSTs</w>
@@ -38910,7 +38906,6 @@
  <w f="72" flags="">backwardness</w>
  <w f="72" flags="">baker's</w>
  <w f="72" flags="">ballrooms</w>
- <w f="72" flags="">banc</w>
  <w f="72" flags="">bane</w>
  <w f="72" flags="">bangs</w>
  <w f="72" flags="">banishing</w>
@@ -39591,6 +39586,7 @@
  <w f="72" flags="">shunning</w>
  <w f="72" flags="">shunted</w>
  <w f="72" flags="">shuttle's</w>
+ <w f="72" flags="">sigh</w>
  <w f="72" flags="">siltstone</w>
  <w f="72" flags="">silversmith</w>
  <w f="72" flags="">singlehandedly</w>
@@ -41827,6 +41823,7 @@
  <w f="70" flags="">gash</w>
  <w f="70" flags="">gaudy</w>
  <w f="70" flags="">gazette</w>
+ <w f="70">gelato</w>
  <w f="70" flags="">genealogist</w>
  <w f="70" flags="">generalship</w>
  <w f="70" flags="">geopolitics</w>
@@ -41879,7 +41876,6 @@
  <w f="70" flags="">holdover</w>
  <w f="70" flags="">homeroom</w>
  <w f="70" flags="">homunculus</w>
- <w f="70" flags="">hoo</w>
  <w f="70" flags="">howl</w>
  <w f="70" flags="">huddled</w>
  <w f="70" flags="">hurtful</w>
@@ -44288,6 +44284,7 @@
  <w f="68" flags="">axils</w>
  <w f="68" flags="">axing</w>
  <w f="68" flags="">azimuthal</w>
+ <w f="68" flags="">babe</w>
  <w f="68" flags="">backlight</w>
  <w f="68" flags="">backplane</w>
  <w f="68" flags="">backwoods</w>
@@ -46064,7 +46061,6 @@
  <w f="67" flags="">fuselages</w>
  <w f="67" flags="">futurism</w>
  <w f="67" flags="">gaffe</w>
- <w f="67" flags="">gage</w>
  <w f="67" flags="">gallery's</w>
  <w f="67" flags="">galls</w>
  <w f="67" flags="">gavel</w>
@@ -46493,7 +46489,6 @@
  <w f="67" flags="">shined</w>
  <w f="67" flags="">shipowners</w>
  <w f="67" flags="">shipper</w>
- <w f="67" flags="">shod</w>
  <w f="67" flags="">shrieking</w>
  <w f="67" flags="">shrugs</w>
  <w f="67" flags="">sibilants</w>
@@ -52086,7 +52081,6 @@
  <w f="63" flags="">gummy</w>
  <w f="63" flags="">gunfights</w>
  <w f="63" flags="">gunge</w>
- <w f="63" flags="">hake</w>
  <w f="63" flags="">halftone</w>
  <w f="63" flags="">halva</w>
  <w f="63" flags="">handrail</w>
@@ -52657,7 +52651,6 @@
  <w f="63" flags="">triplane</w>
  <w f="63" flags="">trotters</w>
  <w f="63" flags="">truant</w>
- <w f="63" flags="">tsars</w>
  <w f="63" flags="">tuatara</w>
  <w f="63" flags="">tufa</w>
  <w f="63" flags="">tummy</w>
@@ -53471,7 +53464,6 @@
  <w f="62" flags="">coproduct</w>
  <w f="62" flags="">corbelled</w>
  <w f="62" flags="">coreligionists</w>
- <w f="62" flags="">corm</w>
  <w f="62" flags="">corms</w>
  <w f="62" flags="">cornstarch</w>
  <w f="62" flags="">corrals</w>
@@ -56844,7 +56836,6 @@
  <w f="60" flags="">longshoreman</w>
  <w f="60" flags="">longterm</w>
  <w f="60" flags="">lugger</w>
- <w f="60" flags="">lune</w>
  <w f="60" flags="">madmen</w>
  <w f="60" flags="">madre</w>
  <w f="60" flags="">magnesia</w>
@@ -58438,6 +58429,7 @@
  <w f="59" flags="">majlis</w>
  <w f="59" flags="">maniacally</w>
  <w f="59" flags="">mantlet</w>
+ <w f="59" flags="">manu</w>
  <w f="59" flags="">mapper</w>
  <w f="59" flags="">marjoram</w>
  <w f="59" flags="">marshaling</w>
@@ -58772,7 +58764,6 @@
  <w f="59" flags="">similitude</w>
  <w f="59" flags="">singed</w>
  <w f="59" flags="">sinning</w>
- <w f="59" flags="">siring</w>
  <w f="59" flags="">skein</w>
  <w f="59" flags="">skin's</w>
  <w f="59" flags="">skipjack</w>
@@ -60312,7 +60303,6 @@
  <w f="58" flags="">solvated</w>
  <w f="58" flags="">songwriter's</w>
  <w f="58" flags="">sop</w>
- <w f="58" flags="">sori</w>
  <w f="58" flags="">sorority's</w>
  <w f="58" flags="">sotto</w>
  <w f="58" flags="">southerner</w>
@@ -61371,7 +61361,6 @@
  <w f="57" flags="">garrulous</w>
  <w f="57" flags="">gazebos</w>
  <w f="57" flags="">gelatine</w>
- <w f="57" flags="">geld</w>
  <w f="57" flags="">gelled</w>
  <w f="57" flags="">generalise</w>
  <w f="57" flags="">generalities</w>
@@ -62021,7 +62010,6 @@
  <w f="57" flags="">unum</w>
  <w f="57" flags="">upperclassman</w>
  <w f="57" flags="">urbanites</w>
- <w f="57" flags="abbreviation">usr</w>
  <w f="57" flags="">utility's</w>
  <w f="57" flags="">vanities</w>
  <w f="57" flags="">vaqueros</w>
@@ -62730,7 +62718,6 @@
  <w f="56" flags="">crock</w>
  <w f="56" flags="">croplands</w>
  <w f="56" flags="">crosswalks</w>
- <w f="56" flags="">culm</w>
  <w f="56" flags="">curettage</w>
  <w f="56" flags="">currency's</w>
  <w f="56" flags="">cursors</w>
@@ -63165,7 +63152,6 @@
  <w f="56" flags="">nighters</w>
  <w f="56" flags="">nightspot</w>
  <w f="56" flags="">nightstick</w>
- <w f="56" flags="">nim</w>
  <w f="56" flags="">ninetieth</w>
  <w f="56" flags="">nix</w>
  <w f="56" flags="">nocturne</w>
@@ -63630,7 +63616,6 @@
  <w f="56" flags="">unread</w>
  <w f="56" flags="">unrealised</w>
  <w f="56" flags="">unselected</w>
- <w f="56" flags="">unser</w>
  <w f="56" flags="">unsparing</w>
  <w f="56" flags="">unsporting</w>
  <w f="56" flags="">unsupportive</w>
@@ -64650,6 +64635,7 @@
  <w f="55" flags="">glissandi</w>
  <w f="55" flags="">gloat</w>
  <w f="55" flags="">glum</w>
+ <w f="55" flags="">gnat</w>
  <w f="55" flags="">gnostics</w>
  <w f="55" flags="">goannas</w>
  <w f="55" flags="">goddess's</w>
@@ -66199,7 +66185,6 @@
  <w f="54" flags="">homeschoolers</w>
  <w f="54" flags="">horsewoman</w>
  <w f="54" flags="">horticulturalists</w>
- <w f="54" flags="abbreviation">hos</w>
  <w f="54" flags="">hotlines</w>
  <w f="54" flags="">hovel</w>
  <w f="54" flags="">huckleberry</w>
@@ -66266,7 +66251,6 @@
  <w f="54" flags="">lacewings</w>
  <w f="54" flags="">ladybird</w>
  <w f="54" flags="">laser's</w>
- <w f="54" flags="abbreviation">lats</w>
  <w f="54" flags="">leafhoppers</w>
  <w f="54" flags="">leaper</w>
  <w f="54" flags="">leapfrogging</w>
@@ -66284,7 +66268,6 @@
  <w f="54" flags="">llanos</w>
  <w f="54" flags="">lobules</w>
  <w f="54" flags="">locksmiths</w>
- <w f="54" flags="">loge</w>
  <w f="54" flags="">logjam</w>
  <w f="54" flags="">lon</w>
  <w f="54" flags="">longhaired</w>
@@ -70100,7 +70083,6 @@
  <w f="52" flags="">virtuality</w>
  <w f="52" flags="">virus's</w>
  <w f="52" flags="">vivace</w>
- <w f="52" flags="">vive</w>
  <w f="52" flags="">voicework</w>
  <w f="52" flags="">volcanology</w>
  <w f="52" flags="">volleying</w>
@@ -70986,7 +70968,6 @@
  <w f="51" flags="">kukri</w>
  <w f="51" flags="">kumquat</w>
  <w f="51" flags="">kwashiorkor</w>
- <w f="51" flags="">lade</w>
  <w f="51" flags="">lamp's</w>
  <w f="51" flags="">lampshade</w>
  <w f="51" flags="">lantana</w>
@@ -75079,7 +75060,6 @@
  <w f="48" flags="">calved</w>
  <w f="48" flags="">calypsos</w>
  <w f="48" flags="">caracaras</w>
- <w f="48" flags="">carder</w>
  <w f="48" flags="">careerist</w>
  <w f="48" flags="">carny</w>
  <w f="48" flags="">carotenes</w>
@@ -75880,7 +75860,6 @@
  <w f="48" flags="">rhomboidal</w>
  <w f="48" flags="">rills</w>
  <w f="48" flags="">rivalry's</w>
- <w f="48" flags="">rive</w>
  <w f="48" flags="">romps</w>
  <w f="48" flags="">router's</w>
  <w f="48" flags="">rubberised</w>
@@ -75970,7 +75949,6 @@
  <w f="48" flags="">sorbate</w>
  <w f="48" flags="nonword">sorta</w>
  <w f="48" flags="">souffle</w>
- <w f="48" flags="">sough</w>
  <w f="48" flags="">southwardly</w>
  <w f="48" flags="">spacemen</w>
  <w f="48" flags="">spanker</w>
@@ -77388,7 +77366,6 @@
  <w f="47" flags="">shebang</w>
  <w f="47" flags="">sheepfold</w>
  <w f="47" flags="">sher</w>
- <w f="47" flags="">sherd</w>
  <w f="47" flags="">shoos</w>
  <w f="47" flags="">shoplift</w>
  <w f="47" flags="">shorthaired</w>
@@ -78341,7 +78318,6 @@
  <w f="46" flags="">freelances</w>
  <w f="46" flags="">funnelling</w>
  <w f="46" flags="">fusel</w>
- <w f="46" flags="">gad</w>
  <w f="46" flags="">gaffs</w>
  <w f="46" flags="">gamemasters</w>
  <w f="46" flags="">gapes</w>
@@ -78690,7 +78666,6 @@
  <w f="46">piste</w>
  <w f="46" flags="">pithead</w>
  <w f="46" flags="">placekicking</w>
- <w f="46" flags="">plage</w>
  <w f="46" flags="">planchette</w>
  <w f="46" flags="">playas</w>
  <w f="46" flags="">playbacks</w>
@@ -79927,7 +79902,6 @@
  <w f="45" flags="">faery</w>
  <w f="45" flags="">fairy's</w>
  <w f="45" flags="">faits</w>
- <w f="45" flags="">faller</w>
  <w f="45" flags="">fallowing</w>
  <w f="45" flags="">familiarised</w>
  <w f="45" flags="">fanboys</w>
@@ -80032,7 +80006,6 @@
  <w f="45" flags="">gym's</w>
  <w f="45" flags="">hacker's</w>
  <w f="45" flags="">hallelujah</w>
- <w f="45" flags="">hame</w>
  <w f="45" flags="">hank</w>
  <w f="45" flags="">hankering</w>
  <w f="45" flags="">hanky</w>
@@ -81576,7 +81549,6 @@
  <w f="44" flags="">divestments</w>
  <w f="44" flags="">do-gooders</w>
  <w f="44" flags="">documentable</w>
- <w f="44" flags="">don</w>
  <w f="44" flags="">donator</w>
  <w f="44" flags="">doorposts</w>
  <w f="44" flags="">doublespeak</w>
@@ -84187,7 +84159,6 @@
  <w f="42" flags="">anticarcinogenic</w>
  <w f="42" flags="">antipasto</w>
  <w f="42" flags="">antlions</w>
- <w f="42" flags="">anu</w>
  <w f="42" flags="">anxiousness</w>
  <w f="42" flags="">apartness</w>
  <w f="42" flags="">ape's</w>
@@ -85155,7 +85126,6 @@
  <w f="42" flags="">washstand</w>
  <w f="42" flags="">waviness</w>
  <w f="42" flags="">wayfaring</w>
- <w f="42" flags="">weil</w>
  <w f="42" flags="">wickedest</w>
  <w f="42" flags="">wiggled</w>
  <w f="42" flags="">wireworks</w>
@@ -85924,7 +85894,6 @@
  <w f="41" flags="">henhouse</w>
  <w f="41" flags="">hereabouts</w>
  <w f="41" flags="">hereunto</w>
- <w f="41" flags="">herm</w>
  <w f="41">herniation</w>
  <w f="41">hies</w>
  <w f="41" flags="">highveld</w>
@@ -87433,6 +87402,7 @@
  <w f="40" flags="">housemother</w>
  <w f="40" flags="">houseware</w>
  <w f="40" flags="">housewife's</w>
+ <w f="40">how'll</w>
  <w f="40" flags="">hucksters</w>
  <w f="40" flags="">humanise</w>
  <w f="40" flags="">humbles</w>
@@ -89171,7 +89141,6 @@
  <w f="39" flags="">kedge</w>
  <w f="39" flags="">keyrings</w>
  <w f="39" flags="">kibble</w>
- <w f="39">kine</w>
  <w f="39" flags="">kingless</w>
  <w f="39" flags="">kinkajous</w>
  <w f="39" flags="">knackered</w>
@@ -90108,7 +90077,6 @@
  <w f="38" flags="">beanball</w>
  <w f="38" flags="">bedazzled</w>
  <w f="38" flags="">bezant</w>
- <w f="38" flags="abbreviation">bf</w>
  <w f="38" flags="">bights</w>
  <w f="38" flags="australian">bilbies</w>
  <w f="38" flags="">bilked</w>
@@ -90604,7 +90572,6 @@
  <w f="38" flags="">selectiveness</w>
  <w f="38" flags="">selene</w>
  <w f="38" flags="">selvages</w>
- <w f="38" flags="">sere</w>
  <w f="38" flags="">serf's</w>
  <w f="38" flags="">serialise</w>
  <w f="38" flags="">servomotors</w>
@@ -93266,7 +93233,6 @@
  <w f="36" flags="">laminator</w>
  <w f="36" flags="">landlessness</w>
  <w f="36" flags="">launders</w>
- <w f="36" flags="">lave</w>
  <w f="36" flags="">leathern</w>
  <w f="36" flags="">leeboard</w>
  <w f="36" flags="">leeched</w>
@@ -95133,7 +95099,6 @@
  <w f="35" flags="">librates</w>
  <w f="35" flags="">licitly</w>
  <w f="35" flags="">lid's</w>
- <w f="35" flags="">lief</w>
  <w f="35" flags="">lifebuoy</w>
  <w f="35" flags="">lifebuoys</w>
  <w f="35" flags="">lightering</w>
@@ -96892,7 +96857,6 @@
  <w f="34" flags="">nonfinancial</w>
  <w f="34" flags="">noninflammatory</w>
  <w f="34" flags="">nontarget</w>
- <w f="34" flags="">norn</w>
  <w f="34" flags="">northland</w>
  <w f="34" flags="">nosebands</w>
  <w f="34" flags="">novice's</w>
@@ -99617,7 +99581,6 @@
  <w f="32" flags="">localists</w>
  <w f="32" flags="">loco's</w>
  <w f="32" flags="">locomote</w>
- <w f="32" flags="">lod</w>
  <w f="32" flags="">loiters</w>
  <w f="32" flags="">loquacity</w>
  <w f="32" flags="">lumpfish</w>
@@ -102531,7 +102494,6 @@
  <w f="30" flags="">digger's</w>
  <w f="30" flags="">dignitary's</w>
  <w f="30" flags="">dilapidations</w>
- <w f="30" flags="">dingle</w>
  <w f="30" flags="">dirties</w>
  <w f="30" flags="">disagreeably</w>
  <w f="30" flags="">disbelievingly</w>
@@ -104802,7 +104764,6 @@
  <w f="28" flags="">lightning's</w>
  <w f="28" flags="">linkboy</w>
  <w f="28" flags="">linnets</w>
- <w f="28" flags="">lins</w>
  <w f="28" flags="">lissome</w>
  <w f="28" flags="">literariness</w>
  <w f="28" flags="">littles</w>
@@ -106823,7 +106784,6 @@
  <w f="27" flags="">icemen</w>
  <w f="27" flags="">icepacks</w>
  <w f="27" flags="">ideate</w>
- <w f="27" flags="abbreviation">ided</w>
  <w f="27" flags="">idiomorphic</w>
  <w f="27" flags="">idiot's</w>
  <w f="27" flags="">illyricum</w>
@@ -109554,7 +109514,6 @@
  <w f="25" flags="">masticating</w>
  <w f="25" flags="">mastics</w>
  <w f="25" flags="">matelots</w>
- <w f="25" flags="">maun</w>
  <w f="25" flags="">maundering</w>
  <w f="25" flags="">maundy</w>
  <w f="25" flags="">mealies</w>
@@ -111288,7 +111247,6 @@
  <w f="23" flags="">awardee's</w>
  <w f="23" flags="">awarder</w>
  <w f="23" flags="">axle's</w>
- <w f="23">baaed</w>
  <w f="23" flags="">babs</w>
  <w f="23" flags="">backbends</w>
  <w f="23" flags="">backcourts</w>
@@ -111866,7 +111824,6 @@
  <w f="23" flags="">fibrillations</w>
  <w f="23" flags="">fieldfares</w>
  <w f="23" flags="">fiend's</w>
- <w f="23" flags="">fifing</w>
  <w f="23" flags="">fifteen's</w>
  <w f="23" flags="">filofax</w>
  <w f="23" flags="">fir's</w>
@@ -112047,7 +112004,6 @@
  <w f="23" flags="">hellishly</w>
  <w f="23" flags="">henhouses</w>
  <w f="23" flags="">heroisms</w>
- <w f="23" flags="">hest</w>
  <w f="23" flags="">hied</w>
  <w f="23" flags="">high-falutin'</w>
  <w f="23" flags="">highchair</w>
@@ -112756,7 +112712,6 @@
  <w f="23" flags="">rambutans</w>
  <w f="23" flags="">rampion</w>
  <w f="23" flags="">ranking's</w>
- <w f="23" flags="">rankly</w>
  <w f="23" flags="">rarefactions</w>
  <w f="23" flags="">rarefy</w>
  <w f="23" flags="">ratafia</w>
@@ -114952,7 +114907,6 @@
  <w f="21" flags="">emprise</w>
  <w f="21" flags="">en's</w>
  <w f="21" flags="">enamelwork</w>
- <w f="21" flags="abbreviation">enc</w>
  <w f="21" flags="">endangerments</w>
  <w f="21" flags="">endon</w>
  <w f="21" flags="">energises</w>
@@ -115387,7 +115341,6 @@
  <w f="21" flags="">indiscriminating</w>
  <w f="21" flags="">indological</w>
  <w f="21" flags="">indology</w>
- <w f="21" flags="">indre</w>
  <w f="21" flags="">indwelt</w>
  <w f="21" flags="">ineffaceable</w>
  <w f="21" flags="">ineffectuality</w>
@@ -115789,7 +115742,6 @@
  <w f="21" flags="">nonvocal</w>
  <w f="21" flags="">nonvoluntary</w>
  <w f="21" flags="">northeasterner</w>
- <w f="21" flags="">noth</w>
  <w f="21" flags="">nourisher</w>
  <w f="21" flags="">novelettish</w>
  <w f="21" flags="">nucleus's</w>
@@ -115798,7 +115750,6 @@
  <w f="21" flags="">nuttiest</w>
  <w f="21" flags="abbreviation">nyx</w>
  <w f="21" flags="">oarswomen</w>
- <w f="21" flags="">oater</w>
  <w f="21" flags="">obscurest</w>
  <w f="21" flags="">observantly</w>
  <w f="21" flags="">obstante</w>
@@ -115896,7 +115847,6 @@
  <w f="21" flags="">pareira</w>
  <w f="21" flags="">parenthesised</w>
  <w f="21" flags="">parenthetic</w>
- <w f="21" flags="">parer</w>
  <w f="21" flags="">parfleche</w>
  <w f="21" flags="">parser's</w>
  <w f="21" flags="">parsings</w>
@@ -115904,7 +115854,6 @@
  <w f="21" flags="">passivism</w>
  <w f="21" flags="">passkeys</w>
  <w f="21" flags="">passworded</w>
- <w f="21" flags="">pated</w>
  <w f="21" flags="">pathway's</w>
  <w f="21" flags="">patrologist</w>
  <w f="21" flags="">pavement's</w>
@@ -116903,7 +116852,6 @@
  <w f="21" flags="">weldings</w>
  <w f="21" flags="">wetland's</w>
  <w f="21" flags="">wheelchair's</w>
- <w f="21" flags="">whets</w>
  <w f="21" flags="">whiffling</w>
  <w f="21" flags="">whimbrels</w>
  <w f="21" flags="">whippoorwill</w>
@@ -119044,7 +118992,6 @@
  <w f="18" flags="">gambolling</w>
  <w f="18" flags="">gambrels</w>
  <w f="18" flags="">gamesmen</w>
- <w f="18" flags="">gams</w>
  <w f="18" flags="">gaoler's</w>
  <w f="18" flags="">garde's</w>
  <w f="18" flags="">garnishee</w>
@@ -119467,7 +119414,6 @@
  <w f="18" flags="">jolliness</w>
  <w f="18" flags="">jonquils</w>
  <w f="18" flags="">journalling</w>
- <w f="18" flags="australian">jube</w>
  <w f="18" flags="">jubes</w>
  <w f="18" flags="">judaizers</w>
  <w f="18" flags="">judicare</w>
@@ -120639,7 +120585,6 @@
  <w f="18" flags="">shoebills</w>
  <w f="18" flags="">shopkeep</w>
  <w f="18" flags="">shotgunned</w>
- <w f="18" flags="">shott</w>
  <w f="18" flags="">showmen's</w>
  <w f="18" flags="">shunter's</w>
  <w f="18" flags="">siccing</w>
@@ -121586,7 +121531,6 @@
  <w f="15" flags="">Commissar's</w>
  <w f="15" flags="">Computerworld's</w>
  <w f="15" flags="">Conger's</w>
- <w f="15" flags="">Conni</w>
  <w f="15" flags="">Conservatorium's</w>
  <w f="15" flags="">Copernicans</w>
  <w f="15" flags="">Coralyn</w>
@@ -122957,7 +122901,6 @@
  <w f="15" flags="">calaboose</w>
  <w f="15">calcine</w>
  <w f="15" flags="">calculous</w>
- <w f="15" flags="">calked</w>
  <w f="15" flags="">calks</w>
  <w f="15" flags="">calligraphists</w>
  <w f="15" flags="">callouses</w>
@@ -134768,6 +134711,7 @@
  <w f="10" flags="">wettish</w>
  <w f="10" flags="">whammies</w>
  <w f="10" flags="nonword">what'd</w>
+ <w f="10">what'm</w>
  <w f="10" flags="">wheaties</w>
  <w f="10" flags="">wheelbarrow's</w>
  <w f="10" flags="">wheezers</w>
@@ -134790,6 +134734,7 @@
  <w f="10" flags="">whoas</w>
  <w f="10" flags="">whoopers</w>
  <w f="10" flags="">whopped</w>
+ <w f="10">why'll</w>
  <w f="10" flags="">widgeons</w>
  <w f="10" flags="">widgie</w>
  <w f="10" flags="">wikipedias</w>
@@ -135035,7 +134980,6 @@
  <w f="6">weaponry's</w>
  <w f="6">womb's</w>
  <w f="6">yearningly</w>
- <w f="5" flags="">babe</w>
  <w f="4" flags="">bandannas</w>
  <w f="2">Wahhabi</w>
  <w f="2">acanthuses</w>
@@ -144301,7 +144245,6 @@
  <w f="1" flags="">beet's</w>
  <w f="1">beetroot's</w>
  <w f="1">befogging</w>
- <w f="1" flags="">befogs</w>
  <w f="1" flags="">beggarweed</w>
  <w f="1" flags="">begird</w>
  <w f="1" flags="">begirt</w>
@@ -145901,7 +145844,6 @@
  <w f="1" flags="">dandles</w>
  <w f="1" flags="">danged</w>
  <w f="1" flags="">dangler</w>
- <w f="1" flags="">dankly</w>
  <w f="1" flags="">dappers</w>
  <w f="1" flags="">darer</w>
  <w f="1" flags="">darkener</w>
@@ -146521,7 +146463,6 @@
  <w f="1" flags="">duckweed's</w>
  <w f="1" flags="">dudeen</w>
  <w f="1" flags="">dudgeons</w>
- <w f="1" flags="">duding</w>
  <w f="1" flags="">dueler</w>
  <w f="1" flags="">duellers</w>
  <w f="1" flags="">duellist's</w>
@@ -147057,7 +146998,6 @@
  <w f="1" flags="">fatefulness</w>
  <w f="1" flags="">fathead's</w>
  <w f="1" flags="">fatigue's</w>
- <w f="1" flags="">fatly</w>
  <w f="1" flags="">fatteners</w>
  <w f="1" flags="">fattish</w>
  <w f="1" flags="">fatuities</w>
@@ -147351,7 +147291,6 @@
  <w f="1" flags="">forfeiture's</w>
  <w f="1" flags="">forgivingly</w>
  <w f="1" flags="">forgoer</w>
- <w f="1" flags="">forker</w>
  <w f="1" flags="">forkers</w>
  <w f="1">forkfuls</w>
  <w f="1" flags="">forlornest</w>
@@ -152810,7 +152749,6 @@
  <w f="1" flags="">serfage</w>
  <w f="1" flags="">serfhood</w>
  <w f="1" flags="">sergeantcy</w>
- <w f="1" flags="">serged</w>
  <w f="1" flags="">serialism's</w>
  <w f="1" flags="">seriography</w>
  <w f="1" flags="">sermoning</w>
@@ -155277,7 +155215,6 @@
  <w f="1" flags="">wheelage</w>
  <w f="1" flags="">wheelbarrowing</w>
  <w f="1" flags="">wheelings</w>
- <w f="1" flags="">whees</w>
  <w f="1" flags="">wheezily</w>
  <w f="1" flags="">whelk's</w>
  <w f="1" flags="">wherry's</w>
@@ -155464,7 +155401,6 @@
  <w f="1" flags="">yawps</w>
  <w f="1" flags="">yayed</w>
  <w f="1" flags="">yays</w>
- <w f="1" flags="">yean</w>
  <w f="1" flags="">yeaned</w>
  <w f="1">year-end</w>
  <w f="1" flags="">yearlies</w>
@@ -155572,6 +155508,7 @@
  <w f="0" flags="offensive">Kahuna's</w>
  <w f="0" flags="medical">Kaif's</w>
  <w f="0" flags="babytalk">Kaka's</w>
+ <w f="0" flags="">LAN</w>
  <w f="0" flags="">LP</w>
  <w f="0" flags="">LR</w>
  <w f="0" flags="abbreviation">LSAT</w>
@@ -155696,6 +155633,7 @@
  <w f="0" flags="n">belladonna</w>
  <w f="0" flags="e">bestial</w>
  <w f="0" flags="n">bestiality</w>
+ <w f="0" flags="abbreviation">bf</w>
  <w f="0" flags="">bimbos</w>
  <w f="0" flags="r">bitch</w>
  <w f="0" flags="">bitch's</w>
@@ -156008,6 +155946,7 @@
  <w f="0" flags="offensive">fuckings</w>
  <w f="0" flags="offensive">fucks</w>
  <w f="0" flags="">fwd</w>
+ <w f="0" flags="">gage</w>
  <w f="0" flags="n">gangbang</w>
  <w f="0" flags="n">gangbanged</w>
  <w f="0" flags="n">gangbanging</w>
@@ -156027,7 +155966,6 @@
  <w f="0">glandes</w>
  <w f="0" flags="medical">glans</w>
  <w f="0">glans's</w>
- <w f="0" flags="">gnat</w>
  <w f="0" flags="nonword,offensive">goddammit</w>
  <w f="0" flags="offensive">goddamn</w>
  <w f="0" flags="offensive">goddamned</w>
@@ -156548,10 +156486,9 @@
  <w f="0" flags="offensive">shittiest</w>
  <w f="0" flags="offensive">shitting</w>
  <w f="0" flags="offensive">shitty</w>
+ <w f="0" flags="">shod</w>
  <w f="0" flags="n">shrimping</w>
- <w f="0" flags="">sigh</w>
  <w f="0" flags="e">silverback</w>
- <w f="0" flags="">sith</w>
  <w f="0" flags="offensive">skat</w>
  <w f="0" flags="n">slit</w>
  <w f="0">slut</w>
@@ -156699,7 +156636,6 @@
  <w f="0" flags="medical">tribade</w>
  <w f="0" flags="medical">tribades</w>
  <w f="0" flags="medical">tribadism</w>
- <w f="0" flags="">tun</w>
  <w f="0" flags="offensive">turd</w>
  <w f="0" flags="offensive">turds</w>
  <w f="0" flags="babytalk">twat</w>
@@ -156841,6 +156777,7 @@
  <w f="0" flags="medical">virginity</w>
  <w f="0">virginity's</w>
  <w f="0" flags="babytalk">virgins</w>
+ <w f="0">vis</w>
  <w f="0" flags="">voyeur</w>
  <w f="0" flags="n">voyeurism</w>
  <w f="0" flags="n">voyeurs</w>
@@ -156864,6 +156801,7 @@
  <w f="0" flags="n">watersports</w>
  <w f="0" flags="babytalk">weeing</w>
  <w f="0" flags="offensive">whang</w>
+ <w f="0" flags="">whets</w>
  <w f="0" flags="e">whitey</w>
  <w f="0" flags="offensive">whore</w>
  <w f="0" flags="offensive">whore's</w>
diff --git a/dictionaries/en_us_wordlist.xml b/dictionaries/en_us_wordlist.xml
index b5d4997..3cafbd7 100644
--- a/dictionaries/en_us_wordlist.xml
+++ b/dictionaries/en_us_wordlist.xml
@@ -1,4 +1,4 @@
-<wordlist locale="en_US" description="English (US)" date="1338457465" version="14">
+<wordlist locale="en_US" description="English (US)" date="1340038693" version="16">
  <w f="222" flags="">the</w>
  <w f="214" flags="">of</w>
  <w f="212" flags="">and</w>
@@ -29,6 +29,7 @@
  <w f="182" flags="">has</w>
  <w f="181" flags="">but</w>
  <w f="180" flags="">first</w>
+ <w f="180" flags="">very</w>
  <w f="180" flags="">we</w>
  <w f="179" flags="">one</w>
  <w f="179" flags="">their</w>
@@ -162,7 +163,6 @@
  <w f="160" flags="">too</w>
  <w f="160" flags="n">up</w>
  <w f="160" flags="">us</w>
- <w f="160" flags="">very</w>
  <w f="160" flags="">won</w>
  <w f="160" flags="">yes</w>
  <w f="160" flags="">you're</w>
@@ -7458,6 +7458,7 @@
  <w f="110" flags="">jumped</w>
  <w f="110" flags="">keeper</w>
  <w f="110" flags="">kindergarten</w>
+ <w f="110" flags="">kitten</w>
  <w f="110" flags="">knight</w>
  <w f="110" flags="">lasts</w>
  <w f="110" flags="">latitude</w>
@@ -7896,6 +7897,7 @@
  <w f="109" flags="abbreviation">kHz</w>
  <w f="109" flags="">kernel</w>
  <w f="109" flags="">kidney</w>
+ <w f="109" flags="">kittens</w>
  <w f="109" flags="">knockout</w>
  <w f="109" flags="">laboratories</w>
  <w f="109" flags="">lamp</w>
@@ -12305,6 +12307,7 @@
  <w f="100" flags="">heyday</w>
  <w f="100" flags="">highlighting</w>
  <w f="100" flags="">hospitalized</w>
+ <w f="100">how've</w>
  <w f="100" flags="">hugely</w>
  <w f="100" flags="">iPhone</w>
  <w f="100" flags="">identifiable</w>
@@ -13158,6 +13161,7 @@
  <w f="99" flags="">snail</w>
  <w f="99" flags="">snout</w>
  <w f="99" flags="">socket</w>
+ <w f="99" flags="">spacious</w>
  <w f="99" flags="">spawning</w>
  <w f="99" flags="">spearheaded</w>
  <w f="99" flags="">spike</w>
@@ -13832,7 +13836,6 @@
  <w f="98" flags="">sourced</w>
  <w f="98" flags="">spaceship</w>
  <w f="98" flags="">spacing</w>
- <w f="98" flags="">spacious</w>
  <w f="98">spake</w>
  <w f="98" flags="">spam</w>
  <w f="98" flags="">specialize</w>
@@ -15374,7 +15377,6 @@
  <w f="95" flags="">Kazakhstan</w>
  <w f="95" flags="">Kirby</w>
  <w f="95" flags="">Kumar</w>
- <w f="95" flags="">LAN</w>
  <w f="95" flags="abbreviation">LPGA</w>
  <w f="95" flags="">Lahore</w>
  <w f="95" flags="">Lakers</w>
@@ -16323,7 +16325,6 @@
  <w f="94" flags="">demolish</w>
  <w f="94" flags="">detonation</w>
  <w f="94" flags="">dialog</w>
- <w f="94">didst</w>
  <w f="94" flags="">diminish</w>
  <w f="94" flags="">din</w>
  <w f="94" flags="">diner</w>
@@ -20036,6 +20037,8 @@
  <w f="90" flags="">weir</w>
  <w f="90">well-being</w>
  <w f="90" flags="">wettest</w>
+ <w f="90">when's</w>
+ <w f="90">where'll</w>
  <w f="90" flags="">whipped</w>
  <w f="90" flags="">widowers</w>
  <w f="90" flags="">winner's</w>
@@ -23472,7 +23475,6 @@
  <w f="86" flags="">newsroom</w>
  <w f="86" flags="">nicely</w>
  <w f="86" flags="">nonviolent</w>
- <w f="86" flags="abbreviation">nos</w>
  <w f="86" flags="">noses</w>
  <w f="86" flags="">notations</w>
  <w f="86" flags="">novelization</w>
@@ -25620,7 +25622,6 @@
  <w f="84" flags="">ovate</w>
  <w f="84" flags="">overcomes</w>
  <w f="84" flags="">overloaded</w>
- <w f="84">overs</w>
  <w f="84" flags="">pacifism</w>
  <w f="84" flags="">paintball</w>
  <w f="84">paraplegics</w>
@@ -26631,7 +26632,6 @@
  <w f="83" flags="">kilowatts</w>
  <w f="83" flags="">kindergartens</w>
  <w f="83" flags="">kingdom's</w>
- <w f="83" flags="">kitten</w>
  <w f="83" flags="">knack</w>
  <w f="83" flags="">lacquer</w>
  <w f="83" flags="">laissez</w>
@@ -27711,7 +27711,6 @@
  <w f="82" flags="">homicides</w>
  <w f="82" flags="">hoops</w>
  <w f="82" flags="">hovercraft</w>
- <w f="82" flags="abbreviation">hr</w>
  <w f="82" flags="">humanoids</w>
  <w f="82" flags="">hummingbird</w>
  <w f="82" flags="">hump</w>
@@ -27777,7 +27776,6 @@
  <w f="82" flags="">keenly</w>
  <w f="82" flags="">keypad</w>
  <w f="82" flags="">kidnappings</w>
- <w f="82" flags="">kittens</w>
  <w f="82" flags="">knitted</w>
  <w f="82" flags="">knuckle</w>
  <w f="82" flags="">lagged</w>
@@ -28216,7 +28214,6 @@
  <w f="82" flags="">wonderfully</w>
  <w f="82" flags="">workable</w>
  <w f="82" flags="">workmanship</w>
- <w f="82" flags="">yew</w>
  <w f="82" flags="">yin</w>
  <w f="82" flags="">zig</w>
  <w f="81" flags="">Aachen</w>
@@ -32622,7 +32619,6 @@
  <w f="78" flags="">lakeshore</w>
  <w f="78" flags="">laminar</w>
  <w f="78" flags="">landforms</w>
- <w f="78" flags="">lang</w>
  <w f="78" flags="">larceny</w>
  <w f="78" flags="">lard</w>
  <w f="78" flags="">largemouth</w>
@@ -33089,7 +33085,6 @@
  <w f="78" flags="">whitewash</w>
  <w f="78" flags="">wholesaler</w>
  <w f="78" flags="">withering</w>
- <w f="78" flags="abbreviation">wo</w>
  <w f="78" flags="">woodwinds</w>
  <w f="78" flags="">wrangling</w>
  <w f="78" flags="">wrest</w>
@@ -33952,7 +33947,6 @@
  <w f="77" flags="">kitsch</w>
  <w f="77" flags="">knight's</w>
  <w f="77" flags="">knockouts</w>
- <w f="77" flags="">lain</w>
  <w f="77" flags="">landmines</w>
  <w f="77" flags="">language's</w>
  <w f="77" flags="">lapel</w>
@@ -34245,7 +34239,6 @@
  <w f="77" flags="">sidereal</w>
  <w f="77" flags="">simulcasted</w>
  <w f="77" flags="">sinuous</w>
- <w f="77" flags="">siting</w>
  <w f="77" flags="">skips</w>
  <w f="77" flags="">skylight</w>
  <w f="77" flags="">slays</w>
@@ -38713,6 +38706,7 @@
  <w f="73" flags="">Klondike</w>
  <w f="73" flags="">Kodiak</w>
  <w f="73" flags="">Kursk</w>
+ <w f="73">LAX</w>
  <w f="73" flags="abbreviation">LGPL</w>
  <w f="73" flags="abbreviation">LMP</w>
  <w f="73" flags="abbreviation">LSTs</w>
@@ -40386,7 +40380,6 @@
  <w f="72" flags="">backwardness</w>
  <w f="72" flags="">baker's</w>
  <w f="72" flags="">ballrooms</w>
- <w f="72" flags="">banc</w>
  <w f="72" flags="">bane</w>
  <w f="72" flags="">bangs</w>
  <w f="72" flags="">banishing</w>
@@ -41072,6 +41065,7 @@
  <w f="72" flags="">shunning</w>
  <w f="72" flags="">shunted</w>
  <w f="72" flags="">shuttle's</w>
+ <w f="72" flags="">sigh</w>
  <w f="72" flags="">signalized</w>
  <w f="72" flags="">siltstone</w>
  <w f="72" flags="">silversmith</w>
@@ -42718,7 +42712,6 @@
  <w f="70" flags="abbreviation">DPI</w>
  <w f="70" flags="abbreviation">DSE</w>
  <w f="70" flags="">Daniela</w>
- <w f="70" flags="">Darin</w>
  <w f="70" flags="">Darlene</w>
  <w f="70" flags="">Darnell</w>
  <w f="70" flags="">Dawson's</w>
@@ -43390,6 +43383,7 @@
  <w f="70" flags="">gash</w>
  <w f="70" flags="">gaudy</w>
  <w f="70" flags="">gazette</w>
+ <w f="70">gelato</w>
  <w f="70" flags="">genealogist</w>
  <w f="70" flags="">generalship</w>
  <w f="70" flags="">geopolitics</w>
@@ -43442,7 +43436,6 @@
  <w f="70" flags="">holdover</w>
  <w f="70" flags="">homeroom</w>
  <w f="70" flags="">homunculus</w>
- <w f="70" flags="">hoo</w>
  <w f="70" flags="">howl</w>
  <w f="70" flags="">huddled</w>
  <w f="70" flags="">hurtful</w>
@@ -45963,6 +45956,7 @@
  <w f="68" flags="">axils</w>
  <w f="68" flags="">axing</w>
  <w f="68" flags="">azimuthal</w>
+ <w f="68" flags="">babe</w>
  <w f="68" flags="">backlight</w>
  <w f="68" flags="">backplane</w>
  <w f="68" flags="">backwoods</w>
@@ -47635,7 +47629,6 @@
  <w f="67" flags="">cultists</w>
  <w f="67" flags="">curates</w>
  <w f="67" flags="">curbside</w>
- <w f="67" flags="">dag</w>
  <w f="67" flags="">dainty</w>
  <w f="67" flags="">dandelion</w>
  <w f="67" flags="">darkens</w>
@@ -47798,7 +47791,6 @@
  <w f="67" flags="">fuselages</w>
  <w f="67" flags="">futurism</w>
  <w f="67" flags="">gaffe</w>
- <w f="67" flags="">gage</w>
  <w f="67" flags="">gallery's</w>
  <w f="67" flags="">galls</w>
  <w f="67" flags="">gavel</w>
@@ -48007,7 +47999,6 @@
  <w f="67" flags="">mononucleosis</w>
  <w f="67" flags="">monoplanes</w>
  <w f="67" flags="">morphologies</w>
- <w f="67" flags="">mot</w>
  <w f="67" flags="">moto</w>
  <w f="67" flags="">mottling</w>
  <w f="67" flags="">mozzarella</w>
@@ -48238,7 +48229,6 @@
  <w f="67" flags="">shined</w>
  <w f="67" flags="">shipowners</w>
  <w f="67" flags="">shipper</w>
- <w f="67" flags="">shod</w>
  <w f="67" flags="">shrieking</w>
  <w f="67" flags="">shrugs</w>
  <w f="67" flags="">sibilants</w>
@@ -53723,7 +53713,6 @@
  <w f="63" flags="">autodidact</w>
  <w f="63" flags="">automates</w>
  <w f="63" flags="">avoirdupois</w>
- <w f="63" flags="">aw</w>
  <w f="63" flags="">backhoe</w>
  <w f="63" flags="">backstop</w>
  <w f="63" flags="">balancer</w>
@@ -54035,7 +54024,6 @@
  <w f="63" flags="">gummy</w>
  <w f="63" flags="">gunfights</w>
  <w f="63" flags="">gunge</w>
- <w f="63" flags="">hake</w>
  <w f="63" flags="">halftone</w>
  <w f="63" flags="">halva</w>
  <w f="63" flags="">handrail</w>
@@ -54609,7 +54597,6 @@
  <w f="63" flags="">triplane</w>
  <w f="63" flags="">trotters</w>
  <w f="63" flags="">truant</w>
- <w f="63" flags="">tsars</w>
  <w f="63" flags="">tuatara</w>
  <w f="63" flags="">tufa</w>
  <w f="63" flags="">tummy</w>
@@ -55454,7 +55441,6 @@
  <w f="62" flags="">coproduct</w>
  <w f="62" flags="">corbelled</w>
  <w f="62" flags="">coreligionists</w>
- <w f="62" flags="">corm</w>
  <w f="62" flags="">corms</w>
  <w f="62" flags="">cornstarch</w>
  <w f="62" flags="">corrals</w>
@@ -58924,7 +58910,6 @@
  <w f="60" flags="">longshoreman</w>
  <w f="60" flags="">longterm</w>
  <w f="60" flags="">lugger</w>
- <w f="60" flags="">lune</w>
  <w f="60" flags="">luteinizing</w>
  <w f="60" flags="">madmen</w>
  <w f="60" flags="">madre</w>
@@ -60557,6 +60542,7 @@
  <w f="59" flags="">majlis</w>
  <w f="59" flags="">maniacally</w>
  <w f="59" flags="">mantlet</w>
+ <w f="59" flags="">manu</w>
  <w f="59" flags="">mapper</w>
  <w f="59" flags="">marjoram</w>
  <w f="59" flags="">mars</w>
@@ -60891,7 +60877,6 @@
  <w f="59" flags="">similitude</w>
  <w f="59" flags="">singed</w>
  <w f="59" flags="">sinning</w>
- <w f="59" flags="">siring</w>
  <w f="59" flags="">skein</w>
  <w f="59" flags="">skin's</w>
  <w f="59" flags="">skipjack</w>
@@ -62474,7 +62459,6 @@
  <w f="58" flags="">solvated</w>
  <w f="58" flags="">songwriter's</w>
  <w f="58" flags="">sop</w>
- <w f="58" flags="">sori</w>
  <w f="58" flags="">sorority's</w>
  <w f="58" flags="">sotto</w>
  <w f="58" flags="">southerner</w>
@@ -63590,7 +63574,6 @@
  <w f="57" flags="">garrulous</w>
  <w f="57" flags="">gazebos</w>
  <w f="57" flags="">gelatine</w>
- <w f="57" flags="">geld</w>
  <w f="57" flags="">gelled</w>
  <w f="57" flags="">generalities</w>
  <w f="57" flags="">genotyping</w>
@@ -64239,7 +64222,6 @@
  <w f="57" flags="">unum</w>
  <w f="57" flags="">upperclassman</w>
  <w f="57" flags="">urbanites</w>
- <w f="57" flags="abbreviation">usr</w>
  <w f="57" flags="">utility's</w>
  <w f="57" flags="">vanities</w>
  <w f="57" flags="">vaqueros</w>
@@ -64982,7 +64964,6 @@
  <w f="56" flags="">crock</w>
  <w f="56" flags="">croplands</w>
  <w f="56" flags="">crosswalks</w>
- <w f="56" flags="">culm</w>
  <w f="56" flags="">curettage</w>
  <w f="56" flags="">currency's</w>
  <w f="56" flags="">cursors</w>
@@ -65433,7 +65414,6 @@
  <w f="56" flags="">nighters</w>
  <w f="56" flags="">nightspot</w>
  <w f="56" flags="">nightstick</w>
- <w f="56" flags="">nim</w>
  <w f="56" flags="">ninetieth</w>
  <w f="56" flags="">nix</w>
  <w f="56" flags="">nocturne</w>
@@ -65901,7 +65881,6 @@
  <w f="56" flags="">unpronounceable</w>
  <w f="56" flags="">unread</w>
  <w f="56" flags="">unselected</w>
- <w f="56" flags="">unser</w>
  <w f="56" flags="">unsparing</w>
  <w f="56" flags="">unsporting</w>
  <w f="56" flags="">unsupportive</w>
@@ -66977,6 +66956,7 @@
  <w f="55" flags="">glissandi</w>
  <w f="55" flags="">gloat</w>
  <w f="55" flags="">glum</w>
+ <w f="55" flags="">gnat</w>
  <w f="55" flags="">gnostics</w>
  <w f="55" flags="">goannas</w>
  <w f="55" flags="">goddess's</w>
@@ -68564,7 +68544,6 @@
  <w f="54" flags="">homeschoolers</w>
  <w f="54" flags="">horsewoman</w>
  <w f="54" flags="">horticulturalists</w>
- <w f="54" flags="abbreviation">hos</w>
  <w f="54" flags="">hotlines</w>
  <w f="54" flags="">hovel</w>
  <w f="54" flags="">huckleberry</w>
@@ -68635,7 +68614,6 @@
  <w f="54" flags="">lacewings</w>
  <w f="54" flags="">ladybird</w>
  <w f="54" flags="">laser's</w>
- <w f="54" flags="abbreviation">lats</w>
  <w f="54" flags="">leafhoppers</w>
  <w f="54" flags="">leaper</w>
  <w f="54" flags="">leapfrogging</w>
@@ -68653,7 +68631,6 @@
  <w f="54" flags="">llanos</w>
  <w f="54" flags="">lobules</w>
  <w f="54" flags="">locksmiths</w>
- <w f="54" flags="">loge</w>
  <w f="54" flags="">logjam</w>
  <w f="54" flags="">longhaired</w>
  <w f="54" flags="">lube</w>
@@ -70164,7 +70141,6 @@
  <w f="53" flags="">henpecked</w>
  <w f="53" flags="">herpetologists</w>
  <w f="53" flags="">hessian</w>
- <w f="53" flags="abbreviation">hf</w>
  <w f="53" flags="">hibernacula</w>
  <w f="53" flags="">hindbrain</w>
  <w f="53" flags="">hinging</w>
@@ -71459,7 +71435,6 @@
  <w f="52" flags="">aquarium's</w>
  <w f="52" flags="">aquiline</w>
  <w f="52" flags="">arctangent</w>
- <w f="52" flags="">ares</w>
  <w f="52" flags="">aristocracies</w>
  <w f="52" flags="">armigerous</w>
  <w f="52" flags="">armlet</w>
@@ -71746,7 +71721,6 @@
  <w f="52" flags="">encroaches</w>
  <w f="52" flags="">enigmas</w>
  <w f="52" flags="">enigmatically</w>
- <w f="52" flags="abbreviation">ens</w>
  <w f="52" flags="">entrancing</w>
  <w f="52" flags="">entreaty</w>
  <w f="52" flags="">enuresis</w>
@@ -72555,7 +72529,6 @@
  <w f="52" flags="">virtuality</w>
  <w f="52" flags="">virus's</w>
  <w f="52" flags="">vivace</w>
- <w f="52" flags="">vive</w>
  <w f="52" flags="">voicework</w>
  <w f="52" flags="">volcanology</w>
  <w f="52" flags="">volleying</w>
@@ -73475,7 +73448,6 @@
  <w f="51" flags="">kukri</w>
  <w f="51" flags="">kumquat</w>
  <w f="51" flags="">kwashiorkor</w>
- <w f="51" flags="">lade</w>
  <w f="51" flags="">lamp's</w>
  <w f="51" flags="">lampshade</w>
  <w f="51" flags="">lantana</w>
@@ -77691,7 +77663,6 @@
  <w f="48" flags="">calypsos</w>
  <w f="48" flags="">caracaras</w>
  <w f="48" flags="">carburizing</w>
- <w f="48" flags="">carder</w>
  <w f="48" flags="">careerist</w>
  <w f="48" flags="">carny</w>
  <w f="48" flags="">carotenes</w>
@@ -78487,7 +78458,6 @@
  <w f="48" flags="">rhomboidal</w>
  <w f="48" flags="">rills</w>
  <w f="48" flags="">rivalry's</w>
- <w f="48" flags="">rive</w>
  <w f="48" flags="">riviera</w>
  <w f="48" flags="">romps</w>
  <w f="48" flags="">router's</w>
@@ -78584,7 +78554,6 @@
  <w f="48" flags="">sorbate</w>
  <w f="48" flags="nonword">sorta</w>
  <w f="48" flags="">souffle</w>
- <w f="48" flags="">sough</w>
  <w f="48" flags="">southwardly</w>
  <w f="48" flags="">spacemen</w>
  <w f="48" flags="">spanker</w>
@@ -78954,7 +78923,6 @@
  <w f="47" flags="">Gawain's</w>
  <w f="47" flags="">Geber</w>
  <w f="47" flags="">Ghiberti</w>
- <w f="47" flags="abbreviation">Gib</w>
  <w f="47" flags="">Gibsons</w>
  <w f="47" flags="">Glenora</w>
  <w f="47" flags="">Golden's</w>
@@ -80059,7 +80027,6 @@
  <w f="47" flags="">shebang</w>
  <w f="47" flags="">sheepfold</w>
  <w f="47" flags="">sher</w>
- <w f="47" flags="">sherd</w>
  <w f="47" flags="">shoos</w>
  <w f="47" flags="">shoplift</w>
  <w f="47" flags="">shorthaired</w>
@@ -81048,7 +81015,6 @@
  <w f="46" flags="">freebooter</w>
  <w f="46" flags="">freelances</w>
  <w f="46" flags="">fusel</w>
- <w f="46" flags="">gad</w>
  <w f="46" flags="">gaffs</w>
  <w f="46" flags="">gamemasters</w>
  <w f="46" flags="">gapes</w>
@@ -81396,7 +81362,6 @@
  <w f="46">piste</w>
  <w f="46" flags="">pithead</w>
  <w f="46" flags="">placekicking</w>
- <w f="46" flags="">plage</w>
  <w f="46" flags="">planchette</w>
  <w f="46" flags="">playas</w>
  <w f="46" flags="">playbacks</w>
@@ -82665,7 +82630,6 @@
  <w f="45" flags="">factor's</w>
  <w f="45" flags="">fairy's</w>
  <w f="45" flags="">faits</w>
- <w f="45" flags="">faller</w>
  <w f="45" flags="">fallowing</w>
  <w f="45" flags="">fanboys</w>
  <w f="45" flags="">fancying</w>
@@ -82769,7 +82733,6 @@
  <w f="45" flags="">gym's</w>
  <w f="45" flags="">hacker's</w>
  <w f="45" flags="">hallelujah</w>
- <w f="45" flags="">hame</w>
  <w f="45" flags="">hank</w>
  <w f="45" flags="">hankering</w>
  <w f="45" flags="">hanky</w>
@@ -84350,7 +84313,6 @@
  <w f="44" flags="">divestments</w>
  <w f="44" flags="">do-gooders</w>
  <w f="44" flags="">documentable</w>
- <w f="44" flags="">don</w>
  <w f="44" flags="">donator</w>
  <w f="44" flags="">doorposts</w>
  <w f="44" flags="">doublespeak</w>
@@ -87033,7 +86995,6 @@
  <w f="42" flags="">anticarcinogenic</w>
  <w f="42" flags="">antipasto</w>
  <w f="42" flags="">antlions</w>
- <w f="42" flags="">anu</w>
  <w f="42" flags="">anxiousness</w>
  <w f="42" flags="">apartness</w>
  <w f="42" flags="">ape's</w>
@@ -87998,7 +87959,6 @@
  <w f="42" flags="">washstand</w>
  <w f="42" flags="">waviness</w>
  <w f="42" flags="">wayfaring</w>
- <w f="42" flags="">weil</w>
  <w f="42" flags="">wickedest</w>
  <w f="42" flags="">wiggled</w>
  <w f="42" flags="">wireworks</w>
@@ -88822,7 +88782,6 @@
  <w f="41" flags="">henhouse</w>
  <w f="41" flags="">hereabouts</w>
  <w f="41" flags="">hereunto</w>
- <w f="41" flags="">herm</w>
  <w f="41">herniation</w>
  <w f="41" flags="">highveld</w>
  <w f="41" flags="">hinter</w>
@@ -90380,6 +90339,7 @@
  <w f="40" flags="">housemother</w>
  <w f="40" flags="">houseware</w>
  <w f="40" flags="">housewife's</w>
+ <w f="40">how'll</w>
  <w f="40" flags="">hucksters</w>
  <w f="40" flags="">humbles</w>
  <w f="40" flags="">hurling's</w>
@@ -92169,7 +92129,6 @@
  <w f="39" flags="">kedge</w>
  <w f="39" flags="">keyrings</w>
  <w f="39" flags="">kibble</w>
- <w f="39">kine</w>
  <w f="39" flags="">kingless</w>
  <w f="39" flags="">kinkajous</w>
  <w f="39" flags="">knot's</w>
@@ -93128,7 +93087,6 @@
  <w f="38" flags="">beanball</w>
  <w f="38" flags="">bedazzled</w>
  <w f="38" flags="">bezant</w>
- <w f="38" flags="abbreviation">bf</w>
  <w f="38" flags="">bights</w>
  <w f="38" flags="australian">bilbies</w>
  <w f="38" flags="">bilked</w>
@@ -93621,7 +93579,6 @@
  <w f="38" flags="">seaboards</w>
  <w f="38" flags="">selectiveness</w>
  <w f="38" flags="">selvages</w>
- <w f="38" flags="">sere</w>
  <w f="38" flags="">serf's</w>
  <w f="38" flags="">servomotors</w>
  <w f="38" flags="">severability</w>
@@ -96359,7 +96316,6 @@
  <w f="36" flags="">laminator</w>
  <w f="36" flags="">landlessness</w>
  <w f="36" flags="">launders</w>
- <w f="36" flags="">lave</w>
  <w f="36" flags="">leathern</w>
  <w f="36" flags="">leeboard</w>
  <w f="36" flags="">leeched</w>
@@ -96657,7 +96613,6 @@
  <w f="36" flags="">thanksgivings</w>
  <w f="36" flags="">thereabout</w>
  <w f="36">thermocouple</w>
- <w f="36">thews</w>
  <w f="36">thyristors</w>
  <w f="36" flags="">tieback</w>
  <w f="36" flags="">tinkerers</w>
@@ -98264,7 +98219,6 @@
  <w f="35" flags="">librates</w>
  <w f="35" flags="">licitly</w>
  <w f="35" flags="">lid's</w>
- <w f="35" flags="">lief</w>
  <w f="35" flags="">lifebuoy</w>
  <w f="35" flags="">lifebuoys</w>
  <w f="35" flags="">lightering</w>
@@ -100031,7 +99985,6 @@
  <w f="34" flags="">nonfinancial</w>
  <w f="34" flags="">noninflammatory</w>
  <w f="34" flags="">nontarget</w>
- <w f="34" flags="">norn</w>
  <w f="34" flags="">northland</w>
  <w f="34" flags="">nosebands</w>
  <w f="34" flags="">novice's</w>
@@ -102828,7 +102781,6 @@
  <w f="32" flags="">localists</w>
  <w f="32" flags="">loco's</w>
  <w f="32" flags="">locomote</w>
- <w f="32" flags="">lod</w>
  <w f="32" flags="">loiters</w>
  <w f="32" flags="">loquacity</w>
  <w f="32" flags="">lumpfish</w>
@@ -104872,7 +104824,6 @@
  <w f="31" flags="">tideway</w>
  <w f="31" flags="">tintinnabulum</w>
  <w f="31" flags="">titter</w>
- <w f="31">tole</w>
  <w f="31" flags="">tonsuring</w>
  <w f="31" flags="">toots</w>
  <w f="31" flags="">totting</w>
@@ -105818,7 +105769,6 @@
  <w f="30" flags="">dignitary's</w>
  <w f="30" flags="">dilapidations</w>
  <w f="30" flags="">dimerizing</w>
- <w f="30" flags="">dingle</w>
  <w f="30" flags="">dirties</w>
  <w f="30" flags="">disagreeably</w>
  <w f="30" flags="">disbelievingly</w>
@@ -106861,7 +106811,6 @@
  <w f="29">cetacean</w>
  <w f="29">commutators</w>
  <w f="29">conventicle</w>
- <w f="29">dieing</w>
  <w f="29">disembowelment</w>
  <w f="29">embryologist</w>
  <w f="29">etiologic</w>
@@ -106895,7 +106844,6 @@
  <w f="29">versicle</w>
  <w f="29">villus</w>
  <w f="29">voltmeters</w>
- <w f="29">weer</w>
  <w f="28" flags="">Abelard's</w>
  <w f="28" flags="">Adeste</w>
  <w f="28" flags="">Aggie's</w>
@@ -108108,7 +108056,6 @@
  <w f="28" flags="">linearizable</w>
  <w f="28" flags="">linkboy</w>
  <w f="28" flags="">linnets</w>
- <w f="28" flags="">lins</w>
  <w f="28" flags="">lissome</w>
  <w f="28" flags="">literariness</w>
  <w f="28" flags="">littles</w>
@@ -110154,7 +110101,6 @@
  <w f="27" flags="">icemen</w>
  <w f="27" flags="">icepacks</w>
  <w f="27" flags="">ideate</w>
- <w f="27" flags="abbreviation">ided</w>
  <w f="27" flags="">idiomorphic</w>
  <w f="27" flags="">idiot's</w>
  <w f="27" flags="">illyricum</w>
@@ -112906,7 +112852,6 @@
  <w f="25" flags="">mastermind's</w>
  <w f="25" flags="">masticating</w>
  <w f="25" flags="">mastics</w>
- <w f="25" flags="">maun</w>
  <w f="25" flags="">maundering</w>
  <w f="25" flags="">maundy</w>
  <w f="25" flags="">mayer</w>
@@ -114693,7 +114638,6 @@
  <w f="23" flags="">awardee's</w>
  <w f="23" flags="">awarder</w>
  <w f="23" flags="">axle's</w>
- <w f="23">baaed</w>
  <w f="23" flags="">backbends</w>
  <w f="23" flags="">backcourts</w>
  <w f="23" flags="">backhanding</w>
@@ -115269,7 +115213,6 @@
  <w f="23" flags="">fibrillations</w>
  <w f="23" flags="">fieldfares</w>
  <w f="23" flags="">fiend's</w>
- <w f="23" flags="">fifing</w>
  <w f="23" flags="">fifteen's</w>
  <w f="23" flags="">fir's</w>
  <w f="23" flags="">firecrest</w>
@@ -115449,7 +115392,6 @@
  <w f="23" flags="technical">hemangioendotheliomas</w>
  <w f="23" flags="">henhouses</w>
  <w f="23" flags="">heroisms</w>
- <w f="23" flags="">hest</w>
  <w f="23" flags="">high-falutin'</w>
  <w f="23" flags="">highchair</w>
  <w f="23" flags="">highfalutin</w>
@@ -116152,7 +116094,6 @@
  <w f="23" flags="">rambutans</w>
  <w f="23" flags="">rampion</w>
  <w f="23" flags="">ranking's</w>
- <w f="23" flags="">rankly</w>
  <w f="23" flags="">rarefactions</w>
  <w f="23" flags="">rarefy</w>
  <w f="23" flags="">ratafia</w>
@@ -118399,7 +118340,6 @@
  <w f="21" flags="">emprise</w>
  <w f="21" flags="">en's</w>
  <w f="21" flags="">enamelwork</w>
- <w f="21" flags="abbreviation">enc</w>
  <w f="21" flags="">endangerments</w>
  <w f="21" flags="">endon</w>
  <w f="21" flags="">enfeeble</w>
@@ -118833,7 +118773,6 @@
  <w f="21" flags="">indiscriminating</w>
  <w f="21" flags="">indological</w>
  <w f="21" flags="">indology</w>
- <w f="21" flags="">indre</w>
  <w f="21" flags="">indwelt</w>
  <w f="21" flags="">ineffaceable</w>
  <w f="21" flags="">ineffectuality</w>
@@ -119221,7 +119160,6 @@
  <w f="21" flags="">nonvocal</w>
  <w f="21" flags="">nonvoluntary</w>
  <w f="21" flags="">northeasterner</w>
- <w f="21" flags="">noth</w>
  <w f="21" flags="">nourisher</w>
  <w f="21" flags="">novelettish</w>
  <w f="21" flags="">nucleus's</w>
@@ -119230,7 +119168,6 @@
  <w f="21" flags="">nuttiest</w>
  <w f="21" flags="abbreviation">nyx</w>
  <w f="21" flags="">oarswomen</w>
- <w f="21" flags="">oater</w>
  <w f="21" flags="">obscurest</w>
  <w f="21" flags="">observantly</w>
  <w f="21" flags="">obstante</w>
@@ -119322,7 +119259,6 @@
  <w f="21" flags="">parches</w>
  <w f="21" flags="">pareira</w>
  <w f="21" flags="">parenthetic</w>
- <w f="21" flags="">parer</w>
  <w f="21" flags="">parfleche</w>
  <w f="21" flags="">parser's</w>
  <w f="21" flags="">parsings</w>
@@ -119330,7 +119266,6 @@
  <w f="21" flags="">passivism</w>
  <w f="21" flags="">passkeys</w>
  <w f="21" flags="">passworded</w>
- <w f="21" flags="">pated</w>
  <w f="21" flags="">pathway's</w>
  <w f="21" flags="">patrologist</w>
  <w f="21" flags="">pavement's</w>
@@ -120313,7 +120248,6 @@
  <w f="21" flags="">weldings</w>
  <w f="21" flags="">wetland's</w>
  <w f="21" flags="">wheelchair's</w>
- <w f="21" flags="">whets</w>
  <w f="21" flags="">whiffling</w>
  <w f="21" flags="">whimbrels</w>
  <w f="21" flags="">whippoorwill</w>
@@ -122486,7 +122420,6 @@
  <w f="18" flags="">galingale</w>
  <w f="18" flags="">gambrels</w>
  <w f="18" flags="">gamesmen</w>
- <w f="18" flags="">gams</w>
  <w f="18" flags="">garde's</w>
  <w f="18" flags="">garnishee</w>
  <w f="18" flags="">garths</w>
@@ -122901,7 +122834,6 @@
  <w f="18" flags="">jolliness</w>
  <w f="18" flags="">jonquils</w>
  <w f="18" flags="">journalling</w>
- <w f="18" flags="australian">jube</w>
  <w f="18" flags="">jubes</w>
  <w f="18" flags="">judaizers</w>
  <w f="18" flags="">judgmentally</w>
@@ -124087,7 +124019,6 @@
  <w f="18" flags="">shoebills</w>
  <w f="18" flags="">shopkeep</w>
  <w f="18" flags="">shotgunned</w>
- <w f="18" flags="">shott</w>
  <w f="18" flags="">showmen's</w>
  <w f="18" flags="">shunter's</w>
  <w f="18" flags="">siccing</w>
@@ -125044,7 +124975,6 @@
  <w f="15" flags="">Commissar's</w>
  <w f="15" flags="">Computerworld's</w>
  <w f="15" flags="">Conger's</w>
- <w f="15" flags="">Conni</w>
  <w f="15" flags="">Conservatorium's</w>
  <w f="15" flags="">Continent's</w>
  <w f="15" flags="">Copernicans</w>
@@ -126138,7 +126068,6 @@
  <w f="15" flags="">archenemy's</w>
  <w f="15" flags="">archery's</w>
  <w f="15" flags="">ardours</w>
- <w f="15" flags="">ards</w>
  <w f="15" flags="">areaway</w>
  <w f="15" flags="">arisings</w>
  <w f="15" flags="">arithmetician</w>
@@ -126450,7 +126379,6 @@
  <w f="15">calcine</w>
  <w f="15" flags="">calculous</w>
  <w f="15" flags="">caliper's</w>
- <w f="15" flags="">calked</w>
  <w f="15" flags="">calks</w>
  <w f="15" flags="">calligraphists</w>
  <w f="15" flags="">callowness</w>
@@ -127712,7 +127640,6 @@
  <w f="15" flags="">hogmanay</w>
  <w f="15" flags="">hognut</w>
  <w f="15" flags="">hogweeds</w>
- <w f="15" flags="">hoke</w>
  <w f="15" flags="">holdbacks</w>
  <w f="15" flags="">homebuild</w>
  <w f="15" flags="">homeworker</w>
@@ -138310,6 +138237,7 @@
  <w f="10" flags="">wettish</w>
  <w f="10" flags="">whammies</w>
  <w f="10" flags="nonword">what'd</w>
+ <w f="10">what'm</w>
  <w f="10" flags="">wheelbarrow's</w>
  <w f="10" flags="">wheezers</w>
  <w f="10" flags="">whelm</w>
@@ -138331,6 +138259,7 @@
  <w f="10" flags="">whoas</w>
  <w f="10" flags="">whoopers</w>
  <w f="10" flags="">whopped</w>
+ <w f="10">why'll</w>
  <w f="10" flags="">widgeons</w>
  <w f="10" flags="">widgie</w>
  <w f="10" flags="">wight's</w>
@@ -138607,7 +138536,6 @@
  <w f="6">weaponry's</w>
  <w f="6">womb's</w>
  <w f="6">yearningly</w>
- <w f="5" flags="">babe</w>
  <w f="4" flags="">bandannas</w>
  <w f="2">Babels</w>
  <w f="2">Caucasoids</w>
@@ -148018,7 +147946,6 @@
  <w f="1" flags="">beet's</w>
  <w f="1">beetroot's</w>
  <w f="1">befogging</w>
- <w f="1" flags="">befogs</w>
  <w f="1" flags="">beggarweed</w>
  <w f="1" flags="">begird</w>
  <w f="1" flags="">begirt</w>
@@ -149608,7 +149535,6 @@
  <w f="1" flags="">dandles</w>
  <w f="1" flags="">danged</w>
  <w f="1" flags="">dangler</w>
- <w f="1" flags="">dankly</w>
  <w f="1" flags="">dappers</w>
  <w f="1" flags="">darer</w>
  <w f="1" flags="">darkener</w>
@@ -150229,7 +150155,6 @@
  <w f="1" flags="">duckweed's</w>
  <w f="1" flags="">dudeen</w>
  <w f="1" flags="">dudgeons</w>
- <w f="1" flags="">duding</w>
  <w f="1" flags="">dueler</w>
  <w f="1" flags="">duesseldorf</w>
  <w f="1" flags="">duffels</w>
@@ -150768,7 +150693,6 @@
  <w f="1" flags="">fatefulness</w>
  <w f="1" flags="">fathead's</w>
  <w f="1" flags="">fatigue's</w>
- <w f="1" flags="">fatly</w>
  <w f="1" flags="">fatteners</w>
  <w f="1" flags="">fattish</w>
  <w f="1" flags="">fatuities</w>
@@ -151066,7 +150990,6 @@
  <w f="1" flags="">forfeiture's</w>
  <w f="1" flags="">forgivingly</w>
  <w f="1" flags="">forgoer</w>
- <w f="1" flags="">forker</w>
  <w f="1" flags="">forkers</w>
  <w f="1">forkfuls</w>
  <w f="1" flags="">forlornest</w>
@@ -156536,7 +156459,6 @@
  <w f="1" flags="">serfage</w>
  <w f="1" flags="">serfhood</w>
  <w f="1" flags="">sergeantcy</w>
- <w f="1" flags="">serged</w>
  <w f="1" flags="">serialism's</w>
  <w f="1" flags="">serialization's</w>
  <w f="1" flags="">seriography</w>
@@ -159028,7 +158950,6 @@
  <w f="1" flags="">wheelage</w>
  <w f="1" flags="">wheelbarrowing</w>
  <w f="1" flags="">wheelings</w>
- <w f="1" flags="">whees</w>
  <w f="1" flags="">wheezily</w>
  <w f="1" flags="">whelk's</w>
  <w f="1" flags="">wherry's</w>
@@ -159214,7 +159135,6 @@
  <w f="1" flags="">yawps</w>
  <w f="1" flags="">yayed</w>
  <w f="1" flags="">yays</w>
- <w f="1" flags="">yean</w>
  <w f="1" flags="">yeaned</w>
  <w f="1">year-end</w>
  <w f="1" flags="">yearlies</w>
@@ -159331,6 +159251,7 @@
  <w f="0" flags="offensive">Kahuna's</w>
  <w f="0" flags="medical">Kaif's</w>
  <w f="0" flags="babytalk">Kaka's</w>
+ <w f="0" flags="">LAN</w>
  <w f="0" flags="">LG</w>
  <w f="0" flags="">LP</w>
  <w f="0" flags="abbreviation">LSAT</w>
@@ -159434,6 +159355,7 @@
  <w f="0" flags="">auk</w>
  <w f="0" flags="medical">autosexing</w>
  <w f="0" flags="">aver</w>
+ <w f="0" flags="">aw</w>
  <w f="0" flags="">awn</w>
  <w f="0" flags="n">babes</w>
  <w f="0" flags="medical">baculums</w>
@@ -159461,6 +159383,7 @@
  <w f="0" flags="e">bestial</w>
  <w f="0" flags="n">bestiality</w>
  <w f="0" flags="medical">bestialize</w>
+ <w f="0" flags="abbreviation">bf</w>
  <w f="0" flags="">bimbos</w>
  <w f="0" flags="r">bitch</w>
  <w f="0" flags="">bitch's</w>
@@ -159781,6 +159704,7 @@
  <w f="0" flags="offensive">fuckings</w>
  <w f="0" flags="offensive">fucks</w>
  <w f="0" flags="">fwd</w>
+ <w f="0" flags="">gage</w>
  <w f="0" flags="n">gangbang</w>
  <w f="0" flags="n">gangbanged</w>
  <w f="0" flags="n">gangbanging</w>
@@ -159800,7 +159724,6 @@
  <w f="0">glandes</w>
  <w f="0" flags="medical">glans</w>
  <w f="0">glans's</w>
- <w f="0" flags="">gnat</w>
  <w f="0" flags="nonword,offensive">goddammit</w>
  <w f="0" flags="offensive">goddamn</w>
  <w f="0" flags="offensive">goddamned</w>
@@ -159815,7 +159738,6 @@
  <w f="0" flags="medical">gonads</w>
  <w f="0" flags="medical">gonorrhea</w>
  <w f="0" flags="medical">gonorrheal</w>
- <w f="0">gook</w>
  <w f="0" flags="e">gooks</w>
  <w f="0" flags="medical">gossypol</w>
  <w f="0" flags="medical">gravida</w>
@@ -159860,6 +159782,7 @@
  <w f="0" flags="offensive">horniness</w>
  <w f="0" flags="offensive">horny</w>
  <w f="0" flags="offensive">horseshit</w>
+ <w f="0" flags="abbreviation">hr</w>
  <w f="0" flags="offensive">humping</w>
  <w f="0" flags="n">hustler</w>
  <w f="0" flags="medical">hymen</w>
@@ -160316,10 +160239,9 @@
  <w f="0" flags="offensive">shittiest</w>
  <w f="0" flags="offensive">shitting</w>
  <w f="0" flags="offensive">shitty</w>
+ <w f="0" flags="">shod</w>
  <w f="0" flags="n">shrimping</w>
- <w f="0" flags="">sigh</w>
  <w f="0" flags="e">silverback</w>
- <w f="0" flags="">sith</w>
  <w f="0" flags="offensive">skat</w>
  <w f="0" flags="n">slit</w>
  <w f="0">slut</w>
@@ -160471,7 +160393,6 @@
  <w f="0" flags="medical">tribades</w>
  <w f="0" flags="medical">tribadism</w>
  <w f="0" flags="">tty</w>
- <w f="0" flags="">tun</w>
  <w f="0" flags="offensive">turd</w>
  <w f="0" flags="offensive">turds</w>
  <w f="0" flags="babytalk">twat</w>
@@ -160614,6 +160535,7 @@
  <w f="0" flags="medical">virginity</w>
  <w f="0">virginity's</w>
  <w f="0" flags="babytalk">virgins</w>
+ <w f="0">vis</w>
  <w f="0" flags="">voyeur</w>
  <w f="0" flags="n">voyeurism</w>
  <w f="0" flags="n">voyeurs</w>
@@ -160639,6 +160561,7 @@
  <w f="0" flags="e">wetback</w>
  <w f="0" flags="e">wetbacks</w>
  <w f="0" flags="offensive">whang</w>
+ <w f="0" flags="">whets</w>
  <w f="0" flags="e">whitey</w>
  <w f="0" flags="offensive">whore</w>
  <w f="0" flags="offensive">whore's</w>
diff --git a/dictionaries/en_wordlist.xml b/dictionaries/en_wordlist.xml
index 85b50dd..6f594d5 100644
--- a/dictionaries/en_wordlist.xml
+++ b/dictionaries/en_wordlist.xml
@@ -1,4 +1,4 @@
-<wordlist locale="en" description="English" date="1338457502" version="14">
+<wordlist locale="en" description="English" date="1340038727" version="16">
  <w f="222" flags="">the</w>
  <w f="214" flags="">of</w>
  <w f="212" flags="">and</w>
@@ -29,6 +29,7 @@
  <w f="182" flags="">has</w>
  <w f="181" flags="">but</w>
  <w f="180" flags="">first</w>
+ <w f="180" flags="">very</w>
  <w f="180" flags="">we</w>
  <w f="179" flags="">one</w>
  <w f="179" flags="">their</w>
@@ -162,7 +163,6 @@
  <w f="160" flags="">too</w>
  <w f="160" flags="n">up</w>
  <w f="160" flags="">us</w>
- <w f="160" flags="">very</w>
  <w f="160" flags="">won</w>
  <w f="160" flags="">yes</w>
  <w f="160" flags="">you're</w>
@@ -7509,6 +7509,7 @@
  <w f="110" flags="">jumped</w>
  <w f="110" flags="">keeper</w>
  <w f="110" flags="">kindergarten</w>
+ <w f="110" flags="">kitten</w>
  <w f="110" flags="">knight</w>
  <w f="110" flags="">lasts</w>
  <w f="110" flags="">latitude</w>
@@ -7951,6 +7952,7 @@
  <w f="109" flags="abbreviation">kHz</w>
  <w f="109" flags="">kernel</w>
  <w f="109" flags="">kidney</w>
+ <w f="109" flags="">kittens</w>
  <w f="109" flags="">knockout</w>
  <w f="109" flags="">laboratories</w>
  <w f="109" flags="">lamp</w>
@@ -12399,6 +12401,7 @@
  <w f="100" flags="">heyday</w>
  <w f="100" flags="">highlighting</w>
  <w f="100" flags="">hospitalized</w>
+ <w f="100">how've</w>
  <w f="100" flags="">hugely</w>
  <w f="100" flags="">iPhone</w>
  <w f="100" flags="">identifiable</w>
@@ -13260,6 +13263,7 @@
  <w f="99" flags="">snail</w>
  <w f="99" flags="">snout</w>
  <w f="99" flags="">socket</w>
+ <w f="99" flags="">spacious</w>
  <w f="99" flags="">spawning</w>
  <w f="99" flags="">spearheaded</w>
  <w f="99" flags="">spelt</w>
@@ -13938,7 +13942,6 @@
  <w f="98" flags="">sourced</w>
  <w f="98" flags="">spaceship</w>
  <w f="98" flags="">spacing</w>
- <w f="98" flags="">spacious</w>
  <w f="98">spake</w>
  <w f="98" flags="">spam</w>
  <w f="98" flags="">specialising</w>
@@ -15499,7 +15502,6 @@
  <w f="95" flags="">Kazakhstan</w>
  <w f="95" flags="">Kirby</w>
  <w f="95" flags="">Kumar</w>
- <w f="95" flags="">LAN</w>
  <w f="95" flags="abbreviation">LPGA</w>
  <w f="95" flags="">Lahore</w>
  <w f="95" flags="">Lakers</w>
@@ -16458,7 +16460,6 @@
  <w f="94" flags="">detonation</w>
  <w f="94" flags="">dialog</w>
  <w f="94" flags="">dialogues</w>
- <w f="94">didst</w>
  <w f="94" flags="">diminish</w>
  <w f="94" flags="">din</w>
  <w f="94" flags="">diner</w>
@@ -20230,6 +20231,8 @@
  <w f="90" flags="">weir</w>
  <w f="90">well-being</w>
  <w f="90" flags="">wettest</w>
+ <w f="90">when's</w>
+ <w f="90">where'll</w>
  <w f="90" flags="">whipped</w>
  <w f="90" flags="">widowers</w>
  <w f="90" flags="">winner's</w>
@@ -23726,7 +23729,6 @@
  <w f="86" flags="">newsroom</w>
  <w f="86" flags="">nicely</w>
  <w f="86" flags="">nonviolent</w>
- <w f="86" flags="abbreviation">nos</w>
  <w f="86" flags="">noses</w>
  <w f="86" flags="">notations</w>
  <w f="86" flags="">novelization</w>
@@ -25907,7 +25909,6 @@
  <w f="84" flags="">ovate</w>
  <w f="84" flags="">overcomes</w>
  <w f="84" flags="">overloaded</w>
- <w f="84">overs</w>
  <w f="84" flags="">pacifism</w>
  <w f="84" flags="">paintball</w>
  <w f="84">paraplegics</w>
@@ -26937,7 +26938,6 @@
  <w f="83" flags="">kilowatts</w>
  <w f="83" flags="">kindergartens</w>
  <w f="83" flags="">kingdom's</w>
- <w f="83" flags="">kitten</w>
  <w f="83" flags="">knack</w>
  <w f="83" flags="">labours</w>
  <w f="83" flags="">lacquer</w>
@@ -28043,7 +28043,6 @@
  <w f="82" flags="">hoops</w>
  <w f="82" flags="">hospitalised</w>
  <w f="82" flags="">hovercraft</w>
- <w f="82" flags="abbreviation">hr</w>
  <w f="82" flags="">humanoids</w>
  <w f="82" flags="">hummingbird</w>
  <w f="82" flags="">hump</w>
@@ -28110,7 +28109,6 @@
  <w f="82" flags="">keenly</w>
  <w f="82" flags="">keypad</w>
  <w f="82" flags="">kidnappings</w>
- <w f="82" flags="">kittens</w>
  <w f="82" flags="">knitted</w>
  <w f="82" flags="">knuckle</w>
  <w f="82" flags="">lagged</w>
@@ -28557,7 +28555,6 @@
  <w f="82" flags="">wonderfully</w>
  <w f="82" flags="">workable</w>
  <w f="82" flags="">workmanship</w>
- <w f="82" flags="">yew</w>
  <w f="82" flags="">yin</w>
  <w f="82" flags="">zig</w>
  <w f="81" flags="">Aachen</w>
@@ -33049,7 +33046,6 @@
  <w f="78" flags="">lakeshore</w>
  <w f="78" flags="">laminar</w>
  <w f="78" flags="">landforms</w>
- <w f="78" flags="">lang</w>
  <w f="78" flags="">larceny</w>
  <w f="78" flags="">lard</w>
  <w f="78" flags="">largemouth</w>
@@ -33522,7 +33518,6 @@
  <w f="78" flags="">wholesaler</w>
  <w f="78" flags="">wikipedia</w>
  <w f="78" flags="">withering</w>
- <w f="78" flags="abbreviation">wo</w>
  <w f="78" flags="">woodwinds</w>
  <w f="78" flags="">wrangling</w>
  <w f="78" flags="">wrest</w>
@@ -34400,7 +34395,6 @@
  <w f="77" flags="">kitsch</w>
  <w f="77" flags="">knight's</w>
  <w f="77" flags="">knockouts</w>
- <w f="77" flags="">lain</w>
  <w f="77" flags="">landmines</w>
  <w f="77" flags="">language's</w>
  <w f="77" flags="">lapel</w>
@@ -34701,7 +34695,6 @@
  <w f="77" flags="">sidereal</w>
  <w f="77" flags="">simulcasted</w>
  <w f="77" flags="">sinuous</w>
- <w f="77" flags="">siting</w>
  <w f="77" flags="">skips</w>
  <w f="77" flags="">skylight</w>
  <w f="77" flags="">slays</w>
@@ -39239,6 +39232,7 @@
  <w f="73" flags="">Klondike</w>
  <w f="73" flags="">Kodiak</w>
  <w f="73" flags="">Kursk</w>
+ <w f="73">LAX</w>
  <w f="73" flags="abbreviation">LGPL</w>
  <w f="73" flags="abbreviation">LMP</w>
  <w f="73" flags="abbreviation">LSTs</w>
@@ -40945,7 +40939,6 @@
  <w f="72" flags="">backwardness</w>
  <w f="72" flags="">baker's</w>
  <w f="72" flags="">ballrooms</w>
- <w f="72" flags="">banc</w>
  <w f="72" flags="">bane</w>
  <w f="72" flags="">bangs</w>
  <w f="72" flags="">banishing</w>
@@ -41649,6 +41642,7 @@
  <w f="72" flags="">shunning</w>
  <w f="72" flags="">shunted</w>
  <w f="72" flags="">shuttle's</w>
+ <w f="72" flags="">sigh</w>
  <w f="72" flags="">signalized</w>
  <w f="72" flags="">siltstone</w>
  <w f="72" flags="">silversmith</w>
@@ -43336,7 +43330,6 @@
  <w f="70" flags="abbreviation">DSE</w>
  <w f="70" flags="abbreviation">DZ</w>
  <w f="70" flags="">Daniela</w>
- <w f="70" flags="">Darin</w>
  <w f="70" flags="">Darlene</w>
  <w f="70" flags="">Darnell</w>
  <w f="70" flags="">Dawson's</w>
@@ -44020,6 +44013,7 @@
  <w f="70" flags="">gash</w>
  <w f="70" flags="">gaudy</w>
  <w f="70" flags="">gazette</w>
+ <w f="70">gelato</w>
  <w f="70" flags="">genealogist</w>
  <w f="70" flags="">generalship</w>
  <w f="70" flags="">geopolitics</w>
@@ -44073,7 +44067,6 @@
  <w f="70" flags="">holdover</w>
  <w f="70" flags="">homeroom</w>
  <w f="70" flags="">homunculus</w>
- <w f="70" flags="">hoo</w>
  <w f="70" flags="">howl</w>
  <w f="70" flags="">huddled</w>
  <w f="70" flags="">hurtful</w>
@@ -46633,6 +46626,7 @@
  <w f="68" flags="">axils</w>
  <w f="68" flags="">axing</w>
  <w f="68" flags="">azimuthal</w>
+ <w f="68" flags="">babe</w>
  <w f="68" flags="">backlight</w>
  <w f="68" flags="">backplane</w>
  <w f="68" flags="">backwoods</w>
@@ -48341,7 +48335,6 @@
  <w f="67" flags="">cultists</w>
  <w f="67" flags="">curates</w>
  <w f="67" flags="">curbside</w>
- <w f="67" flags="">dag</w>
  <w f="67" flags="">dainty</w>
  <w f="67" flags="">dandelion</w>
  <w f="67" flags="">darkens</w>
@@ -48505,7 +48498,6 @@
  <w f="67" flags="">fuselages</w>
  <w f="67" flags="">futurism</w>
  <w f="67" flags="">gaffe</w>
- <w f="67" flags="">gage</w>
  <w f="67" flags="">gallery's</w>
  <w f="67" flags="">galls</w>
  <w f="67" flags="">gavel</w>
@@ -48719,7 +48711,6 @@
  <w f="67" flags="">mononucleosis</w>
  <w f="67" flags="">monoplanes</w>
  <w f="67" flags="">morphologies</w>
- <w f="67" flags="">mot</w>
  <w f="67" flags="">moto</w>
  <w f="67" flags="">mottling</w>
  <w f="67" flags="">mozzarella</w>
@@ -48955,7 +48946,6 @@
  <w f="67" flags="">shined</w>
  <w f="67" flags="">shipowners</w>
  <w f="67" flags="">shipper</w>
- <w f="67" flags="">shod</w>
  <w f="67" flags="">shrieking</w>
  <w f="67" flags="">shrugs</w>
  <w f="67" flags="">sibilants</w>
@@ -54562,7 +54552,6 @@
  <w f="63" flags="">autodidact</w>
  <w f="63" flags="">automates</w>
  <w f="63" flags="">avoirdupois</w>
- <w f="63" flags="">aw</w>
  <w f="63" flags="">backhoe</w>
  <w f="63" flags="">backstop</w>
  <w f="63" flags="">balancer</w>
@@ -54883,7 +54872,6 @@
  <w f="63" flags="">gummy</w>
  <w f="63" flags="">gunfights</w>
  <w f="63" flags="">gunge</w>
- <w f="63" flags="">hake</w>
  <w f="63" flags="">halftone</w>
  <w f="63" flags="">halva</w>
  <w f="63" flags="">handrail</w>
@@ -55477,7 +55465,6 @@
  <w f="63" flags="">triplane</w>
  <w f="63" flags="">trotters</w>
  <w f="63" flags="">truant</w>
- <w f="63" flags="">tsars</w>
  <w f="63" flags="">tuatara</w>
  <w f="63" flags="">tufa</w>
  <w f="63" flags="">tummy</w>
@@ -56344,7 +56331,6 @@
  <w f="62" flags="">coproduct</w>
  <w f="62" flags="">corbelled</w>
  <w f="62" flags="">coreligionists</w>
- <w f="62" flags="">corm</w>
  <w f="62" flags="">corms</w>
  <w f="62" flags="">cornstarch</w>
  <w f="62" flags="">corrals</w>
@@ -59888,7 +59874,6 @@
  <w f="60" flags="">longshoreman</w>
  <w f="60" flags="">longterm</w>
  <w f="60" flags="">lugger</w>
- <w f="60" flags="">lune</w>
  <w f="60" flags="">luteinizing</w>
  <w f="60" flags="">madmen</w>
  <w f="60" flags="">madre</w>
@@ -61565,6 +61550,7 @@
  <w f="59" flags="">majlis</w>
  <w f="59" flags="">maniacally</w>
  <w f="59" flags="">mantlet</w>
+ <w f="59" flags="">manu</w>
  <w f="59" flags="">mapper</w>
  <w f="59" flags="">marjoram</w>
  <w f="59" flags="">mars</w>
@@ -61917,7 +61903,6 @@
  <w f="59" flags="">similitude</w>
  <w f="59" flags="">singed</w>
  <w f="59" flags="">sinning</w>
- <w f="59" flags="">siring</w>
  <w f="59" flags="">skein</w>
  <w f="59" flags="">skin's</w>
  <w f="59" flags="">skipjack</w>
@@ -63549,7 +63534,6 @@
  <w f="58" flags="">solvated</w>
  <w f="58" flags="">songwriter's</w>
  <w f="58" flags="">sop</w>
- <w f="58" flags="">sori</w>
  <w f="58" flags="">sorority's</w>
  <w f="58" flags="">sotto</w>
  <w f="58" flags="">southerner</w>
@@ -64680,7 +64664,6 @@
  <w f="57" flags="">garrulous</w>
  <w f="57" flags="">gazebos</w>
  <w f="57" flags="">gelatine</w>
- <w f="57" flags="">geld</w>
  <w f="57" flags="">gelled</w>
  <w f="57" flags="">generalise</w>
  <w f="57" flags="">generalities</w>
@@ -65347,7 +65330,6 @@
  <w f="57" flags="">unum</w>
  <w f="57" flags="">upperclassman</w>
  <w f="57" flags="">urbanites</w>
- <w f="57" flags="abbreviation">usr</w>
  <w f="57" flags="">utility's</w>
  <w f="57" flags="">vanities</w>
  <w f="57" flags="">vaqueros</w>
@@ -66109,7 +66091,6 @@
  <w f="56" flags="">crock</w>
  <w f="56" flags="">croplands</w>
  <w f="56" flags="">crosswalks</w>
- <w f="56" flags="">culm</w>
  <w f="56" flags="">curettage</w>
  <w f="56" flags="">currency's</w>
  <w f="56" flags="">cursors</w>
@@ -66572,7 +66553,6 @@
  <w f="56" flags="">nighters</w>
  <w f="56" flags="">nightspot</w>
  <w f="56" flags="">nightstick</w>
- <w f="56" flags="">nim</w>
  <w f="56" flags="">ninetieth</w>
  <w f="56" flags="">nix</w>
  <w f="56" flags="">nocturne</w>
@@ -67060,7 +67040,6 @@
  <w f="56" flags="">unread</w>
  <w f="56" flags="">unrealised</w>
  <w f="56" flags="">unselected</w>
- <w f="56" flags="">unser</w>
  <w f="56" flags="">unsparing</w>
  <w f="56" flags="">unsporting</w>
  <w f="56" flags="">unsupportive</w>
@@ -68168,6 +68147,7 @@
  <w f="55" flags="">glissandi</w>
  <w f="55" flags="">gloat</w>
  <w f="55" flags="">glum</w>
+ <w f="55" flags="">gnat</w>
  <w f="55" flags="">gnostics</w>
  <w f="55" flags="">goannas</w>
  <w f="55" flags="">goddess's</w>
@@ -69802,7 +69782,6 @@
  <w f="54" flags="">homeschoolers</w>
  <w f="54" flags="">horsewoman</w>
  <w f="54" flags="">horticulturalists</w>
- <w f="54" flags="abbreviation">hos</w>
  <w f="54" flags="">hotlines</w>
  <w f="54" flags="">hovel</w>
  <w f="54" flags="">huckleberry</w>
@@ -69873,7 +69852,6 @@
  <w f="54" flags="">lacewings</w>
  <w f="54" flags="">ladybird</w>
  <w f="54" flags="">laser's</w>
- <w f="54" flags="abbreviation">lats</w>
  <w f="54" flags="">leafhoppers</w>
  <w f="54" flags="">leaper</w>
  <w f="54" flags="">leapfrogging</w>
@@ -69891,7 +69869,6 @@
  <w f="54" flags="">llanos</w>
  <w f="54" flags="">lobules</w>
  <w f="54" flags="">locksmiths</w>
- <w f="54" flags="">loge</w>
  <w f="54" flags="">logjam</w>
  <w f="54" flags="">lon</w>
  <w f="54" flags="">longhaired</w>
@@ -71454,7 +71431,6 @@
  <w f="53" flags="">henpecked</w>
  <w f="53" flags="">herpetologists</w>
  <w f="53" flags="">hessian</w>
- <w f="53" flags="abbreviation">hf</w>
  <w f="53" flags="">hibernacula</w>
  <w f="53" flags="">hindbrain</w>
  <w f="53" flags="">hinging</w>
@@ -72784,7 +72760,6 @@
  <w f="52" flags="">aquarium's</w>
  <w f="52" flags="">aquiline</w>
  <w f="52" flags="">arctangent</w>
- <w f="52" flags="">ares</w>
  <w f="52" flags="">aristocracies</w>
  <w f="52" flags="">armigerous</w>
  <w f="52" flags="">armlet</w>
@@ -73081,7 +73056,6 @@
  <w f="52" flags="">encroaches</w>
  <w f="52" flags="">enigmas</w>
  <w f="52" flags="">enigmatically</w>
- <w f="52" flags="abbreviation">ens</w>
  <w f="52" flags="">entrancing</w>
  <w f="52" flags="">entreaty</w>
  <w f="52" flags="">enuresis</w>
@@ -73927,7 +73901,6 @@
  <w f="52" flags="">virtuality</w>
  <w f="52" flags="">virus's</w>
  <w f="52" flags="">vivace</w>
- <w f="52" flags="">vive</w>
  <w f="52" flags="">voicework</w>
  <w f="52" flags="">volcanology</w>
  <w f="52" flags="">volleying</w>
@@ -74866,7 +74839,6 @@
  <w f="51" flags="">kukri</w>
  <w f="51" flags="">kumquat</w>
  <w f="51" flags="">kwashiorkor</w>
- <w f="51" flags="">lade</w>
  <w f="51" flags="">lamp's</w>
  <w f="51" flags="">lampshade</w>
  <w f="51" flags="">lantana</w>
@@ -79223,7 +79195,6 @@
  <w f="48" flags="">calypsos</w>
  <w f="48" flags="">caracaras</w>
  <w f="48" flags="">carburizing</w>
- <w f="48" flags="">carder</w>
  <w f="48" flags="">careerist</w>
  <w f="48" flags="">carny</w>
  <w f="48" flags="">carotenes</w>
@@ -80061,7 +80032,6 @@
  <w f="48" flags="">rhomboidal</w>
  <w f="48" flags="">rills</w>
  <w f="48" flags="">rivalry's</w>
- <w f="48" flags="">rive</w>
  <w f="48" flags="">riviera</w>
  <w f="48" flags="">romps</w>
  <w f="48" flags="">router's</w>
@@ -80159,7 +80129,6 @@
  <w f="48" flags="">sorbate</w>
  <w f="48" flags="nonword">sorta</w>
  <w f="48" flags="">souffle</w>
- <w f="48" flags="">sough</w>
  <w f="48" flags="">southwardly</w>
  <w f="48" flags="">spacemen</w>
  <w f="48" flags="">spanker</w>
@@ -80538,7 +80507,6 @@
  <w f="47" flags="">Gawain's</w>
  <w f="47" flags="">Geber</w>
  <w f="47" flags="">Ghiberti</w>
- <w f="47" flags="abbreviation">Gib</w>
  <w f="47" flags="">Gibsons</w>
  <w f="47" flags="">Glenora</w>
  <w f="47" flags="">Golden's</w>
@@ -81677,7 +81645,6 @@
  <w f="47" flags="">shebang</w>
  <w f="47" flags="">sheepfold</w>
  <w f="47" flags="">sher</w>
- <w f="47" flags="">sherd</w>
  <w f="47" flags="">shoos</w>
  <w f="47" flags="">shoplift</w>
  <w f="47" flags="">shorthaired</w>
@@ -82690,7 +82657,6 @@
  <w f="46" flags="">freelances</w>
  <w f="46" flags="">funnelling</w>
  <w f="46" flags="">fusel</w>
- <w f="46" flags="">gad</w>
  <w f="46" flags="">gaffs</w>
  <w f="46" flags="">gamemasters</w>
  <w f="46" flags="">gapes</w>
@@ -83051,7 +83017,6 @@
  <w f="46">piste</w>
  <w f="46" flags="">pithead</w>
  <w f="46" flags="">placekicking</w>
- <w f="46" flags="">plage</w>
  <w f="46" flags="">planchette</w>
  <w f="46" flags="">playas</w>
  <w f="46" flags="">playbacks</w>
@@ -84354,7 +84319,6 @@
  <w f="45" flags="">faery</w>
  <w f="45" flags="">fairy's</w>
  <w f="45" flags="">faits</w>
- <w f="45" flags="">faller</w>
  <w f="45" flags="">fallowing</w>
  <w f="45" flags="">familiarised</w>
  <w f="45" flags="">fanboys</w>
@@ -84462,7 +84426,6 @@
  <w f="45" flags="">gym's</w>
  <w f="45" flags="">hacker's</w>
  <w f="45" flags="">hallelujah</w>
- <w f="45" flags="">hame</w>
  <w f="45" flags="">hank</w>
  <w f="45" flags="">hankering</w>
  <w f="45" flags="">hanky</w>
@@ -86102,7 +86065,6 @@
  <w f="44" flags="">divestments</w>
  <w f="44" flags="">do-gooders</w>
  <w f="44" flags="">documentable</w>
- <w f="44" flags="">don</w>
  <w f="44" flags="">donator</w>
  <w f="44" flags="">doorposts</w>
  <w f="44" flags="">doublespeak</w>
@@ -88887,7 +88849,6 @@
  <w f="42" flags="">anticarcinogenic</w>
  <w f="42" flags="">antipasto</w>
  <w f="42" flags="">antlions</w>
- <w f="42" flags="">anu</w>
  <w f="42" flags="">anxiousness</w>
  <w f="42" flags="">apartness</w>
  <w f="42" flags="">ape's</w>
@@ -89897,7 +89858,6 @@
  <w f="42" flags="">washstand</w>
  <w f="42" flags="">waviness</w>
  <w f="42" flags="">wayfaring</w>
- <w f="42" flags="">weil</w>
  <w f="42" flags="">wickedest</w>
  <w f="42" flags="">wiggled</w>
  <w f="42" flags="">wireworks</w>
@@ -90744,7 +90704,6 @@
  <w f="41" flags="">henhouse</w>
  <w f="41" flags="">hereabouts</w>
  <w f="41" flags="">hereunto</w>
- <w f="41" flags="">herm</w>
  <w f="41">herniation</w>
  <w f="41">hies</w>
  <w f="41" flags="">highveld</w>
@@ -92360,6 +92319,7 @@
  <w f="40" flags="">housemother</w>
  <w f="40" flags="">houseware</w>
  <w f="40" flags="">housewife's</w>
+ <w f="40">how'll</w>
  <w f="40" flags="">hucksters</w>
  <w f="40" flags="">humanise</w>
  <w f="40" flags="">humbles</w>
@@ -94220,7 +94180,6 @@
  <w f="39" flags="">kedge</w>
  <w f="39" flags="">keyrings</w>
  <w f="39" flags="">kibble</w>
- <w f="39">kine</w>
  <w f="39" flags="">kingless</w>
  <w f="39" flags="">kinkajous</w>
  <w f="39" flags="">knackered</w>
@@ -95214,7 +95173,6 @@
  <w f="38" flags="">beanball</w>
  <w f="38" flags="">bedazzled</w>
  <w f="38" flags="">bezant</w>
- <w f="38" flags="abbreviation">bf</w>
  <w f="38" flags="">bights</w>
  <w f="38" flags="australian">bilbies</w>
  <w f="38" flags="">bilked</w>
@@ -95730,7 +95688,6 @@
  <w f="38" flags="">selectiveness</w>
  <w f="38" flags="">selene</w>
  <w f="38" flags="">selvages</w>
- <w f="38" flags="">sere</w>
  <w f="38" flags="">serf's</w>
  <w f="38" flags="">serialise</w>
  <w f="38" flags="">servomotors</w>
@@ -98579,7 +98536,6 @@
  <w f="36" flags="">laminator</w>
  <w f="36" flags="">landlessness</w>
  <w f="36" flags="">launders</w>
- <w f="36" flags="">lave</w>
  <w f="36" flags="">leathern</w>
  <w f="36" flags="">leeboard</w>
  <w f="36" flags="">leeched</w>
@@ -98892,7 +98848,6 @@
  <w f="36" flags="">thanksgivings</w>
  <w f="36" flags="">thereabout</w>
  <w f="36">thermocouple</w>
- <w f="36">thews</w>
  <w f="36">thyristors</w>
  <w f="36" flags="">tieback</w>
  <w f="36" flags="">tinkerers</w>
@@ -100563,7 +100518,6 @@
  <w f="35" flags="">librates</w>
  <w f="35" flags="">licitly</w>
  <w f="35" flags="">lid's</w>
- <w f="35" flags="">lief</w>
  <w f="35" flags="">lifebuoy</w>
  <w f="35" flags="">lifebuoys</w>
  <w f="35" flags="">lightering</w>
@@ -102419,7 +102373,6 @@
  <w f="34" flags="">nonfinancial</w>
  <w f="34" flags="">noninflammatory</w>
  <w f="34" flags="">nontarget</w>
- <w f="34" flags="">norn</w>
  <w f="34" flags="">northland</w>
  <w f="34" flags="">nosebands</w>
  <w f="34" flags="">novice's</w>
@@ -105327,7 +105280,6 @@
  <w f="32" flags="">localists</w>
  <w f="32" flags="">loco's</w>
  <w f="32" flags="">locomote</w>
- <w f="32" flags="">lod</w>
  <w f="32" flags="">loiters</w>
  <w f="32" flags="">loquacity</w>
  <w f="32" flags="">lumpfish</w>
@@ -107452,7 +107404,6 @@
  <w f="31" flags="">tideway</w>
  <w f="31" flags="">tintinnabulum</w>
  <w f="31" flags="">titter</w>
- <w f="31">tole</w>
  <w f="31" flags="">tonsuring</w>
  <w f="31" flags="">toots</w>
  <w f="31" flags="">totting</w>
@@ -108434,7 +108385,6 @@
  <w f="30" flags="">dignitary's</w>
  <w f="30" flags="">dilapidations</w>
  <w f="30" flags="">dimerizing</w>
- <w f="30" flags="">dingle</w>
  <w f="30" flags="">dirties</w>
  <w f="30" flags="">disagreeably</w>
  <w f="30" flags="">disbelievingly</w>
@@ -109541,7 +109491,6 @@
  <w f="29">colourists</w>
  <w f="29">commutators</w>
  <w f="29">conventicle</w>
- <w f="29">dieing</w>
  <w f="29">disembowelment</w>
  <w f="29">embryologist</w>
  <w f="29">etiologic</w>
@@ -109578,7 +109527,6 @@
  <w f="29">versicle</w>
  <w f="29">villus</w>
  <w f="29">voltmeters</w>
- <w f="29">weer</w>
  <w f="28" flags="">Abelard's</w>
  <w f="28" flags="">Adeste</w>
  <w f="28" flags="">Aggie's</w>
@@ -110851,7 +110799,6 @@
  <w f="28" flags="">linearizable</w>
  <w f="28" flags="">linkboy</w>
  <w f="28" flags="">linnets</w>
- <w f="28" flags="">lins</w>
  <w f="28" flags="">lissome</w>
  <w f="28" flags="">literariness</w>
  <w f="28" flags="">littles</w>
@@ -112986,7 +112933,6 @@
  <w f="27" flags="">icemen</w>
  <w f="27" flags="">icepacks</w>
  <w f="27" flags="">ideate</w>
- <w f="27" flags="abbreviation">ided</w>
  <w f="27" flags="">idiomorphic</w>
  <w f="27" flags="">idiot's</w>
  <w f="27" flags="">illyricum</w>
@@ -115871,7 +115817,6 @@
  <w f="25" flags="">masticating</w>
  <w f="25" flags="">mastics</w>
  <w f="25" flags="">matelots</w>
- <w f="25" flags="">maun</w>
  <w f="25" flags="">maundering</w>
  <w f="25" flags="">maundy</w>
  <w f="25" flags="">mayer</w>
@@ -117714,7 +117659,6 @@
  <w f="23" flags="">awardee's</w>
  <w f="23" flags="">awarder</w>
  <w f="23" flags="">axle's</w>
- <w f="23">baaed</w>
  <w f="23" flags="">babs</w>
  <w f="23" flags="">backbends</w>
  <w f="23" flags="">backcourts</w>
@@ -118321,7 +118265,6 @@
  <w f="23" flags="">fibrillations</w>
  <w f="23" flags="">fieldfares</w>
  <w f="23" flags="">fiend's</w>
- <w f="23" flags="">fifing</w>
  <w f="23" flags="">fifteen's</w>
  <w f="23" flags="">filofax</w>
  <w f="23" flags="">fir's</w>
@@ -118508,7 +118451,6 @@
  <w f="23" flags="technical">hemangioendotheliomas</w>
  <w f="23" flags="">henhouses</w>
  <w f="23" flags="">heroisms</w>
- <w f="23" flags="">hest</w>
  <w f="23" flags="">hied</w>
  <w f="23" flags="">high-falutin'</w>
  <w f="23" flags="">highchair</w>
@@ -119250,7 +119192,6 @@
  <w f="23" flags="">rambutans</w>
  <w f="23" flags="">rampion</w>
  <w f="23" flags="">ranking's</w>
- <w f="23" flags="">rankly</w>
  <w f="23" flags="">rarefactions</w>
  <w f="23" flags="">rarefy</w>
  <w f="23" flags="">ratafia</w>
@@ -121586,7 +121527,6 @@
  <w f="21" flags="">emprise</w>
  <w f="21" flags="">en's</w>
  <w f="21" flags="">enamelwork</w>
- <w f="21" flags="abbreviation">enc</w>
  <w f="21" flags="">endangerments</w>
  <w f="21" flags="">endon</w>
  <w f="21" flags="">energises</w>
@@ -122035,7 +121975,6 @@
  <w f="21" flags="">indiscriminating</w>
  <w f="21" flags="">indological</w>
  <w f="21" flags="">indology</w>
- <w f="21" flags="">indre</w>
  <w f="21" flags="">indwelt</w>
  <w f="21" flags="">ineffaceable</w>
  <w f="21" flags="">ineffectuality</w>
@@ -122451,7 +122390,6 @@
  <w f="21" flags="">nonvocal</w>
  <w f="21" flags="">nonvoluntary</w>
  <w f="21" flags="">northeasterner</w>
- <w f="21" flags="">noth</w>
  <w f="21" flags="">nourisher</w>
  <w f="21" flags="">novelettish</w>
  <w f="21" flags="">nucleus's</w>
@@ -122460,7 +122398,6 @@
  <w f="21" flags="">nuttiest</w>
  <w f="21" flags="abbreviation">nyx</w>
  <w f="21" flags="">oarswomen</w>
- <w f="21" flags="">oater</w>
  <w f="21" flags="">obscurest</w>
  <w f="21" flags="">observantly</w>
  <w f="21" flags="">obstante</w>
@@ -122560,7 +122497,6 @@
  <w f="21" flags="">pareira</w>
  <w f="21" flags="">parenthesised</w>
  <w f="21" flags="">parenthetic</w>
- <w f="21" flags="">parer</w>
  <w f="21" flags="">parfleche</w>
  <w f="21" flags="">parser's</w>
  <w f="21" flags="">parsings</w>
@@ -122568,7 +122504,6 @@
  <w f="21" flags="">passivism</w>
  <w f="21" flags="">passkeys</w>
  <w f="21" flags="">passworded</w>
- <w f="21" flags="">pated</w>
  <w f="21" flags="">pathway's</w>
  <w f="21" flags="">patrologist</w>
  <w f="21" flags="">pavement's</w>
@@ -123608,7 +123543,6 @@
  <w f="21" flags="">weldings</w>
  <w f="21" flags="">wetland's</w>
  <w f="21" flags="">wheelchair's</w>
- <w f="21" flags="">whets</w>
  <w f="21" flags="">whiffling</w>
  <w f="21" flags="">whimbrels</w>
  <w f="21" flags="">whippoorwill</w>
@@ -125867,7 +125801,6 @@
  <w f="18" flags="">gambolling</w>
  <w f="18" flags="">gambrels</w>
  <w f="18" flags="">gamesmen</w>
- <w f="18" flags="">gams</w>
  <w f="18" flags="">gaoler's</w>
  <w f="18" flags="">garde's</w>
  <w f="18" flags="">garnishee</w>
@@ -126300,7 +126233,6 @@
  <w f="18" flags="">jolliness</w>
  <w f="18" flags="">jonquils</w>
  <w f="18" flags="">journalling</w>
- <w f="18" flags="australian">jube</w>
  <w f="18" flags="">jubes</w>
  <w f="18" flags="">judaizers</w>
  <w f="18" flags="">judgmentally</w>
@@ -127542,7 +127474,6 @@
  <w f="18" flags="">shoebills</w>
  <w f="18" flags="">shopkeep</w>
  <w f="18" flags="">shotgunned</w>
- <w f="18" flags="">shott</w>
  <w f="18" flags="">showmen's</w>
  <w f="18" flags="">shunter's</w>
  <w f="18" flags="">siccing</w>
@@ -128543,7 +128474,6 @@
  <w f="15" flags="">Commissar's</w>
  <w f="15" flags="">Computerworld's</w>
  <w f="15" flags="">Conger's</w>
- <w f="15" flags="">Conni</w>
  <w f="15" flags="">Conservatorium's</w>
  <w f="15" flags="">Continent's</w>
  <w f="15" flags="">Copernicans</w>
@@ -129661,7 +129591,6 @@
  <w f="15" flags="">archenemy's</w>
  <w f="15" flags="">archery's</w>
  <w f="15" flags="">ardours</w>
- <w f="15" flags="">ards</w>
  <w f="15" flags="">areaway</w>
  <w f="15" flags="">argentinean</w>
  <w f="15" flags="">arisings</w>
@@ -129995,7 +129924,6 @@
  <w f="15">calcine</w>
  <w f="15" flags="">calculous</w>
  <w f="15" flags="">caliper's</w>
- <w f="15" flags="">calked</w>
  <w f="15" flags="">calks</w>
  <w f="15" flags="">calligraphists</w>
  <w f="15" flags="">callouses</w>
@@ -131334,7 +131262,6 @@
  <w f="15" flags="">hogmanay</w>
  <w f="15" flags="">hognut</w>
  <w f="15" flags="">hogweeds</w>
- <w f="15" flags="">hoke</w>
  <w f="15" flags="">holdbacks</w>
  <w f="15" flags="">homebuild</w>
  <w f="15" flags="">homeworker</w>
@@ -142398,6 +142325,7 @@
  <w f="10" flags="">wettish</w>
  <w f="10" flags="">whammies</w>
  <w f="10" flags="nonword">what'd</w>
+ <w f="10">what'm</w>
  <w f="10" flags="">wheaties</w>
  <w f="10" flags="">wheelbarrow's</w>
  <w f="10" flags="">wheezers</w>
@@ -142420,6 +142348,7 @@
  <w f="10" flags="">whoas</w>
  <w f="10" flags="">whoopers</w>
  <w f="10" flags="">whopped</w>
+ <w f="10">why'll</w>
  <w f="10" flags="">widgeons</w>
  <w f="10" flags="">widgie</w>
  <w f="10" flags="">wight's</w>
@@ -142709,7 +142638,6 @@
  <w f="6">weaponry's</w>
  <w f="6">womb's</w>
  <w f="6">yearningly</w>
- <w f="5" flags="">babe</w>
  <w f="4" flags="">bandannas</w>
  <w f="2">Babels</w>
  <w f="2">Caucasoids</w>
@@ -152281,7 +152209,6 @@
  <w f="1" flags="">beet's</w>
  <w f="1">beetroot's</w>
  <w f="1">befogging</w>
- <w f="1" flags="">befogs</w>
  <w f="1" flags="">beggarweed</w>
  <w f="1" flags="">begird</w>
  <w f="1" flags="">begirt</w>
@@ -153959,7 +153886,6 @@
  <w f="1" flags="">dandles</w>
  <w f="1" flags="">danged</w>
  <w f="1" flags="">dangler</w>
- <w f="1" flags="">dankly</w>
  <w f="1" flags="">dappers</w>
  <w f="1" flags="">darer</w>
  <w f="1" flags="">darkener</w>
@@ -154617,7 +154543,6 @@
  <w f="1" flags="">duckweed's</w>
  <w f="1" flags="">dudeen</w>
  <w f="1" flags="">dudgeons</w>
- <w f="1" flags="">duding</w>
  <w f="1" flags="">dueler</w>
  <w f="1" flags="">duellers</w>
  <w f="1" flags="">duellist's</w>
@@ -155185,7 +155110,6 @@
  <w f="1" flags="">fatefulness</w>
  <w f="1" flags="">fathead's</w>
  <w f="1" flags="">fatigue's</w>
- <w f="1" flags="">fatly</w>
  <w f="1" flags="">fatteners</w>
  <w f="1" flags="">fattish</w>
  <w f="1" flags="">fatuities</w>
@@ -155494,7 +155418,6 @@
  <w f="1" flags="">forfeiture's</w>
  <w f="1" flags="">forgivingly</w>
  <w f="1" flags="">forgoer</w>
- <w f="1" flags="">forker</w>
  <w f="1" flags="">forkers</w>
  <w f="1">forkfuls</w>
  <w f="1" flags="">forlornest</w>
@@ -161219,7 +161142,6 @@
  <w f="1" flags="">serfage</w>
  <w f="1" flags="">serfhood</w>
  <w f="1" flags="">sergeantcy</w>
- <w f="1" flags="">serged</w>
  <w f="1" flags="">serialism's</w>
  <w f="1" flags="">serialization's</w>
  <w f="1" flags="">seriography</w>
@@ -163798,7 +163720,6 @@
  <w f="1" flags="">wheelage</w>
  <w f="1" flags="">wheelbarrowing</w>
  <w f="1" flags="">wheelings</w>
- <w f="1" flags="">whees</w>
  <w f="1" flags="">wheezily</w>
  <w f="1" flags="">whelk's</w>
  <w f="1" flags="">wherry's</w>
@@ -163992,7 +163913,6 @@
  <w f="1" flags="">yawps</w>
  <w f="1" flags="">yayed</w>
  <w f="1" flags="">yays</w>
- <w f="1" flags="">yean</w>
  <w f="1" flags="">yeaned</w>
  <w f="1">year-end</w>
  <w f="1" flags="">yearlies</w>
@@ -164117,6 +164037,7 @@
  <w f="0" flags="offensive">Kahuna's</w>
  <w f="0" flags="medical">Kaif's</w>
  <w f="0" flags="babytalk">Kaka's</w>
+ <w f="0" flags="">LAN</w>
  <w f="0" flags="">LG</w>
  <w f="0" flags="">LP</w>
  <w f="0" flags="">LR</w>
@@ -164224,6 +164145,7 @@
  <w f="0" flags="">auk</w>
  <w f="0" flags="medical">autosexing</w>
  <w f="0" flags="">aver</w>
+ <w f="0" flags="">aw</w>
  <w f="0" flags="">awn</w>
  <w f="0" flags="n">babes</w>
  <w f="0" flags="medical">baculums</w>
@@ -164251,6 +164173,7 @@
  <w f="0" flags="e">bestial</w>
  <w f="0" flags="n">bestiality</w>
  <w f="0" flags="medical">bestialize</w>
+ <w f="0" flags="abbreviation">bf</w>
  <w f="0" flags="">bimbos</w>
  <w f="0" flags="r">bitch</w>
  <w f="0" flags="">bitch's</w>
@@ -164581,6 +164504,7 @@
  <w f="0" flags="offensive">fuckings</w>
  <w f="0" flags="offensive">fucks</w>
  <w f="0" flags="">fwd</w>
+ <w f="0" flags="">gage</w>
  <w f="0" flags="n">gangbang</w>
  <w f="0" flags="n">gangbanged</w>
  <w f="0" flags="n">gangbanging</w>
@@ -164600,7 +164524,6 @@
  <w f="0">glandes</w>
  <w f="0" flags="medical">glans</w>
  <w f="0">glans's</w>
- <w f="0" flags="">gnat</w>
  <w f="0" flags="nonword,offensive">goddammit</w>
  <w f="0" flags="offensive">goddamn</w>
  <w f="0" flags="offensive">goddamned</w>
@@ -164617,7 +164540,6 @@
  <w f="0" flags="medical">gonorrheal</w>
  <w f="0" flags="medical">gonorrhoea</w>
  <w f="0" flags="medical">gonorrhoeal</w>
- <w f="0">gook</w>
  <w f="0" flags="e">gooks</w>
  <w f="0" flags="medical">gossypol</w>
  <w f="0" flags="medical">gravida</w>
@@ -164665,6 +164587,7 @@
  <w f="0" flags="offensive">horniness</w>
  <w f="0" flags="offensive">horny</w>
  <w f="0" flags="offensive">horseshit</w>
+ <w f="0" flags="abbreviation">hr</w>
  <w f="0" flags="offensive">humping</w>
  <w f="0" flags="n">hustler</w>
  <w f="0" flags="medical">hymen</w>
@@ -165139,10 +165062,9 @@
  <w f="0" flags="offensive">shittiest</w>
  <w f="0" flags="offensive">shitting</w>
  <w f="0" flags="offensive">shitty</w>
+ <w f="0" flags="">shod</w>
  <w f="0" flags="n">shrimping</w>
- <w f="0" flags="">sigh</w>
  <w f="0" flags="e">silverback</w>
- <w f="0" flags="">sith</w>
  <w f="0" flags="offensive">skat</w>
  <w f="0" flags="n">slit</w>
  <w f="0">slut</w>
@@ -165299,7 +165221,6 @@
  <w f="0" flags="medical">tribades</w>
  <w f="0" flags="medical">tribadism</w>
  <w f="0" flags="">tty</w>
- <w f="0" flags="">tun</w>
  <w f="0" flags="offensive">turd</w>
  <w f="0" flags="offensive">turds</w>
  <w f="0" flags="babytalk">twat</w>
@@ -165444,6 +165365,7 @@
  <w f="0" flags="medical">virginity</w>
  <w f="0">virginity's</w>
  <w f="0" flags="babytalk">virgins</w>
+ <w f="0">vis</w>
  <w f="0" flags="">voyeur</w>
  <w f="0" flags="n">voyeurism</w>
  <w f="0" flags="n">voyeurs</w>
@@ -165470,6 +165392,7 @@
  <w f="0" flags="e">wetback</w>
  <w f="0" flags="e">wetbacks</w>
  <w f="0" flags="offensive">whang</w>
+ <w f="0" flags="">whets</w>
  <w f="0" flags="e">whitey</w>
  <w f="0" flags="offensive">whore</w>
  <w f="0" flags="offensive">whore's</w>
diff --git a/dictionaries/fr_wordlist.xml b/dictionaries/fr_wordlist.xml
index 76a8737..3990988 100644
--- a/dictionaries/fr_wordlist.xml
+++ b/dictionaries/fr_wordlist.xml
@@ -1,4 +1,4 @@
-<wordlist locale="fr" description="Français" date="1338184468" version="12" options="french_ligature_processing">
+<wordlist locale="fr" description="Français" date="1339787661" version="15" options="french_ligature_processing">
  <w f="209" flags="">de</w>
  <w f="200" flags="">la</w>
  <w f="197" flags="">et</w>
@@ -19,6 +19,7 @@
  <w f="178" flags="">a</w>
  <w f="178" flags="">il</w>
  <w f="178" flags="">que</w>
+ <w f="177" flags="">sur</w>
  <w f="176" flags="">son</w>
  <w f="175" flags="">avec</w>
  <w f="175" flags="">plus</w>
@@ -1097,6 +1098,7 @@
  <w f="125" flags="">occupe</w>
  <w f="125" flags="">olympiques</w>
  <w f="125" flags="">ouvrage</w>
+ <w f="125">parce que</w>
  <w f="125" flags="">paroisse</w>
  <w f="125" flags="">personnel</w>
  <w f="125" flags="">pression</w>
@@ -8152,6 +8154,7 @@
  <w f="98" flags="">endémiques</w>
  <w f="98" flags="">enlevé</w>
  <w f="98" flags="">environnementale</w>
+ <w f="98" flags="">es</w>
  <w f="98" flags="">est-il</w>
  <w f="98" flags="">exact</w>
  <w f="98" flags="">examens</w>
@@ -8419,7 +8422,6 @@
  <w f="98" flags="">vrais</w>
  <w f="98" flags="">Égypte</w>
  <w f="98" flags="">Étienne</w>
- <w f="98" flags="">ès</w>
  <w f="98" flags="">écrivant</w>
  <w f="98" flags="">éleveurs</w>
  <w f="98" flags="">énergies</w>
@@ -12675,6 +12677,7 @@
  <w f="90" flags="">Abraham</w>
  <w f="90" flags="">All-Star</w>
  <w f="90" flags="">Allen</w>
+ <w f="90" flags="">Android</w>
  <w f="90" flags="">Andy</w>
  <w f="90" flags="">Anvers</w>
  <w f="90" flags="">Armand</w>
@@ -30877,7 +30880,6 @@
  <w f="73" flags="">sud-africaines</w>
  <w f="73" flags="">suffi</w>
  <w f="73" flags="">supposait</w>
- <w f="73" flags="">surement</w>
  <w f="73" flags="">surnommer</w>
  <w f="73" flags="">surnommées</w>
  <w f="73" flags="">surprenantes</w>
@@ -64188,7 +64190,6 @@
  <w f="56" flags="abbreviation">janv</w>
  <w f="56" flags="">jardinet</w>
  <w f="56" flags="">jettera</w>
- <w f="56" flags="">jo</w>
  <w f="56" flags="">jointures</w>
  <w f="56" flags="">jonglage</w>
  <w f="56" flags="">jour-même</w>
@@ -91408,7 +91409,6 @@
  <w f="46" flags="">locustes</w>
  <w f="46" flags="">logeur</w>
  <w f="46" flags="">lombalgies</w>
- <w f="46" flags="">lon</w>
  <w f="46" flags="">lorgnant</w>
  <w f="46" flags="">louveteau</w>
  <w f="46" flags="">lové</w>
@@ -114575,7 +114575,6 @@
  <w f="37" flags="">anarchiquement</w>
  <w f="37" flags="">ancillaires</w>
  <w f="37" flags="">anda</w>
- <w f="37" flags="">android</w>
  <w f="37" flags="">anesthésiante</w>
  <w f="37" flags="">anesthésiantes</w>
  <w f="37" flags="">anglophobe</w>
@@ -139003,7 +139002,6 @@
  <w f="28" flags="">neurochirurgiens</w>
  <w f="28" flags="">neurolinguistique</w>
  <w f="28" flags="">neutralisations</w>
- <w f="28" flags="">nic</w>
  <w f="28" flags="">nidifiant</w>
  <w f="28" flags="">nivellent</w>
  <w f="28" flags="">nivelées</w>
diff --git a/dictionaries/it_wordlist.xml b/dictionaries/it_wordlist.xml
index beb3f6b..fea2ace 100644
--- a/dictionaries/it_wordlist.xml
+++ b/dictionaries/it_wordlist.xml
@@ -1,4 +1,4 @@
-<wordlist locale="it" description="Italiano" date="1338184542" version="12">
+<wordlist locale="it" description="Italiano" date="1339787744" version="15">
  <w f="199" flags="">di</w>
  <w f="193" flags="">e</w>
  <w f="189" flags="">il</w>
@@ -281,6 +281,7 @@
  <w f="136" flags="">sarebbe</w>
  <w f="136" flags="">sui</w>
  <w f="135" flags="">agosto</w>
+ <w f="135" flags="">andare</w>
  <w f="135" flags="">aprile</w>
  <w f="135" flags="">avere</w>
  <w f="135" flags="">avrebbe</w>
@@ -422,6 +423,8 @@
  <w f="131" flags="">va</w>
  <w f="130" flags="">Italia</w>
  <w f="130" flags="">assieme</w>
+ <w f="130" flags="">buonanotte</w>
+ <w f="130" flags="">buongiorno</w>
  <w f="130" flags="">comuni</w>
  <w f="130" flags="">dallo</w>
  <w f="130" flags="">dati</w>
@@ -448,16 +451,20 @@
  <w f="130" flags="">passato</w>
  <w f="130" flags="">personaggi</w>
  <w f="130" flags="">piccola</w>
+ <w f="130" flags="">pizzeria</w>
  <w f="130" flags="">problemi</w>
  <w f="130" flags="">proprietà</w>
  <w f="130" flags="">protagonista</w>
  <w f="130" flags="">qui</w>
  <w f="130" flags="">regno</w>
+ <w f="130" flags="">risate</w>
+ <w f="130" flags="">ristorante</w>
  <w f="130" flags="">scritto</w>
  <w f="130" flags="">spazio</w>
  <w f="130" flags="">squadre</w>
  <w f="130" flags="">sta</w>
  <w f="130" flags="">storico</w>
+ <w f="130" flags="">super</w>
  <w f="130" flags="">superiore</w>
  <w f="130" flags="">tempi</w>
  <w f="130" flags="">unità</w>
@@ -901,7 +908,6 @@
  <w f="122" flags="">acqua</w>
  <w f="122" flags="">acque</w>
  <w f="122" flags="">all'età</w>
- <w f="122" flags="">andare</w>
  <w f="122" flags="">antico</w>
  <w f="122" flags="">attuale</w>
  <w f="122" flags="">autore</w>
@@ -1101,6 +1107,7 @@
  <w f="120" flags="">caratteristica</w>
  <w f="120" flags="">centri</w>
  <w f="120" flags="">certa</w>
+ <w f="120" flags="">cioccolato</w>
  <w f="120" flags="">cittadini</w>
  <w f="120" flags="">coloro</w>
  <w f="120" flags="">competizione</w>
@@ -1563,7 +1570,6 @@
  <w f="116" flags="">assai</w>
  <w f="116" flags="">attore</w>
  <w f="116" flags="">azione</w>
- <w f="116" flags="">banda</w>
  <w f="116" flags="">bianca</w>
  <w f="116" flags="">britannica</w>
  <w f="116" flags="">capace</w>
@@ -3199,7 +3205,6 @@
  <w f="108" flags="">zampe</w>
  <w f="107" flags="">Andrea</w>
  <w f="107" flags="">Cina</w>
- <w f="107" flags="">Cristo</w>
  <w f="107" flags="">Gesù</w>
  <w f="107" flags="">Inghilterra</w>
  <w f="107" flags="abbreviation">NBA</w>
@@ -4921,7 +4926,6 @@
  <w f="102" flags="">rilievi</w>
  <w f="102" flags="">riportati</w>
  <w f="102" flags="">rispose</w>
- <w f="102" flags="">ristorante</w>
  <w f="102" flags="">riuscirà</w>
  <w f="102" flags="">rivalità</w>
  <w f="102" flags="">rivolto</w>
@@ -5143,7 +5147,6 @@
  <w f="101" flags="">eventualmente</w>
  <w f="101" flags="">fabbricato</w>
  <w f="101" flags="">facilità</w>
- <w f="101" flags="">fantasy</w>
  <w f="101" flags="">farmaco</w>
  <w f="101" flags="">fauna</w>
  <w f="101" flags="">favorito</w>
@@ -5523,6 +5526,7 @@
  <w f="100" flags="">giuria</w>
  <w f="100" flags="">giuridica</w>
  <w f="100" flags="">gola</w>
+ <w f="100" flags="">google</w>
  <w f="100" flags="">guidò</w>
  <w f="100" flags="">horror</w>
  <w f="100" flags="">immigrati</w>
@@ -5711,7 +5715,6 @@
  <w f="100" flags="">straniera</w>
  <w f="100" flags="">stretti</w>
  <w f="100" flags="">suddivisi</w>
- <w f="100" flags="">super</w>
  <w f="100" flags="">svariate</w>
  <w f="100" flags="">sviluppi</w>
  <w f="100" flags="">tasse</w>
@@ -10174,6 +10177,7 @@
  <w f="90" flags="">autorizzato</w>
  <w f="90" flags="">avvocati</w>
  <w f="90" flags="">bancarotta</w>
+ <w f="90" flags="">banda</w>
  <w f="90" flags="">banditi</w>
  <w f="90" flags="">basano</w>
  <w f="90" flags="">basava</w>
@@ -10845,7 +10849,6 @@
  <w f="89" flags="">chiamavano</w>
  <w f="89" flags="">cilindrica</w>
  <w f="89" flags="">cinquant'anni</w>
- <w f="89" flags="">cioccolato</w>
  <w f="89" flags="">cisterna</w>
  <w f="89" flags="">ciurma</w>
  <w f="89" flags="">clock</w>
@@ -12108,7 +12111,6 @@
  <w f="87" flags="">Anthony</w>
  <w f="87" flags="">Beatrice</w>
  <w f="87" flags="">Bobby</w>
- <w f="87" flags="abbreviation">CIO</w>
  <w f="87" flags="abbreviation">CT</w>
  <w f="87" flags="">Cambridge</w>
  <w f="87" flags="">Cecilia</w>
@@ -27991,7 +27993,6 @@
  <w f="72" flags="">riportavano</w>
  <w f="72" flags="">ripropose</w>
  <w f="72" flags="">risalì</w>
- <w f="72" flags="">risate</w>
  <w f="72" flags="">riscaldare</w>
  <w f="72" flags="">riscoprire</w>
  <w f="72" flags="">riscritto</w>
@@ -35512,7 +35513,6 @@
  <w f="67" flags="">piruvato</w>
  <w f="67" flags="">pisane</w>
  <w f="67" flags="">pitagorica</w>
- <w f="67" flags="">pizzeria</w>
  <w f="67" flags="">pizzico</w>
  <w f="67" flags="">plancton</w>
  <w f="67" flags="">planimetrico</w>
@@ -65079,7 +65079,6 @@
  <w f="52" flags="">Suzzara</w>
  <w f="52" flags="">Svalbard</w>
  <w f="52" flags="abbreviation">TEC</w>
- <w f="52" flags="abbreviation">TEM</w>
  <w f="52" flags="abbreviation">TFW</w>
  <w f="52" flags="abbreviation">TVA</w>
  <w f="52" flags="">Tadeusz</w>
@@ -75996,7 +75995,6 @@
  <w f="48" flags="">bucolici</w>
  <w f="48" flags="">bugnate</w>
  <w f="48" flags="">bungee</w>
- <w f="48" flags="">buonanotte</w>
  <w f="48" flags="">burattinai</w>
  <w f="48" flags="">burocratizzazione</w>
  <w f="48" flags="">burqa</w>
@@ -82281,7 +82279,6 @@
  <w f="46" flags="">gommato</w>
  <w f="46" flags="">gonfiate</w>
  <w f="46" flags="">gonfiori</w>
- <w f="46" flags="">google</w>
  <w f="46" flags="">gorgone</w>
  <w f="46" flags="">graffiato</w>
  <w f="46" flags="">graffite</w>
@@ -92831,7 +92828,6 @@
  <w f="42" flags="">brunita</w>
  <w f="42" flags="abbreviation">btr</w>
  <w f="42" flags="">bulla</w>
- <w f="42" flags="">buongiorno</w>
  <w f="42" flags="">buonissimi</w>
  <w f="42" flags="">burlarsi</w>
  <w f="42" flags="">bustino</w>
@@ -138882,7 +138878,6 @@
  <w f="27" flags="">Ravegnana</w>
  <w f="27" flags="">Rifreddo</w>
  <w f="27" flags="">Righetto</w>
- <w f="27" flags="">Risto</w>
  <w f="27" flags="">Rivanazzano</w>
  <w f="27" flags="">Roccavione</w>
  <w f="27" flags="">Romanengo</w>
@@ -165969,6 +165964,9 @@
  <w f="21" flags="">zuccata</w>
  <w f="21" flags="">zuccheriere</w>
  <w f="21" flags="">zuccherose</w>
+ <w f="20" flags="">Cristo</w>
+ <w f="20">celestial</w>
+ <w f="20" flags="">fantasy</w>
  <w f="18" flags="">Abbateggio</w>
  <w f="18" flags="">Abbondanzieri</w>
  <w f="18" flags="">Aconzio</w>
diff --git a/java/res/raw/main_de.dict b/java/res/raw/main_de.dict
index 1a7b305..6122cd3 100644
--- a/java/res/raw/main_de.dict
+++ b/java/res/raw/main_de.dict
Binary files differ
diff --git a/java/res/raw/main_en.dict b/java/res/raw/main_en.dict
index 516e7d5..98a9361 100644
--- a/java/res/raw/main_en.dict
+++ b/java/res/raw/main_en.dict
Binary files differ
diff --git a/java/res/raw/main_fr.dict b/java/res/raw/main_fr.dict
index 17920f0..717078c 100644
--- a/java/res/raw/main_fr.dict
+++ b/java/res/raw/main_fr.dict
Binary files differ
diff --git a/java/res/raw/main_it.dict b/java/res/raw/main_it.dict
index 00bbdbe..8257907 100644
--- a/java/res/raw/main_it.dict
+++ b/java/res/raw/main_it.dict
Binary files differ
diff --git a/java/res/values-de/strings.xml b/java/res/values-de/strings.xml
index 5ddd309..cd2d78e 100644
--- a/java/res/values-de/strings.xml
+++ b/java/res/values-de/strings.xml
@@ -115,7 +115,7 @@
     <string name="note_timestamp_for_researchlog" msgid="1889446857977976026">"Zeitstempel im Protokoll"</string>
     <string name="notify_recorded_timestamp" msgid="8036429032449612051">"Zeitstempel aufgenommen"</string>
     <string name="do_not_log_this_session" msgid="413762473641146336">"Nicht protokollieren"</string>
-    <string name="notify_session_log_deleting" msgid="3299507647764414623">"Protokoll wird gelöscht"</string>
+    <string name="notify_session_log_deleting" msgid="3299507647764414623">"Protokoll wird gelöscht..."</string>
     <string name="notify_session_log_deleted" msgid="8687927130100934686">"Protokoll gelöscht"</string>
     <string name="notify_session_log_not_deleted" msgid="2592908998810755970">"Protokoll NICHT gelöscht"</string>
     <string name="select_language" msgid="3693815588777926848">"Eingabesprachen"</string>
diff --git a/java/res/values-en/whitelist.xml b/java/res/values-en/whitelist.xml
index 9612aac..2620179 100644
--- a/java/res/values-en/whitelist.xml
+++ b/java/res/values-en/whitelist.xml
@@ -30,7 +30,6 @@
         <item>ill</item>
         <item>I\'ll</item>
 
-        <!-- Following entries came from AutoText the Android keyboard no longer uses. -->
         <!-- TODO: Trim down more entries by removing ones that get auto-corrected by the
              Android keyboard's own typing error correction algorithms. -->
 
@@ -63,22 +62,62 @@
         <item>been</item>
 
         <item>255</item>
+        <item>bot</item>
+        <item>not</item>
+
+        <item>255</item>
         <item>bur</item>
         <item>but</item>
 
         <item>255</item>
+        <item>cam</item>
+        <item>can</item>
+
+        <item>255</item>
         <item>cant</item>
         <item>can\'t</item>
 
         <item>255</item>
+        <item>dame</item>
+        <item>same</item>
+
+        <item>255</item>
         <item>didint</item>
         <item>didn\'t</item>
 
         <item>255</item>
+        <item>dormer</item>
+        <item>former</item>
+
+        <item>255</item>
+        <item>dud</item>
+        <item>did</item>
+
+        <item>255</item>
+        <item>fay</item>
+        <item>day</item>
+
+        <item>255</item>
+        <item>fife</item>
+        <item>five</item>
+
+        <item>255</item>
+        <item>foo</item>
+        <item>for</item>
+
+        <item>255</item>
         <item>fora</item>
         <item>for a</item>
 
         <item>255</item>
+        <item>galled</item>
+        <item>called</item>
+
+        <item>255</item>
+        <item>goo</item>
+        <item>too</item>
+
+        <item>255</item>
         <item>hed</item>
         <item>he\'d</item>
 
@@ -91,6 +130,10 @@
         <item>here\'s</item>
 
         <item>255</item>
+        <item>hew</item>
+        <item>new</item>
+
+        <item>255</item>
         <item>hoe</item>
         <item>how</item>
 
@@ -115,10 +158,18 @@
         <item>how\'ve</item>
 
         <item>255</item>
+        <item>hum</item>
+        <item>him</item>
+
+        <item>255</item>
         <item>i</item>
         <item>I</item>
 
         <item>255</item>
+        <item>ifs</item>
+        <item>its</item>
+
+        <item>255</item>
         <item>il</item>
         <item>I\'ll</item>
 
@@ -139,10 +190,6 @@
         <item>it\'s a</item>
 
         <item>255</item>
-        <item>jot</item>
-        <item>not</item>
-
-        <item>255</item>
         <item>lets</item>
         <item>let\'s</item>
 
@@ -151,6 +198,18 @@
         <item>ma\'am</item>
 
         <item>255</item>
+        <item>manu</item>
+        <item>many</item>
+
+        <item>255</item>
+        <item>mare</item>
+        <item>made</item>
+
+        <item>255</item>
+        <item>mew</item>
+        <item>new</item>
+
+        <item>255</item>
         <item>mire</item>
         <item>more</item>
 
@@ -171,14 +230,46 @@
         <item>notes</item>
 
         <item>255</item>
+        <item>mow</item>
+        <item>now</item>
+
+        <item>255</item>
+        <item>namer</item>
+        <item>named</item>
+
+        <item>255</item>
+        <item>nave</item>
+        <item>have</item>
+
+        <item>255</item>
+        <item>nee</item>
+        <item>new</item>
+
+        <item>255</item>
+        <item>nigh</item>
+        <item>high</item>
+
+        <item>255</item>
         <item>nit</item>
         <item>not</item>
 
         <item>255</item>
+        <item>oft</item>
+        <item>off</item>
+
+        <item>255</item>
         <item>os</item>
         <item>is</item>
 
         <item>255</item>
+        <item>pater</item>
+        <item>later</item>
+
+        <item>255</item>
+        <item>rook</item>
+        <item>took</item>
+
+        <item>255</item>
         <item>shel</item>
         <item>she\'ll</item>
 
@@ -187,6 +278,14 @@
         <item>shouldn\'t</item>
 
         <item>255</item>
+        <item>sill</item>
+        <item>will</item>
+
+        <item>255</item>
+        <item>sown</item>
+        <item>down</item>
+
+        <item>255</item>
         <item>thatd</item>
         <item>that\'d</item>
 
@@ -305,10 +404,6 @@
         <item>y\'all</item>
 
         <item>255</item>
-        <item>yo</item>
-        <item>to</item>
-
-        <item>255</item>
         <item>youd</item>
         <item>you\'d</item>
 
diff --git a/java/res/values-it/strings.xml b/java/res/values-it/strings.xml
index 892abac..e77a0d0 100644
--- a/java/res/values-it/strings.xml
+++ b/java/res/values-it/strings.xml
@@ -107,8 +107,8 @@
     <string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Su tastiera principale"</string>
     <string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Su tastiera simboli"</string>
     <string name="voice_input_modes_off" msgid="3745699748218082014">"Non attivo"</string>
-    <string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mic su tastiera principale"</string>
-    <string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mic su tastiera simboli"</string>
+    <string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Microfono su tastiera principale"</string>
+    <string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Microfono su tastiera simboli"</string>
     <string name="voice_input_modes_summary_off" msgid="63875609591897607">"Comandi vocali disatt."</string>
     <string name="configure_input_method" msgid="373356270290742459">"Configura metodi di immissione"</string>
     <string name="language_selection_title" msgid="1651299598555326750">"Lingue comandi"</string>
@@ -147,6 +147,6 @@
     <string name="not_now" msgid="6172462888202790482">"Non ora"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Esiste già uno stile di inuput uguale: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
     <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modalità Studio sull\'usabilità"</string>
-    <string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Impostazioni durata vibrazione alla pressione di un tasto"</string>
-    <string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Impostazioni volume audio alla pressione di un tasto"</string>
+    <string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Durata vibrazione alla pressione tasto"</string>
+    <string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Volume audio alla pressione di un tasto"</string>
 </resources>
diff --git a/java/res/values-sw/strings.xml b/java/res/values-sw/strings.xml
index bd3b150..f416fcd 100644
--- a/java/res/values-sw/strings.xml
+++ b/java/res/values-sw/strings.xml
@@ -113,8 +113,8 @@
     <string name="configure_input_method" msgid="373356270290742459">"Sanidi mbinu za uingizaji"</string>
     <string name="language_selection_title" msgid="1651299598555326750">"Lugha za uingizaji"</string>
     <string name="note_timestamp_for_researchlog" msgid="1889446857977976026">"Dokeza mhuri wa muda kwenye kumbukumbu"</string>
-    <string name="notify_recorded_timestamp" msgid="8036429032449612051">"Mhuri wa muda uliyorekodiwa"</string>
-    <string name="do_not_log_this_session" msgid="413762473641146336">"Usifungue kipindi hiki"</string>
+    <string name="notify_recorded_timestamp" msgid="8036429032449612051">"Mhuri wa muda uliorekodiwa"</string>
+    <string name="do_not_log_this_session" msgid="413762473641146336">"Usihifadhi kumbukumbu za kipindi hiki"</string>
     <string name="notify_session_log_deleting" msgid="3299507647764414623">"Inafuta kumbukumbu za kipindi"</string>
     <string name="notify_session_log_deleted" msgid="8687927130100934686">"Kumbukumbu za kipindi zimefutwa"</string>
     <string name="notify_session_log_not_deleted" msgid="2592908998810755970">"Kumbukumbu za kipindi HAZIJAFUTWA"</string>
@@ -142,7 +142,7 @@
     <string name="save" msgid="7646738597196767214">"Hifadhi"</string>
     <string name="subtype_locale" msgid="8576443440738143764">"Lugha"</string>
     <string name="keyboard_layout_set" msgid="4309233698194565609">"Mpangilio"</string>
-    <string name="custom_input_style_note_message" msgid="8826731320846363423">"Unaweza kugeuza kukufaa mfumo wako ma maingizo ili kuwezeshwa kabla ya kuanza kuutumia. Unataka kuuwesha sasa?"</string>
+    <string name="custom_input_style_note_message" msgid="8826731320846363423">"Mtindo wa ingizo lako maalum unahitaji kuwa umewezeshwa kabla uanze kulitumia. Unataka kuuwesha sasa?"</string>
     <string name="enable" msgid="5031294444630523247">"Wezesha"</string>
     <string name="not_now" msgid="6172462888202790482">"Sio sasa"</string>
     <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Mfumo sawa wa maingizo tayari upo: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
diff --git a/java/res/values/config.xml b/java/res/values/config.xml
index e20061d..589830d 100644
--- a/java/res/values/config.xml
+++ b/java/res/values/config.xml
@@ -22,14 +22,10 @@
     <bool name="config_use_fullscreen_mode">false</bool>
     <bool name="config_enable_show_voice_key_option">true</bool>
     <bool name="config_enable_show_popup_on_keypress_option">true</bool>
-    <bool name="config_enable_next_word_suggestions_option">true</bool>
     <!-- TODO: Disable the following configuration for production. -->
     <bool name="config_enable_usability_study_mode_option">true</bool>
     <!-- Whether or not Popup on key press is enabled by default -->
     <bool name="config_default_popup_preview">true</bool>
-    <!-- Default value for next word suggestion: while showing suggestions for a word should we weigh
-         in the previous word? -->
-    <bool name="config_default_next_word_suggestions">true</bool>
     <!-- Default value for next word prediction: after entering a word and a space only, should we look
          at input history to suggest a hopefully helpful suggestions for the next word? -->
     <bool name="config_default_next_word_prediction">true</bool>
@@ -63,7 +59,7 @@
     <integer name="config_long_press_key_timeout">400</integer>
     <!-- Long pressing shift will invoke caps-lock if > 0, never invoke caps-lock if == 0 -->
     <integer name="config_long_press_shift_key_timeout">1200</integer>
-    <integer name="config_ignore_alt_code_key_timeout">700</integer>
+    <integer name="config_ignore_alt_code_key_timeout">350</integer>
     <!-- Showing more keys keyboard, just above the touched point if true, aligned to the key if
          false -->
     <bool name="config_show_more_keys_keyboard_at_touched_point">false</bool>
diff --git a/java/res/xml-sw600dp/key_apostrophe.xml b/java/res/xml-sw600dp/key_apostrophe.xml
index 0c838db..2aec347 100644
--- a/java/res/xml-sw600dp/key_apostrophe.xml
+++ b/java/res/xml-sw600dp/key_apostrophe.xml
@@ -28,6 +28,16 @@
             <Key
                 latin:keyLabel="-" />
         </case>
+        <case
+            latin:languageCode="fa"
+        >
+            <Key
+                latin:keyLabel="!text/keylabel_for_apostrophe"
+                latin:keyHintLabel="!text/keyhintlabel_for_apostrophe"
+                latin:keyLabelFlags="hasPopupHint"
+                latin:moreKeys="!text/more_keys_for_apostrophe"
+                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 118b67f..b139c29 100644
--- a/java/res/xml-sw600dp/key_dash.xml
+++ b/java/res/xml-sw600dp/key_dash.xml
@@ -34,6 +34,7 @@
             <Key
                 latin:keyLabel="."
                 latin:keyHintLabel="!text/keyhintlabel_for_arabic_diacritics"
+                latin:keyLabelFlags="hasPopupHint"
                 latin:moreKeys="!text/more_keys_for_arabic_diacritics"
                 latin:keyStyle="hasShiftedLetterHintStyle" />
         </case>
diff --git a/java/res/xml-sw600dp/rowkeys_farsi2.xml b/java/res/xml-sw600dp/rowkeys_farsi2.xml
index 98e0f21..234f984 100644
--- a/java/res/xml-sw600dp/rowkeys_farsi2.xml
+++ b/java/res/xml-sw600dp/rowkeys_farsi2.xml
@@ -29,10 +29,12 @@
         latin:keyLabel="&#x0633;" />
     <!-- U+06CC: "ی" ARABIC LETTER FARSI YEH
          U+0626: "ئ" ARABIC LETTER YEH WITH HAMZA ABOVE
-         U+064A: "ي" ARABIC LETTER YEH -->
+         U+064A: "ي" ARABIC LETTER YEH
+         U+FBE8: "ﯨ" ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM
+         U+0649: "ى" ARABIC LETTER ALEF MAKSURA -->
     <Key
         latin:keyLabel="&#x06CC;"
-        latin:moreKeys="&#x0626;,&#x064A;" />
+        latin:moreKeys="&#x0626;,&#x064A;,&#xFBE8;|&#x0649;" />
     <!-- U+0628: "ب" ARABIC LETTER BEH -->
     <Key
         latin:keyLabel="&#x0628;" />
@@ -42,17 +44,18 @@
     <!-- U+0627: "ا" ARABIC LETTER ALEF
          U+0621: "ء" ARABIC LETTER HAMZA
          U+0622: "آ" ARABIC LETTER ALEF WITH MADDA ABOVE
-         U+0672: "ٲ" ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE
+         U+0623: "أ" ARABIC LETTER ALEF WITH HAMZA ABOVE
          U+0671: "ٱ" ARABIC LETTER ALEF WASLA
-         U+0673: "ٳ" ARABIC LETTER ALEF WITH WAVY HAMZA BELOW-->
-    <!-- TODO: DroidSansArabic lacks the glyph of U+0672 ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE -->
-    <!-- TODO: DroidSansArabic lacks the glyph of U+0673 ARABIC LETTER ALEF WITH WAVY HAMZA BELOW -->
+         U+0625: "إ" ARABIC LETTER ALEF WITH HAMZA BELOW -->
     <Key
         latin:keyLabel="&#x0627;"
-        latin:moreKeys="&#x0621;,&#x0622;,&#x0672;,&#x0671;,&#x0673;" />
-    <!-- U+062A: "ت" ARABIC LETTER TEH -->
+        latin:moreKeys="&#x0621;,&#x0622;,&#x0623;,&#x0671;,&#x0625;" />
+    <!-- U+062A: "ت" ARABIC LETTER TEH
+         U+062B: "ﺙ" ARABIC LETTER THEH
+         U+0629: "ة": ARABIC LETTER TEH MARBUTA -->
     <Key
-        latin:keyLabel="&#x062A;" />
+        latin:keyLabel="&#x062A;"
+        latin:moreKeys="&#x062B;,&#x0629;" />
     <!-- U+0646: "ن" ARABIC LETTER NOON -->
     <Key
         latin:keyLabel="&#x0646;" />
diff --git a/java/res/xml-sw600dp/rowkeys_farsi3.xml b/java/res/xml-sw600dp/rowkeys_farsi3.xml
index c80c14a..998ba72 100644
--- a/java/res/xml-sw600dp/rowkeys_farsi3.xml
+++ b/java/res/xml-sw600dp/rowkeys_farsi3.xml
@@ -27,11 +27,12 @@
     <!-- U+0637: "ط" ARABIC LETTER TAH -->
     <Key
         latin:keyLabel="&#x0637;" />
-    <!-- U+0632: "ز" ARABIC LETTER ZAIN
-         U+0698: "ژ" ARABIC LETTER JEH -->
+    <!-- U+0698: "ژ" ARABIC LETTER JEH -->
     <Key
-        latin:keyLabel="&#x0632;"
-        latin:moreKeys="&#x0698;" />
+        latin:keyLabel="&#x0698;" />
+    <!-- U+0632: "ز" ARABIC LETTER ZAIN -->
+    <Key
+        latin:keyLabel="&#x0632;" />
     <!-- U+0631: "ر" ARABIC LETTER REH -->
     <Key
         latin:keyLabel="&#x0631;" />
@@ -45,9 +46,11 @@
     <Key
         latin:keyLabel="&#x067E;" />
     <!-- U+0648: "و" ARABIC LETTER WAW
-         U+0676: "ٶ" ARABIC LETTER HIGH HAMZA WAW -->
-    <!-- TODO: DroidSansArabic lacks the glyph of U+0676 ARABIC LETTER HIGH HAMZA WAW -->
+         U+0624: "ؤ" ARABIC LETTER WAW WITH HAMZA ABOVE -->
     <Key
         latin:keyLabel="&#x0648;"
-        latin:moreKeys="&#x0676;" />
+        latin:moreKeys="&#x0624;" />
+    <!-- U+0622: "آ" ARABIC LETTER ALEF WITH MADDA ABOVE -->
+    <Key
+        latin:keyLabel="&#x0622;" />
 </merge>
diff --git a/java/res/xml-sw600dp/rowkeys_symbols2.xml b/java/res/xml-sw600dp/rowkeys_symbols2.xml
index 6fe8624..d7067e0 100644
--- a/java/res/xml-sw600dp/rowkeys_symbols2.xml
+++ b/java/res/xml-sw600dp/rowkeys_symbols2.xml
@@ -21,15 +21,43 @@
 <merge
     xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
 >
-    <Key
-        latin:keyLabel="#" />
+    <switch>
+        <case
+            latin:languageCode="fa"
+        >
+            <!-- U+066C: "٬" ARABIC THOUSANDS SEPARATOR -->
+            <Key
+                latin:keyLabel="&#x066C;"
+                latin:keyHintLabel="&amp;"
+                latin:keyLabelFlags="hasPopupHint|hasShiftedLetterHint"
+                latin:moreKeys="&amp;" />
+        </case>
+        <default>
+            <Key
+                latin:keyLabel="#" />
+        </default>
+    </switch>
     <Key
         latin:keyStyle="currencyKeyStyle" />
     <Key
         latin:keyLabel="!text/keylabel_for_symbols_percent"
         latin:moreKeys="!text/more_keys_for_symbols_percent" />
-    <Key
-        latin:keyLabel="&amp;" />
+    <switch>
+        <case
+            latin:languageCode="fa"
+        >
+            <!-- U+066B: "٫" ARABIC DECIMAL SEPARATOR -->
+            <Key
+                latin:keyLabel="&#x066B;"
+                latin:keyHintLabel="#"
+                latin:keyLabelFlags="hasPopupHint|hasShiftedLetterHint"
+                latin:moreKeys="#" />
+        </case>
+        <default>
+            <Key
+                latin:keyLabel="&amp;" />
+        </default>
+    </switch>
     <Key
         latin:keyLabel="*"
         latin:moreKeys="!text/more_keys_for_star" />
diff --git a/java/res/xml-sw600dp/rows_farsi.xml b/java/res/xml-sw600dp/rows_farsi.xml
index 1ce6586..52c2d93 100644
--- a/java/res/xml-sw600dp/rows_farsi.xml
+++ b/java/res/xml-sw600dp/rows_farsi.xml
@@ -44,8 +44,6 @@
         <include
             latin:keyboardLayout="@xml/rowkeys_farsi3"
             latin:keyXPos="4.091%p" />
-        <include
-            latin:keyboardLayout="@xml/keys_comma_period" />
         <Key
             latin:keyStyle="enterKeyStyle"
             latin:keyWidth="fillRight" />
diff --git a/java/res/xml-sw768dp/rows_farsi.xml b/java/res/xml-sw768dp/rows_farsi.xml
index 28031bb..4b4c970 100644
--- a/java/res/xml-sw768dp/rows_farsi.xml
+++ b/java/res/xml-sw768dp/rows_farsi.xml
@@ -52,8 +52,6 @@
         <include
             latin:keyboardLayout="@xml/rowkeys_farsi3"
             latin:keyXPos="13.829%p" />
-        <include
-            latin:keyboardLayout="@xml/keys_comma_period" />
         <Key
             latin:keyStyle="enterKeyStyle"
             latin:keyWidth="fillRight" />
diff --git a/java/res/xml/keys_less_greater.xml b/java/res/xml/keys_less_greater.xml
index 4584e5c..bc9ecdf 100644
--- a/java/res/xml/keys_less_greater.xml
+++ b/java/res/xml/keys_less_greater.xml
@@ -21,12 +21,30 @@
 <merge
     xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
 >
-    <Key
-        latin:keyLabel="&lt;"
-        latin:code="!code/key_less_than"
-        latin:moreKeys="!text/more_keys_for_less_than" />
-    <Key
-        latin:keyLabel="&gt;"
-        latin:code="!code/key_greater_than"
-        latin:moreKeys="!text/more_keys_for_greater_than" />
+    <switch>
+        <case
+            latin:languageCode="fa"
+        >
+            <!-- U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+                 U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -->
+            <Key
+                latin:keyLabel="&#x00AB;"
+                latin:code="0x00BB"
+                latin:moreKeys="!text/more_keys_for_less_than" />
+            <Key
+                latin:keyLabel="&#x00BB;"
+                latin:code="0x00AB"
+                latin:moreKeys="!text/more_keys_for_greater_than" />
+        </case>
+        <default>
+            <Key
+                latin:keyLabel="&lt;"
+                latin:code="!code/key_less_than"
+                latin:moreKeys="!text/more_keys_for_less_than" />
+            <Key
+                latin:keyLabel="&gt;"
+                latin:code="!code/key_greater_than"
+                latin:moreKeys="!text/more_keys_for_greater_than" />
+        </default>
+    </switch>
 </merge>
diff --git a/java/res/xml/prefs.xml b/java/res/xml/prefs.xml
index 1379819..d8bf784 100644
--- a/java/res/xml/prefs.xml
+++ b/java/res/xml/prefs.xml
@@ -115,23 +115,11 @@
                 android:persistent="true"
                 android:defaultValue="true" />
             <CheckBoxPreference
-                android:key="next_word_suggestion"
-                android:title="@string/bigram_suggestion"
-                android:summary="@string/bigram_suggestion_summary"
-                android:persistent="true"
-                android:defaultValue="true" />
-            <CheckBoxPreference
                 android:key="next_word_prediction"
                 android:title="@string/bigram_prediction"
                 android:summary="@string/bigram_prediction_summary"
                 android:persistent="true"
                 android:defaultValue="true" />
-            <CheckBoxPreference
-                android:key="enable_span_insert"
-                android:title="@string/enable_span_insert"
-                android:summary="@string/enable_span_insert_summary"
-                android:persistent="true"
-                android:defaultValue="true" />
             <PreferenceScreen
                 android:key="pref_vibration_duration_settings"
                 android:title="@string/prefs_keypress_vibration_duration_settings"/>
diff --git a/java/res/xml/rowkeys_farsi1.xml b/java/res/xml/rowkeys_farsi1.xml
index 81618af7..840b048 100644
--- a/java/res/xml/rowkeys_farsi1.xml
+++ b/java/res/xml/rowkeys_farsi1.xml
@@ -27,32 +27,32 @@
     <Key
         latin:keyLabel="&#x0635;"
         latin:moreKeys="&#x0636;,%"
-        latin:keyHintLabel="1"
-        latin:additionalMoreKeys="1,&#x06F1;" />
+        latin:keyHintLabel="&#x06F1;"
+        latin:additionalMoreKeys="&#x06F1;,1" />
     <!-- U+0642: "ق" ARABIC LETTER QAF
          U+06F2: "۲" EXTENDED ARABIC-INDIC DIGIT TWO -->
     <Key
         latin:keyLabel="&#x0642;"
-        latin:keyHintLabel="2"
-        latin:additionalMoreKeys="2,&#x06F2;" />
+        latin:keyHintLabel="&#x06F2;"
+        latin:additionalMoreKeys="&#x06F2;,2" />
     <!-- U+0641: "ف" ARABIC LETTER FEH
          U+06F3: "۳" EXTENDED ARABIC-INDIC DIGIT THREE -->
     <Key
         latin:keyLabel="&#x0641;"
-        latin:keyHintLabel="3"
-        latin:additionalMoreKeys="3,&#x06F3;" />
+        latin:keyHintLabel="&#x06F3;"
+        latin:additionalMoreKeys="&#x06F3;,3" />
     <!-- U+063A: "غ" ARABIC LETTER GHAIN
          U+06F4: "۴" EXTENDED ARABIC-INDIC DIGIT FOUR -->
     <Key
         latin:keyLabel="&#x063A;"
-        latin:keyHintLabel="4"
-        latin:additionalMoreKeys="4,&#x06F4;" />
+        latin:keyHintLabel="&#x06F4;"
+        latin:additionalMoreKeys="&#x06F4;,4" />
     <!-- U+0639: "ع" ARABIC LETTER AIN
          U+06F5: "۵" EXTENDED ARABIC-INDIC DIGIT FIVE -->
     <Key
         latin:keyLabel="&#x0639;"
-        latin:keyHintLabel="5"
-        latin:additionalMoreKeys="5,&#x06F5;" />
+        latin:keyHintLabel="&#x06F5;"
+        latin:additionalMoreKeys="&#x06F5;,5" />
     <!-- U+0647: "ه" ARABIC LETTER HEH
          U+FEEB: "ﻫ" ARABIC LETTER HEH INITIAL FORM
          U+0647/U+200D: ARABIC LETTER HEH + ZERO WIDTH JOINER
@@ -62,30 +62,30 @@
     <Key
         latin:keyLabel="&#x0647;"
         latin:moreKeys="&#xFEEB;|&#x0647;&#x200D;,&#x0647;&#x0654;,&#x0629;,%"
-        latin:keyHintLabel="6"
-        latin:additionalMoreKeys="6,&#x06F6;" />
+        latin:keyHintLabel="&#x06F6;"
+        latin:additionalMoreKeys="&#x06F6;,6" />
     <!-- U+062E: "خ" ARABIC LETTER KHAH
          U+06F7: "۷" EXTENDED ARABIC-INDIC DIGIT SEVEN -->
     <Key
         latin:keyLabel="&#x062E;"
-        latin:keyHintLabel="7"
-        latin:additionalMoreKeys="7,&#x06F7;" />
+        latin:keyHintLabel="&#x06F7;"
+        latin:additionalMoreKeys="&#x06F7;,7" />
     <!-- U+062D: "ح" ARABIC LETTER HAH
          U+06F8: "۸" EXTENDED ARABIC-INDIC DIGIT EIGHT -->
     <Key
         latin:keyLabel="&#x062D;"
-        latin:keyHintLabel="8"
-        latin:additionalMoreKeys="8,&#x06F8;" />
+        latin:keyHintLabel="&#x06F8;"
+        latin:additionalMoreKeys="&#x06F8;,8" />
     <!-- U+062C: "ج" ARABIC LETTER JEEM
          U+06F9: "۹" EXTENDED ARABIC-INDIC DIGIT NINE -->
     <Key
         latin:keyLabel="&#x062C;"
-        latin:keyHintLabel="9"
-        latin:additionalMoreKeys="9,&#x06F9;" />
+        latin:keyHintLabel="&#x06F9;"
+        latin:additionalMoreKeys="&#x06F9;,9" />
     <!-- U+0686: "چ" ARABIC LETTER TCHEH
          U+06F0: "۰" EXTENDED ARABIC-INDIC DIGIT ZERO -->
     <Key
         latin:keyLabel="&#x0686;"
-        latin:keyHintLabel="0"
-        latin:additionalMoreKeys="0,&#x06F0;" />
+        latin:keyHintLabel="&#x06F0;"
+        latin:additionalMoreKeys="&#x06F0;,0" />
 </merge>
diff --git a/java/res/xml/rowkeys_farsi2.xml b/java/res/xml/rowkeys_farsi2.xml
index 77279c6..2154893 100644
--- a/java/res/xml/rowkeys_farsi2.xml
+++ b/java/res/xml/rowkeys_farsi2.xml
@@ -31,10 +31,12 @@
         latin:moreKeys="&#x0636;" />
     <!-- U+06CC: "ی" ARABIC LETTER FARSI YEH
          U+0626: "ئ" ARABIC LETTER YEH WITH HAMZA ABOVE
-         U+064A: "ي" ARABIC LETTER YEH -->
+         U+064A: "ي" ARABIC LETTER YEH
+         U+FBE8: "ﯨ" ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM
+         U+0649: "ى" ARABIC LETTER ALEF MAKSURA -->
     <Key
         latin:keyLabel="&#x06CC;"
-        latin:moreKeys="&#x0626;,&#x064A;" />
+        latin:moreKeys="&#x0626;,&#x064A;,&#xFBE8;|&#x0649;" />
     <!-- U+0628: "ب" ARABIC LETTER BEH -->
     <Key
         latin:keyLabel="&#x0628;" />
@@ -44,19 +46,18 @@
     <!-- U+0627: "ا" ARABIC LETTER ALEF
          U+0621: "ء" ARABIC LETTER HAMZA
          U+0622: "آ" ARABIC LETTER ALEF WITH MADDA ABOVE
-         U+0672: "ٲ" ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE
+         U+0623: "أ" ARABIC LETTER ALEF WITH HAMZA ABOVE
          U+0671: "ٱ" ARABIC LETTER ALEF WASLA
-         U+0673: "ٳ" ARABIC LETTER ALEF WITH WAVY HAMZA BELOW-->
-    <!-- TODO: DroidSansArabic lacks the glyph of U+0672 ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE -->
-    <!-- TODO: DroidSansArabic lacks the glyph of U+0673 ARABIC LETTER ALEF WITH WAVY HAMZA BELOW -->
+         U+0625: "إ" ARABIC LETTER ALEF WITH HAMZA BELOW -->
     <Key
         latin:keyLabel="&#x0627;"
-        latin:moreKeys="&#x0621;,&#x0622;,&#x0672;,&#x0671;,&#x0673;" />
+        latin:moreKeys="&#x0621;,&#x0622;,&#x0623;,&#x0671;,&#x0625;" />
     <!-- U+062A: "ت" ARABIC LETTER TEH
-         U+062B: "ﺙ" ARABIC LETTER THEH -->
+         U+062B: "ﺙ" ARABIC LETTER THEH
+         U+0629: "ة": ARABIC LETTER TEH MARBUTA -->
     <Key
         latin:keyLabel="&#x062A;"
-        latin:moreKeys="&#x062B;" />
+        latin:moreKeys="&#x062B;,&#x0629;" />
     <!-- U+0646: "ن" ARABIC LETTER NOON -->
     <Key
         latin:keyLabel="&#x0646;" />
diff --git a/java/res/xml/rowkeys_farsi3.xml b/java/res/xml/rowkeys_farsi3.xml
index 44710e0..29c3513 100644
--- a/java/res/xml/rowkeys_farsi3.xml
+++ b/java/res/xml/rowkeys_farsi3.xml
@@ -44,11 +44,10 @@
     <Key
         latin:keyLabel="&#x067E;" />
     <!-- U+0648: "و" ARABIC LETTER WAW
-         U+0676: "ٶ" ARABIC LETTER HIGH HAMZA WAW -->
-    <!-- TODO: DroidSansArabic lacks the glyph of U+0676 ARABIC LETTER HIGH HAMZA WAW -->
+         U+0624: "ؤ" ARABIC LETTER WAW WITH HAMZA ABOVE -->
     <Key
         latin:keyLabel="&#x0648;"
-        latin:moreKeys="&#x0676;" />
+        latin:moreKeys="&#x0624;" />
     <!-- U+06AF: "گ" ARABIC LETTER GAF -->
     <Key
         latin:keyLabel="&#x06AF;" />
diff --git a/java/res/xml/rowkeys_symbols2.xml b/java/res/xml/rowkeys_symbols2.xml
index 34b9aa2..425e204 100644
--- a/java/res/xml/rowkeys_symbols2.xml
+++ b/java/res/xml/rowkeys_symbols2.xml
@@ -21,10 +21,28 @@
 <merge
     xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
 >
-    <Key
-        latin:keyLabel="\@" />
-    <Key
-        latin:keyLabel="\#" />
+    <switch>
+        <case
+            latin:languageCode="fa"
+        >
+            <!-- U+066C: "٬" ARABIC THOUSANDS SEPARATOR
+                 U+066B: "٫" ARABIC DECIMAL SEPARATOR -->
+            <Key
+                latin:keyLabel="&#x066C;"
+                latin:keyHintLabel="\@"
+                latin:moreKeys="\@" />
+            <Key
+                latin:keyLabel="&#x066B;"
+                latin:keyHintLabel="#"
+                latin:moreKeys="#" />
+        </case>
+        <default>
+            <Key
+                latin:keyLabel="\@" />
+            <Key
+                latin:keyLabel="#" />
+        </default>
+    </switch>
     <Key
         latin:keyStyle="currencyKeyStyle" />
     <Key
diff --git a/java/res/xml/rowkeys_symbols3.xml b/java/res/xml/rowkeys_symbols3.xml
index 2b2d9a4..c89716b 100644
--- a/java/res/xml/rowkeys_symbols3.xml
+++ b/java/res/xml/rowkeys_symbols3.xml
@@ -24,12 +24,30 @@
     <Key
         latin:keyLabel="!text/keylabel_for_symbols_exclamation"
         latin:moreKeys="!text/more_keys_for_symbols_exclamation" />
-    <Key
-        latin:keyLabel="&quot;"
-        latin:moreKeys="!text/more_keys_for_double_quote" />
-    <Key
-        latin:keyLabel="\'"
-        latin:moreKeys="!text/more_keys_for_single_quote" />
+    <switch>
+        <case
+            latin:languageCode="fa"
+        >
+            <!-- U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+                 U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -->
+            <Key
+                latin:keyLabel="&#x00AB;"
+                latin:code="0x00BB"
+                latin:moreKeys="!text/more_keys_for_double_quote" />
+            <Key
+                latin:keyLabel="&#x00BB;"
+                latin:code="0x00AB"
+                latin:moreKeys="!text/more_keys_for_single_quote" />
+        </case>
+        <default>
+            <Key
+                latin:keyLabel="&quot;"
+                latin:moreKeys="!text/more_keys_for_double_quote" />
+            <Key
+                latin:keyLabel="\'"
+                latin:moreKeys="!text/more_keys_for_single_quote" />
+        </default>
+    </switch>
     <Key
         latin:keyLabel=":" />
     <Key
diff --git a/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java b/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java
index ba08c59..70e38fd 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java
+++ b/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java
@@ -275,17 +275,6 @@
         return false;
     }
 
-    @Override
-    public AccessibilityNodeInfoCompat findAccessibilityFocus(int virtualViewId) {
-        return createAccessibilityNodeInfo(mAccessibilityFocusedView);
-    }
-
-    @Override
-    public AccessibilityNodeInfoCompat accessibilityFocusSearch(int direction, int virtualViewId) {
-        // Focus search is not currently supported for IMEs.
-        return null;
-    }
-
     /**
      * Sends an accessibility event for the given {@link Key}.
      *
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
index 917e233..8c218c6 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
@@ -993,7 +993,7 @@
         /* ~41 */
         // TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK
         // <string name="more_keys_for_double_quote">&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;|&#x00BB;,&#x00BB;|&#x00AB;</string>
-        /* 42 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB|\u00BB,\u00BB|\u00AB",
+        /* 42 */ "!fixedColumnOrder!4,\u201C,\u201D,\",\'",
         // TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK
         // <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;|&#x00BB;,&#x00BB|&#x00AB;;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string>
         /* 43 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB|\u00BB,\u00BB|\u00AB,\u2018,\u2019,\u201A,\u201B",
@@ -1031,8 +1031,8 @@
         // U+201D: "”" RIGHT DOUBLE QUOTATION MARK
         // U+201E: "„" DOUBLE LOW-9 QUOTATION MARK
         // U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK
-        /* 54 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,\u00AB|\u00BB",
-        /* 55 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,\u00BB|\u00AB",
+        /* 54 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,<|>",
+        /* 55 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,>|<",
         // U+0655: "ٕ" ARABIC HAMZA BELOW
         // U+0652: "ْ" ARABIC SUKUN
         // U+0651: "ّ" ARABIC SHADDA
@@ -1049,7 +1049,7 @@
         // U+0640: "ـ" ARABIC TATWEEL
         // In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label.
         /* 56 */ "!fixedColumnOrder!7,\u0655,\u0652,\u0651,\u064C,\u064D,\u064B,\u0654,\u0656,\u0670,\u0653,\u064F,\u0650,\u064E,\u0640\u0640\u0640|\u0640",
-        /* 57 */ "\u0653",
+        /* 57 */ "\u064B",
         // U+06F1: "۱" EXTENDED ARABIC-INDIC DIGIT ONE
         /* 58 */ "\u06F1",
         // U+06F2: "۲" EXTENDED ARABIC-INDIC DIGIT TWO
@@ -1101,14 +1101,16 @@
         // U+060C: "،" ARABIC COMMA
         // U+061B: "؛" ARABIC SEMICOLON
         // U+061F: "؟" ARABIC QUESTION MARK
+        // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+        // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
         /* 98 */ "\u060C",
         /* 99 */ "!",
         /* 100 */ "!,\\,",
         /* 101 */ "\u061F",
         /* 102 */ "\u061F,?",
-        /* 103 */ null,
-        /* 104 */ null,
-        /* 105 */ "\u061F,\u061B,!,:,-,/,\',\"",
+        /* 103 */ "\u060C",
+        /* 104 */ "\u061F",
+        /* 105 */ "!fixedColumnOrder!4,:,!,\u061F,\u061B,-,/,\u00AB|\u00BB,\u00BB|\u00AB",
     };
 
     /* Language fi: Finnish */
diff --git a/java/src/com/android/inputmethod/latin/Dictionary.java b/java/src/com/android/inputmethod/latin/Dictionary.java
index 7cd9bc2..9c3d46e 100644
--- a/java/src/com/android/inputmethod/latin/Dictionary.java
+++ b/java/src/com/android/inputmethod/latin/Dictionary.java
@@ -115,4 +115,12 @@
     public void close() {
         // empty base implementation
     }
+
+    /**
+     * Subclasses may override to indicate that this Dictionary is not yet properly initialized.
+     */
+
+    public boolean isInitialized() {
+        return true;
+    }
 }
diff --git a/java/src/com/android/inputmethod/latin/DictionaryCollection.java b/java/src/com/android/inputmethod/latin/DictionaryCollection.java
index 1a05fcd..26c2e63 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryCollection.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryCollection.java
@@ -82,8 +82,9 @@
         return maxFreq;
     }
 
-    public boolean isEmpty() {
-        return mDictionaries.isEmpty();
+    @Override
+    public boolean isInitialized() {
+        return !mDictionaries.isEmpty();
     }
 
     @Override
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 89082e9..200fa68 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -122,7 +122,6 @@
     private int mSpaceState;
 
     private SettingsValues mCurrentSettings;
-    private InputAttributes mInputAttributes;
 
     private View mExtractArea;
     private View mKeyPreviewBackingView;
@@ -428,10 +427,12 @@
         // Note that the calling sequence of onCreate() and onCurrentInputMethodSubtypeChanged()
         // is not guaranteed. It may even be called at the same time on a different thread.
         if (null == mPrefs) mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
+        final InputAttributes inputAttributes =
+                new InputAttributes(getCurrentInputEditorInfo(), isFullscreenMode());
         final RunInLocale<SettingsValues> job = new RunInLocale<SettingsValues>() {
             @Override
             protected SettingsValues job(Resources res) {
-                return new SettingsValues(mPrefs, mInputAttributes, LatinIME.this);
+                return new SettingsValues(mPrefs, inputAttributes, LatinIME.this);
             }
         };
         mCurrentSettings = job.runInLocale(mResources, mSubtypeSwitcher.getCurrentSubtypeLocale());
@@ -451,11 +452,14 @@
             oldContactsDictionary = null;
         }
         mSuggest = new Suggest(this, subtypeLocale);
-        if (mCurrentSettings.isCorrectionOn()) {
+        if (mCurrentSettings.mCorrectionEnabled) {
             mSuggest.setAutoCorrectionThreshold(mCurrentSettings.mAutoCorrectionThreshold);
         }
 
         mIsMainDictionaryAvailable = DictionaryFactory.isDictionaryAvailable(this, subtypeLocale);
+        if (ProductionFlag.IS_EXPERIMENTAL) {
+            ResearchLogger.getInstance().initSuggest(mSuggest);
+        }
 
         mUserDictionary = new UserBinaryDictionary(this, localeStr);
         mIsUserDictionaryAvailable = mUserDictionary.isEnabled();
@@ -671,7 +675,6 @@
         updateFullscreenMode();
         mLastSelectionStart = editorInfo.initialSelStart;
         mLastSelectionEnd = editorInfo.initialSelEnd;
-        mInputAttributes = new InputAttributes(editorInfo, isFullscreenMode());
         mApplicationSpecifiedCompletions = null;
 
         inputView.closing();
@@ -682,7 +685,7 @@
 
         loadSettings();
 
-        if (mSuggest != null && mCurrentSettings.isCorrectionOn()) {
+        if (mSuggest != null && mCurrentSettings.mCorrectionEnabled) {
             mSuggest.setAutoCorrectionThreshold(mCurrentSettings.mAutoCorrectionThreshold);
         }
 
@@ -825,7 +828,7 @@
      */
     @Override
     public void onExtractedTextClicked() {
-        if (isSuggestionsRequested()) return;
+        if (mCurrentSettings.isSuggestionsRequested(mDisplayOrientation)) return;
 
         super.onExtractedTextClicked();
     }
@@ -841,7 +844,7 @@
      */
     @Override
     public void onExtractedCursorMovement(int dx, int dy) {
-        if (isSuggestionsRequested()) return;
+        if (mCurrentSettings.isSuggestionsRequested(mDisplayOrientation)) return;
 
         super.onExtractedCursorMovement(dx, dy);
     }
@@ -1072,7 +1075,7 @@
     }
 
     private boolean maybeDoubleSpace() {
-        if (mCurrentSettings.mCorrectionMode == Suggest.CORRECTION_NONE) return false;
+        if (!mCurrentSettings.mCorrectionEnabled) return false;
         if (!mHandler.isAcceptingDoubleSpaces()) return false;
         final CharSequence lastThree = mConnection.getTextBeforeCursor(3, 0);
         if (lastThree != null && lastThree.length() == 3
@@ -1445,7 +1448,7 @@
                     }
                 }
             }
-            if (isSuggestionsRequested()) {
+            if (mCurrentSettings.isSuggestionsRequested(mDisplayOrientation)) {
                 restartSuggestionsOnWordBeforeCursorIfAtEndOfWord();
             }
         }
@@ -1490,7 +1493,7 @@
         // thread here.
         if (!isComposingWord && (isAlphabet(primaryCode)
                 || mCurrentSettings.isSymbolExcludedFromWordSeparators(primaryCode))
-                && isSuggestionsRequested() &&
+                && mCurrentSettings.isSuggestionsRequested(mDisplayOrientation) &&
                 !mConnection.isCursorTouchingWord(mCurrentSettings)) {
             // Reset entirely the composing state anyway, then start composing a new word unless
             // the character is a single quote. The idea here is, single quote is not a
@@ -1553,8 +1556,7 @@
             // not to auto correct, but accept the typed word. For instance,
             // in Italian dov' should not be expanded to dove' because the elision
             // requires the last vowel to be removed.
-            final boolean shouldAutoCorrect = mCurrentSettings.isCorrectionOn();
-            if (shouldAutoCorrect && primaryCode != Keyboard.CODE_SINGLE_QUOTE) {
+            if (mCurrentSettings.mCorrectionEnabled && primaryCode != Keyboard.CODE_SINGLE_QUOTE) {
                 commitCurrentAutoCorrection(primaryCode);
                 didAutoCorrect = true;
             } else {
@@ -1572,7 +1574,7 @@
         sendKeyCodePoint(primaryCode);
 
         if (Keyboard.CODE_SPACE == primaryCode) {
-            if (isSuggestionsRequested()) {
+            if (mCurrentSettings.isSuggestionsRequested(mDisplayOrientation)) {
                 if (maybeDoubleSpace()) {
                     mSpaceState = SPACE_STATE_DOUBLE;
                 } else if (!isShowingPunctuationList()) {
@@ -1623,13 +1625,6 @@
             inputView.closing();
     }
 
-    public boolean isSuggestionsRequested() {
-        // TODO: move this method to mCurrentSettings
-        return mCurrentSettings.isSuggestionStripRequestedByTextField()
-                && (mCurrentSettings.isCorrectionOn()
-                || mCurrentSettings.isSuggestionStripVisibleInOrientation(mDisplayOrientation));
-    }
-
     public boolean isShowingPunctuationList() {
         if (mSuggestionsView == null) return false;
         return mCurrentSettings.mSuggestPuncList == mSuggestionsView.getSuggestions();
@@ -1644,7 +1639,7 @@
             return false;
         if (mCurrentSettings.isApplicationSpecifiedCompletionsOn())
             return true;
-        return isSuggestionsRequested();
+        return mCurrentSettings.isSuggestionsRequested(mDisplayOrientation);
     }
 
     public void switchToKeyboardView() {
@@ -1693,7 +1688,7 @@
 
     public void updateSuggestions() {
         // Check if we have a suggestion engine attached.
-        if ((mSuggest == null || !isSuggestionsRequested())) {
+        if ((mSuggest == null || !mCurrentSettings.isSuggestionsRequested(mDisplayOrientation))) {
             if (mWordComposer.isComposingWord()) {
                 Log.w(TAG, "Called updateSuggestions but suggestions were not requested!");
                 mWordComposer.setAutoCorrection(mWordComposer.getTypedWord());
@@ -1715,7 +1710,7 @@
         // getSuggestedWords handles gracefully a null value of prevWord
         final SuggestedWords suggestedWords = mSuggest.getSuggestedWords(mWordComposer,
                 prevWord, mKeyboardSwitcher.getKeyboard().getProximityInfo(),
-                mCurrentSettings.mCorrectionMode);
+                mCurrentSettings.mCorrectionEnabled);
 
         // Basically, we update the suggestion strip only when suggestion count > 1.  However,
         // there is an exception: We update the suggestion strip whenever typed word's length
@@ -1867,8 +1862,6 @@
         // - There is a dictionary and the word is not in it
         // Please note that if mSuggest is null, it means that everything is off: suggestion
         // and correction, so we shouldn't try to show the hint
-        // We used to look at mCorrectionMode here, but showing the hint should have nothing
-        // to do with the autocorrection setting.
         final boolean showingAddToDictionaryHint = index == 0 && mSuggest != null
                 // If there is no dictionary the hint should be shown.
                 && (!mSuggest.hasMainDictionary()
@@ -1900,14 +1893,9 @@
      */
     private void commitChosenWord(final CharSequence chosenWord, final int commitType,
             final int separatorCode) {
-        if (mCurrentSettings.mEnableSuggestionSpanInsertion) {
-            final SuggestedWords suggestedWords = mSuggestionsView.getSuggestions();
-            mConnection.commitText(SuggestionSpanUtils.getTextWithSuggestionSpan(
-                    this, chosenWord, suggestedWords, mIsMainDictionaryAvailable),
-                    1);
-        } else {
-            mConnection.commitText(chosenWord, 1);
-        }
+        final SuggestedWords suggestedWords = mSuggestionsView.getSuggestions();
+        mConnection.commitText(SuggestionSpanUtils.getTextWithSuggestionSpan(
+                this, chosenWord, suggestedWords, mIsMainDictionaryAvailable), 1);
         if (ProductionFlag.IS_EXPERIMENTAL) {
             ResearchLogger.latinIME_commitText(chosenWord);
         }
@@ -1922,7 +1910,7 @@
     }
 
     public void updateBigramPredictions() {
-        if (mSuggest == null || !isSuggestionsRequested())
+        if (mSuggest == null || !mCurrentSettings.isSuggestionsRequested(mDisplayOrientation))
             return;
 
         if (!mCurrentSettings.mBigramPredictionEnabled) {
@@ -1931,7 +1919,7 @@
         }
 
         final SuggestedWords suggestedWords;
-        if (mCurrentSettings.mCorrectionMode == Suggest.CORRECTION_FULL_BIGRAM) {
+        if (mCurrentSettings.mCorrectionEnabled) {
             final CharSequence prevWord = mConnection.getThisWord(mCurrentSettings.mWordSeparators);
             if (!TextUtils.isEmpty(prevWord)) {
                 suggestedWords = mSuggest.getBigramPredictions(prevWord);
@@ -1964,10 +1952,10 @@
     private CharSequence addToUserHistoryDictionary(final CharSequence suggestion) {
         if (TextUtils.isEmpty(suggestion)) return null;
 
-        // Only auto-add to dictionary if auto-correct is ON. Otherwise we'll be
-        // adding words in situations where the user or application really didn't
-        // want corrections enabled or learned.
-        if (!mCurrentSettings.isCorrectionOn()) return null;
+        // If correction is not enabled, we don't add words to the user history dictionary.
+        // That's to avoid unintended additions in some sensitive fields, or fields that
+        // expect to receive non-words.
+        if (!mCurrentSettings.mCorrectionEnabled) return null;
 
         if (mUserHistoryDictionary != null) {
             final CharSequence prevWord
@@ -2221,11 +2209,10 @@
         final Keyboard keyboard = mKeyboardSwitcher.getKeyboard();
         final int keyboardMode = keyboard != null ? keyboard.mId.mMode : -1;
         p.println("  Keyboard mode = " + keyboardMode);
-        p.println("  mIsSuggestionsStripRequestedByTextField = "
-                + mCurrentSettings.isSuggestionStripRequestedByTextField());
-        p.println("  mCorrectionMode=" + mCurrentSettings.mCorrectionMode);
+        p.println("  mIsSuggestionsSuggestionsRequested = "
+                + mCurrentSettings.isSuggestionsRequested(mDisplayOrientation));
+        p.println("  mCorrectionEnabled=" + mCurrentSettings.mCorrectionEnabled);
         p.println("  isComposingWord=" + mWordComposer.isComposingWord());
-        p.println("  isCorrectionOn=" + mCurrentSettings.isCorrectionOn());
         p.println("  mSoundOn=" + mCurrentSettings.mSoundOn);
         p.println("  mVibrateOn=" + mCurrentSettings.mVibrateOn);
         p.println("  mKeyPreviewPopupOn=" + mCurrentSettings.mKeyPreviewPopupOn);
diff --git a/java/src/com/android/inputmethod/latin/ResearchLogger.java b/java/src/com/android/inputmethod/latin/ResearchLogger.java
index 5779d99..ee59692 100644
--- a/java/src/com/android/inputmethod/latin/ResearchLogger.java
+++ b/java/src/com/android/inputmethod/latin/ResearchLogger.java
@@ -51,7 +51,9 @@
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.UUID;
@@ -67,6 +69,7 @@
 public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChangeListener {
     private static final String TAG = ResearchLogger.class.getSimpleName();
     private static final boolean DEBUG = false;
+    private static final boolean OUTPUT_ENTIRE_BUFFER = false;  // true may disclose private info
     /* package */ static boolean sIsLogging = false;
     private static final int OUTPUT_FORMAT_VERSION = 1;
     private static final String PREF_USABILITY_STUDY_MODE = "usability_study_mode";
@@ -96,10 +99,19 @@
     private static final int LOGGING_STATE_STOPPING = 2;
     private boolean mIsPasswordView = false;
 
+    // digits entered by the user are replaced with this codepoint.
+    /* package for test */ static final int DIGIT_REPLACEMENT_CODEPOINT =
+            Character.codePointAt("\uE000", 0);  // U+E000 is in the "private-use area"
+    // U+E001 is in the "private-use area"
+    /* package for test */ static final String WORD_REPLACEMENT_STRING = "\uE001";
     // set when LatinIME should ignore an onUpdateSelection() callback that
     // arises from operations in this class
     private static boolean sLatinIMEExpectingUpdateSelection = false;
 
+    // used to check whether words are not unique
+    private Suggest mSuggest;
+    private Dictionary mDictionary;
+
     private static class NullOutputStream extends OutputStream {
         /** {@inheritDoc} */
         @Override
@@ -314,6 +326,10 @@
         latinIME.showOptionDialog(builder.create());
     }
 
+    public void initSuggest(Suggest suggest) {
+        mSuggest = suggest;
+    }
+
     private void setIsPasswordView(boolean isPasswordView) {
         mIsPasswordView = isPasswordView;
     }
@@ -327,125 +343,241 @@
     private static final String EVENT_TYPE_KEY = "_ty";
     private static final Object[] EVENTKEYS_NULLVALUES = {};
 
+    private LogUnit mCurrentLogUnit = new LogUnit();
+
     /**
-     * Write a description of the event out to the ResearchLog.
+     * Buffer a research log event, flagging it as privacy-sensitive.
      *
-     * Runs in the background to avoid blocking the UI thread.
+     * This event contains potentially private information.  If the word that this event is a part
+     * of is determined to be privacy-sensitive, then this event should not be included in the
+     * output log.  The system waits to output until the containing word is known.
      *
      * @param keys an array containing a descriptive name for the event, followed by the keys
      * @param values an array of values, either a String or Number.  length should be one
      * less than the keys array
      */
-    private synchronized void writeEvent(final String[] keys, final Object[] values) {
+    private synchronized void enqueuePotentiallyPrivateEvent(final String[] keys,
+            final Object[] values) {
         assert values.length + 1 == keys.length;
+        mCurrentLogUnit.addLogAtom(keys, values, true);
+    }
+
+    /**
+     * Buffer a research log event, flaggint it as not privacy-sensitive.
+     *
+     * This event contains no potentially private information.  Even if the word that this event
+     * is privacy-sensitive, this event can still safely be sent to the output log.  The system
+     * waits until the containing word is known so that this event can be written in the proper
+     * temporal order with other events that may be privacy sensitive.
+     *
+     * @param keys an array containing a descriptive name for the event, followed by the keys
+     * @param values an array of values, either a String or Number.  length should be one
+     * less than the keys array
+     */
+    private synchronized void enqueueEvent(final String[] keys, final Object[] values) {
+        assert values.length + 1 == keys.length;
+        mCurrentLogUnit.addLogAtom(keys, values, false);
+    }
+
+    private boolean isInDictionary(CharSequence word) {
+        return (mDictionary != null) && (mDictionary.isValidWord(word));
+    }
+
+    /**
+     * Write out enqueued LogEvents to the log, filtered for privacy.
+     *
+     * If word is in the dictionary, then it is not privacy-sensitive and all LogEvents related to
+     * it can be written to the log.  If the word is not in the dictionary, then it may correspond
+     * to a proper name, which might reveal private information, so neither the word nor any
+     * information related to the word (e.g. the down/motion/up coordinates) should be revealed.
+     * These LogEvents have been marked as privacy-sensitive; non privacy-sensitive events are still
+     * written out.
+     *
+     * @param word the word to be checked for inclusion in the dictionary
+     */
+    /* package for test */ synchronized void flushQueue(CharSequence word) {
         if (isAllowedToLog()) {
-            mLoggingHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    try {
-                        mJsonWriter.beginObject();
-                        mJsonWriter.name(CURRENT_TIME_KEY).value(System.currentTimeMillis());
-                        mJsonWriter.name(UPTIME_KEY).value(SystemClock.uptimeMillis());
-                        mJsonWriter.name(EVENT_TYPE_KEY).value(keys[0]);
-                        final int length = values.length;
-                        for (int i = 0; i < length; i++) {
-                            mJsonWriter.name(keys[i + 1]);
-                            Object value = values[i];
-                            if (value instanceof String) {
-                                mJsonWriter.value((String) value);
-                            } else if (value instanceof Number) {
-                                mJsonWriter.value((Number) value);
-                            } else if (value instanceof Boolean) {
-                                mJsonWriter.value((Boolean) value);
-                            } else if (value instanceof CompletionInfo[]) {
-                                CompletionInfo[] ci = (CompletionInfo[]) value;
-                                mJsonWriter.beginArray();
-                                for (int j = 0; j < ci.length; j++) {
-                                    mJsonWriter.value(ci[j].toString());
-                                }
-                                mJsonWriter.endArray();
-                            } else if (value instanceof SharedPreferences) {
-                                SharedPreferences prefs = (SharedPreferences) value;
-                                mJsonWriter.beginObject();
-                                for (Map.Entry<String,?> entry : prefs.getAll().entrySet()) {
-                                    mJsonWriter.name(entry.getKey());
-                                    final Object innerValue = entry.getValue();
-                                    if (innerValue == null) {
-                                        mJsonWriter.nullValue();
-                                    } else if (innerValue instanceof Boolean) {
-                                        mJsonWriter.value((Boolean) innerValue);
-                                    } else if (innerValue instanceof Number) {
-                                        mJsonWriter.value((Number) innerValue);
-                                    } else {
-                                        mJsonWriter.value(innerValue.toString());
-                                    }
-                                }
-                                mJsonWriter.endObject();
-                            } else if (value instanceof Key[]) {
-                                Key[] keys = (Key[]) value;
-                                mJsonWriter.beginArray();
-                                for (Key key : keys) {
-                                    mJsonWriter.beginObject();
-                                    mJsonWriter.name("code").value(key.mCode);
-                                    mJsonWriter.name("altCode").value(key.mAltCode);
-                                    mJsonWriter.name("x").value(key.mX);
-                                    mJsonWriter.name("y").value(key.mY);
-                                    mJsonWriter.name("w").value(key.mWidth);
-                                    mJsonWriter.name("h").value(key.mHeight);
-                                    mJsonWriter.endObject();
-                                }
-                                mJsonWriter.endArray();
-                            } else if (value instanceof SuggestedWords) {
-                                SuggestedWords words = (SuggestedWords) value;
-                                mJsonWriter.beginObject();
-                                mJsonWriter.name("typedWordValid").value(words.mTypedWordValid);
-                                mJsonWriter.name("hasAutoCorrectionCandidate")
-                                    .value(words.mHasAutoCorrectionCandidate);
-                                mJsonWriter.name("isPunctuationSuggestions")
-                                    .value(words.mIsPunctuationSuggestions);
-                                mJsonWriter.name("allowsToBeAutoCorrected")
-                                    .value(words.mAllowsToBeAutoCorrected);
-                                mJsonWriter.name("isObsoleteSuggestions")
-                                    .value(words.mIsObsoleteSuggestions);
-                                mJsonWriter.name("isPrediction")
-                                    .value(words.mIsPrediction);
-                                mJsonWriter.name("words");
-                                mJsonWriter.beginArray();
-                                final int size = words.size();
-                                for (int j = 0; j < size; j++) {
-                                    SuggestedWordInfo wordInfo = words.getWordInfo(j);
-                                    mJsonWriter.value(wordInfo.toString());
-                                }
-                                mJsonWriter.endArray();
-                                mJsonWriter.endObject();
-                            } else if (value == null) {
-                                mJsonWriter.nullValue();
-                            } else {
-                                Log.w(TAG, "Unrecognized type to be logged: " +
-                                        (value == null ? "<null>" : value.getClass().getName()));
-                                mJsonWriter.nullValue();
-                            }
-                        }
-                        mJsonWriter.endObject();
-                    } catch (IOException e) {
-                        e.printStackTrace();
-                        Log.w(TAG, "Error in JsonWriter; disabling logging");
-                        try {
-                            mJsonWriter.close();
-                        } catch (IllegalStateException e1) {
-                            // assume that this is just the json not being terminated properly.
-                            // ignore
-                        } catch (IOException e1) {
-                            e1.printStackTrace();
-                        } finally {
-                            mJsonWriter = NULL_JSON_WRITER;
+            // check for dictionary
+            if (mDictionary == null && mSuggest != null && mSuggest.hasMainDictionary()) {
+                mDictionary = mSuggest.getMainDictionary();
+            }
+            mCurrentLogUnit.setIsPrivacySafe(word != null && isInDictionary(word));
+            mLoggingHandler.post(mCurrentLogUnit);
+            mCurrentLogUnit = new LogUnit();
+        }
+    }
+
+    private synchronized void outputEvent(final String[] keys, final Object[] values) {
+        try {
+            mJsonWriter.beginObject();
+            mJsonWriter.name(CURRENT_TIME_KEY).value(System.currentTimeMillis());
+            mJsonWriter.name(UPTIME_KEY).value(SystemClock.uptimeMillis());
+            mJsonWriter.name(EVENT_TYPE_KEY).value(keys[0]);
+            final int length = values.length;
+            for (int i = 0; i < length; i++) {
+                mJsonWriter.name(keys[i + 1]);
+                Object value = values[i];
+                if (value instanceof String) {
+                    mJsonWriter.value((String) value);
+                } else if (value instanceof Number) {
+                    mJsonWriter.value((Number) value);
+                } else if (value instanceof Boolean) {
+                    mJsonWriter.value((Boolean) value);
+                } else if (value instanceof CompletionInfo[]) {
+                    CompletionInfo[] ci = (CompletionInfo[]) value;
+                    mJsonWriter.beginArray();
+                    for (int j = 0; j < ci.length; j++) {
+                        mJsonWriter.value(ci[j].toString());
+                    }
+                    mJsonWriter.endArray();
+                } else if (value instanceof SharedPreferences) {
+                    SharedPreferences prefs = (SharedPreferences) value;
+                    mJsonWriter.beginObject();
+                    for (Map.Entry<String,?> entry : prefs.getAll().entrySet()) {
+                        mJsonWriter.name(entry.getKey());
+                        final Object innerValue = entry.getValue();
+                        if (innerValue == null) {
+                            mJsonWriter.nullValue();
+                        } else if (innerValue instanceof Boolean) {
+                            mJsonWriter.value((Boolean) innerValue);
+                        } else if (innerValue instanceof Number) {
+                            mJsonWriter.value((Number) innerValue);
+                        } else {
+                            mJsonWriter.value(innerValue.toString());
                         }
                     }
+                    mJsonWriter.endObject();
+                } else if (value instanceof Key[]) {
+                    Key[] keyboardKeys = (Key[]) value;
+                    mJsonWriter.beginArray();
+                    for (Key keyboardKey : keyboardKeys) {
+                        mJsonWriter.beginObject();
+                        mJsonWriter.name("code").value(keyboardKey.mCode);
+                        mJsonWriter.name("altCode").value(keyboardKey.mAltCode);
+                        mJsonWriter.name("x").value(keyboardKey.mX);
+                        mJsonWriter.name("y").value(keyboardKey.mY);
+                        mJsonWriter.name("w").value(keyboardKey.mWidth);
+                        mJsonWriter.name("h").value(keyboardKey.mHeight);
+                        mJsonWriter.endObject();
+                    }
+                    mJsonWriter.endArray();
+                } else if (value instanceof SuggestedWords) {
+                    SuggestedWords words = (SuggestedWords) value;
+                    mJsonWriter.beginObject();
+                    mJsonWriter.name("typedWordValid").value(words.mTypedWordValid);
+                    mJsonWriter.name("hasAutoCorrectionCandidate")
+                        .value(words.mHasAutoCorrectionCandidate);
+                    mJsonWriter.name("isPunctuationSuggestions")
+                        .value(words.mIsPunctuationSuggestions);
+                    mJsonWriter.name("allowsToBeAutoCorrected")
+                        .value(words.mAllowsToBeAutoCorrected);
+                    mJsonWriter.name("isObsoleteSuggestions")
+                        .value(words.mIsObsoleteSuggestions);
+                    mJsonWriter.name("isPrediction")
+                        .value(words.mIsPrediction);
+                    mJsonWriter.name("words");
+                    mJsonWriter.beginArray();
+                    final int size = words.size();
+                    for (int j = 0; j < size; j++) {
+                        SuggestedWordInfo wordInfo = words.getWordInfo(j);
+                        mJsonWriter.value(wordInfo.toString());
+                    }
+                    mJsonWriter.endArray();
+                    mJsonWriter.endObject();
+                } else if (value == null) {
+                    mJsonWriter.nullValue();
+                } else {
+                    Log.w(TAG, "Unrecognized type to be logged: " +
+                            (value == null ? "<null>" : value.getClass().getName()));
+                    mJsonWriter.nullValue();
                 }
-            });
+            }
+            mJsonWriter.endObject();
+        } catch (IOException e) {
+            e.printStackTrace();
+            Log.w(TAG, "Error in JsonWriter; disabling logging");
+            try {
+                mJsonWriter.close();
+            } catch (IllegalStateException e1) {
+                // assume that this is just the json not being terminated properly.
+                // ignore
+            } catch (IOException e1) {
+                e1.printStackTrace();
+            } finally {
+                mJsonWriter = NULL_JSON_WRITER;
+            }
         }
     }
 
+    private static class LogUnit implements Runnable {
+        private final List<String[]> mKeysList = new ArrayList<String[]>();
+        private final List<Object[]> mValuesList = new ArrayList<Object[]>();
+        private final List<Boolean> mIsPotentiallyPrivate = new ArrayList<Boolean>();
+        private boolean mIsPrivacySafe = false;
+
+        private void addLogAtom(final String[] keys, final Object[] values,
+                final Boolean isPotentiallyPrivate) {
+            mKeysList.add(keys);
+            mValuesList.add(values);
+            mIsPotentiallyPrivate.add(isPotentiallyPrivate);
+        }
+
+        void setIsPrivacySafe(boolean isPrivacySafe) {
+            mIsPrivacySafe = isPrivacySafe;
+        }
+
+        @Override
+        public void run() {
+            final int numAtoms = mKeysList.size();
+            for (int atomIndex = 0; atomIndex < numAtoms; atomIndex++) {
+                if (!mIsPrivacySafe && mIsPotentiallyPrivate.get(atomIndex)) {
+                    continue;
+                }
+                final String[] keys = mKeysList.get(atomIndex);
+                final Object[] values = mValuesList.get(atomIndex);
+                ResearchLogger.getInstance().outputEvent(keys, values);
+            }
+        }
+    }
+
+    private static int scrubDigitFromCodePoint(int codePoint) {
+        return Character.isDigit(codePoint) ? DIGIT_REPLACEMENT_CODEPOINT : codePoint;
+    }
+
+    /* package for test */ static String scrubDigitsFromString(String s) {
+        StringBuilder sb = null;
+        final int length = s.length();
+        for (int i = 0; i < length; i = s.offsetByCodePoints(i, 1)) {
+            int codePoint = Character.codePointAt(s, i);
+            if (Character.isDigit(codePoint)) {
+                if (sb == null) {
+                    sb = new StringBuilder(length);
+                    sb.append(s.substring(0, i));
+                }
+                sb.appendCodePoint(DIGIT_REPLACEMENT_CODEPOINT);
+            } else {
+                if (sb != null) {
+                    sb.appendCodePoint(codePoint);
+                }
+            }
+        }
+        if (sb == null) {
+            return s;
+        } else {
+            return sb.toString();
+        }
+    }
+
+    private String scrubWord(String word) {
+        if (mDictionary == null) {
+            return WORD_REPLACEMENT_STRING;
+        }
+        if (mDictionary.isValidWord(word)) {
+            return word;
+        }
+        return WORD_REPLACEMENT_STRING;
+    }
+
     private static final String[] EVENTKEYS_LATINKEYBOARDVIEW_PROCESSMOTIONEVENT = {
         "LatinKeyboardViewProcessMotionEvent", "action", "eventTime", "id", "x", "y", "size",
         "pressure"
@@ -469,7 +601,8 @@
             final Object[] values = {
                 actionString, eventTime, id, x, y, size, pressure
             };
-            getInstance().writeEvent(EVENTKEYS_LATINKEYBOARDVIEW_PROCESSMOTIONEVENT, values);
+            getInstance().enqueuePotentiallyPrivateEvent(
+                    EVENTKEYS_LATINKEYBOARDVIEW_PROCESSMOTIONEVENT, values);
         }
     }
 
@@ -478,9 +611,9 @@
     };
     public static void latinIME_onCodeInput(final int code, final int x, final int y) {
         final Object[] values = {
-            Keyboard.printableCode(code), x, y
+            Keyboard.printableCode(scrubDigitFromCodePoint(code)), x, y
         };
-        getInstance().writeEvent(EVENTKEYS_LATINIME_ONCODEINPUT, values);
+        getInstance().enqueuePotentiallyPrivateEvent(EVENTKEYS_LATINIME_ONCODEINPUT, values);
     }
 
     private static final String[] EVENTKEYS_CORRECTION = {
@@ -489,9 +622,9 @@
     public static void logCorrection(final String subgroup, final String before, final String after,
             final int position) {
         final Object[] values = {
-            subgroup, before, after, position
+            subgroup, scrubDigitsFromString(before), scrubDigitsFromString(after), position
         };
-        getInstance().writeEvent(EVENTKEYS_CORRECTION, values);
+        getInstance().enqueuePotentiallyPrivateEvent(EVENTKEYS_CORRECTION, values);
     }
 
     private static final String[] EVENTKEYS_LATINIME_COMMITCURRENTAUTOCORRECTION = {
@@ -500,9 +633,12 @@
     public static void latinIME_commitCurrentAutoCorrection(final String typedWord,
             final String autoCorrection) {
         final Object[] values = {
-            typedWord, autoCorrection
+            scrubDigitsFromString(typedWord), scrubDigitsFromString(autoCorrection)
         };
-        getInstance().writeEvent(EVENTKEYS_LATINIME_COMMITCURRENTAUTOCORRECTION, values);
+        final ResearchLogger researchLogger = getInstance();
+        researchLogger.enqueuePotentiallyPrivateEvent(
+                EVENTKEYS_LATINIME_COMMITCURRENTAUTOCORRECTION, values);
+        researchLogger.flushQueue(autoCorrection);
     }
 
     private static final String[] EVENTKEYS_LATINIME_COMMITTEXT = {
@@ -510,9 +646,11 @@
     };
     public static void latinIME_commitText(final CharSequence typedWord) {
         final Object[] values = {
-            typedWord.toString()
+            scrubDigitsFromString(typedWord.toString())
         };
-        getInstance().writeEvent(EVENTKEYS_LATINIME_COMMITTEXT, values);
+        final ResearchLogger researchLogger = getInstance();
+        researchLogger.enqueuePotentiallyPrivateEvent(EVENTKEYS_LATINIME_COMMITTEXT, values);
+        researchLogger.flushQueue(typedWord);
     }
 
     private static final String[] EVENTKEYS_LATINIME_DELETESURROUNDINGTEXT = {
@@ -522,14 +660,14 @@
         final Object[] values = {
             length
         };
-        getInstance().writeEvent(EVENTKEYS_LATINIME_DELETESURROUNDINGTEXT, values);
+        getInstance().enqueueEvent(EVENTKEYS_LATINIME_DELETESURROUNDINGTEXT, values);
     }
 
     private static final String[] EVENTKEYS_LATINIME_DOUBLESPACEAUTOPERIOD = {
         "LatinIMEDoubleSpaceAutoPeriod"
     };
     public static void latinIME_doubleSpaceAutoPeriod() {
-        getInstance().writeEvent(EVENTKEYS_LATINIME_DOUBLESPACEAUTOPERIOD, EVENTKEYS_NULLVALUES);
+        getInstance().enqueueEvent(EVENTKEYS_LATINIME_DOUBLESPACEAUTOPERIOD, EVENTKEYS_NULLVALUES);
     }
 
     private static final String[] EVENTKEYS_LATINIME_ONDISPLAYCOMPLETIONS = {
@@ -540,7 +678,8 @@
         final Object[] values = {
             applicationSpecifiedCompletions
         };
-        getInstance().writeEvent(EVENTKEYS_LATINIME_ONDISPLAYCOMPLETIONS, values);
+        getInstance().enqueuePotentiallyPrivateEvent(EVENTKEYS_LATINIME_ONDISPLAYCOMPLETIONS,
+                values);
     }
 
     /* package */ static boolean getAndClearLatinIMEExpectingUpdateSelection() {
@@ -561,27 +700,35 @@
             ic.setSelection(savedSelectionStart, savedSelectionEnd);
             ic.endBatchEdit();
             sLatinIMEExpectingUpdateSelection = true;
-            Object[] values = new Object[2];
-            if (TextUtils.isEmpty(charSequence)) {
-                values[0] = false;
-                values[1] = "";
-            } else {
-                if (charSequence.length() > MAX_INPUTVIEW_LENGTH_TO_CAPTURE) {
-                    int length = MAX_INPUTVIEW_LENGTH_TO_CAPTURE;
-                    // do not cut in the middle of a supplementary character
-                    final char c = charSequence.charAt(length - 1);
-                    if (Character.isHighSurrogate(c)) {
-                        length--;
-                    }
-                    final CharSequence truncatedCharSequence = charSequence.subSequence(0, length);
-                    values[0] = true;
-                    values[1] = truncatedCharSequence.toString();
-                } else {
+            final Object[] values = new Object[2];
+            if (OUTPUT_ENTIRE_BUFFER) {
+                if (TextUtils.isEmpty(charSequence)) {
                     values[0] = false;
-                    values[1] = charSequence.toString();
+                    values[1] = "";
+                } else {
+                    if (charSequence.length() > MAX_INPUTVIEW_LENGTH_TO_CAPTURE) {
+                        int length = MAX_INPUTVIEW_LENGTH_TO_CAPTURE;
+                        // do not cut in the middle of a supplementary character
+                        final char c = charSequence.charAt(length - 1);
+                        if (Character.isHighSurrogate(c)) {
+                            length--;
+                        }
+                        final CharSequence truncatedCharSequence = charSequence.subSequence(0,
+                                length);
+                        values[0] = true;
+                        values[1] = truncatedCharSequence.toString();
+                    } else {
+                        values[0] = false;
+                        values[1] = charSequence.toString();
+                    }
                 }
+            } else {
+                values[0] = true;
+                values[1] = "";
             }
-            getInstance().writeEvent(EVENTKEYS_LATINIME_ONWINDOWHIDDEN, values);
+            final ResearchLogger researchLogger = getInstance();
+            researchLogger.enqueueEvent(EVENTKEYS_LATINIME_ONWINDOWHIDDEN, values);
+            researchLogger.flushQueue(null);
         }
     }
 
@@ -597,7 +744,7 @@
                 Integer.toHexString(editorInfo.imeOptions), editorInfo.fieldId, Build.DISPLAY,
                 Build.MODEL, prefs, OUTPUT_FORMAT_VERSION
             };
-            getInstance().writeEvent(EVENTKEYS_LATINIME_ONSTARTINPUTVIEWINTERNAL, values);
+            getInstance().enqueueEvent(EVENTKEYS_LATINIME_ONSTARTINPUTVIEWINTERNAL, values);
         }
     }
 
@@ -631,12 +778,14 @@
                 word = range.mWord;
             }
         }
+        final ResearchLogger researchLogger = getInstance();
+        final String scrubbedWord = researchLogger.scrubWord(word);
         final Object[] values = {
             lastSelectionStart, lastSelectionEnd, oldSelStart, oldSelEnd, newSelStart,
             newSelEnd, composingSpanStart, composingSpanEnd, expectingUpdateSelection,
-            expectingUpdateSelectionFromLogger, word
+            expectingUpdateSelectionFromLogger, scrubbedWord
         };
-        getInstance().writeEvent(EVENTKEYS_LATINIME_ONUPDATESELECTION, values);
+        researchLogger.enqueuePotentiallyPrivateEvent(EVENTKEYS_LATINIME_ONUPDATESELECTION, values);
     }
 
     private static final String[] EVENTKEYS_LATINIME_PERFORMEDITORACTION = {
@@ -646,7 +795,7 @@
         final Object[] values = {
             imeActionNext
         };
-        getInstance().writeEvent(EVENTKEYS_LATINIME_PERFORMEDITORACTION, values);
+        getInstance().enqueueEvent(EVENTKEYS_LATINIME_PERFORMEDITORACTION, values);
     }
 
     private static final String[] EVENTKEYS_LATINIME_PICKAPPLICATIONSPECIFIEDCOMPLETION = {
@@ -657,7 +806,10 @@
         final Object[] values = {
             index, cs, x, y
         };
-        getInstance().writeEvent(EVENTKEYS_LATINIME_PICKAPPLICATIONSPECIFIEDCOMPLETION, values);
+        final ResearchLogger researchLogger = getInstance();
+        researchLogger.enqueuePotentiallyPrivateEvent(
+                EVENTKEYS_LATINIME_PICKAPPLICATIONSPECIFIEDCOMPLETION, values);
+        researchLogger.flushQueue(cs.toString());
     }
 
     private static final String[] EVENTKEYS_LATINIME_PICKSUGGESTIONMANUALLY = {
@@ -666,9 +818,13 @@
     public static void latinIME_pickSuggestionManually(final String replacedWord,
             final int index, CharSequence suggestion, int x, int y) {
         final Object[] values = {
-            replacedWord, index, suggestion, x, y
+            scrubDigitsFromString(replacedWord), index, suggestion == null ? null :
+                    scrubDigitsFromString(suggestion.toString()), x, y
         };
-        getInstance().writeEvent(EVENTKEYS_LATINIME_PICKSUGGESTIONMANUALLY, values);
+        final ResearchLogger researchLogger = getInstance();
+        researchLogger.enqueuePotentiallyPrivateEvent(EVENTKEYS_LATINIME_PICKSUGGESTIONMANUALLY,
+                values);
+        researchLogger.flushQueue(suggestion.toString());
     }
 
     private static final String[] EVENTKEYS_LATINIME_PUNCTUATIONSUGGESTION = {
@@ -679,14 +835,14 @@
         final Object[] values = {
             index, suggestion, x, y
         };
-        getInstance().writeEvent(EVENTKEYS_LATINIME_PUNCTUATIONSUGGESTION, values);
+        getInstance().enqueueEvent(EVENTKEYS_LATINIME_PUNCTUATIONSUGGESTION, values);
     }
 
     private static final String[] EVENTKEYS_LATINIME_REVERTDOUBLESPACEWHILEINBATCHEDIT = {
         "LatinIMERevertDoubleSpaceWhileInBatchEdit"
     };
     public static void latinIME_revertDoubleSpaceWhileInBatchEdit() {
-        getInstance().writeEvent(EVENTKEYS_LATINIME_REVERTDOUBLESPACEWHILEINBATCHEDIT,
+        getInstance().enqueueEvent(EVENTKEYS_LATINIME_REVERTDOUBLESPACEWHILEINBATCHEDIT,
                 EVENTKEYS_NULLVALUES);
     }
 
@@ -694,7 +850,7 @@
         "LatinIMERevertSwapPunctuation"
     };
     public static void latinIME_revertSwapPunctuation() {
-        getInstance().writeEvent(EVENTKEYS_LATINIME_REVERTSWAPPUNCTUATION, EVENTKEYS_NULLVALUES);
+        getInstance().enqueueEvent(EVENTKEYS_LATINIME_REVERTSWAPPUNCTUATION, EVENTKEYS_NULLVALUES);
     }
 
     private static final String[] EVENTKEYS_LATINIME_SENDKEYCODEPOINT = {
@@ -702,16 +858,16 @@
     };
     public static void latinIME_sendKeyCodePoint(final int code) {
         final Object[] values = {
-            code
+            Keyboard.printableCode(scrubDigitFromCodePoint(code))
         };
-        getInstance().writeEvent(EVENTKEYS_LATINIME_SENDKEYCODEPOINT, values);
+        getInstance().enqueuePotentiallyPrivateEvent(EVENTKEYS_LATINIME_SENDKEYCODEPOINT, values);
     }
 
     private static final String[] EVENTKEYS_LATINIME_SWAPSWAPPERANDSPACEWHILEINBATCHEDIT = {
         "LatinIMESwapSwapperAndSpaceWhileInBatchEdit"
     };
     public static void latinIME_swapSwapperAndSpaceWhileInBatchEdit() {
-        getInstance().writeEvent(EVENTKEYS_LATINIME_SWAPSWAPPERANDSPACEWHILEINBATCHEDIT,
+        getInstance().enqueueEvent(EVENTKEYS_LATINIME_SWAPSWAPPERANDSPACEWHILEINBATCHEDIT,
                 EVENTKEYS_NULLVALUES);
     }
 
@@ -719,14 +875,14 @@
         "LatinIMESwitchToKeyboardView"
     };
     public static void latinIME_switchToKeyboardView() {
-        getInstance().writeEvent(EVENTKEYS_LATINIME_SWITCHTOKEYBOARDVIEW, EVENTKEYS_NULLVALUES);
+        getInstance().enqueueEvent(EVENTKEYS_LATINIME_SWITCHTOKEYBOARDVIEW, EVENTKEYS_NULLVALUES);
     }
 
     private static final String[] EVENTKEYS_LATINKEYBOARDVIEW_ONLONGPRESS = {
         "LatinKeyboardViewOnLongPress"
     };
     public static void latinKeyboardView_onLongPress() {
-        getInstance().writeEvent(EVENTKEYS_LATINKEYBOARDVIEW_ONLONGPRESS, EVENTKEYS_NULLVALUES);
+        getInstance().enqueueEvent(EVENTKEYS_LATINKEYBOARDVIEW_ONLONGPRESS, EVENTKEYS_NULLVALUES);
     }
 
     private static final String[] EVENTKEYS_LATINKEYBOARDVIEW_SETKEYBOARD = {
@@ -738,7 +894,7 @@
     public static void latinKeyboardView_setKeyboard(final Keyboard keyboard) {
         if (keyboard != null) {
             final KeyboardId kid = keyboard.mId;
-            boolean isPasswordView = kid.passwordInput();
+            final boolean isPasswordView = kid.passwordInput();
             final Object[] values = {
                     KeyboardId.elementIdToName(kid.mElementId),
                     kid.mLocale + ":" + kid.mSubtype.getExtraValueOf(KEYBOARD_LAYOUT_SET),
@@ -758,7 +914,7 @@
                     keyboard.mOccupiedHeight,
                     keyboard.mKeys
                 };
-            getInstance().writeEvent(EVENTKEYS_LATINKEYBOARDVIEW_SETKEYBOARD, values);
+            getInstance().enqueueEvent(EVENTKEYS_LATINKEYBOARDVIEW_SETKEYBOARD, values);
             getInstance().setIsPasswordView(isPasswordView);
         }
     }
@@ -770,14 +926,14 @@
         final Object[] values = {
             originallyTypedWord
         };
-        getInstance().writeEvent(EVENTKEYS_LATINIME_REVERTCOMMIT, values);
+        getInstance().enqueuePotentiallyPrivateEvent(EVENTKEYS_LATINIME_REVERTCOMMIT, values);
     }
 
     private static final String[] EVENTKEYS_POINTERTRACKER_CALLLISTENERONCANCELINPUT = {
         "PointerTrackerCallListenerOnCancelInput"
     };
     public static void pointerTracker_callListenerOnCancelInput() {
-        getInstance().writeEvent(EVENTKEYS_POINTERTRACKER_CALLLISTENERONCANCELINPUT,
+        getInstance().enqueueEvent(EVENTKEYS_POINTERTRACKER_CALLLISTENERONCANCELINPUT,
                 EVENTKEYS_NULLVALUES);
     }
 
@@ -791,10 +947,12 @@
         if (key != null) {
             CharSequence outputText = key.mOutputText;
             final Object[] values = {
-                Keyboard.printableCode(code), outputText, x, y, ignoreModifierKey, altersCode,
-                key.isEnabled()
+                Keyboard.printableCode(scrubDigitFromCodePoint(code)), outputText == null ? null
+                        : scrubDigitsFromString(outputText.toString()),
+                x, y, ignoreModifierKey, altersCode, key.isEnabled()
             };
-            getInstance().writeEvent(EVENTKEYS_POINTERTRACKER_CALLLISTENERONCODEINPUT, values);
+            getInstance().enqueuePotentiallyPrivateEvent(
+                    EVENTKEYS_POINTERTRACKER_CALLLISTENERONCODEINPUT, values);
         }
     }
 
@@ -806,10 +964,11 @@
             final boolean withSliding, final boolean ignoreModifierKey) {
         if (key != null) {
             final Object[] values = {
-                Keyboard.printableCode(primaryCode), withSliding, ignoreModifierKey,
-                key.isEnabled()
+                Keyboard.printableCode(scrubDigitFromCodePoint(primaryCode)), withSliding,
+                ignoreModifierKey, key.isEnabled()
             };
-            getInstance().writeEvent(EVENTKEYS_POINTERTRACKER_CALLLISTENERONRELEASE, values);
+            getInstance().enqueuePotentiallyPrivateEvent(
+                    EVENTKEYS_POINTERTRACKER_CALLLISTENERONRELEASE, values);
         }
     }
 
@@ -820,7 +979,7 @@
         final Object[] values = {
             deltaT, distanceSquared
         };
-        getInstance().writeEvent(EVENTKEYS_POINTERTRACKER_ONDOWNEVENT, values);
+        getInstance().enqueuePotentiallyPrivateEvent(EVENTKEYS_POINTERTRACKER_ONDOWNEVENT, values);
     }
 
     private static final String[] EVENTKEYS_POINTERTRACKER_ONMOVEEVENT = {
@@ -831,7 +990,7 @@
         final Object[] values = {
             x, y, lastX, lastY
         };
-        getInstance().writeEvent(EVENTKEYS_POINTERTRACKER_ONMOVEEVENT, values);
+        getInstance().enqueuePotentiallyPrivateEvent(EVENTKEYS_POINTERTRACKER_ONMOVEEVENT, values);
     }
 
     private static final String[] EVENTKEYS_SUDDENJUMPINGTOUCHEVENTHANDLER_ONTOUCHEVENT = {
@@ -842,8 +1001,8 @@
             final Object[] values = {
                 me.toString()
             };
-            getInstance().writeEvent(EVENTKEYS_SUDDENJUMPINGTOUCHEVENTHANDLER_ONTOUCHEVENT,
-                    values);
+            getInstance().enqueuePotentiallyPrivateEvent(
+                    EVENTKEYS_SUDDENJUMPINGTOUCHEVENTHANDLER_ONTOUCHEVENT, values);
         }
     }
 
@@ -855,7 +1014,8 @@
             final Object[] values = {
                 suggestedWords
             };
-            getInstance().writeEvent(EVENTKEYS_SUGGESTIONSVIEW_SETSUGGESTIONS, values);
+            getInstance().enqueuePotentiallyPrivateEvent(EVENTKEYS_SUGGESTIONSVIEW_SETSUGGESTIONS,
+                    values);
         }
     }
 
@@ -863,6 +1023,6 @@
         "UserTimestamp"
     };
     public void userTimestamp() {
-        getInstance().writeEvent(EVENTKEYS_USER_TIMESTAMP, EVENTKEYS_NULLVALUES);
+        getInstance().enqueueEvent(EVENTKEYS_USER_TIMESTAMP, EVENTKEYS_NULLVALUES);
     }
 }
diff --git a/java/src/com/android/inputmethod/latin/Settings.java b/java/src/com/android/inputmethod/latin/Settings.java
index 152d668..4c67b49 100644
--- a/java/src/com/android/inputmethod/latin/Settings.java
+++ b/java/src/com/android/inputmethod/latin/Settings.java
@@ -69,9 +69,7 @@
     public static final String PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY =
             "pref_key_preview_popup_dismiss_delay";
     public static final String PREF_KEY_USE_CONTACTS_DICT = "pref_key_use_contacts_dict";
-    public static final String PREF_BIGRAM_SUGGESTION = "next_word_suggestion";
     public static final String PREF_BIGRAM_PREDICTIONS = "next_word_prediction";
-    public static final String PREF_KEY_ENABLE_SPAN_INSERT = "enable_span_insert";
     public static final String PREF_VIBRATION_DURATION_SETTINGS =
             "pref_vibration_duration_settings";
     public static final String PREF_KEYPRESS_SOUND_VOLUME =
@@ -87,9 +85,7 @@
     private ListPreference mShowCorrectionSuggestionsPreference;
     private ListPreference mAutoCorrectionThresholdPreference;
     private ListPreference mKeyPreviewPopupDismissDelay;
-    // Suggestion: use bigrams to adjust scores of suggestions obtained from unigram dictionary
-    private CheckBoxPreference mBigramSuggestion;
-    // Prediction: use bigrams to predict the next word when there is no input for it yet
+    // Use bigrams to predict the next word when there is no input for it yet
     private CheckBoxPreference mBigramPrediction;
     private Preference mDebugSettingsPreference;
 
@@ -100,7 +96,6 @@
         final String autoCorrectionOff = getResources().getString(
                 R.string.auto_correction_threshold_mode_index_off);
         final String currentSetting = mAutoCorrectionThresholdPreference.getValue();
-        mBigramSuggestion.setEnabled(!currentSetting.equals(autoCorrectionOff));
         if (null != mBigramPrediction) {
             mBigramPrediction.setEnabled(!currentSetting.equals(autoCorrectionOff));
         }
@@ -124,7 +119,6 @@
 
         mAutoCorrectionThresholdPreference =
                 (ListPreference) findPreference(PREF_AUTO_CORRECTION_THRESHOLD);
-        mBigramSuggestion = (CheckBoxPreference) findPreference(PREF_BIGRAM_SUGGESTION);
         mBigramPrediction = (CheckBoxPreference) findPreference(PREF_BIGRAM_PREDICTIONS);
         mDebugSettingsPreference = findPreference(PREF_DEBUG_SETTINGS);
         if (mDebugSettingsPreference != null) {
@@ -149,12 +143,9 @@
             generalSettings.removePreference(mVoicePreference);
         }
 
-        final PreferenceGroup advancedSettings =
-                (PreferenceGroup) findPreference(PREF_ADVANCED_SETTINGS);
-        // Remove those meaningless options for now. TODO: delete them for good
-        advancedSettings.removePreference(findPreference(PREF_BIGRAM_SUGGESTION));
-        advancedSettings.removePreference(findPreference(PREF_KEY_ENABLE_SPAN_INSERT));
         if (!VibratorUtils.getInstance(context).hasVibrator()) {
+            final PreferenceGroup advancedSettings =
+                    (PreferenceGroup) findPreference(PREF_ADVANCED_SETTINGS);
             generalSettings.removePreference(findPreference(PREF_VIBRATE_ON));
             if (null != advancedSettings) { // Theoretically advancedSettings cannot be null
                 advancedSettings.removePreference(findPreference(PREF_VIBRATION_DURATION_SETTINGS));
@@ -167,15 +158,6 @@
             generalSettings.removePreference(findPreference(PREF_POPUP_ON));
         }
 
-        final boolean showBigramSuggestionsOption = res.getBoolean(
-                R.bool.config_enable_next_word_suggestions_option);
-        if (!showBigramSuggestionsOption) {
-            textCorrectionGroup.removePreference(mBigramSuggestion);
-            if (null != mBigramPrediction) {
-                textCorrectionGroup.removePreference(mBigramPrediction);
-            }
-        }
-
         final CheckBoxPreference includeOtherImesInLanguageSwitchList =
                 (CheckBoxPreference)findPreference(PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST);
         includeOtherImesInLanguageSwitchList.setEnabled(
diff --git a/java/src/com/android/inputmethod/latin/SettingsValues.java b/java/src/com/android/inputmethod/latin/SettingsValues.java
index 5d33923..ef423f1 100644
--- a/java/src/com/android/inputmethod/latin/SettingsValues.java
+++ b/java/src/com/android/inputmethod/latin/SettingsValues.java
@@ -76,11 +76,8 @@
     @SuppressWarnings("unused") // TODO: Use this
     private final String mKeyPreviewPopupDismissDelayRawValue;
     public final boolean mUseContactsDict;
-    // Suggestion: use bigrams to adjust scores of suggestions obtained from unigram dictionary
-    public final boolean mBigramSuggestionEnabled;
-    // Prediction: use bigrams to predict the next word when there is no input for it yet
+    // Use bigrams to predict the next word when there is no input for it yet
     public final boolean mBigramPredictionEnabled;
-    public final boolean mEnableSuggestionSpanInsertion;
     @SuppressWarnings("unused") // TODO: Use this
     private final int mVibrationDurationSettingsRawValue;
     @SuppressWarnings("unused") // TODO: Use this
@@ -96,7 +93,7 @@
     public final int mKeyPreviewPopupDismissDelay;
     private final boolean mAutoCorrectEnabled;
     public final float mAutoCorrectionThreshold;
-    public final int mCorrectionMode;
+    public final boolean mCorrectionEnabled;
     public final int mSuggestionVisibility;
     private final boolean mVoiceKeyEnabled;
     private final boolean mVoiceKeyOnMain;
@@ -157,12 +154,7 @@
                 Integer.toString(res.getInteger(R.integer.config_key_preview_linger_timeout)));
         mUseContactsDict = prefs.getBoolean(Settings.PREF_KEY_USE_CONTACTS_DICT, true);
         mAutoCorrectEnabled = isAutoCorrectEnabled(res, mAutoCorrectionThresholdRawValue);
-        mBigramSuggestionEnabled = mAutoCorrectEnabled
-                && isBigramSuggestionEnabled(prefs, res, mAutoCorrectEnabled);
-        mBigramPredictionEnabled = mBigramSuggestionEnabled
-                && isBigramPredictionEnabled(prefs, res);
-        // TODO: remove mEnableSuggestionSpanInsertion. It's always true.
-        mEnableSuggestionSpanInsertion = true;
+        mBigramPredictionEnabled = isBigramPredictionEnabled(prefs, res);
         mVibrationDurationSettingsRawValue =
                 prefs.getInt(Settings.PREF_VIBRATION_DURATION_SETTINGS, -1);
         mKeypressSoundVolumeRawValue = prefs.getFloat(Settings.PREF_KEYPRESS_SOUND_VOLUME, -1.0f);
@@ -177,18 +169,17 @@
         mVoiceKeyOnMain = mVoiceMode != null && mVoiceMode.equals(voiceModeMain);
         mAdditionalSubtypes = AdditionalSubtype.createAdditionalSubtypesArray(
                 getPrefAdditionalSubtypes(prefs, res));
-        mCorrectionMode = createCorrectionMode();
+        mCorrectionEnabled = mAutoCorrectEnabled && !mInputAttributes.mInputTypeNoAutoCorrect;
         mSuggestionVisibility = createSuggestionVisibility(res);
     }
 
     // Helper functions to create member values.
     private static SuggestedWords createSuggestPuncList(final String[] puncs) {
-        final ArrayList<SuggestedWords.SuggestedWordInfo> puncList =
-                new ArrayList<SuggestedWords.SuggestedWordInfo>();
+        final ArrayList<SuggestedWordInfo> puncList = new ArrayList<SuggestedWordInfo>();
         if (puncs != null) {
             for (final String puncSpec : puncs) {
-                puncList.add(new SuggestedWords.SuggestedWordInfo(
-                        KeySpecParser.getLabel(puncSpec), SuggestedWordInfo.MAX_SCORE));
+                puncList.add(new SuggestedWordInfo(KeySpecParser.getLabel(puncSpec),
+                        SuggestedWordInfo.MAX_SCORE, SuggestedWordInfo.KIND_HARDCODED));
             }
         }
         return new SuggestedWords(puncList,
@@ -212,13 +203,6 @@
         return wordSeparators;
     }
 
-    private int createCorrectionMode() {
-        final boolean shouldAutoCorrect = mAutoCorrectEnabled
-                && !mInputAttributes.mInputTypeNoAutoCorrect;
-        if (mBigramSuggestionEnabled && shouldAutoCorrect) return Suggest.CORRECTION_FULL_BIGRAM;
-        return shouldAutoCorrect ? Suggest.CORRECTION_FULL : Suggest.CORRECTION_NONE;
-    }
-
     private int createSuggestionVisibility(final Resources res) {
         final String suggestionVisiblityStr = mShowSuggestionsSetting;
         for (int visibility : SUGGESTION_VISIBILITY_VALUE_ARRAY) {
@@ -244,13 +228,10 @@
         return mInputAttributes.mEditorAction == EditorInfo.IME_ACTION_NEXT;
     }
 
-    public boolean isSuggestionStripRequestedByTextField() {
-        return mInputAttributes.mIsSettingsSuggestionStripOn;
-    }
-
-    public boolean isCorrectionOn() {
-        return mCorrectionMode == Suggest.CORRECTION_FULL
-                || mCorrectionMode == Suggest.CORRECTION_FULL_BIGRAM;
+    public boolean isSuggestionsRequested(final int displayOrientation) {
+        return mInputAttributes.mIsSettingsSuggestionStripOn
+                && (mCorrectionEnabled
+                        || isSuggestionStripVisibleInOrientation(displayOrientation));
     }
 
     public boolean isSuggestionStripVisibleInOrientation(final int orientation) {
@@ -308,12 +289,6 @@
                         R.integer.config_key_preview_linger_timeout))));
     }
 
-    private static boolean isBigramSuggestionEnabled(final SharedPreferences sp,
-            final Resources resources, final boolean autoCorrectEnabled) {
-        // TODO: remove this method. Bigram suggestion is always true.
-        return true;
-    }
-
     private static boolean isBigramPredictionEnabled(final SharedPreferences sp,
             final Resources resources) {
         return sp.getBoolean(Settings.PREF_BIGRAM_PREDICTIONS, resources.getBoolean(
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index 68b7b91..8922454 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -39,9 +39,10 @@
 
     public static final int APPROX_MAX_WORD_LENGTH = 32;
 
+    // TODO: rename this to CORRECTION_OFF
     public static final int CORRECTION_NONE = 0;
+    // TODO: rename this to CORRECTION_ON
     public static final int CORRECTION_FULL = 1;
-    public static final int CORRECTION_FULL_BIGRAM = 2;
 
     // It seems the following values are only used for logging.
     public static final int DIC_USER_TYPED = 0;
@@ -65,7 +66,7 @@
 
     private static final boolean DBG = LatinImeLogger.sDBG;
 
-    private boolean mHasMainDictionary;
+    private Dictionary mMainDictionary;
     private ContactsBinaryDictionary mContactsDict;
     private WhitelistDictionary mWhiteListDictionary;
     private final ConcurrentHashMap<String, Dictionary> mUnigramDictionaries =
@@ -73,7 +74,7 @@
     private final ConcurrentHashMap<String, Dictionary> mBigramDictionaries =
             new ConcurrentHashMap<String, Dictionary>();
 
-    private int mPrefMaxSuggestions = 18;
+    public static final int MAX_SUGGESTIONS = 18;
 
     private static final int PREF_MAX_BIGRAMS = 60;
 
@@ -98,7 +99,7 @@
             final long startOffset, final long length, final Locale locale) {
         final Dictionary mainDict = DictionaryFactory.createDictionaryForTest(context, dictionary,
                 startOffset, length /* useFullEditDistance */, false, locale);
-        mHasMainDictionary = null != mainDict;
+        mMainDictionary = mainDict;
         addOrReplaceDictionary(mUnigramDictionaries, DICT_KEY_MAIN, mainDict);
         addOrReplaceDictionary(mBigramDictionaries, DICT_KEY_MAIN, mainDict);
         initWhitelistAndAutocorrectAndPool(context, locale);
@@ -129,15 +130,15 @@
     }
 
     public void resetMainDict(final Context context, final Locale locale) {
-        mHasMainDictionary = false;
+        mMainDictionary = null;
         new Thread("InitializeBinaryDictionary") {
             @Override
             public void run() {
                 final DictionaryCollection newMainDict =
                         DictionaryFactory.createMainDictionaryFromManager(context, locale);
-                mHasMainDictionary = null != newMainDict && !newMainDict.isEmpty();
                 addOrReplaceDictionary(mUnigramDictionaries, DICT_KEY_MAIN, newMainDict);
                 addOrReplaceDictionary(mBigramDictionaries, DICT_KEY_MAIN, newMainDict);
+                mMainDictionary = newMainDict;
             }
         }.start();
     }
@@ -145,7 +146,11 @@
     // The main dictionary could have been loaded asynchronously.  Don't cache the return value
     // of this method.
     public boolean hasMainDictionary() {
-        return mHasMainDictionary;
+        return null != mMainDictionary && mMainDictionary.isInitialized();
+    }
+
+    public Dictionary getMainDictionary() {
+        return mMainDictionary;
     }
 
     public ContactsBinaryDictionary getContactsDictionary() {
@@ -217,7 +222,7 @@
         mIsFirstCharCapitalized = false;
         mIsAllUpperCase = false;
         mTrailingSingleQuotesCount = 0;
-        mSuggestions = new ArrayList<SuggestedWordInfo>(mPrefMaxSuggestions);
+        mSuggestions = new ArrayList<SuggestedWordInfo>(MAX_SUGGESTIONS);
 
         // Treating USER_TYPED as UNIGRAM suggestion for logging now.
         LatinImeLogger.onAddSuggestedWord("", Suggest.DIC_USER_TYPED, Dictionary.UNIGRAM);
@@ -228,7 +233,7 @@
         getAllBigrams(prevWordForBigram, sEmptyWordComposer);
 
         // Nothing entered: return all bigrams for the previous word
-        int insertCount = Math.min(mBigramSuggestions.size(), mPrefMaxSuggestions);
+        int insertCount = Math.min(mBigramSuggestions.size(), MAX_SUGGESTIONS);
         for (int i = 0; i < insertCount; ++i) {
             addBigramToSuggestions(mBigramSuggestions.get(i));
         }
@@ -247,12 +252,12 @@
     // TODO: cleanup dictionaries looking up and suggestions building with SuggestedWords.Builder
     public SuggestedWords getSuggestedWords(
             final WordComposer wordComposer, CharSequence prevWordForBigram,
-            final ProximityInfo proximityInfo, final int correctionMode) {
+            final ProximityInfo proximityInfo, final boolean isCorrectionEnabled) {
         LatinImeLogger.onStartSuggestion(prevWordForBigram);
         mIsFirstCharCapitalized = wordComposer.isFirstCharCapitalized();
         mIsAllUpperCase = wordComposer.isAllUpperCase();
         mTrailingSingleQuotesCount = wordComposer.trailingSingleQuotesCount();
-        mSuggestions = new ArrayList<SuggestedWordInfo>(mPrefMaxSuggestions);
+        mSuggestions = new ArrayList<SuggestedWordInfo>(MAX_SUGGESTIONS);
 
         final String typedWord = wordComposer.getTypedWord();
         final String consideredWord = mTrailingSingleQuotesCount > 0
@@ -262,7 +267,7 @@
         LatinImeLogger.onAddSuggestedWord(typedWord, Suggest.DIC_USER_TYPED, Dictionary.UNIGRAM);
         mConsideredWord = consideredWord;
 
-        if (wordComposer.size() <= 1 && (correctionMode == CORRECTION_FULL_BIGRAM)) {
+        if (wordComposer.size() <= 1 && isCorrectionEnabled) {
             // At first character typed, search only the bigrams
             mBigramSuggestions = new ArrayList<SuggestedWordInfo>(PREF_MAX_BIGRAMS);
 
@@ -270,7 +275,7 @@
                 getAllBigrams(prevWordForBigram, wordComposer);
                 if (TextUtils.isEmpty(consideredWord)) {
                     // Nothing entered: return all bigrams for the previous word
-                    int insertCount = Math.min(mBigramSuggestions.size(), mPrefMaxSuggestions);
+                    int insertCount = Math.min(mBigramSuggestions.size(), MAX_SUGGESTIONS);
                     for (int i = 0; i < insertCount; ++i) {
                         addBigramToSuggestions(mBigramSuggestions.get(i));
                     }
@@ -289,7 +294,7 @@
                         if (bigramSuggestionFirstChar == currentChar
                                 || bigramSuggestionFirstChar == currentCharUpper) {
                             addBigramToSuggestions(bigramSuggestion);
-                            if (++count > mPrefMaxSuggestions) break;
+                            if (++count > MAX_SUGGESTIONS) break;
                         }
                     }
                 }
@@ -319,7 +324,7 @@
                 mIsFirstCharCapitalized, mWhiteListDictionary.getWhitelistedWord(consideredWord));
 
         final boolean hasAutoCorrection;
-        if (CORRECTION_FULL == correctionMode || CORRECTION_FULL_BIGRAM == correctionMode) {
+        if (isCorrectionEnabled) {
             final CharSequence autoCorrection =
                     AutoCorrection.computeAutoCorrectionWord(mUnigramDictionaries, wordComposer,
                             mSuggestions, consideredWord, mAutoCorrectionThreshold,
@@ -335,15 +340,16 @@
                 for (int i = mTrailingSingleQuotesCount - 1; i >= 0; --i) {
                     sb.appendCodePoint(Keyboard.CODE_SINGLE_QUOTE);
                 }
-                mSuggestions.add(0, new SuggestedWordInfo(
-                        sb.toString(), SuggestedWordInfo.MAX_SCORE));
+                mSuggestions.add(0, new SuggestedWordInfo(sb.toString(),
+                        SuggestedWordInfo.MAX_SCORE, SuggestedWordInfo.KIND_WHITELIST));
             } else {
-                mSuggestions.add(0, new SuggestedWordInfo(
-                        whitelistedWord, SuggestedWordInfo.MAX_SCORE));
+                mSuggestions.add(0, new SuggestedWordInfo(whitelistedWord,
+                        SuggestedWordInfo.MAX_SCORE, SuggestedWordInfo.KIND_WHITELIST));
             }
         }
 
-        mSuggestions.add(0, new SuggestedWordInfo(typedWord, SuggestedWordInfo.MAX_SCORE));
+        mSuggestions.add(0, new SuggestedWordInfo(typedWord, SuggestedWordInfo.MAX_SCORE,
+                SuggestedWordInfo.KIND_TYPED));
         SuggestedWordInfo.removeDups(mSuggestions);
 
         final ArrayList<SuggestedWordInfo> suggestionsList;
@@ -365,10 +371,10 @@
         // language, and it will unexpectedly auto-correct. For example, if the user types in
         // English with no dictionary and has a "Will" in their contact list, "will" would
         // always auto-correct to "Will" which is unwanted. Hence, no main dict => no auto-correct.
-                && mHasMainDictionary;
+                && hasMainDictionary();
 
         boolean autoCorrectionAvailable = hasAutoCorrection;
-        if (correctionMode == CORRECTION_FULL || correctionMode == CORRECTION_FULL_BIGRAM) {
+        if (isCorrectionEnabled) {
             autoCorrectionAvailable |= !allowsToBeAutoCorrected;
         }
         // Don't auto-correct words with multiple capital letter
@@ -443,7 +449,7 @@
             prefMaxSuggestions = PREF_MAX_BIGRAMS;
         } else {
             suggestions = mSuggestions;
-            prefMaxSuggestions = mPrefMaxSuggestions;
+            prefMaxSuggestions = MAX_SUGGESTIONS;
         }
 
         int pos = 0;
@@ -495,7 +501,8 @@
         for (int i = mTrailingSingleQuotesCount - 1; i >= 0; --i) {
             sb.appendCodePoint(Keyboard.CODE_SINGLE_QUOTE);
         }
-        suggestions.add(pos, new SuggestedWordInfo(sb, score));
+        // TODO: figure out what type of suggestion this is
+        suggestions.add(pos, new SuggestedWordInfo(sb, score, SuggestedWordInfo.KIND_CORRECTION));
         if (suggestions.size() > prefMaxSuggestions) {
             suggestions.remove(prefMaxSuggestions);
         } else {
@@ -511,7 +518,7 @@
         for (final Dictionary dictionary : dictionaries) {
             dictionary.close();
         }
-        mHasMainDictionary = false;
+        mMainDictionary = null;
     }
 
     // TODO: Resolve the inconsistencies between the native auto correction algorithms and
diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java
index 497fd3b..1ed91fe 100644
--- a/java/src/com/android/inputmethod/latin/SuggestedWords.java
+++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java
@@ -91,7 +91,8 @@
         final ArrayList<SuggestedWordInfo> result = new ArrayList<SuggestedWordInfo>();
         for (CompletionInfo info : infos) {
             if (null != info && info.getText() != null) {
-                result.add(new SuggestedWordInfo(info.getText(), SuggestedWordInfo.MAX_SCORE));
+                result.add(new SuggestedWordInfo(info.getText(), SuggestedWordInfo.MAX_SCORE,
+                        SuggestedWordInfo.KIND_APP_DEFINED));
             }
         }
         return result;
@@ -103,7 +104,8 @@
             final CharSequence typedWord, final SuggestedWords previousSuggestions) {
         final ArrayList<SuggestedWordInfo> suggestionsList = new ArrayList<SuggestedWordInfo>();
         final HashSet<String> alreadySeen = new HashSet<String>();
-        suggestionsList.add(new SuggestedWordInfo(typedWord, SuggestedWordInfo.MAX_SCORE));
+        suggestionsList.add(new SuggestedWordInfo(typedWord, SuggestedWordInfo.MAX_SCORE,
+                SuggestedWordInfo.KIND_TYPED));
         alreadySeen.add(typedWord.toString());
         final int previousSize = previousSuggestions.size();
         for (int pos = 1; pos < previousSize; pos++) {
@@ -120,16 +122,25 @@
 
     public static class SuggestedWordInfo {
         public static final int MAX_SCORE = Integer.MAX_VALUE;
+        public static final int KIND_TYPED = 0; // What user typed
+        public static final int KIND_CORRECTION = 1; // Simple correction/suggestion
+        public static final int KIND_COMPLETION = 2; // Completion (suggestion with appended chars)
+        public static final int KIND_WHITELIST = 3; // Whitelisted word
+        public static final int KIND_BLACKLIST = 4; // Blacklisted word
+        public static final int KIND_HARDCODED = 5; // Hardcoded suggestion, e.g. punctuation
+        public static final int KIND_APP_DEFINED = 6; // Suggested by the application
         private final String mWordStr;
         public final CharSequence mWord;
         public final int mScore;
+        public final int mKind;
         public final int mCodePointCount;
         private String mDebugString = "";
 
-        public SuggestedWordInfo(final CharSequence word, final int score) {
+        public SuggestedWordInfo(final CharSequence word, final int score, final int kind) {
             mWordStr = word.toString();
             mWord = word;
             mScore = score;
+            mKind = kind;
             mCodePointCount = mWordStr.codePointCount(0, mWordStr.length());
         }
 
diff --git a/tests/src/com/android/inputmethod/latin/InputTestsBase.java b/tests/src/com/android/inputmethod/latin/InputTestsBase.java
index eb47fd5..c672d51 100644
--- a/tests/src/com/android/inputmethod/latin/InputTestsBase.java
+++ b/tests/src/com/android/inputmethod/latin/InputTestsBase.java
@@ -130,11 +130,11 @@
                 (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         final ViewGroup vg = new FrameLayout(getContext());
         final View inputView = inflater.inflate(R.layout.input_view, vg);
+        mLatinIME.onCreateInputMethodInterface().startInput(ic, ei);
         mLatinIME.setInputView(inputView);
         mLatinIME.onBindInput();
         mLatinIME.onCreateInputView();
         mLatinIME.onStartInputView(ei, false);
-        mLatinIME.onCreateInputMethodInterface().startInput(ic, ei);
         mInputConnection = ic;
         mKeyboard = mLatinIME.mKeyboardSwitcher.getKeyboard();
         changeLanguage("en_US");
diff --git a/tests/src/com/android/inputmethod/latin/PunctuationTests.java b/tests/src/com/android/inputmethod/latin/PunctuationTests.java
index e1d4c46..0eb3ba4 100644
--- a/tests/src/com/android/inputmethod/latin/PunctuationTests.java
+++ b/tests/src/com/android/inputmethod/latin/PunctuationTests.java
@@ -27,7 +27,7 @@
         final String PUNCTUATION_FROM_STRIP = "!";
         final String EXPECTED_RESULT = "this!! ";
         final boolean defaultNextWordPredictionOption =
-                mLatinIME.getResources().getBoolean(R.bool.config_default_next_word_suggestions);
+                mLatinIME.getResources().getBoolean(R.bool.config_default_next_word_prediction);
         final boolean previousNextWordPredictionOption =
                 setBooleanPreference(NEXT_WORD_PREDICTION_OPTION, false,
                         defaultNextWordPredictionOption);
diff --git a/tools/maketext/res/values-fa/donottranslate-more-keys.xml b/tools/maketext/res/values-fa/donottranslate-more-keys.xml
index b34e580..3519eea 100644
--- a/tools/maketext/res/values-fa/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-fa/donottranslate-more-keys.xml
@@ -63,13 +63,17 @@
     <string name="more_keys_for_symbols_percent">\\%,&#x2030;</string>
     <!-- U+060C: "،" ARABIC COMMA
          U+061B: "؛" ARABIC SEMICOLON
-         U+061F: "؟" ARABIC QUESTION MARK -->
+         U+061F: "؟" ARABIC QUESTION MARK
+         U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+         U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -->
     <string name="keylabel_for_tablet_comma">"&#x060C;"</string>
     <string name="keyhintlabel_for_tablet_comma">"!"</string>
     <string name="more_keys_for_tablet_comma">"!,\\,"</string>
     <string name="keyhintlabel_for_tablet_period">"&#x061F;"</string>
     <string name="more_keys_for_tablet_period">"&#x061F;,\?"</string>
-    <string name="more_keys_for_apostrophe">"&#x061F;,&#x061B;,!,:,-,/,\',\""</string>
+    <string name="keylabel_for_apostrophe">&#x060C;</string>
+    <string name="keyhintlabel_for_apostrophe">&#x061F;</string>
+    <string name="more_keys_for_apostrophe">"!fixedColumnOrder!4,:,!,&#x061F;,&#x061B;,-,/,&#x00AB;|&#x00BB;,&#x00BB;|&#x00AB;"</string>
     <!-- U+061F: "؟" ARABIC QUESTION MARK
          U+060C: "،" ARABIC COMMA
          U+061B: "؛" ARABIC SEMICOLON -->
@@ -100,11 +104,11 @@
          U+201D: "”" RIGHT DOUBLE QUOTATION MARK
          U+201E: "„" DOUBLE LOW-9 QUOTATION MARK
          U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK -->
-    <string name="more_keys_for_less_than">!fixedColumnOrder!3,&#x2039;|&#x203A;,&#x2264;|&#x2265;,&#x00AB;|&#x00BB;</string>
-    <string name="more_keys_for_greater_than">!fixedColumnOrder!3,&#x203A;|&#x2039;,&#x2265;|&#x2264;,&#x00BB;|&#x00AB;</string>
+    <string name="more_keys_for_less_than">!fixedColumnOrder!3,&#x2039;|&#x203A;,&#x2264;|&#x2265;,&lt;|&gt;</string>
+    <string name="more_keys_for_greater_than">!fixedColumnOrder!3,&#x203A;|&#x2039;,&#x2265;|&#x2264;,&gt;|&lt;</string>
     <!-- TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK -->
     <!-- <string name="more_keys_for_double_quote">&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;|&#x00BB;,&#x00BB;|&#x00AB;</string> -->
-    <string name="more_keys_for_double_quote">!fixedColumnOrder!4,&#x201C;,&#x201D;,&#x00AB;|&#x00BB;,&#x00BB;|&#x00AB;</string>
+    <string name="more_keys_for_double_quote">!fixedColumnOrder!4,&#x201C;,&#x201D;,\",\'</string>
     <!-- TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK -->
     <!-- <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;|&#x00BB;,&#x00BB|&#x00AB;;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string> -->
     <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!4,&#x201C;,&#x201D;,&#x00AB;|&#x00BB;,&#x00BB;|&#x00AB;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string>