diff --git a/delta_performer_unittest.cc b/delta_performer_unittest.cc
index b32ffc9..4e39c0c 100644
--- a/delta_performer_unittest.cc
+++ b/delta_performer_unittest.cc
@@ -11,6 +11,7 @@
 #include <string>
 #include <vector>
 
+#include <base/files/file_path.h>
 #include <base/files/file_util.h>
 #include <base/strings/string_util.h>
 #include <base/strings/stringprintf.h>
@@ -1339,4 +1340,13 @@
   EXPECT_TRUE(test_utils::RecursiveUnlinkDir(temp_dir));
 }
 
+TEST(DeltaPerformerTest, MinorVersionsMatch) {
+  // Test that the minor version in update_engine.conf that is installed to
+  // the image matches the supported delta minor version in the update engine.
+  uint32_t minor_version;
+  base::FilePath conf_path("update_engine.conf");
+  EXPECT_TRUE(utils::GetMinorVersion(conf_path, &minor_version));
+  ASSERT_EQ(DeltaPerformer::kSupportedMinorPayloadVersion, minor_version);
+}
+
 }  // namespace chromeos_update_engine
diff --git a/payload_generator/delta_diff_generator.cc b/payload_generator/delta_diff_generator.cc
index 0791f4d..f11b694 100644
--- a/payload_generator/delta_diff_generator.cc
+++ b/payload_generator/delta_diff_generator.cc
@@ -1574,7 +1574,7 @@
     const string& private_key_path,
     off_t chunk_size,
     size_t rootfs_partition_size,
-    uint64_t minor_version,
+    uint32_t minor_version,
     const ImageInfo* old_image_info,
     const ImageInfo* new_image_info,
     uint64_t* metadata_size) {
diff --git a/payload_generator/delta_diff_generator.h b/payload_generator/delta_diff_generator.h
index a6dfa6a..8fc84eb 100644
--- a/payload_generator/delta_diff_generator.h
+++ b/payload_generator/delta_diff_generator.h
@@ -81,7 +81,7 @@
                                       const std::string& private_key_path,
                                       off_t chunk_size,
                                       size_t rootfs_partition_size,
-                                      uint64_t minor_version,
+                                      uint32_t minor_version,
                                       const ImageInfo* old_image_info,
                                       const ImageInfo* new_image_info,
                                       uint64_t* metadata_size);
