diff --git a/activation.hpp b/activation.hpp
index 5c6c5fe..4945531 100755
--- a/activation.hpp
+++ b/activation.hpp
@@ -32,16 +32,19 @@
          * @param[in] path   - The Dbus object path
          * @param[in] versionId  - The software version id
          * @param[in] extVersion - The extended version
+         * @param[in] activationStatus - The status of Activation
          */
         Activation(sdbusplus::bus::bus& bus, const std::string& path,
                    std::string& versionId,
-                   std::string& extVersion) :
+                   std::string& extVersion,
+                   sdbusplus::xyz::openbmc_project::Software::
+                   server::Activation::Activations activationStatus) :
                    ActivationInherit(bus, path.c_str(), true),
                    versionId(versionId)
         {
             // Set Properties.
             extendedVersion(extVersion);
-
+            activation(activationStatus);
             // Emit deferred signal.
             emit_object_added();
         }
diff --git a/configure.ac b/configure.ac
index c8c90a7..5253703 100755
--- a/configure.ac
+++ b/configure.ac
@@ -64,9 +64,13 @@
     [The item updater DBus busname to own.])
 
 AC_ARG_VAR(MANIFEST_FILE, [The path to the MANIFEST file])
-AS_IF([test "x$MANIFEST_FILE" == "x"], [MANIFEST_FILE="/tmp/pnor/MANIFEST"])
+AS_IF([test "x$MANIFEST_FILE" == "x"], [MANIFEST_FILE="/tmp/images/MANIFEST"])
 AC_DEFINE_UNQUOTED([MANIFEST_FILE], ["$MANIFEST_FILE"], [The path to the MANIFEST file])
 
+AC_ARG_VAR(IMAGE_DIR, [The path to all the IMAGE files])
+AS_IF([test "x$IMAGE_DIR" == "x"], [IMAGE_DIR="/tmp/images/"])
+AC_DEFINE_UNQUOTED([IMAGE_DIR], ["$IMAGE_DIR"], [The path to all the IMAGE files])
+
 AC_DEFINE(MAPPER_BUSNAME, "xyz.openbmc_project.ObjectMapper",
     [The object mapper busname.])
 AC_DEFINE(MAPPER_PATH, "/xyz/openbmc_project/object_mapper",
diff --git a/item_updater.cpp b/item_updater.cpp
index 42e7729..7a5629d 100755
--- a/item_updater.cpp
+++ b/item_updater.cpp
@@ -3,6 +3,7 @@
 #include <phosphor-logging/log.hpp>
 #include "config.h"
 #include "item_updater.hpp"
+#include "activation.hpp"
 
 namespace openpower
 {
@@ -11,8 +12,13 @@
 namespace updater
 {
 
+// When you see server:: you know we're referencing our base class
+namespace server = sdbusplus::xyz::openbmc_project::Software::server;
+
 using namespace phosphor::logging;
 
+constexpr auto squashFSImage = "pnor.xz.squashfs";
+
 int ItemUpdater::createActivation(sd_bus_message* msg,
                                   void* userData,
                                   sd_bus_error* retErr)
@@ -59,6 +65,14 @@
         }
 
         auto versionId = resp.substr(pos + 1);
+
+        // Determine the Activation state by processing the given image dir.
+        auto activationState = server::Activation::Activations::Invalid;
+        if (ItemUpdater::validateSquashFSImage(versionId) == 0)
+        {
+            activationState = server::Activation::Activations::Ready;
+        }
+
         if (updater->activations.find(versionId) == updater->activations.end())
         {
             updater->activations.insert(std::make_pair(
@@ -67,7 +81,8 @@
                             updater->busItem,
                             resp,
                             versionId,
-                            extendedVersion)));
+                            extendedVersion,
+                            activationState)));
         }
     }
     return 0;
@@ -109,10 +124,26 @@
     {
         log<level::ERR>("Error in reading Host MANIFEST file");
     }
-
     return extendedVersion;
 }
 
+int ItemUpdater::validateSquashFSImage(const std::string& versionId)
+{
+    auto file = IMAGE_DIR + versionId + "/" +
+                std::string(squashFSImage);
+    std::ifstream efile(file.c_str());
+
+    if (efile.good() == 1)
+    {
+        return 0;
+    }
+    else
+    {
+        log<level::ERR>("Failed to find the SquashFS image.");
+        return -1;
+    }
+}
+
 } // namespace updater
 } // namespace software
 } // namespace openpower
diff --git a/item_updater.hpp b/item_updater.hpp
index 5afb96d..8e79d1d 100755
--- a/item_updater.hpp
+++ b/item_updater.hpp
@@ -61,6 +61,14 @@
          */
         static std::string getExtendedVersion(const std::string&
                                                manifestFilePath);
+        /**
+         * @brief Validates the presence of SquashFS iamge in the image dir.
+         *
+         * @param[in]  versionId - The software version ID.
+         * @param[out] result    - 0 --> if validation was successful
+         *                       - -1--> Otherwise
+         */
+        static int validateSquashFSImage(const std::string& versionId);
 
         /** @brief Persistent sdbusplus DBus bus connection. */
         sdbusplus::bus::bus& busItem;
