diff --git a/mainloop.cpp b/mainloop.cpp
index c7ede15..be9b680 100644
--- a/mainloop.cpp
+++ b/mainloop.cpp
@@ -288,7 +288,9 @@
         return {};
     }
 
-    auto sensorObj = std::make_unique<sensor::Sensor>(sensor.first);
+    auto sensorObj = std::make_unique<sensor::Sensor>(sensor.first,
+                                                      ioAccess,
+                                                      _devPath);
 
     // Get list of return codes for removing sensors on device
     auto devRmRCs = env::getEnv("REMOVERCS");
@@ -314,7 +316,7 @@
     try
     {
         // Add status interface based on _fault file being present
-        sensor::addStatus(sensor.first, ioAccess, _devPath, info);
+        sensorObj->addStatus(info);
         valueInterface = addValue(sensor.first, retryIO, ioAccess, info);
     }
     catch (const std::system_error& e)
diff --git a/sensor.cpp b/sensor.cpp
index 5fb1f38..3a1ed73 100644
--- a/sensor.cpp
+++ b/sensor.cpp
@@ -11,16 +11,16 @@
 namespace sensor
 {
 
-Sensor::Sensor(const SensorSet::key_type& sensor) :
-    sensor(sensor)
+Sensor::Sensor(const SensorSet::key_type& sensor,
+               const hwmonio::HwmonIO& ioAccess,
+               const std::string& devPath) :
+    sensor(sensor),
+    ioAccess(ioAccess),
+    devPath(devPath)
 {
 }
 
-std::shared_ptr<StatusObject> addStatus(
-        const SensorSet::key_type& sensor,
-        const hwmonio::HwmonIO& ioAccess,
-        const std::string& devPath,
-        ObjectInfo& info)
+std::shared_ptr<StatusObject> Sensor::addStatus(ObjectInfo& info)
 {
     namespace fs = std::experimental::filesystem;
 
diff --git a/sensor.hpp b/sensor.hpp
index 4d3dc3c..978467b 100644
--- a/sensor.hpp
+++ b/sensor.hpp
@@ -27,31 +27,36 @@
          * @brief Constructs Sensor object
          *
          * @param[in] sensor - A pair of sensor indentifiers
+         * @param[in] ioAccess - Hwmon sysfs access
+         * @param[in] devPath - Device sysfs path
          */
-        explicit Sensor(const SensorSet::key_type& sensor);
+        explicit Sensor(const SensorSet::key_type& sensor,
+                        const hwmonio::HwmonIO& ioAccess,
+                        const std::string& devPath);
+
+        /**
+         * @brief Add status interface and functional property for sensor
+         * @details When a sensor has an associated fault file, the
+         * OperationalStatus interface is added along with setting the
+         * Functional property to the corresponding value found in the
+         * fault file.
+         *
+         * @param[in] info - Sensor object information
+         *
+         * @return - Shared pointer to the status object
+         */
+        std::shared_ptr<StatusObject> addStatus(
+                ObjectInfo& info);
 
     private:
         /** @brief Sensor object's identifiers */
         SensorSet::key_type sensor;
-};
 
-/**
- * @brief Add status interface and functional property for sensor
- * @details When a sensor has an associated fault file, the OperationalStatus
- * interface is added along with setting the Functional property to the
- * corresponding value found in the fault file.
- *
- * @param[in] sensor - Sensor identification data
- * @param[in] ioAccess - I/O access to sysfs
- * @param[in] devPath - Device path
- * @param[in] info - Sensor object information
- *
- * @return - Shared pointer to the status object
- */
-std::shared_ptr<StatusObject> addStatus(
-        const SensorSet::key_type& sensor,
-        const hwmonio::HwmonIO& ioAccess,
-        const std::string& devPath,
-        ObjectInfo& info);
+        /** @brief Hwmon sysfs access. */
+        const hwmonio::HwmonIO& ioAccess;
+
+        /** @brief Physical device sysfs path. */
+        const std::string& devPath;
+};
 
 } // namespace sensor
