diff --git a/activation.hpp b/activation.hpp
index 7ab4e14..fa27086 100755
--- a/activation.hpp
+++ b/activation.hpp
@@ -16,6 +16,8 @@
 namespace updater
 {
 
+using AssociationList =
+        std::vector<std::tuple<std::string, std::string, std::string>>;
 using ActivationInherit = sdbusplus::server::object::object<
     sdbusplus::xyz::openbmc_project::Object::server::Delete,
     sdbusplus::xyz::openbmc_project::Software::server::ExtendedVersion,
@@ -182,13 +184,15 @@
          * @param[in] versionId  - The software version id
          * @param[in] extVersion - The extended version
          * @param[in] activationStatus - The status of Activation
+         * @param[in] assocs - Association objects
          */
         Activation(sdbusplus::bus::bus& bus, const std::string& path,
                    ItemUpdater& parent,
                    std::string& versionId,
                    std::string& extVersion,
                    sdbusplus::xyz::openbmc_project::Software::
-                   server::Activation::Activations activationStatus) :
+                   server::Activation::Activations activationStatus,
+                   AssociationList& assocs) :
                    ActivationInherit(bus, path.c_str(), true),
                    bus(bus),
                    path(path),
@@ -209,6 +213,8 @@
             // Set Properties.
             extendedVersion(extVersion);
             activation(activationStatus);
+            associations(assocs);
+
             // Emit deferred signal.
             emit_object_added();
         }
diff --git a/configure.ac b/configure.ac
index 33c941d..9bfb226 100755
--- a/configure.ac
+++ b/configure.ac
@@ -54,6 +54,10 @@
 AS_IF([test "x$SOFTWARE_OBJPATH" == "x"], [SOFTWARE_OBJPATH="/xyz/openbmc_project/software"])
 AC_DEFINE_UNQUOTED([SOFTWARE_OBJPATH], ["$SOFTWARE_OBJPATH"], [The software manager Dbus root])
 
+AC_DEFINE(ACTIVATION_FWD_ASSOCIATION, "activation", [The name of the activation's forward association.])
+AC_DEFINE(ACTIVATION_REV_ASSOCIATION, "inventory", [The name of the activation's reverse association.])
+AC_DEFINE(HOST_INVENTORY_PATH, "/xyz/openbmc_project/inventory/system/chassis", [The host inventory path.])
+
 AC_DEFINE(VERSION_IFACE, "xyz.openbmc_project.Software.Version",
     [The software version manager interface])
 AC_DEFINE(FILEPATH_IFACE, "xyz.openbmc_project.Common.FilePath",
diff --git a/item_updater.cpp b/item_updater.cpp
index dd313a8..e14bdee 100755
--- a/item_updater.cpp
+++ b/item_updater.cpp
@@ -106,6 +106,13 @@
         std::string extendedVersion = (Version::getValue(manifestPath.string(),
                  std::map<std::string, std::string>
                  {{"extended_version", ""}})).begin()->second;
+
+        // Create an association to the host inventory item
+        AssociationList associations{(std::make_tuple(
+                                          ACTIVATION_FWD_ASSOCIATION,
+                                          ACTIVATION_REV_ASSOCIATION,
+                                          HOST_INVENTORY_PATH))};
+
         activations.insert(std::make_pair(
                 versionId,
                 std::make_unique<Activation>(
@@ -114,7 +121,8 @@
                         *this,
                         versionId,
                         extendedVersion,
-                        activationState)));
+                        activationState,
+                        associations)));
         versions.insert(std::make_pair(
                             versionId,
                             std::make_unique<Version>(
@@ -180,6 +188,13 @@
             auto purpose = server::Version::VersionPurpose::Host;
             auto path = fs::path(SOFTWARE_OBJPATH) / id;
 
+
+            // Create an association to the host inventory item
+            AssociationList associations{(std::make_tuple(
+                                              ACTIVATION_FWD_ASSOCIATION,
+                                              ACTIVATION_REV_ASSOCIATION,
+                                              HOST_INVENTORY_PATH))};
+
             // Create Activation instance for this version.
             activations.insert(std::make_pair(
                                    id,
@@ -189,7 +204,8 @@
                                        *this,
                                        id,
                                        extendedVersion,
-                                       activationState)));
+                                       activationState,
+                                       associations)));
 
             // If Active, create RedundancyPriority instance for this version.
             if (activationState == server::Activation::Activations::Active)
