diff --git a/src/NVMeSensorMain.cpp b/src/NVMeSensorMain.cpp
index 9c44dee..b017bca 100644
--- a/src/NVMeSensorMain.cpp
+++ b/src/NVMeSensorMain.cpp
@@ -34,6 +34,113 @@
     return nvmeDeviceMap;
 }
 
+static void handleSensorConfigurations(
+    boost::asio::io_service& io, sdbusplus::asio::object_server& objectServer,
+    std::shared_ptr<sdbusplus::asio::connection>& dbusConnection,
+    const ManagedObjectType& sensorConfigurations)
+{
+    // todo: it'd be better to only update the ones we care about
+    for (const auto& [_, nvmeContextPtr] : nvmeDeviceMap)
+    {
+        if (nvmeContextPtr)
+        {
+            nvmeContextPtr->close();
+        }
+    }
+    nvmeDeviceMap.clear();
+
+    // iterate through all found configurations
+    for (const std::pair<sdbusplus::message::object_path, SensorData>& sensor :
+         sensorConfigurations)
+    {
+        const SensorData& sensorData = sensor.second;
+        const std::string& interfacePath = sensor.first.str;
+        const std::pair<std::string, boost::container::flat_map<
+                                         std::string, BasicVariantType>>*
+            baseConfiguration = nullptr;
+
+        // find base configuration
+        auto sensorBase = sensor.second.find(sensorType);
+        if (sensorBase != sensor.second.end())
+        {
+            baseConfiguration = &(*sensorBase);
+        }
+
+        if (baseConfiguration == nullptr)
+        {
+            continue;
+        }
+        auto findBus = baseConfiguration->second.find("Bus");
+        if (findBus == baseConfiguration->second.end())
+        {
+            continue;
+        }
+
+        int busNumber = std::visit(VariantToIntVisitor(), findBus->second);
+
+        auto findSensorName = baseConfiguration->second.find("Name");
+        if (findSensorName == baseConfiguration->second.end())
+        {
+            std::cerr << "could not determine configuration name for "
+                      << interfacePath << "\n";
+            continue;
+        }
+        std::string sensorName = std::get<std::string>(findSensorName->second);
+
+        std::vector<thresholds::Threshold> sensorThresholds;
+
+        if (!parseThresholdsFromConfig(sensorData, sensorThresholds))
+        {
+            std::cerr << "error populating thresholds for " << sensorName
+                      << "\n";
+        }
+
+        int rootBus = busNumber;
+
+        std::string muxPath = "/sys/bus/i2c/devices/i2c-" +
+                              std::to_string(busNumber) + "/mux_device";
+
+        if (std::filesystem::is_symlink(muxPath))
+        {
+            std::string rootName =
+                std::filesystem::read_symlink(muxPath).filename();
+            size_t dash = rootName.find('-');
+            if (dash == std::string::npos)
+            {
+                std::cerr << "Error finding root bus for " << rootName << "\n";
+                continue;
+            }
+            rootBus = std::stoi(rootName.substr(0, dash));
+        }
+
+        std::shared_ptr<NVMeContext> context;
+        auto findRoot = nvmeDeviceMap.find(rootBus);
+        if (findRoot != nvmeDeviceMap.end())
+        {
+            context = findRoot->second;
+        }
+        else
+        {
+#if HAVE_NVME_MI_MCTP
+            context = std::make_shared<NVMeMCTPContext>(io, rootBus);
+#else
+            context = std::make_shared<NVMeBasicContext>(io, rootBus);
+#endif
+            nvmeDeviceMap[rootBus] = context;
+        }
+
+        std::shared_ptr<NVMeSensor> sensorPtr = std::make_shared<NVMeSensor>(
+            objectServer, io, dbusConnection, sensorName,
+            std::move(sensorThresholds), interfacePath, busNumber);
+
+        context->addSensor(sensorPtr);
+    }
+    for (const auto& [_, context] : nvmeDeviceMap)
+    {
+        context->pollNVMeDevices();
+    }
+}
+
 void createSensors(boost::asio::io_service& io,
                    sdbusplus::asio::object_server& objectServer,
                    std::shared_ptr<sdbusplus::asio::connection>& dbusConnection)
