diff --git a/activation.hpp b/activation.hpp
index 99ac986..3b5e254 100644
--- a/activation.hpp
+++ b/activation.hpp
@@ -25,9 +25,32 @@
          *
          * @param[in] bus    - The Dbus bus object
          * @param[in] path   - The Dbus object path
+         * @param[in] versionId  - The software version id
+         * @param[in] activationStatus - The status of Activation
          */
-        Activation(sdbusplus::bus::bus& bus, const std::string& path) :
-                   ActivationInherit(bus, path.c_str()) {};
+        Activation(sdbusplus::bus::bus& bus, const std::string& path,
+                   std::string& versionId,
+                   sdbusplus::xyz::openbmc_project::Software::
+                   server::Activation::Activations activationStatus) :
+                   ActivationInherit(bus, path.c_str(), true),
+                   bus(bus),
+                   path(path),
+                   versionId(versionId)
+        {
+            // Set Properties.
+            activation(activationStatus);
+            // Emit deferred signal.
+            emit_object_added();
+        }
+
+        /** @brief Persistent sdbusplus DBus bus connection */
+        sdbusplus::bus::bus& bus;
+
+        /** @brief Persistent DBus object path */
+        std::string path;
+
+        /** @brief Version id */
+        std::string versionId;
 };
 
 } // namespace updater
diff --git a/bmc_version.hpp b/bmc_version.hpp
index 9bbfbd0..6ac785b 100644
--- a/bmc_version.hpp
+++ b/bmc_version.hpp
@@ -2,7 +2,6 @@
 
 #include <sdbusplus/bus.hpp>
 #include "xyz/openbmc_project/Software/Version/server.hpp"
-#include "xyz/openbmc_project/Software/Activation/server.hpp"
 
 namespace phosphor
 {
@@ -12,20 +11,18 @@
 {
 
 using BMCVersionInherit = sdbusplus::server::object::object<
-    sdbusplus::xyz::openbmc_project::Software::server::Version,
-    sdbusplus::xyz::openbmc_project::Software::server::Activation>;
-    // TODO: Move activation interface to Item Updater.
+    sdbusplus::xyz::openbmc_project::Software::server::Version>;
 
 /** @class BMCVersion
- *  @brief OpenBMC version and activation software management implementation
+ *  @brief OpenBMC version software management implementation
  *         for the active BMC software image.
  *  @details A concrete implementation for xyz.openbmc_project.Software.Version
- *           and xyz.openbmc_project.Software.Activation DBus APIs.
+ *           DBus API.
  */
 class BMCVersion : public BMCVersionInherit
 {
     public:
-        /** @brief Constructs BMC Version and Activation Software Manager for
+        /** @brief Constructs BMC Version Software Manager for
          *         the active BMC software image.
          *
          * @note This constructor passes 'true' to the base class in order to
@@ -43,8 +40,6 @@
             // Set properties.
             purpose(VersionPurpose::BMC);
             version(getVersion());
-            activation(Activations::Active);
-            // requestedActivation default is "None", so no need to set.
 
             // Emit deferred signal.
             emit_object_added();
diff --git a/configure.ac b/configure.ac
index ce09489..cc65c1b 100755
--- a/configure.ac
+++ b/configure.ac
@@ -64,6 +64,9 @@
     [DOWNLOAD_BUSNAME="xyz.openbmc_project.Software.Download"])
 AC_DEFINE_UNQUOTED([DOWNLOAD_BUSNAME], ["$DOWNLOAD_BUSNAME"], [The DBus busname to own])
 
+AC_DEFINE(VERSION_IFACE, "xyz.openbmc_project.Software.Version",
+    [The software version manager interface])
+
 AC_ARG_VAR(IMG_UPLOAD_DIR, [Directory where downloaded software images are placed])
 AS_IF([test "x$IMG_UPLOAD_DIR" == "x"], [IMG_UPLOAD_DIR="/tmp/images"])
 AC_DEFINE_UNQUOTED([IMG_UPLOAD_DIR], ["$IMG_UPLOAD_DIR"], [Directory where downloaded software images are placed])
diff --git a/item_updater.cpp b/item_updater.cpp
index f35a9a0..9427414 100644
--- a/item_updater.cpp
+++ b/item_updater.cpp
@@ -1,6 +1,8 @@
 #include <string>
-#include "item_updater.hpp"
+#include <phosphor-logging/log.hpp>
 #include "config.h"
+#include "item_updater.hpp"
+#include "xyz/openbmc_project/Software/Version/server.hpp"
 
 namespace phosphor
 {
@@ -9,17 +11,73 @@
 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;
+
 int ItemUpdater::createActivation(sd_bus_message* msg,
                                   void* userData,
                                   sd_bus_error* retErr)
 {
-    auto versionId = 1;
     auto* updater = static_cast<ItemUpdater*>(userData);
-    updater->activations.insert(std::make_pair(
-            std::to_string(versionId),
-            std::make_unique<Activation>(
-                    updater->bus,
-                    SOFTWARE_OBJPATH)));
+    auto m = sdbusplus::message::message(msg);
+
+    sdbusplus::message::object_path objPath;
+    std::map<std::string,
+        std::map<std::string,
+        sdbusplus::message::variant<std::string>>> interfaces;
+    m.read(objPath, interfaces);
+    std::string path(std::move(objPath));
+
+    for (const auto& intf : interfaces)
+    {
+        if (intf.first.compare(VERSION_IFACE))
+        {
+            continue;
+        }
+
+        for (const auto& property : intf.second)
+        {
+            if (!property.first.compare("Purpose"))
+            {
+                // Only process the BMC images
+                std::string value = sdbusplus::message::variant_ns::get <
+                                    std::string > (property.second);
+                if (value.compare(convertForMessage(server::Version::
+                                                    VersionPurpose::
+                                                    BMC).c_str()))
+                {
+                    return 0;
+                }
+            }
+        }
+    }
+
+    // Version id is the last item in the path
+    auto pos = path.rfind("/");
+    if (pos == std::string::npos)
+    {
+        log<level::ERR>("No version id found in object path",
+                        entry("OBJPATH=%s", path));
+        return -1;
+    }
+
+    auto versionId = path.substr(pos + 1);
+
+    if (updater->activations.find(versionId) == updater->activations.end())
+    {
+        // For now set all BMC code versions to active
+        auto activationState = server::Activation::Activations::Active;
+
+        updater->activations.insert(std::make_pair(
+                                        versionId,
+                                        std::make_unique<Activation>(
+                                            updater->bus,
+                                            path,
+                                            versionId,
+                                            activationState)));
+    }
     return 0;
 }
 
