diff --git a/common/src/device.cpp b/common/src/device.cpp
index b71b2cb..1e4b810 100644
--- a/common/src/device.cpp
+++ b/common/src/device.cpp
@@ -9,6 +9,7 @@
 #include <sdbusplus/async/context.hpp>
 #include <sdbusplus/bus.hpp>
 #include <xyz/openbmc_project/Association/Definitions/server.hpp>
+#include <xyz/openbmc_project/Software/ActivationProgress/aserver.hpp>
 #include <xyz/openbmc_project/State/Host/client.hpp>
 
 #include <utility>
@@ -17,6 +18,13 @@
 
 using namespace phosphor::software::device;
 
+using SoftwareActivationProgress =
+    sdbusplus::aserver::xyz::openbmc_project::software::ActivationProgress<
+        phosphor::software::Software>;
+
+using SoftwareActivationProgressProperties = sdbusplus::common::xyz::
+    openbmc_project::software::ActivationProgress::properties_t;
+
 const auto applyTimeImmediate = sdbusplus::common::xyz::openbmc_project::
     software::ApplyTime::RequestedApplyTimes::Immediate;
 
@@ -145,7 +153,7 @@
         return false;
     }
 
-    softwarePending->softwareActivationProgress->setProgress(progress);
+    softwarePending->softwareActivationProgress->progress(progress);
 
     return true;
 }
@@ -162,7 +170,8 @@
     std::string objPath = softwarePending->objectPath;
 
     softwarePending->softwareActivationProgress =
-        std::make_unique<SoftwareActivationProgress>(ctx, objPath.c_str());
+        std::make_unique<SoftwareActivationProgress>(
+            ctx, objPath.c_str(), SoftwareActivationProgressProperties{0});
 
     softwarePending->setActivationBlocksTransition(true);
 
diff --git a/common/src/software.cpp b/common/src/software.cpp
index 5fb8a8a..3a02763 100644
--- a/common/src/software.cpp
+++ b/common/src/software.cpp
@@ -19,36 +19,18 @@
 
 const static std::string baseObjPathSoftware = "/xyz/openbmc_project/software/";
 
-SoftwareActivationProgress::SoftwareActivationProgress(
-    sdbusplus::async::context& ctx, const char* objPath) :
-    ActivationProgress(ctx, objPath)
-{
-    // This prevents "Conditional jump or move depends on uninitialised
-    // value(s)"
-    // when properties are updated for the first time
-    progress_ = 0;
-}
-
-void SoftwareActivationProgress::setProgress(int progressArg)
-{
-    progress(progressArg);
-}
-
 Software::Software(sdbusplus::async::context& ctx, Device& parent) :
     Software(ctx, parent, getRandomSoftwareId(parent))
 {}
 
 Software::Software(sdbusplus::async::context& ctx, Device& parent,
                    const std::string& swid) :
-    SoftwareActivation(ctx, (baseObjPathSoftware + swid).c_str()),
+    SoftwareActivation(ctx, (baseObjPathSoftware + swid).c_str(),
+                       Activation::properties_t{Activations::NotReady,
+                                                RequestedActivations::None}),
     objectPath(baseObjPathSoftware + swid), parentDevice(parent), swid(swid),
     ctx(ctx)
 {
-    // initialize the members of our base class to prevent
-    // "Conditional jump or move depends on uninitialised value(s)"
-    activation_ = Activations::NotReady;
-    requested_activation_ = RequestedActivations::None;
-
     std::string objPath = baseObjPathSoftware + swid;
 
     debug("{SWID}: created dbus interfaces on path {OBJPATH}", "SWID", swid,
@@ -88,17 +70,18 @@
     {
         std::string path = objectPath;
         associationDefinitions =
-            std::make_unique<SoftwareAssociationDefinitions>(ctx, path.c_str());
+            std::make_unique<SoftwareAssociationDefinitions>(
+                ctx, path.c_str(),
+                SoftwareAssociationDefinitions::properties_t{{}});
     }
 
-    std::vector<std::tuple<std::string, std::string, std::string>> assocs;
-
     if (endpoint.empty())
     {
-        associationDefinitions->associations(assocs);
         co_return;
     }
 
+    std::vector<std::tuple<std::string, std::string, std::string>> assocs;
+
     if (isRunning)
     {
         debug("{SWID}: creating 'running' association to {OBJPATH}", "SWID",
@@ -126,21 +109,17 @@
 {
     debug("{SWID}: set version {VERSION}", "SWID", swid, "VERSION", versionStr);
 
-    const bool emitSignal = !version;
-
     if (!version)
     {
-        version =
-            std::make_unique<SoftwareVersion>(ctx, objectPath.str.c_str());
+        version = std::make_unique<SoftwareVersion>(
+            ctx, objectPath.str.c_str(),
+            SoftwareVersion::properties_t{versionStr, versionPurpose});
+        version->emit_added();
+        return;
     }
 
     version->version(versionStr);
     version->purpose(versionPurpose);
-
-    if (emitSignal)
-    {
-        version->emit_added();
-    }
 }
 
 SoftwareVersion::VersionPurpose Software::getPurpose()
