diff --git a/monitor/fan.cpp b/monitor/fan.cpp
index 5f0414d..c5322b1 100644
--- a/monitor/fan.cpp
+++ b/monitor/fan.cpp
@@ -84,7 +84,16 @@
         (_numSensorFailsForNonFunc == 0) ||
         (countNonFunctionalSensors() < _numSensorFailsForNonFunc);
 
-    updateInventory(functionalState);
+    if (updateInventory(functionalState) && !functionalState)
+    {
+        // the inventory update threw an exception, possibly because D-Bus
+        // wasn't ready. Try to update sensors back to functional to avoid a
+        // false-alarm. They will be updated again from subscribing to the
+        // properties-changed event
+
+        for (auto& sensor : _sensors)
+            sensor->setFunctional(true);
+    }
 
 #ifndef MONITOR_USE_JSON
     // Check current tach state when entering monitor mode
@@ -406,21 +415,41 @@
     _system.fanStatusChange(*this);
 }
 
-void Fan::updateInventory(bool functional)
+bool Fan::updateInventory(bool functional)
 {
-    auto objectMap =
-        util::getObjMap<bool>(_name, util::OPERATIONAL_STATUS_INTF,
-                              util::FUNCTIONAL_PROPERTY, functional);
-    auto response = util::SDBusPlus::lookupAndCallMethod(
-        _bus, util::INVENTORY_PATH, util::INVENTORY_INTF, "Notify", objectMap);
-    if (response.is_method_error())
+    bool dbusError = false;
+
+    try
     {
-        log<level::ERR>("Error in Notify call to update inventory");
-        return;
+        auto objectMap =
+            util::getObjMap<bool>(_name, util::OPERATIONAL_STATUS_INTF,
+                                  util::FUNCTIONAL_PROPERTY, functional);
+
+        auto response = util::SDBusPlus::lookupAndCallMethod(
+            _bus, util::INVENTORY_PATH, util::INVENTORY_INTF, "Notify",
+            objectMap);
+
+        if (response.is_method_error())
+        {
+            log<level::ERR>("Error in Notify call to update inventory");
+
+            dbusError = true;
+        }
+    }
+    catch (const util::DBusError& e)
+    {
+        dbusError = true;
+
+        getLogger().log(
+            fmt::format("D-Bus Exception reading/updating inventory : {}",
+                        e.what()),
+            Logger::error);
     }
 
     // This will always track the current state of the inventory.
     _functional = functional;
+
+    return dbusError;
 }
 
 void Fan::presenceChanged(sdbusplus::message::message& msg)
