diff --git a/inc/power_button_profile.hpp b/inc/power_button_profile.hpp
new file mode 100644
index 0000000..37bfbe6
--- /dev/null
+++ b/inc/power_button_profile.hpp
@@ -0,0 +1,72 @@
+#pragma once
+
+#include "config.h"
+
+#include <sdbusplus/bus.hpp>
+#include <sdbusplus/bus/match.hpp>
+#include <sdbusplus/message.hpp>
+
+#include <string>
+
+namespace phosphor::button
+{
+
+constexpr auto powerButtonInterface =
+    "xyz.openbmc_project.Chassis.Buttons.Power";
+namespace sdbusRule = sdbusplus::bus::match::rules;
+
+/**
+ * @class PowerButtonProfile
+ *
+ * Abstract base class for custom power button profiles.
+ *
+ * Calls a derived class's pressed() and released()
+ * functions when the power button is pressed and
+ * released.
+ */
+class PowerButtonProfile
+{
+  public:
+    PowerButtonProfile(sdbusplus::bus_t& bus) :
+        bus(bus),
+        pressedMatch(bus,
+                     sdbusRule::type::signal() + sdbusRule::member("Pressed") +
+                         sdbusRule::path(POWER_DBUS_OBJECT_NAME) +
+                         sdbusRule::interface(powerButtonInterface),
+                     std::bind(&PowerButtonProfile::pressedHandler, this,
+                               std::placeholders::_1)),
+        releasedMatch(bus,
+                      sdbusRule::type::signal() +
+                          sdbusRule::member("Released") +
+                          sdbusRule::path(POWER_DBUS_OBJECT_NAME) +
+                          sdbusRule::interface(powerButtonInterface),
+                      std::bind(&PowerButtonProfile::releasedHandler, this,
+                                std::placeholders::_1))
+    {}
+
+    virtual ~PowerButtonProfile() = default;
+
+    void pressedHandler(sdbusplus::message_t /* msg*/)
+    {
+        pressed();
+    }
+
+    void releasedHandler(sdbusplus::message_t msg)
+    {
+        auto time = msg.unpack<uint64_t>();
+        released(time);
+    }
+
+    virtual void pressed() = 0;
+
+    virtual void released(uint64_t pressTimeMS) = 0;
+
+  protected:
+    sdbusplus::bus_t& bus;
+
+  private:
+    sdbusplus::bus::match_t pressedMatch;
+    sdbusplus::bus::match_t releasedMatch;
+};
+
+} // namespace phosphor::button
