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(
