diff --git a/activation.hpp b/activation.hpp
new file mode 100644
index 0000000..c166d89
--- /dev/null
+++ b/activation.hpp
@@ -0,0 +1,48 @@
+// Copyright 2024 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#pragma once
+
+#include <sdbusplus/bus.hpp>
+#include <xyz/openbmc_project/Software/Activation/server.hpp>
+
+namespace google
+{
+namespace hoth
+{
+
+template <typename... T>
+using ServerObject = typename sdbusplus::server::object::object<T...>;
+using ActivationInterface =
+    sdbusplus::xyz::openbmc_project::Software::server::Activation;
+using ActivationObject = ServerObject<ActivationInterface>;
+
+/** @class SwActivation
+ *  @brief Software Activation interface implementation for all Versions.
+ *  @details A concrete implementation for
+ * xyz.openbmc_project.Software.Activation DBus API.
+ */
+class SwActivation : public ActivationObject
+{
+  public:
+    SwActivation(sdbusplus::bus::bus& bus, const char* objPath) :
+        ActivationObject(bus, objPath)
+    {
+      activation(Activations::Active);
+    }
+};
+
+} // namespace hoth
+
+}  // namespace google
diff --git a/main.cpp b/main.cpp
index 4aa70e3..0f95323 100644
--- a/main.cpp
+++ b/main.cpp
@@ -12,6 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+#include "activation.hpp"
 #include "asset.hpp"
 #include "ec_util.hpp"
 #include "firmware_mtd_updater.hpp"
@@ -201,6 +202,8 @@
     std::unique_ptr<google::hoth::HothState> hoth_state;
     std::unique_ptr<google::hoth::RoVersion> swVerRo;
     std::unique_ptr<google::hoth::RwVersion> swVerRw;
+    std::unique_ptr<google::hoth::SwActivation> swActivationRo;
+    std::unique_ptr<google::hoth::SwActivation> swActivationRw;
     std::unique_ptr<google::hoth::Asset> asset;
     std::unique_ptr<google::hoth::internal::FirmwareUpdater> firmwareUpdater;
 
@@ -318,14 +321,18 @@
             *systemBus, ro_obj.c_str(), hostCmd.get());
         swVerRw = std::make_unique<google::hoth::RwVersion>(
             *systemBus, rw_obj.c_str(), hostCmd.get());
+        swActivationRo = std::make_unique<google::hoth::SwActivation>(
+            *systemBus, ro_obj.c_str());
+        swActivationRw = std::make_unique<google::hoth::SwActivation>(
+            *systemBus, rw_obj.c_str());
     }
     catch (const std::exception& e)
     {
-        stdplus::print(
-            stderr,
-            "Error registering Software Version objects with D-Bus: {}\n",
-            e.what());
-        exit(EXIT_FAILURE);
+      stdplus::print(stderr,
+                     "Error registering Software Version or Activation objects "
+                     "with D-Bus: {}\n",
+                     e.what());
+      exit(EXIT_FAILURE);
     }
     sd_notify(0, "READY=1");
 
