diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index d34dfeb..8077ee3 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -639,12 +639,7 @@
                 showDev, isAdmin)
                 || somethingChanged;
 
-        // For profiles, we want them to be included in the profile select dialog even if
-        // backup is not activated.
-        // For other users, enable/disable backup settings depending on whether backup is activated
-        // for the user.
-        boolean enableBackupTile = um.isManagedProfile()
-                || new BackupSettingsHelper(this).isBackupServiceActive();
+        boolean enableBackupTile = new BackupSettingsHelper(this).showBackupSettingsForUser();
         somethingChanged = setTileEnabled(changedList, new ComponentName(packageName,
                 UserBackupSettingsActivity.class.getName()), enableBackupTile, isAdmin)
                 || somethingChanged;
diff --git a/src/com/android/settings/backup/BackupInactivePreferenceController.java b/src/com/android/settings/backup/BackupInactivePreferenceController.java
index 83a0318..92a9487 100644
--- a/src/com/android/settings/backup/BackupInactivePreferenceController.java
+++ b/src/com/android/settings/backup/BackupInactivePreferenceController.java
@@ -28,6 +28,9 @@
 
     @Override
     public int getAvailabilityStatus() {
+        if (!new BackupSettingsHelper(mContext).showBackupSettingsForUser()) {
+            return AVAILABLE_UNSEARCHABLE;
+        }
         if (PrivacySettingsUtils.isInvisibleKey(mContext, PrivacySettingsUtils.BACKUP_INACTIVE)) {
             return UNSUPPORTED_ON_DEVICE;
         }
diff --git a/src/com/android/settings/backup/BackupSettingsHelper.java b/src/com/android/settings/backup/BackupSettingsHelper.java
index 1d3455b..ff4b0b5 100644
--- a/src/com/android/settings/backup/BackupSettingsHelper.java
+++ b/src/com/android/settings/backup/BackupSettingsHelper.java
@@ -50,6 +50,14 @@
         mContext = context;
     }
 
+    public boolean showBackupSettingsForUser() {
+        // For profiles, we want them to be included in the profile select dialog even if
+        // backup is not activated.
+        // For other users, enable/disable backup settings depending on whether backup is activated
+        // for the user.
+        return UserManager.get(mContext).isManagedProfile() || isBackupServiceActive();
+    }
+
     /**
      * If there is only one profile, show whether the backup is on or off.
      * Otherwise, show nothing.
diff --git a/src/com/android/settings/backup/UserBackupSettingsActivity.java b/src/com/android/settings/backup/UserBackupSettingsActivity.java
index 9baa9a3..dbbb135 100644
--- a/src/com/android/settings/backup/UserBackupSettingsActivity.java
+++ b/src/com/android/settings/backup/UserBackupSettingsActivity.java
@@ -98,7 +98,7 @@
      */
     public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider() {
-                private static final String BACKUP_SEARCH_INDEX_KEY = "backup";
+                private static final String BACKUP_SEARCH_INDEX_KEY = "Backup";
 
                 @Override
                 public List<SearchIndexableRaw> getRawDataToIndex(Context context,
@@ -119,6 +119,15 @@
 
                     return result;
                 }
+
+                @Override
+                public List<String> getNonIndexableKeys(Context context) {
+                    final List<String> keys = super.getNonIndexableKeys(context);
+                    if (!new BackupSettingsHelper(context).showBackupSettingsForUser()) {
+                        keys.add(BACKUP_SEARCH_INDEX_KEY);
+                    }
+                    return keys;
+                }
             };
 
     @VisibleForTesting
