diff --git a/res/layout/preference_application_light.xml b/res/layout/preference_application_light.xml
index f88038c..72b8e1b 100644
--- a/res/layout/preference_application_light.xml
+++ b/res/layout/preference_application_light.xml
@@ -4,6 +4,8 @@
     android:layout_height="wrap_content"
     android:minHeight="?android:attr/listPreferredItemHeight"
     android:gravity="center_vertical"
+    android:paddingStart="5dp"
+    android:paddingEnd="?android:attr/scrollbarSize"
     android:background="?android:attr/selectableItemBackground" >
 
     <ImageView
diff --git a/res/layout/preference_battery_light.xml b/res/layout/preference_battery_light.xml
index 95d4e5a..a1d77c8 100644
--- a/res/layout/preference_battery_light.xml
+++ b/res/layout/preference_battery_light.xml
@@ -4,18 +4,10 @@
     android:layout_height="wrap_content"
     android:minHeight="?android:attr/listPreferredItemHeight"
     android:gravity="center_vertical"
+    android:paddingStart="5dp"
+    android:paddingEnd="?android:attr/scrollbarSize"
     android:background="?android:attr/selectableItemBackground" >
 
-    <ImageView
-        android:id="@+android:id/icon"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_margin="4dip"
-        android:maxWidth="36dip"
-        android:maxHeight="36dip"
-        android:adjustViewBounds="true"
-        android:layout_gravity="center" />
-
     <RelativeLayout
         android:layout_width="0dip"
         android:layout_height="wrap_content"
diff --git a/res/layout/seek_bar_preference.xml b/res/layout/seek_bar_preference.xml
index c53d2fa..6f18b4b 100644
--- a/res/layout/seek_bar_preference.xml
+++ b/res/layout/seek_bar_preference.xml
@@ -43,6 +43,7 @@
                     android:layout_height="wrap_content"
                     android:layout_toLeftOf="@id/seekBarPrefUnitsRight"
                     android:gravity="right"
+                    android:paddingRight="5dp"
                     android:textAppearance="?android:attr/textAppearanceSmall" />
 
             <TextView android:id="@+id/seekBarPrefUnitsLeft"
diff --git a/res/values-cs/custom_strings.xml b/res/values-cs/custom_strings.xml
index c334a09..b36e560 100644
--- a/res/values-cs/custom_strings.xml
+++ b/res/values-cs/custom_strings.xml
@@ -395,4 +395,15 @@
     <string name="soft_back_kill_app_title">Dlouhým stiskem tlačítka zpět vynutit ukončení aplikace</string>
     <string name="soft_back_kill_app_summary">Dlouhým stiskem tlačítka zpět vynutíte ukončení aplikace v popředí</string>
 
+    <!-- Lockscreen battery ring -->
+    <string name="battery_around_lockscreen_ring">Baterie kolem odemykacího kruhu</string>
+
+    <!-- Enable camera -->
+    <string name="lockscreen_enable_camera_title">Widget fotoaparátu</string>
+    <string name="lockscreen_enable_camera_summary">Zobrazit widget fotoaparátu vpravo od obrazovky odmeknutí</string>
+
+    <!-- Enable power menu -->
+    <string name="lockscreen_enable_power_menu_title">Povolit nabídku Vypnout</string>
+    <string name="lockscreen_enable_power_menu_summary">Zobrazit nabídku Vypnout při zamčené obrazovce</string>
+
 </resources>
diff --git a/res/values-de/custom_strings.xml b/res/values-de/custom_strings.xml
index 05a24b8..4d0832c 100644
--- a/res/values-de/custom_strings.xml
+++ b/res/values-de/custom_strings.xml
@@ -23,6 +23,7 @@
 
     <string name="bars_and_menus_settings">Leisten und Menüs</string>
     <string name="bars_and_menus_category_status_bar_title">Statusleiste</string>
+    <string name="bars_and_menus_category_navigation_bar_title">Navigationsleiste</string>
     <string name="status_bar_battery_title">Batteriesymbol</string>
     <string name="status_bar_toggle_brightness">Helligkeitskontrolle</string>
     <string name="status_bar_toggle_brightness_summary">Helligkeit per wischen über die Statusleiste einstellen</string>
@@ -48,7 +49,7 @@
     <string name="profiles_add">Hinzufügen</string>
 
     <!-- Notification light dialogs -->
-    <string name="edit_light_settings">LED Einstellungen bearbeiten</string>
+    <string name="edit_light_settings">LED-Einstellungen bearbeiten</string>
     <string name="pulse_speed_title">Intervall Länge und Geschwindigkeit</string>
     <string name="color_list_title">Farbe</string>
     <string name="default_time">Normal</string>
@@ -60,8 +61,7 @@
     <string name="dialog_test_button">Abbrechen</string>
 
     <!-- Lights settings screen, notification light settings -->
-    <string name="lights_category_title">LED</string>
-    <string name="notification_pulse_title">LED Benachrichtigung</string>
+    <string name="notification_light_enable">Aktivieren</string>
     <string name="notification_light_general_title">Allgemein</string>
     <string name="notification_light_applist_title">Anwendungen</string>
     <string name="notification_light_phonelist_title">Telefon</string>
@@ -71,6 +71,7 @@
     <string name="notification_light_default_value">Standard</string>
     <string name="notification_light_missed_call_title">Verpasster Anruf</string>
     <string name="notification_light_voicemail_title">Sprachnachricht</string>
+    <string name="notification_pulse_title">LED-Benachrichtigung</string>
 
     <!-- Values for the notification light pulse spinners -->
     <string name="pulse_length_always_on">Immer an</string>
@@ -88,8 +89,8 @@
     <string name="led_color_green">Grün</string>
     <string name="led_color_red">Rot</string>
 
-    <!-- Battery light settings  -->
-    <string name="battery_light_title">Akku LED</string>
+    <!-- Battery light settings -->
+    <string name="battery_light_title">Akku-LED</string>
     <string name="battery_light_enable">Aktivieren</string>
     <string name="battery_low_pulse_title">Bei schwachem Akku blinken</string>
     <string name="battery_light_list_title">Farben</string>
@@ -97,7 +98,7 @@
     <string name="battery_light_medium_color_title">Akku wird geladen</string>
     <string name="battery_light_full_color_title">Geladen (90%)</string>
     <string name="battery_light_really_full_color_title">Voll geladen (100%)</string>
-    <string name="edit_battery_settings">Bearbeite LED Einstellungen</string>
+    <string name="edit_battery_settings">Akku-Einstellungen bearbeiten</string>
 
     <!-- brightness settings -->
     <string name="brightness_settings_title">Helligkeitseinstellungen</string>
@@ -119,24 +120,31 @@
     <string name="button_auto_brighness_summary">Tastenhelligkeit im Automodus</string>
     <string name="button_brightness_category">Tasten</string>
     <string name="button_no_brightness">Dunkler Modus</string>
+    <string name="button_no_brightness_summary">Tastenhelligkeit nicht einstellen</string>
+    <string name="button_link_brightness">Mit Bildschirm verknüpfen</string>
     <string name="button_link_brightness_summary">Tastenhelligkeit identisch zur Bildschirmhelligkeit</string>
     <string name="button_manual_brightness">Manuelle Stufen</string>
     <string name="button_manual_brightness_summary">Manuelle Stufen Tastenhelligkeit</string>
     <string name="dialog_manual_brightness_title">Manuelle Tastenhelligkeit</string>
     <!-- Automatic brightness customization -->
     <string name="auto_brightness_setup_title">Automatische Helligkeit</string>
-    <string name="light_sensor_current_value">Aktueller Wert Lichtsensor: <xliff:g id="light_level">%d</xliff:g> Lux</string>
+    <string name="light_sensor_current_value">Aktueller Sensorwert: <xliff:g id="light_level">%d</xliff:g> Lux</string>
     <string name="auto_brightness_dialog_title">Automatische Helligkeitsstufen</string>
     <string name="auto_brightness_level_format"><xliff:g id="level">%1$d</xliff:g></string>
     <string name="auto_brightness_last_level_format"><xliff:g id="level">%1$d</xliff:g>+</string>
     <string name="auto_brightness_adjust_button">Einstellen</string>
     <string name="auto_brightness_close_button">Beenden</string>
     <string name="auto_brightness_reset_button">Zurücksetzen</string>
+    <string name="auto_brightness_split_dialog_title">Helligkeitsstufe aufteilen</string>
     <string name="auto_brightness_level_dialog_title">Helligkeitsstufe</string>
+    <string name="auto_brightness_lux">Umgebungshelligkeit (Lux)</string>
     <string name="auto_brightness_backlight">Helligkeit</string>
-    <string name="auto_brightness_reset_dialog_title">Stufen zurücksetzen?</string>
-    <string name="auto_brightness_reset_confirmation">Alle Helligkeitsstufen werden auf den Standardwert zurück gesetzt.</string>
+    <string name="auto_brightness_reset_dialog_title">Helligkeitsstufen zurücksetzen?</string>
+    <string name="auto_brightness_reset_confirmation">Alle Helligkeitsstufen werden auf ihre Standardwerte zurückgesetzt.</string>
+    <string name="auto_brightness_split_lux_format">Teilungsoption (zwischen <xliff:g id="min">%1$d</xliff:g> und <xliff:g id="max">%2$d</xliff:g> Lux)</string>
+    <string name="auto_brightness_level_options">Lichtstärke Einstellungen</string>
     <string name="auto_brightness_menu_edit">Bearbeiten</string>
+    <string name="auto_brightness_menu_split">Aufteilen</string>
     <string name="auto_brightness_menu_remove">Entfernen</string>
     <string name="sensor_category">Sensor</string>
     <string name="button_timeout_title">Zeitspanne</string>
@@ -151,32 +159,43 @@
     <!-- button settings -->
     <string name="button_volume_keys_title">Lautstärke</string>
     <string name="button_volume_wake_title">Aufwecken mit Lautstärketaste</string>
-    <string name="button_volume_wake_summary">Durch drücken der Lautstärketaste erwacht Ihr Telefon</string>
+    <string name="button_volume_wake_summary">Durch Drücken der Lautstärketaste erwacht Ihr Telefon</string>
+    <string name="button_volume_music_control_title">Musik-Steuerung</string>
+    <string name="button_volume_music_control_summary">Bei abgeschaltetem Bildschirm durch langen Druck auf Lautstärketasten zum nächsten / vorherigen Titel springen</string>
+    <string name="button_headsethook_title">Headset</string>
+    <string name="button_headsethook_launch_voice_title">Headset-Button startet Sprachsteuerung</string>
+    <string name="button_headsethook_launch_voice_summary">Headset-Button drücken, um die Sprachsteuerung zu öffnen</string>
 
     <!-- Network speed -->
     <string name="show_network_speed">Netzwerkgeschwindigkeit</string>
     <string name="show_network_speed_summary">Netzwerkgeschwindigkeit in Statusleiste anzeigen</string>
+    <string name="show_network_speed_bits">Geschwindigkeit in Bits pro Sekunde anzeigen</string>
+    <string name="show_network_speed_bytes">Geschwindigkeit in Bytes pro Sekunde anzeigen</string>
+
+    <!-- Status Bar Activity Indicators -->
+    <string name="show_activity_indicators_on_status_bar_title">Netzwerkaktivitätsanzeige</string>
+    <string name="show_activity_indicators_on_status_bar_summary">Netzwerkaktivität in der Statusleiste anzeigen</string>
 
     <!-- Hardware keys -->
     <string name="button_keys_title">Tasten</string>
     <string name="keys_bindings_title">Tastenaktionen</string>
-    <string name="button_keys_back_title" >Zurück-Taste</string>
-    <string name="button_keys_home_title" >Home-Taste</string>
-    <string name="button_keys_menu_title" >Menü-Taste</string>
-    <string name="button_keys_assist_title" >Such-Taste</string>
-    <string name="button_keys_appSwitch_title" >App-Wechsel-Taste</string>
+    <string name="button_keys_back_title">Zurück-Taste</string>
+    <string name="button_keys_home_title">Home-Taste</string>
+    <string name="button_keys_menu_title">Menü-Taste</string>
+    <string name="button_keys_assist_title">Such-Taste</string>
+    <string name="button_keys_appSwitch_title">App-Wechsel-Taste</string>
     <string name="keys_enable_custom_title">Benutzerdefinierte Aktionen</string>
     <string name="keys_back_press_title">Zurück-Taste</string>
-    <string name="keys_back_long_press_title">Zurück-Taste (long press)</string>
+    <string name="keys_back_long_press_title">Zurück-Taste (langer Druck)</string>
     <string name="keys_home_press_title">Home-Taste</string>
-    <string name="keys_home_long_press_title">Home-Taste (long press)</string>
-    <string name="keys_home_double_tap_title">Home-Taste (double tap)</string>
+    <string name="keys_home_long_press_title">Home-Taste (langer Druck)</string>
+    <string name="keys_home_double_tap_title">Home-Taste (Doppeldruck)</string>
     <string name="keys_menu_press_title">Menü-Taste</string>
-    <string name="keys_menu_long_press_title">Menü-Taste (long press)</string>
+    <string name="keys_menu_long_press_title">Menü-Taste (langer Druck)</string>
     <string name="keys_assist_press_title">Such-Taste</string>
-    <string name="keys_assist_long_press_title">Such-Taste (long press)</string>
+    <string name="keys_assist_long_press_title">Such-Taste (langer Druck)</string>
     <string name="keys_app_switch_press_title">App-Wechsel-Taste</string>
-    <string name="keys_app_switch_long_press_title">App-Wechsel-Taste (long press)</string>
+    <string name="keys_app_switch_long_press_title">App-Wechsel-Taste (langer Druck)</string>
     <string name="keys_action_nothing">keine Aktion</string>
     <string name="keys_action_menu">Öffne/Schließe Menü</string>
     <string name="keys_action_app_switch">zuletzt geöffnete Apps</string>
@@ -187,35 +206,58 @@
     <string name="keys_action_back">Zurück-Taste</string>
     <string name="keys_action_last_app">Wechsel zu letzter App</string>
     <string name="keys_action_kill_app">Beende App</string>
+    <string name="keys_action_sleep">Ausschalten</string>
+    <string name="keys_action_normal">Normal drücken</string>
+    <string name="keys_action_long">Lange drücken</string>
+    <string name="keys_action_double">Doppelt drücken</string>
     <string name="dialog_no_home_key_title">Keine Home-Aktion</string>
-    <string name="no_home_key">Es wurde keiner Taste die \"Home\"-Aktion zugewiesen! Das könnte das Gerät nicht mehr nutzbar machen!</string>
+    <string name="no_home_key">Es ist keine Taste mehr mit der  \"Home\" Funktion belegt!\n\nDies kann ihr Gerät unbedienbar machen!</string>
+    <string name="virtual_key_haptic_feedback_title">Vibrieren bei Berührung</string>
+    <string name="virtual_key_haptic_feedback_summary">Aktivierung abhängig von \"Vibrieren bei Berührung\" in den Toneinstellungen</string>
+
+    <!-- Power Menu Options-->
+    <string name="bars_and_menus_category_power_menu_title">Ein/Aus-Menü</string>
+    <string name="power_menu_toggle_screenshot_title">Bildschirmfoto</string>
+    <string name="power_menu_toggle_screenshot_summary">Option für Bildschirmfoto im Ein/Aus-Menü anzeigen</string>
+    <string name="power_menu_toggle_screenrecord_title">Bildschirmvideo</string>
+    <string name="power_menu_toggle_screenrecord_summary">Option für Bildschirmvideo im Ein/Aus-Menü anzeigen</string>
+    <string name="power_menu_toggle_mobile_data_title">Mobile Daten</string>
+    <string name="power_menu_toggle_mobile_data_summary">Option für Mobile Daten im Ein/Aus-Menü anzeigen</string>
+    <string name="power_menu_toggle_airplane_mode_title">Flugmodus</string>
+    <string name="power_menu_toggle_airplane_mode_summary">Option für Flugmodus im Ein/Aus-Menü anzeigen</string>
+    <string name="power_menu_toggle_sound_toggles_title">Toneinstellungen</string>
+    <string name="power_menu_toggle_sound_toggles_summary">Toneinstellungen im Ein/Aus-Menü anzeigen</string>
 
     <!-- Active Display Notifications -->
-    <string name="ad_settings_summary">Ändere Active Display Einstellungen </string>
+    <string name="ad_settings_title">ActiveDisplay</string>
+    <string name="ad_settings_summary">ActiveDisplay Einstellungen ändern</string>
     <string name="ad_enable_title">Aktivieren</string>
-    <string name="ad_enable_summary_on">Active Display aktiviert</string>
-    <string name="ad_enable_summary_off">Active Display deaktiviert</string>
+    <string name="ad_enable_summary_on">ActiveDisplay aktiviert</string>
+    <string name="ad_enable_summary_off">ActiveDisplay deaktiviert</string>
     <string name="ad_text_title">Benachrichtigungstext</string>
-    <string name="ad_text_summary">Benachrichtigungstext um Active Display Ring</string>
+    <string name="ad_text_summary">Benachrichtigungstext um ActiveDisplay-Ring</string>
     <string name="ad_all_notifications_title">Alle Benachrichtigungen</string>
-    <string name="ad_all_notifications_summary">Zeige alle Benachrichtigungen inkl. fortlaufende und nicht löschbare.</string>
+    <string name="ad_all_notifications_summary">Zeige alle Benachrichtigungen inkl. fortlaufende und nicht löschbare</string>
     <string name="ad_hide_low_priority_title">Verstecke niedrige Priorität</string>
-    <string name="ad_hide_low_priority_summary">Verstecke Benachrichtigungen mit niedriger Priorität wie z.B. von Google Now.</string>
+    <string name="ad_hide_low_priority_summary">Verstecke Benachrichtigungen mit niedriger Priorität wie z.B. von Google Now</string>
     <string name="ad_pocket_mode_title">Taschenmodus</string>
-    <string name="ad_pocket_mode_summary">Zeige die Active Display Benachrichtigungen wenn du das Gerät aus der Tasche nimmst.</string>
+    <string name="ad_pocket_mode_summary">ActiveDisplay-Benachrichtigungen anzeigen, wenn das Gerät aus der Tasche genommen wird</string>
     <string name="ad_redisplay_title">Wiederholte Anzeige</string>
     <string name="ad_timeout_title">Display Ruhezustand</string>
+    <string name="ad_threshold_title">Näherungs-Schwellenwert</string>
     <string name="ad_brightness_title">Benachrichtigungshelligkeit</string>
     <string name="ad_customizations_title">Anpassungen</string>
     <string name="ad_excluded_apps_title">Ausgeschlossene Applikationen</string>
-    <string name="ad_excluded_apps_summary">Ausgeschlossene Applikationen werden nicht durch Active Display angezeigt.</string>
-    <string name="ad_show_date_title">Datum zeigen</string>
-    <string name="ad_show_ampm_title">AM/PM zeigen</string>
+    <string name="ad_excluded_apps_summary">Ausgeschlossene Applikationen werden nicht durch Active Display angezeigt</string>
+    <string name="ad_show_date_title">Datum anzeigen</string>
+    <string name="ad_show_ampm_title">AM/PM anzeigen</string>
     <string name="ad_sunlight_mode_title">Sonnenlichtmodus</string>
-    <string name="ad_brightness_summary">Helligkeit von Benachrichtigungen, wenn automatische Helligkeit deaktiviert ist.</string>
-    <string name="ad_show_date_summary">Zeige das Datum über der Uhr.</string>
-    <string name="ad_show_ampm_summary">Zeige AM/PM neben der Zeit wenn 12 Stunden Anzeige gewählt ist.</string>
-    <string name="ad_sunlight_mode_summary">Kehre die Farben um wenn man sich in einer hellen Umgebung befindet.</string>
+    <string name="ad_brightness_summary">Helligkeit von Benachrichtigungen, wenn automatische Helligkeit deaktiviert ist</string>
+    <string name="ad_show_date_summary">Datum über der Uhr anzeigen</string>
+    <string name="ad_show_ampm_summary">AM/PM anzeigen, wenn die 12-Stunden-Anzeige aktiviert ist</string>
+    <string name="ad_sunlight_mode_summary">Bei heller Umgebung Farben umkehren</string>
+    <string name="ad_turnoff_mode_title">Display ausschalten</string>
+    <string name="ad_turnoff_mode_summary">Display ausschalten, wenn das Gerät wieder eingepackt wird und es durch ActiveDisplay angeschaltet wurde</string>
     <string name="ad_redisplay_never">Niemals</string>
     <string name="ad_redisplay_1m">1 Minute</string>
     <string name="ad_redisplay_5m">5 Minuten</string>
@@ -230,20 +272,219 @@
     <string name="ad_timeout_10s">10 Sekunden</string>
     <string name="ad_timeout_15s">15 Sekunden</string>
     <string name="ad_timeout_25s">25 Sekunden</string>
+    <string name="ad_threshold_0s">Unmittelbar</string>
+    <string name="ad_threshold_1s">1 Sekunde</string>
+    <string name="ad_threshold_2s">2 Sekunden</string>
+    <string name="ad_threshold_3s">3 Sekunden</string>
+    <string name="ad_threshold_4s">4 Sekunden</string>
+    <string name="ad_threshold_5s">5 Sekunden</string>
     <string name="ad_pocket_mode_off">Aus</string>
     <string name="ad_pocket_mode_notifications">Nur Benachrichtigungen</string>
     <string name="ad_pocket_mode_always">Immer</string>
-
     <string name="bars_and_menus_category_recent_panel_title" >Zuletzt geöffnete Apps Menü</string>
 
-    <!--  Recents clear all -->
+    <!-- Recents clear all -->
     <string name="show_recent_clear_all_button_title">Zeige alle Apps entfernen Schaltfläche</string>
     <string name="show_recent_clear_all_button_summary">Aktivieren, um die alle Apps entfernen Schaltfläche anzuzeigen</string>
-    <string name="recent_clear_all_button_location_title">Position der alle Apps entfernen Schaltfläche</string>
-    <string name="recent_clear_all_button_location_summary">Wähle in welcher Ecke die alle Apps entfernen Schaltfläche angezeigt werden soll</string>
-    <string name="recent_clear_all_button_location_top_left">Oben-Links</string>
-    <string name="recent_clear_all_button_location_top_right">Oben-Rechts</string>
-    <string name="recent_clear_all_button_location_bottom_left">Unten-Links</string>
-    <string name="recent_clear_all_button_location_bottom_right">Unten-Rechts</string>
+    <string name="recent_clear_all_button_location_title">Position alle Apps entfernen Schaltfläche</string>
+    <string name="recent_clear_all_button_location_summary">Wählen Sie die Position der alle Apps entfernen Schaltfläche</string>
+    <string name="recent_clear_all_button_location_top_left">Oben links</string>
+    <string name="recent_clear_all_button_location_top_right">Oben rechts</string>
+    <string name="recent_clear_all_button_location_bottom_left">Unten links</string>
+    <string name="recent_clear_all_button_location_bottom_right">Unten rechts</string>
 
