diff --git a/common/constants.cc b/common/constants.cc
index 1648596..8883668 100644
--- a/common/constants.cc
+++ b/common/constants.cc
@@ -98,8 +98,6 @@
 const char kPrefsUpdateStateNextDataLength[] = "update-state-next-data-length";
 const char kPrefsUpdateStateNextDataOffset[] = "update-state-next-data-offset";
 const char kPrefsUpdateStateNextOperation[] = "update-state-next-operation";
-const char kPrefsUpdateStatePartitionNextOperation[] =
-    "update-state-partition-next-operation";
 const char kPrefsUpdateStatePayloadIndex[] = "update-state-payload-index";
 const char kPrefsUpdateStateSHA256Context[] = "update-state-sha-256-context";
 const char kPrefsUpdateStateSignatureBlob[] = "update-state-signature-blob";
diff --git a/common/constants.h b/common/constants.h
index 2a2a62a..3685102 100644
--- a/common/constants.h
+++ b/common/constants.h
@@ -95,7 +95,6 @@
 extern const char kPrefsUpdateStateNextDataLength[];
 extern const char kPrefsUpdateStateNextDataOffset[];
 extern const char kPrefsUpdateStateNextOperation[];
-extern const char kPrefsUpdateStatePartitionNextOperation[];
 extern const char kPrefsUpdateStatePayloadIndex[];
 extern const char kPrefsUpdateStateSHA256Context[];
 extern const char kPrefsUpdateStateSignatureBlob[];
diff --git a/payload_consumer/delta_performer.cc b/payload_consumer/delta_performer.cc
index b75c8cf..30bd1ef 100644
--- a/payload_consumer/delta_performer.cc
+++ b/payload_consumer/delta_performer.cc
@@ -48,7 +48,6 @@
 #include "update_engine/common/prefs_interface.h"
 #include "update_engine/common/subprocess.h"
 #include "update_engine/common/terminator.h"
-#include "update_engine/common/utils.h"
 #include "update_engine/payload_consumer/bzip_extent_writer.h"
 #include "update_engine/payload_consumer/cached_file_descriptor.h"
 #include "update_engine/payload_consumer/certificate_parser_interface.h"
@@ -248,7 +247,6 @@
       install_part,
       dynamic_control,
       block_size_,
-      prefs_,
       interactive_,
       IsDynamicPartition(install_part.name));
   // Open source fds if we have a delta payload, or for partitions in the
@@ -1337,13 +1335,6 @@
         next_operation != kUpdateStateOperationInvalid && next_operation > 0))
     return false;
 
