diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 34dd095..432dec3 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -62,8 +62,8 @@
 import com.android.settings.accounts.ChooseAccountActivity;
 import com.android.settings.accounts.ManagedProfileSettings;
 import com.android.settings.accounts.UserAndAccountDashboardFragment;
-import com.android.settings.applications.AppAndNotificationDashboardFragment;
 import com.android.settings.applications.AdvancedAppSettings;
+import com.android.settings.applications.AppAndNotificationDashboardFragment;
 import com.android.settings.applications.DrawOverlayDetails;
 import com.android.settings.applications.InstalledAppDetails;
 import com.android.settings.applications.ManageApplications;
@@ -285,6 +285,7 @@
             Settings.SupportDashboardActivity.class.getName(),
             // Home page > Apps & Notifications
             "com.android.settings.Settings.ManageApplicationsDashboardAlias",
+            "com.android.settings.Settings.PaymentSettingsDashboardAlias",
             // Home page > Network & Internet
             "com.android.settings.Settings.WifiDashboardAlias",
             "com.android.settings.Settings.DataUsageDashboardAlias",
diff --git a/src/com/android/settings/applications/AdvancedAppSettings.java b/src/com/android/settings/applications/AdvancedAppSettings.java
index 59c1fbe..827b6e8 100644
--- a/src/com/android/settings/applications/AdvancedAppSettings.java
+++ b/src/com/android/settings/applications/AdvancedAppSettings.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2015 The Android Open Source Project
+ * 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.
@@ -24,8 +24,10 @@
 import com.android.settings.Utils;
 import com.android.settings.core.PreferenceController;
 import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
+import com.android.settingslib.drawer.CategoryKey;
 
 import java.util.Arrays;
 import java.util.List;
@@ -41,7 +43,7 @@
 
     @Override
     protected String getCategoryKey() {
-        return "";
+        return CategoryKey.CATEGORY_APPS_DEFAULT;
     }
 
     @Override
@@ -51,7 +53,9 @@
 
     @Override
     protected int getPreferenceScreenResId() {
-        return R.xml.advanced_apps;
+        return mDashboardFeatureProvider.isEnabled()
+                ? R.xml.app_default_settings
+                : R.xml.advanced_apps;
     }
 
     @Override
@@ -69,8 +73,11 @@
                 @Override
                 public List<SearchIndexableResource> getXmlResourcesToIndex(
                         Context context, boolean enabled) {
-                    SearchIndexableResource sir = new SearchIndexableResource(context);
-                    sir.xmlResId = R.xml.advanced_apps;
+                    final SearchIndexableResource sir = new SearchIndexableResource(context);
+                    sir.xmlResId = FeatureFactory.getFactory(context)
+                            .getDashboardFeatureProvider(context).isEnabled()
+                            ? R.xml.app_default_settings
+                            : R.xml.advanced_apps;
                     return Arrays.asList(sir);
                 }
 
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index f868c1b..2329d12 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -245,7 +245,8 @@
         }
         if (className.equals(AllApplicationsActivity.class.getName())) {
             mShowSystem = true;
-        } else if (className.equals(NotificationAppListActivity.class.getName())) {
+        } else if (className.equals(NotificationAppListActivity.class.getName())
+                || this instanceof NotificationApps) {
             mListType = LIST_TYPE_NOTIFICATION;
             mNotifBackend = new NotificationBackend();
         } else if (className.equals(StorageUseActivity.class.getName())) {
