diff --git a/sensor.cpp b/sensor.cpp
index a88410b..6e5e841 100644
--- a/sensor.cpp
+++ b/sensor.cpp
@@ -146,16 +146,32 @@
     // Only read the input value if the status is functional
     if (statusIface->functional())
     {
-        // RAII object for GPIO unlock / lock
-        GpioLock gpioLock(getGpio());
+#ifdef UPDATE_FUNCTIONAL_ON_FAIL
+        try
+#endif
+        {
+            // RAII object for GPIO unlock / lock
+            GpioLock gpioLock(getGpio());
 
-        // Retry for up to a second if device is busy
-        // or has a transient error.
-        val = _ioAccess->read(_sensor.first, _sensor.second,
-                              hwmon::entry::cinput, std::get<size_t>(retryIO),
-                              std::get<std::chrono::milliseconds>(retryIO));
+            // Retry for up to a second if device is busy
+            // or has a transient error.
+            val =
+                _ioAccess->read(_sensor.first, _sensor.second,
+                                hwmon::entry::cinput, std::get<size_t>(retryIO),
+                                std::get<std::chrono::milliseconds>(retryIO));
 
-        val = adjustValue(val);
+            val = adjustValue(val);
+        }
+#ifdef UPDATE_FUNCTIONAL_ON_FAIL
+        catch (const std::system_error& e)
+        {
+            // Catch the exception here and update the functional property.
+            // By catching the exception, it will not propagate it up the stack
+            // and thus the code will skip the "Remove RCs" check in
+            // MainLoop::getObject and will not exit on failure.
+            statusIface->functional(false);
+        }
+#endif
     }
 
     auto iface =
