diff --git a/res/layout/preference_importance_slider.xml b/res/layout/preference_importance_slider.xml
index 0099384..677a32b 100644
--- a/res/layout/preference_importance_slider.xml
+++ b/res/layout/preference_importance_slider.xml
@@ -23,35 +23,11 @@
         android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
         android:orientation="vertical"
         android:clickable="false"
-        android:focusable="false"
-        android:paddingTop="8dip"
-        android:paddingBottom="8dip">
-
-        <TextView
-                android:id="@android:id/title"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:singleLine="true"
-                android:textAppearance="@android:style/TextAppearance.Material.Subhead"
-                android:textColor="?android:attr/textColorPrimary"
-                android:ellipsize="marquee"
-                android:fadingEdge="horizontal" />
-
-        <TextView
-                android:id="@android:id/summary"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_alignStart="@android:id/title"
-                android:textAlignment="viewStart"
-                android:textAppearance="@android:style/TextAppearance.Material.Body1"
-                android:textColor="?android:attr/textColorSecondary"
-                android:maxLines="10"
-                android:minLines="2" />
+        android:focusable="false" >
 
         <FrameLayout
                 android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="6dp">
+                android:layout_height="wrap_content" >
 
             <ImageView
                     android:id="@+id/low_importance"
@@ -82,5 +58,4 @@
                     android:tint="@color/importance_icon_tint" />
 
         </FrameLayout>
-
 </LinearLayout>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 0ef31a7..f86ba75 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5839,6 +5839,9 @@
     <!-- [CHAR LIMIT=100] Notification importance slider title -->
     <string name="notification_importance_title">Importance</string>
 
+    <!-- [CHAR LIMIT=100] Notification Importance slider: unset importance level description -->
+    <string name="notification_importance_none">Not set</string>
+
     <!-- [CHAR LIMIT=100] Notification Importance slider: blocked importance level description -->
     <string name="notification_importance_blocked">Blocked: Never show these notifications</string>
 
@@ -5854,6 +5857,9 @@
     <!-- [CHAR LIMIT=100] Notification Importance slider: max importance level description -->
     <string name="notification_importance_max">Urgent: Peek onto the screen and make sound</string>
 
+    <!-- [CHAR LIMIT=60] Notification importance reset button -->
+    <string name="importance_reset">Reset</string>
+
     <!-- Default Apps > Default notification assistant -->
     <string name="default_notification_assistant">Notification assistant</string>
 
diff --git a/res/xml/app_notification_settings.xml b/res/xml/app_notification_settings.xml
index 3141af8..d48cf93 100644
--- a/res/xml/app_notification_settings.xml
+++ b/res/xml/app_notification_settings.xml
@@ -22,6 +22,47 @@
     <Preference
             android:key="app_settings"
             android:title="@string/app_notification_preferences"
-            android:persistent="false" />
+            android:order="1" />
+
+    <!-- Apps without topics -->
+    <!-- Importance -->
+    <Preference
+            android:key="importance_title"
+            android:title="@string/notification_importance_title"
+            android:order="2" />
+    <com.android.settings.notification.ImportanceSeekBarPreference
+            android:key="importance"
+            android:order="3"/>
+
+    <com.android.settings.applications.LayoutPreference
+            android:key="importance_reset_button"
+            android:layout="@layout/two_buttons_panel"
+            android:order="4" />
+
+    <!-- Sensitive -->
+    <com.android.settingslib.RestrictedSwitchPreference
+            android:key="sensitive"
+            android:title="@string/app_notification_sensitive_title"
+            android:summary="@string/app_notification_sensitive_summary"
+            android:order="5" />
+
+    <!-- Bypass DND -->
+    <com.android.settingslib.RestrictedSwitchPreference
+            android:key="bypass_dnd"
+            android:title="@string/app_notification_override_dnd_title"
+            android:summary="@string/app_notification_override_dnd_summary"
+            android:order="6" />
+
+    <!-- Apps with topics -->
+    <!-- Block -->
+    <com.android.settingslib.RestrictedSwitchPreference
+            android:key="block"
+            android:title="@string/app_notification_block_title"
+            android:summary="@string/app_notification_block_summary"
+            android:order="7" />
+    <PreferenceCategory
+            android:key="categories"
+            android:title="@string/notification_topic_categories"
+            android:order="8" />
 
 </PreferenceScreen>