-  int64_t partition_next_op = -1;
-  if (!(prefs->GetInt64(kPrefsUpdateStatePartitionNextOperation,
-                        &partition_next_op) &&
-        partition_next_op >= 0)) {
-    return false;
-  }
-
   string interrupted_hash;
   if (!(prefs->GetString(kPrefsUpdateCheckResponseHash, &interrupted_hash) &&
         !interrupted_hash.empty() &&
@@ -1396,7 +1387,6 @@
     prefs->SetString(kPrefsUpdateStateSignatureBlob, "");
     prefs->SetInt64(kPrefsManifestMetadataSize, -1);
     prefs->SetInt64(kPrefsManifestSignatureSize, -1);
-    prefs->SetInt64(kPrefsUpdateStatePartitionNextOperation, -1);
     prefs->SetInt64(kPrefsResumedUpdateFailures, 0);
     prefs->Delete(kPrefsPostInstallSucceeded);
     prefs->Delete(kPrefsVerityWritten);
@@ -1441,7 +1431,6 @@
           partitions_[partition_index].operations(partition_operation_num);
       TEST_AND_RETURN_FALSE(
           prefs_->SetInt64(kPrefsUpdateStateNextDataLength, op.data_length()));
-      partition_writer_->CheckpointUpdateProgress(partition_operation_num);
     } else {
       TEST_AND_RETURN_FALSE(
           prefs_->SetInt64(kPrefsUpdateStateNextDataLength, 0));
diff --git a/payload_consumer/delta_performer_integration_test.cc b/payload_consumer/delta_performer_integration_test.cc
index e83a20d..374131e 100644
--- a/payload_consumer/delta_performer_integration_test.cc
+++ b/payload_consumer/delta_performer_integration_test.cc
@@ -718,8 +718,6 @@
       .WillOnce(Return(true));
   EXPECT_CALL(prefs, SetInt64(kPrefsUpdateStateNextOperation, _))
       .WillRepeatedly(Return(true));
-  EXPECT_CALL(prefs, SetInt64(kPrefsUpdateStatePartitionNextOperation, _))
-      .WillRepeatedly(Return(true));
   EXPECT_CALL(prefs, GetInt64(kPrefsUpdateStateNextOperation, _))
       .WillOnce(Return(false));
   EXPECT_CALL(prefs, SetInt64(kPrefsUpdateStateNextDataOffset, _))
diff --git a/payload_consumer/partition_writer.cc b/payload_consumer/partition_writer.cc
index 12b206e..ec36d06 100644
--- a/payload_consumer/partition_writer.cc
+++ b/payload_consumer/partition_writer.cc
@@ -242,14 +242,12 @@
     const InstallPlan::Partition& install_part,
     DynamicPartitionControlInterface* dynamic_control,
     size_t block_size,
-    PrefsInterface* prefs,
     bool is_interactive)
     : partition_update_(partition_update),
       install_part_(install_part),
       dynamic_control_(dynamic_control),
       interactive_(is_interactive),
-      block_size_(block_size),
-      prefs_(prefs) {}
+      block_size_(block_size) {}
 
 PartitionWriter::~PartitionWriter() {
   Close();
diff --git a/payload_consumer/partition_writer.h b/payload_consumer/partition_writer.h
index a67339e..1acbddc 100644
--- a/payload_consumer/partition_writer.h
+++ b/payload_consumer/partition_writer.h
@@ -25,7 +25,6 @@
 #include <gtest/gtest_prod.h>
 
 #include "update_engine/common/dynamic_partition_control_interface.h"
-#include "update_engine/common/prefs_interface.h"
 #include "update_engine/payload_consumer/extent_writer.h"
 #include "update_engine/payload_consumer/file_descriptor.h"
 #include "update_engine/payload_consumer/install_plan.h"
@@ -37,7 +36,6 @@
                   const InstallPlan::Partition& install_part,
                   DynamicPartitionControlInterface* dynamic_control,
                   size_t block_size,
-                  PrefsInterface* prefs,
                   bool is_interactive);
   virtual ~PartitionWriter();
   static bool ValidateSourceHash(const brillo::Blob& calculated_hash,
@@ -50,11 +48,6 @@
   [[nodiscard]] virtual bool Init(const InstallPlan* install_plan,
                                   bool source_may_exist);
 
-  // This will be called by DeltaPerformer after applying an InstallOp.
-  // |next_op_index| is index of next operation that should be applied.
-  // |next_op_index-1| is the last operation that is already applied.
-  virtual void CheckpointUpdateProgress(size_t next_op_index) {}
-
   int Close();
 
   // These perform a specific type of operation and return true on success.
@@ -118,8 +111,6 @@
   // Used to avoid re-opening the same source partition if it is not actually
   // error corrected.
   bool source_ecc_open_failure_{false};
-
-  PrefsInterface* prefs_;
 };
 
 namespace partition_writer {
@@ -130,7 +121,6 @@
     const InstallPlan::Partition& install_part,
     DynamicPartitionControlInterface* dynamic_control,
     size_t block_size,
-    PrefsInterface* prefs,
     bool is_interactive,
     bool is_dynamic_partition);
 }  // namespace partition_writer
diff --git a/payload_consumer/partition_writer_factory_android.cc b/payload_consumer/partition_writer_factory_android.cc
index 5960d9b..0c9f7ea 100644
--- a/payload_consumer/partition_writer_factory_android.cc
+++ b/payload_consumer/partition_writer_factory_android.cc
@@ -19,7 +19,6 @@
 
 #include <base/logging.h>
 
