diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index 10948ca..f56e144 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -239,7 +239,7 @@
     <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_bypass_summary">Pocket mode will launch the lockscreen when no notifications exist and lockscreen secure enabled</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_content_title">Custom notification view</string>
@@ -248,6 +248,19 @@
     <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_shake_event_settings_title">Shake settings</string>
+    <string name="ad_shake_event_title">Shake to redisplay</string>
+    <string name="ad_shake_event_summary">Shake device to redisplay notifications</string>
+    <string name="ad_shake_force_title">Default event</string>
+    <string name="ad_shake_force_summary">After receive a notification won\'t run active display until user shakes</string>
+    <string name="ad_shake_threshold_title">Intensity</string>
+    <string name="ad_shake_threshold_summary">Intensity of shake needed to display notifications</string>
+    <string name="ad_shake_timeout_title">Timeout</string>
+    <string name="ad_shake_timeout_summary">Seconds that shake is active after receiving a notification, 0 means always active.</string>
+    <string name="ad_shake_quiet_hours_title">Bypass Quiet Hours</string>
+    <string name="ad_shake_quiet_hours_summary">Allow shake during Quiet Hours</string>
+    <string name="ad_shake_long_threshold_title">Interval</string>
+    <string name="ad_shake_long_threshold_summary">Minimum time between consecutive shakes</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>
diff --git a/res/xml/active_display_settings.xml b/res/xml/active_display_settings.xml
index 3b615cc..9a0f588 100644
--- a/res/xml/active_display_settings.xml
+++ b/res/xml/active_display_settings.xml
@@ -31,6 +31,13 @@
         android:summary="@string/ad_content_summary"
         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"/>
+
     <org.omnirom.omnigears.preference.SystemCheckBoxPreference
         android:key="active_display_text"
         android:title="@string/ad_text_title"
@@ -59,13 +66,6 @@
         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"
@@ -94,6 +94,64 @@
         android:dependency="ad_enable" />
 
     <PreferenceCategory
+        android:key="ad_shake_event"
+        android:title="@string/ad_shake_event_settings_title" />
+
+        <org.omnirom.omnigears.preference.SystemCheckBoxPreference
+            android:key="active_display_shake_event"
+            android:title="@string/ad_shake_event_title"
+            android:summary="@string/ad_shake_event_summary"
+            android:dependency="ad_enable"/>
+
+        <org.omnirom.omnigears.preference.SystemCheckBoxPreference
+            android:key="active_display_shake_force"
+            android:title="@string/ad_shake_force_title"
+            android:summary="@string/ad_shake_force_summary"
+            android:dependency="active_display_shake_event"/>
+
+        <org.omnirom.omnigears.chameleonos.SeekBarPreference
+            android:key="ad_shake_threshold"
+            android:persistent="false"
+            android:title="@string/ad_shake_threshold_title"
+            android:summary="@string/ad_shake_threshold_summary"
+            android:max="20"
+            settings:min="5"
+            settings:interval="1"
+            settings:unitsLeft=""
+            settings:unitsRight=""
+            android:dependency="active_display_shake_event" />
+
+        <org.omnirom.omnigears.chameleonos.SeekBarPreference
+            android:key="ad_shake_long_threshold"
+            android:persistent="false"
+            android:title="@string/ad_shake_long_threshold_title"
+            android:summary="@string/ad_shake_long_threshold_summary"
+            android:max="5"
+            settings:min="1"
+            settings:interval="1"
+            settings:unitsLeft=""
+            settings:unitsRight="s"
+            android:dependency="active_display_shake_event" />
+
+        <org.omnirom.omnigears.chameleonos.SeekBarPreference
+            android:key="ad_shake_timeout"
+            android:persistent="false"
+            android:title="@string/ad_shake_timeout_title"
+            android:summary="@string/ad_shake_timeout_summary"
+            android:max="120"
+            settings:min="0"
+            settings:interval="1"
+            settings:unitsLeft=""
+            settings:unitsRight="s"
+            android:dependency="active_display_shake_event" />
+
+        <org.omnirom.omnigears.preference.SystemCheckBoxPreference
+            android:key="active_display_shake_quiet_hours"
+            android:title="@string/ad_shake_quiet_hours_title"
+            android:summary="@string/ad_shake_quiet_hours_summary"
+            android:dependency="active_display_shake_event"/>
+
+    <PreferenceCategory
         android:key="ad_customizations"
         android:title="@string/ad_customizations_title" />
 