+    <!-- Memory Indicator -->
+    <string name="show_recents_memory_indicator_title">Arbeitsspeicher-Anzeige</string>
+    <string name="show_recents_memory_indicator_summary">Arbeitsspeicher-Anzeige in der Ansicht der zuletzt geöffneten anzeigen</string>
+    <string name="recents_memory_indicator_location_title">Position Arbeitsspeicher-Anzeige</string>
+    <string name="recents_memory_indicator_location_summary">Wählen Sie die Position der Arbeitsspeicher-Anzeige</string>
+
+    <!-- Contextual Notification Panel Header -->
+    <string name="notification_drawer_category_title">Benachrichtigungsfeld</string>
+    <string name="custom_statusbar_header_title">Kontextbasierter Hintergrund</string>
+    <string name="custom_statusbar_header_summary">Zeigt im Kopf der Benachrichtigungsleiste ein Bild basierend auf Tag und Zeit</string>
+
+    <!-- Volume default -->
+    <string name="button_volume_default_none">Keine</string>
+    <string name="button_volume_default_ringer">Klingelton</string>
+    <string name="button_volume_default_media">Medien</string>
+    <string name="button_volume_default_title">Standard-Lautstärke</string>
+    <string name="button_volume_default_summary">Auswählen, welche Lautstärke standardmäßig geändert wird</string>
+
+    <!-- Navigation Bar customization-->
+    <string name="navigation_bar_title">Tasten und Layout</string>
+    <string name="navigation_bar_help_text">1 - Um die Bearbeitung zu beginnen, tippen Sie auf das Schloss-Symbol\n\n2 - Tippen Sie auf eine beliebige Taste zum Zuweisen oder Ändern der Funktionalität\n\n3 - Langes Drücken auf eine beliebige Taste, um die Reihenfolge zu ändern\n\n4 - Um zu speichern, tippen Sie wieder auf das Schloss-Symbol\n\n5 - Zum Zurücksetzen auf Systemeinstellung auf die Reset-Taste tippen\n\n</string>
+    <string name="navigation_bar_tips">\u2022 Aktionen können nur einer Taste zu selben Zeit zugeordnet werden\n\n\u2022 Die Home-Taste kann nicht neu zugeordnet werden\n\n\u2022 Seitentasten können nicht neu angeordnet werden</string>
+    <string name="navigation_bar_tips_title">Kurztipps</string>
+    <string name="navigation_bar_reset_message">Aktuelle Einstellungen löschen und auf Standardeinstellungen zurücksetzen?</string>
+    <string name="navigation_bar_save_message">Einstellungen der Navigationsleiste gespeichert</string>
+    <string name="navigation_bar_reset_toast">Navigationsleiste auf die Standardeinstellungen zurücksetzen</string>
+    <string name="navigation_bar_menu_editable">Veränderbar</string>
+    <string name="navigation_bar_menu_locked">Gesperrt</string>
+
+    <!-- Navigation ring shortcuts -->
+    <string name="navigation_ring_title">Schnellstart-Verknüpfungen</string>
+    <string name="navring_target_reset_message">Schnellstart-Verknüpfungen auf Standard zurücksetzen?</string>
+    <string name="navring_target_reset">Schnellstart-Verknüpfungen zurückgesetzt</string>
+    <string name="navring_action_open_ime_switcher">Eingabemethode wählen</string>
+    <string name="navring_action_kill_app">App schließen</string>
+    <string name="navring_action_none">Keine</string>
+    <string name="navring_action_take_screenshot">Bildschirmfoto aufnehmen</string>
+    <string name="navring_action_ring_vibrate">Ton/Vibration</string>
+    <string name="navring_action_ring_silent">Ton/Stumm</string>
+    <string name="navring_action_ring_vibrate_silent">Ton/Vibration/Stumm</string>
+    <string name="navring_action_screen_off">Bildschirm sperren</string>
+    <string name="navring_action_torch">Taschenlampe</string>
+    <string name="navring_action_google_now">Google Now</string>
+    <string name="navring_choose_action_title">Aktion auswählen</string>
+    <string name="navring_action_last_app">Zur letzten App wechseln</string>
+
+    <!-- String for IconPicker -->
+    <string name="icon_picker_title">Quelle für Icon auswählen</string>
+    <string name="icon_picker_system_icons_title">System-Icons</string>
+    <string name="icon_picker_gallery_title">Galerie</string>
+    <string name="icon_picker_pack_title">Icon-Paket</string>
+
+    <!-- Lock Screen Shortcuts -->
+    <string name="lockscreen_target_info">Schieber zur gewünschten Position ziehen, um dort eine Anwendung zu platzieren</string>
+    <string name="lockscreen_target_title">Sperrbildschirm-Anwendungen</string>
+    <string name="lockscreen_target_summary">Anwendungen zum Sperrbildschirm hinzufügen</string>
+    <string name="lockscreen_target_reset">Sperrbildschirm-Anwendungen auf Standard zurückgesetzt</string>
+    <string name="lockscreen_target_reset_title">Zurücksetzen</string>
+    <string name="lockscreen_target_reset_message">Anwendungen vom Sperrbildschirm löschen und auf Standard zurücksetzen?</string>
+    <string name="lockscreen_target_empty">Leer</string>
+    <string name="lockscreen_target_edit_title">Abkürzungen und Icon bearbeiten</string>
+    <string name="lockscreen_target_edit_msg">Wählen oder ändern Sie die gewünschte Anwendung oder Aktivität und das zugehörige Icon</string>
+
+    <!-- Lock screen shortcuts -->
+    <string name="picker_activities">Aktivitäten</string>
+    <string name="select_custom_app_title">Benutzerdefinierte App auswählen</string>
+    <string name="select_custom_activity_title">Benutzerdefinierte Aktivität auswählen</string>
+    <string name="icon_picker_choose_icon_title">Icon auswählen</string>
+    <string name="icon_picker_alarm">Alarm</string>
+    <string name="icon_picker_browser">Browser</string>
+    <string name="icon_picker_calendar">Kalender</string>
+    <string name="icon_picker_camera">Kamera</string>
+    <string name="icon_picker_chrome">Chrome</string>
+    <string name="icon_picker_contacts">Kontakte</string>
+    <string name="icon_picker_email">Email</string>
+    <string name="icon_picker_email2">Email Holo</string>
+    <string name="icon_picker_facebook">Facebook</string>
+    <string name="icon_picker_gallery">Galerie</string>
+    <string name="icon_picker_google_small">Google (klein)</string>
+    <string name="icon_picker_googleplus">Google Plus</string>
+    <string name="icon_picker_googletalk">Hangouts</string>
+    <string name="icon_picker_maps">Maps</string>
+    <string name="icon_picker_movie">Video</string>
+    <string name="icon_picker_music">Musik</string>
+    <string name="icon_picker_nav_normal">Navigation</string>
+    <string name="icon_picker_phone">Telefon</string>
+    <string name="icon_picker_podcast">Podcast</string>
+    <string name="icon_picker_rss">RSS</string>
+    <string name="icon_picker_search">Suche</string>
+    <string name="icon_picker_sms">Nachrichten</string>
+    <string name="icon_picker_twitter">Twitter</string>
+
+    <!-- QuickSettings: Dynamic Row -->
+    <string name="qs_configurable_title">Schnelleinstellungen konfigurierbar</string>
+    <string name="qs_configurable_summary">Aktivieren/Deaktivieren dynamischer Zeilenänderungen</string>
+
+    <!-- QuickSettings: Quick Pulldown -->
+    <string name="title_quick_pulldown">Schnelles Öffnen</string>
+    <string name="summary_quick_pulldown">Herunterziehen der Benachrichtigungsleiste am %1$s Rand öffnet die Schnelleinstellungen</string>
+    <string name="quick_pulldown_off">Deaktiviert</string>
+    <string name="quick_pulldown_left">Linke Seite</string>
+    <string name="quick_pulldown_centre">Mitte</string>
+    <string name="quick_pulldown_right">Rechte Seite</string>
+
+    <!-- QuickSettings: Smart Pulldown -->
+    <string name="smart_pulldown_title">Smart Pulldown</string>
+    <string name="smart_pulldown_summary">Öffnet die Schnelleinstellungen, wenn keine %1$s Benachrichtigungen vorliegen.</string>
+    <string name="smart_pulldown_off">Deaktiviert</string>
+    <string name="smart_pulldown_dismissable">Verwerfbar</string>
+    <string name="smart_pulldown_persistent">Anhaltend</string>
+
+    <!-- Cursor control -->
+    <string name="volume_key_cursor_control_title">Cursor bewegen mit Lautstärketasten</string>
+    <string name="volume_key_cursor_control_on">Lautstärke hoch/runter bewegt den Cursor links/rechts</string>
+    <string name="volume_key_cursor_control_on_reverse">Lautstärke hoch/runter bewegt den Cursor rechts/links</string>
+
+    <!-- Quick Swipe -->
+    <string name="quick_swipe_title">Schnell wischen</string>
+    <string name="quick_swipe_summary">Schnell wischen, um zwischen den Schnelleinstellungen und der Benachrichtigungsanzeige zu wechseln</string>
+
+    <!-- navigation bar -->
+    <string name="soft_back_kill_app_title">Aktuelle App beenden</string>
+    <string name="soft_back_kill_app_summary">Langes drücken der Zurück-Taste beendet die App im Vordergrund</string>
+
+    <!-- Sound themes -->
+    <string name="sound_packages_title">Sound-Pakete</string>
+    <string name="install_sound_pack_title">Sound-Pakete installieren</string>
+    <string name="install_sound_pack_summary">Installieren von neuen Sound-Paketen, die dem \"SoundPacks\" Ordner auf dem internen Speicher hinzugefügt wurden</string>
+    <string name="select_sound_pack_title">Sound Paket auswählen</string>
+    <string name="select_sound_pack_summary">Aktives Sound Paket auswählen</string>
+    <string name="default_sound_pack">Standard (System)</string>
+    <string name="error_pack_install">Fehler beim Installieren des Sound Pakets</string>
+
+    <string name="omniswitch_category">OmniSwitch</string>
+    <string name="recents_use_omniswitch_title">Für zuletzt geöffnete Apps verwenden</string>
+    <string name="recents_use_omniswitch_summary">OmniSwitch anstelle der Standard-Ansicht für zuletzt geöffnete Apps verwenden</string>
+    <string name="omniswitch_start_settings_title">Einstellungen</string>
+    <string name="omniswitch_start_settings_summary">OmniSwitch-Einstellungen öffnen</string>
+    <string name="omniswitch_not_installed_title">Warnung</string>
+    <string name="omniswitch_not_installed_summary">OmniSwitch ist nicht installiert</string>
+    <string name="omniswitch_not_installed_message">OmniSwitch ist nicht installiert</string>
+    <string name="omniswitch_first_time_title">Information</string>
+    <string name="omniswitch_first_time_message">Überprüfen sie, ob sie OmniSwitch aktiviert haben. Sie können dies in den \"Einstellungen\" überprüfen</string>
+
+    <string name="emulate_menu_key_title">Hardware Menü-Taste emulieren</string>
+    <string name="emulate_menu_key_summary">Verstecken des Drei-Punkte-Überlaufmenüs in Anwendungen erzwingen. Neustart der App erforderlich</string>
+
+    <string name="force_show_overflow_menu_title">Überlaufmenü anzeigen</string>
+    <string name="force_show_overflow_menu_summary">Anzeige des Drei-Punkte-Überlaufmenüs in Anwendungen erzwingen. Neustart der App erforderlich</string>
+
+    <!-- Clock -->
+    <string name="status_bar_clock">Uhrzeit und Datum</string>
+    <string name="status_bar_clock_title">Uhrzeit- und Datums-Layout</string>
+    <string name="clock_title_enable">Ausrichtung</string>
+    <string name="clock_enabled">Aktiviert</string>
+    <string name="clock_disabled">Deaktiviert</string>
+    <string name="status_bar_show_clock_title">Uhrzeit und Datum anzeigen</string>
+    <string name="status_bar_am_pm_title">AM/PM</string>
+    <string name="status_bar_am_pm_info">24-Stunden-Anzeige ist aktiviert</string>
+    <string name="enable_clock_weekday">Wochentag</string>
+    <string name="enable_clock_weekday_summary">Wochentagabkürzung vor Uhrzeit</string>
+    <string name="right_clock">Rechts</string>
+    <string name="center_clock">Zentriert</string>
+    <string name="dont_show">Nicht anzeigen</string>
+    <string name="clock_date_display">Datum</string>
+    <string name="clock_date_display_summary">Zeige benutzerdefiniertes Datum vor der Uhr</string>
+    <string name="clock_date_style">Layout</string>
+    <string name="clock_date_format">Format</string>
+    <string name="am_pm_clock_normal">Normale Schriftgröße</string>
+    <string name="am_pm_clock_small">Kleine Schriftgröße</string>
+    <string name="am_pm_clock_none">Nicht anzeigen</string>
+    <string name="clock_date_display_none">Nicht anzeigen</string>
+    <string name="clock_date_display_small">Kleine Schriftgröße</string>
+    <string name="clock_date_display_normal">Normale Schriftgröße</string>
+    <string name="clock_date_style_normal">Normal</string>
+    <string name="clock_date_style_lowercase">Kleinbuchstaben</string>
+    <string name="clock_date_style_uppercase">Großbuchstaben</string>
+
+    <string name="security_maximize_widgets_title">Sperrbildschirm Widgets maximieren</string>
+
+    <!-- Enable camera -->
+    <string name="lockscreen_enable_camera_title">Kamera-Widget</string>
+    <string name="lockscreen_enable_camera_summary">Nach rechts wischen, um Kamera-Widget zu zeigen</string>
+
+    <!-- Enable power menu -->
+    <string name="lockscreen_enable_power_menu_title">Ausschalt-Menü aktivieren</string>
+    <string name="lockscreen_enable_power_menu_summary">Ausschalt-Menü anzeigen, wenn der Bildschirm gesperrt ist</string>
+
+    <!-- Lockscreen see through -->
+    <string name="lockscreen_see_through_title">Durchsichtig</string>
+    <string name="lockscreen_see_through_summary">Zeigt den Inhalt hinter dem Sperrbildschirm. Daten könnten für umstehende sichtbar sein.</string>
+
+    <!-- Lockscreen battery ring -->
+    <string name="battery_around_lockscreen_ring">Batteriestatus um Entsperrsysmbol</string>
 </resources>
diff --git a/res/values-el/custom_strings.xml b/res/values-el/custom_strings.xml
new file mode 100644
index 0000000..dcfafdf
--- /dev/null
+++ b/res/values-el/custom_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012-2013 The CyanogenMod Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+
+    <!-- Lockscreen battery ring -->
+    <string name="battery_around_lockscreen_ring">Μπαταρία γύρω από δακτύλιο ξεκλειδώματος</string>
+
+</resources>
diff --git a/res/values-es/custom_strings.xml b/res/values-es/custom_strings.xml
new file mode 100644
index 0000000..59b9f56
--- /dev/null
+++ b/res/values-es/custom_strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012-2013 The CyanogenMod Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+
+    <!-- Lockscreen battery ring -->
+    <string name="battery_around_lockscreen_ring">Indicar batería en el anillo de desbloqueo</string>
+
+</resources>
diff --git a/res/values-fr/custom_strings.xml b/res/values-fr/custom_strings.xml
index c38ab1a..ea97180 100644
--- a/res/values-fr/custom_strings.xml
+++ b/res/values-fr/custom_strings.xml
@@ -125,13 +125,7 @@
     <string name="auto_brightness_menu_remove">Diviser</string>
     <string name="sensor_category">Capteurs</string>
     <string name="button_timeout_title">Délai</string>
-    <plurals name="button_timeout_time">
-        <item quantity="one"><xliff:g id="seconds">%d</xliff:g> seconde</item>
-        <item quantity="other"><xliff:g id="seconds">%d</xliff:g> secondes</item>
-    </plurals>
-    <string name="button_timeout_enabled">Activé pour <xliff:g id="timeout">%s</xliff:g></string>
-    <string name="button_timeout_disabled">Désactivé</string>
-    <string name="dialog_button_timeout_title">Durée d\éclairage des boutons</string>
+    <string name="button_timeout_summary">Désactivé lorsque la valeur est égale à 0</string>
     <string name="button_volume_keys_title">Volume</string>
     <string name="button_volume_wake_title">Réveil avec boutons Volume</string>
     <string name="button_volume_wake_summary">Un appui sur un bouton de volume sortira votre appareil de la veille</string>
@@ -140,10 +134,20 @@
     <string name="button_headsethook_title">Casque</string>
     <string name="button_headsethook_launch_voice_title">Casque à commande vocale</string>
     <string name="button_headsethook_launch_voice_summary">Un appui sur le bouton du casque lance la commande vocale</string>
-    <string name="show_network_speed">Indicateur de vitesse réseau</string>
-    <string name="show_network_speed_summary">Afficher la vitesse du réseau dans la barre de statut</string>
-    <string name="show_network_speed_bits">Afficher la vitesse du réseau en bits par seconde</string>
-    <string name="show_network_speed_bytes">Afficher la vitesse du réseau en Bytes par seconde</string>
+    <string name="network_traffic_title">Trafic réseau</string>
+    <string name="show_network_traffic_state">Moniteur dans la barre de statut</string>
+    <string name="show_network_traffic_unit">Afficher l\'unité</string>
+    <string name="show_network_traffic_frequency">Intervalle de mise à jour</string>
+    <string name="show_network_traffic_disable">Désactivé</string>
+    <string name="show_network_traffic_up">Sortant</string>
+    <string name="show_network_traffic_down">Entrant</string>
+    <string name="show_network_traffic_all">Entrant et sortant</string>
+    <string name="show_network_traffic_bit">Bits par seconde</string>
+    <string name="show_network_traffic_byte">Bytes par seconde</string>
+    <string name="show_network_traffic_500">500 ms</string>
+    <string name="show_network_traffic_1000">1000 ms</string>
+    <string name="show_network_traffic_1500">1500 ms</string>
+    <string name="show_network_traffic_2000">2000 ms</string>
     <string name="show_activity_indicators_on_status_bar_title">Indicateur d\'activité réseau</string>
     <string name="show_activity_indicators_on_status_bar_summary">Afficher un indicateur d\'activité réseau dans la barre de statut</string>
     <string name="button_keys_title">Boutons</string>
@@ -199,8 +203,12 @@
     <string name="ad_enable_title">Activer</string>
     <string name="ad_enable_summary_on">ActiveDisplay activé</string>
     <string name="ad_enable_summary_off">ActiveDisplay désactivé</string>
+    <string name="ad_bypass_title">Outrepasser Active Display</string>
+    <string name="ad_bypass_summary">Lors qu\'aucune notification ne sera présente, le mode de poche verrouillera votre appareil</string>
     <string name="ad_text_title">Texte des notifications</string>
     <string name="ad_text_summary">Afficher le texte des notifications autour du cercle</string>
+    <string name="ad_content_title">Utiliser les notifications personnalisées</string>
+    <string name="ad_content_summary">Utiliser le style d\'affichage d\'Active Display pour afficher les détails des notifications au lieu du style du système</string>
     <string name="ad_all_notifications_title">Toutes les notifications</string>
     <string name="ad_all_notifications_summary">Afficher toutes les notifications, y compris les notifications non-effaçables</string>
     <string name="ad_hide_low_priority_title">Masquer les faibles priorités</string>
@@ -210,10 +218,13 @@
     <string name="ad_redisplay_title">Ré-afficher les notifications</string>
     <string name="ad_timeout_title">Durée d\'affichage</string>
     <string name="ad_threshold_title">Seuil de proximité</string>
+    <string name="ad_threshold_summary">Définir le délai pendant lequel le capteur doit être recouvert avant qu\'Active Display soit affiché</string>
     <string name="ad_brightness_title">Luminosité des notifications</string>
     <string name="ad_customizations_title">Personnalisation</string>
     <string name="ad_excluded_apps_title">Applications exclues</string>
     <string name="ad_excluded_apps_summary">Les applications exclues ne seront pas affichées</string>
+    <string name="ad_privacy_apps_title">Mode privé</string>
+    <string name="ad_privacy_apps_summary">Aucun détail provenant de ces applications ne sera affiché</string>
     <string name="ad_show_date_title">Afficher la date</string>
     <string name="ad_show_ampm_title">Afficher AM/PM</string>
     <string name="ad_sunlight_mode_title">Mode haute luminosité</string>
@@ -267,6 +278,15 @@
     <string name="button_volume_default_media">Média</string>
     <string name="button_volume_default_title">Volume par défaut</string>
     <string name="button_volume_default_summary">Définir quel volume modifier par défaut</string>
+    <string name="navigation_bar_title">Boutons et agencement</string>
+    <string name="navigation_bar_help_text">1 - Pour commencer l\'édition, appuyer sur le cadenas\n\n2 - Appuyer sur un des boutons pour assigner ou changer une fonctionnalité\n\n3 - Exercer une pression longue pour modifier l\'ordre\n\n4 - Pour enregistrer, appuyer à nouveau sur le cadenas\n\n5 - Pour remettre à zéro, appuyer sur le bouton \"Réinitialiser\"\n\n</string>
+    <string name="navigation_bar_tips">\u2022 Les actions ne peuvent être assignées qu\'une seule fois\n\n\u2022 Le bouton Accueil ne peut pas être réassigné\n\n\u2022 Les boutons sur le bord ne peuvent être déplacés</string>
+    <string name="navigation_bar_tips_title">Conseils pratiques</string>
+    <string name="navigation_bar_reset_message">Supprimer la configuration actuelle et restaurer les paramètres par défaut\u00A0?</string>
+    <string name="navigation_bar_save_message">Paramètres de la barre de navigation sauvegardés</string>
+    <string name="navigation_bar_reset_toast">Restauration des paramètres par défaut de la barre de navigation</string>
+    <string name="navigation_bar_menu_editable">Éditable</string>
+    <string name="navigation_bar_menu_locked">Verrouillé</string>
     <string name="navigation_ring_title">Raccourcis de lancement rapide</string>
     <string name="navring_target_reset_message">Supprimer tous les raccourcis de la barre de navigation et revenir à la configuration d\'origine\u00A0?</string>
     <string name="navring_target_reset">Raccourcis de la barre de navigation réinitialisés</string>
@@ -322,6 +342,7 @@
     <string name="icon_picker_search">Recherche</string>
     <string name="icon_picker_sms">Messages</string>
     <string name="icon_picker_twitter">Twitter</string>
+    <string name="quick_settings_category_title">Volet des paramètres</string>
     <string name="qs_configurable_title">Volet des paramètres configurables</string>
     <string name="qs_configurable_summary">Activer les raccourcis configurables dans le volet des paramètres</string>
     <string name="title_quick_pulldown">Accés rapide au volet des paramètres</string>
@@ -342,4 +363,62 @@
     <string name="quick_swipe_summary">Accès rapide entre les notifications et le panneau des paramètres</string>
     <string name="soft_back_kill_app_title">Appui long sur Retour tue l\'application</string>
     <string name="soft_back_kill_app_summary">Un appui long sur le bouton retour tuera l\'application en premier plan</string>
+    <string name="sound_packages_title">Pack de sons</string>
+    <string name="install_sound_pack_title">Installer un pack de sons</string>
+    <string name="install_sound_pack_summary">Installer un nouveau pack de sons ajouté dans le dossier SoundPacks du stockage interne</string>
+    <string name="select_sound_pack_title">Sélectionner un pack de sons</string>
+    <string name="select_sound_pack_summary">Sélectionner le pack de sons à activer</string>
+    <string name="default_sound_pack">Défaut (Système)</string>
+    <string name="error_pack_install">Erreur lors de l\'installation du pack de sons</string>
+    <string name="omniswitch_category">OmniSwitch</string>
+    <string name="recents_use_omniswitch_title">Utiliser pour les applications récentes</string>
+    <string name="recents_use_omniswitch_summary">Utiliser OmniSwitch à la place du gestionnaire d\'applications par défaut</string>
+    <string name="omniswitch_start_settings_title">Paramètres</string>
+    <string name="omniswitch_start_settings_summary">Ouvrir les paramètres d\'OmniSwitch</string>
+    <string name="omniswitch_not_installed_title">Attention</string>
+    <string name="omniswitch_not_installed_summary">OmniSwitch n\'est pas installé</string>
+    <string name="omniswitch_not_installed_message">OmniSwitch n\'est pas installé</string>
+    <string name="omniswitch_first_time_title">Informations</string>
+    <string name="omniswitch_first_time_message">Assurez-vous d\'avoir bien activé OmniSwitch. Vous pouvez le vérifier ci-dessous dans le menu \"Paramètres\"</string>
+    <string name="emulate_menu_key_title">Émuler le bouton matériel Menu</string>
+    <string name="emulate_menu_key_summary">Forcer le masquage du menu déroulant à 3 points dans les applications. Nécessite un redémarrage des applications</string>
+    <string name="force_show_overflow_menu_title">Afficher le menu déroulant</string>
+    <string name="force_show_overflow_menu_summary">Forcer l\'affichage du menu déroulant à 3 points dans les applications. Nécessite un redémarrage des applications</string>
+    <string name="status_bar_clock">Date et heure</string>
+    <string name="status_bar_clock_title">Style de la date et de l\'heure</string>
+    <string name="clock_title_enable">Position</string>
+    <string name="clock_enabled">Activé</string>
+    <string name="clock_disabled">Désactivé</string>
+    <string name="clock_color_title">Couleur</string>
+    <string name="status_bar_clock_style_reset">Réinitialiser la couleur</string>
+    <string name="status_bar_show_clock_title">Afficher la date et l\'heure</string>
+    <string name="status_bar_am_pm_title">AM/PM</string>
+    <string name="status_bar_am_pm_info">L\'heure sur 24 heures est activée</string>
+    <string name="enable_clock_weekday">Jour de la semaine</string>
+    <string name="enable_clock_weekday_summary">Jour abrégée de la semaine avant l\'heure</string>
+    <string name="right_clock">À droite</string>
+    <string name="center_clock">Au centre</string>
+    <string name="dont_show">Ne pas afficher</string>
+    <string name="clock_date_display">Date</string>
+    <string name="clock_date_display_summary">Afficher une date personnalisée avant l\'heure</string>
+    <string name="clock_date_style">Style de la date</string>
+    <string name="clock_date_format">Format de la date</string>
+    <string name="am_pm_clock_normal">Police de taille normale</string>
+    <string name="am_pm_clock_small">Police de petite taille</string>
+    <string name="am_pm_clock_none">Ne pas afficher</string>
+    <string name="clock_date_display_none">Ne pas afficher</string>
+    <string name="clock_date_display_small">Police de petite taille</string>
+    <string name="clock_date_display_normal">Police de taille normale</string>
+    <string name="clock_date_style_normal">Normale</string>
+    <string name="clock_date_style_lowercase">Minuscule</string>
+    <string name="clock_date_style_uppercase">Majuscule</string>
+    <string name="battery_around_lockscreen_ring">Niveau de batterie autour de l\'anneau de déverrouillage</string>
+    <string name="security_maximize_widgets_title">Maximiser les widgets</string>
+    <string name="lockscreen_enable_camera_title">Widget Appareil photo</string>
+    <string name="lockscreen_enable_camera_summary">Glisser sur la droite pour activer le widget de l\'appareil photo</string>
+    <string name="lockscreen_enable_power_menu_title">Activer le menu Marche/Arrêt</string>
+    <string name="lockscreen_enable_power_menu_summary">Afficher le menu Marche/Arrêt lorsque l\'écran est verrouillé</string>
+    <string name="lockscreen_see_through_title">Affichage transparent</string>
+    <string name="lockscreen_see_through_summary">Afficher le contenu derrière votre écran de verrouillage, vos données peuvent être visibles à ceux autour de vous</string>
+
 </resources>
