diff --git a/aosp/ota_extractor.cc b/aosp/ota_extractor.cc
index 4a57370..713cfc3 100644
--- a/aosp/ota_extractor.cc
+++ b/aosp/ota_extractor.cc
@@ -163,7 +163,7 @@
                  op.type() == InstallOperation::REPLACE_BZ ||
                  op.type() == InstallOperation::REPLACE_XZ) {
         TEST_AND_RETURN_FALSE(executor.ExecuteReplaceOperation(
-            op, std::move(direct_writer), blob.data(), blob.size()));
+            op, std::move(direct_writer), blob.data()));
       } else if (op.type() == InstallOperation::SOURCE_COPY) {
         CHECK(in_fd->IsOpen());
         TEST_AND_RETURN_FALSE(executor.ExecuteSourceCopyOperation(
diff --git a/payload_consumer/install_operation_executor.cc b/payload_consumer/install_operation_executor.cc
index cd6546f..73ca879 100644
--- a/payload_consumer/install_operation_executor.cc
+++ b/payload_consumer/install_operation_executor.cc
@@ -178,8 +178,7 @@
 bool InstallOperationExecutor::ExecuteReplaceOperation(
     const InstallOperation& operation,
     std::unique_ptr<ExtentWriter> writer,
-    const void* data,
-    size_t count) {
+    const void* data) {
   TEST_AND_RETURN_FALSE(operation.type() == InstallOperation::REPLACE ||
                         operation.type() == InstallOperation::REPLACE_BZ ||
                         operation.type() == InstallOperation::REPLACE_XZ);
diff --git a/payload_consumer/install_operation_executor.h b/payload_consumer/install_operation_executor.h
index 6c84faf..85af3ba 100644
--- a/payload_consumer/install_operation_executor.h
+++ b/payload_consumer/install_operation_executor.h
@@ -30,10 +30,10 @@
   explicit InstallOperationExecutor(size_t block_size)
       : block_size_(block_size) {}
 
+  // data should point to the memory of operation.data_length() bytes
   bool ExecuteReplaceOperation(const InstallOperation& operation,
                                std::unique_ptr<ExtentWriter> writer,
-                               const void* data,
-                               size_t count);
+                               const void* data);
   bool ExecuteZeroOrDiscardOperation(const InstallOperation& operation,
                                      std::unique_ptr<ExtentWriter> writer);
   bool ExecuteSourceCopyOperation(const InstallOperation& operation,
diff --git a/payload_consumer/install_operation_executor_unittest.cc b/payload_consumer/install_operation_executor_unittest.cc
index 705d8f8..78aa31e 100644
--- a/payload_consumer/install_operation_executor_unittest.cc
+++ b/payload_consumer/install_operation_executor_unittest.cc
@@ -150,7 +150,7 @@
   }
   auto writer = std::make_unique<DirectExtentWriter>(target_fd_);
   ASSERT_TRUE(executor_.ExecuteReplaceOperation(
-      op, std::move(writer), expected_data.data(), expected_data.size()));
+      op, std::move(writer), expected_data.data()));
 
   brillo::Blob actual_data;
   utils::ReadExtents(
@@ -237,8 +237,13 @@
       .version = PayloadVersion(kBrilloMajorPayloadVersion,
                                 kZucchiniMinorPayloadVersion)};
   const FilesystemInterface::File empty;
-  diff_utils::BestDiffGenerator best_diff_generator(
-      source_data_, target_data_, src_extents, dst_extents, empty, empty, config);
+  diff_utils::BestDiffGenerator best_diff_generator(source_data_,
+                                                    target_data_,
+                                                    src_extents,
+                                                    dst_extents,
+                                                    empty,
+                                                    empty,
+                                                    config);
   std::vector<uint8_t> patch_data = target_data_;  // Fake the full operation
   AnnotatedOperation aop;
   // Zucchini is enabled only on files with certain extensions
diff --git a/payload_consumer/partition_writer.cc b/payload_consumer/partition_writer.cc
index 2ec05f5..e55722c 100644
--- a/payload_consumer/partition_writer.cc
+++ b/payload_consumer/partition_writer.cc
@@ -190,7 +190,7 @@
   // Setup the ExtentWriter stack based on the operation type.
   std::unique_ptr<ExtentWriter> writer = CreateBaseExtentWriter();
   return install_op_executor_.ExecuteReplaceOperation(
-      operation, std::move(writer), data, count);
+      operation, std::move(writer), data);
 }
 
 bool PartitionWriter::PerformZeroOrDiscardOperation(
diff --git a/payload_consumer/vabc_partition_writer.cc b/payload_consumer/vabc_partition_writer.cc
index 1a7a049..97de934 100644
--- a/payload_consumer/vabc_partition_writer.cc
+++ b/payload_consumer/vabc_partition_writer.cc
@@ -344,7 +344,7 @@
   // Setup the ExtentWriter stack based on the operation type.
   std::unique_ptr<ExtentWriter> writer = CreateBaseExtentWriter();
 
-  return executor_.ExecuteReplaceOperation(op, std::move(writer), data, count);
+  return executor_.ExecuteReplaceOperation(op, std::move(writer), data);
 }
 
 bool VABCPartitionWriter::PerformDiffOperation(
