diff --git a/host_state_manager.cpp b/host_state_manager.cpp
index 515c31b..90c0ae5 100644
--- a/host_state_manager.cpp
+++ b/host_state_manager.cpp
@@ -20,8 +20,9 @@
 namespace manager
 {
 
-// When you see server:: you know we're referencing our base class
+// When you see server:: or reboot:: you know we're referencing our base class
 namespace server = sdbusplus::xyz::openbmc_project::State::server;
+namespace reboot = sdbusplus::xyz::openbmc_project::Control::Boot::server;
 
 using namespace phosphor::logging;
 namespace fs = std::experimental::filesystem;
@@ -229,16 +230,14 @@
     sdbusplus::message::variant<bool> result;
     reply.read(result);
     auto autoReboot = result.get<bool>();
-    auto rebootCounterParam = attemptsLeft();
+    auto rebootCounterParam = reboot::RebootAttempts::attemptsLeft();
 
     if (autoReboot)
     {
         if (rebootCounterParam > 0)
         {
             // Reduce BOOTCOUNT by 1
-            log<level::INFO>("Auto reboot enabled. "
-                             "Reducing HOST BOOTCOUNT by 1.");
-            attemptsLeft(rebootCounterParam - 1);
+            log<level::INFO>("Auto reboot enabled, rebooting");
             return true;
         }
         else if(rebootCounterParam == 0)
@@ -306,6 +305,16 @@
      }
 }
 
+uint32_t Host::decrementRebootCount()
+{
+    auto rebootCount = reboot::RebootAttempts::attemptsLeft();
+    if(rebootCount > 0)
+    {
+        return(reboot::RebootAttempts::attemptsLeft(rebootCount - 1));
+    }
+    return rebootCount;
+}
+
 Host::Transition Host::requestedHostTransition(Transition value)
 {
     log<level::INFO>(
@@ -313,7 +322,18 @@
             entry("REQUESTED_HOST_TRANSITION=%s",
                   convertForMessage(value).c_str()));
 
+    // If this is not a power off request then we need to
+    // decrement the reboot counter.  This code should
+    // never prevent a power on, it should just decrement
+    // the count to 0.  The quiesce handling is where the
+    // check of this count will occur
+    if(value != server::Host::Transition::Off)
+    {
+        decrementRebootCount();
+    }
+
     executeTransition(value);
+
     auto retVal =  server::Host::requestedHostTransition(value);
     serialize(*this);
     return retVal;
diff --git a/host_state_manager.hpp b/host_state_manager.hpp
index 41310d6..af748f5 100644
--- a/host_state_manager.hpp
+++ b/host_state_manager.hpp
@@ -3,6 +3,7 @@
 #include <string>
 #include <functional>
 #include <sdbusplus/bus.hpp>
+#include <phosphor-logging/log.hpp>
 #include <xyz/openbmc_project/State/Boot/Progress/server.hpp>
 #include <xyz/openbmc_project/Control/Boot/RebootAttempts/server.hpp>
 #include <xyz/openbmc_project/State/OperatingSystem/Status/server.hpp>
@@ -23,6 +24,8 @@
         sdbusplus::xyz::openbmc_project::Control::Boot::server::RebootAttempts,
         sdbusplus::xyz::openbmc_project::State::OperatingSystem::server::Status>;
 
+using namespace phosphor::logging;
+
 namespace sdbusRule = sdbusplus::bus::match::rules;
 
 /** @class Host
@@ -77,6 +80,28 @@
         /** @brief Set value of CurrentHostState */
         HostState currentHostState(HostState value) override;
 
+        /**
+         * @brief Set host reboot count to default
+         *
+         * OpenBMC software controls the number of allowed reboot attempts so
+         * any external set request of this property will be overridden by
+         * this function and set to the default.
+         *
+         * The only code responsible for decrementing the boot count resides
+         * within this process and that will use the sub class interface
+         * directly
+         *
+         * @param[in] value      - Reboot count value, will be ignored
+         *
+         * @return Default number of reboot attempts left
+         */
+        uint32_t attemptsLeft(uint32_t value) override
+        {
+            log<level::DEBUG>("External request to reset reboot count");
+            return (sdbusplus::xyz::openbmc_project::Control::Boot::server::
+                    RebootAttempts::attemptsLeft(BOOT_COUNT_MAX_ALLOWED));
+        }
+
     private:
         /**
          * @brief subscribe to the systemd signals
@@ -138,6 +163,16 @@
          */
         bool getStateRestoreSetting() const;
 
+        /** @brief Decrement reboot count
+         *
+         * This is used internally to this application to decrement the boot
+         * count on each boot attempt. The host will use the external
+         * attemptsLeft() interface to reset the count when a boot is successful
+         *
+         * @return number of reboot count attempts left
+         */
+        uint32_t decrementRebootCount();
+
         /** @brief Persistent sdbusplus DBus bus connection. */
         sdbusplus::bus::bus& bus;
 