diff --git a/res/values-it/custom_strings.xml b/res/values-it/custom_strings.xml
index 22030e0..b181958 100644
--- a/res/values-it/custom_strings.xml
+++ b/res/values-it/custom_strings.xml
@@ -188,7 +188,7 @@
     <string name="keys_home_long_press_title">Tasto home (pressione lunga)</string>
     <string name="keys_home_double_tap_title">Tasto home (doppio tocco)</string>
     <string name="keys_menu_press_title">Tasto menu</string>
-    <string name="keys_menu_long_press_title">Fasto menu (pressione lunga)</string>
+    <string name="keys_menu_long_press_title">Tasto menu (pressione lunga)</string>
     <string name="keys_assist_press_title">Tasto ricerca</string>
     <string name="keys_assist_long_press_title">Tasto ricerca (pressione lunga)</string>
     <string name="keys_app_switch_press_title">Tasto passa app.</string>
@@ -388,4 +388,9 @@
     <!-- navigation bar -->
     <string name="soft_back_kill_app_title">Tasto indietro per chiudere le applicazioni</string>
     <string name="soft_back_kill_app_summary">Tieni premuto il tasto indietro per chiudere le applicazioni recenti</string>
+
+    <!-- Lockscreen battery ring -->
+    <string name="battery_around_lockscreen_ring">Batteria anello di sblocco</string>
+
+    <string name="security_maximize_widgets_title">Massimizza widget lockscreen</string>
 </resources>
diff --git a/res/values-nl/custom_strings.xml b/res/values-nl/custom_strings.xml
index 48ee464..b3504cc 100644
--- a/res/values-nl/custom_strings.xml
+++ b/res/values-nl/custom_strings.xml
@@ -107,7 +107,7 @@
     <string name="auto_brightness_sensitivity_title">Gevoeligheidsinstellingen</string>
     <string name="auto_brightness_sensitivity_summary">Normaal</string>
     <string name="auto_brightness_sensitivity_verylow">Heel laag</string>
-    <string name="auto_brightness_sensitivity_low">Leeg</string>
+    <string name="auto_brightness_sensitivity_low">Laag</string>
     <string name="auto_brightness_sensitivity_medium">Normaal</string>
     <string name="auto_brightness_sensitivity_high">Hoog</string>
     <string name="auto_brightness_sensitivity_veryhigh">Heel hoog</string>
@@ -159,6 +159,8 @@
     <string name="button_volume_keys_title">Volume</string>
     <string name="button_volume_wake_title">Volumeknop ontwaken</string>
     <string name="button_volume_wake_summary">Maak je apparaat wakker door op de volumeknop te drukken</string>
+    <string name="button_volume_music_control_title">Muziek beheren</string>
+    <string name="button_volume_music_control_summary">Lang drukken op de volume knoppen wisselt van muziek wanneer het scherm uit is</string>
     <string name="button_headsethook_title">Koptelefoon</string>
     <string name="button_headsethook_launch_voice_title">Koptelefoon start microfoon</string>
     <string name="button_headsethook_launch_voice_summary">Drukken op de koptelefoonknop start de microfoon</string>
@@ -166,6 +168,8 @@
     <!-- Network speed -->
     <string name="show_network_speed">Netwerksnelheidsindicator</string>
     <string name="show_network_speed_summary">Toon de netwerksnelheid in de statusbalk</string>
+    <string name="show_network_speed_bits">Toon snelheid in bits per seconde</string>
+    <string name="show_network_speed_bytes">Toon snelheid in Bytes per seconde</string>
 
     <!-- Status Bar Activity Indicators -->
     <string name="show_activity_indicators_on_status_bar_title">Netwerk activiteiten indicator</string>
@@ -201,11 +205,14 @@
     <string name="keys_action_back">Back knop</string>
     <string name="keys_action_last_app">Terug naar laatste app</string>
     <string name="keys_action_kill_app">Sluit app</string>
+    <string name="keys_action_sleep">Ga in slaapstand</string>
     <string name="keys_action_normal">Normaal indrukken</string>
     <string name="keys_action_long">Ingedrukt houden</string>
     <string name="keys_action_double">Dubbele tik</string>
     <string name="dialog_no_home_key_title">Geen home actie</string>
     <string name="no_home_key">Je hebt geen knop toegewezen aan de \"Home"\ actie! Dit kan je apparaat onbruikbaar maken!</string>
+    <string name="virtual_key_haptic_feedback_title">Trillen bij aanraking</string>
+    <string name="virtual_key_haptic_feedback_summary">Inschakelen hangt af van \"Trillen bij aanraking\" bij geluidsinstellingen</string>
 
     <!-- Power Menu Options-->
     <string name="bars_and_menus_category_power_menu_title">Power-menu</string>
@@ -213,6 +220,12 @@
     <string name="power_menu_toggle_screenshot_summary">Toon schermafbeelding optie in power-menu</string>
     <string name="power_menu_toggle_screenrecord_title">Schermopname</string>
     <string name="power_menu_toggle_screenrecord_summary">Toon schermopname optie in power-menu</string>
+    <string name="power_menu_toggle_mobile_data_title">Mobiele data</string>
+    <string name="power_menu_toggle_mobile_data_summary">Toon mobiele data optie in power-menu</string>
+    <string name="power_menu_toggle_airplane_mode_title">Vliegmodus</string>
+    <string name="power_menu_toggle_airplane_mode_summary">Toon vliegmodus optie in power-menu</string>
+    <string name="power_menu_toggle_sound_toggles_title">Geluid beheren</string>
+    <string name="power_menu_toggle_sound_toggles_summary">Toon geluidsopties in het power-menu</string>
 
     <!-- Active Display Notifications -->
     <string name="ad_settings_title">Actieve weergave</string>
@@ -313,6 +326,7 @@
     <string name="navring_action_torch">Zaklamp aan/uit</string>
     <string name="navring_action_google_now">Google Now</string>
     <string name="navring_choose_action_title">Kies actie</string>
+    <string name="navring_action_last_app">Wissel naar laatste app</string>
 
     <!-- String for IconPicker -->
     <string name="icon_picker_title">Kies pictogram bron</string>
@@ -360,4 +374,38 @@
     <string name="icon_picker_sms">Berichten</string>
     <string name="icon_picker_twitter">Twitter</string>
 
+    <!-- QuickSettings: Dynamic Row -->
+    <string name="qs_configurable_title">Instelbare snelle instellingen</string>
+    <string name="qs_configurable_summary">In- of uitschakelen van dynamische rij wijzigingen</string>
+
+    <!-- QuickSettings: Quick Pulldown -->
+    <string name="title_quick_pulldown">Snel openen</string>
+    <string name="summary_quick_pulldown">Snelle instellingen openen met een vinger</string>
+    <string name="quick_pulldown_off">Uitgeschakeld</string>
+    <string name="quick_pulldown_centre">Midden</string>
+    <string name="quick_pulldown_left">Links</string>
+    <string name="quick_pulldown_right">Rechts</string>
+
+    <!-- QuickSettings: Smart Pulldown -->
+    <string name="smart_pulldown_title">Slim openen</string>
+    <string name="smart_pulldown_summary">Snelle instellingen openen als er geen notificaties zijn</string>
+    <string name="smart_pulldown_off">Uitgeschakeld</string>
+    <string name="smart_pulldown_dismissable">Openen als er geen verwijderbare notificaties zijn</string>
+    <string name="smart_pulldown_persistent">Openen als er geen notificaties zijn</string>
+
+    <!-- Cursor control -->
+    <string name="volume_key_cursor_control_title">Cursor met volumeknoppen</string>
+    <string name="volume_key_cursor_control_on">Links/rechts</string>
+    <string name="volume_key_cursor_control_on_reverse">Rechts/links</string>
+
+    <!-- Quick Swipe -->
+    <string name="quick_swipe_title">Snel vegen</string>
+    <string name="quick_swipe_summary">Snel vegen tussen snelle instellingen en het notificatie paneel</string>
+
+    <!-- navigation bar -->
+    <string name="soft_back_kill_app_title">Lang drukken op terug sluit app</string>
+    <string name="soft_back_kill_app_summary">Door lang op de terug knop te drukken sluit de app op de voorgrond</string>
+
+    <!-- Lockscreen battery ring -->
+    <string name="battery_around_lockscreen_ring">Batterij-niveau om ontgrendelingsring</string>
 </resources>
\ No newline at end of file
diff --git a/res/values-pl/custom_strings.xml b/res/values-pl/custom_strings.xml
index e049fe0..ccd2a0a 100644
--- a/res/values-pl/custom_strings.xml
+++ b/res/values-pl/custom_strings.xml
@@ -377,4 +377,6 @@
     <string name="volume_key_cursor_control_on">Lewo/prawo</string>
     <string name="volume_key_cursor_control_on_reverse">Prawo/lewo</string>
 
+    <!-- Lockscreen battery ring -->
+    <string name="battery_around_lockscreen_ring">Stan baterii wokół pierścienia odblokowania</string>
 </resources>
diff --git a/res/values-pt/custom_strings.xml b/res/values-pt/custom_strings.xml
index 1376882..ea87a3c 100644
--- a/res/values-pt/custom_strings.xml
+++ b/res/values-pt/custom_strings.xml
@@ -389,4 +389,6 @@
     <string name="volume_key_cursor_control_on">Esquerda/direita</string>
     <string name="volume_key_cursor_control_on_reverse">Direita/esquerda</string>
 
+    <!-- Lockscreen battery ring -->
+    <string name="battery_around_lockscreen_ring">Bateria ao redor do anel de desbloqueio</string>
 </resources>
diff --git a/res/values-sv/custom_strings.xml b/res/values-sv/custom_strings.xml
index 9624d3c..9df21f4 100644
--- a/res/values-sv/custom_strings.xml
+++ b/res/values-sv/custom_strings.xml
@@ -317,4 +317,5 @@
     <string name="volume_key_cursor_control_title">Pekarkontroll</string>
     <string name="volume_key_cursor_control_on">Vänster/höger</string>
     <string name="volume_key_cursor_control_on_reverse">Höger/vänster</string>
+    <string name="battery_around_lockscreen_ring">Batteri runt upplåsningsring</string>
 </resources>
diff --git a/res/values-zh-rCN/custom_strings.xml b/res/values-zh-rCN/custom_strings.xml
index 5e37101..f3f411b 100644
--- a/res/values-zh-rCN/custom_strings.xml
+++ b/res/values-zh-rCN/custom_strings.xml
@@ -384,4 +384,18 @@
     <string name="volume_key_cursor_control_on">左/右</string>
     <string name="volume_key_cursor_control_on_reverse">右/左</string>
 
+    <!-- Lockscreen battery ring -->
+    <string name="battery_around_lockscreen_ring">在解锁环周围显示电量圈</string>
+
+    <!-- Enable camera -->
+    <string name="lockscreen_enable_camera_title">相机小部件</string>
+    <string name="lockscreen_enable_camera_summary">向左滑动以启动相机</string>
+
+    <!-- Enable power menu -->
+    <string name="lockscreen_enable_power_menu_title">启用电源菜单</string>
+    <string name="lockscreen_enable_power_menu_summary">屏幕锁定时显示电源菜单</string>
+
+    <!-- Lockscreen see through -->
+    <string name="lockscreen_see_through_title">透明锁屏</string>
+    <string name="lockscreen_see_through_summary">显示锁屏后的内容。您的个人信息可被您周围的人看见</string>
  </resources>
diff --git a/res/values/custom_arrays.xml b/res/values/custom_arrays.xml
index dd68836..1168011 100644
--- a/res/values/custom_arrays.xml
+++ b/res/values/custom_arrays.xml
@@ -315,4 +315,113 @@
         <item>2</item>
     </string-array>
 
+    <!--- Clock -->
+    <string-array name="clock_style_entries" translatable="false">
+        <item>@string/right_clock</item>
+        <item>@string/center_clock</item>
+    </string-array>
+
+    <string-array name="clock_style_values" translatable="false">
+        <item>0</item>
+        <item>1</item>
+    </string-array>
+
+    <string-array name="entries_status_bar_am_pm" translatable="false">
+        <item>@string/am_pm_clock_none</item>
+        <item>@string/am_pm_clock_small</item>
+        <item>@string/am_pm_clock_normal</item>
+    </string-array>
+
+    <string-array name="values_status_bar_am_pm" translatable="false">
+        <item>0</item>
+        <item>1</item>
+        <item>2</item>
+    </string-array>
+
+    <string-array name="clock_date_display_entries" translatable="false">
+        <item>@string/clock_date_display_none</item>
+        <item>@string/clock_date_display_small</item>
+        <item>@string/clock_date_display_normal</item>
+    </string-array>
+
+    <string-array name="clock_date_display_values" translatable="false">
+        <item>0</item>
+        <item>1</item>
+        <item>2</item>
+    </string-array>
+
+    <string-array name="clock_date_style_entries" translatable="false">
+        <item>@string/clock_date_style_normal</item>
+        <item>@string/clock_date_style_lowercase</item>
+        <item>@string/clock_date_style_uppercase</item>
+    </string-array>
+
+    <string-array name="clock_date_style_values" translatable="false">
+        <item>0</item>
+        <item>1</item>
+        <item>2</item>
+    </string-array>
+
+    <string-array name="clock_date_format_entries_values" translatable="false">
+        <item>dd/MM/yy</item>
+        <item>MM/dd/yy</item>
+        <item>yyyy-MM-dd</item>
+        <item>yyyy-dd-MM</item>
+        <item>dd-MM-yyyy</item>
+        <item>MM-dd-yyyy</item>
+        <item>MMM dd</item>
+        <item>MMM dd, yyyy</item>
+        <item>MMMM dd, yyyy</item>
+        <item>EEE</item>
+        <item>EEE dd</item>
+        <item>EEE dd/MM</item>
+        <item>EEE MM/dd</item>
+        <item>EEE dd MMM</item>
+        <item>EEE MMM dd</item>
+        <item>EEE MMMM dd</item>
+        <item>EEEE dd/MM</item>
+        <item>EEEE MM/dd</item>
+    </string-array>
+
+    <!-- Network Traffic Display States -->
+    <string-array name="show_network_traffic_state_entries" translatable="false">
+        <item>@string/show_network_traffic_disable</item>
+        <item>@string/show_network_traffic_up</item>
+        <item>@string/show_network_traffic_down</item>
+        <item>@string/show_network_traffic_all</item>
+    </string-array>
+
+    <string-array name="show_network_traffic_state_values" translatable="false">
+        <item>0</item>
+        <item>1</item>
+        <item>2</item>
+        <item>3</item>
+    </string-array>
+
+    <!-- Network Traffic Display Unit -->
+    <string-array name="show_network_traffic_unit_entries" translatable="false">
+        <item>@string/show_network_traffic_bit</item>
+        <item>@string/show_network_traffic_byte</item>
+    </string-array>
+
+    <string-array name="show_network_traffic_unit_values" translatable="false">
+        <item>0</item>
+        <item>1</item>
+    </string-array>
+
+    <!-- Network Traffic Period -->
+    <string-array name="show_network_traffic_frequency_entries" translatable="false">
+        <item>@string/show_network_traffic_500</item>
+        <item>@string/show_network_traffic_1000</item>
+        <item>@string/show_network_traffic_1500</item>
+        <item>@string/show_network_traffic_2000</item>
+    </string-array>
+
+    <string-array name="show_network_traffic_frequency_values" translatable="false">
+        <item>500</item>
+        <item>1000</item>
+        <item>1500</item>
+        <item>2000</item>
+    </string-array>
+
 </resources>
diff --git a/res/values/custom_attrs.xml b/res/values/custom_attrs.xml
index b856986..8364828 100644
--- a/res/values/custom_attrs.xml
+++ b/res/values/custom_attrs.xml
@@ -20,8 +20,9 @@
 
     <declare-styleable name="SeekBarPreference">
         <attr name="min" format="integer" />
-        <attr name="unitsLeft" format="string" />
-        <attr name="unitsRight" format="string" />
+        <attr name="interval" format="integer" />
+        <attr name="unitsLeft" format="string|reference" />
+        <attr name="unitsRight" format="string|reference" />
     </declare-styleable>
 
 </resources>
\ No newline at end of file
diff --git a/res/values/custom_integers.xml b/res/values/custom_integers.xml
new file mode 100644
index 0000000..0b75685
--- /dev/null
+++ b/res/values/custom_integers.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--  Copyright (C) 2013 The OmniROM Project
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ -->
+
+<resources>
+
+    <!-- Overlays for NetworkTraffic to use -->
+    <integer name="maskUp">0x00000001</integer>
+    <integer name="maskDown">0x00000002</integer>
+    <integer name="maskUnit">0x00000004</integer>
+    <integer name="maskPeriod">0xFFFF0000</integer>
+</resources>
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index 4d8b168..a50fd30 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -22,7 +22,7 @@
     <string name="reset">Reset</string>
 
     <string name="bars_and_menus_settings">Bars and menus</string>
-    <string name="active_display_settings">ActiveDisplay</string>
+    <string name="active_display_settings">Active display</string>
     <string name="bars_and_menus_category_status_bar_title">Status bar</string>
     <string name="bars_and_menus_category_navigation_bar_title">Navigation bar</string>
     <string name="status_bar_battery_title">Battery style</string>
@@ -72,6 +72,7 @@
     <string name="notification_light_default_value">Default</string>
     <string name="notification_light_missed_call_title">Missed call</string>
     <string name="notification_light_voicemail_title">Voicemail</string>
+    <string name="notification_light_screen_on_title">Show when screen is on</string>
 
     <!-- Values for the notification light pulse spinners -->
     <string name="pulse_length_always_on">Always on</string>
@@ -147,13 +148,7 @@
     <string name="auto_brightness_menu_remove">Remove</string>
     <string name="sensor_category">Sensor</string>
     <string name="button_timeout_title">Timeout</string>
-    <plurals name="button_timeout_time">
-        <item quantity="one"><xliff:g id="seconds">%d</xliff:g> second</item>
-        <item quantity="other"><xliff:g id="seconds">%d</xliff:g> seconds</item>
-    </plurals>
-    <string name="button_timeout_enabled">Enabled for <xliff:g id="timeout">%s</xliff:g></string>
-    <string name="button_timeout_disabled">Disabled</string>
-    <string name="dialog_button_timeout_title">Button brightness timeout</string>
+    <string name="button_timeout_summary">Disabled on value 0</string>
 
     <!-- button settings -->
     <string name="button_volume_keys_title">Volume</string>
@@ -165,15 +160,25 @@
     <string name="button_headsethook_launch_voice_title">Headset launches voice</string>
     <string name="button_headsethook_launch_voice_summary">Pressing the headset button will launch voice controls</string>
 
-    <!-- Network speed -->
-    <string name="show_network_speed">Network speed indicator</string>
-    <string name="show_network_speed_summary">Show network speed in statusbar</string>
-    <string name="show_network_speed_bits">Show speed as bits per second</string>
-    <string name="show_network_speed_bytes">Show speed as Bytes per second</string>
+    <!-- Network traffic -->
+    <string name="network_traffic_title">Network traffic</string>
+    <string name="show_network_traffic_state">Status bar traffic monitor</string>
+    <string name="show_network_traffic_unit">Display unit</string>
+    <string name="show_network_traffic_frequency">Update interval</string>
+    <string name="show_network_traffic_disable">Disabled</string>
+    <string name="show_network_traffic_up">Outgoing</string>
+    <string name="show_network_traffic_down">Incoming</string>
+    <string name="show_network_traffic_all">Outgoing and incoming</string>
+    <string name="show_network_traffic_bit">Bits per second</string>
+    <string name="show_network_traffic_byte">Bytes per second</string>
+    <string name="show_network_traffic_500">500 ms</string>
+    <string name="show_network_traffic_1000">1000 ms</string>
+    <string name="show_network_traffic_1500">1500 ms</string>
+    <string name="show_network_traffic_2000">2000 ms</string>
 
     <!-- Status Bar Activity Indicators -->
-    <string name="show_activity_indicators_on_status_bar_title">Network activity indicator</string>
-    <string name="show_activity_indicators_on_status_bar_summary">Show network activity in statusbar</string>
+    <string name="show_activity_indicators_on_status_bar_title">Activity indicators</string>
+    <string name="show_activity_indicators_on_status_bar_summary">Show indicators in signal bars</string>
 
     <!-- Hardware keys -->
     <string name="button_keys_title">Keys</string>
@@ -233,31 +238,43 @@
     <string name="ad_enable_title">Enable</string>
     <string name="ad_enable_summary_on">Active display enabled</string>
     <string name="ad_enable_summary_off">Active display disabled</string>
+    <string name="ad_bypass_title">Bypass mode</string>
+    <string name="ad_bypass_summary">Pocket mode will launch the lockscreen when no notifications exist</string>
     <string name="ad_text_title">Notification text</string>
     <string name="ad_text_summary">Show the notification text around the ring</string>
-    <string name="ad_all_notifications_title">All notifications</string>
-    <string name="ad_all_notifications_summary">Show all notifications including ongoing, non-clearable notifications</string>
+    <string name="ad_content_title">Custom notification view</string>
+    <string name="ad_content_summary">Use active display style for notification details</string>
+    <string name="ad_annoying_title">Less frequent notification</string>
+    <string name="ad_annoying_summary">Limit the notification to once per time period</string>
+    <string name="ad_double_tap_title">Double tap to sleep</string>
+    <string name="ad_double_tap_summary">Turn screen off with double tap</string>
+    <string name="ad_wallpaper_title">Wallpaper see through</string>
+    <string name="ad_wallpaper_summary">Show blurred wallpaper behind active display</string>
+    <string name="ad_all_notifications_title">Show ongoing</string>
+    <string name="ad_all_notifications_summary">Show non-clearable notifications</string>
     <string name="ad_hide_low_priority_title">Hide low priority</string>
-    <string name="ad_hide_low_priority_title">Hide low priority</string>
-    <string name="ad_hide_low_priority_summary">Hide low priority notifications such as those from Google Now</string>
+    <string name="ad_hide_low_priority_summary">Hide notifications marked as low priority</string>
     <string name="ad_pocket_mode_title">Pocket mode</string>
-    <string name="ad_pocket_mode_summary">Show active display notifications when you take the device out of your pocket</string>
-    <string name="ad_redisplay_title">Redisplay notifications</string>
+    <string name="ad_pocket_mode_summary">Show pending notifications after taking the device out of your pocket</string>
+    <string name="ad_redisplay_title">Re-display notifications</string>
     <string name="ad_timeout_title">Display timeout</string>
-    <string name="ad_threshold_title">Threshold to proximity</string>
-    <string name="ad_brightness_title">Notification brightness</string>
-    <string name="ad_customizations_title">Customizations</string>
-    <string name="ad_excluded_apps_title">Excluded applications</string>
-    <string name="ad_excluded_apps_summary">Excluded applications will not show up in active display</string>
+    <string name="ad_threshold_title">Proximity time threshold</string>
+    <string name="ad_threshold_summary">Time the proximity sensor must be covered before active display is shown</string>
+    <string name="ad_brightness_title">Display brightness</string>
+    <string name="ad_customizations_title">Advanced settings</string>
+    <string name="ad_excluded_apps_title">Excluded apps</string>
+    <string name="ad_excluded_apps_summary">No notifications will be shown for these apps</string>
+    <string name="ad_privacy_apps_title">Privacy mode</string>
+    <string name="ad_privacy_apps_summary">No details will be shown for notifications from these apps</string>
     <string name="ad_show_date_title">Show date</string>
     <string name="ad_show_ampm_title">Show AM/PM</string>
     <string name="ad_sunlight_mode_title">Sunlight mode</string>
-    <string name="ad_brightness_summary">Brightness level for displaying notifications when automatic brightness is not enabled</string>
+    <string name="ad_brightness_summary">Used on manual brightness control</string>
     <string name="ad_show_date_summary">Show the date above the clock</string>
-    <string name="ad_show_ampm_summary">Show AM/PM indicator next to time when using 12hour format</string>
-    <string name="ad_sunlight_mode_summary">Invert the colors when in areas with bright light such as direct sunlight</string>
-    <string name="ad_turnoff_mode_title">Turn off display</string>
-    <string name="ad_turnoff_mode_summary">Turn off display if the device gets pocketed again and was turned on by active display</string>
+    <string name="ad_show_ampm_summary">Show AM/PM indicator when using the 12-hour time format</string>
+    <string name="ad_sunlight_mode_summary">Invert colors in bright environment</string>
+    <string name="ad_turnoff_mode_title">Auto-sleep</string>
+    <string name="ad_turnoff_mode_summary">Put to sleep after woken by pocket mode and returned to the pocket</string>
     <string name="ad_redisplay_never">Never</string>
     <string name="ad_redisplay_1m">1 minute</string>
     <string name="ad_redisplay_5m">5 minutes</string>
@@ -281,7 +298,8 @@
     <string name="ad_pocket_mode_off">Off</string>
     <string name="ad_pocket_mode_notifications">Notifications only</string>
     <string name="ad_pocket_mode_always">Always</string>
