diff --git a/res/xml/app_notification_settings.xml b/res/xml/app_notification_settings.xml
index d48cf93..ccf242c 100644
--- a/res/xml/app_notification_settings.xml
+++ b/res/xml/app_notification_settings.xml
@@ -18,12 +18,6 @@
         android:title="@string/app_notifications_title"
         android:key="app_notification_settings">
 
-     <!-- App notification preferences -->
-    <Preference
-            android:key="app_settings"
-            android:title="@string/app_notification_preferences"
-            android:order="1" />
-
     <!-- Apps without topics -->
     <!-- Importance -->
     <Preference
diff --git a/src/com/android/settings/AppHeader.java b/src/com/android/settings/AppHeader.java
index 0351ed5..2b3e6c4 100644
--- a/src/com/android/settings/AppHeader.java
+++ b/src/com/android/settings/AppHeader.java
@@ -39,27 +39,38 @@
 
     public static void createAppHeader(SettingsPreferenceFragment fragment, Drawable icon,
             CharSequence label, String pkgName, int uid) {
-        createAppHeader(fragment, icon, label, pkgName, uid, 0);
+        createAppHeader(fragment, icon, label, pkgName, uid, 0, null);
+    }
+
+    public static void createAppHeader(SettingsPreferenceFragment fragment, Drawable icon,
+            CharSequence label, String pkgName, int uid, Intent externalSettings) {
+        createAppHeader(fragment, icon, label, pkgName, uid, 0, externalSettings);
     }
 
     public static void createAppHeader(Activity activity, Drawable icon, CharSequence label,
             String pkgName, int uid, ViewGroup pinnedHeader) {
         final View bar = activity.getLayoutInflater().inflate(R.layout.app_header,
                 pinnedHeader, false);
-        setupHeaderView(activity, icon, label, pkgName, uid, false, 0, bar);
+        setupHeaderView(activity, icon, label, pkgName, uid, false, 0, bar, null);
         pinnedHeader.addView(bar);
     }
 
     public static void createAppHeader(SettingsPreferenceFragment fragment, Drawable icon,
             CharSequence label, String pkgName, int uid, int tintColorRes) {
+        createAppHeader(fragment, icon, label, pkgName, uid, tintColorRes, null);
+    }
+
+    public static void createAppHeader(SettingsPreferenceFragment fragment, Drawable icon,
+            CharSequence label, String pkgName, int uid, int tintColorRes,
+            Intent externalSettings) {
         View bar = fragment.setPinnedHeaderView(R.layout.app_header);
         setupHeaderView(fragment.getActivity(), icon, label, pkgName, uid, includeAppInfo(fragment),
-                tintColorRes, bar);
+                tintColorRes, bar, externalSettings);
     }
 
     public static View setupHeaderView(final Activity activity, Drawable icon, CharSequence label,
             final String pkgName, final int uid, final boolean includeAppInfo, int tintColorRes,
-            View bar) {
+            View bar, final Intent externalSettings) {
         final ImageView appIcon = (ImageView) bar.findViewById(R.id.app_icon);
         appIcon.setImageDrawable(icon);
         if (tintColorRes != 0) {
@@ -83,6 +94,16 @@
                     }
                 }
             });
+            if (externalSettings != null) {
+                final View appSettings = bar.findViewById(R.id.app_settings);
+                appSettings.setVisibility(View.VISIBLE);
+                appSettings.setOnClickListener(new OnClickListener() {
+                    @Override
+                    public void onClick(View v) {
+                        activity.startActivity(externalSettings);
+                    }
+                });
+            }
         }
         return bar;
     }
diff --git a/src/com/android/settings/datausage/AppDataUsage.java b/src/com/android/settings/datausage/AppDataUsage.java
index a65f007..6a7b6b2 100644
--- a/src/com/android/settings/datausage/AppDataUsage.java
+++ b/src/com/android/settings/datausage/AppDataUsage.java
@@ -282,7 +282,7 @@
         } catch (PackageManager.NameNotFoundException e) {
         }
         AppHeader.setupHeaderView(getActivity(), mIcon, mLabel,
-                pkg, uid, AppHeader.includeAppInfo(this), 0, header);
+                pkg, uid, AppHeader.includeAppInfo(this), 0, header, null);
     }
 
     @Override
diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java
index 626e5a4..ccb1216 100644
--- a/src/com/android/settings/notification/AppNotificationSettings.java
+++ b/src/com/android/settings/notification/AppNotificationSettings.java
@@ -51,7 +51,6 @@
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
     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
@@ -66,7 +65,8 @@
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
         if (mAppRow == null) return;
-        AppHeader.createAppHeader(this, mAppRow.icon, mAppRow.label, mAppRow.pkg, mAppRow.uid);
+        AppHeader.createAppHeader(this, mAppRow.icon, mAppRow.label, mAppRow.pkg, mAppRow.uid,
+                mAppRow.settingsIntent);
     }
 
     @Override
@@ -127,19 +127,6 @@
                 mCategories.addPreference(topicPreference);
             }
         }
-
-        if (mAppRow.settingsIntent != null) {
-            findPreference(KEY_APP_SETTINGS).setOnPreferenceClickListener(
-                    new OnPreferenceClickListener() {
-                @Override
-                public boolean onPreferenceClick(Preference preference) {
-                    mContext.startActivity(mAppRow.settingsIntent);
-                    return true;
-                }
-            });
-        } else {
-            removePreference(KEY_APP_SETTINGS);
-        }
     }
 
     @Override
