diff --git a/mainloop.cpp b/mainloop.cpp
index 217c34c..ead9612 100644
--- a/mainloop.cpp
+++ b/mainloop.cpp
@@ -16,6 +16,7 @@
 #include <iostream>
 #include <memory>
 #include <cstdlib>
+#include <string>
 
 #include <phosphor-logging/elog-errors.hpp>
 #include "config.h"
@@ -60,6 +61,16 @@
 decltype(Thresholds<CriticalObject>::alarmHi) Thresholds<CriticalObject>::alarmHi =
     &CriticalObject::criticalAlarmHigh;
 
+// The gain and offset to adjust a value
+struct valueAdjust
+{
+    double gain = 1.0;
+    int offset = 0;
+};
+
+// Store the valueAdjust for sensors
+std::map<SensorSet::key_type, valueAdjust> sensorAdjusts;
+
 static constexpr auto typeAttrMap =
 {
     // 1 - hwmon class
@@ -142,6 +153,19 @@
     return true;
 }
 
+int adjustValue(const SensorSet::key_type& sensor, int value)
+{
+    const auto& it = sensorAdjusts.find(sensor);
+    if (it != sensorAdjusts.end())
+    {
+        // Adjust based on gain and offset
+        value = static_cast<decltype(value)>(
+                    static_cast<double>(value) * it->second.gain
+                        + it->second.offset);
+    }
+    return value;
+}
+
 auto addValue(const SensorSet::key_type& sensor,
               const std::string& devPath,
               sysfs::hwmonio::HwmonIO& ioAccess,
@@ -178,6 +202,20 @@
         return static_cast<std::shared_ptr<ValueObject>>(nullptr);
     }
 
+    auto gain = getEnv("GAIN", sensor);
+    if (!gain.empty())
+    {
+        sensorAdjusts[sensor].gain = std::stod(gain);
+    }
+
+    auto offset = getEnv("OFFSET", sensor);
+    if (!offset.empty())
+    {
+        sensorAdjusts[sensor].offset = std::stoi(offset);
+    }
+
+    val = adjustValue(sensor, val);
+
     auto iface = std::make_shared<ValueObject>(bus, objPath.c_str(), deferSignals);
     iface->value(val);
 
@@ -365,6 +403,8 @@
                             sysfs::hwmonio::retries,
                             sysfs::hwmonio::delay);
 
+                    value = adjustValue(i.first, value);
+
                     auto& objInfo = std::get<ObjectInfo>(i.second);
                     auto& obj = std::get<Object>(objInfo);
 
