diff --git a/res/values/strings.xml b/res/values/strings.xml
index 9ab180d..9d2f1f0 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5699,7 +5699,26 @@
     <!-- Sound & notification > Notification section: Title for the option managing notifications per topic. [CHAR LIMIT=30] -->
     <string name="topic_notifications_title">Topic notifications</string>
 
+    <!-- [CHAR LIMIT=100] Notification topic list header -->
+    <string name="notification_topic_categories">Categories</string>
 
+    <!-- [CHAR LIMIT=100] Notification importance slider title -->
+    <string name="notification_importance_title">Importance</string>
+
+    <!-- [CHAR LIMIT=100] Notification Importance slider: blocked importance level description -->
+    <string name="notification_importance_blocked">Blocked: Never show these notifications</string>
+
+    <!-- [CHAR LIMIT=100] Notification Importance slider: low importance level description -->
+    <string name="notification_importance_low">Low: Silently show at the bottom of the notification list</string>
+
+    <!-- [CHAR LIMIT=100] Notification Importance slider: normal importance level description -->
+    <string name="notification_importance_default">Normal: Silently show these notifications</string>
+
+    <!-- [CHAR LIMIT=100] Notification Importance slider: high importance level description -->
+    <string name="notification_importance_high">High: Show at the top of the notifications list and make sound</string>
+
+    <!-- [CHAR LIMIT=100] Notification Importance slider: max importance level description -->
+    <string name="notification_importance_max">Urgent: Peek onto the screen and make sound</string>
 
     <!-- Sound & notification > Advanced section: Title for managing notification listeners option. [CHAR LIMIT=30] -->
     <string name="manage_notification_access_title">Notification access</string>
diff --git a/res/xml/app_notification_settings.xml b/res/xml/app_notification_settings.xml
index 6e27a07..5f00caf 100644
--- a/res/xml/app_notification_settings.xml
+++ b/res/xml/app_notification_settings.xml
@@ -30,7 +30,12 @@
     <Preference
             android:key="app_settings"
             android:title="@string/app_notification_preferences"
-            android:order="5"
+            android:order="2"
             android:persistent="false" />
 
+    <PreferenceCategory
+            android:key="categories"
+            android:title="@string/notification_topic_categories"
+            android:order="3" />
+
 </PreferenceScreen>
diff --git a/res/xml/topic_notification_settings.xml b/res/xml/topic_notification_settings.xml
index 174c273..d5f28b3 100644
--- a/res/xml/topic_notification_settings.xml
+++ b/res/xml/topic_notification_settings.xml
@@ -21,7 +21,7 @@
     <!-- Importance -->
     <com.android.settings.notification.ImportanceSeekBarPreference
             android:key="importance"
-            android:title="@string/app_notification_importance_title"
+            android:title="@string/notification_importance_title"
             android:order="1"
             android:persistent="false" />
 
diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java
index deba7d4..2ee2b81 100644
--- a/src/com/android/settings/notification/AppNotificationSettings.java
+++ b/src/com/android/settings/notification/AppNotificationSettings.java
@@ -28,10 +28,12 @@
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.provider.Settings;
+import android.service.notification.NotificationListenerService;
 import android.support.v14.preference.SwitchPreference;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.Preference.OnPreferenceChangeListener;
 import android.support.v7.preference.Preference.OnPreferenceClickListener;
+import android.support.v7.preference.PreferenceCategory;
 import android.text.TextUtils;
 import android.util.ArrayMap;
 import android.util.Log;
@@ -55,6 +57,7 @@
 
     private static final String KEY_BLOCK = "block";
     private static final String KEY_APP_SETTINGS = "app_settings";
+    private static final String KEY_CATEGORIES = "categories";
 
     private static final Intent APP_NOTIFICATION_PREFS_CATEGORY_INTENT
             = new Intent(Intent.ACTION_MAIN)
@@ -64,6 +67,7 @@
 
     private Context mContext;
     private SwitchPreference mBlock;
+    private PreferenceCategory mCategories;
     private AppRow mAppRow;
     private boolean mCreated;
     private boolean mIsSystemPackage;
@@ -136,6 +140,7 @@
 
         // Add topics
         List<Notification.Topic> topics = mBackend.getTopics(pkg, mUid);
+        mCategories = (PreferenceCategory) getPreferenceScreen().findPreference(KEY_CATEGORIES);
         for (Notification.Topic topic : topics) {
             Preference topicPreference = new Preference(mContext);
             topicPreference.setKey(topic.getId());
@@ -151,8 +156,7 @@
                     TopicNotificationSettings.class.getName(),
                     topicArgs, null, R.string.topic_notifications_title, null, false);
             topicPreference.setIntent(topicIntent);
-            // Add preference to the settings menu.
-            getPreferenceScreen().addPreference(topicPreference);
+            mCategories.addPreference(topicPreference);
         }
 
         mBlock.setChecked(mAppRow.banned);
