diff --git a/inc/button_handler.hpp b/inc/button_handler.hpp
index c6dc127..8d1b319 100644
--- a/inc/button_handler.hpp
+++ b/inc/button_handler.hpp
@@ -10,7 +10,10 @@
 {
     powerPressed,
     longPowerPressed,
-    resetPressed
+    resetPressed,
+    powerReleased,
+    longPowerReleased,
+    resetReleased
 };
 /**
  * @class Handler
@@ -49,7 +52,7 @@
      *
      * @param[in] msg - sdbusplus message from signal
      */
-    void powerPressed(sdbusplus::message::message& msg);
+    void powerReleased(sdbusplus::message::message& msg);
 
     /**
      * @brief The handler for a long power button press
@@ -68,7 +71,7 @@
      *
      * @param[in] msg - sdbusplus message from signal
      */
-    void idPressed(sdbusplus::message::message& msg);
+    void idReleased(sdbusplus::message::message& msg);
 
     /**
      * @brief The handler for a reset button press
@@ -77,7 +80,7 @@
      *
      * @param[in] msg - sdbusplus message from signal
      */
-    void resetPressed(sdbusplus::message::message& msg);
+    void resetReleased(sdbusplus::message::message& msg);
 
     /**
      * @brief Checks if system is powered on
@@ -132,7 +135,7 @@
     /**
      * @brief Matches on the power button long press released signal
      */
-    std::unique_ptr<sdbusplus::bus::match_t> powerButtonLongPressReleased;
+    std::unique_ptr<sdbusplus::bus::match_t> powerButtonLongPressed;
 
     /**
      * @brief Matches on the ID button released signal
diff --git a/src/button_handler.cpp b/src/button_handler.cpp
index b1c7ef9..3751df5 100644
--- a/src/button_handler.cpp
+++ b/src/button_handler.cpp
@@ -44,18 +44,16 @@
                 sdbusRule::type::signal() + sdbusRule::member("Released") +
                     sdbusRule::path(POWER_DBUS_OBJECT_NAME) +
                     sdbusRule::interface(powerButtonIface),
-                std::bind(std::mem_fn(&Handler::powerPressed), this,
+                std::bind(std::mem_fn(&Handler::powerReleased), this,
                           std::placeholders::_1));
 
-            powerButtonLongPressReleased =
-                std::make_unique<sdbusplus::bus::match_t>(
-                    bus,
-                    sdbusRule::type::signal() +
-                        sdbusRule::member("PressedLong") +
-                        sdbusRule::path(POWER_DBUS_OBJECT_NAME) +
-                        sdbusRule::interface(powerButtonIface),
-                    std::bind(std::mem_fn(&Handler::longPowerPressed), this,
-                              std::placeholders::_1));
+            powerButtonLongPressed = std::make_unique<sdbusplus::bus::match_t>(
+                bus,
+                sdbusRule::type::signal() + sdbusRule::member("PressedLong") +
+                    sdbusRule::path(POWER_DBUS_OBJECT_NAME) +
+                    sdbusRule::interface(powerButtonIface),
+                std::bind(std::mem_fn(&Handler::longPowerPressed), this,
+                          std::placeholders::_1));
         }
     }
     catch (const sdbusplus::exception::exception& e)
@@ -73,7 +71,7 @@
                 sdbusRule::type::signal() + sdbusRule::member("Released") +
                     sdbusRule::path(ID_DBUS_OBJECT_NAME) +
                     sdbusRule::interface(idButtonIface),
-                std::bind(std::mem_fn(&Handler::idPressed), this,
+                std::bind(std::mem_fn(&Handler::idReleased), this,
                           std::placeholders::_1));
         }
     }
@@ -92,7 +90,7 @@
                 sdbusRule::type::signal() + sdbusRule::member("Released") +
                     sdbusRule::path(RESET_DBUS_OBJECT_NAME) +
                     sdbusRule::interface(resetButtonIface),
-                std::bind(std::mem_fn(&Handler::resetPressed), this,
+                std::bind(std::mem_fn(&Handler::resetReleased), this,
                           std::placeholders::_1));
         }
     }
@@ -194,7 +192,7 @@
 
     switch (powerEventType)
     {
-        case PowerEvent::powerPressed:
+        case PowerEvent::powerReleased:
         {
             objPathName = HOST_STATE_OBJECT_NAME + hostNumStr;
             dbusIfaceName = hostIface;
@@ -242,7 +240,7 @@
             break;
         }
 
-        case PowerEvent::resetPressed:
+        case PowerEvent::resetReleased:
         {
             objPathName = HOST_STATE_OBJECT_NAME + hostNumStr;
             dbusIfaceName = hostIface;
@@ -273,11 +271,11 @@
     method.append(dbusIfaceName, transitionName, transition);
     bus.call(method);
 }
-void Handler::powerPressed(sdbusplus::message::message& /* msg */)
+void Handler::powerReleased(sdbusplus::message::message& /* msg */)
 {
     try
     {
-        handlePowerEvent(PowerEvent::powerPressed);
+        handlePowerEvent(PowerEvent::powerReleased);
     }
     catch (const sdbusplus::exception::exception& e)
     {
@@ -298,11 +296,11 @@
     }
 }
 
-void Handler::resetPressed(sdbusplus::message::message& /* msg */)
+void Handler::resetReleased(sdbusplus::message::message& /* msg */)
 {
     try
     {
-        handlePowerEvent(PowerEvent::resetPressed);
+        handlePowerEvent(PowerEvent::resetReleased);
     }
     catch (const sdbusplus::exception::exception& e)
     {
@@ -311,7 +309,7 @@
     }
 }
 
-void Handler::idPressed(sdbusplus::message::message& /* msg */)
+void Handler::idReleased(sdbusplus::message::message& /* msg */)
 {
     std::string groupPath{ledGroupBasePath};
     groupPath += ID_LED_GROUP;
