diff --git a/src/activation.cpp b/src/activation.cpp
index 131e480..0ba7e64 100644
--- a/src/activation.cpp
+++ b/src/activation.cpp
@@ -59,6 +59,7 @@
     else
     {
         activationBlocksTransition.reset();
+        activationProgress.reset();
     }
 
     return SoftwareActivation::activation(value);
@@ -104,6 +105,10 @@
 
 void Activation::startActivation()
 {
+    if (!activationProgress)
+    {
+        activationProgress = std::make_unique<ActivationProgress>(bus, path);
+    }
     if (!activationBlocksTransition)
     {
         activationBlocksTransition =
@@ -124,11 +129,15 @@
                                       SYSTEMD_INTERFACE, "StartUnit");
     method.append(psuUpdateUnit, "replace");
     bus.call_noreply(method);
+
+    activationProgress->progress(10);
 }
 
 void Activation::finishActivation()
 {
+    activationProgress->progress(100);
     activationBlocksTransition.reset();
+    activationProgress.reset();
 
     // TODO: delete the old software object
     // TODO: create related associations
diff --git a/src/activation.hpp b/src/activation.hpp
index a15a0a7..d7880f6 100644
--- a/src/activation.hpp
+++ b/src/activation.hpp
@@ -8,6 +8,7 @@
 #include <xyz/openbmc_project/Association/Definitions/server.hpp>
 #include <xyz/openbmc_project/Software/Activation/server.hpp>
 #include <xyz/openbmc_project/Software/ActivationBlocksTransition/server.hpp>
+#include <xyz/openbmc_project/Software/ActivationProgress/server.hpp>
 #include <xyz/openbmc_project/Software/ExtendedVersion/server.hpp>
 
 namespace phosphor
@@ -59,6 +60,39 @@
     std::string path;
 };
 
+using ActivationProgressInherit = sdbusplus::server::object::object<
+    sdbusplus::xyz::openbmc_project::Software::server::ActivationProgress>;
+
+class ActivationProgress : public ActivationProgressInherit
+{
+  public:
+    /** @brief Constructs ActivationProgress.
+     *
+     * @param[in] bus    - The Dbus bus object
+     * @param[in] path   - The Dbus object path
+     */
+    ActivationProgress(sdbusplus::bus::bus& bus, const std::string& path) :
+        ActivationProgressInherit(bus, path.c_str(), true), bus(bus), path(path)
+    {
+        progress(0);
+        std::vector<std::string> interfaces({interface});
+        bus.emit_interfaces_added(path.c_str(), interfaces);
+    }
+
+    ~ActivationProgress()
+    {
+        std::vector<std::string> interfaces({interface});
+        bus.emit_interfaces_removed(path.c_str(), interfaces);
+    }
+
+  private:
+    // TODO Remove once openbmc/openbmc#1975 is resolved
+    static constexpr auto interface =
+        "xyz.openbmc_project.Software.ActivationProgress";
+    sdbusplus::bus::bus& bus;
+    std::string path;
+};
+
 using ActivationInherit = sdbusplus::server::object::object<
     sdbusplus::xyz::openbmc_project::Software::server::ExtendedVersion,
     sdbusplus::xyz::openbmc_project::Software::server::Activation,
@@ -166,6 +200,9 @@
 
     /** @brief Persistent ActivationBlocksTransition dbus object */
     std::unique_ptr<ActivationBlocksTransition> activationBlocksTransition;
+
+    /** @brief Persistent ActivationProgress dbus object */
+    std::unique_ptr<ActivationProgress> activationProgress;
 };
 
 } // namespace updater
