diff --git a/java/AndroidManifest.xml b/java/AndroidManifest.xml
index 5d8ef43f56c5685e9752476b78b3ff82cc7c4e1c..6f4e602cedc6bd73dfbb2a2a30164cbd01e5ccc2 100644
--- a/java/AndroidManifest.xml
+++ b/java/AndroidManifest.xml
@@ -86,7 +86,7 @@
         </receiver>
 
         <activity android:name=".settings.SettingsActivity"
-                android:theme="@style/platformSettingsTheme"
+                android:theme="@style/platformActivityTheme"
                 android:label="@string/english_ime_settings"
                 android:uiOptions="splitActionBarWhenNarrow">
             <intent-filter>
@@ -95,7 +95,7 @@
         </activity>
 
         <activity android:name=".spellcheck.SpellCheckerSettingsActivity"
-                  android:theme="@style/platformSettingsTheme"
+                  android:theme="@style/platformActivityTheme"
                   android:label="@string/android_spell_checker_settings">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
@@ -103,7 +103,7 @@
         </activity>
 
         <activity android:name=".settings.DebugSettingsActivity"
-                android:theme="@style/platformSettingsTheme"
+                android:theme="@style/platformActivityTheme"
                 android:label="@string/english_ime_debug_settings">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
@@ -150,7 +150,7 @@
         </receiver>
 
         <activity android:name="com.android.inputmethod.dictionarypack.DictionarySettingsActivity"
-                android:theme="@style/platformSettingsTheme"
+                android:theme="@style/platformActivityTheme"
                 android:label="@string/dictionary_settings_title"
                 android:uiOptions="splitActionBarWhenNarrow">
             <intent-filter>
diff --git a/java/res/values-v21/platform-theme.xml b/java/res/values-v20/platform-theme.xml
similarity index 51%
rename from java/res/values-v21/platform-theme.xml
rename to java/res/values-v20/platform-theme.xml
index a49e3645904034b1026deb1f5ac3ddd7306ea14d..52e7f3521f2ffd374e0d96753f3405b0cbd38ea3 100644
--- a/java/res/values-v21/platform-theme.xml
+++ b/java/res/values-v20/platform-theme.xml
@@ -18,21 +18,9 @@
 */
 -->
 
+<!-- TODO: This file is temporarily placed under values-v20. -->
+<!-- TODO: It might be moved under values-v21. -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android">
     <style name="platformActivityTheme" parent="@android:style/Theme.Material.Light" />
-    <!-- From packages/apps/Settings -->
-    <style name="platformSettingsTheme" parent="@android:style/Theme.Material.Settings">
-        <item name="android:actionBarStyle">@android:style/Widget.Material.Light.ActionBar.Solid</item>
-        <item name="android:alertDialogTheme">@style/Theme.AlertDialog</item>
-    </style>
-    <!-- From packages/apps/Settings -->
-    <style name="Theme.AlertDialog" parent="@*android:style/Theme.Material.Light.Dialog.Alert">
-        <!-- Used by the ActionBar: @color/theme_primary -->
-        <item name="android:colorPrimary">#ff263238</item>
-        <!-- Used by the StatusBar: @color/theme_primary_dark -->
-        <item name="android:colorPrimaryDark">#ff21272b</item>
-        <!-- Used by controls, e.g. CheckBox, ProgressBar, etc.: @color/theme_accent -->
-        <item name="android:colorAccent">#ff009688</item>
-    </style>
     <style name="platformDialogTheme" parent="@android:style/Theme.Material.Light.Dialog" />
 </resources>
diff --git a/java/res/values/keyboard-themes.xml b/java/res/values/keyboard-themes.xml
index 28a34c31514de250d291643fb13891c0aac5a8af..a06082c6e1890354510655ec5281bd1c5750200b 100644
--- a/java/res/values/keyboard-themes.xml
+++ b/java/res/values/keyboard-themes.xml
@@ -20,14 +20,13 @@
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- For keyboard color scheme option dialog. -->
     <string-array name="keyboard_theme_names" translatable="false">
