diff --git a/payload_generator/delta_diff_generator.cc b/payload_generator/delta_diff_generator.cc
index 46dfb0f..cfec1b9 100644
--- a/payload_generator/delta_diff_generator.cc
+++ b/payload_generator/delta_diff_generator.cc
@@ -110,7 +110,7 @@
       return;
     }
     if (!old_part_.path.empty()) {
-      auto generator = MergeSequenceGenerator::Create(*aops_);
+      auto generator = MergeSequenceGenerator::Create(*aops_, new_part_.name);
       if (!generator || !generator->Generate(cow_merge_sequence_)) {
         LOG(FATAL) << "Failed to generate merge sequence";
       }
diff --git a/payload_generator/merge_sequence_generator.cc b/payload_generator/merge_sequence_generator.cc
index 1fda252..be8a50f 100644
--- a/payload_generator/merge_sequence_generator.cc
+++ b/payload_generator/merge_sequence_generator.cc
@@ -176,7 +176,8 @@
 }
 
 std::unique_ptr<MergeSequenceGenerator> MergeSequenceGenerator::Create(
-    const std::vector<AnnotatedOperation>& aops) {
+    const std::vector<AnnotatedOperation>& aops,
+    std::string_view partition_name) {
   std::vector<CowMergeOperation> sequence;
 
   for (const auto& aop : aops) {
@@ -192,7 +193,7 @@
   }
 
   return std::unique_ptr<MergeSequenceGenerator>(
-      new MergeSequenceGenerator(sequence));
+      new MergeSequenceGenerator(sequence, partition_name));
 }
 
 bool MergeSequenceGenerator::FindDependency(
@@ -345,7 +346,8 @@
   }
 
   LOG(INFO) << "Blocks in merge sequence " << blocks_in_sequence
-            << ", blocks in raw " << blocks_in_raw;
+            << ", blocks in raw " << blocks_in_raw << ", partition "
+            << partition_name_;
   if (!ValidateSequence(merge_sequence)) {
     LOG(ERROR) << "Invalid Sequence";
     return false;
diff --git a/payload_generator/merge_sequence_generator.h b/payload_generator/merge_sequence_generator.h
index 44a9980..1ee6861 100644
--- a/payload_generator/merge_sequence_generator.h
+++ b/payload_generator/merge_sequence_generator.h
@@ -56,9 +56,12 @@
   // Creates an object from a list of OTA InstallOperations. Returns nullptr
   // on failure.
   static std::unique_ptr<MergeSequenceGenerator> Create(
-      const std::vector<AnnotatedOperation>& aops);
-  explicit MergeSequenceGenerator(std::vector<CowMergeOperation> transfers)
-      : operations_(std::move(Sort(transfers))) {}
+      const std::vector<AnnotatedOperation>& aops,
+      std::string_view partition_name = "");
+  explicit MergeSequenceGenerator(std::vector<CowMergeOperation> transfers,
+                                  std::string_view partition_name)
+      : operations_(std::move(Sort(transfers))),
+        partition_name_(partition_name) {}
   // Checks that no read after write happens in the given sequence.
   static bool ValidateSequence(const std::vector<CowMergeOperation>& sequence);
 
@@ -75,6 +78,7 @@
                           merge_after) const;
   // The list of CowMergeOperations to sort.
   const std::vector<CowMergeOperation> operations_;
+  const std::string_view partition_name_;
 };
 
 void SplitSelfOverlapping(const Extent& src_extent,
diff --git a/payload_generator/merge_sequence_generator_unittest.cc b/payload_generator/merge_sequence_generator_unittest.cc
index 81bcfe7..e1e11c0 100644
--- a/payload_generator/merge_sequence_generator_unittest.cc
+++ b/payload_generator/merge_sequence_generator_unittest.cc
@@ -46,13 +46,13 @@
       std::vector<CowMergeOperation> transfers,
       std::map<CowMergeOperation, std::set<CowMergeOperation>>* result) {
     std::sort(transfers.begin(), transfers.end());
-    MergeSequenceGenerator generator(std::move(transfers));
+    MergeSequenceGenerator generator(std::move(transfers), "");
     ASSERT_TRUE(generator.FindDependency(result));
   }
 
   void GenerateSequence(std::vector<CowMergeOperation> transfers) {
     std::sort(transfers.begin(), transfers.end());
-    MergeSequenceGenerator generator(std::move(transfers));
+    MergeSequenceGenerator generator(std::move(transfers), "");
     std::vector<CowMergeOperation> sequence;
     ASSERT_TRUE(generator.Generate(&sequence));
   }
@@ -428,7 +428,7 @@
   for (const auto& op : part.merge_operations()) {
     ops.emplace_back(op);
   }
-  MergeSequenceGenerator generator(ops);
+  MergeSequenceGenerator generator(ops, part.partition_name());
   std::vector<CowMergeOperation> sequence;
   ASSERT_TRUE(generator.Generate(&sequence));
 }
