diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 90d8793..8e58f48 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -813,6 +813,23 @@
                 android:value="true" />
         </activity>
 
+        <activity android:name="Settings$ZenModeAutomationSuggestionActivity"
+                android:label="@string/zen_mode_automation_settings_title"
+                android:icon="@drawable/ic_settings_notifications"
+                android:exported="true"
+                android:taskAffinity="">
+            <intent-filter android:priority="1">
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="com.android.settings.suggested.category.SETTINGS_ONLY" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                android:value="com.android.settings.notification.ZenModeAutomationSettings" />
+            <meta-data android:name="com.android.settings.dismiss"
+                android:value="30" />
+            <meta-data android:name="com.android.settings.title"
+                android:resource="@string/zen_mode_automation_suggestion_title" />
+        </activity>
+
         <activity android:name="Settings$ZenModeScheduleRuleSettingsActivity"
                 android:exported="true"
                 android:taskAffinity="">
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 9336fee..b510872 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5768,6 +5768,9 @@
     <!--  Do not disturb: Title for the zen mode automation option and associated settings page. [CHAR LIMIT=30] -->
     <string name="zen_mode_automation_settings_title">Automatic rules</string>
 
+    <!--  Do not disturb: Title for the zen mode automation option Suggestion. [CHAR LIMIT=30] -->
+    <string name="zen_mode_automation_suggestion_title">Set up Do Not Disturb Schedule</string>
+
     <!--  Do not disturb: Zen mode option: Important interruptions [CHAR LIMIT=60] -->
     <string name="zen_mode_option_important_interruptions">Priority only</string>
 
diff --git a/res/xml/suggestion_ordering.xml b/res/xml/suggestion_ordering.xml
index 339b195..55f7803 100644
--- a/res/xml/suggestion_ordering.xml
+++ b/res/xml/suggestion_ordering.xml
@@ -22,4 +22,6 @@
         multiple="true" />
     <step category="com.android.settings.suggested.category.DEFAULT"
         multiple="true" />
+    <step category="com.android.settings.suggested.category.SETTINGS_ONLY"
+        multiple="true" />
 </optional-steps>
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 1c636b8..99e6968 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -103,6 +103,7 @@
     public static class ZenModeSettingsActivity extends SettingsActivity { /* empty */ }
     public static class ZenModePrioritySettingsActivity extends SettingsActivity { /* empty */ }
     public static class ZenModeAutomationSettingsActivity extends SettingsActivity { /* empty */ }
+    public static class ZenModeAutomationSuggestionActivity extends SettingsActivity { /* empty */ }
     public static class ZenModeScheduleRuleSettingsActivity extends SettingsActivity { /* empty */ }
     public static class ZenModeEventRuleSettingsActivity extends SettingsActivity { /* empty */ }
     public static class ZenModeExternalRuleSettingsActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java
index 0d92c62..f40fa9c 100644
--- a/src/com/android/settings/dashboard/DashboardAdapter.java
+++ b/src/com/android/settings/dashboard/DashboardAdapter.java
@@ -43,6 +43,10 @@
 public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.DashboardItemHolder>
         implements View.OnClickListener {
     public static final String TAG = "DashboardAdapter";
+    private static final int NS_SPACER = 0;
+    private static final int NS_SUGGESTION = 1000;
+    private static final int NS_ITEMS = 2000;
+    private static final int NS_CONDITION = 3000;
 
     private static int SUGGESTION_MODE_DEFAULT = 0;
     private static int SUGGESTION_MODE_COLLAPSED = 1;
@@ -55,6 +59,7 @@
     private final List<Integer> mIds = new ArrayList<>();
 
     private final Context mContext;
+    private final SuggestionsChecks mSuggestionsChecks;
 
     private List<DashboardCategory> mCategories;
     private List<Condition> mConditions;
@@ -71,13 +76,20 @@
 
     public DashboardAdapter(Context context) {
         mContext = context;
+        mSuggestionsChecks = new SuggestionsChecks(mContext);
 
         setHasStableIds(true);
     }
 
     public void setSuggestions(SuggestionParser suggestionParser) {
-        mSuggestions = suggestionParser.getSuggestions();
         mSuggestionParser = suggestionParser;
+        mSuggestions = suggestionParser.getSuggestions();
+        for (int i = 0; i < mSuggestions.size(); i++) {
+            if (mSuggestionsChecks.isSuggestionComplete(mSuggestions.get(i))) {
+                disableSuggestion(mSuggestions.get(i));
+                mSuggestions.remove(i--);
+            }
+        }
         recountItems();
     }
 
@@ -127,35 +139,42 @@
         for (int i = 0; mConditions != null && i < mConditions.size(); i++) {
             boolean shouldShow = mConditions.get(i).shouldShow();
             hasConditions |= shouldShow;
-            countItem(mConditions.get(i), R.layout.condition_card, shouldShow);
+            countItem(mConditions.get(i), R.layout.condition_card, shouldShow, NS_CONDITION);
         }
         boolean hasSuggestions = mSuggestions != null && mSuggestions.size() != 0;
-        countItem(null, R.layout.dashboard_spacer, hasConditions && hasSuggestions);
-        countItem(null, R.layout.suggestion_header, hasSuggestions);
+        countItem(null, R.layout.dashboard_spacer, hasConditions && hasSuggestions, NS_SPACER);
+        countItem(null, R.layout.suggestion_header, hasSuggestions, NS_SPACER);
+        resetCount();
         if (mSuggestions != null) {
             int maxSuggestions = mSuggestionMode == SUGGESTION_MODE_DEFAULT
                     ? Math.min(DEFAULT_SUGGESTION_COUNT, mSuggestions.size())
                     : mSuggestionMode == SUGGESTION_MODE_EXPANDED ? mSuggestions.size()
                     : 0;
             for (int i = 0; i < mSuggestions.size(); i++) {
-                countItem(mSuggestions.get(i), R.layout.suggestion_tile, i < maxSuggestions);
+                countItem(mSuggestions.get(i), R.layout.suggestion_tile, i < maxSuggestions,
+                        NS_SUGGESTION);
             }
         }
-        countItem(null, R.layout.dashboard_spacer, true);
+        countItem(null, R.layout.dashboard_spacer, true, NS_SPACER);
+        resetCount();
         for (int i = 0; mCategories != null && i < mCategories.size(); i++) {
             DashboardCategory category = mCategories.get(i);
-            countItem(category, R.layout.dashboard_category, mIsShowingAll);
+            countItem(category, R.layout.dashboard_category, mIsShowingAll, NS_ITEMS);
             for (int j = 0; j < category.tiles.size(); j++) {
                 Tile tile = category.tiles.get(j);
                 countItem(tile, R.layout.dashboard_tile, mIsShowingAll
                         || ArrayUtils.contains(DashboardSummary.INITIAL_ITEMS,
-                        tile.intent.getComponent().getClassName()));
+                        tile.intent.getComponent().getClassName()), NS_ITEMS);
             }
         }
