diff --git a/delta_diff_generator.cc b/delta_diff_generator.cc
index 3dcd2cb..3011026 100644
--- a/delta_diff_generator.cc
+++ b/delta_diff_generator.cc
@@ -446,7 +446,7 @@
         type(in_type),
         size(in_size) {}
   bool operator <(const DeltaObject& object) const {
-    return size < object.size;
+    return (size != object.size) ? (size < object.size) : (name < object.name);
   }
   string name;
   int type;
@@ -618,7 +618,7 @@
   TEST_AND_RETURN_FALSE(hasher.Finalize());
   const vector<char>& hash = hasher.raw_hash();
   info->set_hash(hash.data(), hash.size());
-  LOG(INFO) << "hash: " << hasher.hash();
+  LOG(INFO) << partition << ": size=" << size << " hash=" << hasher.hash();
   return true;
 }
 
@@ -627,8 +627,12 @@
                               const string& old_rootfs,
                               const string& new_rootfs,
                               DeltaArchiveManifest* manifest) {
-  // TODO(petkov): Generate the old kernel info when we stop generating full
-  // updates for the kernel partition.
+  if (!old_kernel.empty()) {
+    TEST_AND_RETURN_FALSE(
+        InitializePartitionInfo(true,
+                                old_kernel,
+                                manifest->mutable_old_kernel_info()));
+  }
   TEST_AND_RETURN_FALSE(
       InitializePartitionInfo(true,
                               new_kernel,
diff --git a/delta_performer_unittest.cc b/delta_performer_unittest.cc
index 5a48441..e9d44fa 100755
--- a/delta_performer_unittest.cc
+++ b/delta_performer_unittest.cc
@@ -258,9 +258,12 @@
     EXPECT_EQ(expected_sig_data_length, manifest.signatures_size());
     EXPECT_FALSE(signature.data().empty());
 
-    // TODO(petkov): Add a test once the generator start sending old kernel
-    // info.
-    EXPECT_FALSE(manifest.has_old_kernel_info());
+    if (full_kernel) {
+      EXPECT_FALSE(manifest.has_old_kernel_info());
+    } else {
+      EXPECT_EQ(old_kernel_data.size(), manifest.old_kernel_info().size());
+      EXPECT_FALSE(manifest.old_kernel_info().hash().empty());
+    }
 
     EXPECT_EQ(new_kernel_data.size(), manifest.new_kernel_info().size());
     EXPECT_EQ(image_size, manifest.old_rootfs_info().size());
@@ -288,14 +291,20 @@
   // Update the A image in place.
   DeltaPerformer performer(&prefs);
 
+  vector<char> rootfs_hash;
+  EXPECT_EQ(image_size,
+            OmahaHashCalculator::RawHashOfFile(a_img,
+                                               image_size,
+                                               &rootfs_hash));
+  performer.set_current_rootfs_hash(&rootfs_hash);
+  vector<char> kernel_hash;
+  EXPECT_TRUE(OmahaHashCalculator::RawHashOfData(old_kernel_data,
+                                                 &kernel_hash));
+  performer.set_current_kernel_hash(&kernel_hash);
+
   EXPECT_EQ(0, performer.Open(a_img.c_str(), 0, 0));
   EXPECT_TRUE(performer.OpenKernel(old_kernel.c_str()));
 
-  vector<char> rootfs_hash;
-  CHECK_EQ(image_size,
-           OmahaHashCalculator::RawHashOfFile(a_img, image_size, &rootfs_hash));
-  performer.set_current_rootfs_hash(&rootfs_hash);
-
   // Write at some number of bytes per operation. Arbitrarily chose 5.
   const size_t kBytesPerWrite = 5;
   for (size_t i = 0; i < delta.size(); i += kBytesPerWrite) {
