diff --git a/fastboot/fastboot.cpp b/fastboot/fastboot.cpp
index ad9b424..699d406 100644
--- a/fastboot/fastboot.cpp
+++ b/fastboot/fastboot.cpp
@@ -1633,6 +1633,19 @@
         // extents, and will achieve more optimal allocation.
         std::vector<std::unique_ptr<ResizeTask>> resize_tasks;
         for (const auto& [image, slot] : os_images_) {
+            // Retrofit devices have two super partitions, named super_a and super_b.
+            // On these devices, secondary slots must be flashed as physical
+            // partitions (otherwise they would not mount on first boot). To enforce
+            // this, we delete any logical partitions for the "other" slot.
+            if (is_retrofit_device()) {
+                std::string partition_name = image->part_name + "_"s + slot;
+                if (image->IsSecondary() && is_logical(partition_name)) {
+                    fp_->fb->DeletePartition(partition_name);
+                    std::unique_ptr<DeleteTask> delete_task =
+                            std::make_unique<DeleteTask>(fp_, partition_name);
+                    delete_task->Run();
+                }
+            }
             resize_tasks.emplace_back(
                     std::make_unique<ResizeTask>(fp_, image->part_name, "0", slot));
         }
@@ -2352,6 +2365,7 @@
             fb->CreatePartition(partition, size);
         } else if (command == FB_CMD_DELETE_PARTITION) {
             std::string partition = next_arg(&args);
+            auto delete_task = std::make_unique<DeleteTask>(fp.get(), partition);
             fb->DeletePartition(partition);
         } else if (command == FB_CMD_RESIZE_PARTITION) {
             std::string partition = next_arg(&args);
diff --git a/fastboot/task.cpp b/fastboot/task.cpp
index 799b5c5..6233c90 100644
--- a/fastboot/task.cpp
+++ b/fastboot/task.cpp
@@ -21,8 +21,8 @@
 
 using namespace std::string_literals;
 
-FlashTask::FlashTask(const std::string& _slot, const std::string& _pname)
-    : pname_(_pname), fname_(find_item(_pname)), slot_(_slot) {
+FlashTask::FlashTask(const std::string& slot, const std::string& pname)
+    : pname_(pname), fname_(find_item(pname)), slot_(slot) {
     if (fname_.empty()) die("cannot determine image filename for '%s'", pname_.c_str());
 }
 FlashTask::FlashTask(const std::string& _slot, const std::string& _pname, const std::string& _fname)
@@ -44,9 +44,9 @@
     do_for_partitions(pname_, slot_, flash, true);
 }
 
-RebootTask::RebootTask(FlashingPlan* _fp) : fp_(_fp){};
-RebootTask::RebootTask(FlashingPlan* _fp, const std::string& _reboot_target)
-    : reboot_target_(_reboot_target), fp_(_fp){};
+RebootTask::RebootTask(FlashingPlan* fp) : fp_(fp){};
+RebootTask::RebootTask(FlashingPlan* fp, const std::string& reboot_target)
+    : reboot_target_(reboot_target), fp_(fp){};
 
 void RebootTask::Run() {
     if ((reboot_target_ == "userspace" || reboot_target_ == "fastboot")) {
@@ -180,3 +180,9 @@
     };
     do_for_partitions(pname_, slot_, resize_partition, false);
 }
+
+DeleteTask::DeleteTask(FlashingPlan* fp, const std::string& pname) : fp_(fp), pname_(pname){};
+
+void DeleteTask::Run() {
+    fp_->fb->DeletePartition(pname_);
+}
\ No newline at end of file
diff --git a/fastboot/task.h b/fastboot/task.h
index 7aa19a3..0af771e 100644
--- a/fastboot/task.h
+++ b/fastboot/task.h
@@ -32,11 +32,10 @@
 
 class FlashTask : public Task {
   public:
-    FlashTask(const std::string& _slot, const std::string& _pname);
-    FlashTask(const std::string& _slot, const std::string& _pname, const std::string& _fname);
+    FlashTask(const std::string& slot, const std::string& pname);
+    FlashTask(const std::string& slot, const std::string& pname, const std::string& fname);
 
     void Run() override;
-    ~FlashTask() {}
 
   private:
     const std::string pname_;
@@ -46,14 +45,13 @@
 
 class RebootTask : public Task {
   public:
-    RebootTask(FlashingPlan* _fp);
-    RebootTask(FlashingPlan* _fp, const std::string& _reboot_target);
+    RebootTask(FlashingPlan* fp);
+    RebootTask(FlashingPlan* fp, const std::string& reboot_target);
     void Run() override;
-    ~RebootTask() {}
 
   private:
     const std::string reboot_target_ = "";
-    FlashingPlan* fp_;
+    const FlashingPlan* fp_;
 };
 
 class FlashSuperLayoutTask : public Task {
@@ -77,7 +75,7 @@
     void Run() override;
 
   private:
-    FlashingPlan* fp_;
+    const FlashingPlan* fp_;
 };
 
 class ResizeTask : public Task {
@@ -87,8 +85,18 @@
     void Run() override;
 
   private:
-    FlashingPlan* fp_;
+    const FlashingPlan* fp_;
     const std::string pname_;
     const std::string size_;
     const std::string slot_;
 };
+
+class DeleteTask : public Task {
+  public:
+    DeleteTask(FlashingPlan* _fp, const std::string& _pname);
+    void Run() override;
+
+  private:
+    const FlashingPlan* fp_;
+    const std::string pname_;
+};