diff --git a/res/xml/topic_notification_settings.xml b/res/xml/topic_notification_settings.xml
index d5f28b3..2f15500 100644
--- a/res/xml/topic_notification_settings.xml
+++ b/res/xml/topic_notification_settings.xml
@@ -19,26 +19,31 @@
         android:key="topic_notification_settings">
 
     <!-- Importance -->
+    <Preference
+            android:key="importance_title"
+            android:title="@string/notification_importance_title"
+            android:order="1" />
     <com.android.settings.notification.ImportanceSeekBarPreference
             android:key="importance"
-            android:title="@string/notification_importance_title"
-            android:order="1"
-            android:persistent="false" />
+            android:order="2" />
 
-    <!-- Bypass DND -->
-    <SwitchPreference
-            android:key="bypass_dnd"
-            android:title="@string/app_notification_override_dnd_title"
-            android:summary="@string/app_notification_override_dnd_summary"
-            android:order="2"
-            android:persistent="false" />
+    <com.android.settings.applications.LayoutPreference
+            android:key="importance_reset_button"
+            android:order="3"
+            android:layout="@layout/two_buttons_panel" />
 
     <!-- Sensitive -->
-    <SwitchPreference
+    <com.android.settingslib.RestrictedSwitchPreference
             android:key="sensitive"
             android:title="@string/app_notification_sensitive_title"
             android:summary="@string/app_notification_sensitive_summary"
-            android:order="4"
-            android:persistent="false" />
+            android:order="4" />
+
+    <!-- Bypass DND -->
+    <com.android.settingslib.RestrictedSwitchPreference
+            android:key="bypass_dnd"
+            android:title="@string/app_notification_override_dnd_title"
+            android:summary="@string/app_notification_override_dnd_summary"
+            android:order="5" />
 
 </PreferenceScreen>
diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java
index 4fcec26..626e5a4 100644
--- a/src/com/android/settings/notification/AppNotificationSettings.java
+++ b/src/com/android/settings/notification/AppNotificationSettings.java
@@ -22,8 +22,7 @@
 import android.content.pm.ApplicationInfo;
 import android.content.pm.ResolveInfo;
 import android.os.Bundle;
-import android.service.notification.NotificationListenerService;
-import android.support.v14.preference.SwitchPreference;
+import android.service.notification.NotificationListenerService.Ranking;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.Preference.OnPreferenceChangeListener;
 import android.support.v7.preference.Preference.OnPreferenceClickListener;
@@ -37,6 +36,7 @@
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.applications.AppInfoBase;
+import com.android.settings.applications.LayoutPreference;
 import com.android.settings.notification.NotificationBackend.AppRow;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedSwitchPreference;
@@ -79,7 +79,16 @@
         super.onCreate(savedInstanceState);
 
         addPreferencesFromResource(R.xml.app_notification_settings);
-        getPreferenceScreen().setOrderingAsAdded(true);
+        mCategories = (PreferenceCategory) findPreference(KEY_CATEGORIES);
+        mBlock = (RestrictedSwitchPreference) findPreference(KEY_BLOCK);
+        mImportance = (ImportanceSeekBarPreference) findPreference(KEY_IMPORTANCE);
+        mImportanceReset = (LayoutPreference) findPreference(KEY_IMPORTANCE_RESET);
+        mImportanceTitle = findPreference(KEY_IMPORTANCE_TITLE);
+        mPriority =
+                (RestrictedSwitchPreference) getPreferenceScreen().findPreference(KEY_BYPASS_DND);
+        mSensitive =
+                (RestrictedSwitchPreference) getPreferenceScreen().findPreference(KEY_SENSITIVE);
+
         mAppRow = mBackend.loadAppRow(mPm, mPkgInfo);
 
         // load settings intent
