Index: /trunk/FACT++/src/smartfact.cc
===================================================================
--- /trunk/FACT++/src/smartfact.cc	(revision 15199)
+++ /trunk/FACT++/src/smartfact.cc	(revision 15200)
@@ -497,5 +497,5 @@
     deque<float> fFtmControlTriggerRateHist;
      int32_t     fFtmControlTriggerRateTooLow;
-    uint32_t     fFtmControlState;
+     int         fFtmControlState;
 
     float fFtmPatchThresholdMed;
@@ -1412,10 +1412,16 @@
         }
 
+        const FTM::DimTriggerRates &dim = d.Ref<FTM::DimTriggerRates>();
+
+        // If the trigger rate is too low...
+        // ... and the run was not just started (can lead to very small elapsed times)
+        // ... and the trigger is switched on
+        // ... and there was no state change (then the trigger was started or stopped)
+        fFtmControlTriggerRateTooLow =
+            dim.fTriggerRate<1 && dim.fElapsedTime>0.45 &&
+            (fFtmControlState&FTM::kFtmStates)==FTM::kFtmRunning &&
+            (fFtmControlState&FTM::kFtmStates)==(d.GetQoS()&FTM::kFtmStates);
+
         fFtmControlState = d.GetQoS();
-
-        const FTM::DimTriggerRates &dim = d.Ref<FTM::DimTriggerRates>();
-
-        // two consecutive low rates.
-        fFtmControlTriggerRateTooLow = (fFtmControlState&FTM::kFtmStates)==FTM::kRunning && dim.fTriggerRate<1;
 
         const float *brates = dim.fBoardRate; // Board rate
@@ -2336,5 +2342,5 @@
 
         newerr |= SetError(fDimDriveControl.state()>0xff && data_taking && data_run,
-                           "Drive in ERROR state during data-taking");
+                           "Drive in ERROR state during data-run");
         newerr |= SetError(fDriveControlMoonDist>155,
                            "Moon within the field-of-view of the cones");
@@ -2342,6 +2348,6 @@
                            "Moon within the field-of-view of the camera");
 
-        newerr |= SetError(fDimBiasControl.state()<BIAS::State::kRamping && data_taking,
-                           "BIAS not operating during data-taking");
+        newerr |= SetError(fDimBiasControl.state()<BIAS::State::kRamping && data_taking && data_run,
+                           "BIAS not operating during data-run");
         newerr |= SetError(fDimBiasControl.state()==BIAS::State::kOverCurrent,
                            "BIAS channels in OverCurrent");
@@ -2366,8 +2372,8 @@
                            "Sensor temperature exceeds outside temperature by more than 9&deg;C");
 
-        newerr |= SetError(fFtmControlTriggerRateTooLow>1,
+        newerr |= SetError(fFtmControlTriggerRateTooLow>0,
                            "Trigger rate below 1Hz while trigger switched on");
 
-        newerr |= SetError(fFtmControlState!=FTM::kConfiguring && (fFtmControlState&FTM::kFtmLocked)==0,
+        newerr |= SetError(fFtmControlState!=FTM::kFtmConfig && (fFtmControlState&FTM::kFtmLocked)==0,
                            "FTM - clock conditioner not locked!");
 
@@ -2879,5 +2885,5 @@
 
         fDimFscControl.SetCallback(bind(&StateMachineSmartFACT::HandleFscControlStateChange, this, placeholders::_1));
-        fDimFtmControl.SetCallback(bind(&StateMachineSmartFACT::HandleFtmControlStateChange, this));
+        //fDimFtmControl.SetCallback(bind(&StateMachineSmartFACT::HandleFtmControlStateChange, this));
         fDimDriveControl.SetCallback(bind(&StateMachineSmartFACT::HandleDriveControlStateChange, this, placeholders::_1));
         fDimControl.SetCallback(bind(&StateMachineSmartFACT::HandleControlStateChange, this, placeholders::_1));
