diff --git a/src/NVMeSensorMain.cpp b/src/NVMeSensorMain.cpp
index b017bca..96f42c9 100644
--- a/src/NVMeSensorMain.cpp
+++ b/src/NVMeSensorMain.cpp
@@ -20,6 +20,7 @@
 #include <NVMeSensor.hpp>
 #include <boost/asio/deadline_timer.hpp>
 
+#include <optional>
 #include <regex>
 
 static constexpr const char* sensorType =
@@ -34,6 +35,20 @@
     return nvmeDeviceMap;
 }
 
+static std::optional<int>
+    extractBusNumber(const std::string& path,
+                     const SensorBaseConfigMap& properties)
+{
+    auto findBus = properties.find("Bus");
+    if (findBus == properties.end())
+    {
+        std::cerr << "could not determine bus number for " << path << "\n";
+        return std::nullopt;
+    }
+
+    return std::visit(VariantToIntVisitor(), findBus->second);
+}
+
 static void handleSensorConfigurations(
     boost::asio::io_service& io, sdbusplus::asio::object_server& objectServer,
     std::shared_ptr<sdbusplus::asio::connection>& dbusConnection,
@@ -70,14 +85,14 @@
         {
             continue;
         }
-        auto findBus = baseConfiguration->second.find("Bus");
-        if (findBus == baseConfiguration->second.end())
+
+        std::optional<int> busNumber =
+            extractBusNumber(sensor.first, baseConfiguration->second);
+        if (!busNumber)
         {
             continue;
         }
 
-        int busNumber = std::visit(VariantToIntVisitor(), findBus->second);
-
         auto findSensorName = baseConfiguration->second.find("Name");
         if (findSensorName == baseConfiguration->second.end())
         {
@@ -95,10 +110,10 @@
                       << "\n";
         }
 
-        int rootBus = busNumber;
+        int rootBus = *busNumber;
 
         std::string muxPath = "/sys/bus/i2c/devices/i2c-" +
-                              std::to_string(busNumber) + "/mux_device";
+                              std::to_string(*busNumber) + "/mux_device";
 
         if (std::filesystem::is_symlink(muxPath))
         {
@@ -131,7 +146,7 @@
 
         std::shared_ptr<NVMeSensor> sensorPtr = std::make_shared<NVMeSensor>(
             objectServer, io, dbusConnection, sensorName,
-            std::move(sensorThresholds), interfacePath, busNumber);
+            std::move(sensorThresholds), interfacePath, *busNumber);
 
         context->addSensor(sensorPtr);
     }
