diff --git a/item_updater_main.cpp b/item_updater_main.cpp
index e54239a..9ba705b 100644
--- a/item_updater_main.cpp
+++ b/item_updater_main.cpp
@@ -3,6 +3,8 @@
 #ifdef UBIFS_LAYOUT
 #include "ubi/item_updater_ubi.hpp"
 #include "ubi/watch.hpp"
+#else
+#include "static/item_updater_static.hpp"
 #endif
 
 #include <phosphor-logging/log.hpp>
@@ -30,6 +32,8 @@
 
 #ifdef UBIFS_LAYOUT
     ItemUpdaterUbi updater(bus, SOFTWARE_OBJPATH);
+#else
+    ItemUpdaterStatic updater(bus, SOFTWARE_OBJPATH);
 #endif
 
     bus.request_name(BUSNAME_UPDATER);
diff --git a/static/Makefile.am.include b/static/Makefile.am.include
index 73f96e3..827e2fd 100644
--- a/static/Makefile.am.include
+++ b/static/Makefile.am.include
@@ -1,2 +1,2 @@
 openpower_update_manager_SOURCES += \
-	%reldir%/item_updater.cpp
+	%reldir%/item_updater_static.cpp
diff --git a/static/item_updater_static.cpp b/static/item_updater_static.cpp
new file mode 100644
index 0000000..95912a5
--- /dev/null
+++ b/static/item_updater_static.cpp
@@ -0,0 +1,69 @@
+#include "config.h"
+
+#include "item_updater_static.hpp"
+
+namespace openpower
+{
+namespace software
+{
+namespace updater
+{
+
+std::unique_ptr<Activation> ItemUpdaterStatic::createActivationObject(
+    const std::string& path, const std::string& versionId,
+    const std::string& extVersion,
+    sdbusplus::xyz::openbmc_project::Software::server::Activation::Activations
+        activationStatus,
+    AssociationList& assocs)
+{
+    return {};
+}
+
+std::unique_ptr<Version> ItemUpdaterStatic::createVersionObject(
+    const std::string& objPath, const std::string& versionId,
+    const std::string& versionString,
+    sdbusplus::xyz::openbmc_project::Software::server::Version::VersionPurpose
+        versionPurpose,
+    const std::string& filePath)
+{
+    return {};
+}
+
+bool ItemUpdaterStatic::validateImage(const std::string& path)
+{
+    return true;
+}
+
+void ItemUpdaterStatic::processPNORImage()
+{
+}
+
+void ItemUpdaterStatic::reset()
+{
+}
+
+bool ItemUpdaterStatic::isVersionFunctional(const std::string& versionId)
+{
+    return true;
+}
+
+void ItemUpdaterStatic::freePriority(uint8_t value,
+                                     const std::string& versionId)
+{
+}
+
+void ItemUpdaterStatic::deleteAll()
+{
+}
+
+void ItemUpdaterStatic::freeSpace()
+{
+}
+
+void GardReset::reset()
+{
+}
+
+} // namespace updater
+} // namespace software
+} // namespace openpower
diff --git a/static/item_updater_static.hpp b/static/item_updater_static.hpp
new file mode 100644
index 0000000..dd7245f
--- /dev/null
+++ b/static/item_updater_static.hpp
@@ -0,0 +1,68 @@
+#pragma once
+
+#include "item_updater.hpp"
+
+namespace openpower
+{
+namespace software
+{
+namespace updater
+{
+
+/** @class ItemUpdaterStatic
+ *  @brief Manages the activation of the host version items for static layout
+ */
+class ItemUpdaterStatic : public ItemUpdater
+{
+  public:
+    ItemUpdaterStatic(sdbusplus::bus::bus& bus, const std::string& path) :
+        ItemUpdater(bus, path)
+    {
+        processPNORImage();
+        gardReset = std::make_unique<GardReset>(bus, GARD_PATH);
+        volatileEnable = std::make_unique<ObjectEnable>(bus, volatilePath);
+
+        // Emit deferred signal.
+        emit_object_added();
+    }
+    virtual ~ItemUpdaterStatic() = default;
+
+    void freePriority(uint8_t value, const std::string& versionId) override;
+
+    void processPNORImage() override;
+
+    void deleteAll() override;
+
+    void freeSpace() override;
+
+    bool isVersionFunctional(const std::string& versionId) override;
+
+  private:
+    /** @brief Create Activation object */
+    std::unique_ptr<Activation> createActivationObject(
+        const std::string& path, const std::string& versionId,
+        const std::string& extVersion,
+        sdbusplus::xyz::openbmc_project::Software::server::Activation::
+            Activations activationStatus,
+        AssociationList& assocs) override;
+
+    /** @brief Create Version object */
+    std::unique_ptr<Version>
+        createVersionObject(const std::string& objPath,
+                            const std::string& versionId,
+                            const std::string& versionString,
+                            sdbusplus::xyz::openbmc_project::Software::server::
+                                Version::VersionPurpose versionPurpose,
+                            const std::string& filePath) override;
+
+    /** @brief Validate if image is valid or not */
+    bool validateImage(const std::string& path);
+
+    /** @brief Host factory reset - clears PNOR partitions for each
+     * Activation D-Bus object */
+    void reset() override;
+};
+
+} // namespace updater
+} // namespace software
+} // namespace openpower
