Index: /trunk/FACT++/src/HeadersRateScan.h
===================================================================
--- /trunk/FACT++/src/HeadersRateScan.h	(revision 17643)
+++ /trunk/FACT++/src/HeadersRateScan.h	(revision 17644)
@@ -14,4 +14,5 @@
             kConfiguring,
             kInProgress,
+            kPaused,
         };
     }
Index: /trunk/FACT++/src/ratescan.cc
===================================================================
--- /trunk/FACT++/src/ratescan.cc	(revision 17643)
+++ /trunk/FACT++/src/ratescan.cc	(revision 17644)
@@ -37,4 +37,6 @@
     DimDescribedService fDimProc;
 
+    bool fAutoPause;
+
     int fCounter;
     int fCounterMax;
@@ -93,5 +95,5 @@
             return GetCurrentState();
 
-        if (GetCurrentState()!=RateScan::State::kInProgress)
+        if (GetCurrentState()<RateScan::State::kInProgress)
             return GetCurrentState();
 
@@ -100,4 +102,7 @@
         if (++fCounter<0)
             return GetCurrentState();
+
+        if (GetCurrentState()==RateScan::State::kPaused)
+            fCounter=0;
 
         if (fCounter==0)
@@ -285,10 +290,15 @@
         Message(msg);
 
-        return RateScan::State::kInProgress;
+        if (!fAutoPause)
+            return RateScan::State::kInProgress;
+
+        fAutoPause = false;
+
+        return RateScan::State::kPaused;
     }
 
     int StopRateScan()
     {
-        if (GetCurrentState()!=RateScan::State::kConfiguring && GetCurrentState()!=RateScan::State::kInProgress)
+        if (GetCurrentState()<RateScan::State::kConfiguring)
             return GetCurrentState();
 
@@ -364,4 +374,20 @@
 
         return GetCurrentState();
+    }
+
+    int TriggerAutoPause(const EventImp &evt)
+    {
+        fAutoPause = true;
+        return GetCurrentState();
+    }
+
+    int Pause()
+    {
+        return RateScan::State::kPaused;
+    }
+
+    int Resume()
+    {
+        return RateScan::State::kInProgress;
     }
 
@@ -398,5 +424,5 @@
                  "|max[DAC]:Value at which scan will end"
                  "|step[DAC]:Step size for scan"),
-        fThreshold(-1), fReference(kCamera), fReferenceIdx(0)
+        fAutoPause(false), fThreshold(-1), fReference(kCamera), fReferenceIdx(0)
     {
         // ba::io_service::work is a kind of keep_alive for the loop.
@@ -430,4 +456,7 @@
                      "Rate scan in progress.");
 
+        AddStateName(RateScan::State::kPaused, "Paused",
+                     "Rate scan in progress but paused.");
+
         AddEvent("START_THRESHOLD_SCAN", "I:3", RateScan::State::kConnected)
             (bind(&StateMachineRateScan::StartRateScan, this, placeholders::_1, "SET_THRESHOLD"))
@@ -444,15 +473,15 @@
              "|step[int]:Single step in DAC counts");
 
-        AddEvent("CHANGE_STEP_SIZE", "I:1", RateScan::State::kInProgress)
+        AddEvent("CHANGE_STEP_SIZE", "I:1", RateScan::State::kPaused, RateScan::State::kInProgress)
             (bind(&StateMachineRateScan::ChangeStepSize, this, placeholders::_1))
             ("Change the step size during a ratescan in progress"
              "|step[int]:Single step in DAC counts");
 
-        AddEvent("CHANGE_MAXIMUM", "I:1", RateScan::State::kInProgress)
+        AddEvent("CHANGE_MAXIMUM", "I:1", RateScan::State::kPaused, RateScan::State::kInProgress)
             (bind(&StateMachineRateScan::ChangeMaximum, this, placeholders::_1))
             ("Change the maximum limit during a ratescan in progress"
              "|max[int]:Limiting value in DAC counts");
 
-        AddEvent("STOP", RateScan::State::kConfiguring, RateScan::State::kInProgress)
+        AddEvent("STOP", RateScan::State::kConfiguring, RateScan::State::kPaused, RateScan::State::kInProgress)
             (bind(&StateMachineRateScan::StopRateScan, this))
             ("Stop a ratescan in progress");
@@ -469,4 +498,15 @@
             ("Use the given patch trigger-rate as reference for the reolution"
              "|patch[idx]:Index of the patch (360*crate+36*board+patch)");
+
+        AddEvent("TRIGGER_AUTO_PAUSE", RateScan::State::kDimNetworkNA, RateScan::State::kDisconnected, RateScan::State::kConnected)
+            (bind(&StateMachineRateScan::TriggerAutoPause, this, placeholders::_1))
+            ("Enable an automatic pause for the next ratescan, after it got configured.");
+
+        AddEvent("PAUSE", RateScan::State::kInProgress)
+            (bind(&StateMachineRateScan::Pause, this))
+            ("Pause a ratescan in progress");
+        AddEvent("RESUME", RateScan::State::kPaused)
+            (bind(&StateMachineRateScan::Resume, this))
+            ("Resume a paused ratescan");
 
         AddEvent("PRINT")
