diff --git a/src/org/lineageos/setupwizard/FinishActivity.java b/src/org/lineageos/setupwizard/FinishActivity.java
index 02f40e0..4eeaeb9 100644
--- a/src/org/lineageos/setupwizard/FinishActivity.java
+++ b/src/org/lineageos/setupwizard/FinishActivity.java
@@ -19,8 +19,10 @@
 
 import static org.lineageos.setupwizard.SetupWizardApp.ACTION_SETUP_COMPLETE;
 import static org.lineageos.setupwizard.SetupWizardApp.DISABLE_NAV_KEYS;
+import static org.lineageos.setupwizard.SetupWizardApp.ENABLE_RECOVERY_UPDATE;
 import static org.lineageos.setupwizard.SetupWizardApp.KEY_SEND_METRICS;
 import static org.lineageos.setupwizard.SetupWizardApp.LOGV;
+import static org.lineageos.setupwizard.SetupWizardApp.UPDATE_RECOVERY_PROP;
 
 import android.animation.Animator;
 import android.app.Activity;
@@ -34,6 +36,7 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.UserHandle;
+import android.os.SystemProperties;
 import android.preference.PreferenceManager;
 import android.view.View;
 import android.view.ViewAnimationUtils;
@@ -174,6 +177,7 @@
         }
         handleEnableMetrics(mSetupWizardApp);
         handleNavKeys(mSetupWizardApp);
+        handleRecoveryUpdate(mSetupWizardApp);
         final WallpaperManager wallpaperManager =
                 WallpaperManager.getInstance(mSetupWizardApp);
         wallpaperManager.forgetLoadedWallpaper();
@@ -200,6 +204,15 @@
         }
     }
 
+    private static void handleRecoveryUpdate(SetupWizardApp setupWizardApp) {
+        if (setupWizardApp.getSettingsBundle().containsKey(ENABLE_RECOVERY_UPDATE)) {
+            boolean update = setupWizardApp.getSettingsBundle()
+                    .getBoolean(ENABLE_RECOVERY_UPDATE);
+
+            SystemProperties.set(UPDATE_RECOVERY_PROP, String.valueOf(update));
+        }
+    }
+
     private static void writeDisableNavkeysOption(Context context, boolean enabled) {
         final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
 
diff --git a/src/org/lineageos/setupwizard/SetupWizardApp.java b/src/org/lineageos/setupwizard/SetupWizardApp.java
index ac7e3c0..88581cf 100644
--- a/src/org/lineageos/setupwizard/SetupWizardApp.java
+++ b/src/org/lineageos/setupwizard/SetupWizardApp.java
@@ -65,6 +65,8 @@
     public static final String KEY_DETECT_CAPTIVE_PORTAL = "captive_portal_detection_enabled";
     public static final String KEY_SEND_METRICS = "send_metrics";
     public static final String DISABLE_NAV_KEYS = "disable_nav_keys";
+    public static final String ENABLE_RECOVERY_UPDATE = "enable_recovery_update";
+    public static final String UPDATE_RECOVERY_PROP = "persist.vendor.recovery_update";
 
     public static final int REQUEST_CODE_SETUP_WIFI = 0;
     public static final int REQUEST_CODE_SETUP_CAPTIVE_PORTAL= 4;
diff --git a/src/org/lineageos/setupwizard/UpdateRecoveryActivity.java b/src/org/lineageos/setupwizard/UpdateRecoveryActivity.java
index 6474d12..aebe830 100644
--- a/src/org/lineageos/setupwizard/UpdateRecoveryActivity.java
+++ b/src/org/lineageos/setupwizard/UpdateRecoveryActivity.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2019-2020 The Calyx Institute
+ * Copyright (C) 2020 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,6 +16,9 @@
 
 package org.lineageos.setupwizard;
 
+import static org.lineageos.setupwizard.SetupWizardApp.ENABLE_RECOVERY_UPDATE;
+import static org.lineageos.setupwizard.SetupWizardApp.UPDATE_RECOVERY_PROP;
+
 import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
@@ -30,13 +33,14 @@
 
 public class UpdateRecoveryActivity extends BaseSetupWizardActivity {
 
-    private static final String UPDATE_RECOVERY_PROP = "persist.vendor.recovery_update";
-
     private CheckBox mRecoveryUpdateCheckbox;
+    private SetupWizardApp mSetupWizardApp;
+    private static boolean sFirstTime = true;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        mSetupWizardApp = (SetupWizardApp) getApplication();
 
         if (!SetupWizardUtils.hasRecoveryUpdater(this)) {
             Log.v(TAG, "No recovery updater, skipping UpdateRecoveryActivity");
@@ -54,21 +58,29 @@
         cbView.setOnClickListener(v -> {
             mRecoveryUpdateCheckbox.setChecked(!mRecoveryUpdateCheckbox.isChecked());
         });
+
+        // Allow overriding the default checkbox state
+        if (sFirstTime) {
+            mSetupWizardApp.getSettingsBundle().putBoolean(ENABLE_RECOVERY_UPDATE,
+                    SystemProperties.getBoolean(UPDATE_RECOVERY_PROP, true));
+        }
+
+        sFirstTime = false;
     }
 
     @Override
     public void onResume() {
         super.onResume();
 
-        // Default the checkbox to true, the effect will be reflected when going next
-        mRecoveryUpdateCheckbox.setChecked(
-                SystemProperties.getBoolean(UPDATE_RECOVERY_PROP, true));
+        final Bundle myPageBundle = mSetupWizardApp.getSettingsBundle();
+        final boolean checked = myPageBundle.getBoolean(ENABLE_RECOVERY_UPDATE, true);
+        mRecoveryUpdateCheckbox.setChecked(checked);
     }
 
     @Override
     protected void onNextPressed() {
-        SystemProperties.set(UPDATE_RECOVERY_PROP,
-                String.valueOf(mRecoveryUpdateCheckbox.isChecked()));
+        mSetupWizardApp.getSettingsBundle().putBoolean(ENABLE_RECOVERY_UPDATE,
+                mRecoveryUpdateCheckbox.isChecked());
 
         Intent intent = WizardManagerHelper.getNextIntent(getIntent(), Activity.RESULT_OK);
         nextAction(NEXT_REQUEST, intent);