@@ -198,6 +202,9 @@
 
     private void updateDependents(boolean banned) {
         setVisible(mBlock, !mIsSystemPackage);
+        if (mCategories != null) {
+            setVisible(mCategories, !banned);
+        }
     }
 
     private void setVisible(Preference p, boolean visible) {
diff --git a/src/com/android/settings/notification/ImportanceSeekBarPreference.java b/src/com/android/settings/notification/ImportanceSeekBarPreference.java
index ec77467..58892e3 100644
--- a/src/com/android/settings/notification/ImportanceSeekBarPreference.java
+++ b/src/com/android/settings/notification/ImportanceSeekBarPreference.java
@@ -90,20 +90,15 @@
     private String getProgressSummary(int progress) {
         switch (progress) {
             case NotificationListenerService.Ranking.IMPORTANCE_NONE:
-                return getContext().getString(
-                        com.android.internal.R.string.notification_importance_blocked);
+                return getContext().getString(R.string.notification_importance_blocked);
             case NotificationListenerService.Ranking.IMPORTANCE_LOW:
-                return getContext().getString(
-                        com.android.internal.R.string.notification_importance_low);
+                return getContext().getString(R.string.notification_importance_low);
             case NotificationListenerService.Ranking.IMPORTANCE_DEFAULT:
-                return getContext().getString(
-                        com.android.internal.R.string.notification_importance_default);
+                return getContext().getString(R.string.notification_importance_default);
             case NotificationListenerService.Ranking.IMPORTANCE_HIGH:
-                return getContext().getString(
-                        com.android.internal.R.string.notification_importance_high);
+                return getContext().getString(R.string.notification_importance_high);
             case NotificationListenerService.Ranking.IMPORTANCE_MAX:
-                return getContext().getString(
-                        com.android.internal.R.string.notification_importance_max);
+                return getContext().getString(R.string.notification_importance_max);
             default:
                 return "";
         }
diff --git a/src/com/android/settings/notification/NotificationBackend.java b/src/com/android/settings/notification/NotificationBackend.java
index 4c1f6ea..15f82fe 100644
--- a/src/com/android/settings/notification/NotificationBackend.java
+++ b/src/com/android/settings/notification/NotificationBackend.java
@@ -144,7 +144,7 @@
             return sINM.getTopicImportance(pkg, uid, topic);
         } catch (Exception e) {
             Log.w(TAG, "Error calling NoMan", e);
-            return NotificationListenerService.Ranking.IMPORTANCE_DEFAULT;
+            return NotificationListenerService.Ranking.IMPORTANCE_UNSPECIFIED;
         }
     }
 
diff --git a/src/com/android/settings/notification/TopicNotificationSettings.java b/src/com/android/settings/notification/TopicNotificationSettings.java
index e847e34..e8586c2 100644
--- a/src/com/android/settings/notification/TopicNotificationSettings.java
+++ b/src/com/android/settings/notification/TopicNotificationSettings.java
@@ -21,11 +21,11 @@
 import com.android.settings.AppHeader;
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.Utils;
 import com.android.settings.applications.AppInfoBase;
 import com.android.settings.notification.NotificationBackend.TopicRow;
 
 import android.app.Notification;
+import android.app.NotificationManager;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageInfo;
@@ -59,8 +59,8 @@
     private SwitchPreference mSensitive;
     private TopicRow mTopicRow;
     private boolean mCreated;
-    private boolean mIsSystemPackage;
     private int mUid;
+    private boolean mDndVisualEffectsSuppressed;
 
     @Override
     public void onActivityCreated(Bundle savedInstanceState) {
@@ -94,6 +94,10 @@
             return;
         }
 
+        NotificationManager.Policy policy =
+                NotificationManager.from(mContext).getNotificationPolicy();
+        mDndVisualEffectsSuppressed = policy == null ? false : policy.suppressedVisualEffects != 0;
+
         final Notification.Topic topic = args != null && args.containsKey(ARG_TOPIC)
                 ? (Notification.Topic) args.getParcelable(ARG_TOPIC) : null;
 
@@ -120,7 +124,6 @@
         }
 
         final PackageManager pm = getPackageManager();
-        mIsSystemPackage = Utils.isSystemPackage(pm, info);
 
         addPreferencesFromResource(R.xml.topic_notification_settings);
         mImportance = (ImportanceSeekBarPreference) findPreference(KEY_IMPORTANCE);
@@ -140,6 +143,7 @@
             @Override
             public void onImportanceChanged(int progress) {
                 mBackend.setImportance(mTopicRow.pkg, mTopicRow.uid, mTopicRow.topic, progress);
+                updateDependents(progress);
             }
         });
         mPriority.setChecked(mTopicRow.priority);
@@ -160,7 +164,7 @@
                 return mBackend.setSensitive(info.packageName, mUid, topic, sensitive);
             }
         });
-        updateDependents(mTopicRow.banned);
+        updateDependents(mTopicRow.importance);
 
     }
 
@@ -173,16 +177,17 @@
         }
     }
 
-    private void updateDependents(boolean banned) {
+    private void updateDependents(int importance) {
         final boolean lockscreenSecure = new LockPatternUtils(getActivity()).isSecure(
                 UserHandle.myUserId());
         final boolean lockscreenNotificationsEnabled = getLockscreenNotificationsEnabled();
         final boolean allowPrivate = getLockscreenAllowPrivateNotifications();
 
-        setVisible(mPriority, mIsSystemPackage || !banned);
-        setVisible(mSensitive, mIsSystemPackage || !banned && lockscreenSecure
-                && lockscreenNotificationsEnabled && allowPrivate);
-        setVisible(mImportance, !banned);
+
+        setVisible(mPriority, importance > NotificationListenerService.Ranking.IMPORTANCE_DEFAULT
+                && !mDndVisualEffectsSuppressed);
+        setVisible(mSensitive, (importance > NotificationListenerService.Ranking.IMPORTANCE_LOW)
+                && lockscreenSecure && lockscreenNotificationsEnabled && allowPrivate);
     }
 
     private void setVisible(Preference p, boolean visible) {