-    <string name="bars_and_menus_category_recent_panel_title" >Recents view</string>
+
+    <string name="bars_and_menus_category_recent_panel_title">Recents view</string>
 
     <!-- Recents clear all -->
     <string name="show_recent_clear_all_button_title">Clear all button</string>
@@ -339,12 +357,6 @@
     <string name="navring_choose_action_title">Choose action</string>
     <string name="navring_action_last_app">Switch to last app</string>
 
-    <!-- String for IconPicker -->
-    <string name="icon_picker_title">Choose icon source</string>
-    <string name="icon_picker_system_icons_title">System icons</string>
-    <string name="icon_picker_gallery_title">Gallery</string>
-    <string name="icon_picker_pack_title">Icon pack</string>
-
     <!-- Lock Screen Shortcuts -->
     <string name="lockscreen_target_info">Drag the slider to targets to assign shortcuts</string>
     <string name="lockscreen_target_title">Slider shortcuts</string>
@@ -385,24 +397,26 @@
     <string name="icon_picker_sms">Messaging</string>
     <string name="icon_picker_twitter">Twitter</string>
 
+    <string name="quick_settings_category_title">Quick settings</string>
+
     <!-- QuickSettings: Dynamic Row -->
-    <string name="qs_configurable_title">QuickSettings configurable</string>
+    <string name="qs_configurable_title">Quick settings configurable</string>
     <string name="qs_configurable_summary">Enable/disable dynamic row changes</string>
 
     <!-- QuickSettings: Quick Pulldown -->
     <string name="title_quick_pulldown">Quick pulldown</string>
-    <string name="summary_quick_pulldown">Quickly pulldown quicksettings with one finger</string>
-    <string name="quick_pulldown_off">Off</string>
+    <string name="summary_quick_pulldown">Quickly pulldown quick settings with one finger</string>
+    <string name="quick_pulldown_off">Disabled</string>
     <string name="quick_pulldown_centre">Centre</string>
     <string name="quick_pulldown_left">Left</string>
     <string name="quick_pulldown_right">Right</string>
 
     <!-- QuickSettings: Smart Pulldown -->
     <string name="smart_pulldown_title">Smart pulldown</string>
-    <string name="smart_pulldown_summary">Open Quick Settings when there are no notifications present</string>
-    <string name="smart_pulldown_off">Off</string>
-    <string name="smart_pulldown_dismissable">Pulldown if there are no cleareable notifications</string>
-    <string name="smart_pulldown_persistent">Pulldown if there are no notifications</string>
+    <string name="smart_pulldown_summary">Open quick settings when there are no notifications present</string>
+    <string name="smart_pulldown_off">Disabled</string>
+    <string name="smart_pulldown_dismissable">If no cleareable notifications</string>
+    <string name="smart_pulldown_persistent">If no notifications</string>
 
     <!-- Cursor control -->
     <string name="volume_key_cursor_control_title">Cursor control</string>
@@ -416,4 +430,83 @@
     <!-- navigation bar -->
     <string name="soft_back_kill_app_title">Long press back to kill app</string>
     <string name="soft_back_kill_app_summary">Long pressing back button will kill foreground app</string>
+
+    <!-- Sound themes -->
+    <string name="sound_packages_title">Sound packs</string>
+    <string name="install_sound_pack_title">Install sound pack</string>
+    <string name="install_sound_pack_summary">Install new sound packs added in SoundPacks folder on the internal storage</string>
+    <string name="select_sound_pack_title">Select sound pack</string>
+    <string name="select_sound_pack_summary">Select the active sound pack</string>
+    <string name="default_sound_pack">Default (System)</string>
+    <string name="error_pack_install">Error while installing the sound pack</string>
+
+    <string name="omniswitch_category">OmniSwitch</string>
+    <string name="recents_use_omniswitch_title">Use for recents</string>
+    <string name="recents_use_omniswitch_summary">Use OmniSwitch instead of default recents view</string>
+    <string name="omniswitch_start_settings_title">Settings</string>
+    <string name="omniswitch_start_settings_summary">Open OmniSwitch settings</string>
+    <string name="omniswitch_not_installed_title">Warning</string>
+    <string name="omniswitch_not_installed_summary">OmniSwitch is not installed</string>
+    <string name="omniswitch_not_installed_message">OmniSwitch is not installed</string>
+    <string name="omniswitch_first_time_title">Information</string>
+    <string name="omniswitch_first_time_message">Make sure you have enabled OmniSwitch. You can do this by using \"Settings\" below</string>
+
+    <string name="emulate_menu_key_title">Emulate hardware menu key</string>
+    <string name="emulate_menu_key_summary">Force hide the three-dot overflow menu in applications. Require restart of application</string>
+
+    <string name="force_show_overflow_menu_title">Show overflow menu</string>
+    <string name="force_show_overflow_menu_summary">Force show the three-dot overflow menu in applications. Require restart of application</string>
+
+    <!-- Clock -->
+    <string name="status_bar_clock">Clock and date</string>
+    <string name="status_bar_clock_title">Clock and date style</string>
+    <string name="clock_title_enable">Alignment</string>
+    <string name="clock_enabled">Enabled</string>
+    <string name="clock_disabled">Disabled</string>
+    <string name="clock_color_title">Color</string>
+    <string name="status_bar_clock_style_reset">Reset color</string>
+    <string name="status_bar_show_clock_title">Show clock and date</string>
+    <string name="status_bar_am_pm_title">AM/PM</string>
+    <string name="status_bar_am_pm_info">24-hour clock is enabled</string>
+    <string name="enable_clock_weekday">Day of the week</string>
+    <string name="enable_clock_weekday_summary">Abbreviated day of the week before the time</string>
+    <string name="right_clock">Right clock</string>
+    <string name="center_clock">Center clock</string>
+    <string name="dont_show">Don\'t show</string>
+    <string name="clock_date_display">Date</string>
+    <string name="clock_date_display_summary">Display custom date before the clock</string>
+    <string name="clock_date_style">Date style</string>
+    <string name="clock_date_format">Date format</string>
+    <string name="am_pm_clock_normal">Normal font size</string>
+    <string name="am_pm_clock_small">Small font size</string>
+    <string name="am_pm_clock_none">Don\'t show</string>
+    <string name="clock_date_display_none">Don\'t show</string>
+    <string name="clock_date_display_small">Small font size</string>
+    <string name="clock_date_display_normal">Normal font size</string>
+    <string name="clock_date_style_normal">Normal</string>
+    <string name="clock_date_style_lowercase">Lowercase</string>
+    <string name="clock_date_style_uppercase">Uppercase</string>
+
+    <!-- Lockscreen battery ring -->
+    <string name="battery_around_lockscreen_ring">Battery around unlock ring</string>
+
+    <!-- Lockscreen -->
+    <string name="category_widgets_title">Widgets</string>
+    <string name="category_privacy_title">Privacy</string>
+    <string name="category_background_title">Background</string>
+    <string name="more_settings_title">More</string>
+
+    <!-- Widgets-->
+    <string name="maximize_widgets_title">Maximize</string>
+    <string name="enable_camera_title">Camera</string>
+    <string name="enable_camera_summary">Enable camera widget</string>
+
+    <!-- Privacy -->
+    <string name="enable_power_menu_title">Power menu</string>
+    <string name="enable_power_menu_summary">Enable power menu</string>
+
+    <!-- Background -->
+    <string name="see_through_title">See through</string>
+    <string name="see_through_summary">Show content behind lock screen. Data may be visible to those around you</string>
+
 </resources>
diff --git a/res/xml/active_display_settings.xml b/res/xml/active_display_settings.xml
index cc5945b..ddbb5c5 100644
--- a/res/xml/active_display_settings.xml
+++ b/res/xml/active_display_settings.xml
@@ -24,23 +24,27 @@
         android:summaryOff="@string/ad_enable_summary_off"
         android:summaryOn="@string/ad_enable_summary_on" />
 
-    <CheckBoxPreference
-        android:key="ad_text"
-        android:persistent="false"
+    <org.omnirom.omnigears.preference.SystemCheckBoxPreference
+        android:key="active_display_content"
+        android:defaultValue="true"
+        android:title="@string/ad_content_title"
+        android:summary="@string/ad_content_summary"
+        android:dependency="ad_enable"/>
+
+    <org.omnirom.omnigears.preference.SystemCheckBoxPreference
+        android:key="active_display_text"
         android:title="@string/ad_text_title"
         android:summary="@string/ad_text_summary"
         android:dependency="ad_enable"/>
 
-    <CheckBoxPreference
-        android:key="ad_all_notifications"
-        android:persistent="false"
+    <org.omnirom.omnigears.preference.SystemCheckBoxPreference
+        android:key="active_display_all_notifications"
         android:title="@string/ad_all_notifications_title"
         android:summary="@string/ad_all_notifications_summary"
         android:dependency="ad_enable"/>
 
-    <CheckBoxPreference
-        android:key="ad_hide_low_priority"
-        android:persistent="false"
+    <org.omnirom.omnigears.preference.SystemCheckBoxPreference
+        android:key="active_display_hide_low_priority_notifications"
         android:title="@string/ad_hide_low_priority_title"
         android:summary="@string/ad_hide_low_priority_summary"
         android:dependency="ad_enable"/>
@@ -55,6 +59,13 @@
         android:dependency="ad_enable"/>
 
     <CheckBoxPreference
+        android:key="ad_bypass"
+        android:persistent="false"
+        android:title="@string/ad_bypass_title"
+        android:summary="@string/ad_bypass_summary"
+        android:dependency="ad_enable"/>
+
+    <CheckBoxPreference
         android:key="ad_sunlight_mode"
         android:persistent="false"
         android:title="@string/ad_sunlight_mode_title"
@@ -70,20 +81,37 @@
         android:entryValues="@array/ad_redisplay_values"
         android:dependency="ad_enable"/>
 
+    <org.omnirom.omnigears.chameleonos.SeekBarPreference
+        android:key="ad_annoying"
+        android:persistent="false"
+        android:title="@string/ad_annoying_title"
+        android:summary="@string/ad_annoying_summary"
+        android:max="60"
+        settings:min="0"
+        settings:interval="1"
+        settings:unitsLeft=""
+        settings:unitsRight="s"
+        android:dependency="ad_enable" />
+
     <PreferenceCategory
         android:key="ad_customizations"
         android:title="@string/ad_customizations_title" />
 
-        <org.omnirom.omnigears.chameleonos.AppMultiSelectListPreference
-            android:key="ad_excluded_apps"
-            android:persistent="false"
-            android:title="@string/ad_excluded_apps_title"
-            android:summary="@string/ad_excluded_apps_summary"
-            android:dependency="ad_enable" />
+        <org.omnirom.omnigears.preference.SystemCheckBoxPreference
+            android:key="active_display_wallpaper"
+            android:title="@string/ad_wallpaper_title"
+            android:summary="@string/ad_wallpaper_summary"
+            android:dependency="ad_enable"/>
 
-        <CheckBoxPreference
-            android:key="ad_show_date"
-            android:persistent="false"
+        <org.omnirom.omnigears.preference.SystemCheckBoxPreference
+            android:key="active_display_double_tap"
+            android:title="@string/ad_double_tap_title"
+            android:summary="@string/ad_double_tap_summary"
+            android:dependency="ad_enable"/>
+
+        <org.omnirom.omnigears.preference.SystemCheckBoxPreference
+            android:key="active_display_show_date"
+            android:defaultValue="true"
             android:title="@string/ad_show_date_title"
             android:summary="@string/ad_show_date_summary"
             android:dependency="ad_enable"/>
@@ -95,6 +123,20 @@
             android:summary="@string/ad_show_ampm_summary"
             android:dependency="ad_enable"/>
 
+        <org.omnirom.omnigears.chameleonos.AppMultiSelectListPreference
+            android:key="ad_excluded_apps"
+            android:persistent="false"
+            android:title="@string/ad_excluded_apps_title"
+            android:summary="@string/ad_excluded_apps_summary"
+            android:dependency="ad_enable" />
+
+        <org.omnirom.omnigears.chameleonos.AppMultiSelectListPreference
+            android:key="ad_privacy_apps"
+            android:persistent="false"
+            android:title="@string/ad_privacy_apps_title"
+            android:summary="@string/ad_privacy_apps_summary"
+            android:dependency="ad_enable" />
+
         <CheckBoxPreference
             android:key="ad_turnoff_mode"
             android:persistent="true"
@@ -106,6 +148,7 @@
             android:key="ad_threshold"
             android:persistent="false"
             android:dialogTitle="@string/ad_threshold_title"
+            android:summary="@string/ad_threshold_summary"
             android:title="@string/ad_threshold_title"
             android:entries="@array/ad_threshold_entries"
             android:entryValues="@array/ad_threshold_values"
@@ -125,11 +168,8 @@
             android:persistent="false"
             android:title="@string/ad_brightness_title"
             android:summary="@string/ad_brightness_summary"
-            android:max="100"
-            settings:min="0"
             settings:unitsLeft=""
             settings:unitsRight="%"
-            android:defaultValue="100"
             android:dependency="ad_enable" />
 
 </PreferenceScreen>
diff --git a/res/xml/bars_settings.xml b/res/xml/bars_settings.xml
index 2b19990..f99a5f2 100644
--- a/res/xml/bars_settings.xml
+++ b/res/xml/bars_settings.xml
@@ -37,17 +37,16 @@
                 android:summary="@string/status_bar_notif_count_summary"
                 android:persistent="false"/>
 
-        <CheckBoxPreference
-                android:key="status_bar_traffic"
-                android:title="@string/show_network_speed"
-                android:summary="@string/show_network_speed_summary"
-                android:persistent="false" />
+        <PreferenceScreen
+                android:fragment="org.omnirom.omnigears.slim.StatusBarClockStyle"
+                android:key="clock_style_pref"
+                android:title="@string/status_bar_clock" />
 
-        <CheckBoxPreference
-                android:key="status_bar_network_activity"
-                android:title="@string/show_activity_indicators_on_status_bar_title"
-                android:summary="@string/show_activity_indicators_on_status_bar_summary"
-                android:persistent="false"/>
+    </PreferenceCategory>
+
+    <PreferenceCategory
+            android:key="category_quick_settings"
+            android:title="@string/quick_settings_category_title">
 
         <ListPreference
                 android:key="quick_pulldown"
@@ -73,6 +72,40 @@
 
     </PreferenceCategory>
 
+    <!-- Network traffic meter -->
+    <PreferenceCategory
+            android:key="category_network_traffic"
+            android:title="@string/network_traffic_title">
+
+        <CheckBoxPreference
+                android:key="status_bar_network_activity"
+                android:title="@string/show_activity_indicators_on_status_bar_title"
+                android:summary="@string/show_activity_indicators_on_status_bar_summary"
+                android:persistent="false"/>
+
+        <ListPreference
+                android:key="network_traffic_state"
+                android:title="@string/show_network_traffic_state"
+                android:entries="@array/show_network_traffic_state_entries"
+                android:entryValues="@array/show_network_traffic_state_values"
+                android:persistent="false" />
+
+        <ListPreference
+                android:key="network_traffic_unit"
+                android:title="@string/show_network_traffic_unit"
+                android:entries="@array/show_network_traffic_unit_entries"
+                android:entryValues="@array/show_network_traffic_unit_values"
+                android:persistent="false" />
+
+        <ListPreference
+                android:key="network_traffic_period"
+                android:title="@string/show_network_traffic_frequency"
+                android:entries="@array/show_network_traffic_frequency_entries"
+                android:entryValues="@array/show_network_traffic_frequency_values"
+                android:persistent="false" />
+
+    </PreferenceCategory>
+
     <!-- Navigation bar -->
     <PreferenceCategory
             android:key="category_navigation_bar"
@@ -92,5 +125,11 @@
             android:title="@string/soft_back_kill_app_title"
             android:summary="@string/soft_back_kill_app_summary"
             android:persistent="false"/>
+
+        <CheckBoxPreference
+            android:key="emulate_menu_key"
+            android:title="@string/emulate_menu_key_title"
+            android:summary="@string/emulate_menu_key_summary"
+            android:persistent="false"/>
     </PreferenceCategory>
 </PreferenceScreen>
diff --git a/res/xml/brightness_settings.xml b/res/xml/brightness_settings.xml
index a71d04c..6c8d0a7 100644
--- a/res/xml/brightness_settings.xml
+++ b/res/xml/brightness_settings.xml
@@ -56,10 +56,15 @@
                         android:title="@string/button_link_brightness"
                         android:summary="@string/button_link_brightness_summary"
                         android:persistent="false"/>
-                <Preference
+                <org.omnirom.omnigears.chameleonos.SeekBarPreference
                         android:key="button_timeout"
-                        android:title="@string/button_timeout_title" />
-
+                        android:title="@string/button_timeout_title"
+                        android:summary="@string/button_timeout_summary"
+                        android:max="30"
+                        settings:min="0"
+                        settings:unitsLeft=""
+                        settings:unitsRight="@string/unit_sec"
+                        android:persistent="false" />
         </PreferenceCategory>
 
         <PreferenceCategory
diff --git a/res/xml/button_settings.xml b/res/xml/button_settings.xml
index ea9a9f9..8e3b781 100644
--- a/res/xml/button_settings.xml
+++ b/res/xml/button_settings.xml
@@ -75,6 +75,12 @@
             android:summary="@string/virtual_key_haptic_feedback_summary"
             android:persistent="false"/>
 
+        <CheckBoxPreference
+            android:key="force_show_overflow_menu"
+            android:title="@string/force_show_overflow_menu_title"
+            android:summary="@string/force_show_overflow_menu_summary"
+            android:persistent="false"/>
+
         <SwitchPreference
             android:key="keys_enable_custom"
             android:title="@string/keys_enable_custom_title"
diff --git a/res/xml/lockscreen_settings.xml b/res/xml/lockscreen_settings.xml
new file mode 100644
index 0000000..79e30d1
--- /dev/null
+++ b/res/xml/lockscreen_settings.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--  Copyright (C) 2013 The OmniROM Project
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ -->
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+        android:key="lockscreen_settings"
+        android:title="@string/lockscreen_settings_title"
+        xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
+
+    <PreferenceCategory
+            android:key="category_widgets"
+            android:title="@string/category_widgets_title"/>
+
+            <CheckBoxPreference
+                    android:key="maximize_widgets"
+                    android:title="@string/maximize_widgets_title"
+                    android:persistent="false"/>
+
+            <CheckBoxPreference
+                    android:key="enable_camera"
+                    android:title="@string/enable_camera_title"
+                    android:summary="@string/enable_camera_summary"
+                    android:persistent="false"/>
+
+    <PreferenceCategory
+            android:key="category_privacy"
+            android:title="@string/category_privacy_title"/>
+
+            <org.omnirom.omnigears.preference.SystemCheckBoxPreference
+                    android:key="lockscreen_enable_power_menu"
+                    android:title="@string/enable_power_menu_title"
+                    android:summary="@string/enable_power_menu_summary"
+                    android:defaultValue="true" />
+
+    <PreferenceCategory
+            android:key="category_background"
+            android:title="@string/category_background_title"/>
+
+            <org.omnirom.omnigears.preference.SystemCheckBoxPreference
+                    android:key="lockscreen_see_through"
+                    android:title="@string/see_through_title"
+                    android:summary="@string/see_through_summary"
+                    android:defaultValue="false" />
+
+</PreferenceScreen>
diff --git a/res/xml/more_interface_settings.xml b/res/xml/more_interface_settings.xml
index d17361b..5f82d68 100644
--- a/res/xml/more_interface_settings.xml
+++ b/res/xml/more_interface_settings.xml
@@ -57,4 +57,20 @@
             android:dependency="show_recents_memory_indicator" 
             android:persistent="false" />
 
+    <PreferenceCategory
+            android:key="category_omniswitch"
+            android:title="@string/omniswitch_category"/>
+
+    <CheckBoxPreference
+            android:key="recents_use_omniswitch"
+            android:title="@string/recents_use_omniswitch_title"
+            android:summary="@string/recents_use_omniswitch_summary"
+            android:persistent="false" />
+
+    <Preference
+            android:key="omniswitch_start_settings"
+            android:title="@string/omniswitch_start_settings_title"
+            android:summary="@string/omniswitch_start_settings_summary"
+            android:persistent="false" />
+
 </PreferenceScreen>
diff --git a/res/xml/notification_light_settings.xml b/res/xml/notification_light_settings.xml
index 65df028..f38f4f0 100644
--- a/res/xml/notification_light_settings.xml
+++ b/res/xml/notification_light_settings.xml
@@ -26,6 +26,11 @@
         android:key="general_section"
         android:title="@string/notification_light_general_title">
 
+        <CheckBoxPreference
+            android:key="notification_light_screen_on"
+            android:title="@string/notification_light_screen_on_title"
+            android:persistent="false" />
+
         <org.omnirom.omnigears.notificationlight.ApplicationLightPreference
             android:key="default"
             android:title="@string/notification_light_default_value"
diff --git a/res/xml/og_security_settings_chooser.xml b/res/xml/og_security_settings_chooser.xml
new file mode 100644
index 0000000..662f7e2
--- /dev/null
+++ b/res/xml/og_security_settings_chooser.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <PreferenceCategory
+        android:key="og_security_category"
+        android:title="@string/more_settings_title">
+
+        <CheckBoxPreference
+            android:key="battery_around_lockscreen_ring"
+            android:title="@string/battery_around_lockscreen_ring"
+            android:persistent="false"/>
+
+        <Preference
+            android:fragment="org.omnirom.omnigears.interfacesettings.LockscreenTargets"
+            android:key="lockscreen_targets"
+            android:summary="@string/lockscreen_target_summary"
+            android:title="@string/lockscreen_target_title" />
+
+    </PreferenceCategory>
+
+</PreferenceScreen>
diff --git a/res/xml/sound_package_settings.xml b/res/xml/sound_package_settings.xml
new file mode 100644
index 0000000..5adc37a
--- /dev/null
+++ b/res/xml/sound_package_settings.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--  Copyright (C) 2014 The OmniROM Project
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ -->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+        android:key="sound_packages"
+        android:title="@string/sound_packages_title"
+        xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
+
+    <ListPreference
+            android:key="install_sound_pack"
+            android:title="@string/install_sound_pack_title"
+            android:summary="@string/install_sound_pack_summary"
+            android:persistent="false"/>
+
+    <ListPreference
+            android:key="select_sound_pack"
+            android:title="@string/select_sound_pack_title"
+            android:summary="@string/select_sound_pack_summary"
+            android:persistent="false" />
+
+</PreferenceScreen>
diff --git a/res/xml/status_bar_clock_style.xml b/res/xml/status_bar_clock_style.xml
new file mode 100644
index 0000000..28f9062
--- /dev/null
+++ b/res/xml/status_bar_clock_style.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2013 SlimRoms Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<PreferenceScreen
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:title="@string/status_bar_clock_title">
+
+       <CheckBoxPreference
+            android:key="status_bar_show_clock"
+            android:title="@string/status_bar_show_clock_title"
+            android:defaultValue="true"
+            android:persistent="false"/>
+
+        <ListPreference
+            android:key="clock_style"
+            android:entries="@array/clock_style_entries"
+            android:entryValues="@array/clock_style_values"
+            android:title="@string/clock_title_enable"
+            android:dependency="status_bar_show_clock"
+            android:persistent="false"/>
+
+        <ListPreference
+            android:key="status_bar_am_pm"
+            android:dialogTitle="@string/status_bar_am_pm_title"
+            android:title="@string/status_bar_am_pm_title"
+            android:entries="@array/entries_status_bar_am_pm"
+            android:entryValues="@array/values_status_bar_am_pm"
+            android:dependency="status_bar_show_clock"
+            android:persistent="false"/>
+
+        <ListPreference
+            android:key="clock_date_display"
+            android:title="@string/clock_date_display"
+            android:summary="@string/clock_date_display_summary"
+            android:entries="@array/clock_date_display_entries"
+            android:entryValues="@array/clock_date_display_values"
+            android:dependency="status_bar_show_clock"
+            android:persistent="false"/>
+
+        <ListPreference
+            android:key="clock_date_style"
+            android:title="@string/clock_date_style"
+            android:entries="@array/clock_date_style_entries"
+            android:entryValues="@array/clock_date_style_values"
+            android:dependency="status_bar_show_clock"
+            android:persistent="false"/>
+
+        <ListPreference
+            android:key="clock_date_format"
+            android:title="@string/clock_date_format"
+            android:entries="@array/clock_date_format_entries_values"
+            android:entryValues="@array/clock_date_format_entries_values"
+            android:dependency="status_bar_show_clock"
+            android:persistent="false"/>
+
+</PreferenceScreen>
diff --git a/src/org/omnirom/omnigears/ButtonSettings.java b/src/org/omnirom/omnigears/ButtonSettings.java
index 2ec08ef..3fd001a 100644
--- a/src/org/omnirom/omnigears/ButtonSettings.java
+++ b/src/org/omnirom/omnigears/ButtonSettings.java
@@ -92,6 +92,7 @@
     private static final String KEYS_APP_SWITCH_PRESS = "keys_app_switch_press";
     private static final String KEYS_APP_SWITCH_LONG_PRESS = "keys_app_switch_long_press";
     private static final String VIRTUAL_KEY_HAPTIC_FEEDBACK = "virtual_key_haptic_feedback";
