diff --git a/common/include/software.hpp b/common/include/software.hpp
index 09a0b0f..d3e8ffc 100644
--- a/common/include/software.hpp
+++ b/common/include/software.hpp
@@ -8,6 +8,7 @@
 #include <xyz/openbmc_project/Software/ActivationBlocksTransition/aserver.hpp>
 #include <xyz/openbmc_project/Software/ActivationProgress/aserver.hpp>
 #include <xyz/openbmc_project/Software/Version/aserver.hpp>
+#include <xyz/openbmc_project/Software/Version/client.hpp>
 
 #include <string>
 
@@ -65,8 +66,14 @@
     void enableUpdate(const std::set<RequestedApplyTimes>& allowedApplyTimes);
 
     // This should populate 'softwareVersion'
-    // @param version      the version string
-    void setVersion(const std::string& versionStr);
+    // @param version         the version string
+    // @param versionPurpose  which kind of software
+    void setVersion(const std::string& versionStr,
+                    SoftwareVersion::VersionPurpose versionPurpose =
+                        SoftwareVersion::VersionPurpose::Unknown);
+
+    // Return the version purpose
+    SoftwareVersion::VersionPurpose getPurpose();
 
     // This should populate 'softwareAssociationDefinitions'
     // @param isRunning             if the software version is currently running
diff --git a/common/include/software_manager.hpp b/common/include/software_manager.hpp
index 7cc2e6a..1e0a427 100644
--- a/common/include/software_manager.hpp
+++ b/common/include/software_manager.hpp
@@ -53,11 +53,6 @@
     sdbusplus::async::context& ctx;
 
   private:
-    // request the bus name on dbus after all configuration has been parsed
-    // and the devices have been initialized
-    // @returns        the name on dbus
-    std::string setupBusName();
-
     // this is appended to the common prefix to construct the dbus name
     std::string serviceNameSuffix;
 
diff --git a/common/src/device.cpp b/common/src/device.cpp
index 2367213..9e2278d 100644
--- a/common/src/device.cpp
+++ b/common/src/device.cpp
@@ -164,7 +164,8 @@
 {
     softwarePending->setActivation(ActivationInterface::Activations::Ready);
 
-    softwarePending->setVersion(componentVersion);
+    softwarePending->setVersion(componentVersion,
+                                softwareCurrent->getPurpose());
 
     std::string objPath = softwarePending->objectPath;
 
diff --git a/common/src/software.cpp b/common/src/software.cpp
index faa377a..31b2b75 100644
--- a/common/src/software.cpp
+++ b/common/src/software.cpp
@@ -123,10 +123,13 @@
     co_return;
 }
 
-void Software::setVersion(const std::string& versionStr)
+void Software::setVersion(const std::string& versionStr,
+                          SoftwareVersion::VersionPurpose versionPurpose)
 {
     debug("{SWID}: set version {VERSION}", "SWID", swid, "VERSION", versionStr);
 
+    const bool emitSignal = !version;
+
     if (!version)
     {
         version =
@@ -134,6 +137,17 @@
     }
 
     version->version(versionStr);
+    version->purpose(versionPurpose);
+
+    if (emitSignal)
+    {
+        version->emit_added();
+    }
+}
+
+SoftwareVersion::VersionPurpose Software::getPurpose()
+{
+    return version->purpose();
 }
 
 void Software::setActivationBlocksTransition(bool enabled)
diff --git a/common/src/software_manager.cpp b/common/src/software_manager.cpp
index b95fcab..77ee0b1 100644
--- a/common/src/software_manager.cpp
+++ b/common/src/software_manager.cpp
@@ -7,6 +7,7 @@
 #include <sdbusplus/bus.hpp>
 #include <xyz/openbmc_project/Association/Definitions/server.hpp>
 #include <xyz/openbmc_project/ObjectMapper/client.hpp>
+#include <xyz/openbmc_project/Software/Version/client.hpp>
 #include <xyz/openbmc_project/State/Host/client.hpp>
 
 #include <cstdint>
@@ -17,21 +18,18 @@
 
 SoftwareManager::SoftwareManager(sdbusplus::async::context& ctx,
                                  const std::string& serviceNameSuffix) :
-    ctx(ctx), serviceNameSuffix(serviceNameSuffix), manager(ctx, "/")
-{
-    debug("initialized SoftwareManager");
-}
-
-std::string SoftwareManager::setupBusName()
+    ctx(ctx), serviceNameSuffix(serviceNameSuffix),
+    manager(ctx, sdbusplus::client::xyz::openbmc_project::software::Version<>::
+                     namespace_path)
 {
     const std::string serviceNameFull =
         "xyz.openbmc_project.Software." + serviceNameSuffix;
 
     debug("requesting dbus name {BUSNAME}", "BUSNAME", serviceNameFull);
 
-    ctx.get_bus().request_name(serviceNameFull.c_str());
+    ctx.request_name(serviceNameFull.c_str());
 
-    return serviceNameFull;
+    debug("Initialized SoftwareManager");
 }
 
 // NOLINTBEGIN(readability-static-accessed-through-instance)
@@ -133,6 +131,4 @@
     }
 
     debug("[config] done with initial configuration");
-
-    setupBusName();
 }
