diff --git a/src/activation.hpp b/src/activation.hpp
index bc95065..95fe069 100644
--- a/src/activation.hpp
+++ b/src/activation.hpp
@@ -46,27 +46,20 @@
      */
     ActivationBlocksTransition(sdbusplus::bus::bus& bus,
                                const std::string& path) :
-        ActivationBlocksTransitionInherit(bus, path.c_str(), true),
-        bus(bus), path(path)
+        ActivationBlocksTransitionInherit(bus, path.c_str(),
+                                          action::emit_interface_added),
+        bus(bus)
     {
-        std::vector<std::string> interfaces({interface});
-        bus.emit_interfaces_added(path.c_str(), interfaces);
         enableRebootGuard();
     }
 
     ~ActivationBlocksTransition()
     {
-        std::vector<std::string> interfaces({interface});
-        bus.emit_interfaces_removed(path.c_str(), interfaces);
         disableRebootGuard();
     }
 
   private:
-    // TODO Remove once openbmc/openbmc#1975 is resolved
-    static constexpr auto interface =
-        "xyz.openbmc_project.Software.ActivationBlocksTransition";
     sdbusplus::bus::bus& bus;
-    std::string path;
 
     /** @brief Enables a Guard that blocks any BMC reboot commands */
     void enableRebootGuard();
@@ -87,25 +80,11 @@
      * @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)
+        ActivationProgressInherit(bus, path.c_str(),
+                                  action::emit_interface_added)
     {
         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<
diff --git a/src/version.hpp b/src/version.hpp
index e26bb31..2f72189 100644
--- a/src/version.hpp
+++ b/src/version.hpp
@@ -40,17 +40,9 @@
      */
     Delete(sdbusplus::bus::bus& bus, const std::string& path,
            Version& version) :
-        DeleteInherit(bus, path.c_str(), true),
-        version(version), bus(bus), path(path)
+        DeleteInherit(bus, path.c_str(), action::emit_interface_added),
+        version(version)
     {
-        std::vector<std::string> interfaces({interface});
-        bus.emit_interfaces_added(path.c_str(), interfaces);
-    }
-
-    ~Delete()
-    {
-        std::vector<std::string> interfaces({interface});
-        bus.emit_interfaces_removed(path.c_str(), interfaces);
     }
 
     /**
@@ -63,10 +55,6 @@
   private:
     /** @brief The Version Object. */
     Version& version;
-
-    static constexpr auto interface = "xyz.openbmc_project.Object.Delete";
-    sdbusplus::bus::bus& bus;
-    std::string path;
 };
 
 /** @class Version