-        countItem(null, R.layout.see_all, true);
+        countItem(null, R.layout.see_all, true, NS_ITEMS);
         notifyDataSetChanged();
     }
 
+    private void resetCount() {
+        mId = 0;
+    }
+
     private void reset() {
         mItems.clear();
         mTypes.clear();
@@ -163,12 +182,12 @@
         mId = 0;
     }
 
-    private void countItem(Object object, int type, boolean add) {
+    private void countItem(Object object, int type, boolean add, int nameSpace) {
         if (add) {
             mItems.add(object);
             mTypes.add(type);
             // TODO: Counting namespaces for handling of suggestions/conds appearing/disappearing.
-            mIds.add(mId);
+            mIds.add(mId + nameSpace);
         }
         mId++;
     }
@@ -238,12 +257,7 @@
                 new MenuItem.OnMenuItemClickListener() {
             @Override
             public boolean onMenuItemClick(MenuItem item) {
-                if (mSuggestionParser.dismissSuggestion(suggestion)) {
-                    mContext.getPackageManager().setComponentEnabledSetting(
-                            suggestion.intent.getComponent(),
-                            PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
-                            PackageManager.DONT_KILL_APP);
-                }
+                disableSuggestion(suggestion);
                 mSuggestions.remove(suggestion);
                 recountItems();
                 return true;
@@ -252,6 +266,15 @@
         popup.show();
     }
 
+    private void disableSuggestion(Tile suggestion) {
+        if (mSuggestionParser.dismissSuggestion(suggestion)) {
+            mContext.getPackageManager().setComponentEnabledSetting(
+                    suggestion.intent.getComponent(),
+                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+                    PackageManager.DONT_KILL_APP);
+        }
+    }
+
     private void onBindSuggestionHeader(final DashboardItemHolder holder) {
         holder.icon.setImageResource(hasMoreSuggestions() ? R.drawable.ic_expand_more
                 : R.drawable.ic_expand_less);
diff --git a/src/com/android/settings/dashboard/SuggestionsChecks.java b/src/com/android/settings/dashboard/SuggestionsChecks.java
new file mode 100644
index 0000000..b8a03c4
--- /dev/null
+++ b/src/com/android/settings/dashboard/SuggestionsChecks.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+
+package com.android.settings.dashboard;
+
+import android.app.AutomaticZenRule;
+import android.app.NotificationManager;
+import android.content.Context;
+import com.android.settings.Settings.ZenModeAutomationSuggestionActivity;
+import com.android.settingslib.drawer.Tile;
+
+import java.util.List;
+
+/**
+ * The Home of all stupidly dynamic Settings Suggestions checks.
+ */
+public class SuggestionsChecks {
+
+    private final Context mContext;
+
+    public SuggestionsChecks(Context context) {
+        mContext = context;
+    }
+
+    public boolean isSuggestionComplete(Tile suggestion) {
+        if (suggestion.intent.getComponent().getClassName().equals(
+                ZenModeAutomationSuggestionActivity.class.getName())) {
+            return hasEnabledZenAutoRules();
+        }
+        return false;
+    }
+
+    private boolean hasEnabledZenAutoRules() {
+        List<AutomaticZenRule> zenRules = NotificationManager.from(mContext).getAutomaticZenRules();
+        final int N = zenRules.size();
+        for (int i = 0; i < N; i++) {
+            if (zenRules.get(i).isEnabled()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+}
