diff --git a/monitor/fan.cpp b/monitor/fan.cpp
index 3f36dc7..abc9743 100644
--- a/monitor/fan.cpp
+++ b/monitor/fan.cpp
@@ -71,7 +71,8 @@
                 mode, bus, *this, std::get<sensorNameField>(s),
                 std::get<hasTargetField>(s), std::get<funcDelay>(def),
                 std::get<targetInterfaceField>(s), std::get<factorField>(s),
-                std::get<offsetField>(s), std::get<timeoutField>(def),
+                std::get<offsetField>(s), std::get<methodField>(def),
+                std::get<thresholdField>(s), std::get<timeoutField>(def),
                 std::get<nonfuncRotorErrDelayField>(def), event));
 
             _trustManager->registerSensor(_sensors.back());
@@ -167,20 +168,44 @@
     {
         if (sensor.functional())
         {
-            // Start nonfunctional timer if not already running
-            sensor.startTimer(TimerMode::nonfunc);
+            switch (sensor.getMethod())
+            {
+                case MethodMode::timebased:
+                    // Start nonfunctional timer if not already running
+                    sensor.startTimer(TimerMode::nonfunc);
+                    break;
+                case MethodMode::count:
+                    sensor.setCounter(true);
+                    if (sensor.getCounter() >= sensor.getThreshold())
+                    {
+                        updateState(sensor);
+                    }
+                    break;
+            }
         }
     }
     else
     {
-        if (sensor.functional())
+        switch (sensor.getMethod())
         {
-            sensor.stopTimer();
-        }
-        else
-        {
-            // Start functional timer if not already running
-            sensor.startTimer(TimerMode::func);
+            case MethodMode::timebased:
+                if (sensor.functional())
+                {
+                    sensor.stopTimer();
+                }
+                else
+                {
+                    // Start functional timer if not already running
+                    sensor.startTimer(TimerMode::func);
+                }
+                break;
+            case MethodMode::count:
+                sensor.setCounter(false);
+                if (!sensor.functional() && sensor.getCounter() == 0)
+                {
+                    updateState(sensor);
+                }
+                break;
         }
     }
 }
@@ -233,7 +258,7 @@
     return false;
 }
 
-void Fan::timerExpired(TachSensor& sensor)
+void Fan::updateState(TachSensor& sensor)
 {
     sensor.setFunctional(!sensor.functional());
 
