diff --git a/mainloop.cpp b/mainloop.cpp
index ab4af2e..a35c40e 100644
--- a/mainloop.cpp
+++ b/mainloop.cpp
@@ -73,6 +73,31 @@
     Thresholds<CriticalObject>::alarmHi) Thresholds<CriticalObject>::alarmHi =
     &CriticalObject::criticalAlarmHigh;
 
+void updateSensorInterfaces(InterfaceMap& ifaces, int64_t value)
+{
+    for (auto& iface : ifaces)
+    {
+        switch (iface.first)
+        {
+            case InterfaceType::VALUE:
+            {
+                auto& valueIface =
+                    std::any_cast<std::shared_ptr<ValueObject>&>(iface.second);
+                valueIface->value(value);
+            }
+            break;
+            case InterfaceType::WARN:
+                checkThresholds<WarningObject>(iface.second, value);
+                break;
+            case InterfaceType::CRIT:
+                checkThresholds<CriticalObject>(iface.second, value);
+                break;
+            default:
+                break;
+        }
+    }
+}
+
 std::string MainLoop::getID(SensorSet::container_t::const_reference sensor)
 {
     std::string id;
@@ -413,29 +438,7 @@
                     value = sensor->adjustValue(value);
                 }
 
-                for (auto& iface : obj)
-                {
-                    switch (iface.first)
-                    {
-                        case InterfaceType::VALUE:
-                        {
-                            auto& valueIface =
-                                std::any_cast<std::shared_ptr<ValueObject>&>(
-                                    iface.second);
-                            valueIface->value(value);
-                        }
-                        break;
-                        case InterfaceType::WARN:
-                            checkThresholds<WarningObject>(iface.second, value);
-                            break;
-                        case InterfaceType::CRIT:
-                            checkThresholds<CriticalObject>(iface.second,
-                                                            value);
-                            break;
-                        default:
-                            break;
-                    }
-                }
+                updateSensorInterfaces(obj, value);
             }
             catch (const std::system_error& e)
             {
diff --git a/mainloop.hpp b/mainloop.hpp
index 07128b5..d99ed91 100644
--- a/mainloop.hpp
+++ b/mainloop.hpp
@@ -147,3 +147,8 @@
     std::optional<ObjectStateData>
         getObject(SensorSet::container_t::const_reference sensor);
 };
+
+/** @brief Given a value and map of interfaces, update values and check
+ * thresholds.
+ */
+void updateSensorInterfaces(InterfaceMap& ifaces, int64_t value);
