diff --git a/inc/button_handler.hpp b/inc/button_handler.hpp
index 790bbe9..0964aad 100644
--- a/inc/button_handler.hpp
+++ b/inc/button_handler.hpp
@@ -58,6 +58,15 @@
     void longPowerPressed(sdbusplus::message::message& msg);
 
     /**
+     * @brief The handler for a reset button press
+     *
+     * Reboots the host if it is powered on.
+     *
+     * @param[in] msg - sdbusplus message from signal
+     */
+    void resetPressed(sdbusplus::message::message& msg);
+
+    /**
      * @brief Checks if system is powered on
      *
      * @return true if powered on, false else
@@ -90,6 +99,11 @@
      * @brief Matches on the power button long press released signal
      */
     std::unique_ptr<sdbusplus::bus::match_t> powerButtonLongPressReleased;
+
+    /**
+     * @brief Matches on the reset button released signal
+     */
+    std::unique_ptr<sdbusplus::bus::match_t> resetButtonReleased;
 };
 
 } // namespace button
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
