diff --git a/Makefile.am b/Makefile.am
index 261cd6b..e652205 100755
--- a/Makefile.am
+++ b/Makefile.am
@@ -2,7 +2,6 @@
 
 # Build these headers, don't install them
 noinst_HEADERS = \
-	bmc_version.hpp \
 	download_manager.hpp \
 	watch.hpp \
 	version.hpp \
@@ -16,7 +15,6 @@
 	phosphor-image-updater
 
 phosphor_version_software_manager_SOURCES = \
-	bmc_version.cpp \
 	image_manager_main.cpp \
 	watch.cpp \
 	version.cpp \
diff --git a/bmc_version.cpp b/bmc_version.cpp
deleted file mode 100644
index 463b2c4..0000000
--- a/bmc_version.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-#include <iostream>
-#include <string>
-#include <sstream>
-#include <fstream>
-#include <stdexcept>
-#include "bmc_version.hpp"
-
-namespace phosphor
-{
-namespace software
-{
-namespace manager
-{
-
-const std::string BMCVersion::getVersion() const
-{
-    // Get version from /etc/os-release.
-    std::string versionKey = "VERSION_ID=";
-    std::string version{};
-    std::ifstream efile;
-    std::string line;
-    efile.open("/etc/os-release");
-
-    while (getline(efile, line))
-    {
-        if (line.substr(0, versionKey.size()).find(versionKey)
-            != std::string::npos)
-        {
-            // This line looks like VERSION_ID="v1.99.0-353-ga3b8a0a-dirty".
-            // So grab everything in quotes.
-            std::size_t pos = line.find_first_of('"') + 1;
-            version = line.substr(pos, line.find_last_of('"') - pos);
-            break;
-        }
-    }
-    efile.close();
-    return version;
-}
-
-const std::string BMCVersion::getId() const
-{
-    auto version = getVersion();
-    std::stringstream hexId;
-
-    if (version.empty())
-    {
-        throw std::runtime_error("Software version is empty");
-    }
-
-    // Only want 8 hex digits.
-    hexId << std::hex << ((std::hash<std::string> {}(version)) & 0xFFFFFFFF);
-    return hexId.str();
-}
-
-} // namespace manager
-} // namespace software
-} // namepsace phosphor
diff --git a/bmc_version.hpp b/bmc_version.hpp
deleted file mode 100644
index 6ac785b..0000000
--- a/bmc_version.hpp
+++ /dev/null
@@ -1,66 +0,0 @@
-#pragma once
-
-#include <sdbusplus/bus.hpp>
-#include "xyz/openbmc_project/Software/Version/server.hpp"
-
-namespace phosphor
-{
-namespace software
-{
-namespace manager
-{
-
-using BMCVersionInherit = sdbusplus::server::object::object<
-    sdbusplus::xyz::openbmc_project::Software::server::Version>;
-
-/** @class BMCVersion
- *  @brief OpenBMC version software management implementation
- *         for the active BMC software image.
- *  @details A concrete implementation for xyz.openbmc_project.Software.Version
- *           DBus API.
- */
-class BMCVersion : public BMCVersionInherit
-{
-    public:
-        /** @brief Constructs BMC Version Software Manager for
-         *         the active BMC software image.
-         *
-         * @note This constructor passes 'true' to the base class in order to
-         *       defer dbus object registration until we can
-         *       set our properties
-         *
-         * @param[in] bus        - The Dbus bus object
-         * @param[in] objPath    - The Dbus object path
-         */
-        BMCVersion(sdbusplus::bus::bus& bus,
-                   const char* objPath) : BMCVersionInherit(
-                       bus, (std::string{objPath} + '/' + getId()).c_str(),
-                       true)
-        {
-            // Set properties.
-            purpose(VersionPurpose::BMC);
-            version(getVersion());
-
-            // Emit deferred signal.
-            emit_object_added();
-        }
-
-    private:
-        /**
-         * @brief Get the code version identifier.
-         *
-         * @return The version identifier.
-         **/
-        const std::string getVersion() const;
-
-        /**
-         * @brief Get the Software Version id.
-         *
-         * @return The id.
-         **/
-        const std::string getId() const;
-};
-
-} // namespace manager
-} // namespace software
-} // namespace phosphor
diff --git a/image_manager.cpp b/image_manager.cpp
index d4dff1b..605050c 100644
--- a/image_manager.cpp
+++ b/image_manager.cpp
@@ -130,7 +130,6 @@
 
     std::transform(purposeString.begin(), purposeString.end(),
                    purposeString.begin(), ::tolower);
-
     auto purpose = Version::VersionPurpose::Unknown;
     if (purposeString.compare("bmc") == 0)
     {
diff --git a/image_manager.hpp b/image_manager.hpp
index ac44539..6e45c7c 100644
--- a/image_manager.hpp
+++ b/image_manager.hpp
@@ -20,7 +20,7 @@
          *
          * @param[in] bus - The Dbus bus object
          */
-        Manager(sdbusplus::bus::bus& bus) : bus(bus) {};
+        Manager(sdbusplus::bus::bus& bus) : bus(bus){};
 
         /**
          * @brief Verify and untar the tarball. Verify the manifest file.
@@ -48,7 +48,6 @@
          */
         static int unTar(const std::string& tarballFilePath,
                          const std::string& extractDirPath);
-
 };
 
 } // namespace manager
