diff --git a/doze/res/values/strings.xml b/doze/res/values/strings.xml
index 2b54bfb..273a211 100644
--- a/doze/res/values/strings.xml
+++ b/doze/res/values/strings.xml
@@ -17,6 +17,11 @@
     <string name="screen_gestures_panel_title">Gestures</string>
     <string name="screen_gestures_panel_summary">Use gestures to perform actions</string>
 
+    <string name="ambient_display_title">Ambient display</string>
+
+    <string name="ambient_display_enable_title">Ambient display</string>
+    <string name="ambient_display_enable_summary">Wake screen when you receive notifications</string>
+
     <string name="hand_wave_gesture_title">Hand wave</string>
     <string name="hand_wave_gesture_summary">Pulse notifications on hand wave</string>
 
diff --git a/doze/res/xml/gesture_panel.xml b/doze/res/xml/gesture_panel.xml
index 61d639b..ba48f9d 100644
--- a/doze/res/xml/gesture_panel.xml
+++ b/doze/res/xml/gesture_panel.xml
@@ -1,10 +1,13 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
      Copyright (C) 2015 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.
@@ -13,16 +16,27 @@
 -->
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
 
-    <SwitchPreference
-        android:key="gesture_hand_wave"
-        android:defaultValue="false"
-        android:title="@string/hand_wave_gesture_title"
-        android:summary="@string/hand_wave_gesture_summary" />
+    <PreferenceCategory
+        android:key="ambient_display_key"
+        android:title="@string/ambient_display_title" >
 
-    <SwitchPreference
-        android:key="gesture_pocket"
-        android:defaultValue="false"
-        android:title="@string/pocket_gesture_title"
-        android:summary="@string/pocket_gesture_summary" />
+        <SwitchPreference
+            android:key="ambient_display_enable"
+            android:defaultValue="true"
+            android:title="@string/ambient_display_enable_title"
+            android:summary="@string/ambient_display_enable_summary" />
 
-</PreferenceScreen>
+        <SwitchPreference
+            android:key="gesture_hand_wave"
+            android:defaultValue="false"
+            android:title="@string/hand_wave_gesture_title"
+            android:summary="@string/hand_wave_gesture_summary" />
+
+        <SwitchPreference
+            android:key="gesture_pocket"
+            android:defaultValue="false"
+            android:title="@string/pocket_gesture_title"
+            android:summary="@string/pocket_gesture_summary" />
+    </PreferenceCategory>
+
+</PreferenceScreen>
\ No newline at end of file
diff --git a/doze/src/com/cyanogenmod/settings/device/TouchscreenGestureSettings.java b/doze/src/com/cyanogenmod/settings/device/TouchscreenGestureSettings.java
index bb40546..e685c7e 100644
--- a/doze/src/com/cyanogenmod/settings/device/TouchscreenGestureSettings.java
+++ b/doze/src/com/cyanogenmod/settings/device/TouchscreenGestureSettings.java
@@ -19,14 +19,37 @@
 import com.android.internal.util.cm.ScreenType;
 
 import android.os.Bundle;
+import android.preference.Preference;
 import android.preference.PreferenceActivity;
+import android.preference.SwitchPreference;
+import android.provider.Settings;
 
 public class TouchscreenGestureSettings extends PreferenceActivity {
 
+    private static final String KEY_AMBIENT_DISPLAY_ENABLE = "ambient_display_enable";
+    private static final String KEY_HAND_WAVE = "gesture_hand_wave";
+    private static final String KEY_GESTURE_POCKET = "gesture_pocket";
+
+    private SwitchPreference mAmbientDisplayPreference;
+    private SwitchPreference mHandwavePreference;
+    private SwitchPreference mPocketPreference;
+
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         addPreferencesFromResource(R.xml.gesture_panel);
+        boolean dozeEnabled = isDozeEnabled();
+        mAmbientDisplayPreference =
+            (SwitchPreference) findPreference(KEY_AMBIENT_DISPLAY_ENABLE);
+        // Read from DOZE_ENABLED secure setting
+        mAmbientDisplayPreference.setChecked(dozeEnabled);
+        mAmbientDisplayPreference.setOnPreferenceChangeListener(mAmbientDisplayPrefListener);
+        mHandwavePreference =
+            (SwitchPreference) findPreference(KEY_HAND_WAVE);
+        mHandwavePreference.setEnabled(dozeEnabled);
+        mPocketPreference =
+            (SwitchPreference) findPreference(KEY_GESTURE_POCKET);
+        mPocketPreference.setEnabled(dozeEnabled);
     }
 
     @Override
@@ -38,4 +61,28 @@
             getListView().setPadding(0, 0, 0, 0);
         }
     }
+
+    private boolean enableDoze(boolean enable) {
+        return Settings.Secure.putInt(getContentResolver(),
+                Settings.Secure.DOZE_ENABLED, enable ? 1 : 0);
+    }
+
+    private boolean isDozeEnabled() {
+        return Settings.Secure.getInt(getContentResolver(),
+                Settings.Secure.DOZE_ENABLED, 1) != 0;
+    }
+
+    private Preference.OnPreferenceChangeListener mAmbientDisplayPrefListener =
+        new Preference.OnPreferenceChangeListener() {
+        @Override
+        public boolean onPreferenceChange(Preference preference, Object newValue) {
+            boolean enable = (boolean) newValue;
+            boolean ret = enableDoze(enable);
+            if (ret) {
+                mHandwavePreference.setEnabled(enable);
+                mPocketPreference.setEnabled(enable);
+            }
+            return ret;
+        }
+    };
 }
