diff --git a/hwmonio.cpp b/hwmonio.cpp
index fe167f5..18ceff9 100644
--- a/hwmonio.cpp
+++ b/hwmonio.cpp
@@ -68,8 +68,7 @@
         const std::string& id,
         const std::string& sensor,
         size_t retries,
-        std::chrono::milliseconds delay,
-        bool isOCC) const
+        std::chrono::milliseconds delay) const
 {
     int64_t val;
     std::ifstream ifs;
@@ -114,18 +113,6 @@
                 exit(0);
             }
 
-            if (isOCC)
-            {
-                if (rc == EREMOTEIO)
-                {
-                    // For the OCCs, when an EREMOTEIO is return, set the
-                    // value to 255*1000
-                    // (0xFF = sensor is failed, 1000 = sensor factor)
-                    val = 255000;
-                    break;
-                }
-            }
-
             if (0 == std::count(
                         retryableErrors.begin(),
                         retryableErrors.end(),
diff --git a/hwmonio.hpp b/hwmonio.hpp
index b254b0f..619d6ad 100644
--- a/hwmonio.hpp
+++ b/hwmonio.hpp
@@ -57,8 +57,7 @@
                 const std::string& id,
                 const std::string& sensor,
                 size_t retries,
-                std::chrono::milliseconds delay,
-                bool isOCC = false) const;
+                std::chrono::milliseconds delay) const;
 
         /** @brief Perform formatted hwmon sysfs write.
          *
diff --git a/mainloop.cpp b/mainloop.cpp
index 11b182e..bfc010e 100644
--- a/mainloop.cpp
+++ b/mainloop.cpp
@@ -135,8 +135,7 @@
 auto addValue(const SensorSet::key_type& sensor,
               const RetryIO& retryIO,
               hwmonio::HwmonIO& ioAccess,
-              ObjectInfo& info,
-              bool isOCC = false)
+              ObjectInfo& info)
 {
     static constexpr bool deferSignals = true;
 
@@ -181,8 +180,7 @@
                 sensor.second,
                 hwmon::entry::cinput,
                 std::get<size_t>(retryIO),
-                std::get<std::chrono::milliseconds>(retryIO),
-                isOCC);
+                std::get<std::chrono::milliseconds>(retryIO));
         val = adjustValue(sensor, val);
     }
 
@@ -307,8 +305,7 @@
     {
         // Add status interface based on _fault file being present
         sensor::addStatus(sensor.first, ioAccess, _devPath, info);
-        valueInterface = addValue(sensor.first, retryIO, ioAccess, info,
-                _isOCC);
+        valueInterface = addValue(sensor.first, retryIO, ioAccess, info);
     }
     catch (const std::system_error& e)
     {
@@ -397,11 +394,6 @@
       state(),
       ioAccess(path)
 {
-    if (path.find("occ") != std::string::npos)
-    {
-        _isOCC = true;
-    }
-
     // Strip off any trailing slashes.
     std::string p = path;
     while (!p.empty() && p.back() == '/')
@@ -554,8 +546,7 @@
                         i.first.second,
                         input,
                         hwmonio::retries,
-                        hwmonio::delay,
-                        _isOCC);
+                        hwmonio::delay);
 
                 value = adjustValue(i.first, value);
 
diff --git a/mainloop.hpp b/mainloop.hpp
index 3fbc059..fec576d 100644
--- a/mainloop.hpp
+++ b/mainloop.hpp
@@ -94,8 +94,6 @@
         const char* _prefix;
         /** @brief DBus sensors namespace root. */
         const char* _root;
-        /** @brief hwmon instance is for an OCC. */
-        bool _isOCC = false;
         /** @brief DBus object state. */
         SensorState state;
         /** @brief Sleep interval in microseconds. */
