diff --git a/images.hpp b/images.hpp
index 83c2dd2..7801ea3 100644
--- a/images.hpp
+++ b/images.hpp
@@ -13,6 +13,8 @@
 // BMC flash image file name list.
 const std::vector<std::string> bmcImages = {"image-kernel", "image-rofs",
                                             "image-rwfs", "image-u-boot"};
+// BMC flash image file name list for full flash image (image-bmc)
+const std::string bmcFullImages = {"image-bmc"};
 
 std::vector<std::string> getOptionalImages();
 
diff --git a/item_updater.cpp b/item_updater.cpp
index 4b133f3..e6dd298 100644
--- a/item_updater.cpp
+++ b/item_updater.cpp
@@ -402,26 +402,24 @@
 ItemUpdater::ActivationStatus
     ItemUpdater::validateSquashFSImage(const std::string& filePath)
 {
-    bool invalid = false;
+    bool valid = true;
 
-    for (auto& bmcImage : bmcImages)
+    // Record the images which are being updated
+    // First check for the fullimage, then check for images with partitions
+    imageUpdateList.push_back(bmcFullImages);
+    valid = checkImage(filePath, imageUpdateList);
+    if (!valid)
     {
-        fs::path file(filePath);
-        file /= bmcImage;
-        std::ifstream efile(file.c_str());
-        if (efile.good() != 1)
+        imageUpdateList.clear();
+        imageUpdateList.assign(bmcImages.begin(), bmcImages.end());
+        valid = checkImage(filePath, imageUpdateList);
+        if (!valid)
         {
-            log<level::ERR>("Failed to find the BMC image.",
-                            entry("IMAGE=%s", bmcImage.c_str()));
-            invalid = true;
+            log<level::ERR>("Failed to find the needed BMC images.");
+            return ItemUpdater::ActivationStatus::invalid;
         }
     }
 
-    if (invalid)
-    {
-        return ItemUpdater::ActivationStatus::invalid;
-    }
-
     return ItemUpdater::ActivationStatus::ready;
 }
 
@@ -720,6 +718,26 @@
     helper.mirrorAlt();
 }
 
+bool ItemUpdater::checkImage(const std::string& filePath,
+                             const std::vector<std::string>& imageList)
+{
+    bool valid = true;
+
+    for (auto& bmcImage : imageList)
+    {
+        fs::path file(filePath);
+        file /= bmcImage;
+        std::ifstream efile(file.c_str());
+        if (efile.good() != 1)
+        {
+            valid = false;
+            break;
+        }
+    }
+
+    return valid;
+}
+
 } // namespace updater
 } // namespace software
 } // namespace phosphor
diff --git a/item_updater.hpp b/item_updater.hpp
index b1d1c63..721d371 100644
--- a/item_updater.hpp
+++ b/item_updater.hpp
@@ -11,6 +11,7 @@
 #include <xyz/openbmc_project/Control/FieldMode/server.hpp>
 
 #include <string>
+#include <vector>
 
 namespace phosphor
 {
@@ -161,6 +162,9 @@
      * version id */
     std::map<std::string, std::unique_ptr<VersionClass>> versions;
 
+    /** @brief Vector of needed BMC images in the tarball*/
+    std::vector<std::string> imageUpdateList;
+
   private:
     /** @brief Callback function for Software.Version match.
      *  @details Creates an Activation D-Bus object.
@@ -238,6 +242,17 @@
      *  alternate chip.
      */
     void mirrorUbootToAlt();
+
+    /** @brief Check the required image files
+     *
+     * @param[in] filePath - BMC tarball file path
+     * @param[in] imageList - Image filenames included in the BMC tarball
+     * @param[out] result - Boolean
+     *                      true if all image files are found in BMC tarball
+     *                      false if one of image files is missing
+     */
+    bool checkImage(const std::string& filePath,
+                    const std::vector<std::string>& imageList);
 };
 
 } // namespace updater
diff --git a/static/flash.cpp b/static/flash.cpp
index 9bb2bba..101828b 100644
--- a/static/flash.cpp
+++ b/static/flash.cpp
@@ -4,6 +4,7 @@
 
 #include "activation.hpp"
 #include "images.hpp"
+#include "item_updater.hpp"
 
 #include <filesystem>
 
@@ -20,6 +21,7 @@
 {
 
 namespace fs = std::filesystem;
+using namespace phosphor::software::image;
 
 void Activation::flashWrite()
 {
@@ -28,7 +30,8 @@
     // the image to flash during reboot.
     fs::path uploadDir(IMG_UPLOAD_DIR);
     fs::path toPath(PATH_INITRAMFS);
-    for (auto& bmcImage : phosphor::software::image::bmcImages)
+
+    for (const auto& bmcImage : parent.imageUpdateList)
     {
         fs::copy_file(uploadDir / versionId / bmcImage, toPath / bmcImage,
                       fs::copy_options::overwrite_existing);
