diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 8077ee3..5f2e1a9 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -639,9 +639,8 @@
                 showDev, isAdmin)
                 || somethingChanged;
 
-        boolean enableBackupTile = new BackupSettingsHelper(this).showBackupSettingsForUser();
         somethingChanged = setTileEnabled(changedList, new ComponentName(packageName,
-                UserBackupSettingsActivity.class.getName()), enableBackupTile, isAdmin)
+                UserBackupSettingsActivity.class.getName()), true, isAdmin)
                 || somethingChanged;
 
         somethingChanged = setTileEnabled(changedList, new ComponentName(packageName,
diff --git a/src/com/android/settings/backup/BackupInactivePreferenceController.java b/src/com/android/settings/backup/BackupInactivePreferenceController.java
index 92a9487..86e1220 100644
--- a/src/com/android/settings/backup/BackupInactivePreferenceController.java
+++ b/src/com/android/settings/backup/BackupInactivePreferenceController.java
@@ -28,7 +28,7 @@
 
     @Override
     public int getAvailabilityStatus() {
-        if (!new BackupSettingsHelper(mContext).showBackupSettingsForUser()) {
+        if (!new BackupSettingsHelper(mContext).isBackupServiceActive()) {
             return AVAILABLE_UNSEARCHABLE;
         }
         if (PrivacySettingsUtils.isInvisibleKey(mContext, PrivacySettingsUtils.BACKUP_INACTIVE)) {
diff --git a/src/com/android/settings/backup/BackupSettingsHelper.java b/src/com/android/settings/backup/BackupSettingsHelper.java
index ff4b0b5..1d3455b 100644
--- a/src/com/android/settings/backup/BackupSettingsHelper.java
+++ b/src/com/android/settings/backup/BackupSettingsHelper.java
@@ -50,14 +50,6 @@
         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 dbbb135..c2bcd07 100644
--- a/src/com/android/settings/backup/UserBackupSettingsActivity.java
+++ b/src/com/android/settings/backup/UserBackupSettingsActivity.java
@@ -123,7 +123,7 @@
                 @Override
                 public List<String> getNonIndexableKeys(Context context) {
                     final List<String> keys = super.getNonIndexableKeys(context);
-                    if (!new BackupSettingsHelper(context).showBackupSettingsForUser()) {
+                    if (!new BackupSettingsHelper(context).isBackupServiceActive()) {
                         keys.add(BACKUP_SEARCH_INDEX_KEY);
                     }
                     return keys;
