diff --git a/mainloop.cpp b/mainloop.cpp
index 469a8d7..a5a818f 100644
--- a/mainloop.cpp
+++ b/mainloop.cpp
@@ -150,7 +150,7 @@
 
     /* Note: The sensor objects all share the same ioAccess object. */
     auto sensorObj =
-        std::make_unique<sensor::Sensor>(sensor.first, &_ioAccess, _devPath);
+        std::make_unique<sensor::Sensor>(sensor.first, _ioAccess, _devPath);
 
     // Get list of return codes for removing sensors on device
     auto devRmRCs = env::getEnv("REMOVERCS");
@@ -181,7 +181,7 @@
     catch (const std::system_error& e)
     {
         auto file =
-            sysfs::make_sysfs_path(_ioAccess.path(), sensor.first.first,
+            sysfs::make_sysfs_path(_ioAccess->path(), sensor.first.first,
                                    sensor.first.second, hwmon::entry::cinput);
 #ifndef REMOVE_ON_FAIL
         // Check sensorAdjusts for sensor removal RCs
@@ -250,11 +250,12 @@
 
 MainLoop::MainLoop(sdbusplus::bus::bus&& bus, const std::string& param,
                    const std::string& path, const std::string& devPath,
-                   const char* prefix, const char* root) :
+                   const char* prefix, const char* root,
+                   const hwmonio::HwmonIOInterface* ioIntf) :
     _bus(std::move(bus)),
     _manager(_bus, root), _pathParam(param), _hwmonRoot(), _instance(),
-    _devPath(devPath), _prefix(prefix), _root(root), _state(), _ioAccess(path),
-    _event(sdeventplus::Event::get_default()),
+    _devPath(devPath), _prefix(prefix), _root(root), _state(),
+    _ioAccess(ioIntf), _event(sdeventplus::Event::get_default()),
     _timer(_event, std::bind(&MainLoop::read, this))
 {
     // Strip off any trailing slashes.
@@ -380,7 +381,7 @@
                 auto it = obj.find(InterfaceType::STATUS);
                 if (it != obj.end())
                 {
-                    auto fault = _ioAccess.read(
+                    auto fault = _ioAccess->read(
                         i.first.first, i.first.second, hwmon::entry::fault,
                         hwmonio::retries, hwmonio::delay);
                     auto statusIface =
@@ -401,8 +402,9 @@
                     // RAII object for GPIO unlock / lock
                     sensor::GpioLock gpioLock(sensor->getGpio());
 
-                    value = _ioAccess.read(i.first.first, i.first.second, input,
-                                           hwmonio::retries, hwmonio::delay);
+                    value =
+                        _ioAccess->read(i.first.first, i.first.second, input,
+                                        hwmonio::retries, hwmonio::delay);
 
                     value = sensor->adjustValue(value);
                 }
@@ -436,7 +438,7 @@
             catch (const std::system_error& e)
             {
                 auto file = sysfs::make_sysfs_path(
-                    _ioAccess.path(), i.first.first, i.first.second,
+                    _ioAccess->path(), i.first.first, i.first.second,
                     hwmon::entry::cinput);
 #ifndef REMOVE_ON_FAIL
                 // Check sensorAdjusts for sensor removal RCs
@@ -526,7 +528,7 @@
 
                 // Sensor object added, erase entry from removal list
                 auto file = sysfs::make_sysfs_path(
-                    _ioAccess.path(), it->first.first, it->first.second,
+                    _ioAccess->path(), it->first.first, it->first.second,
                     hwmon::entry::cinput);
 
                 log<level::INFO>("Added sensor to dbus after successful read",
