diff --git a/src/com/android/settings/backup/OWNERS b/src/com/android/settings/backup/OWNERS
index 0f88811..9b033ca 100644
--- a/src/com/android/settings/backup/OWNERS
+++ b/src/com/android/settings/backup/OWNERS
@@ -2,3 +2,5 @@
 
 include platform/frameworks/base:/services/backup/OWNERS
 
+# Android Settings Core
+jiannan@google.com
diff --git a/src/com/android/settings/backup/SettingsBackupHelper.java b/src/com/android/settings/backup/SettingsBackupHelper.java
index 04935a7..ecf4c71 100644
--- a/src/com/android/settings/backup/SettingsBackupHelper.java
+++ b/src/com/android/settings/backup/SettingsBackupHelper.java
@@ -19,25 +19,15 @@
 import static com.android.settings.localepicker.LocaleNotificationDataManager.LOCALE_NOTIFICATION;
 
 import android.app.backup.BackupAgentHelper;
-import android.app.backup.BackupDataInputStream;
-import android.app.backup.BackupDataOutput;
-import android.app.backup.BackupHelper;
 import android.app.backup.SharedPreferencesBackupHelper;
-import android.os.ParcelFileDescriptor;
 
+import com.android.settings.flags.Flags;
 import com.android.settings.fuelgauge.BatteryBackupHelper;
 import com.android.settings.onboarding.OnboardingFeatureProvider;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.shortcut.CreateShortcutPreferenceController;
 
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import com.android.settings.flags.Flags;
-
-/**
- * Backup agent for Settings APK
- */
+/** Backup agent for Settings APK */
 public class SettingsBackupHelper extends BackupAgentHelper {
     private static final String PREF_LOCALE_NOTIFICATION = "localeNotificationSharedPref";
     public static final String SOUND_BACKUP_HELPER = "SoundSettingsBackup";
@@ -45,7 +35,6 @@
     @Override
     public void onCreate() {
         super.onCreate();
-        addHelper("no-op", new NoOpHelper());
         addHelper(BatteryBackupHelper.TAG, new BatteryBackupHelper(this));
         addHelper(PREF_LOCALE_NOTIFICATION,
                 new SharedPreferencesBackupHelper(this, LOCALE_NOTIFICATION));
@@ -64,46 +53,4 @@
         super.onRestoreFinished();
         CreateShortcutPreferenceController.updateRestoredShortcuts(this);
     }
-
-    /**
-     * Backup helper which does not do anything. Having at least one helper ensures that the
-     * transport is not empty and onRestoreFinished is called eventually.
-     */
-    private static class NoOpHelper implements BackupHelper {
-
-        private final int VERSION_CODE = 1;
-
-        @Override
-        public void performBackup(ParcelFileDescriptor oldState, BackupDataOutput data,
-                ParcelFileDescriptor newState) {
-
-            try (FileOutputStream out = new FileOutputStream(newState.getFileDescriptor())) {
-                if (getVersionCode(oldState) != VERSION_CODE) {
-                    data.writeEntityHeader("placeholder", 1);
-                    data.writeEntityData(new byte[1], 1);
-                }
-
-                // Write new version code
-                out.write(VERSION_CODE);
-                out.flush();
-            } catch (IOException e) { }
-        }
-
-        @Override
-        public void restoreEntity(BackupDataInputStream data) { }
-
-        @Override
-        public void writeNewStateDescription(ParcelFileDescriptor newState) { }
-
-        private int getVersionCode(ParcelFileDescriptor state) {
-            if (state == null) {
-                return 0;
-            }
-            try (FileInputStream in = new FileInputStream(state.getFileDescriptor())) {
-                return in.read();
-            } catch (IOException e) {
-                return 0;
-            }
-        }
-    }
 }