-#include "update_engine/common/prefs_interface.h"
 #include "update_engine/payload_consumer/vabc_partition_writer.h"
 
 namespace chromeos_update_engine::partition_writer {
@@ -29,7 +28,6 @@
     const InstallPlan::Partition& install_part,
     DynamicPartitionControlInterface* dynamic_control,
     size_t block_size,
-    PrefsInterface* prefs,
     bool is_interactive,
     bool is_dynamic_partition) {
   if (dynamic_control &&
@@ -42,7 +40,6 @@
                                                  install_part,
                                                  dynamic_control,
                                                  block_size,
-                                                 prefs,
                                                  is_interactive);
   } else {
     LOG(INFO) << "Virtual AB Compression disabled, using Partition Writer for `"
@@ -51,7 +48,6 @@
                                              install_part,
                                              dynamic_control,
                                              block_size,
-                                             prefs,
                                              is_interactive);
   }
 }
diff --git a/payload_consumer/partition_writer_factory_chromeos.cc b/payload_consumer/partition_writer_factory_chromeos.cc
index d89beb7..609f043 100644
--- a/payload_consumer/partition_writer_factory_chromeos.cc
+++ b/payload_consumer/partition_writer_factory_chromeos.cc
@@ -27,14 +27,12 @@
     const InstallPlan::Partition& install_part,
     DynamicPartitionControlInterface* dynamic_control,
     size_t block_size,
-    PrefsInterface* prefs,
     bool is_interactive,
     bool is_dynamic_partition) {
   return std::make_unique<PartitionWriter>(partition_update,
                                            install_part,
                                            dynamic_control,
                                            block_size,
-                                           prefs,
                                            is_interactive);
 }
 }  // namespace chromeos_update_engine::partition_writer
diff --git a/payload_consumer/partition_writer_unittest.cc b/payload_consumer/partition_writer_unittest.cc
index ca2ef41..1ef4783 100644
--- a/payload_consumer/partition_writer_unittest.cc
+++ b/payload_consumer/partition_writer_unittest.cc
@@ -112,12 +112,8 @@
   DeltaArchiveManifest manifest_{};
   PartitionUpdate partition_update_{};
   InstallPlan::Partition install_part_{};
-  PartitionWriter writer_{partition_update_,
-                          install_part_,
-                          &dynamic_control_,
-                          kBlockSize,
-                          &prefs_,
-                          false};
+  PartitionWriter writer_{
+      partition_update_, install_part_, &dynamic_control_, kBlockSize, false};
 };
 // Test that the error-corrected file descriptor is used to read a partition
 // when no hash is available for SOURCE_COPY but it falls back to the normal