-        <!-- TODO: Implement Material Light theme. -->
-        <item>@string/keyboard_theme_material_dark</item>
-        <item>@string/keyboard_theme_holo_white</item>
-        <item>@string/keyboard_theme_holo_blue</item>
+        <!-- TODO: Make this item as translatable string resource. -->
+        <item>Material</item>
+        <item>@string/keyboard_color_scheme_white</item>
+        <item>@string/keyboard_color_scheme_blue</item>
     </string-array>
     <!-- An element must be a keyboard theme id of {@link KeyboardTheme#THEME_ID_*}. -->
     <string-array name="keyboard_theme_ids" translatable="false">
-        <!-- TODO: Implement Material Light theme. -->
         <item>3</item>
         <item>2</item>
         <item>0</item>
diff --git a/java/res/values/platform-theme.xml b/java/res/values/platform-theme.xml
index e688597122b3e220952ecf4e5ddc149722d97ef9..8e131a2b04b5892c11cf6321b785d693462f3ed3 100644
--- a/java/res/values/platform-theme.xml
+++ b/java/res/values/platform-theme.xml
@@ -20,6 +20,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android">
     <style name="platformActivityTheme" parent="@android:style/Theme.Holo" />
-    <style name="platformSettingsTheme" parent="@android:style/Theme.Holo" />
     <style name="platformDialogTheme" parent="@android:style/Theme.Holo.Dialog" />
 </resources>
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index 9ec3f469c72caf2dbcac07c922d0396bd39924e6..884911565af604b255296654d360d3af4fda82ab 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -36,18 +36,22 @@
     <!-- Option to control whether or not to show a popup with a larger font on each key press. -->
     <string name="popup_on_keypress">Popup on keypress</string>
 
-    <!-- Settings screen title for input preferences [CHAR LIMIT=25]-->
-    <string name="settings_screen_input">Input preferences</string>
-    <!-- Settings screen title for appearance preferences [CHAR LIMIT=25] -->
-    <string name="settings_screen_appearances">Appearance</string>
-    <!-- Settings screen title for multi lingual options [CHAR_LIMIT=25] -->
-    <string name="settings_screen_multi_lingual">Multi lingual options</string>
-    <!-- Settings screen title for gesture typing preferences [CHAR_LIMIT=25] -->
-    <string name="settings_screen_gesture">Gesture typing preferences</string>
-    <!-- Settings screen title for text correction options [CHAR_LIMIT=25] -->
-    <string name="settings_screen_correction">Text correction</string>
-    <!-- Settings screen title for advanced settings [CHAR LIMIT=25] -->
-    <string name="settings_screen_advanced">Advanced</string>
+    <!-- Category title for general settings for Android keyboard -->
+    <string name="general_category">General</string>
+
+    <!-- Category title for text prediction -->
+    <string name="correction_category">Text correction</string>
+
+    <!-- Category title for gesture typing -->
+    <string name="gesture_typing_category">Gesture typing</string>
+
+    <!-- Category title for misc options  -->
+    <string name="misc_category">Other options</string>
+
+    <!-- Option name for advanced settings screen [CHAR LIMIT=25] -->
+    <string name="advanced_settings">Advanced settings</string>
+    <!-- Option summary for advanced settings screen [CHAR LIMIT=65 (two lines) or 30 (fits on one line, preferable)] -->
+    <string name="advanced_settings_summary">Options for experts</string>
 
     <!-- Option name for including other IMEs in the language switch list [CHAR LIMIT=30] -->
     <string name="include_other_imes_in_language_switch_list">Switch to other input methods</string>
@@ -291,16 +295,12 @@ mobile devices. [CHAR LIMIT=25] -->
     <!-- Description for Emoji keyboard subtype [CHAR LIMIT=25] -->
     <string name="subtype_emoji">Emoji</string>
 
-    <!-- Title of the preference settings for switching keyboard theme [CHAR LIMIT=35] -->
-    <string name="keyboard_theme">Keyboard theme</string>
-    <!-- The keyboard theme name, Holo White [CHAR LIMIT=25] -->
-    <string name="keyboard_theme_holo_white">Holo White</string>
-    <!-- The keyboard theme name, Holo Blue [CHAR LIMIT=25] -->
-    <string name="keyboard_theme_holo_blue">Holo Blue</string>
-    <!-- The keyboard theme name, Material Dark [CHAR LIMIT=25] -->
-    <string name="keyboard_theme_material_dark">Material Dark</string>
-    <!-- The keyboard theme name, Material Light [CHAR LIMIT=25] -->
-    <string name="keyboard_theme_material_light">Material Light</string>
+    <!-- Title of the preference settings for switching keyboard color scheme [CHAR LIMIT=35] -->
+    <string name="keyboard_color_scheme">Color scheme</string>
+    <!-- The keyboard color scheme name, White [CHAR LIMIT=16] -->
+    <string name="keyboard_color_scheme_white">White</string>
+    <!-- The keyboard color scheme name, Blue [CHAR LIMIT=16] -->
+    <string name="keyboard_color_scheme_blue">Blue</string>
 
     <!-- Title of the preference settings for custom input styles (language and keyboard layout pairs) [CHAR LIMIT=35]-->
     <string name="custom_input_styles_title">Custom input styles</string>
diff --git a/java/res/xml/prefs.xml b/java/res/xml/prefs.xml
index cb951d264866c4a6ff0e7ab9100d7d83d1a915a5..0e9c16190da3cc857a3cefc61c8abe9a0a7649c3 100644
--- a/java/res/xml/prefs.xml
+++ b/java/res/xml/prefs.xml
@@ -18,117 +18,39 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
     android:key="english_ime_settings">
-    <PreferenceScreen
-        android:title="@string/settings_screen_input"
-        android:key="screen_input">
-        <SwitchPreference
+    <PreferenceCategory
+        android:title="@string/general_category"
+        android:key="general_settings">
+        <CheckBoxPreference
             android:key="auto_cap"
             android:title="@string/auto_cap"
             android:summary="@string/auto_cap_summary"
-            android:switchTextOn=""
-            android:switchTextOff=""
             android:persistent="true"
             android:defaultValue="true" />
-        <SwitchPreference
-            android:key="pref_key_use_double_space_period"
-            android:title="@string/use_double_space_period"
-            android:summary="@string/use_double_space_period_summary"
-            android:switchTextOn=""
-            android:switchTextOff=""
-            android:persistent="true"
-            android:defaultValue="true" />
-        <SwitchPreference
+        <CheckBoxPreference
             android:key="vibrate_on"
             android:title="@string/vibrate_on_keypress"
-            android:switchTextOn=""
-            android:switchTextOff=""
-            android:persistent="true"
-            android:defaultValue="@bool/config_default_vibration_enabled" />
-        <SwitchPreference
+            android:defaultValue="@bool/config_default_vibration_enabled"
+            android:persistent="true" />
+        <CheckBoxPreference
             android:key="sound_on"
             android:title="@string/sound_on_keypress"
-            android:switchTextOn=""
-            android:switchTextOff=""
-            android:persistent="true"
-            android:defaultValue="@bool/config_default_sound_enabled" />
-        <SwitchPreference
+            android:defaultValue="@bool/config_default_sound_enabled"
+            android:persistent="true" />
+        <CheckBoxPreference
             android:key="popup_on"
             android:title="@string/popup_on_keypress"
-            android:switchTextOn=""
-            android:switchTextOff=""
             android:persistent="true"
             android:defaultValue="@bool/config_default_key_preview_popup" />
-        <SwitchPreference
+        <CheckBoxPreference
             android:key="pref_voice_input_key"
             android:title="@string/voice_input"
-            android:switchTextOn=""
-            android:switchTextOff=""
             android:persistent="true"
             android:defaultValue="true" />
-    </PreferenceScreen>
-    <ListPreference
-        android:key="pref_keyboard_theme"
-        android:title="@string/keyboard_theme"
-        android:persistent="true"
-        android:entryValues="@array/keyboard_theme_ids"
-        android:entries="@array/keyboard_theme_names" />
-    <PreferenceScreen
-        android:title="@string/settings_screen_multi_lingual"
-        android:key="screen_multi_lingual">
-        <SwitchPreference
-            android:key="pref_show_language_switch_key"
-            android:title="@string/show_language_switch_key"
-            android:summary="@string/show_language_switch_key_summary"
-            android:switchTextOn=""
-            android:switchTextOff=""
-            android:persistent="true"
-            android:defaultValue="true" />
-        <SwitchPreference
-            android:key="pref_include_other_imes_in_language_switch_list"
-            android:dependency="pref_show_language_switch_key"
-            android:title="@string/include_other_imes_in_language_switch_list"
-            android:summary="@string/include_other_imes_in_language_switch_list_summary"
-            android:switchTextOn=""
-            android:switchTextOff=""
-            android:persistent="true"
-            android:defaultValue="false" />
-        <PreferenceScreen
-            android:fragment="com.android.inputmethod.latin.settings.AdditionalSubtypeSettings"
-            android:key="custom_input_styles"
-            android:title="@string/custom_input_styles_title" />
-    </PreferenceScreen>
-    <PreferenceScreen
-        android:title="@string/settings_screen_gesture"
-        android:key="screen_gesture">
-        <SwitchPreference
-            android:key="gesture_input"
-            android:title="@string/gesture_input"
-            android:summary="@string/gesture_input_summary"
-            android:switchTextOn=""
-            android:switchTextOff=""
-            android:persistent="true"
-            android:defaultValue="true" />
-        <SwitchPreference
-            android:key="pref_gesture_floating_preview_text"
-            android:dependency="gesture_input"
-            android:title="@string/gesture_floating_preview_text"
-            android:summary="@string/gesture_floating_preview_text_summary"
-            android:switchTextOn=""
-            android:switchTextOff=""
-            android:persistent="true"
-            android:defaultValue="true" />
-        <SwitchPreference
-            android:key="pref_gesture_preview_trail"
-            android:dependency="gesture_input"
-            android:title="@string/gesture_preview_trail"
-            android:switchTextOn=""
-            android:switchTextOff=""
-            android:persistent="true"
-            android:defaultValue="true" />
-    </PreferenceScreen>
-    <PreferenceScreen
-        android:title="@string/settings_screen_correction"
-        android:key="screen_correction">
+    </PreferenceCategory>
+    <PreferenceCategory
+        android:title="@string/correction_category"
+        android:key="correction_settings">
         <PreferenceScreen
             android:key="edit_personal_dictionary"
             android:title="@string/edit_personal_dictionary">
@@ -145,12 +67,10 @@
                  android:value="@string/dictionary_pack_client_id" />
            </intent>
         </PreferenceScreen>
-        <SwitchPreference
+        <CheckBoxPreference
             android:key="pref_key_block_potentially_offensive"
             android:title="@string/prefs_block_potentially_offensive_title"
             android:summary="@string/prefs_block_potentially_offensive_summary"
-            android:switchTextOn=""
-            android:switchTextOff=""
             android:persistent="true"
             android:defaultValue="@bool/config_block_potentially_offensive" />
         <ListPreference
@@ -169,66 +89,119 @@
             android:entryValues="@array/prefs_suggestion_visibility_values"
             android:entries="@array/prefs_suggestion_visibilities"
             android:defaultValue="@string/prefs_suggestion_visibility_default_value" />
-        <SwitchPreference
+        <CheckBoxPreference
             android:key="pref_key_use_personalized_dicts"
             android:title="@string/use_personalized_dicts"
             android:summary="@string/use_personalized_dicts_summary"
-            android:switchTextOn=""
-            android:switchTextOff=""
             android:persistent="true"
             android:defaultValue="true" />
-        <SwitchPreference
-            android:key="pref_key_use_contacts_dict"
-            android:title="@string/use_contacts_dict"
-            android:summary="@string/use_contacts_dict_summary"
-            android:switchTextOn=""
-            android:switchTextOff=""
+        <!-- title will be set programmatically to embed application name -->
+        <CheckBoxPreference
+            android:key="pref_enable_metrics_logging"
+            android:summary="@string/enable_metrics_logging_summary"
+            android:persistent="true"
+            android:defaultValue="true" />
+    </PreferenceCategory>
+    <PreferenceCategory
+        android:title="@string/gesture_typing_category"
+        android:key="gesture_typing_settings">
+        <CheckBoxPreference
+            android:key="gesture_input"
+            android:title="@string/gesture_input"
+            android:summary="@string/gesture_input_summary"
+            android:persistent="true"
+            android:defaultValue="true" />
+        <!-- TODO: Move these two options to the advanced settings. -->
+        <CheckBoxPreference
+            android:key="pref_gesture_floating_preview_text"
+            android:dependency="gesture_input"
+            android:title="@string/gesture_floating_preview_text"
+            android:summary="@string/gesture_floating_preview_text_summary"
             android:persistent="true"
             android:defaultValue="true" />
-        <SwitchPreference
+        <CheckBoxPreference
+            android:key="pref_gesture_preview_trail"
+            android:dependency="gesture_input"
+            android:title="@string/gesture_preview_trail"
+            android:persistent="true"
+            android:defaultValue="true" />
+    </PreferenceCategory>
+    <PreferenceCategory
+        android:title="@string/misc_category"
+        android:key="misc_settings">
+        <CheckBoxPreference
             android:key="next_word_prediction"
             android:title="@string/bigram_prediction"
             android:summary="@string/bigram_prediction_summary"
-            android:switchTextOn=""
-            android:switchTextOff=""
-            android:persistent="true"
-            android:defaultValue="true" />
-    </PreferenceScreen>
-    <PreferenceScreen
-        android:title="@string/settings_screen_advanced"
-        android:key="screen_advanced">
-        <!-- TODO: consolidate key preview dismiss delay with the key preview animation parameters. -->
-        <ListPreference
-            android:key="pref_key_preview_popup_dismiss_delay"
-            android:title="@string/key_preview_popup_dismiss_delay" />
-        <com.android.inputmethod.latin.settings.SeekBarDialogPreference
-            android:key="pref_vibration_duration_settings"
-            android:title="@string/prefs_keypress_vibration_duration_settings"
-            latin:maxValue="@integer/config_max_vibration_duration" />
-        <com.android.inputmethod.latin.settings.SeekBarDialogPreference
-            android:key="pref_keypress_sound_volume"
-            android:title="@string/prefs_keypress_sound_volume_settings"
-            latin:maxValue="100" /> <!-- percent -->
-        <!-- The settigs for showing setup wizard application icon shouldn't be persistent and
-             the default value is added programmatically. -->
-        <SwitchPreference
-            android:key="pref_show_setup_wizard_icon"
-            android:title="@string/show_setup_wizard_icon"
-            android:summary="@string/show_setup_wizard_icon_summary"
-            android:switchTextOn=""
-            android:switchTextOff="" />
-        <!-- title will be set programmatically to embed application name -->
-        <SwitchPreference
-            android:key="pref_enable_metrics_logging"
-            android:summary="@string/enable_metrics_logging_summary"
-            android:switchTextOn=""
-            android:switchTextOff=""
             android:persistent="true"
             android:defaultValue="true" />
         <PreferenceScreen
-            android:key="screen_debug"
+            android:key="pref_advanced_settings"
+            android:title="@string/advanced_settings"
+            android:summary="@string/advanced_settings_summary">
+            <CheckBoxPreference
+                android:key="pref_key_use_contacts_dict"
+                android:title="@string/use_contacts_dict"
+                android:summary="@string/use_contacts_dict_summary"
+                android:persistent="true"
+                android:defaultValue="true" />
+            <CheckBoxPreference
+                android:key="pref_key_use_double_space_period"
+                android:title="@string/use_double_space_period"
+                android:summary="@string/use_double_space_period_summary"
+                android:persistent="true"
+                android:defaultValue="true" />
+            <CheckBoxPreference
+                android:key="pref_show_language_switch_key"
+                android:title="@string/show_language_switch_key"
+                android:summary="@string/show_language_switch_key_summary"
+                android:persistent="true"
+                android:defaultValue="true" />
+            <CheckBoxPreference
+                android:key="pref_include_other_imes_in_language_switch_list"
+                android:dependency="pref_show_language_switch_key"
+                android:title="@string/include_other_imes_in_language_switch_list"
+                android:summary="@string/include_other_imes_in_language_switch_list_summary"
+                android:persistent="true"
+                android:defaultValue="false" />
+            <ListPreference
+                android:key="pref_keyboard_theme"
+                android:title="@string/keyboard_color_scheme"
+                android:persistent="true"
+                android:entryValues="@array/keyboard_theme_ids"
+                android:entries="@array/keyboard_theme_names" />
+            <PreferenceScreen
+                android:fragment="com.android.inputmethod.latin.settings.AdditionalSubtypeSettings"
+                android:key="custom_input_styles"
+                android:title="@string/custom_input_styles_title" />
+            <!-- TODO: consolidate key preview dismiss delay with the key preview animation parameters. -->
+            <ListPreference
+                android:key="pref_key_preview_popup_dismiss_delay"
+                android:title="@string/key_preview_popup_dismiss_delay" />
+            <com.android.inputmethod.latin.settings.SeekBarDialogPreference
+                android:key="pref_vibration_duration_settings"
+                android:title="@string/prefs_keypress_vibration_duration_settings"
+                latin:maxValue="@integer/config_max_vibration_duration" />
+            <com.android.inputmethod.latin.settings.SeekBarDialogPreference
+                android:key="pref_keypress_sound_volume"
+                android:title="@string/prefs_keypress_sound_volume_settings"
+                latin:maxValue="100" /> <!-- percent -->
+            <!-- The settigs for showing setup wizard application icon shouldn't be persistent and
+                 the default value is added programmatically. -->
+            <CheckBoxPreference
+                android:key="pref_show_setup_wizard_icon"
+                android:title="@string/show_setup_wizard_icon"
+                android:summary="@string/show_setup_wizard_icon_summary" />
+        </PreferenceScreen>
+        <PreferenceScreen
+            android:key="send_feedback"
+            android:title="@string/send_feedback" />
+        <PreferenceScreen
+            android:key="about_keyboard" />
+        <PreferenceScreen
+            android:key="debug_settings"
             android:title="Debug settings"
             android:persistent="true"
             android:defaultValue="false" />
-    </PreferenceScreen>
+    </PreferenceCategory>
 </PreferenceScreen>
diff --git a/java/res/xml/prefs_for_debug.xml b/java/res/xml/prefs_for_debug.xml
index be4c8b3e19b487e27e3ea0e58e99c3466a53b3c2..0bcc5cbe492df874ed986bff61c004991677f45d 100644
--- a/java/res/xml/prefs_for_debug.xml
+++ b/java/res/xml/prefs_for_debug.xml
@@ -20,26 +20,20 @@
     android:title="@string/prefs_debug_mode"
     android:key="english_ime_debug_settings"
 >
-    <SwitchPreference
+    <CheckBoxPreference
         android:key="debug_mode"
         android:title="@string/prefs_debug_mode"
-        android:switchTextOn=""
-        android:switchTextOff=""
         android:persistent="true"
         android:defaultValue="false" />
-    <SwitchPreference
+    <CheckBoxPreference
         android:key="force_non_distinct_multitouch"
         android:title="@string/prefs_force_non_distinct_multitouch"
-        android:switchTextOn=""
-        android:switchTextOff=""
         android:persistent="true"
         android:defaultValue="false" />
-    <SwitchPreference
+    <CheckBoxPreference
         android:key="pref_sliding_key_input_preview"
         android:title="@string/sliding_key_input_preview"
         android:summary="@string/sliding_key_input_preview_summary"
-        android:switchTextOn=""
-        android:switchTextOff=""
         android:persistent="true"
         android:defaultValue="true" />
     <com.android.inputmethod.latin.settings.SeekBarDialogPreference
diff --git a/java/res/xml/spell_checker_settings.xml b/java/res/xml/spell_checker_settings.xml
index e3db4850b4e0e21a3e19a0826ac6f386d83353ec..de67e7f811268ee3c1c0b84544f1730c64967d58 100644
--- a/java/res/xml/spell_checker_settings.xml
+++ b/java/res/xml/spell_checker_settings.xml
@@ -15,14 +15,11 @@
 -->
 
 <PreferenceScreen
-    xmlns:android="http://schemas.android.com/apk/res/android"
->
-    <SwitchPreference
-        android:key="pref_spellcheck_use_contacts"
-        android:title="@string/use_contacts_for_spellchecking_option_title"
-        android:summary="@string/use_contacts_for_spellchecking_option_summary"
-        android:switchTextOn=""
-        android:switchTextOff=""
-        android:persistent="true"
-        android:defaultValue="true" />
+    xmlns:android="http://schemas.android.com/apk/res/android">
+  <CheckBoxPreference
+     android:key="pref_spellcheck_use_contacts"
+     android:title="@string/use_contacts_for_spellchecking_option_title"
+     android:summary="@string/use_contacts_for_spellchecking_option_summary"
+     android:persistent="true"
+     android:defaultValue="true" />
 </PreferenceScreen>
diff --git a/java/src/com/android/inputmethod/latin/settings/DebugSettings.java b/java/src/com/android/inputmethod/latin/settings/DebugSettings.java
index c17e86892279bb40b1e521039d78078029ea44eb..845ddb377eecc8d86651e0a1db1bc14049b130fd 100644
--- a/java/src/com/android/inputmethod/latin/settings/DebugSettings.java
+++ b/java/src/com/android/inputmethod/latin/settings/DebugSettings.java
@@ -21,13 +21,14 @@ import android.content.SharedPreferences;
 import android.content.res.Resources;
 import android.os.Bundle;
 import android.os.Process;
+import android.preference.CheckBoxPreference;
 import android.preference.Preference;
 import android.preference.Preference.OnPreferenceClickListener;
 import android.preference.PreferenceFragment;
 import android.preference.PreferenceGroup;
 import android.preference.PreferenceScreen;
-import android.preference.TwoStatePreference;
 
+import com.android.inputmethod.latin.Dictionary;
 import com.android.inputmethod.latin.DictionaryDumpBroadcastReceiver;
 import com.android.inputmethod.latin.DictionaryFacilitator;
 import com.android.inputmethod.latin.R;
@@ -56,7 +57,7 @@ public final class DebugSettings extends PreferenceFragment
     public static final String PREF_KEY_LONGPRESS_TIMEOUT = "pref_key_longpress_timeout";
 
     private boolean mServiceNeedsRestart = false;
-    private TwoStatePreference mDebugMode;
+    private CheckBoxPreference mDebugMode;
 
     @Override
     public void onCreate(Bundle icicle) {
@@ -106,7 +107,7 @@ public final class DebugSettings extends PreferenceFragment
                         res, R.fraction.config_key_preview_dismiss_end_scale));
 
         mServiceNeedsRestart = false;
