diff --git a/payload_generator/ext2_filesystem.cc b/payload_generator/ext2_filesystem.cc
index 9670e39..b7276d5 100644
--- a/payload_generator/ext2_filesystem.cc
+++ b/payload_generator/ext2_filesystem.cc
@@ -111,6 +111,7 @@
   if (filename.empty())
     return nullptr;
   unique_ptr<Ext2Filesystem> result(new Ext2Filesystem());
+  result->filename_ = filename;
 
   errcode_t err = ext2fs_open(filename.c_str(),
                               0,  // flags (read only)
@@ -304,4 +305,39 @@
   return true;
 }
 
+bool Ext2Filesystem::LoadSettings(chromeos::KeyValueStore* store) const {
+  // First search for the settings inode following symlinks if we find some.
+  ext2_ino_t ino_num = 0;
+  errcode_t err = ext2fs_namei_follow(
+      filsys_, EXT2_ROOT_INO /* root */, EXT2_ROOT_INO /* cwd */,
+      "/etc/update_engine.conf", &ino_num);
+  if (err != 0)
+    return false;
+
+  ext2_inode ino_data;
+  if (ext2fs_read_inode(filsys_, ino_num, &ino_data) != 0)
+    return false;
+
+  // Load the list of blocks and then the contents of the inodes.
+  vector<Extent> extents;
+  err = ext2fs_block_iterate2(filsys_, ino_num, BLOCK_FLAG_DATA_ONLY,
+                              nullptr,  // block_buf
+                              ProcessInodeAllBlocks,
+                              &extents);
+  if (err != 0)
+    return false;
+
+  chromeos::Blob blob;
+  uint64_t physical_size = BlocksInExtents(extents) * filsys_->blocksize;
+  // Sparse holes in the settings file are not supported.
+  if (EXT2_I_SIZE(&ino_data) > physical_size)
+    return false;
+  if (!utils::ReadExtents(filename_, extents, &blob, physical_size,
+                          filsys_->blocksize))
+    return false;
+
+  string text(blob.begin(), blob.begin() + EXT2_I_SIZE(&ino_data));
+  return store->LoadFromString(text);
+}
+
 }  // namespace chromeos_update_engine
diff --git a/payload_generator/ext2_filesystem.h b/payload_generator/ext2_filesystem.h
index c87849c..66cb65f 100644
--- a/payload_generator/ext2_filesystem.h
+++ b/payload_generator/ext2_filesystem.h
@@ -40,12 +40,17 @@
   //    and bitmap tables.
   bool GetFiles(std::vector<File>* files) const override;
 
+  bool LoadSettings(chromeos::KeyValueStore* store) const override;
+
  private:
   Ext2Filesystem() = default;
 
   // The ext2 main data structure holding the filesystem.
   ext2_filsys filsys_ = nullptr;
 
+  // The file where the filesystem is stored.
+  std::string filename_;
+
   DISALLOW_COPY_AND_ASSIGN(Ext2Filesystem);
 };
 
diff --git a/payload_generator/ext2_filesystem_unittest.cc b/payload_generator/ext2_filesystem_unittest.cc
index 122ba02..d2ea2b3 100644
--- a/payload_generator/ext2_filesystem_unittest.cc
+++ b/payload_generator/ext2_filesystem_unittest.cc
@@ -177,4 +177,26 @@
   }
 }
 
+TEST_F(Ext2FilesystemTest, LoadSettingsFailsTest) {
+  base::FilePath path = test_utils::GetBuildArtifactsPath().Append(
+      "gen/disk_ext2_1k.img");
+  unique_ptr<Ext2Filesystem> fs = Ext2Filesystem::CreateFromFile(path.value());
+
+  chromeos::KeyValueStore store;
+  // disk_ext2_1k.img doesn't have the /etc/update_engine.conf file.
+  EXPECT_FALSE(fs->LoadSettings(&store));
+}
+
+TEST_F(Ext2FilesystemTest, LoadSettingsWorksTest) {
+  base::FilePath path = test_utils::GetBuildArtifactsPath().Append(
+      "gen/disk_ext2_ue_settings.img");
+  unique_ptr<Ext2Filesystem> fs = Ext2Filesystem::CreateFromFile(path.value());
+
+  chromeos::KeyValueStore store;
+  EXPECT_TRUE(fs->LoadSettings(&store));
+  string minor_version;
+  EXPECT_TRUE(store.GetString("PAYLOAD_MINOR_VERSION", &minor_version));
+  EXPECT_EQ("1234", minor_version);
+}
+
 }  // namespace chromeos_update_engine
diff --git a/payload_generator/fake_filesystem.cc b/payload_generator/fake_filesystem.cc
index b474b26..00911e1 100644
--- a/payload_generator/fake_filesystem.cc
+++ b/payload_generator/fake_filesystem.cc
@@ -38,4 +38,11 @@
   files_.push_back(file);
 }
 
+bool FakeFilesystem::LoadSettings(chromeos::KeyValueStore* store) const {
+  if (minor_version_ < 0)
+    return false;
+  store->SetString("PAYLOAD_MINOR_VERSION", std::to_string(minor_version_));
+  return true;
+}
+
 }  // namespace chromeos_update_engine
diff --git a/payload_generator/fake_filesystem.h b/payload_generator/fake_filesystem.h
index 10b6683..35b7756 100644
--- a/payload_generator/fake_filesystem.h
+++ b/payload_generator/fake_filesystem.h
@@ -26,17 +26,25 @@
   size_t GetBlockSize() const override;
   size_t GetBlockCount() const override;
   bool GetFiles(std::vector<File>* files) const override;
+  bool LoadSettings(chromeos::KeyValueStore* store) const override;
 
   // Fake methods.
 
   // Add a file to the list of fake files.
   void AddFile(const std::string& filename, const std::vector<Extent> extents);
 
+  // Sets the PAYLOAD_MINOR_VERSION key stored by LoadSettings(). Use a negative
+  // value to produce an error in LoadSettings().
+  void SetMinorVersion(int minor_version) {
+    minor_version_ = minor_version;
+  }
+
  private:
   FakeFilesystem() = default;
 
   uint64_t block_size_;
   uint64_t block_count_;
+  int minor_version_{-1};
 
   std::vector<File> files_;
 
diff --git a/payload_generator/filesystem_interface.h b/payload_generator/filesystem_interface.h
index 501a6be..186eac4 100644
--- a/payload_generator/filesystem_interface.h
+++ b/payload_generator/filesystem_interface.h
@@ -20,6 +20,7 @@
 #include <vector>
 
 #include <base/macros.h>
+#include <chromeos/key_value_store.h>
 
 #include "update_engine/update_metadata.pb.h"
 
@@ -66,6 +67,10 @@
   // Returns whether the function succeeded.
   virtual bool GetFiles(std::vector<File>* files) const = 0;
 
+  // Load the image settings stored in the filesystem in the
+  // /etc/update_engine.conf file. Returns whether the settings were found.
+  virtual bool LoadSettings(chromeos::KeyValueStore* store) const = 0;
+
  protected:
   FilesystemInterface() = default;
 
diff --git a/payload_generator/raw_filesystem.h b/payload_generator/raw_filesystem.h
index d8e1fe5..bd66487 100644
--- a/payload_generator/raw_filesystem.h
+++ b/payload_generator/raw_filesystem.h
@@ -29,6 +29,10 @@
   // with the name passed during construction.
   bool GetFiles(std::vector<File>* files) const override;
 
+  bool LoadSettings(chromeos::KeyValueStore* store) const override {
+    return false;
+  }
+
  private:
   RawFilesystem() = default;
 