@@ -43,111 +150,8 @@
         dbusConnection,
         std::move([&io, &objectServer, &dbusConnection](
                       const ManagedObjectType& sensorConfigurations) {
-            // todo: it'd be better to only update the ones we care about
-            for (const auto& [_, nvmeContextPtr] : nvmeDeviceMap)
-            {
-                if (nvmeContextPtr)
-                {
-                    nvmeContextPtr->close();
-                }
-            }
-            nvmeDeviceMap.clear();
-
-            // iterate through all found configurations
-            for (const std::pair<sdbusplus::message::object_path, SensorData>&
-                     sensor : sensorConfigurations)
-            {
-                const SensorData& sensorData = sensor.second;
-                const std::string& interfacePath = sensor.first.str;
-                const std::pair<
-                    std::string,
-                    boost::container::flat_map<std::string, BasicVariantType>>*
-                    baseConfiguration = nullptr;
-
-                // find base configuration
-                auto sensorBase = sensor.second.find(sensorType);
-                if (sensorBase != sensor.second.end())
-                {
-                    baseConfiguration = &(*sensorBase);
-                }
-
-                if (baseConfiguration == nullptr)
-                {
-                    continue;
-                }
-                auto findBus = baseConfiguration->second.find("Bus");
-                if (findBus == baseConfiguration->second.end())
-                {
-                    continue;
-                }
-
-                int busNumber =
-                    std::visit(VariantToIntVisitor(), findBus->second);
-
-                auto findSensorName = baseConfiguration->second.find("Name");
-                if (findSensorName == baseConfiguration->second.end())
-                {
-                    std::cerr << "could not determine configuration name for "
-                              << interfacePath << "\n";
-                    continue;
-                }
-                std::string sensorName =
-                    std::get<std::string>(findSensorName->second);
-
-                std::vector<thresholds::Threshold> sensorThresholds;
-
-                if (!parseThresholdsFromConfig(sensorData, sensorThresholds))
-                {
-                    std::cerr << "error populating thresholds for "
-                              << sensorName << "\n";
-                }
-
-                int rootBus = busNumber;
-
-                std::string muxPath = "/sys/bus/i2c/devices/i2c-" +
-                                      std::to_string(busNumber) + "/mux_device";
-
-                if (std::filesystem::is_symlink(muxPath))
-                {
-                    std::string rootName =
-                        std::filesystem::read_symlink(muxPath).filename();
-                    size_t dash = rootName.find('-');
-                    if (dash == std::string::npos)
-                    {
-                        std::cerr << "Error finding root bus for " << rootName
-                                  << "\n";
-                        continue;
-                    }
-                    rootBus = std::stoi(rootName.substr(0, dash));
-                }
-
-                std::shared_ptr<NVMeContext> context;
-                auto findRoot = nvmeDeviceMap.find(rootBus);
-                if (findRoot != nvmeDeviceMap.end())
-                {
-                    context = findRoot->second;
-                }
-                else
-                {
-#if HAVE_NVME_MI_MCTP
-                    context = std::make_shared<NVMeMCTPContext>(io, rootBus);
-#else
-                    context = std::make_shared<NVMeBasicContext>(io, rootBus);
-#endif
-                    nvmeDeviceMap[rootBus] = context;
-                }
-
-                std::shared_ptr<NVMeSensor> sensorPtr =
-                    std::make_shared<NVMeSensor>(
-                        objectServer, io, dbusConnection, sensorName,
-                        std::move(sensorThresholds), interfacePath, busNumber);
-
-                context->addSensor(sensorPtr);
-            }
-            for (const auto& [_, context] : nvmeDeviceMap)
-            {
-                context->pollNVMeDevices();
-            }
+            handleSensorConfigurations(io, objectServer, dbusConnection,
+                                       sensorConfigurations);
         }));
     getter->getConfiguration(std::vector<std::string>{sensorType});
 }