-        mDebugMode = (TwoStatePreference) findPreference(PREF_DEBUG_MODE);
+        mDebugMode = (CheckBoxPreference) findPreference(PREF_DEBUG_MODE);
         updateDebugMode();
     }
 
diff --git a/java/src/com/android/inputmethod/latin/settings/Settings.java b/java/src/com/android/inputmethod/latin/settings/Settings.java
index fb1a210bb21fae79cda5901b949fed61c87f63ca..2358477994a6c57b4236462f6abb4995b490eb1b 100644
--- a/java/src/com/android/inputmethod/latin/settings/Settings.java
+++ b/java/src/com/android/inputmethod/latin/settings/Settings.java
@@ -39,14 +39,8 @@ import java.util.concurrent.locks.ReentrantLock;
 
 public final class Settings implements SharedPreferences.OnSharedPreferenceChangeListener {
     private static final String TAG = Settings.class.getSimpleName();
-    // Settings screens
-    public static final String SCREEN_INPUT = "screen_input";
-    public static final String SCREEN_MULTI_LINGUAL = "screen_multi_lingual";
-    public static final String SCREEN_GESTURE = "screen_gesture";
-    public static final String SCREEN_CORRECTION = "screen_correction";
-    public static final String SCREEN_ADVANCED = "screen_advanced";
-    public static final String SCREEN_DEBUG = "screen_debug";
     // In the same order as xml/prefs.xml
+    public static final String PREF_GENERAL_SETTINGS = "general_settings";
     public static final String PREF_AUTO_CAP = "auto_cap";
     public static final String PREF_VIBRATE_ON = "vibrate_on";
     public static final String PREF_SOUND_ON = "sound_on";
@@ -54,10 +48,13 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
     // PREF_VOICE_MODE_OBSOLETE is obsolete. Use PREF_VOICE_INPUT_KEY instead.
     public static final String PREF_VOICE_MODE_OBSOLETE = "voice_mode";
     public static final String PREF_VOICE_INPUT_KEY = "pref_voice_input_key";
+    public static final String PREF_CORRECTION_SETTINGS = "correction_settings";
     public static final String PREF_EDIT_PERSONAL_DICTIONARY = "edit_personal_dictionary";
     public static final String PREF_CONFIGURE_DICTIONARIES_KEY = "configure_dictionaries_key";
     public static final String PREF_AUTO_CORRECTION_THRESHOLD = "auto_correction_threshold";
     public static final String PREF_SHOW_SUGGESTIONS_SETTING = "show_suggestions_setting";
+    public static final String PREF_MISC_SETTINGS = "misc_settings";
+    public static final String PREF_ADVANCED_SETTINGS = "pref_advanced_settings";
     public static final String PREF_KEY_USE_CONTACTS_DICT = "pref_key_use_contacts_dict";
     public static final String PREF_KEY_USE_PERSONALIZED_DICTS = "pref_key_use_personalized_dicts";
     public static final String PREF_KEY_USE_DOUBLE_SPACE_PERIOD =
@@ -78,6 +75,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
     public static final String PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY =
             "pref_key_preview_popup_dismiss_delay";
     public static final String PREF_BIGRAM_PREDICTIONS = "next_word_prediction";
+    public static final String PREF_GESTURE_SETTINGS = "gesture_typing_settings";
     public static final String PREF_GESTURE_INPUT = "gesture_input";
     public static final String PREF_VIBRATION_DURATION_SETTINGS =
             "pref_vibration_duration_settings";
@@ -91,6 +89,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
 
     public static final String PREF_INPUT_LANGUAGE = "input_language";
     public static final String PREF_SELECTED_LANGUAGES = "selected_languages";
+    public static final String PREF_DEBUG_SETTINGS = "debug_settings";
     public static final String PREF_KEY_IS_INTERNAL = "pref_key_is_internal";
 
     public static final String PREF_ENABLE_METRICS_LOGGING = "pref_enable_metrics_logging";
@@ -106,6 +105,8 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
             "pref_last_used_personalization_dict_wiped_time";
     private static final String PREF_CORPUS_HANDLES_FOR_PERSONALIZATION =
             "pref_corpus_handles_for_personalization";
+    public static final String PREF_SEND_FEEDBACK = "send_feedback";
+    public static final String PREF_ABOUT_KEYBOARD = "about_keyboard";
 
     // Emoji
     public static final String PREF_EMOJI_RECENT_KEYS = "emoji_recent_keys";
diff --git a/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java b/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java
index 9d824121cb2dbf470098402e6df5662196754ad8..5eb0377c79b14a5a7578650dc671a75075174d3f 100644
--- a/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java
+++ b/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java
@@ -27,15 +27,13 @@ import android.content.res.Resources;
 import android.media.AudioManager;
 import android.os.Build;
 import android.os.Bundle;
+import android.preference.CheckBoxPreference;
 import android.preference.ListPreference;
 import android.preference.Preference;
+import android.preference.Preference.OnPreferenceClickListener;
 import android.preference.PreferenceGroup;
 import android.preference.PreferenceScreen;
-import android.preference.TwoStatePreference;
 import android.util.Log;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
 import android.view.inputmethod.InputMethodSubtype;
 
 import com.android.inputmethod.dictionarypack.DictionarySettingsActivity;
@@ -63,10 +61,6 @@ public final class SettingsFragment extends InputMethodSettingsFragment
             DBG_USE_INTERNAL_PERSONAL_DICTIONARY_SETTINGS
             || Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN_MR2;
 
-    private static final int NO_MENU_GROUP = Menu.NONE; // We don't care about menu grouping.
-    private static final int MENU_FEEDBACK = Menu.FIRST; // The first menu item id and order.
-    private static final int MENU_ABOUT = Menu.FIRST + 1; // The second menu item id and order.
-
     private void setPreferenceEnabled(final String preferenceKey, final boolean enabled) {
         final Preference preference = findPreference(preferenceKey);
         if (preference != null) {
@@ -99,7 +93,6 @@ public final class SettingsFragment extends InputMethodSettingsFragment
     @Override
     public void onCreate(final Bundle icicle) {
         super.onCreate(icicle);
-        setHasOptionsMenu(true);
         setInputMethodSettingsCategoryTitle(R.string.language_selection_title);
         setSubtypeEnablerTitle(R.string.select_language);
         addPreferencesFromResource(R.xml.prefs);
@@ -124,42 +117,66 @@ public final class SettingsFragment extends InputMethodSettingsFragment
 
         ensureConsistencyOfAutoCorrectionSettings();
 
-        final PreferenceScreen inputScreen =
-                (PreferenceScreen) findPreference(Settings.SCREEN_INPUT);
-        final PreferenceScreen advancedScreen =
-                (PreferenceScreen) findPreference(Settings.SCREEN_ADVANCED);
-        final Preference debugScreen = findPreference(Settings.SCREEN_DEBUG);
-        if (Settings.isInternal(prefs)) {
-            final Intent debugSettingsIntent = new Intent(Intent.ACTION_MAIN);
-            debugSettingsIntent.setClassName(
-                    context.getPackageName(), DebugSettingsActivity.class.getName());
-            debugScreen.setIntent(debugSettingsIntent);
-        } else {
-            advancedScreen.removePreference(debugScreen);
+        final PreferenceGroup generalSettings =
+                (PreferenceGroup) findPreference(Settings.PREF_GENERAL_SETTINGS);
+        final PreferenceGroup miscSettings =
+                (PreferenceGroup) findPreference(Settings.PREF_MISC_SETTINGS);
+
+        final Preference debugSettings = findPreference(Settings.PREF_DEBUG_SETTINGS);
+        if (debugSettings != null) {
+            if (Settings.isInternal(prefs)) {
+                final Intent debugSettingsIntent = new Intent(Intent.ACTION_MAIN);
+                debugSettingsIntent.setClassName(
+                        context.getPackageName(), DebugSettingsActivity.class.getName());
+                debugSettings.setIntent(debugSettingsIntent);
+            } else {
+                miscSettings.removePreference(debugSettings);
+            }
+        }
+
+        final Preference feedbackSettings = findPreference(Settings.PREF_SEND_FEEDBACK);
+        final Preference aboutSettings = findPreference(Settings.PREF_ABOUT_KEYBOARD);
+        if (feedbackSettings != null) {
+            if (FeedbackUtils.isFeedbackFormSupported()) {
+                feedbackSettings.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+                    @Override
+                    public boolean onPreferenceClick(final Preference pref) {
+                        FeedbackUtils.showFeedbackForm(getActivity());
+                        return true;
+                    }
+                });
+                aboutSettings.setTitle(FeedbackUtils.getAboutKeyboardTitleResId());
+                aboutSettings.setIntent(FeedbackUtils.getAboutKeyboardIntent(getActivity()));
+            } else {
+                miscSettings.removePreference(feedbackSettings);
+                miscSettings.removePreference(aboutSettings);
+            }
         }
 
         final boolean showVoiceKeyOption = res.getBoolean(
                 R.bool.config_enable_show_voice_key_option);
         if (!showVoiceKeyOption) {
-            removePreference(Settings.PREF_VOICE_INPUT_KEY, inputScreen);
+            removePreference(Settings.PREF_VOICE_INPUT_KEY, generalSettings);
         }
 
+        final PreferenceGroup advancedSettings =
+                (PreferenceGroup) findPreference(Settings.PREF_ADVANCED_SETTINGS);
         if (!AudioAndHapticFeedbackManager.getInstance().hasVibrator()) {
-            removePreference(Settings.PREF_VIBRATE_ON, inputScreen);
-            removePreference(Settings.PREF_VIBRATION_DURATION_SETTINGS, advancedScreen);
+            removePreference(Settings.PREF_VIBRATE_ON, generalSettings);
+            removePreference(Settings.PREF_VIBRATION_DURATION_SETTINGS, advancedSettings);
         }
         if (!Settings.ENABLE_SHOW_LANGUAGE_SWITCH_KEY_SETTINGS) {
-            final PreferenceScreen multiLingualScreen =
-                    (PreferenceScreen) findPreference(Settings.SCREEN_MULTI_LINGUAL);
-            removePreference(Settings.PREF_SHOW_LANGUAGE_SWITCH_KEY, multiLingualScreen);
             removePreference(
-                    Settings.PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST, multiLingualScreen);
+                    Settings.PREF_SHOW_LANGUAGE_SWITCH_KEY, advancedSettings);
+            removePreference(
+                    Settings.PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST, advancedSettings);
         }
 
+
         // TODO: consolidate key preview dismiss delay with the key preview animation parameters.
         if (!Settings.readFromBuildConfigIfToShowKeyPreviewPopupOption(res)) {
-            removePreference(Settings.PREF_POPUP_ON, inputScreen);
-            removePreference(Settings.PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY, advancedScreen);
+            removePreference(Settings.PREF_POPUP_ON, generalSettings);
+            removePreference(Settings.PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY, advancedSettings);
         } else {
             // TODO: Cleanup this setup.
             final ListPreference keyPreviewPopupDismissDelay =
@@ -182,18 +199,18 @@ public final class SettingsFragment extends InputMethodSettingsFragment
         }
 
         if (!res.getBoolean(R.bool.config_setup_wizard_available)) {
-            removePreference(Settings.PREF_SHOW_SETUP_WIZARD_ICON, advancedScreen);
+            removePreference(Settings.PREF_SHOW_SETUP_WIZARD_ICON, advancedSettings);
         }
 
-        final PreferenceScreen correctionScreen =
-                (PreferenceScreen) findPreference(Settings.SCREEN_CORRECTION);
+        final PreferenceGroup textCorrectionGroup =
+                (PreferenceGroup) findPreference(Settings.PREF_CORRECTION_SETTINGS);
         final PreferenceScreen dictionaryLink =
                 (PreferenceScreen) findPreference(Settings.PREF_CONFIGURE_DICTIONARIES_KEY);
         final Intent intent = dictionaryLink.getIntent();
         intent.setClassName(context.getPackageName(), DictionarySettingsActivity.class.getName());
         final int number = context.getPackageManager().queryIntentActivities(intent, 0).size();
         if (0 >= number) {
-            correctionScreen.removePreference(dictionaryLink);
+            textCorrectionGroup.removePreference(dictionaryLink);
         }
 
         if (ProductionFlag.IS_METRICS_LOGGING_SUPPORTED) {
@@ -207,7 +224,7 @@ public final class SettingsFragment extends InputMethodSettingsFragment
                 enableMetricsLogging.setTitle(enableMetricsLoggingTitle);
             }
         } else {
-            removePreference(Settings.PREF_ENABLE_METRICS_LOGGING, advancedScreen);
+            removePreference(Settings.PREF_ENABLE_METRICS_LOGGING, textCorrectionGroup);
         }
 
         final Preference editPersonalDictionary =
@@ -221,7 +238,7 @@ public final class SettingsFragment extends InputMethodSettingsFragment
         }
 
         if (!Settings.readFromBuildConfigIfGestureInputEnabled(res)) {
-            removePreference(Settings.SCREEN_GESTURE, getPreferenceScreen());
+            removePreference(Settings.PREF_GESTURE_SETTINGS, getPreferenceScreen());
         }
 
         AdditionalFeaturesSettingUtils.addAdditionalFeaturesPreferences(context, this);