diff --git a/payload_consumer/vabc_partition_writer.cc b/payload_consumer/vabc_partition_writer.cc
index e8994b4..d95103b 100644
--- a/payload_consumer/vabc_partition_writer.cc
+++ b/payload_consumer/vabc_partition_writer.cc
@@ -30,30 +30,6 @@
 #include "update_engine/payload_consumer/snapshot_extent_writer.h"
 
 namespace chromeos_update_engine {
-// Expected layout of COW file:
-// === Beginning of Cow Image ===
-// All Source Copy Operations
-// ========== Label 0 ==========
-// Operation 0 in PartitionUpdate
-// ========== Label 1 ==========
-// Operation 1 in PartitionUpdate
-// ========== label 2 ==========
-// Operation 2 in PartitionUpdate
-// ========== label 3 ==========
-// .
-// .
-// .
-
-// When resuming, pass |kPrefsUpdateStatePartitionNextOperation| as label to
-// |InitializeWithAppend|.
-// For example, suppose we finished writing SOURCE_COPY, and we finished writing
-// operation 2 completely. Update is suspended when we are half way through
-// operation 3.
-// |kPrefsUpdateStatePartitionNextOperation| would be 3, so we pass 3 as
-// label to |InitializeWithAppend|. The CowWriter will retain all data before
-// label 3, Which contains all operation 2's data, but none of operation 3's
-// data.
-
 bool VABCPartitionWriter::Init(const InstallPlan* install_plan,
                                bool source_may_exist) {
   TEST_AND_RETURN_FALSE(install_plan != nullptr);
@@ -62,41 +38,19 @@
       install_part_.name, install_part_.source_path, install_plan->is_resume);
   TEST_AND_RETURN_FALSE(cow_writer_ != nullptr);
 
-  // Emit a label before writing SOURCE_COPY. When resuming,
+  // TODO(zhangkelvin) Emit a label before writing SOURCE_COPY. When resuming,
   // use pref or CowWriter::GetLastLabel to determine if the SOURCE_COPY ops are
   // written. No need to handle SOURCE_COPY operations when resuming.
 
   // ===== Resume case handling code goes here ====
-  if (install_plan->is_resume) {
-    int64_t next_op = 0;
-    if (!prefs_->GetInt64(kPrefsUpdateStatePartitionNextOperation, &next_op)) {
-      LOG(ERROR)
-          << "Resuming an update but can't fetch |next_op| from saved prefs.";
-      return false;
-    }
-    if (next_op < 0) {
-      TEST_AND_RETURN_FALSE(cow_writer_->Initialize());
-    } else {
-      TEST_AND_RETURN_FALSE(cow_writer_->InitializeAppend(next_op));
-      return true;
-    }
-  } else {
-    TEST_AND_RETURN_FALSE(cow_writer_->Initialize());
-  }
 
   // ==============================================
-  TEST_AND_RETURN_FALSE(
-      prefs_->SetInt64(kPrefsUpdateStatePartitionNextOperation, -1));
 
   // TODO(zhangkelvin) Rewrite this in C++20 coroutine once that's available.
   auto converted = ConvertToCowOperations(partition_update_.operations(),
                                           partition_update_.merge_operations());
 
   WriteAllCowOps(block_size_, converted, cow_writer_.get(), source_fd_);
-  // Emit label 0 to mark end of all SOURCE_COPY operations
-  cow_writer_->AddLabel(0);
-  TEST_AND_RETURN_FALSE(
-      prefs_->SetInt64(kPrefsUpdateStatePartitionNextOperation, 0));
   return true;
 }
 
@@ -153,27 +107,11 @@
 }
 
 bool VABCPartitionWriter::Flush() {
-  // No need to call fsync/sync, as CowWriter flushes after a label is added
-  // added.
-  int64_t next_op = 0;
-  // |kPrefsUpdateStatePartitionNextOperation| will be maintained and set by
-  // CheckpointUpdateProgress()
-  TEST_AND_RETURN_FALSE(
-      prefs_->GetInt64(kPrefsUpdateStatePartitionNextOperation, &next_op));
-  // +1 because label 0 is reserved for SOURCE_COPY. See beginning of this
-  // file for explanation for cow format.
-  cow_writer_->AddLabel(next_op + 1);
+  // No need to do anything, as CowWriter automatically flushes every OP added.
   return true;
 }
 
-void VABCPartitionWriter::CheckpointUpdateProgress(size_t next_op_index) {
-  prefs_->SetInt64(kPrefsUpdateStatePartitionNextOperation, next_op_index);
-}
-
 VABCPartitionWriter::~VABCPartitionWriter() {
-  // Reset |kPrefsUpdateStatePartitionNextOperation| once we finished a
-  // partition.
-  prefs_->SetInt64(kPrefsUpdateStatePartitionNextOperation, -1);
   cow_writer_->Finalize();
 }
 
diff --git a/payload_consumer/vabc_partition_writer.h b/payload_consumer/vabc_partition_writer.h
index ddade70..7657cb4 100644
--- a/payload_consumer/vabc_partition_writer.h
+++ b/payload_consumer/vabc_partition_writer.h
@@ -44,7 +44,6 @@
   [[nodiscard]] bool PerformSourceCopyOperation(
       const InstallOperation& operation, ErrorCode* error) override;
   [[nodiscard]] bool Flush() override;
-  void CheckpointUpdateProgress(size_t next_op_index) override;
 
   static bool WriteAllCowOps(size_t block_size,
                              const std::vector<CowOperation>& converted,