@@ -90,16 +99,13 @@
         // Add topics
         List<Notification.Topic> topics = mBackend.getTopics(mPkg, mUid);
         if (topics.size() <= 1) {
-            setupImportancePref(mAppRow, null, mAppRow.appImportance);
-            setupPriorityPref(null, mAppRow.appBypassDnd);
-            setupSensitivePref(null, mAppRow.appSensitive);
+            removeAppPrefs();
+            setupImportancePrefs(mAppRow.systemApp, mAppRow.appImportance);
+            setupPriorityPref(mAppRow.appBypassDnd);
+            setupSensitivePref(mAppRow.appSensitive);
         } else {
+            removeTopicPrefs();
             setupBlockSwitch();
-            mCategories = new PreferenceCategory(getPrefContext());
-            mCategories.setKey(KEY_CATEGORIES);
-            mCategories.setTitle(R.string.notification_topic_categories);
-            mCategories.setOrderingAsAdded(true);
-            getPreferenceScreen().addPreference(mCategories);
             for (Notification.Topic topic : topics) {
                 RestrictedPreference topicPreference = new RestrictedPreference(getPrefContext());
                 topicPreference.setDisabledByAdmin(
@@ -138,22 +144,28 @@
 
     @Override
     protected void updateDependents(int progress) {
-        updateDependents(progress == NotificationListenerService.Ranking.IMPORTANCE_NONE);
+        updateDependents(progress == Ranking.IMPORTANCE_NONE);
+    }
+
+    private void removeTopicPrefs() {
+        setVisible(mImportance, false);
+        setVisible(mImportanceReset, false);
+        setVisible(mImportanceTitle, false);
+        setVisible(mPriority, false);
+        setVisible(mSensitive, false);
+    }
+
+    private void removeAppPrefs() {
+        setVisible(mBlock, false);
+        setVisible(mCategories, false);
     }
 
     private void updateDependents(boolean banned) {
-        if (mBlock != null) {
-            mBlock.setEnabled(!mAppRow.systemApp);
-            mBlock.setDisabledByAdmin(
-                    RestrictedLockUtils.checkIfApplicationIsSuspended(mContext, mPkg, mUserId));
-        }
-        if (mCategories != null) {
-            setVisible(mCategories, !banned);
-        }
+        mBlock.setEnabled(!mAppRow.systemApp);
+        mCategories.setEnabled(!banned);
     }
 
     private void setupBlockSwitch() {
-        mBlock = new RestrictedSwitchPreference(getPrefContext());
         mBlock.setDisabledByAdmin(
                 RestrictedLockUtils.checkIfApplicationIsSuspended(mContext, mPkg, mUserId));
         mBlock.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@@ -170,10 +182,6 @@
                 return success;
             }
         });
-        mBlock.setKey(KEY_BLOCK);
-        mBlock.setTitle(R.string.app_notification_block_title);
-        mBlock.setSummary(R.string.app_notification_block_summary);
-        getPreferenceScreen().addPreference(mBlock);
         mBlock.setChecked(mAppRow.banned);
         updateDependents(mAppRow.banned);
     }
diff --git a/src/com/android/settings/notification/ImportanceSeekBarPreference.java b/src/com/android/settings/notification/ImportanceSeekBarPreference.java
index 920fcc3..aff9688 100644
--- a/src/com/android/settings/notification/ImportanceSeekBarPreference.java
+++ b/src/com/android/settings/notification/ImportanceSeekBarPreference.java
@@ -20,12 +20,10 @@
 import com.android.settings.SeekBarPreference;
 
 import android.content.Context;
-import android.service.notification.NotificationListenerService;
 import android.support.v7.preference.PreferenceViewHolder;
 import android.util.AttributeSet;
 import android.widget.ImageView;
 import android.widget.SeekBar;