diff --git a/image_manager_main.cpp b/image_manager_main.cpp
index d0cac65..3aeefbe 100644
--- a/image_manager_main.cpp
+++ b/image_manager_main.cpp
@@ -3,7 +3,6 @@
 #include <sdbusplus/bus.hpp>
 #include <phosphor-logging/log.hpp>
 #include "config.h"
-#include "bmc_version.hpp"
 #include "watch.hpp"
 #include "image_manager.hpp"
 
@@ -16,8 +15,6 @@
 
     sdbusplus::server::manager::manager objManager(bus,
             SOFTWARE_OBJPATH);
-    phosphor::software::manager::BMCVersion manager(bus,
-            SOFTWARE_OBJPATH);
     bus.request_name(VERSION_BUSNAME);
 
     try
diff --git a/item_updater.cpp b/item_updater.cpp
index 9e909d9..efff65f 100644
--- a/item_updater.cpp
+++ b/item_updater.cpp
@@ -106,6 +106,31 @@
     return;
 }
 
+void ItemUpdater::processBMCImage()
+{
+    auto purpose = server::Version::VersionPurpose::BMC;
+    auto version = phosphor::software::manager::Version::getBMCVersion();
+    auto id = phosphor::software::manager::Version::getId(version);
+    auto path =  std::string{SOFTWARE_OBJPATH} + '/' + id;
+    activations.insert(std::make_pair(
+                           id,
+                           std::make_unique<Activation>(
+                               bus,
+                               path,
+                               id,
+                               server::Activation::Activations::Active)));
+    versions.insert(std::make_pair(
+                        id,
+                        std::make_unique<phosphor::software::
+                             manager::Version>(
+                             bus,
+                             path,
+                             version,
+                             purpose,
+                             "")));
+    return;
+}
+
 ItemUpdater::ActivationStatus ItemUpdater::validateSquashFSImage(
              const std::string& versionId)
 {
diff --git a/item_updater.hpp b/item_updater.hpp
index 705b320..082dbf7 100644
--- a/item_updater.hpp
+++ b/item_updater.hpp
@@ -51,8 +51,14 @@
                                     this,
                                     std::placeholders::_1))
         {
+            processBMCImage();
         };
 
+    /**
+     * @brief Create and populate the active BMC Version.
+     */
+    void processBMCImage();
+
     private:
         /** @brief Callback function for Software.Version match.
          *  @details Creates an Activation dbus object.
diff --git a/test/Makefile.am b/test/Makefile.am
index 187aedf..ab98534 100755
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -8,8 +8,10 @@
 
 # Build/add utest to test suite
 utest_CPPFLAGS = -Igtest $(GTEST_CPPFLAGS) $(AM_CPPFLAGS)
-utest_CXXFLAGS = $(PTHREAD_CFLAGS) $(PHOSPHOR_LOGGING_CFLAGS)
-utest_LDFLAGS = -lgtest_main -lgtest $(PTHREAD_LIBS) $(OESDK_TESTCASE_FLAGS) \
+utest_CXXFLAGS = $(PTHREAD_CFLAGS) $(PHOSPHOR_LOGGING_CFLAGS) \
+	$(PHOSPHOR_DBUS_INTERFACES_CFLAGS)
+utest_LDFLAGS = -lgtest_main -lgtest $(PTHREAD_LIBS) \
+	$(PHOSPHOR_DBUS_INTERFACES_LIBS) $(OESDK_TESTCASE_FLAGS) \
 	$(PHOSPHOR_LOGGING_LIBS) -lstdc++fs
 
 utest_SOURCES = utest.cpp
diff --git a/version.cpp b/version.cpp
index 4260a89..24f201c 100644
--- a/version.cpp
+++ b/version.cpp
@@ -72,6 +72,35 @@
     return hexId.str();
 }
 
+std::string Version::getBMCVersion()
+{
+    std::string versionKey = "VERSION_ID=";
+    std::string version{};
+    std::ifstream efile;
+    std::string line;
+    efile.open("/etc/os-release");
+
+    while (getline(efile, line))
+    {
+        if (line.substr(0, versionKey.size()).find(versionKey) !=
+            std::string::npos)
+        {
+            std::size_t pos = line.find_first_of('"') + 1;
+            version = line.substr(pos, line.find_last_of('"') - pos);
+            break;
+        }
+    }
+    efile.close();
+
+    if (version.empty())
+    {
+        log<level::ERR>("Error BMC current version is empty");
+        throw std::runtime_error("BMC current version is empty");
+    }
+
+    return version;
+}
+
 } // namespace manager
 } // namespace software
 } // namepsace phosphor
diff --git a/version.hpp b/version.hpp
index 75289a3..eca6670 100755
--- a/version.hpp
+++ b/version.hpp
@@ -62,6 +62,12 @@
          **/
         static std::string getId(const std::string& version);
 
+        /**
+         * @brief Get the active bmc version identifier.
+         *
+         * @return The version identifier.
+         */
+        static std::string getBMCVersion();
 };
 
 } // namespace manager