@@ -244,8 +261,8 @@ public final class SettingsFragment extends InputMethodSettingsFragment
             voiceInputKeyOption.setSummary(isShortcutImeEnabled ? null
                     : res.getText(R.string.voice_input_disabled_summary));
         }
-        final TwoStatePreference showSetupWizardIcon =
-                (TwoStatePreference)findPreference(Settings.PREF_SHOW_SETUP_WIZARD_ICON);
+        final CheckBoxPreference showSetupWizardIcon =
+                (CheckBoxPreference)findPreference(Settings.PREF_SHOW_SETUP_WIZARD_ICON);
         if (showSetupWizardIcon != null) {
             showSetupWizardIcon.setChecked(Settings.readShowSetupWizardIcon(prefs, getActivity()));
         }
@@ -459,29 +476,4 @@ public final class SettingsFragment extends InputMethodSettingsFragment
             userDictionaryPreference.setFragment(UserDictionaryList.class.getName());
         }
     }
-
-    @Override
-    public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
-        if (!FeedbackUtils.isFeedbackFormSupported()) {
-            return;
-        }
-        menu.add(NO_MENU_GROUP, MENU_FEEDBACK /* itemId */, MENU_FEEDBACK /* order */,
-                R.string.send_feedback);
-        menu.add(NO_MENU_GROUP, MENU_ABOUT /* itemId */, MENU_ABOUT /* order */,
-                FeedbackUtils.getAboutKeyboardTitleResId());
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(final MenuItem item) {
-        final int itemId = item.getItemId();
-        if (itemId == MENU_FEEDBACK) {
-            FeedbackUtils.showFeedbackForm(getActivity());
-            return true;
-        }
-        if (itemId == MENU_ABOUT) {
-            startActivity(FeedbackUtils.getAboutKeyboardIntent(getActivity()));
-            return true;
-        }
-        return super.onOptionsItemSelected(item);
-    }
 }