+    private static final String FORCE_SHOW_OVERFLOW_MENU = "force_show_overflow_menu";
 
     // Available custom actions to perform on a key press.
     private static final int ACTION_NOTHING = 0;
@@ -133,6 +134,7 @@
     private ListPreference mVolumeDefault;
     private CheckBoxPreference mHeadsetHookLaunchVoice;
     private CheckBoxPreference mVirtualKeyHapticFeedback;
+    private CheckBoxPreference mForceShowOverflowMenu;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -156,16 +158,14 @@
                 mVolumeWake.setChecked(Settings.System.getInt(resolver,
                     Settings.System.VOLUME_WAKE_SCREEN, 0) != 0);
             }
-            String currentDefault = Settings.System.getString(resolver, Settings.System.VOLUME_KEYS_DEFAULT);
+            int currentDefault = Settings.System.getInt(resolver, Settings.System.VOLUME_KEYS_DEFAULT,
+                    Utils.isVoiceCapable(getActivity()) ? AudioSystem.STREAM_RING : AudioSystem.STREAM_MUSIC);
 
             if (!Utils.isVoiceCapable(getActivity())) {
-                removeListEntry(mVolumeDefault, String.valueOf(AudioSystem.STREAM_RING));
+                removeListEntry(mVolumeDefault, Integer.toString(AudioSystem.STREAM_RING));
             }
 
-            if (currentDefault == null) {
-                currentDefault = mVolumeDefault.getEntryValues()[mVolumeDefault.getEntryValues().length - 1].toString();
-            }
-            mVolumeDefault.setValue(currentDefault);
+            mVolumeDefault.setValue(Integer.toString(currentDefault));
             mVolumeDefault.setOnPreferenceChangeListener(this);
 
             mVolumeMusicControl = (CheckBoxPreference) findPreference(BUTTON_VOLUME_MUSIC_CONTROL);
@@ -239,6 +239,8 @@
                     KEYS_APP_SWITCH_LONG_PRESS);
             mVirtualKeyHapticFeedback = (CheckBoxPreference) prefScreen.findPreference(
                     VIRTUAL_KEY_HAPTIC_FEEDBACK);
+            mForceShowOverflowMenu = (CheckBoxPreference) prefScreen.findPreference(
+                    FORCE_SHOW_OVERFLOW_MENU);
 
             if (hasBackKey) {
                 int backPressAction = Settings.System.getInt(resolver,
@@ -391,6 +393,11 @@
                 mVirtualKeyHapticFeedback.setChecked(Settings.System.getInt(resolver,
                         Settings.System.VIRTUAL_KEYS_HAPTIC_FEEDBACK, 1) == 1);
             }
+
+            boolean hasNavBar = getResources().getBoolean(
+                com.android.internal.R.bool.config_showNavigationBar);
+            mForceShowOverflowMenu.setChecked(Settings.System.getInt(resolver,
+                        Settings.System.FORCE_SHOW_OVERFLOW_MENU, (!hasNavBar && hasMenuKey) ? 0 : 1) == 1);
         }
 
         final PreferenceCategory headsethookCategory =
@@ -425,6 +432,11 @@
             Settings.System.putInt(getActivity().getContentResolver(),
                     Settings.System.VOLUME_MUSIC_CONTROL, checked ? 1:0);
             return true;
+        } else if (preference == mForceShowOverflowMenu){
+            boolean checked = ((CheckBoxPreference)preference).isChecked();
+            Settings.System.putInt(getContentResolver(),
+                    Settings.System.FORCE_SHOW_OVERFLOW_MENU, checked ? 1:0);
+            return true;
         }
 
         return super.onPreferenceTreeClick(preferenceScreen, preference);
@@ -555,8 +567,8 @@
             checkForHomeKey();
             return true;
         } else if (preference == mVolumeDefault) {
-            String value = (String)newValue;
-            Settings.System.putString(getContentResolver(), Settings.System.VOLUME_KEYS_DEFAULT, value);
+            int value = Integer.valueOf((String) newValue);
+            Settings.System.putInt(getContentResolver(), Settings.System.VOLUME_KEYS_DEFAULT, value);
             return true;
         }
         return false;
diff --git a/src/org/omnirom/omnigears/batterylight/BatteryLightSettings.java b/src/org/omnirom/omnigears/batterylight/BatteryLightSettings.java
index 45e60b1..0944568 100644
--- a/src/org/omnirom/omnigears/batterylight/BatteryLightSettings.java
+++ b/src/org/omnirom/omnigears/batterylight/BatteryLightSettings.java
@@ -153,7 +153,7 @@
         }
     }
 
-    @Override
+    /*@Override
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
         menu.add(0, MENU_RESET, 0, R.string.reset)
                 .setIcon(R.drawable.ic_settings_backup) // use the backup icon
@@ -185,7 +185,7 @@
         Settings.System.putInt(resolver, Settings.System.BATTERY_LIGHT_REALLY_FULL_COLOR,
                 res.getInteger(com.android.internal.R.integer.config_notificationsBatteryFullARGB));
         refreshDefault();
-    }
+    }*/
 
     @Override
     public boolean onPreferenceChange(Preference preference, Object objValue) {
diff --git a/src/org/omnirom/omnigears/brightness/BrightnessSettings.java b/src/org/omnirom/omnigears/brightness/BrightnessSettings.java
index ab16257..1283f27 100644
--- a/src/org/omnirom/omnigears/brightness/BrightnessSettings.java
+++ b/src/org/omnirom/omnigears/brightness/BrightnessSettings.java
@@ -46,6 +46,7 @@
 import android.widget.TextView;
 
 import org.omnirom.omnigears.R;
+import org.omnirom.omnigears.chameleonos.SeekBarPreference;
 
 public class BrightnessSettings extends SettingsPreferenceFragment implements
         Preference.OnPreferenceChangeListener {
@@ -71,8 +72,7 @@
     private ManualButtonBrightnessDialog mManualBrightnessDialog;
     private boolean mButtonBrightnessSupport;
     private IPowerManager mPowerService;
-    private ButtonTimeoutDialog mButtonTimeoutDialog;
-    private Preference mButtonTimout;
+    private SeekBarPreference mButtonTimoutBar;
 
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -107,11 +107,12 @@
 
             mAutomaticButtonBrightness = (Preference) findPreference(KEY_BUTTON_AUTO_BRIGHTNESS);
             mManualButtonBrightness = (Preference) findPreference(KEY_BUTTON_MANUAL_BRIGHTNESS);
-            mButtonTimout = (Preference) findPreference(KEY_BUTTON_TIMEOUT);
 
-            // to set initial summary
-            mButtonTimeoutDialog = new ButtonTimeoutDialog(getActivity());
-            mButtonTimeoutDialog.updateSummary();
+            mButtonTimoutBar = (SeekBarPreference) findPreference(KEY_BUTTON_TIMEOUT);
+            int currentTimeout = Settings.System.getInt(resolver,
+                            Settings.System.BUTTON_BACKLIGHT_TIMEOUT, 0);
+            mButtonTimoutBar.setValue(currentTimeout);
+            mButtonTimoutBar.setOnPreferenceChangeListener(this);
 
             mPowerService = IPowerManager.Stub.asInterface(ServiceManager.getService("power"));
 
@@ -123,7 +124,7 @@
         if (mButtonBrightnessSupport){
             if (mNoButtonBrightness.isChecked()){
                 mLinkButtonBrightness.setEnabled(false);
-                mButtonTimout.setEnabled(false);
+                mButtonTimoutBar.setEnabled(false);
                 mAutomaticButtonBrightness.setEnabled(false);
                 mManualButtonBrightness.setEnabled(false);
             } else if (mLinkButtonBrightness.isChecked()){
@@ -133,7 +134,7 @@
             } else {
                 mNoButtonBrightness.setEnabled(true);
                 mLinkButtonBrightness.setEnabled(true);
-                mButtonTimout.setEnabled(true);
+                mButtonTimoutBar.setEnabled(true);
                 mAutomaticButtonBrightness.setEnabled(true);
                 mManualButtonBrightness.setEnabled(true);
             }
@@ -158,9 +159,6 @@
         if (mManualBrightnessDialog != null) {
             mManualBrightnessDialog.dismiss();
         }
-        if (mButtonTimeoutDialog != null) {
-            mButtonTimeoutDialog.dismiss();
-        }
     }
 
     @Override
@@ -171,8 +169,6 @@
             showButtonAutoBrightnessDialog();
         } else if (preference == mManualButtonBrightness) {
             showButtonManualBrightnessDialog();
-        } else if (preference == mButtonTimout) {
-            showButtonTimoutDialog();
         } else if (preference == mNoButtonBrightness) {
             boolean checked = ((CheckBoxPreference)preference).isChecked();
             Settings.System.putInt(getActivity().getContentResolver(),
@@ -201,6 +197,10 @@
                         Settings.System.AUTO_BRIGHTNESS_RESPONSIVENESS, sensitivity);
 
             updateAutomaticSensityDescription(value);
+        } else if (preference == mButtonTimoutBar) {
+            int buttonTimeout = (Integer) objValue;
+            Settings.System.putInt(getContentResolver(),
+                    Settings.System.BUTTON_BACKLIGHT_TIMEOUT, buttonTimeout);
         } else {
             return false;
         }
@@ -238,14 +238,6 @@
         mButtonBrightnessDialog.show();
     }
 
-    private void showButtonTimoutDialog() {
-        if (mButtonTimeoutDialog.isShowing()) {
-            return;
-        }
-
-        mButtonTimeoutDialog.show();
-    }
-
     private void showButtonManualBrightnessDialog() {
         if (mManualBrightnessDialog != null && mManualBrightnessDialog.isShowing()) {
             return;
@@ -386,100 +378,5 @@
             });
         }
     }
-    private class ButtonTimeoutDialog extends AlertDialog implements DialogInterface.OnClickListener {
-        private SeekBar mTimeoutBar;
-        private TextView mTimeoutValue;
-        private int mCurrentTimeout;
-        private boolean mIsDragging = false;
-
-        public ButtonTimeoutDialog(Context context) {
-            super(context);
-
-            // to allow initial summary setting
-            mCurrentTimeout = Settings.System.getInt(getContext().getContentResolver(),
-                            Settings.System.BUTTON_BACKLIGHT_TIMEOUT, 0);
-        }
-
-        @Override
-        protected void onCreate(Bundle savedInstanceState) {
-            final View v = getLayoutInflater().inflate(R.layout.button_timeout, null);
-            final Context context = getContext();
-
-            mTimeoutBar = (SeekBar) v.findViewById(R.id.timeout_seekbar);
-            mTimeoutValue = (TextView) v.findViewById(R.id.timeout_value);
-            mTimeoutBar.setMax(30);
-
-            setTitle(R.string.dialog_button_timeout_title);
-            setCancelable(true);
-            setView(v);
-
-            initListeners();
-            init();
-
-            setButton(DialogInterface.BUTTON_POSITIVE, context.getString(R.string.ok), this);
-            setButton(DialogInterface.BUTTON_NEGATIVE, context.getString(R.string.cancel), this);
-
-            super.onCreate(savedInstanceState);
-        }
-
-        private void init() {
-            mCurrentTimeout = Settings.System.getInt(getContext().getContentResolver(),
-                            Settings.System.BUTTON_BACKLIGHT_TIMEOUT, 0);
-
-            mTimeoutBar.setProgress(mCurrentTimeout);
-            mTimeoutValue.setText(getTimeoutString());
-        }
-
-        @Override
-        public void onClick(DialogInterface dialog, int which) {
-            if (which == DialogInterface.BUTTON_POSITIVE) {
-                try {
-                    Settings.System.putInt(getContext().getContentResolver(),
-                            Settings.System.BUTTON_BACKLIGHT_TIMEOUT, mCurrentTimeout);
-                    updateSummary();
-                } catch (NumberFormatException e) {
-                    Log.d(TAG, "NumberFormatException " + e);
-                }
-            }
-        }
-
-        private void updateSummary() {
-            if (mCurrentTimeout == 0) {
-                mButtonTimout.setSummary(R.string.button_timeout_disabled);
-            } else {
-                mButtonTimout.setSummary(getContext().getString(R.string.button_timeout_enabled,
-                            getTimeoutString()));
-            }
-        }
-
-        private String getTimeoutString() {
-            if (mCurrentTimeout == 0) {
-                return getContext().getResources().getString(R.string.button_timeout_disabled);
-            } else {
-                return getContext().getResources().getQuantityString(
-                    R.plurals.button_timeout_time, mCurrentTimeout, mCurrentTimeout);
-            }
-        }
-
-        private void initListeners() {
-            mTimeoutBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
-                @Override
-                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
-                    if (mIsDragging) {
-                        mCurrentTimeout = mTimeoutBar.getProgress();
-                        mTimeoutValue.setText(getTimeoutString());
-                    }
-                }
-                @Override
-                public void onStartTrackingTouch(SeekBar seekBar) {
-                    mIsDragging = true;
-                }
-                @Override
-                public void onStopTrackingTouch(SeekBar seekBar) {
-                    mIsDragging = false;
-                }
-            });
-        }
-    }
 }
 
diff --git a/src/org/omnirom/omnigears/chameleonos/ActiveDisplaySettings.java b/src/org/omnirom/omnigears/chameleonos/ActiveDisplaySettings.java
index 4d0bed6..356258c 100644
--- a/src/org/omnirom/omnigears/chameleonos/ActiveDisplaySettings.java
+++ b/src/org/omnirom/omnigears/chameleonos/ActiveDisplaySettings.java
@@ -16,9 +16,11 @@
 
 package org.omnirom.omnigears.chameleonos;
 
+import android.app.Activity;
+import android.content.ContentResolver;
 import android.content.Context;
-import android.hardware.SensorManager;
 import android.os.Bundle;
+import android.os.PowerManager;
 import android.preference.CheckBoxPreference;
 import android.preference.ListPreference;
 import android.preference.Preference;
@@ -26,50 +28,57 @@
 import android.preference.PreferenceScreen;
 import android.preference.SwitchPreference;
 import android.provider.Settings;
+import android.provider.Settings.SettingNotFoundException;
+import android.text.format.DateFormat;
 import android.text.TextUtils;
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
 
+import com.android.internal.util.omni.DeviceUtils;
+
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
 