-import android.widget.TextView;
 
 /**
  * A slider preference that controls notification importance.
@@ -35,8 +33,6 @@
     private static final String TAG = "ImportanceSeekBarPref";
 
     private Callback mCallback;
-    private TextView mSummaryTextView;
-    private String mSummary;
     private int mMinProgress;
     private boolean mSystemApp;
 
@@ -64,6 +60,7 @@
 
     public void setMinimumProgress(int minProgress) {
         mMinProgress = minProgress;
+        notifyChanged();
     }
 
     public void setSystemApp(boolean systemApp) {
@@ -74,17 +71,12 @@
     @Override
     public void onBindViewHolder(PreferenceViewHolder view) {
         super.onBindViewHolder(view);
-        mSummaryTextView = (TextView) view.findViewById(com.android.internal.R.id.summary);
         if (mSystemApp) {
             ((ImageView) view.findViewById(R.id.low_importance)).getDrawable().setTint(
                     getContext().getColor(R.color.importance_disabled_tint));
         }
-    }
-
-    @Override
-    public void setProgress(int progress) {
-        mSummary = getProgressSummary(progress);
-        super.setProgress(progress);
+        view.setDividerAllowedAbove(false);
+        view.setDividerAllowedBelow(false);
     }
 
     @Override
@@ -94,37 +86,11 @@
             seekBar.setProgress(mMinProgress);
             progress = mMinProgress;
         }
-        mSummary = getProgressSummary(progress);
-        if (mSummaryTextView != null) {
-            mSummaryTextView.setText(mSummary);
-        }
         if (fromTouch) {
             mCallback.onImportanceChanged(progress);
         }
     }
 
-    @Override
-    public CharSequence getSummary() {
-        return mSummary;
-    }
-
-    private String getProgressSummary(int progress) {
-        switch (progress) {
-            case NotificationListenerService.Ranking.IMPORTANCE_NONE:
-                return getContext().getString(R.string.notification_importance_blocked);
-            case NotificationListenerService.Ranking.IMPORTANCE_LOW:
-                return getContext().getString(R.string.notification_importance_low);
-            case NotificationListenerService.Ranking.IMPORTANCE_DEFAULT:
-                return getContext().getString(R.string.notification_importance_default);
-            case NotificationListenerService.Ranking.IMPORTANCE_HIGH:
-                return getContext().getString(R.string.notification_importance_high);
-            case NotificationListenerService.Ranking.IMPORTANCE_MAX:
-                return getContext().getString(R.string.notification_importance_max);
-            default:
-                return "";
-        }
-    }
-
     public interface Callback {
         void onImportanceChanged(int progress);
     }
diff --git a/src/com/android/settings/notification/NotificationSettingsBase.java b/src/com/android/settings/notification/NotificationSettingsBase.java
index 92d8d2f..740f8c1 100644
--- a/src/com/android/settings/notification/NotificationSettingsBase.java
+++ b/src/com/android/settings/notification/NotificationSettingsBase.java
@@ -21,6 +21,7 @@
 import com.android.settings.applications.AppInfoBase;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedSwitchPreference;
+import com.android.settings.applications.LayoutPreference;
 
 import android.app.Notification;
 import android.content.Context;
@@ -32,10 +33,11 @@
 import android.os.UserHandle;
 import android.provider.Settings;
 import android.service.notification.NotificationListenerService.Ranking;
-import android.support.v14.preference.SwitchPreference;
 import android.support.v7.preference.Preference;
 import android.text.TextUtils;
 import android.util.Log;
+import android.view.View;
+import android.widget.Button;
 import android.widget.Toast;
 
 import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
@@ -45,10 +47,13 @@
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
     protected static final String ARG_PACKAGE_INFO = "arg_info";
+    protected static final String ARG_TOPIC = "arg_topic";
 
     protected static final String KEY_BYPASS_DND = "bypass_dnd";
     protected static final String KEY_SENSITIVE = "sensitive";
     protected static final String KEY_IMPORTANCE = "importance";
+    protected static final String KEY_IMPORTANCE_TITLE = "importance_title";
+    protected static final String KEY_IMPORTANCE_RESET = "importance_reset_button";
 
     protected PackageManager mPm;
     protected final NotificationBackend mBackend = new NotificationBackend();
@@ -58,7 +63,10 @@
     protected int mUserId;
     protected String mPkg;
     protected PackageInfo mPkgInfo;
+    protected Notification.Topic mTopic;
     protected ImportanceSeekBarPreference mImportance;
+    protected Preference mImportanceTitle;
+    protected LayoutPreference mImportanceReset;
     protected RestrictedSwitchPreference mPriority;
     protected RestrictedSwitchPreference mSensitive;
 
@@ -114,6 +122,10 @@
             toastAndFinish();
             return;
         }
+
+        // Will be null for app wide settings.
+        mTopic = args != null && args.containsKey(ARG_TOPIC)
+                ? (Notification.Topic) args.getParcelable(ARG_TOPIC) : null;
     }
 
     @Override
@@ -137,70 +149,89 @@
         }
     }
 
-    protected void setupImportancePref(final NotificationBackend.AppRow appRow,
-            final Notification.Topic topic, int importance) {
-        if (mImportance == null) {
-            mImportance = new ImportanceSeekBarPreference(getPrefContext());
-            mImportance.setDisabledByAdmin(
-                    RestrictedLockUtils.checkIfApplicationIsSuspended(mContext, mPkg, mUserId));
-            mImportance.setTitle(R.string.notification_importance_title);
-            mImportance.setKey(KEY_IMPORTANCE);
-            getPreferenceScreen().addPreference(mImportance);
+    protected void setupImportancePrefs(boolean isSystemApp, int importance) {
+        mImportance.setDisabledByAdmin(
+                RestrictedLockUtils.checkIfApplicationIsSuspended(mContext, mPkg, mUserId));
+        if (importance == Ranking.IMPORTANCE_UNSPECIFIED) {
+            mImportance.setVisible(false);
+            mImportanceReset.setVisible(false);
+            mImportanceTitle.setOnPreferenceClickListener(showEditableImportance);
+        } else {
+            mImportanceTitle.setOnPreferenceClickListener(null);
         }
-        mImportance.setSystemApp(appRow.systemApp);
+
+        mImportanceTitle.setSummary(getProgressSummary(importance));
+        mImportance.setSystemApp(isSystemApp);
         mImportance.setMinimumProgress(
-                appRow.systemApp ? Ranking.IMPORTANCE_LOW : Ranking.IMPORTANCE_NONE);
+                isSystemApp ? Ranking.IMPORTANCE_LOW : Ranking.IMPORTANCE_NONE);
         mImportance.setMax(Ranking.IMPORTANCE_MAX);
-        // TODO: stop defaulting to 'normal' in the UI when there are mocks for this scenario.
-        importance = importance == Ranking.IMPORTANCE_UNSPECIFIED
-                        ? Ranking.IMPORTANCE_DEFAULT
-                        : importance;
         mImportance.setProgress(importance);
         mImportance.setCallback(new ImportanceSeekBarPreference.Callback() {
             @Override
             public void onImportanceChanged(int progress) {
-                mBackend.setImportance(appRow.pkg, appRow.uid, topic, progress);
+                mBackend.setImportance(mPkg, mUid, mTopic, progress);
+                mImportanceTitle.setSummary(getProgressSummary(progress));
                 updateDependents(progress);
             }
         });
+
+        Button button = (Button) mImportanceReset.findViewById(R.id.left_button);
+        button.setText(R.string.importance_reset);
+        button.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                mBackend.setImportance(mPkg, mUid, mTopic, Ranking.IMPORTANCE_UNSPECIFIED);
+                mImportanceReset.setVisible(false);
+                mImportance.setVisible(false);
+                mImportanceTitle.setOnPreferenceClickListener(showEditableImportance);
+                mImportanceTitle.setSummary(getProgressSummary(Ranking.IMPORTANCE_UNSPECIFIED));
+                updateDependents(Ranking.IMPORTANCE_UNSPECIFIED);
+            }
+        });
+        mImportanceReset.findViewById(R.id.right_button).setVisibility(View.INVISIBLE);
     }
 
-    protected void setupPriorityPref(final Notification.Topic topic, boolean priority) {
-        if (mPriority == null) {
-            mPriority = new RestrictedSwitchPreference(getPrefContext());
-            mPriority.setDisabledByAdmin(
-                    RestrictedLockUtils.checkIfApplicationIsSuspended(mContext, mPkg, mUserId));
-            mPriority.setTitle(R.string.app_notification_override_dnd_title);
-            mPriority.setSummary(R.string.app_notification_override_dnd_summary);
-            mPriority.setKey(KEY_BYPASS_DND);
-            getPreferenceScreen().addPreference(mPriority);
+    private String getProgressSummary(int progress) {
+        switch (progress) {
+            case Ranking.IMPORTANCE_NONE:
+                return mContext.getString(R.string.notification_importance_blocked);
+            case Ranking.IMPORTANCE_LOW:
+                return mContext.getString(R.string.notification_importance_low);
+            case Ranking.IMPORTANCE_DEFAULT:
+                return mContext.getString(R.string.notification_importance_default);
+            case Ranking.IMPORTANCE_HIGH:
+                return mContext.getString(R.string.notification_importance_high);
+            case Ranking.IMPORTANCE_MAX:
+                return mContext.getString(R.string.notification_importance_max);
+            case Ranking.IMPORTANCE_UNSPECIFIED:
+                return mContext.getString(R.string.notification_importance_none);
+            default:
+                return "";
         }
+    }
+
+    protected void setupPriorityPref(boolean priority) {
+        mPriority.setDisabledByAdmin(
+                RestrictedLockUtils.checkIfApplicationIsSuspended(mContext, mPkg, mUserId));
         mPriority.setChecked(priority);
         mPriority.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
             @Override
             public boolean onPreferenceChange(Preference preference, Object newValue) {
                 final boolean bypassZenMode = (Boolean) newValue;
-                return mBackend.setBypassZenMode(mPkgInfo.packageName, mUid, topic, bypassZenMode);
+                return mBackend.setBypassZenMode(mPkgInfo.packageName, mUid, mTopic, bypassZenMode);
             }
         });
     }
 
-    protected void setupSensitivePref(final Notification.Topic topic, boolean sensitive) {
-        if (mSensitive == null) {
-            mSensitive = new RestrictedSwitchPreference(getPrefContext());
-            mSensitive.setDisabledByAdmin(
-                    RestrictedLockUtils.checkIfApplicationIsSuspended(mContext, mPkg, mUserId));
-            mSensitive.setTitle(R.string.app_notification_sensitive_title);
-            mSensitive.setSummary(R.string.app_notification_sensitive_summary);
-            mSensitive.setKey(KEY_SENSITIVE);
-            getPreferenceScreen().addPreference(mSensitive);
-        }
+    protected void setupSensitivePref(boolean sensitive) {
+        mSensitive.setDisabledByAdmin(
+                RestrictedLockUtils.checkIfApplicationIsSuspended(mContext, mPkg, mUserId));
         mSensitive.setChecked(sensitive);
         mSensitive.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
             @Override
             public boolean onPreferenceChange(Preference preference, Object newValue) {
                 final boolean sensitive = (Boolean) newValue;
-                return mBackend.setSensitive(mPkgInfo.packageName, mUid, topic, sensitive);
+                return mBackend.setSensitive(mPkgInfo.packageName, mUid, mTopic, sensitive);
             }
         });
     }
@@ -239,4 +270,18 @@
         }
         return null;
     }
+
+    private Preference.OnPreferenceClickListener showEditableImportance =
+            new Preference.OnPreferenceClickListener() {
+                @Override
+                public boolean onPreferenceClick(Preference preference) {
+                    mBackend.setImportance(mPkg, mUid, mTopic, Ranking.IMPORTANCE_DEFAULT);
+                    mImportance.setProgress(Ranking.IMPORTANCE_DEFAULT);
+                    mImportanceTitle.setSummary(getProgressSummary(Ranking.IMPORTANCE_DEFAULT));
+                    mImportance.setVisible(true);
+                    mImportanceReset.setVisible(true);
+                    mImportanceTitle.setOnPreferenceClickListener(null);
+                    return true;
+                }
+            };
 }
diff --git a/src/com/android/settings/notification/TopicNotificationSettings.java b/src/com/android/settings/notification/TopicNotificationSettings.java
index ce4c477..bbbcade 100644
--- a/src/com/android/settings/notification/TopicNotificationSettings.java
+++ b/src/com/android/settings/notification/TopicNotificationSettings.java
@@ -20,34 +20,19 @@
 import com.android.internal.widget.LockPatternUtils;
 import com.android.settings.AppHeader;
 import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.applications.AppInfoBase;
+import com.android.settings.applications.LayoutPreference;
 import com.android.settings.notification.NotificationBackend.TopicRow;
 import com.android.settingslib.RestrictedSwitchPreference;
 
-import android.app.Notification;
 import android.app.NotificationManager;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.provider.Settings;
-import android.service.notification.NotificationListenerService;
 import android.service.notification.NotificationListenerService.Ranking;
-import android.support.v14.preference.SwitchPreference;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.Preference.OnPreferenceChangeListener;
-import android.util.Log;
-import android.widget.Toast;
 
 /** These settings are per topic, so should not be returned in global search results. */
 public class TopicNotificationSettings extends NotificationSettingsBase {
     private static final String TAG = "TopicNotiSettings";
-
-    protected static final String ARG_TOPIC = "arg_topic";
-
     private TopicRow mTopicRow;
     private boolean mDndVisualEffectsSuppressed;
 
@@ -72,25 +57,23 @@
                 NotificationManager.from(mContext).getNotificationPolicy();
         mDndVisualEffectsSuppressed = policy == null ? false : policy.suppressedVisualEffects != 0;
 
-        Bundle args = getArguments();
-        final Notification.Topic topic = args != null && args.containsKey(ARG_TOPIC)
-                ? (Notification.Topic) args.getParcelable(ARG_TOPIC) : null;
-        if (topic == null) {
+        if (mTopic == null) {
             toastAndFinish();
             return;
         }
 
         addPreferencesFromResource(R.xml.topic_notification_settings);
-        mTopicRow = mBackend.loadTopicRow(mPm, mPkgInfo, topic);
+        mTopicRow = mBackend.loadTopicRow(mPm, mPkgInfo, mTopic);
 
         mImportance = (ImportanceSeekBarPreference) findPreference(KEY_IMPORTANCE);
-        setupImportancePref(mTopicRow, mTopicRow.topic, mTopicRow.importance);
-
+        mImportanceReset = (LayoutPreference) findPreference(KEY_IMPORTANCE_RESET);
+        mImportanceTitle = findPreference(KEY_IMPORTANCE_TITLE);
         mPriority = (RestrictedSwitchPreference) findPreference(KEY_BYPASS_DND);
-        setupPriorityPref(mTopicRow.topic, mTopicRow.priority);
-
         mSensitive = (RestrictedSwitchPreference) findPreference(KEY_SENSITIVE);
-        setupSensitivePref(mTopicRow.topic, mTopicRow.sensitive);
+
+        setupImportancePrefs(mTopicRow.systemApp, mTopicRow.importance);
+        setupPriorityPref(mTopicRow.priority);
+        setupSensitivePref(mTopicRow.sensitive);
 
         updateDependents(mTopicRow.importance);
     }
@@ -102,13 +85,19 @@
         final boolean lockscreenNotificationsEnabled = getLockscreenNotificationsEnabled();
         final boolean allowPrivate = getLockscreenAllowPrivateNotifications();
 
-
-        setVisible(mPriority, importance > NotificationListenerService.Ranking.IMPORTANCE_DEFAULT
+        setVisible(mPriority, checkCanBeVisible(Ranking.IMPORTANCE_DEFAULT, importance)
                 && !mDndVisualEffectsSuppressed);
-        setVisible(mSensitive, (importance > NotificationListenerService.Ranking.IMPORTANCE_LOW)
+        setVisible(mSensitive, checkCanBeVisible(Ranking.IMPORTANCE_LOW, importance)
                 && lockscreenSecure && lockscreenNotificationsEnabled && allowPrivate);
     }
 
+    protected boolean checkCanBeVisible(int minImportanceVisible, int importance) {
+        if (importance == Ranking.IMPORTANCE_UNSPECIFIED) {
+            return true;
+        }
+        return importance > minImportanceVisible;
+    }
+
     private boolean getLockscreenNotificationsEnabled() {
         return Settings.Secure.getInt(getContentResolver(),
                 Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, 0) != 0;
