diff --git a/tangostationcontrol/tangostationcontrol/devices/sdp/firmware.py b/tangostationcontrol/tangostationcontrol/devices/sdp/firmware.py
index 80ecd178b4a03f8de2c3522eaa747c1439c8246c..85874d37d663aca9fe664d4461199ed61c909fee 100644
--- a/tangostationcontrol/tangostationcontrol/devices/sdp/firmware.py
+++ b/tangostationcontrol/tangostationcontrol/devices/sdp/firmware.py
@@ -262,31 +262,29 @@ class SDPFirmware(OPCUADevice):
     # overloaded functions
     # --------
 
-    def _power_hardware_on(self):
-        """Boot the SDP Firmware user image"""
+    def _boot_to_image(self, image_nr):
         # FPGAs that are actually reachable and we care about
         wait_for = ~(
             self.read_attribute("TR_fpga_communication_error_R")
         ) & self.read_attribute("TR_fpga_mask_R")
 
         # Order the correct firmare to be loaded
-        self.proxy.FPGA_boot_image_RW = [1] * N_pn
+        self.proxy.FPGA_boot_image_RW = [image_nr] * N_pn
 
         # Wait for the firmware to be loaded (ignoring masked out elements)
         self.wait_attribute(
             "FPGA_boot_image_R", lambda attr: ((attr == 1) | ~wait_for).all(), 60
         )
 
+    def _power_hardware_on(self):
+        """Boot the SDP Firmware user image"""
+
+        self._boot_to_image(0)
+
     def _power_hardware_off(self):
         """Use the SDP Firmware factory image"""
-        # Save actual mask values
-        TR_fpga_mask = self.proxy.TR_fpga_mask_RW
-        # Set the mask to all Trues
-        self.proxy.TR_fpga_mask_RW = [True] * N_pn
-        # Boot the boot image firmware
-        self.proxy.FPGA_boot_image_RW = [0] * N_pn
-        # Restore the mask
-        self.proxy.TR_fpga_mask_RW = TR_fpga_mask
+
+        self._boot_to_image(1)
 
     # --------
     # Commands