diff --git a/src/button_handler.cpp b/src/button_handler.cpp
index f4b43fc..e31db4b 100644
--- a/src/button_handler.cpp
+++ b/src/button_handler.cpp
@@ -18,6 +18,7 @@
 constexpr auto chassisIface = "xyz.openbmc_project.State.Chassis";
 constexpr auto hostIface = "xyz.openbmc_project.State.Host";
 constexpr auto powerButtonIface = "xyz.openbmc_project.Chassis.Buttons.Power";
+constexpr auto resetButtonIface = "xyz.openbmc_project.Chassis.Buttons.Reset";
 constexpr auto mapperIface = "xyz.openbmc_project.ObjectMapper";
 
 constexpr auto mapperObjPath = "/xyz/openbmc_project/object_mapper";
@@ -53,6 +54,25 @@
     {
         // The button wasn't implemented
     }
+
+    try
+    {
+        if (!getService(RESET_DBUS_OBJECT_NAME, resetButtonIface).empty())
+        {
+            log<level::INFO>("Registering reset button handler");
+            resetButtonReleased = std::make_unique<sdbusplus::bus::match_t>(
+                bus,
+                sdbusRule::type::signal() + sdbusRule::member("Released") +
+                    sdbusRule::path(RESET_DBUS_OBJECT_NAME) +
+                    sdbusRule::interface(resetButtonIface),
+                std::bind(std::mem_fn(&Handler::resetPressed), this,
+                          std::placeholders::_1));
+        }
+    }
+    catch (SdBusError& e)
+    {
+        // The button wasn't implemented
+    }
 }
 
 std::string Handler::getService(const std::string& path,
@@ -144,5 +164,35 @@
                         entry("ERROR=%s", e.what()));
     }
 }
+
+void Handler::resetPressed(sdbusplus::message::message& msg)
+{
+    try
+    {
+        if (!poweredOn())
+        {
+            log<level::INFO>("Power is off so ignoring reset button press");
+            return;
+        }
+
+        log<level::INFO>("Handling reset button press");
+
+        sdbusplus::message::variant<std::string> state =
+            convertForMessage(Host::Transition::Reboot);
+
+        auto service = getService(HOST_STATE_OBJECT_NAME, hostIface);
+        auto method = bus.new_method_call(
+            service.c_str(), HOST_STATE_OBJECT_NAME, propertyIface, "Set");
+
+        method.append(hostIface, "RequestedHostTransition", state);
+
+        bus.call(method);
+    }
+    catch (SdBusError& e)
+    {
+        log<level::ERR>("Failed power state change on a reset button press",
+                        entry("ERROR=%s", e.what()));
+    }
+}
 } // namespace button
 } // namespace phosphor
