diff --git a/presence/fan_enclosure.hpp b/presence/fan_enclosure.hpp
index 071b59c..30bd235 100644
--- a/presence/fan_enclosure.hpp
+++ b/presence/fan_enclosure.hpp
@@ -54,10 +54,13 @@
          * @brief Constructs Fan Enclosure Object
          *
          * @param[in] fanProp - Fan enclosure properties
+         * @param[in] initialState - The initial state of the enclosure.
          */
-        explicit FanEnclosure(const phosphor::fan::Properties& fanProp) :
+        explicit FanEnclosure(const phosphor::fan::Properties& fanProp,
+                              presenceState initialState = UNKNOWN) :
                         invPath(std::get<0>(fanProp)),
-                        fanDesc(std::get<1>(fanProp))
+                        fanDesc(std::get<1>(fanProp)),
+                        presState(initialState)
         {
         }
 
@@ -82,7 +85,7 @@
         /** @brief List of sensors associated with this fan enclosure */
         std::vector<std::unique_ptr<Sensor>> sensors;
         /** @brief Last known presence state of this fan enclosure */
-        presenceState presState = UNKNOWN;
+        presenceState presState;
 
         /**
          * @brief Get the current presence state based on all sensors
diff --git a/presence/tach_sensor.cpp b/presence/tach_sensor.cpp
index 60da441..36d4bb1 100644
--- a/presence/tach_sensor.cpp
+++ b/presence/tach_sensor.cpp
@@ -27,7 +27,7 @@
 
 bool TachSensor::isPresent()
 {
-    return (tach != 0);
+    return state;
 }
 
 void TachSensor::handleTachChange(sdbusplus::message::message& sdbpMsg)
@@ -40,8 +40,8 @@
     auto valPropMap = msgData.find("Value");
     if (valPropMap != msgData.end())
     {
-        tach = sdbusplus::message::variant_ns::get<int64_t>(
-            valPropMap->second);
+        state = sdbusplus::message::variant_ns::get<int64_t>(
+            valPropMap->second) != 0;
     }
     // Update inventory according to latest tach reported
     fanEnc.updInventory();
diff --git a/presence/tach_sensor.hpp b/presence/tach_sensor.hpp
index 47d2098..068a66f 100644
--- a/presence/tach_sensor.hpp
+++ b/presence/tach_sensor.hpp
@@ -38,14 +38,16 @@
          */
         TachSensor(
             const std::string& id,
-            FanEnclosure& fanEnc) :
+            FanEnclosure& fanEnc,
+            bool initialState = false) :
                 Sensor(id, fanEnc),
                 tachSignal(util::SDBusPlus::getBus(),
                            match(id).c_str(),
                            std::bind(
                                std::mem_fn(&TachSensor::handleTachChange),
                                this,
-                               std::placeholders::_1))
+                               std::placeholders::_1)),
+                state(initialState)
         {
             // Nothing to do here
         }
@@ -61,7 +63,7 @@
         /** @brief Used to subscribe to dbus signals */
         sdbusplus::server::match::match tachSignal;
         /** @brief Tach speed value given from the signal */
-        int64_t tach = 0;
+        bool state;
 
         /**
          * @brief Appends the fan sensor id to construct a match string