diff --git a/src/org/omnirom/omnigears/chameleonos/ActiveDisplaySettings.java b/src/org/omnirom/omnigears/chameleonos/ActiveDisplaySettings.java
index 2002c64..5de3a49 100644
--- a/src/org/omnirom/omnigears/chameleonos/ActiveDisplaySettings.java
+++ b/src/org/omnirom/omnigears/chameleonos/ActiveDisplaySettings.java
@@ -40,8 +40,6 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import android.util.Log;
-
 public class ActiveDisplaySettings extends SettingsPreferenceFragment implements
         OnPreferenceChangeListener {
     private static final String TAG = "ActiveDisplaySettings";
@@ -59,6 +57,9 @@
     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 static final String KEY_SHAKE_THRESHOLD = "ad_shake_threshold";
+    private static final String KEY_SHAKE_LONGTHRESHOLD = "ad_shake_long_threshold";
+    private static final String KEY_SHAKE_TIMEOUT = "ad_shake_timeout";
 
     private ContentResolver mResolver;
     private Context mContext;
@@ -72,6 +73,9 @@
     private CheckBoxPreference mTurnOffModePref;
     private SeekBarPreference mBrightnessLevel;
     private SeekBarPreference mAnnoyingNotification;
+    private SeekBarPreference mShakeThreshold;
+    private SeekBarPreference mShakeLongThreshold;
+    private SeekBarPreference mShakeTimeout;
     private ListPreference mDisplayTimeout;
     private ListPreference mPocketModePref;
     private ListPreference mProximityThreshold;
@@ -79,7 +83,6 @@
     private int mMinimumBacklight;
     private int mMaximumBacklight;
 
-
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -146,6 +149,21 @@
                 Settings.System.ACTIVE_DISPLAY_ANNOYING, 0));
         mAnnoyingNotification.setOnPreferenceChangeListener(this);
 
+        mShakeThreshold = (SeekBarPreference) prefSet.findPreference(KEY_SHAKE_THRESHOLD);
+        mShakeThreshold.setValue(Settings.System.getInt(mResolver,
+                Settings.System.ACTIVE_DISPLAY_SHAKE_THRESHOLD, 10));
+        mShakeThreshold.setOnPreferenceChangeListener(this);
+
+        mShakeLongThreshold = (SeekBarPreference) prefSet.findPreference(KEY_SHAKE_LONGTHRESHOLD);
+        mShakeLongThreshold.setValue(Settings.System.getInt(mResolver,
+                Settings.System.ACTIVE_DISPLAY_SHAKE_LONGTHRESHOLD, 2));
+        mShakeLongThreshold.setOnPreferenceChangeListener(this);
+
+        mShakeTimeout = (SeekBarPreference) prefSet.findPreference(KEY_SHAKE_TIMEOUT);
+        mShakeTimeout.setValue(Settings.System.getInt(mResolver,
+                Settings.System.ACTIVE_DISPLAY_SHAKE_TIMEOUT, 10));
+        mShakeTimeout.setOnPreferenceChangeListener(this);
+
         mExcludedAppsPref = (AppMultiSelectListPreference) prefSet.findPreference(KEY_EXCLUDED_APPS);
         Set<String> excludedApps = getExcludedApps();
         if (excludedApps != null) {
@@ -163,6 +181,7 @@
         mShowAmPmPref = (CheckBoxPreference) prefSet.findPreference(KEY_SHOW_AMPM);
         mShowAmPmPref.setChecked((Settings.System.getInt(mResolver,
                 Settings.System.ACTIVE_DISPLAY_SHOW_AMPM, 0) == 1));
+        mShowAmPmPref.setEnabled(!is24Hour());
 
         PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
         mMinimumBacklight = pm.getMinimumScreenBrightnessSetting();
@@ -173,7 +192,16 @@
                 Settings.System.ACTIVE_DISPLAY_BRIGHTNESS, mMaximumBacklight);
         int realBrightness =  Math.round(((float)brightness / (float)mMaximumBacklight) * 100);
         mBrightnessLevel.setValue(realBrightness);
-        mBrightnessLevel.setOnPreferenceChangeListener(this); 
+        mBrightnessLevel.setOnPreferenceChangeListener(this);
+
+        try {
+            if (Settings.System.getInt(mResolver,
+                    Settings.System.SCREEN_BRIGHTNESS_MODE) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
+                mBrightnessLevel.setEnabled(false);
+                mBrightnessLevel.setSummary(R.string.status_bar_toggle_info);
+            }
+        } catch (SettingNotFoundException e) {
+        }
 
         mDisplayTimeout = (ListPreference) prefSet.findPreference(KEY_TIMEOUT);
         timeout = Settings.System.getLong(mResolver,
@@ -215,6 +243,21 @@
             Settings.System.putInt(mResolver,
                     Settings.System.ACTIVE_DISPLAY_ANNOYING, annoying);
             return true;
+        } else if (preference == mShakeThreshold) {
+            int threshold = ((Integer)newValue).intValue();
+            Settings.System.putInt(mResolver,
+                    Settings.System.ACTIVE_DISPLAY_SHAKE_THRESHOLD, threshold);
+            return true;
+        } else if (preference == mShakeLongThreshold) {
+            int longThreshold = ((Integer)newValue).intValue();
+            Settings.System.putInt(mResolver,
+                    Settings.System.ACTIVE_DISPLAY_SHAKE_LONGTHRESHOLD, longThreshold);
+            return true;
+        } else if (preference == mShakeTimeout) {
+            int timeout = ((Integer)newValue).intValue();
+            Settings.System.putInt(mResolver,
+                    Settings.System.ACTIVE_DISPLAY_SHAKE_TIMEOUT, timeout);
+            return true;
         } else if (preference == mBrightnessLevel) {
             int brightness = ((Integer)newValue).intValue();
             int realBrightness =  Math.max(mMinimumBacklight, Math.round(((float)brightness / (float)100) * mMaximumBacklight));
