diff --git a/configure.ac b/configure.ac
index 408fc29..d966930 100755
--- a/configure.ac
+++ b/configure.ac
@@ -58,6 +58,9 @@
 AC_DEFINE(ACTIVE_FWD_ASSOCIATION, "active", [The name of the active's forward association.])
 AC_DEFINE(ACTIVE_REV_ASSOCIATION, "software_version", [The name of the active's reverse association.])
 
+AC_DEFINE(FUNCTIONAL_FWD_ASSOCIATION, "functional", [The name of the functional forward association.])
+AC_DEFINE(FUNCTIONAL_REV_ASSOCIATION, "software_version", [The functional reverse association.])
+
 AC_ARG_VAR(VERSION_BUSNAME, [The Dbus busname to own])
 AS_IF([test "x$VERSION_BUSNAME" == "x"], [VERSION_BUSNAME="xyz.openbmc_project.Software.Version"])
 AC_DEFINE_UNQUOTED([VERSION_BUSNAME], ["$VERSION_BUSNAME"], [The DBus busname to own])
diff --git a/item_updater.cpp b/item_updater.cpp
index 6b4ff5e..dda7a8d 100644
--- a/item_updater.cpp
+++ b/item_updater.cpp
@@ -143,6 +143,10 @@
 
 void ItemUpdater::processBMCImage()
 {
+    using VersionClass = phosphor::software::manager::Version;
+    // Read os-release from /etc/ to get the functional BMC version
+    auto functionalVersion = VersionClass::getBMCVersion(OS_RELEASE_FILE);
+
     // Read os-release from folders under /media/ to get
     // BMC Software Versions.
     for(const auto& iter : fs::directory_iterator(MEDIA_DIR))
@@ -161,9 +165,7 @@
                                 entry("FileName=%s", osRelease.string()));
                 activationState = server::Activation::Activations::Invalid;
             }
-            auto version =
-                    phosphor::software::manager::Version::
-                            getBMCVersion(osRelease);
+            auto version = VersionClass::getBMCVersion(osRelease);
             if (version.empty())
             {
                 log<level::ERR>("Failed to read version from osRelease",
@@ -176,6 +178,12 @@
             auto purpose = server::Version::VersionPurpose::BMC;
             auto path = fs::path(SOFTWARE_OBJPATH) / id;
 
+            // Create functional association if this is the functional version
+            if (version.compare(functionalVersion) == 0)
+            {
+                createFunctionalAssociation(path);
+            }
+
             AssociationList associations = {};
 
             if (activationState == server::Activation::Activations::Active)
@@ -465,11 +473,22 @@
     associations(assocs);
 }
 
+void ItemUpdater::createFunctionalAssociation(const std::string& path)
+{
+    assocs.emplace_back(std::make_tuple(FUNCTIONAL_FWD_ASSOCIATION,
+                                        FUNCTIONAL_REV_ASSOCIATION,
+                                        path));
+    associations(assocs);
+}
+
 void ItemUpdater::removeActiveAssociation(std::string path)
 {
     for (auto iter = assocs.begin(); iter != assocs.end();)
     {
-        if ((std::get<2>(*iter)).compare(path) == 0)
+        // Since there could be multiple associations to the same path,
+        // only remove ones that have an active forward association.
+        if ((std::get<0>(*iter)).compare(ACTIVE_FWD_ASSOCIATION) == 0 &&
+            (std::get<2>(*iter)).compare(path) == 0)
         {
             iter = assocs.erase(iter);
             associations(assocs);
diff --git a/item_updater.hpp b/item_updater.hpp
index 3489a47..09d0638 100644
--- a/item_updater.hpp
+++ b/item_updater.hpp
@@ -141,6 +141,13 @@
         /** @brief Restores field mode status on reboot. */
         void restoreFieldModeStatus();
 
+        /** @brief Creates a functional association to the
+         *  "running" BMC software image
+         *
+         * @param[in]  path - The path to create the association to.
+         */
+        void createFunctionalAssociation(const std::string& path);
+
         /** @brief Persistent sdbusplus DBus bus connection. */
         sdbusplus::bus::bus& bus;
 
