diff --git a/host_state_manager.cpp b/host_state_manager.cpp
index 6e2fd22..83f21e7 100644
--- a/host_state_manager.cpp
+++ b/host_state_manager.cpp
@@ -52,16 +52,9 @@
 constexpr auto MAPPER_PATH = "/xyz/openbmc_project/object_mapper";
 constexpr auto MAPPER_INTERFACE = "xyz.openbmc_project.ObjectMapper";
 
-constexpr auto REBOOTCOUNTER_SERVICE("org.openbmc.Sensors");
-constexpr auto REBOOTCOUNTER_PATH("/org/openbmc/sensors/host/BootCount");
-constexpr auto REBOOTCOUNTER_INTERFACE("org.openbmc.SensorValue");
-
 constexpr auto SYSTEMD_PROPERTY_IFACE = "org.freedesktop.DBus.Properties";
 constexpr auto SYSTEMD_INTERFACE_UNIT = "org.freedesktop.systemd1.Unit";
 
-// TODO openbmc/openbmc#1646 - boot count needs to be defined in 1 place
-constexpr auto DEFAULT_BOOTCOUNT = 3;
-
 /* Map a system state to the HostState */
 const std::map<std::string, server::Host::HostState> SYS_HOST_STATE_TABLE = {
         {"HOST_BOOTING", server::Host::HostState::Running},
@@ -102,7 +95,7 @@
 
     auto restore = getStateRestoreSetting();
 
-    if ((!restore) || (!deserialize(HOST_STATE_PERSIST_PATH,*this)))
+    if ((!restore) || (!deserialize(HOST_STATE_PERSIST_PATH, *this)))
     {
         //set to default value.
         server::Host::requestedHostTransition(Transition::Off);
@@ -213,17 +206,6 @@
     return true;
 }
 
-void Host::setHostbootCount(int bootCount)
-{
-    auto method = this->bus.new_method_call(REBOOTCOUNTER_SERVICE,
-                                            REBOOTCOUNTER_PATH,
-                                            REBOOTCOUNTER_INTERFACE,
-                                            "setValue");
-    sdbusplus::message::variant<int> newParam = bootCount;
-    method.append(newParam);
-    this->bus.call_noreply(method);
-}
-
 bool Host::isAutoReboot()
 {
     using namespace settings;
@@ -245,29 +227,16 @@
     sdbusplus::message::variant<bool> result;
     reply.read(result);
     auto autoReboot = result.get<bool>();
-
-    sdbusplus::message::variant<int> rebootCounterParam = 0;
-    method = this->bus.new_method_call(REBOOTCOUNTER_SERVICE,
-                                       REBOOTCOUNTER_PATH,
-                                       REBOOTCOUNTER_INTERFACE,
-                                       "getValue");
-    reply = this->bus.call(method);
-    if (reply.is_method_error())
-    {
-        log<level::ERR>("Error in BOOTCOUNT getValue");
-        return false;
-    }
-    reply.read(rebootCounterParam);
+    auto rebootCounterParam = attemptsLeft();
 
     if (autoReboot)
     {
-        if ( rebootCounterParam > 0)
+        if (rebootCounterParam > 0)
         {
             // Reduce BOOTCOUNT by 1
             log<level::INFO>("Auto reboot enabled. "
                              "Reducing HOST BOOTCOUNT by 1.");
-            Host::setHostbootCount((sdbusplus::message::variant_ns::
-                                    get<int>(rebootCounterParam)) - 1);
+            attemptsLeft(rebootCounterParam - 1);
             return true;
         }
         else if(rebootCounterParam == 0)
@@ -275,7 +244,7 @@
             // Reset reboot counter and go to quiesce state
             log<level::INFO>("Auto reboot enabled. "
                              "HOST BOOTCOUNT already set to 0.");
-            Host::setHostbootCount(DEFAULT_BOOTCOUNT);
+            attemptsLeft(BOOT_COUNT_MAX_ALLOWED);
             return false;
         }
         else