diff --git a/payload_generator/generate_delta_main.cc b/payload_generator/generate_delta_main.cc
index cbcbaf0..4832430 100644
--- a/payload_generator/generate_delta_main.cc
+++ b/payload_generator/generate_delta_main.cc
@@ -40,7 +40,8 @@
 
 namespace {
 
-const uint64_t kInPlaceMinorPayloadVersion = 1;
+// The minor version used by the in-place delta generator algorithm.
+const uint32_t kInPlaceMinorPayloadVersion = 1;
 
 void ParseSignatureSizes(const string& signature_sizes_flag,
                          vector<int>* signature_sizes) {
@@ -255,7 +256,7 @@
   DEFINE_int64(rootfs_partition_size,
                chromeos_update_engine::kRootFSPartitionSize,
                "RootFS partition size for the image once installed");
-  DEFINE_int64(minor_version, 0,
+  DEFINE_int32(minor_version, 0,
                "The minor version of the payload being generated");
 
   DEFINE_string(old_channel, "",
@@ -378,17 +379,28 @@
     LOG(INFO) << "Generating full update";
   }
 
+  // Look for the minor version in the old image if it was not given as an
+  // argument.
   if (!CommandLine::ForCurrentProcess()->HasSwitch("minor_version")) {
-    if (is_delta) {
-      FLAGS_minor_version = DeltaPerformer::kSupportedMinorPayloadVersion;
+    uint32_t minor_version;
+    base::FilePath image_path(FLAGS_old_dir);
+    base::FilePath conf_loc("etc/update_engine.conf");
+    base::FilePath conf_path = image_path.Append(conf_loc);
+    if (utils::GetMinorVersion(conf_path, &minor_version)) {
+      FLAGS_minor_version = minor_version;
     } else {
-      FLAGS_minor_version = DeltaPerformer::kFullPayloadMinorVersion;
+      if (is_delta) {
+        FLAGS_minor_version = DeltaPerformer::kSupportedMinorPayloadVersion;
+      } else {
+        FLAGS_minor_version = DeltaPerformer::kFullPayloadMinorVersion;
+      }
     }
   }
 
-  if (FLAGS_minor_version == kInPlaceMinorPayloadVersion ||
-      static_cast<uint64_t>(FLAGS_minor_version) ==
-          DeltaPerformer::kFullPayloadMinorVersion) {
+  if (static_cast<uint32_t>(FLAGS_minor_version) ==
+      kInPlaceMinorPayloadVersion ||
+      static_cast<uint32_t>(FLAGS_minor_version) ==
+      DeltaPerformer::kFullPayloadMinorVersion) {
     uint64_t metadata_size;
     if (!DeltaDiffGenerator::GenerateDeltaUpdateFile(
         FLAGS_old_dir,
diff --git a/update_engine.conf b/update_engine.conf
new file mode 100644
index 0000000..ff69eb8
--- /dev/null
+++ b/update_engine.conf
@@ -0,0 +1 @@
+PAYLOAD_MINOR_VERSION=1
diff --git a/utils.cc b/utils.cc
index 77e5a35..c512414 100644
--- a/utils.cc
+++ b/utils.cc
@@ -37,6 +37,7 @@
 #include <base/strings/string_util.h>
 #include <base/strings/stringprintf.h>
 #include <chromeos/data_encoding.h>
+#include <chromeos/key_value_store.h>
 #include <glib.h>
 
 #include "update_engine/clock_interface.h"
@@ -1574,6 +1575,17 @@
   return ret;
 }
 
+bool GetMinorVersion(base::FilePath path, uint32_t* minor_version) {
+  chromeos::KeyValueStore store;
+  std::string result;
+  if (base::PathExists(path) && store.Load(path) &&
+      store.GetString("PAYLOAD_MINOR_VERSION", &result)) {
+    *minor_version = atoi(result.c_str());
+    return true;
+  }
+  return false;
+}
+
 }  // namespace utils
 
 }  // namespace chromeos_update_engine
diff --git a/utils.h b/utils.h
index 661a260..8e168f1 100644
--- a/utils.h
+++ b/utils.h
@@ -437,6 +437,14 @@
                              int64_t* storage,
                              base::TimeDelta* out_duration);
 
+// This function looks for a configuration file at |path|. If it finds that
+// file, it will try get the PAYLOAD_MINOR_VERSION value from it and set
+// |minor_version| to that value.
+//
+// The function will return |true| if it succeeds at finding the file and
+// value and setting it, and |false| otherwise.
+bool GetMinorVersion(base::FilePath path, uint32_t* minor_version);
+
 }  // namespace utils
 
 
diff --git a/utils_unittest.cc b/utils_unittest.cc
index ce65c50..2ac95cb 100644
--- a/utils_unittest.cc
+++ b/utils_unittest.cc
@@ -15,6 +15,7 @@
 
 #include <base/files/file_path.h>
 #include <base/files/file_util.h>
+#include <base/files/scoped_temp_dir.h>
 #include <base/strings/string_util.h>
 #include <base/strings/stringprintf.h>
 #include <gtest/gtest.h>
@@ -771,6 +772,23 @@
                                      NetworkTethering::kUnknown));
 }
 
+TEST(UtilsTest, GetMinorVersion) {
+  // Test GetMinorVersion by verifying that it parses the conf file and returns
+  // the correct value.
+  string contents = "PAYLOAD_MINOR_VERSION=1\n";
+  uint32_t minor_version;
+
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+
+  base::FilePath temp_file("update_engine.conf");
+  base::FilePath filepath = temp_dir.path().Append(temp_file);
+
+  ASSERT_TRUE(test_utils::WriteFileString(filepath.value(), contents.c_str()));
+  ASSERT_TRUE(utils::GetMinorVersion(filepath, &minor_version));
+  ASSERT_EQ(minor_version, 1);
+}
+
 static bool BoolMacroTestHelper() {
   int i = 1;
   unsigned int ui = 1;