-import static android.hardware.Sensor.TYPE_LIGHT;
-import static android.hardware.Sensor.TYPE_PROXIMITY;
+import android.util.Log;
 
 public class ActiveDisplaySettings extends SettingsPreferenceFragment implements
         OnPreferenceChangeListener {
     private static final String TAG = "ActiveDisplaySettings";
 
     private static final String KEY_ENABLED = "ad_enable";
-    private static final String KEY_SHOW_TEXT = "ad_text";
-    private static final String KEY_ALL_NOTIFICATIONS = "ad_all_notifications";
-    private static final String KEY_HIDE_LOW_PRIORITY = "ad_hide_low_priority";
+    private static final String KEY_ANNOYING = "ad_annoying";
+    private static final String KEY_BYPASS_CONTENT = "ad_bypass";
     private static final String KEY_POCKET_MODE = "ad_pocket_mode";
     private static final String KEY_SUNLIGHT_MODE = "ad_sunlight_mode";
     private static final String KEY_REDISPLAY = "ad_redisplay";
     private static final String KEY_EXCLUDED_APPS = "ad_excluded_apps";
-    private static final String KEY_SHOW_DATE = "ad_show_date";
+    private static final String KEY_PRIVACY_APPS = "ad_privacy_apps";
     private static final String KEY_SHOW_AMPM = "ad_show_ampm";
     private static final String KEY_BRIGHTNESS = "ad_brightness";
     private static final String KEY_TIMEOUT = "ad_timeout";
     private static final String KEY_THRESHOLD = "ad_threshold";
     private static final String KEY_TURNOFF_MODE = "ad_turnoff_mode";
 
+    private ContentResolver mResolver;
+    private Context mContext;
+
     private SwitchPreference mEnabledPref;
-    private CheckBoxPreference mShowTextPref;
-    private CheckBoxPreference mAllNotificationsPref;
-    private CheckBoxPreference mHideLowPriorityPref;
-    private ListPreference mPocketModePref;
-    private CheckBoxPreference mSunlightModePref;
-    private ListPreference mRedisplayPref;
     private AppMultiSelectListPreference mExcludedAppsPref;
-    private CheckBoxPreference mShowDatePref;
+    private AppMultiSelectListPreference mPrivacyAppsPref;
+    private CheckBoxPreference mBypassPref;
     private CheckBoxPreference mShowAmPmPref;
-    private SeekBarPreference mBrightnessLevel;
-    private ListPreference mDisplayTimeout;
-    private ListPreference mProximityThreshold;
+    private CheckBoxPreference mSunlightModePref;
     private CheckBoxPreference mTurnOffModePref;
+    private SeekBarPreference mBrightnessLevel;
+    private SeekBarPreference mAnnoyingNotification;
+    private ListPreference mDisplayTimeout;
+    private ListPreference mPocketModePref;
+    private ListPreference mProximityThreshold;
+    private ListPreference mRedisplayPref;
+    private int mMinimumBacklight;
+    private int mMaximumBacklight;
+
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -77,113 +86,153 @@
 
         addPreferencesFromResource(R.xml.active_display_settings);
 
-        mEnabledPref = (SwitchPreference) findPreference(KEY_ENABLED);
-        mEnabledPref.setChecked((Settings.System.getInt(getContentResolver(),
+        mContext = getActivity().getApplicationContext();
+        mResolver = mContext.getContentResolver();
+        PreferenceScreen prefSet = getPreferenceScreen();
+
+        mEnabledPref = (SwitchPreference) prefSet.findPreference(KEY_ENABLED);
+        mEnabledPref.setChecked((Settings.System.getInt(mResolver,
                 Settings.System.ENABLE_ACTIVE_DISPLAY, 0) == 1));
         mEnabledPref.setOnPreferenceChangeListener(this);
 
-        mShowTextPref = (CheckBoxPreference) findPreference(KEY_SHOW_TEXT);
-        mShowTextPref.setChecked((Settings.System.getInt(getContentResolver(),
-                Settings.System.ACTIVE_DISPLAY_TEXT, 0) == 1));
+        mBypassPref = (CheckBoxPreference) prefSet.findPreference(KEY_BYPASS_CONTENT);
+        mPocketModePref = (ListPreference) prefSet.findPreference(KEY_POCKET_MODE);
+        mProximityThreshold = (ListPreference) prefSet.findPreference(KEY_THRESHOLD);
+        mTurnOffModePref = (CheckBoxPreference) prefSet.findPreference(KEY_TURNOFF_MODE);
 
-        mAllNotificationsPref = (CheckBoxPreference) findPreference(KEY_ALL_NOTIFICATIONS);
-        mAllNotificationsPref.setChecked((Settings.System.getInt(getContentResolver(),
-                Settings.System.ACTIVE_DISPLAY_ALL_NOTIFICATIONS, 0) == 1));
+        if (!DeviceUtils.deviceSupportsProximitySensor(mContext)) {
+            prefSet.removePreference(mPocketModePref);
+            prefSet.removePreference(mBypassPref);
+            prefSet.removePreference(mProximityThreshold);
+            prefSet.removePreference(mTurnOffModePref);
+        } else {
+            mBypassPref.setChecked((Settings.System.getInt(mResolver,
+                Settings.System.ACTIVE_DISPLAY_BYPASS, 1) != 0));
 
-        mHideLowPriorityPref = (CheckBoxPreference) findPreference(KEY_HIDE_LOW_PRIORITY);
-        mHideLowPriorityPref.setChecked((Settings.System.getInt(getContentResolver(),
-                Settings.System.ACTIVE_DISPLAY_HIDE_LOW_PRIORITY_NOTIFICATIONS, 0) == 1));
-
-        mPocketModePref = (ListPreference) findPreference(KEY_POCKET_MODE);
-            mPocketModePref.setOnPreferenceChangeListener(this);
-            int mode = Settings.System.getInt(getContentResolver(),
+            int mode = Settings.System.getInt(mResolver,
                     Settings.System.ACTIVE_DISPLAY_POCKET_MODE, 0);
             mPocketModePref.setValue(String.valueOf(mode));
-            updatePocketModeSummary(mode);
-        if (!hasProximitySensor()) {
-            getPreferenceScreen().removePreference(mPocketModePref);
-        }
-        mSunlightModePref = (CheckBoxPreference) findPreference(KEY_SUNLIGHT_MODE);
-        mSunlightModePref.setChecked((Settings.System.getInt(getContentResolver(),
-                Settings.System.ACTIVE_DISPLAY_SUNLIGHT_MODE, 0) == 1));
-        if (!hasLightSensor()) {
-                getPreferenceScreen().removePreference(mSunlightModePref);
+            mPocketModePref.setSummary(mPocketModePref.getEntry());
+            mPocketModePref.setOnPreferenceChangeListener(this);
+
+            long threshold = Settings.System.getLong(mResolver,
+                Settings.System.ACTIVE_DISPLAY_THRESHOLD, 5000L);
+            mProximityThreshold.setValue(String.valueOf(threshold));
+            mProximityThreshold.setSummary(mProximityThreshold.getEntry());
+            mProximityThreshold.setOnPreferenceChangeListener(this);
+
+            mTurnOffModePref.setChecked((Settings.System.getInt(mResolver,
+                Settings.System.ACTIVE_DISPLAY_TURNOFF_MODE, 0) == 1));
         }
 
-        PreferenceScreen prefSet = getPreferenceScreen();
+        mSunlightModePref = (CheckBoxPreference) prefSet.findPreference(KEY_SUNLIGHT_MODE);
+
+        if (!DeviceUtils.deviceSupportsLightSensor(mContext)) {
+            prefSet.removePreference(mSunlightModePref);
+        } else {
+            mSunlightModePref.setChecked((Settings.System.getInt(mResolver,
+                Settings.System.ACTIVE_DISPLAY_SUNLIGHT_MODE, 0) == 1));
+        }
+
         mRedisplayPref = (ListPreference) prefSet.findPreference(KEY_REDISPLAY);
-        mRedisplayPref.setOnPreferenceChangeListener(this);
-        long timeout = Settings.System.getLong(getContentResolver(),
+        long timeout = Settings.System.getLong(mResolver,
                 Settings.System.ACTIVE_DISPLAY_REDISPLAY, 0);
         mRedisplayPref.setValue(String.valueOf(timeout));
-        updateRedisplaySummary(timeout);
+        mRedisplayPref.setSummary(mRedisplayPref.getEntry());
+        mRedisplayPref.setOnPreferenceChangeListener(this);
 
-        mExcludedAppsPref = (AppMultiSelectListPreference) findPreference(KEY_EXCLUDED_APPS);
+        mAnnoyingNotification = (SeekBarPreference) prefSet.findPreference(KEY_ANNOYING);
+        mAnnoyingNotification.setValue(Settings.System.getInt(mResolver,
+                Settings.System.ACTIVE_DISPLAY_ANNOYING, 0));
+        mAnnoyingNotification.setOnPreferenceChangeListener(this);
+
+        mExcludedAppsPref = (AppMultiSelectListPreference) prefSet.findPreference(KEY_EXCLUDED_APPS);
         Set<String> excludedApps = getExcludedApps();
-        if (excludedApps != null) mExcludedAppsPref.setValues(excludedApps);
+        if (excludedApps != null) {
+            mExcludedAppsPref.setValues(excludedApps);
+        }
         mExcludedAppsPref.setOnPreferenceChangeListener(this);
 
-        mShowDatePref = (CheckBoxPreference) findPreference(KEY_SHOW_DATE);
-        mShowDatePref.setChecked((Settings.System.getInt(getContentResolver(),
-                Settings.System.ACTIVE_DISPLAY_SHOW_DATE, 0) == 1));
+        mPrivacyAppsPref = (AppMultiSelectListPreference) prefSet.findPreference(KEY_PRIVACY_APPS);
+        Set<String> privacyApps = getPrivacyApps();
+        if (privacyApps != null) {
+            mPrivacyAppsPref.setValues(privacyApps);
+        }
+        mPrivacyAppsPref.setOnPreferenceChangeListener(this);
 
-        mShowAmPmPref = (CheckBoxPreference) findPreference(KEY_SHOW_AMPM);
-        mShowAmPmPref.setChecked((Settings.System.getInt(getContentResolver(),
+        mShowAmPmPref = (CheckBoxPreference) prefSet.findPreference(KEY_SHOW_AMPM);
+        mShowAmPmPref.setChecked((Settings.System.getInt(mResolver,
                 Settings.System.ACTIVE_DISPLAY_SHOW_AMPM, 0) == 1));
 
-        mBrightnessLevel = (SeekBarPreference) findPreference(KEY_BRIGHTNESS);
-        mBrightnessLevel.setValue(Settings.System.getInt(getContentResolver(),
-                Settings.System.ACTIVE_DISPLAY_BRIGHTNESS, 100));
-        mBrightnessLevel.setOnPreferenceChangeListener(this);
+        PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
+        mMinimumBacklight = pm.getMinimumScreenBrightnessSetting();
+        mMaximumBacklight = pm.getMaximumScreenBrightnessSetting();
+
+        mBrightnessLevel = (SeekBarPreference) prefSet.findPreference(KEY_BRIGHTNESS);
+        int brightness = Settings.System.getInt(mResolver,
+                Settings.System.ACTIVE_DISPLAY_BRIGHTNESS, mMaximumBacklight);
+        int realBrightness =  (int)(((float)brightness / (float)mMaximumBacklight) * 100);
+        mBrightnessLevel.setValue(realBrightness);
+        mBrightnessLevel.setOnPreferenceChangeListener(this); 
 
         mDisplayTimeout = (ListPreference) prefSet.findPreference(KEY_TIMEOUT);
-        mDisplayTimeout.setOnPreferenceChangeListener(this);
-        timeout = Settings.System.getLong(getContentResolver(),
+        timeout = Settings.System.getLong(mResolver,
                 Settings.System.ACTIVE_DISPLAY_TIMEOUT, 8000L);
         mDisplayTimeout.setValue(String.valueOf(timeout));
-        updateTimeoutSummary(timeout);
-
-        mProximityThreshold = (ListPreference) prefSet.findPreference(KEY_THRESHOLD);
-        mProximityThreshold.setOnPreferenceChangeListener(this);
-        long threshold = Settings.System.getLong(getContentResolver(),
-                Settings.System.ACTIVE_DISPLAY_THRESHOLD, 5000L);
-        mProximityThreshold.setValue(String.valueOf(threshold));
-        updateThresholdSummary(threshold);
-
-        mTurnOffModePref = (CheckBoxPreference) findPreference(KEY_TURNOFF_MODE);
-        mTurnOffModePref.setChecked((Settings.System.getInt(getContentResolver(),
-                Settings.System.ACTIVE_DISPLAY_TURNOFF_MODE, 0) == 1));
+        mDisplayTimeout.setSummary(mDisplayTimeout.getEntry());
+        mDisplayTimeout.setOnPreferenceChangeListener(this);
     }
 
+    @Override
     public boolean onPreferenceChange(Preference preference, Object newValue) {
         if (preference == mRedisplayPref) {
-            int timeout = Integer.valueOf((String) newValue);
-            updateRedisplaySummary(timeout);
+            int val = Integer.parseInt((String) newValue);
+            int index = mRedisplayPref.findIndexOfValue((String) newValue);
+            Settings.System.putInt(mResolver,
+                Settings.System.ACTIVE_DISPLAY_REDISPLAY, val);
+            mRedisplayPref.setSummary(mRedisplayPref.getEntries()[index]);
             return true;
         } else if (preference == mEnabledPref) {
-            Settings.System.putInt(getContentResolver(),
+            Settings.System.putInt(mResolver,
                     Settings.System.ENABLE_ACTIVE_DISPLAY,
                     ((Boolean) newValue).booleanValue() ? 1 : 0);
             return true;
         } else if (preference == mPocketModePref) {
-	        int mode = Integer.valueOf((String) newValue);
-	        updatePocketModeSummary(mode);
+            int val = Integer.parseInt((String) newValue);
+            int index = mPocketModePref.findIndexOfValue((String) newValue);
+            Settings.System.putInt(mResolver,
+                Settings.System.ACTIVE_DISPLAY_POCKET_MODE, val);
+            mPocketModePref.setSummary(mPocketModePref.getEntries()[index]);
             return true;
         } else if (preference == mExcludedAppsPref) {
             storeExcludedApps((Set<String>) newValue);
             return true;
+        } else if (preference == mPrivacyAppsPref) {
+            storePrivacyApps((Set<String>) newValue);
+            return true;
+        } else if (preference == mAnnoyingNotification) {
+            int annoying = ((Integer)newValue).intValue();
+            Settings.System.putInt(mResolver,
+                    Settings.System.ACTIVE_DISPLAY_ANNOYING, annoying);
+            return true;
         } else if (preference == mBrightnessLevel) {
             int brightness = ((Integer)newValue).intValue();
-            Settings.System.putInt(getContentResolver(),
-                    Settings.System.ACTIVE_DISPLAY_BRIGHTNESS, brightness);
+            int realBrightness =  Math.max(mMinimumBacklight, (int)(((float)brightness / (float)100) * mMaximumBacklight));                   
+            Settings.System.putInt(mResolver, Settings.System.ACTIVE_DISPLAY_BRIGHTNESS, realBrightness);
             return true;
         } else if (preference == mDisplayTimeout) {
-            long timeout = Integer.valueOf((String) newValue);
-            updateTimeoutSummary(timeout);
+            int val = Integer.parseInt((String) newValue);
+            int index = mDisplayTimeout.findIndexOfValue((String) newValue);
+            Settings.System.putInt(mResolver,
+                Settings.System.ACTIVE_DISPLAY_TIMEOUT, val);
+            mDisplayTimeout.setSummary(mDisplayTimeout.getEntries()[index]);
             return true;
         } else if (preference == mProximityThreshold) {
-            long threshold = Integer.valueOf((String) newValue);
-            updateThresholdSummary(threshold);
+            int val = Integer.parseInt((String) newValue);
+            int index = mProximityThreshold.findIndexOfValue((String) newValue);
+            Settings.System.putInt(mResolver,
+                Settings.System.ACTIVE_DISPLAY_THRESHOLD, val);
+            mProximityThreshold.setSummary(mProximityThreshold.getEntries()[index]);
             return true;
         }
         return false;
@@ -192,40 +241,24 @@
     @Override
     public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
         boolean value;
-
-        if (preference == mShowTextPref) {
-            value = mShowTextPref.isChecked();
-            Settings.System.putInt(getContentResolver(),
-                    Settings.System.ACTIVE_DISPLAY_TEXT,
-                    value ? 1 : 0);
-        } else if (preference == mAllNotificationsPref) {
-            value = mAllNotificationsPref.isChecked();
-            Settings.System.putInt(getContentResolver(),
-                    Settings.System.ACTIVE_DISPLAY_ALL_NOTIFICATIONS,
-                    value ? 1 : 0);
-        } else if (preference == mHideLowPriorityPref) {
-            value = mHideLowPriorityPref.isChecked();
-            Settings.System.putInt(getContentResolver(),
-                    Settings.System.ACTIVE_DISPLAY_HIDE_LOW_PRIORITY_NOTIFICATIONS,
+        if (preference == mBypassPref) {
+            value = mBypassPref.isChecked();
+            Settings.System.putInt(mResolver,
+                    Settings.System.ACTIVE_DISPLAY_BYPASS,
                     value ? 1 : 0);
         } else if (preference == mSunlightModePref) {
             value = mSunlightModePref.isChecked();
-            Settings.System.putInt(getContentResolver(),
+            Settings.System.putInt(mResolver,
                     Settings.System.ACTIVE_DISPLAY_SUNLIGHT_MODE,
                     value ? 1 : 0);
-        } else if (preference == mShowDatePref) {
-            value = mShowDatePref.isChecked();
-            Settings.System.putInt(getContentResolver(),
-                    Settings.System.ACTIVE_DISPLAY_SHOW_DATE,
-                    value ? 1 : 0);
         } else if (preference == mShowAmPmPref) {
             value = mShowAmPmPref.isChecked();
-            Settings.System.putInt(getContentResolver(),
+            Settings.System.putInt(mResolver,
                     Settings.System.ACTIVE_DISPLAY_SHOW_AMPM,
                     value ? 1 : 0);
         } else if (preference == mTurnOffModePref) {
             value = mTurnOffModePref.isChecked();
-            Settings.System.putInt(getContentResolver(),
+            Settings.System.putInt(mResolver,
                     Settings.System.ACTIVE_DISPLAY_TURNOFF_MODE,
                     value ? 1 : 0);
         } else {
@@ -235,53 +268,12 @@
         return true;
     }
 
-    private void updatePocketModeSummary(int value) {
-        mPocketModePref.setSummary(
-            mPocketModePref.getEntries()[mPocketModePref.findIndexOfValue("" + value)]);
-        Settings.System.putInt(getContentResolver(),
-            Settings.System.ACTIVE_DISPLAY_POCKET_MODE, value);
-    }
-
-    private void updateRedisplaySummary(long value) {
-        mRedisplayPref.setSummary(mRedisplayPref.getEntries()[mRedisplayPref.findIndexOfValue("" + value)]);
-        Settings.System.putLong(getContentResolver(),
-                Settings.System.ACTIVE_DISPLAY_REDISPLAY, value);
-    }
-
-    private void updateTimeoutSummary(long value) {
-        try {
-            mDisplayTimeout.setSummary(mDisplayTimeout.getEntries()[mDisplayTimeout.findIndexOfValue("" + value)]);
-            Settings.System.putLong(getContentResolver(),
-                    Settings.System.ACTIVE_DISPLAY_TIMEOUT, value);
-        } catch (ArrayIndexOutOfBoundsException e) {
-        }
-    }
-
-    private void updateThresholdSummary(long value) {
-        try {
-            mProximityThreshold.setSummary(mProximityThreshold.getEntries()[mProximityThreshold.findIndexOfValue("" + value)]);
-            Settings.System.putLong(getContentResolver(),
-                    Settings.System.ACTIVE_DISPLAY_THRESHOLD, value);
-        } catch (ArrayIndexOutOfBoundsException e) {
-        }
-    }
-
-    private boolean hasProximitySensor() {
-        SensorManager sm = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);
-        return sm.getDefaultSensor(TYPE_PROXIMITY) != null;
-    }
-
-    private boolean hasLightSensor() {
-        SensorManager sm = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);
-        return sm.getDefaultSensor(TYPE_LIGHT) != null;
-    }
-
     private Set<String> getExcludedApps() {
-        String excluded = Settings.System.getString(getContentResolver(),
+        String excluded = Settings.System.getString(mResolver,
                 Settings.System.ACTIVE_DISPLAY_EXCLUDED_APPS);
-        if (TextUtils.isEmpty(excluded))
+        if (TextUtils.isEmpty(excluded)) {
             return null;
-
+        }
         return new HashSet<String>(Arrays.asList(excluded.split("\\|")));
     }
 
@@ -293,7 +285,32 @@
             builder.append(value);
             delimiter = "|";
         }
-        Settings.System.putString(getContentResolver(),
+        Settings.System.putString(mResolver,
                 Settings.System.ACTIVE_DISPLAY_EXCLUDED_APPS, builder.toString());
     }
+
+    private Set<String> getPrivacyApps() {
+        String privacies = Settings.System.getString(mResolver,
+                Settings.System.ACTIVE_DISPLAY_PRIVACY_APPS);
+        if (TextUtils.isEmpty(privacies)) {
+            return null;
+        }
+        return new HashSet<String>(Arrays.asList(privacies.split("\\|")));
+    }
+
+    private void storePrivacyApps(Set<String> values) {
+        StringBuilder builder = new StringBuilder();
+        String delimiter = "";
+        for (String value : values) {
+            builder.append(delimiter);
+            builder.append(value);
+            delimiter = "|";
+        }
+        Settings.System.putString(mResolver,
+                Settings.System.ACTIVE_DISPLAY_PRIVACY_APPS, builder.toString());
+    }
+
+    private boolean is24Hour() {
+        return DateFormat.is24HourFormat(mContext);
+    }
 }
diff --git a/src/org/omnirom/omnigears/chameleonos/AppMultiSelectListPreference.java b/src/org/omnirom/omnigears/chameleonos/AppMultiSelectListPreference.java
index 137a7fa..2e8e19d 100644
--- a/src/org/omnirom/omnigears/chameleonos/AppMultiSelectListPreference.java
+++ b/src/org/omnirom/omnigears/chameleonos/AppMultiSelectListPreference.java
@@ -101,6 +101,10 @@
         persistStringSet(values);
     }
 
+    public void setClearValues() {
+        mValues.clear();
+    }
+
     /**
      * Retrieves the current value of the key.
      */
@@ -171,14 +175,17 @@
     @Override
     protected Object onGetDefaultValue(TypedArray a, int index) {
         final CharSequence[] defaultValues = a.getTextArray(index);
-        final int valueCount = defaultValues.length;
-        final Set<String> result = new HashSet<String>();
+        if (defaultValues != null) {
+            final int valueCount = defaultValues.length;
+            final Set<String> result = new HashSet<String>();
 
-        for (int i = 0; i < valueCount; i++) {
-            result.add(defaultValues[i].toString());
+            for (int i = 0; i < valueCount; i++) {
+                 result.add(defaultValues[i].toString());
+            }
+
+            return result;
         }
-
-        return result;
+        return null;
     }
 
     @Override
@@ -252,11 +259,11 @@
 
     private final static Comparator<MyApplicationInfo> sDisplayNameComparator
             = new Comparator<MyApplicationInfo>() {
-        public final int
-        compare(MyApplicationInfo a, MyApplicationInfo b) {
-            return collator.compare(a.label, b.label);
-        }
 
         private final Collator collator = Collator.getInstance();
+
+        public final int compare(MyApplicationInfo a, MyApplicationInfo b) {
+            return collator.compare(a.label, b.label);
+        }
     };
 }
diff --git a/src/org/omnirom/omnigears/chameleonos/SeekBarPreference.java b/src/org/omnirom/omnigears/chameleonos/SeekBarPreference.java
index 1272621..50c83e5 100644
--- a/src/org/omnirom/omnigears/chameleonos/SeekBarPreference.java
+++ b/src/org/omnirom/omnigears/chameleonos/SeekBarPreference.java
@@ -31,7 +31,6 @@
     private String mUnitsRight = "";
     private SeekBar mSeekBar;
     private TextView mTitle;
-
     private TextView mStatusText;
 
     public SeekBarPreference(Context context, AttributeSet attrs) {
@@ -52,26 +51,38 @@
     }
 
     private void setValuesFromXml(AttributeSet attrs) {
+        final TypedArray typedArray = getContext().obtainStyledAttributes(
+                      attrs, R.styleable.SeekBarPreference);
+
         mMaxValue = attrs.getAttributeIntValue(ANDROIDNS, "max", 100);
         mMinValue = attrs.getAttributeIntValue(SETTINGS, "min", 0);
         mUnitsLeft = getAttributeStringValue(attrs, SETTINGS, "unitsLeft", "");
         String units = getAttributeStringValue(attrs, SETTINGS, "units", "");
         mUnitsRight = getAttributeStringValue(attrs, SETTINGS, "unitsRight", units);
+
+        Integer id = typedArray.getResourceId(R.styleable.SeekBarPreference_unitsRight, 0);
+        if (id > 0) {
+            mUnitsRight = getContext().getResources().getString(id);
+        }
+        id = typedArray.getResourceId(R.styleable.SeekBarPreference_unitsLeft, 0);
+        if (id > 0) {
+            mUnitsLeft = getContext().getResources().getString(id);
+        }
+
         try {
             String newInterval = attrs.getAttributeValue(SETTINGS, "interval");
             if(newInterval != null)
                 mInterval = Integer.parseInt(newInterval);
-        }
-        catch(Exception e) {
+        } catch(Exception e) {
             Log.e(TAG, "Invalid interval value", e);
         }
     }
-    
+
     private String getAttributeStringValue(AttributeSet attrs, String namespace, String name, String defaultValue) {
         String value = attrs.getAttributeValue(namespace, name);
-        if(value == null)
+        if(value == null) {
             value = defaultValue;
-        
+        }
         return value;
     }
 
@@ -79,10 +90,12 @@
     public void onDependencyChanged(Preference dependency, boolean disableDependent) {
         super.onDependencyChanged(dependency, disableDependent);
         this.setShouldDisableView(true);
-        if (mTitle != null)
+        if (mTitle != null) {
             mTitle.setEnabled(!disableDependent);
-        if (mSeekBar != null)
+        }
+        if (mSeekBar != null) {
             mSeekBar.setEnabled(!disableDependent);
+        }
     }
 
     @Override
@@ -93,19 +106,16 @@
             LayoutInflater mInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
             layout = (RelativeLayout)mInflater.inflate(R.layout.seek_bar_preference, parent, false);
             mTitle = (TextView) layout.findViewById(android.R.id.title);
-        }
-        catch(Exception e)
-        {
+        } catch(Exception e) {
             Log.e(TAG, "Error creating seek bar preference", e);
         }
         return layout;
     }
-    
+
     @Override
     public void onBindView(View view) {
         super.onBindView(view);
-        try
-        {
+        try {
             // move our seekbar to the new view we've been given
             ViewParent oldContainer = mSeekBar.getParent();
             ViewGroup newContainer = (ViewGroup) view.findViewById(R.id.seekBarPrefBarContainer);
@@ -120,8 +130,7 @@
                 newContainer.addView(mSeekBar, ViewGroup.LayoutParams.FILL_PARENT,
                         ViewGroup.LayoutParams.WRAP_CONTENT);
             }
-        }
-        catch(Exception ex) {
+        } catch(Exception ex) {
             Log.e(TAG, "Error binding view: " + ex.toString());
         }
         updateView(view);
@@ -144,27 +153,29 @@
             unitsRight.setText(mUnitsRight);
             TextView unitsLeft = (TextView)layout.findViewById(R.id.seekBarPrefUnitsLeft);
             unitsLeft.setText(mUnitsLeft);
-        }
-        catch(Exception e) {
+        } catch(Exception e) {
             Log.e(TAG, "Error updating seek bar preference", e);
         }
     }
-    
+
     @Override
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
         int newValue = progress + mMinValue;
-        if(newValue > mMaxValue)
+
+        if(newValue > mMaxValue) {
             newValue = mMaxValue;
-        else if(newValue < mMinValue)
+        } else if(newValue < mMinValue) {
             newValue = mMinValue;
-        else if(mInterval != 1 && newValue % mInterval != 0)
-            newValue = Math.round(((float)newValue)/mInterval)*mInterval;  
-        
+        } else if(mInterval != 1 && newValue % mInterval != 0) {
+            newValue = Math.round(((float)newValue)/mInterval)*mInterval;
+        }
+
         // change rejected, revert to the previous value
-        if(!callChangeListener(newValue)){
-            seekBar.setProgress(mCurrentValue - mMinValue); 
+        if (!callChangeListener(newValue)) {
+            seekBar.setProgress(mCurrentValue - mMinValue);
             return; 
         }
+
         // change accepted, store it
         mCurrentValue = newValue;
         mStatusText.setText(String.valueOf(newValue));
@@ -187,15 +198,13 @@
 
     @Override
     protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
-        if(restoreValue) {
+        if (restoreValue) {
             mCurrentValue = getPersistedInt(mCurrentValue);
-        }
-        else {
+        } else {
             int temp = 0;
             try {
                 temp = (Integer)defaultValue;
-            }
-            catch(Exception ex) {
+            } catch(Exception ex) {
                 Log.e(TAG, "Invalid default value: " + defaultValue.toString());
             }
             persistInt(temp);
@@ -206,4 +215,22 @@
     public void setValue(int value) {
         mCurrentValue = value;
     }
-}
\ No newline at end of file
+
+    public void setMaxValue(int value) {
+        mMaxValue = value;
+    }
+
+    public void setMinValue(int value) {
+        mMinValue = value;
+    }
+
+    public void updateSeekValue() {
+        mSeekBar.setMax(mMaxValue - mMinValue);
+    }
+
+    @Override
+    public void setEnabled (boolean enabled) {
+        mSeekBar.setEnabled(enabled);
+        super.setEnabled(enabled);
+    }
+}
diff --git a/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java b/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java
index 1bf48a5..81a8f6d 100644
--- a/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java
+++ b/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java
@@ -23,21 +23,21 @@
 
 import android.content.ContentResolver;
 import android.content.Context;
+import android.content.res.Resources;
+import android.net.TrafficStats;
 import android.os.Bundle;
 import android.os.RemoteException;
 import android.os.SystemProperties;
 import android.preference.CheckBoxPreference;
+import android.preference.EditTextPreference;
 import android.preference.ListPreference;
 import android.preference.Preference;
 import android.preference.PreferenceGroup;
 import android.preference.PreferenceScreen;
 import android.provider.Settings;
 import android.provider.Settings.SettingNotFoundException;
-import android.util.DisplayMetrics;
-import android.util.Log;
-import android.view.DisplayInfo;
-import android.view.WindowManager;
-import android.view.WindowManagerGlobal;
+
+import com.android.internal.util.omni.DeviceUtils;
 
 public class BarsSettings extends SettingsPreferenceFragment implements
         Preference.OnPreferenceChangeListener {
@@ -45,33 +45,42 @@
 
     private static final String STATUS_BAR_BRIGHTNESS_CONTROL = "status_bar_brightness_control";
     private static final String STATUS_BAR_NOTIF_COUNT = "status_bar_notif_count";
-    private static final String STATUS_BAR_TRAFFIC = "status_bar_traffic";
-    private static final String STATUS_BAR_NETWORK_ACTIVITY = "status_bar_network_activity";
     private static final String QUICK_PULLDOWN = "quick_pulldown";
     private static final String SMART_PULLDOWN = "smart_pulldown";
     private static final String QUICKSETTINGS_DYNAMIC = "quicksettings_dynamic_row";
     private static final String CATEGORY_NAVBAR = "category_navigation_bar";
+    private static final String NETWORK_TRAFFIC_STATE = "network_traffic_state";
+    private static final String NETWORK_TRAFFIC_UNIT = "network_traffic_unit";
+    private static final String NETWORK_TRAFFIC_PERIOD = "network_traffic_period";
+    private static final String STATUS_BAR_NETWORK_ACTIVITY = "status_bar_network_activity";
     private static final String SOFT_BACK_KILL_APP = "soft_back_kill_app";
-
-    // Device types
-    private static final int DEVICE_PHONE  = 0;
-    private static final int DEVICE_HYBRID = 1;
-    private static final int DEVICE_TABLET = 2;
+    private static final String EMULATE_MENU_KEY = "emulate_menu_key";
 
     private CheckBoxPreference mStatusBarBrightnessControl;
     private CheckBoxPreference mStatusBarNotifCount;
-    private CheckBoxPreference mStatusBarTraffic;
-    private CheckBoxPreference mStatusBarNetworkActivity;
     private CheckBoxPreference mQuickSettingsDynamic;
     private ListPreference mQuickPulldown;
     private ListPreference mSmartPulldown;
+    private ListPreference mNetTrafficState;
+    private ListPreference mNetTrafficUnit;
+    private ListPreference mNetTrafficPeriod;
+    private CheckBoxPreference mStatusBarNetworkActivity;
     private CheckBoxPreference mSoftBackKillApp;
+    private CheckBoxPreference mEmulateMenuKey;
+
+    private int mNetTrafficVal;
+    private int MASK_UP;
+    private int MASK_DOWN;
+    private int MASK_UNIT;
+    private int MASK_PERIOD;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         addPreferencesFromResource(R.xml.bars_settings);
 
+        loadResources();
+
         PreferenceScreen prefSet = getPreferenceScreen();
         ContentResolver resolver = getActivity().getContentResolver();
 
@@ -95,32 +104,20 @@
                 Settings.System.STATUS_BAR_NOTIF_COUNT, 0) == 1);
         mStatusBarNotifCount.setOnPreferenceChangeListener(this);
 
-        mStatusBarTraffic = (CheckBoxPreference) prefSet.findPreference(STATUS_BAR_TRAFFIC);
-        int intState = Settings.System.getInt(resolver, Settings.System.STATUS_BAR_TRAFFIC, 0);
-        intState = setStatusBarTrafficSummary(intState);
-        mStatusBarTraffic.setChecked(intState > 0);
-        mStatusBarTraffic.setOnPreferenceChangeListener(this);
-
-        mStatusBarNetworkActivity =
-                (CheckBoxPreference) prefSet.findPreference(STATUS_BAR_NETWORK_ACTIVITY);
-        mStatusBarNetworkActivity.setChecked(Settings.System.getInt(resolver,
-                Settings.System.STATUS_BAR_NETWORK_ACTIVITY, 0) == 1);
-        mStatusBarNetworkActivity.setOnPreferenceChangeListener(this);
-
         mQuickPulldown = (ListPreference) findPreference(QUICK_PULLDOWN);
         mSmartPulldown = (ListPreference) findPreference(SMART_PULLDOWN);
 
-        if (isPhone(getActivity())) {
+        if (DeviceUtils.isPhone(getActivity())) {
             int quickPulldown = Settings.System.getInt(resolver,
                     Settings.System.QS_QUICK_PULLDOWN, 0);
             mQuickPulldown.setValue(String.valueOf(quickPulldown));
-            updateQuickPulldownSummary(quickPulldown);
+            mQuickPulldown.setSummary(mQuickPulldown.getEntry());
             mQuickPulldown.setOnPreferenceChangeListener(this);
 
             int smartPulldown = Settings.System.getInt(resolver,
                     Settings.System.QS_SMART_PULLDOWN, 0);
             mSmartPulldown.setValue(String.valueOf(smartPulldown));
-            updateSmartPulldownSummary(smartPulldown);
+            mSmartPulldown.setSummary(mSmartPulldown.getEntry());
             mSmartPulldown.setOnPreferenceChangeListener(this);
         } else {
             prefSet.removePreference(mQuickPulldown);
@@ -132,6 +129,45 @@
             Settings.System.QUICK_SETTINGS_TILES_ROW, 1) != 0);
         mQuickSettingsDynamic.setOnPreferenceChangeListener(this);
 
+        mStatusBarNetworkActivity =
+                (CheckBoxPreference) prefSet.findPreference(STATUS_BAR_NETWORK_ACTIVITY);
+        mStatusBarNetworkActivity.setChecked(Settings.System.getInt(resolver,
+                Settings.System.STATUS_BAR_NETWORK_ACTIVITY, 0) == 1);
+        mStatusBarNetworkActivity.setOnPreferenceChangeListener(this);
+
+        mNetTrafficState = (ListPreference) prefSet.findPreference(NETWORK_TRAFFIC_STATE);
+        mNetTrafficUnit = (ListPreference) prefSet.findPreference(NETWORK_TRAFFIC_UNIT);
+        mNetTrafficPeriod = (ListPreference) prefSet.findPreference(NETWORK_TRAFFIC_PERIOD);
+
+        // TrafficStats will return UNSUPPORTED if the device does not support it.
+        if (TrafficStats.getTotalTxBytes() != TrafficStats.UNSUPPORTED &&
+                TrafficStats.getTotalRxBytes() != TrafficStats.UNSUPPORTED) {
+            mNetTrafficVal = Settings.System.getInt(resolver, Settings.System.NETWORK_TRAFFIC_STATE, 0);
+            int intIndex = mNetTrafficVal & (MASK_UP + MASK_DOWN);
+            intIndex = mNetTrafficState.findIndexOfValue(String.valueOf(intIndex));
+            if (intIndex <= 0) {
+                mNetTrafficUnit.setEnabled(false);
+                mNetTrafficPeriod.setEnabled(false);
+            }
+            mNetTrafficState.setValueIndex(intIndex >= 0 ? intIndex : 0);
+            mNetTrafficState.setSummary(mNetTrafficState.getEntry());
+            mNetTrafficState.setOnPreferenceChangeListener(this);
+
+            mNetTrafficUnit.setValueIndex(getBit(mNetTrafficVal, MASK_UNIT) ? 1 : 0);
+            mNetTrafficUnit.setSummary(mNetTrafficUnit.getEntry());
+            mNetTrafficUnit.setOnPreferenceChangeListener(this);
+
+            intIndex = (mNetTrafficVal & MASK_PERIOD) >>> 16;
+            intIndex = mNetTrafficPeriod.findIndexOfValue(String.valueOf(intIndex));
+            mNetTrafficPeriod.setValueIndex(intIndex >= 0 ? intIndex : 1);
+            mNetTrafficPeriod.setSummary(mNetTrafficPeriod.getEntry());
+            mNetTrafficPeriod.setOnPreferenceChangeListener(this);
+        } else {
+            prefSet.removePreference(findPreference(NETWORK_TRAFFIC_STATE));
+            prefSet.removePreference(findPreference(NETWORK_TRAFFIC_UNIT));
+            prefSet.removePreference(findPreference(NETWORK_TRAFFIC_PERIOD));
+        }
+
         boolean hasNavBar = getResources().getBoolean(
                 com.android.internal.R.bool.config_showNavigationBar);
         // Also check, if users without navigation bar force enabled it.
@@ -145,6 +181,11 @@
             mSoftBackKillApp.setChecked(Settings.System.getInt(resolver,
                     Settings.System.SOFT_BACK_KILL_APP_ENABLE, 0) == 1);
             mSoftBackKillApp.setOnPreferenceChangeListener(this);
+
+            mEmulateMenuKey = (CheckBoxPreference) prefSet.findPreference(EMULATE_MENU_KEY);
+            mEmulateMenuKey.setChecked(Settings.System.getInt(resolver,
+                    Settings.System.EMULATE_HW_MENU_KEY, 0) == 1);
+            mEmulateMenuKey.setOnPreferenceChangeListener(this);
         }
     }
 
@@ -164,94 +205,83 @@
         } else if (preference == mStatusBarNotifCount) {
             boolean value = (Boolean) objValue;
             Settings.System.putInt(resolver, Settings.System.STATUS_BAR_NOTIF_COUNT, value ? 1 : 0);
-        } else if (preference == mStatusBarTraffic) {
-
-            // Increment the state and then update the label
-            int intState = Settings.System.getInt(resolver, Settings.System.STATUS_BAR_TRAFFIC, 0);
-            intState++;
-            intState = setStatusBarTrafficSummary(intState);
-            Settings.System.putInt(resolver, Settings.System.STATUS_BAR_TRAFFIC, intState);
-            if (intState > 1) {return false;}
-        } else if (preference == mStatusBarNetworkActivity) {
-            boolean value = (Boolean) objValue;
-            Settings.System.putInt(resolver, Settings.System.STATUS_BAR_NETWORK_ACTIVITY,
-                    value ? 1 : 0);
         } else if (preference == mQuickSettingsDynamic) {
             boolean value = (Boolean) objValue;
             Settings.System.putInt(resolver,
                 Settings.System.QUICK_SETTINGS_TILES_ROW, value ? 1 : 0);
         } else if (preference == mQuickPulldown) {
-            int quickPulldown = Integer.valueOf((String) objValue);
-            Settings.System.putInt(resolver, Settings.System.QS_QUICK_PULLDOWN,
-                    quickPulldown);
-            updateQuickPulldownSummary(quickPulldown);
+            int val = Integer.parseInt((String) objValue);
+            int index = mQuickPulldown.findIndexOfValue((String) objValue);
+            Settings.System.putInt(resolver,
+                Settings.System.QS_QUICK_PULLDOWN, val);
+            mQuickPulldown.setSummary(mQuickPulldown.getEntries()[index]);
         } else if (preference == mSmartPulldown) {
-            int smartPulldown = Integer.valueOf((String) objValue);
-            Settings.System.putInt(resolver, Settings.System.QS_SMART_PULLDOWN,
-                    smartPulldown);
-            updateSmartPulldownSummary(smartPulldown);
+            int val = Integer.parseInt((String) objValue);
+            int index = mSmartPulldown.findIndexOfValue((String) objValue);
+            Settings.System.putInt(resolver,
+                Settings.System.QS_SMART_PULLDOWN, val);
+            mSmartPulldown.setSummary(mSmartPulldown.getEntries()[index]);
+        } else if (preference == mStatusBarNetworkActivity) {
+            boolean value = (Boolean) objValue;
+            Settings.System.putInt(resolver, Settings.System.STATUS_BAR_NETWORK_ACTIVITY,
+                    value ? 1 : 0);
+        } else if (preference == mNetTrafficState) {
+            int intState = Integer.valueOf((String)objValue);
+            mNetTrafficVal = setBit(mNetTrafficVal, MASK_UP, getBit(intState, MASK_UP));
+            mNetTrafficVal = setBit(mNetTrafficVal, MASK_DOWN, getBit(intState, MASK_DOWN));
+            Settings.System.putInt(resolver, Settings.System.NETWORK_TRAFFIC_STATE, mNetTrafficVal);
+            int index = mNetTrafficState.findIndexOfValue((String) objValue);
+            mNetTrafficState.setSummary(mNetTrafficState.getEntries()[index]);
+            if (intState == 0) {
+                mNetTrafficUnit.setEnabled(false);
+                mNetTrafficPeriod.setEnabled(false);
+            } else {
+                mNetTrafficUnit.setEnabled(true);
+                mNetTrafficPeriod.setEnabled(true);
+            }
+        } else if (preference == mNetTrafficUnit) {
+            // 1 = Display as Byte/s; default is bit/s
+            mNetTrafficVal = setBit(mNetTrafficVal, MASK_UNIT, ((String)objValue).equals("1"));
+            Settings.System.putInt(resolver, Settings.System.NETWORK_TRAFFIC_STATE, mNetTrafficVal);
+            int index = mNetTrafficUnit.findIndexOfValue((String) objValue);
+            mNetTrafficUnit.setSummary(mNetTrafficUnit.getEntries()[index]);
+        } else if (preference == mNetTrafficPeriod) {
+            int intState = Integer.valueOf((String)objValue);
+            mNetTrafficVal = setBit(mNetTrafficVal, MASK_PERIOD, false) + (intState << 16);
+            Settings.System.putInt(resolver, Settings.System.NETWORK_TRAFFIC_STATE, mNetTrafficVal);
+            int index = mNetTrafficPeriod.findIndexOfValue((String) objValue);
+            mNetTrafficPeriod.setSummary(mNetTrafficPeriod.getEntries()[index]);
         } else if (preference == mSoftBackKillApp) {
             boolean value = (Boolean) objValue;
             Settings.System.putInt(resolver,
                 Settings.System.SOFT_BACK_KILL_APP_ENABLE, value ? 1 : 0);
+        } else if (preference == mEmulateMenuKey) {
+            boolean value = (Boolean) objValue;
+            Settings.System.putInt(resolver,
+                Settings.System.EMULATE_HW_MENU_KEY, value ? 1 : 0);
         } else {
             return false;
         }
         return true;
     }
 
-    private int setStatusBarTrafficSummary(int intState) {
-        // These states must match com.android.systemui.statusbar.policy.Traffic
-        if (intState == 1) {
-            mStatusBarTraffic.setSummary(R.string.show_network_speed_bits);
-        } else if (intState == 2) {
-            mStatusBarTraffic.setSummary(R.string.show_network_speed_bytes);
-        } else {
-            mStatusBarTraffic.setSummary(R.string.show_network_speed_summary);
-            return 0;
-        }
-        return intState;
+    private void loadResources() {
+        Resources resources = getActivity().getResources();
+        MASK_UP = resources.getInteger(R.integer.maskUp);
+        MASK_DOWN = resources.getInteger(R.integer.maskDown);
+        MASK_UNIT = resources.getInteger(R.integer.maskUnit);
+        MASK_PERIOD = resources.getInteger(R.integer.maskPeriod);
     }
 
-    private void updateQuickPulldownSummary(int i) {
-        if (i == 0) {
-            mQuickPulldown.setSummary(R.string.quick_pulldown_off);
-        } else if (i == 1) {
-            mQuickPulldown.setSummary(R.string.quick_pulldown_right);
-        } else if (i == 2) {
-            mQuickPulldown.setSummary(R.string.quick_pulldown_left);
-        } else if (i == 3) {
-            mQuickPulldown.setSummary(R.string.quick_pulldown_centre);
+    // intMask should only have the desired bit(s) set
+    private int setBit(int intNumber, int intMask, boolean blnState) {
+        if (blnState) {
+            return (intNumber | intMask);
         }
+        return (intNumber & ~intMask);
     }
 
-    private void updateSmartPulldownSummary(int i) {
-        if (i == 0) {
-            mSmartPulldown.setSummary(R.string.smart_pulldown_off);
-        } else if (i == 1) {
-            mSmartPulldown.setSummary(R.string.smart_pulldown_dismissable);
-        } else if (i == 2) {
-            mSmartPulldown.setSummary(R.string.smart_pulldown_persistent);
-        }
-    }
-
-    private static int getScreenType(Context con) {
-        WindowManager wm = (WindowManager) con.getSystemService(Context.WINDOW_SERVICE);
-        DisplayInfo outDisplayInfo = new DisplayInfo();
-        wm.getDefaultDisplay().getDisplayInfo(outDisplayInfo);
-        int shortSize = Math.min(outDisplayInfo.logicalHeight, outDisplayInfo.logicalWidth);
-        int shortSizeDp =
-            shortSize * DisplayMetrics.DENSITY_DEFAULT / outDisplayInfo.logicalDensityDpi;
-        if (shortSizeDp < 600) {
-            return DEVICE_PHONE;
-        } else if (shortSizeDp < 720) {
-            return DEVICE_HYBRID;
-        } else {
-            return DEVICE_TABLET;
-        }
-    }
-
-    public static boolean isPhone(Context con) {
-        return getScreenType(con) == DEVICE_PHONE;
+    private boolean getBit(int intNumber, int intMask) {
+        return (intNumber & intMask) == intMask;
     }
 }
diff --git a/src/org/omnirom/omnigears/interfacesettings/LockscreenSettings.java b/src/org/omnirom/omnigears/interfacesettings/LockscreenSettings.java
new file mode 100644
index 0000000..f10593a
--- /dev/null
+++ b/src/org/omnirom/omnigears/interfacesettings/LockscreenSettings.java
@@ -0,0 +1,139 @@
+/*
+ *  Copyright (C) 2013 The OmniROM Project
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+package org.omnirom.omnigears.interfacesettings;
+
+import android.app.ActivityManager;
+import android.app.ActivityManagerNative;
+import android.app.admin.DevicePolicyManager;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.pm.UserInfo;
+import android.hardware.Camera;
+import android.os.Bundle;
+import android.os.UserManager;
+import android.os.RemoteException;
+import android.preference.CheckBoxPreference;
+import android.preference.ListPreference;
+import android.preference.Preference;
+import android.preference.PreferenceScreen;
+import android.provider.Settings;
+import android.util.Log;
+
+import com.android.internal.widget.LockPatternUtils;
+
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class LockscreenSettings extends SettingsPreferenceFragment {
+    private static final String TAG = "LockscreenSettings";
+
+    private LockPatternUtils mLockPatternUtils;
+    private DevicePolicyManager mDPM;
+
+    private static final String KEY_MAXIMIZE_WIDGETS = "maximize_widgets";
+    private static final String KEY_ENABLE_CAMERA = "enable_camera";
+    private static final String BATTERY_AROUND_LOCKSCREEN_RING = "battery_around_lockscreen_ring";
+
+    private CheckBoxPreference mMaximizeWidgets;
+    private CheckBoxPreference mEnableCameraWidget;
+    private CheckBoxPreference mLockRingBattery;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        addPreferencesFromResource(R.xml.lockscreen_settings);
+
+        ContentResolver resolver = getContentResolver();
+        PreferenceScreen root = getPreferenceScreen();
+        mLockPatternUtils = new LockPatternUtils(getActivity());
+        mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
+
+        if (!mLockPatternUtils.isLockScreenDisabled() && !mLockPatternUtils.isSecure()) {
+            addPreferencesFromResource(R.xml.og_security_settings_chooser);
+        }
+        // Add the additional Omni settings
+        mLockRingBattery = (CheckBoxPreference) root
+                .findPreference(BATTERY_AROUND_LOCKSCREEN_RING);
+        if (mLockRingBattery != null) {
+            mLockRingBattery.setChecked(Settings.System.getInt(getContentResolver(),
+                    Settings.System.BATTERY_AROUND_LOCKSCREEN_RING, 0) == 1);
+        }
+
+
+        // Enable or disable keyguard widget checkbox based on DPM state
+        mMaximizeWidgets = (CheckBoxPreference) findPreference(KEY_MAXIMIZE_WIDGETS);
+        if (ActivityManager.isLowRamDeviceStatic() || mLockPatternUtils.isLockScreenDisabled()) {
+            // Widgets take a lot of RAM, so disable them on low-memory devices
+            root.removePreference(mMaximizeWidgets);
+        } else {
+            mMaximizeWidgets.setChecked(Settings.System.getInt(resolver,
+                    Settings.System.LOCKSCREEN_MAXIMIZE_WIDGETS, 0) == 1);
+        }
+
+        // Enable or disable camera widget settings based on device
+        mEnableCameraWidget = (CheckBoxPreference) findPreference(KEY_ENABLE_CAMERA);
+        if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA) ||
+                Camera.getNumberOfCameras() == 0) {
+            root.removePreference(mEnableCameraWidget);
+        } else if (isCameraDisabledByDpm()) {
+            mEnableCameraWidget.setEnabled(false);
+        } else {
+            mEnableCameraWidget.setChecked(Settings.System.getInt(resolver,
+                    Settings.System.LOCKSCREEN_ENABLE_CAMERA, 1) == 1);
+        }
+    }
+
+    @Override
+    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
+        mLockPatternUtils = new LockPatternUtils(getActivity());
+        if (preference == mMaximizeWidgets) {
+            Settings.System.putInt(getActivity().getApplicationContext().getContentResolver(),
+                    Settings.System.LOCKSCREEN_MAXIMIZE_WIDGETS, mMaximizeWidgets.isChecked() ? 1 : 0);
+        } else if (preference == mLockRingBattery) {
+            Settings.System.putInt(getActivity().getApplicationContext().getContentResolver(),
+                    Settings.System.BATTERY_AROUND_LOCKSCREEN_RING, mLockRingBattery.isChecked() ? 1 : 0);
+        } else if (preference == mEnableCameraWidget) {
+            Settings.System.putInt(getActivity().getApplicationContext().getContentResolver(),
+                    Settings.System.LOCKSCREEN_ENABLE_CAMERA, mEnableCameraWidget.isChecked() ? 1 : 0);
+        }
+        // If we didn't handle it, let preferences handle it.
+        return super.onPreferenceTreeClick(preferenceScreen, preference);
+    }
+
+    private boolean isCameraDisabledByDpm() {
+        final DevicePolicyManager dpm =
+                (DevicePolicyManager) this.getSystemService(Context.DEVICE_POLICY_SERVICE);
+        if (dpm != null) {
+            try {
+                final int userId = ActivityManagerNative.getDefault().getCurrentUser().id;
+                final int disabledFlags = dpm.getKeyguardDisabledFeatures(null, userId);
+                final  boolean disabledBecauseKeyguardSecure =
+                        (disabledFlags & DevicePolicyManager.KEYGUARD_DISABLE_SECURE_CAMERA) != 0;
+                return dpm.getCameraDisabled(null) || disabledBecauseKeyguardSecure;
+            } catch (RemoteException e) {
+                Log.e(TAG, "Can't get userId", e);
+            }
+        }
+        return false;
+    }
+}
diff --git a/src/org/omnirom/omnigears/interfacesettings/MoreInterfaceSettings.java b/src/org/omnirom/omnigears/interfacesettings/MoreInterfaceSettings.java
index 6ce63ac..08e7e69 100644
--- a/src/org/omnirom/omnigears/interfacesettings/MoreInterfaceSettings.java
+++ b/src/org/omnirom/omnigears/interfacesettings/MoreInterfaceSettings.java
@@ -21,8 +21,13 @@
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.R;
 
+import android.app.AlertDialog;
 import android.content.ContentResolver;
 import android.content.Context;
+import android.content.Intent;
+import android.content.DialogInterface;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
 import android.os.Bundle;
 import android.preference.CheckBoxPreference;
 import android.preference.ListPreference;
@@ -42,11 +47,22 @@
     private static final String SHOW_RECENTS_MEMORY_INDICATOR = "show_recents_memory_indicator";
     private static final String RECENTS_MEMORY_INDICATOR_LOCATION =
             "recents_memory_indicator_location";
+    private static final String RECENTS_USE_OMNISWITCH = "recents_use_omniswitch";
+    private static final String OMNISWITCH_START_SETTINGS = "omniswitch_start_settings";
+
+    // Package name of the omnniswitch app
+    public static final String OMNISWITCH_PACKAGE_NAME = "org.omnirom.omniswitch";
+    // Intent for launching the omniswitch settings actvity
+    public static Intent INTENT_OMNISWITCH_SETTINGS = new Intent(Intent.ACTION_MAIN)
+            .setClassName(OMNISWITCH_PACKAGE_NAME, OMNISWITCH_PACKAGE_NAME + ".SettingsActivity");
 
     private CheckBoxPreference mRecentClearAll;
     private ListPreference mRecentClearAllPosition;
     private CheckBoxPreference mShowRecentsMemoryIndicator;
     private ListPreference mRecentsMemoryIndicatorPosition;
+    private CheckBoxPreference mRecentsUseOmniSwitch;
+    private Preference mOmniSwitchSettings;
+    private boolean mOmniSwitchInitCalled;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -80,13 +96,34 @@
             mRecentsMemoryIndicatorPosition.setValue(recentsMemoryIndicatorPosition);
         }
         mRecentsMemoryIndicatorPosition.setOnPreferenceChangeListener(this);
+
+        mRecentsUseOmniSwitch = (CheckBoxPreference)
+                prefSet.findPreference(RECENTS_USE_OMNISWITCH);
+
+        try {
+            mRecentsUseOmniSwitch.setChecked(Settings.System.getInt(resolver,
+                    Settings.System.RECENTS_USE_OMNISWITCH) == 1);
+            mOmniSwitchInitCalled = true;
+        } catch(SettingNotFoundException e){
+            // if the settings value is unset
+        }
+        mRecentsUseOmniSwitch.setOnPreferenceChangeListener(this);
+
+        mOmniSwitchSettings = (Preference)
+                prefSet.findPreference(OMNISWITCH_START_SETTINGS);
+        mOmniSwitchSettings.setEnabled(mRecentsUseOmniSwitch.isChecked());
     }
 
     @Override
     public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
-        return true;
+        if (preference == mOmniSwitchSettings){
+            startActivity(INTENT_OMNISWITCH_SETTINGS);
+            return true;
+        }
+        return super.onPreferenceTreeClick(preferenceScreen, preference);
     }
 
+    @Override
     public boolean onPreferenceChange(Preference preference, Object objValue) {
         ContentResolver resolver = getActivity().getContentResolver();
         if (preference == mRecentClearAll) {
@@ -103,10 +140,59 @@
             String value = (String) objValue;
             Settings.System.putString(
                     resolver, Settings.System.RECENTS_MEMORY_INDICATOR_LOCATION, value);
+        } else if (preference == mRecentsUseOmniSwitch) {
+            boolean value = (Boolean) objValue;
+            if (value && !isOmniSwitchInstalled()){
+                openOmniSwitchNotInstalledWarning();
+                return false;
+            }
+
+            // if value has never been set before
+            if (value && !mOmniSwitchInitCalled){
+                openOmniSwitchFirstTimeWarning();
+                mOmniSwitchInitCalled = true;
+            }
+
+            Settings.System.putInt(
+                    resolver, Settings.System.RECENTS_USE_OMNISWITCH, value ? 1 : 0);
+            mOmniSwitchSettings.setEnabled(value && isOmniSwitchInstalled());
+            mOmniSwitchSettings.setSummary(isOmniSwitchInstalled() ?
+                    getResources().getString(R.string.omniswitch_start_settings_summary) :
+                    getResources().getString(R.string.omniswitch_not_installed_summary));
         } else {
             return false;
         }
 
         return true;
     }
+
+    private void openOmniSwitchNotInstalledWarning() {
+        new AlertDialog.Builder(getActivity())
+                .setTitle(getResources().getString(R.string.omniswitch_not_installed_title))
+                .setMessage(getResources().getString(R.string.omniswitch_not_installed_message))
+                .setNegativeButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+                        public void onClick(DialogInterface dialog, int whichButton) {
+                        }
+                }).show();
+    }
+
+    private void openOmniSwitchFirstTimeWarning() {
+        new AlertDialog.Builder(getActivity())
+                .setTitle(getResources().getString(R.string.omniswitch_first_time_title))
+                .setMessage(getResources().getString(R.string.omniswitch_first_time_message))
+                .setNegativeButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+                        public void onClick(DialogInterface dialog, int whichButton) {
+                        }
+                }).show();
+    }
+
+    private boolean isOmniSwitchInstalled() {
+        final PackageManager pm = getPackageManager();
+        try {
+            pm.getPackageInfo(OMNISWITCH_PACKAGE_NAME, PackageManager.GET_ACTIVITIES);
+            return true;
+        } catch (NameNotFoundException e) {
+            return false;
+        }
+    }
 }
diff --git a/src/org/omnirom/omnigears/notificationlight/NotificationLightSettings.java b/src/org/omnirom/omnigears/notificationlight/NotificationLightSettings.java
index 2ade194..44031ba 100644
--- a/src/org/omnirom/omnigears/notificationlight/NotificationLightSettings.java
+++ b/src/org/omnirom/omnigears/notificationlight/NotificationLightSettings.java
@@ -78,6 +78,7 @@
     private static final String NOTIFICATION_LIGHT_PULSE_VMAIL_COLOR = "notification_light_pulse_vmail_color";
     private static final String NOTIFICATION_LIGHT_PULSE_VMAIL_LED_ON = "notification_light_pulse_vmail_led_on";
     private static final String NOTIFICATION_LIGHT_PULSE_VMAIL_LED_OFF = "notification_light_pulse_vmail_led_off";
+    private static final String NOTIFICAIION_LIGHT_SCREEN_ON = "notification_light_screen_on";
     private static final String PULSE_PREF = "pulse_enabled";
     private static final String DEFAULT_PREF = "default";
     private static final String CUSTOM_PREF = "custom_enabled";
@@ -95,6 +96,7 @@
     private PreferenceGroup mApplicationPrefList;
     private SwitchPreference mEnabledPref;
     private SwitchPreference mCustomEnabledPref;
+    private CheckBoxPreference mScreenOnNotificationLed;
     private ApplicationLightPreference mDefaultPref;
     private ApplicationLightPreference mCallPref;
     private ApplicationLightPreference mVoicemailPref;
@@ -132,6 +134,11 @@
         mDefaultPref = (ApplicationLightPreference) findPreference(DEFAULT_PREF);
         mDefaultPref.setOnPreferenceChangeListener(this);
 
+        mScreenOnNotificationLed = (CheckBoxPreference) findPreference(NOTIFICAIION_LIGHT_SCREEN_ON);
+        mScreenOnNotificationLed.setChecked(Settings.System.getInt(getContentResolver(),
+                Settings.System.SCREEN_ON_NOTIFICATION_LED, 0) == 1);
+        mScreenOnNotificationLed.setOnPreferenceChangeListener(this);
+
         // Missed call and Voicemail preferences should only show on devices with a voice capabilities
         TelephonyManager tm = (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);
         if (tm.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE) {
@@ -371,6 +378,10 @@
                         Settings.System.NOTIFICATION_LIGHT_PULSE_CUSTOM_ENABLE, enabled?1:0);
                 mApplicationPrefList.setEnabled(enabled);
             }
+        } else if (preference == mScreenOnNotificationLed) {
+            boolean value = (Boolean) objValue;
+            Settings.System.putInt(getContentResolver(),
+                    Settings.System.SCREEN_ON_NOTIFICATION_LED, value ? 1 : 0);
         } else {
             ApplicationLightPreference lightPref = (ApplicationLightPreference) preference;
             updateValues(lightPref.getKey(), lightPref.getColor(),
diff --git a/src/org/omnirom/omnigears/preference/GlobalCheckBoxPreference.java b/src/org/omnirom/omnigears/preference/GlobalCheckBoxPreference.java
new file mode 100644
index 0000000..0ba460f
--- /dev/null
+++ b/src/org/omnirom/omnigears/preference/GlobalCheckBoxPreference.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2013 The CyanogenMod project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.omnirom.omnigears.preference;
+
+import android.content.Context;
+import android.preference.CheckBoxPreference;
+import android.provider.Settings;
+import android.util.AttributeSet;
+
+public class GlobalCheckBoxPreference extends CheckBoxPreference {
+    public GlobalCheckBoxPreference(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    public GlobalCheckBoxPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public GlobalCheckBoxPreference(Context context) {
+        super(context, null);
+    }
+
+    @Override
+    protected boolean persistBoolean(boolean value) {
+        if (shouldPersist()) {
+            if (value == getPersistedBoolean(!value)) {
+                // It's already there, so the same as persisting
+                return true;
+            }
+
+            Settings.Global.putInt(getContext().getContentResolver(), getKey(), value ? 1 : 0);
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    protected boolean getPersistedBoolean(boolean defaultReturnValue) {
+        if (!shouldPersist()) {
+            return defaultReturnValue;
+        }
+
+        return Settings.Global.getInt(getContext().getContentResolver(),
+                getKey(), defaultReturnValue ? 1 : 0) != 0;
+    }
+
+    @Override
+    protected boolean isPersisted() {
+        // Using getString instead of getInt so we can simply check for null
+        // instead of catching an exception. (All values are stored as strings.)
+        return Settings.Global.getString(getContext().getContentResolver(), getKey()) != null;
+    }
+}
diff --git a/src/org/omnirom/omnigears/preference/SecureCheckBoxPreference.java b/src/org/omnirom/omnigears/preference/SecureCheckBoxPreference.java
new file mode 100644
index 0000000..8f4e3f9
--- /dev/null
+++ b/src/org/omnirom/omnigears/preference/SecureCheckBoxPreference.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2013 The CyanogenMod project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.omnirom.omnigears.preference;
+
+import android.content.Context;
+import android.preference.CheckBoxPreference;
+import android.provider.Settings;
+import android.util.AttributeSet;
+
+public class SecureCheckBoxPreference extends CheckBoxPreference {
+    public SecureCheckBoxPreference(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    public SecureCheckBoxPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public SecureCheckBoxPreference(Context context) {
+        super(context, null);
+    }
+
+    @Override
+    protected boolean persistBoolean(boolean value) {
+        if (shouldPersist()) {
+            if (value == getPersistedBoolean(!value)) {
+                // It's already there, so the same as persisting
+                return true;
+            }
+
+            Settings.Secure.putInt(getContext().getContentResolver(), getKey(), value ? 1 : 0);
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    protected boolean getPersistedBoolean(boolean defaultReturnValue) {
+        if (!shouldPersist()) {
+            return defaultReturnValue;
+        }
+
+        return Settings.Secure.getInt(getContext().getContentResolver(),
+                getKey(), defaultReturnValue ? 1 : 0) != 0;
+    }
+
+    @Override
+    protected boolean isPersisted() {
+        // Using getString instead of getInt so we can simply check for null
+        // instead of catching an exception. (All values are stored as strings.)
+        return Settings.Secure.getString(getContext().getContentResolver(), getKey()) != null;
+    }
+}
diff --git a/src/org/omnirom/omnigears/preference/SystemCheckBoxPreference.java b/src/org/omnirom/omnigears/preference/SystemCheckBoxPreference.java
new file mode 100644
index 0000000..8a099e7
--- /dev/null
+++ b/src/org/omnirom/omnigears/preference/SystemCheckBoxPreference.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2013 The CyanogenMod project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.omnirom.omnigears.preference;
+
+import android.content.Context;
+import android.preference.CheckBoxPreference;
+import android.provider.Settings;
+import android.util.AttributeSet;
+
+public class SystemCheckBoxPreference extends CheckBoxPreference {
+    public SystemCheckBoxPreference(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    public SystemCheckBoxPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public SystemCheckBoxPreference(Context context) {
+        super(context, null);
+    }
+
+    @Override
+    protected boolean persistBoolean(boolean value) {
+        if (shouldPersist()) {
+            if (value == getPersistedBoolean(!value)) {
+                // It's already there, so the same as persisting
+                return true;
+            }
+
+            Settings.System.putInt(getContext().getContentResolver(), getKey(), value ? 1 : 0);
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    protected boolean getPersistedBoolean(boolean defaultReturnValue) {
+        if (!shouldPersist()) {
+            return defaultReturnValue;
+        }
+
+        return Settings.System.getInt(getContext().getContentResolver(),
+                getKey(), defaultReturnValue ? 1 : 0) != 0;
+    }
+
+    @Override
+    protected boolean isPersisted() {
+        // Using getString instead of getInt so we can simply check for null
+        // instead of catching an exception. (All values are stored as strings.)
+        return Settings.System.getString(getContext().getContentResolver(), getKey()) != null;
+    }
+}
diff --git a/src/org/omnirom/omnigears/slim/StatusBarClockStyle.java b/src/org/omnirom/omnigears/slim/StatusBarClockStyle.java
new file mode 100644
index 0000000..af73dd4
--- /dev/null
+++ b/src/org/omnirom/omnigears/slim/StatusBarClockStyle.java
@@ -0,0 +1,219 @@
+/*
+ * Copyright (C) 2013 Slimroms Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.omnirom.omnigears.slim;
+
+import android.app.AlertDialog;
+import android.os.Bundle;
+import android.preference.CheckBoxPreference;
+import android.preference.ListPreference;
+import android.preference.Preference;
+import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.PreferenceScreen;
+import android.provider.Settings;
+import android.provider.Settings.SettingNotFoundException;
+import android.text.format.DateFormat;
+
+import com.android.settings.R;
+import com.android.settings.SettingsPreferenceFragment;
+
+import java.util.Date;
+
+import org.omnirom.omnigears.interfacesettings.BarsSettings;
+
+public class StatusBarClockStyle extends SettingsPreferenceFragment
+        implements OnPreferenceChangeListener {
+
+    private static final String TAG = "StatusBarClockStyle";
+
+    private static final String PREF_ENABLE = "clock_style";
+    private static final String PREF_AM_PM_STYLE = "status_bar_am_pm";
+    private static final String PREF_CLOCK_DATE_DISPLAY = "clock_date_display";
+    private static final String PREF_CLOCK_DATE_STYLE = "clock_date_style";
+    private static final String PREF_CLOCK_DATE_FORMAT = "clock_date_format";
+    private static final String STATUS_BAR_CLOCK = "status_bar_show_clock";
+
+    public static final int CLOCK_DATE_STYLE_LOWERCASE = 1;
+    public static final int CLOCK_DATE_STYLE_UPPERCASE = 2;
+
+    private ListPreference mClockStyle;
+    private ListPreference mClockAmPmStyle;
+    private ListPreference mClockDateDisplay;
+    private ListPreference mClockDateStyle;
+    private ListPreference mClockDateFormat;
+    private CheckBoxPreference mStatusBarClock;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        createCustomView();
+    }
+
+    private PreferenceScreen createCustomView() {
+        addPreferencesFromResource(R.xml.status_bar_clock_style);
+        PreferenceScreen prefSet = getPreferenceScreen();
+
+        mClockStyle = (ListPreference) findPreference(PREF_ENABLE);
+        mClockStyle.setOnPreferenceChangeListener(this);
+        mClockStyle.setValue(Integer.toString(Settings.System.getInt(getActivity()
+                .getContentResolver(), Settings.System.STATUSBAR_CLOCK_STYLE,
+                0)));
+        mClockStyle.setSummary(mClockStyle.getEntry());
+
+        mClockAmPmStyle = (ListPreference) prefSet.findPreference(PREF_AM_PM_STYLE);
+        mClockAmPmStyle.setOnPreferenceChangeListener(this);
+        mClockAmPmStyle.setValue(Integer.toString(Settings.System.getInt(getActivity()
+                .getContentResolver(), Settings.System.STATUSBAR_CLOCK_AM_PM_STYLE,
+                0)));
+        boolean is24hour = DateFormat.is24HourFormat(getActivity());
+        if (is24hour) {
+            mClockAmPmStyle.setSummary(R.string.status_bar_am_pm_info);
+        } else {
+            mClockAmPmStyle.setSummary(mClockAmPmStyle.getEntry());
+        }
+        mClockAmPmStyle.setEnabled(!is24hour);
+
+        mClockDateDisplay = (ListPreference) findPreference(PREF_CLOCK_DATE_DISPLAY);
+        mClockDateDisplay.setOnPreferenceChangeListener(this);
+        mClockDateDisplay.setValue(Integer.toString(Settings.System.getInt(getActivity()
+                .getContentResolver(), Settings.System.STATUSBAR_CLOCK_DATE_DISPLAY,
+                0)));
+        mClockDateDisplay.setSummary(mClockDateDisplay.getEntry());
+
+        mClockDateStyle = (ListPreference) findPreference(PREF_CLOCK_DATE_STYLE);
+        mClockDateStyle.setOnPreferenceChangeListener(this);
+        mClockDateStyle.setValue(Integer.toString(Settings.System.getInt(getActivity()
+                .getContentResolver(), Settings.System.STATUSBAR_CLOCK_DATE_STYLE,
+                2)));
+        mClockDateStyle.setSummary(mClockDateStyle.getEntry());
+
+        mClockDateFormat = (ListPreference) findPreference(PREF_CLOCK_DATE_FORMAT);
+
+        mClockDateFormat.setOnPreferenceChangeListener(this);
+        String clockDateFormat = Settings.System.getString(getActivity().getContentResolver(),
+                Settings.System.STATUSBAR_CLOCK_DATE_FORMAT);
+        if (clockDateFormat == null) {
+            mClockDateFormat.setValue("EEE");
+        } else {
+            mClockDateFormat.setValue(clockDateFormat);
+        }
+        parseClockDateFormats();
+        mClockDateFormat.setSummary(mClockDateFormat.getEntry());
+
+        mStatusBarClock = (CheckBoxPreference) prefSet.findPreference(STATUS_BAR_CLOCK);
+        mStatusBarClock.setChecked((Settings.System.getInt(
+                getActivity().getApplicationContext().getContentResolver(),
+                Settings.System.STATUS_BAR_CLOCK, 1) == 1));
+        mStatusBarClock.setOnPreferenceChangeListener(this);
+
+        try {
+            if (Settings.System.getInt(getActivity().getApplicationContext().getContentResolver(),
+                    Settings.System.TIME_12_24) == 24) {
+                mClockAmPmStyle.setEnabled(false);
+                mClockAmPmStyle.setSummary(R.string.status_bar_am_pm_info);
+            }
+        } catch (SettingNotFoundException e ) {
+        }
+
+        boolean mClockDateToggle = Settings.System.getInt(getActivity().getContentResolver(),
+                    Settings.System.STATUSBAR_CLOCK_DATE_DISPLAY, 0) != 0;
+        if (!mClockDateToggle) {
+            mClockDateStyle.setEnabled(false);
+            mClockDateFormat.setEnabled(false);
+        }
+
+        return prefSet;
+    }
+
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        if (preference == mClockAmPmStyle) {
+            int val = Integer.parseInt((String) newValue);
+            int index = mClockAmPmStyle.findIndexOfValue((String) newValue);
+            Settings.System.putInt(getActivity().getContentResolver(),
+                    Settings.System.STATUSBAR_CLOCK_AM_PM_STYLE, val);
+            mClockAmPmStyle.setSummary(mClockAmPmStyle.getEntries()[index]);
+            return true;
+        } else if (preference == mClockStyle) {
+            int val = Integer.parseInt((String) newValue);
+            int index = mClockStyle.findIndexOfValue((String) newValue);
+            Settings.System.putInt(getActivity().getContentResolver(),
+                    Settings.System.STATUSBAR_CLOCK_STYLE, val);
+            mClockStyle.setSummary(mClockStyle.getEntries()[index]);
+            return true;
+        } else if (preference == mClockDateDisplay) {
+            int val = Integer.parseInt((String) newValue);
+            int index = mClockDateDisplay.findIndexOfValue((String) newValue);
+            Settings.System.putInt(getActivity().getContentResolver(),
+                    Settings.System.STATUSBAR_CLOCK_DATE_DISPLAY, val);
+            mClockDateDisplay.setSummary(mClockDateDisplay.getEntries()[index]);
+            if (val == 0) {
+                mClockDateStyle.setEnabled(false);
+                mClockDateFormat.setEnabled(false);
+            } else {
+                mClockDateStyle.setEnabled(true);
+                mClockDateFormat.setEnabled(true);
+            }
+            return true;
+        } else if (preference == mClockDateStyle) {
+            int val = Integer.parseInt((String) newValue);
+            int index = mClockDateStyle.findIndexOfValue((String) newValue);
+            Settings.System.putInt(getActivity().getContentResolver(),
+                    Settings.System.STATUSBAR_CLOCK_DATE_STYLE, val);
+            mClockDateStyle.setSummary(mClockDateStyle.getEntries()[index]);
+            parseClockDateFormats();
+            return true;
+        } else if (preference == mStatusBarClock) {
+            Settings.System.putInt(getActivity().getApplicationContext().getContentResolver(),
+                    Settings.System.STATUS_BAR_CLOCK,
+                    (Boolean) newValue ? 1 : 0);
+            return true;
+        } else if (preference == mClockDateFormat) {
+            if ((String) newValue != null) {
+                Settings.System.putString(getActivity().getContentResolver(),
+                        Settings.System.STATUSBAR_CLOCK_DATE_FORMAT, (String) newValue);
+                int idx = mClockDateFormat.findIndexOfValue((String) newValue);
+                mClockDateFormat.setSummary(mClockDateFormat.getEntries()[idx]);
+            }
+            return true;
+        }
+        return false;
+    }
+
+    private void parseClockDateFormats() {
+        // Parse and repopulate mClockDateFormats's entries based on current date.
+        String[] dateEntries = getResources().getStringArray(R.array.clock_date_format_entries_values);
+        CharSequence parsedDateEntries[];
+        parsedDateEntries = new String[dateEntries.length];
+        Date now = new Date();
+
+        int dateFormat = Settings.System.getInt(getActivity()
+                .getContentResolver(), Settings.System.STATUSBAR_CLOCK_DATE_STYLE, 2);
+        for (int i = 0; i < dateEntries.length; i++) {
+            String newDate;
+            CharSequence dateString = DateFormat.format(dateEntries[i], now);
+            if (dateFormat == CLOCK_DATE_STYLE_LOWERCASE) {
+               newDate = dateString.toString().toLowerCase();
+            } else if (dateFormat == CLOCK_DATE_STYLE_UPPERCASE) {
+               newDate = dateString.toString().toUpperCase();
+            } else {
+               newDate = dateString.toString();
+            }
+            parsedDateEntries[i] = newDate;
+        }
+        mClockDateFormat.setEntries(parsedDateEntries);
+    }
+
+}
diff --git a/src/org/omnirom/omnigears/sounds/SoundPackageSettings.java b/src/org/omnirom/omnigears/sounds/SoundPackageSettings.java
new file mode 100644
index 0000000..45e4745
--- /dev/null
+++ b/src/org/omnirom/omnigears/sounds/SoundPackageSettings.java
@@ -0,0 +1,309 @@
+/*
+ *  Copyright (C) 2014 The OmniROM Project
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+package org.omnirom.omnigears.sounds;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+import android.content.ContentResolver;
+import android.os.Bundle;
+import android.os.Environment;
+import android.preference.ListPreference;
+import android.preference.Preference;
+import android.preference.PreferenceScreen;
+import android.provider.Settings;
+import android.util.Log;
+import android.widget.Toast;
+
+import com.android.settings.R;
+import com.android.settings.SettingsPreferenceFragment;
+
+public class SoundPackageSettings extends SettingsPreferenceFragment implements
+        Preference.OnPreferenceChangeListener {
+    private static final String TAG = "SoundPackageSettings";
+
+    private static final String INSTALL_SOUND_PACK = "install_sound_pack";
+    private static final String SELECT_SOUND_PACK = "select_sound_pack";
+
+    private static final String SOUND_PACKS_LOCATION = Environment
+            .getExternalStorageDirectory().getAbsolutePath() + "/SoundPacks/";
+    private static final String INSTALLED_PACKS_LOCATION = "/data/system/soundpacks/";
+
+    private ListPreference mInstallSoundPack;
+    private ListPreference mSelectSoundPack;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        addPreferencesFromResource(R.xml.sound_package_settings);
+
+        PreferenceScreen prefSet = getPreferenceScreen();
+
+        mInstallSoundPack = (ListPreference) prefSet
+                .findPreference(INSTALL_SOUND_PACK);
+        mInstallSoundPack.setOnPreferenceChangeListener(this);
+
+        mSelectSoundPack = (ListPreference) prefSet
+                .findPreference(SELECT_SOUND_PACK);
+        mSelectSoundPack.setOnPreferenceChangeListener(this);
+
+        updatePacks();
+    }
+
+    private void updatePacks() {
+        final ContentResolver resolver = getActivity().getContentResolver();
+        List<String> installablePacks = getInstallablePacks();
+
+        if (installablePacks != null && installablePacks.size() > 0) {
+            CharSequence[] packs = listToCharSeqArray(installablePacks, false);
+            mInstallSoundPack.setEntries(packs);
+            mInstallSoundPack.setEntryValues(packs);
+            mInstallSoundPack.setEnabled(true);
+        } else {
+            mInstallSoundPack.setEnabled(false);
+        }
+
+        List<String> selectablePacks = getInstalledPacks();
+
+        if (selectablePacks != null && selectablePacks.size() > 0) {
+            CharSequence[] packs = listToCharSeqArray(selectablePacks, true);
+            mSelectSoundPack.setEntries(packs);
+            mSelectSoundPack.setEntryValues(packs);
+            mSelectSoundPack.setEnabled(true);
+        } else {
+            mSelectSoundPack.setEnabled(false);
+        }
+
+        String activePack = Settings.System.getString(resolver,
+                Settings.System.CUSTOM_SOUND_EFFECTS_PATH);
+        if (activePack == null
+                || activePack.equals(getResources().getString(
+                        R.string.default_sound_pack)) || activePack.isEmpty()) {
+            mSelectSoundPack.setValueIndex(0);
+        } else {
+            mSelectSoundPack.setValue(packPathToName(activePack));
+        }
+    }
+
+    private static String packPathToName(String path) {
+        String output = path.substring(0, path.length() - 1);
+        output = output.substring(output.lastIndexOf('/') + 1);
+        return output;
+    }
+
+    @Override
+    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
+            Preference preference) {
+        return true;
+    }
+
+    public boolean onPreferenceChange(Preference preference, Object objValue) {
+        if (preference == mInstallSoundPack) {
+            try {
+                installPack((String) objValue);
+            } catch (IOException e) {
+                Toast.makeText(getActivity(),
+                        getResources().getString(R.string.error_pack_install),
+                        Toast.LENGTH_LONG).show();
+                Log.e(TAG, "Unable to install sound pack", e);
+            }
+            return true;
+        } else if (preference == mSelectSoundPack) {
+            selectPack((String) objValue);
+            return true;
+        }
+
+        return false;
+    }
+
+    private CharSequence[] listToCharSeqArray(List<String> list,
+            boolean addDefault) {
+        CharSequence[] packs = new CharSequence[addDefault ? list.size() + 1
+                : list.size()];
+        int i = addDefault ? 1 : 0;
+
+        if (addDefault) {
+            packs[0] = getResources().getString(R.string.default_sound_pack);
+        }
+
+        for (String pack : list) {
+            packs[i] = pack;
+            i++;
+        }
+
+        return packs;
+    }
+
+    public static String stripExtension(String str) {
+        if (str == null)
+            return null;
+        int pos = str.lastIndexOf(".");
+        if (pos == -1)
+            return str;
+        return str.substring(0, pos);
+    }
+
+    private List<String> getInstallablePacks() {
+        File packsDir = new File(SOUND_PACKS_LOCATION);
+
+        Log.d(TAG, "Looking for sound packs in " + SOUND_PACKS_LOCATION);
+
+        // Get all ZIP files in our soundpack install location
+        File[] availPacks = packsDir.listFiles(new FilenameFilter() {
+            @Override
+            public boolean accept(File dir, String filename) {
+                // Must be lowercase
+                return filename.endsWith(".zip");
+            }
+        });
+
+        if (availPacks == null || availPacks.length == 0) {
+            Log.d(TAG, "No installable packs found!");
+            return null;
+        }
+
+        // Filter the pack we already have
+        List<String> installedPacks = getInstalledPacks();
+        List<String> filteredPacks = new ArrayList<String>();
+
+        for (File pack : availPacks) {
+            String packName = stripExtension(pack.getName());
+
+            // XXX: originally, we had this. However, this can cause troubles
+            // when designing
+            // your sound package as you cannot reinstall a package that has
+            // already been
+            // installed (unless you change name every time).
+            // We keep on displaying installable already installed packs instead
+            // until we
+            // implement package uninstaller
+            /*
+             * if (installedPacks == null || (installedPacks.size() > 0 &&
+             * !installedPacks .contains(packName))) {
+             * filteredPacks.add(packName); }
+             */
+            filteredPacks.add(packName);
+        }
+
+        return filteredPacks;
+    }
+
+    private List<String> getInstalledPacks() {
+        File packsDir = new File(INSTALLED_PACKS_LOCATION);
+        if (packsDir.list() != null) {
+            return Arrays.asList(packsDir.list());
+        } else {
+            return null;
+        }
+    }
+
+    private void extractFile(ZipInputStream zipIn, String filePath)
+            throws IOException {
+        BufferedOutputStream bos = new BufferedOutputStream(
+                new FileOutputStream(filePath));
+        byte[] bytesIn = new byte[8192];
+        int read = 0;
+        while ((read = zipIn.read(bytesIn)) != -1) {
+            bos.write(bytesIn, 0, read);
+        }
+        bos.close();
+    }
+
+    private void selectPack(String packName) {
+        final ContentResolver resolver = getActivity().getContentResolver();
+
+        if (packName.equals(getResources().getString(
+                R.string.default_sound_pack))) {
+            Settings.System.putString(resolver,
+                    Settings.System.CUSTOM_SOUND_EFFECTS_PATH, null);
+        } else {
+            Settings.System.putString(resolver,
+                    Settings.System.CUSTOM_SOUND_EFFECTS_PATH,
+                    INSTALLED_PACKS_LOCATION + packName + "/");
+        }
+
+    }
+
+    private void installPack(String packName) throws IOException {
+        // Copy package contents (.ogg and .xml only) to
+        // /data/system/soundpacks/<name>/
+        File rootDir = new File(INSTALLED_PACKS_LOCATION);
+        if (!rootDir.exists()) {
+            rootDir.mkdir();
+            rootDir.setWritable(true, true);
+            rootDir.setReadable(true, false);
+            rootDir.setExecutable(true, false);
+        }
+        File destDir = new File(INSTALLED_PACKS_LOCATION + packName);
+        if (!destDir.exists()) {
+            destDir.mkdir();
+            destDir.setWritable(true, true);
+            destDir.setReadable(true, false);
+            destDir.setExecutable(true, false);
+        }
+
+        ZipInputStream zipIn = new ZipInputStream(new FileInputStream(
+                SOUND_PACKS_LOCATION + packName + ".zip"));
+
+        ZipEntry entry = zipIn.getNextEntry();
+
+        while (entry != null) {
+            if (!entry.getName().endsWith(".xml")
+                    && !entry.getName().endsWith(".ogg")) {
+                // We only care about xml and ogg files
+                zipIn.closeEntry();
+                entry = zipIn.getNextEntry();
+                continue;
+            }
+
+            String filePath = INSTALLED_PACKS_LOCATION + packName + "/"
+                    + entry.getName();
+            if (!entry.isDirectory()) {
+                extractFile(zipIn, filePath);
+
+                // Update permissions (644 / rw-r--r--)
+                File copied = new File(filePath);
+                copied.setExecutable(false);
+                copied.setReadable(true, false);
+                copied.setWritable(true, true);
+            } else {
+                File dir = new File(filePath);
+                dir.mkdir();
+                destDir.setWritable(true, true);
+                destDir.setReadable(true, false);
+                destDir.setExecutable(true, false);
+            }
+
+            zipIn.closeEntry();
+            entry = zipIn.getNextEntry();
+        }
+        zipIn.close();
+
+        updatePacks();
+    }
+}
