diff --git a/monitor/example/monitor.yaml b/monitor/example/monitor.yaml
index 67feaab..1692800 100644
--- a/monitor/example/monitor.yaml
+++ b/monitor/example/monitor.yaml
@@ -19,6 +19,12 @@
 #    - name [The name of the fan sensor]
 #      has_target [true|false  If this sensor has a Target property for
 #                  setting a fan speed (otherwise just for reads)]
+#      factor [The factor to multiply with target to calculate the expected
+#              fan speed. Default is 1 for fan speed target;
+#              Customized value for pwm target]
+#      offset [The offset to add to calculate the expected fan speed.
+#              Default is 0 for fan speed target;
+#              Customized value for pwm target]
 #
 #sensor_trust_groups:
 # - class: [Group class name
diff --git a/monitor/fan.cpp b/monitor/fan.cpp
index b1aa233..81d27e0 100644
--- a/monitor/fan.cpp
+++ b/monitor/fan.cpp
@@ -53,6 +53,8 @@
                             *this,
                             std::get<sensorNameField>(s),
                             std::get<hasTargetField>(s),
+                            std::get<factorField>(s),
+                            std::get<offsetField>(s),
                             std::get<timeoutField>(def),
                             events));
 
@@ -172,10 +174,17 @@
 {
     auto actual = static_cast<uint64_t>(sensor.getInput());
     auto target = sensor.getTarget();
+    auto factor = sensor.getFactor();
+    auto offset = sensor.getOffset();
 
     uint64_t min = target * (100 - _deviation) / 100;
     uint64_t max = target * (100 + _deviation) / 100;
 
+    // TODO: openbmc/openbmc#2937 enhance this function
+    // either by making it virtual, or by predefining different
+    // outOfRange ops and selecting by yaml config
+    min = min * factor + offset;
+    max = max * factor + offset;
     if ((actual < min) || (actual > max))
     {
         return true;
diff --git a/monitor/gen-fan-monitor-defs.py b/monitor/gen-fan-monitor-defs.py
index 1590484..48cf7ec 100755
--- a/monitor/gen-fan-monitor-defs.py
+++ b/monitor/gen-fan-monitor-defs.py
@@ -36,8 +36,13 @@
                   <%
                       #has_target is a bool, and we need a true instead of True
                       has_target = str(sensor['has_target']).lower()
+                      factor = sensor.get('factor', 1)
+                      offset = sensor.get('offset', 0)
                   %> \
-                      SensorDefinition{"${sensor['name']}", ${has_target}},
+                      SensorDefinition{"${sensor['name']}",
+                                       ${has_target},
+                                       ${factor},
+                                       ${offset}},
                   %endfor
                   },
     },
diff --git a/monitor/tach_sensor.cpp b/monitor/tach_sensor.cpp
index 22875a2..47f4d91 100644
--- a/monitor/tach_sensor.cpp
+++ b/monitor/tach_sensor.cpp
@@ -69,6 +69,8 @@
                        Fan& fan,
                        const std::string& id,
                        bool hasTarget,
+                       size_t factor,
+                       size_t offset,
                        size_t timeout,
                        phosphor::fan::event::EventPtr& events) :
     _bus(bus),
@@ -76,6 +78,8 @@
     _name(FAN_SENSOR_PATH + id),
     _invName(path(fan.getName()) / id),
     _hasTarget(hasTarget),
+    _factor(factor),
+    _offset(offset),
     _timeout(timeout),
     _timer(events, [this, &fan](){ fan.timerExpired(*this); })
 {
diff --git a/monitor/tach_sensor.hpp b/monitor/tach_sensor.hpp
index dd89bbf..50951cd 100644
--- a/monitor/tach_sensor.hpp
+++ b/monitor/tach_sensor.hpp
@@ -62,6 +62,8 @@
          * @param[in] id - the id of the sensor
          * @param[in] hasTarget - if the sensor supports
          *                        setting the speed
+         * @param[in] factor - the factor of the sensor target
+         * @param[in] offset - the offset of the sensor target
          * @param[in] timeout - Normal timeout value to use
          * @param[in] events - sd_event pointer
          */
@@ -70,6 +72,8 @@
                    Fan& fan,
                    const std::string& id,
                    bool hasTarget,
+                   size_t factor,
+                   size_t offset,
                    size_t timeout,
                    phosphor::fan::event::EventPtr& events);
 
@@ -95,6 +99,22 @@
         }
 
         /**
+         * @brief Returns the factor of the sensor target
+         */
+        inline size_t getFactor() const
+        {
+            return _factor;
+        }
+
+        /**
+         * @brief Returns the offset of the sensor target
+         */
+        inline size_t getOffset() const
+        {
+            return _offset;
+        }
+
+        /**
          * Returns true if the hardware behind this
          * sensor is considered working OK/functional.
          */
@@ -217,6 +237,16 @@
         const bool _hasTarget;
 
         /**
+         * @brief The factor of target to get fan rpm
+         */
+        const size_t _factor;
+
+        /**
+         * @brief The offset of target to get fan rpm
+         */
+        const size_t _offset;
+
+        /**
          * @brief The input speed, from the Value dbus property
          */
         int64_t _tachInput = 0;
diff --git a/monitor/types.hpp b/monitor/types.hpp
index 795db00..5993c53 100644
--- a/monitor/types.hpp
+++ b/monitor/types.hpp
@@ -18,8 +18,10 @@
 
 constexpr auto sensorNameField = 0;
 constexpr auto hasTargetField = 1;
+constexpr auto factorField = 2;
+constexpr auto offsetField = 3;
 
-using SensorDefinition = std::tuple<std::string, bool>;
+using SensorDefinition = std::tuple<std::string, bool, size_t, size_t>;
 
 constexpr auto fanNameField = 0;
 constexpr auto timeoutField = 1;
