Index: trunk/FACT++/src/fadctrl.cc
===================================================================
--- trunk/FACT++/src/fadctrl.cc	(revision 16774)
+++ trunk/FACT++/src/fadctrl.cc	(revision 16775)
@@ -1088,6 +1088,4 @@
         }
 
-        fConfigTimer = Time(Time::none);
-
         // Now the old run is stopped already. So all other servers can start a new run
         // (Note that we might need another step which only checks if the continous trigger
@@ -1095,6 +1093,4 @@
         const int64_t runs[2] = { runno, runno+1 };
         fDimStartRun.Update(runs);
-
-        // T::Info(" ==> TODO: Insert/update run configuration in database!");
 
         return FAD::State::kConfiguring1;
@@ -1510,9 +1506,4 @@
             if (T::GetCurrentState()==FAD::State::kConfiguring1)
             {
-                // We need some delay so that the FAD is not busy anymore
-                // and really sees the software trigger
-                // FIXME: Do we need this to be configurable?
-                //if (Time()-fConfigTimer<boost::posix_time::milliseconds(3000))
-
                 // Wait until the configuration commands to all boards
                 // have been sent and achknowledged
@@ -1521,12 +1512,5 @@
                         return FAD::State::kConfiguring1;
 
-                if (!fConfigTimer)
-                    fConfigTimer = Time();
-
-                // Wait a short moment to ensure that all board have processed
-                // the received data
-                if (Time()-fConfigTimer<boost::posix_time::milliseconds(250))
-                    return FAD::State::kConfiguring1;
-
+                // Now we can sent the trigger
                 for (BoardList::iterator it=fBoards.begin(); it!=fBoards.end(); it++)
                     it->second->Cmd(FAD::kCmdSingleTrigger);
@@ -1567,4 +1551,15 @@
 //                const lock_guard<mutex> guard(fMutexReconnect);
 //                fReconnectionList.clear();
+
+                return FAD::State::kConfiguring3;
+            }
+
+            if (T::GetCurrentState()==FAD::State::kConfiguring3)
+            {
+                // Wait until the configuration commands to all boards
+                // have been sent and achknowledged
+                for (BoardList::iterator it=fBoards.begin(); it!=fBoards.end(); it++)
+                    if (!it->second->IsTxQueueEmpty())
+                        return FAD::State::kConfiguring3;
 
                 return FAD::State::kConfigured;
@@ -1675,4 +1670,7 @@
         T::AddStateName(FAD::State::kConfiguring2, "Configuring2",
                         "Waiting until all boards returned their configuration and they are valid.");
+
+        T::AddStateName(FAD::State::kConfiguring3, "Configuring3",
+                        "Waiting until 'enable trigger line' was sent to all boards.");
 
         T::AddStateName(FAD::State::kConfigured, "Configured",
@@ -1790,5 +1788,5 @@
              "|run_type[string]:Run type which describes the runs");
 
-        T::AddEvent("RESET_CONFIGURE", FAD::State::kConfiguring1, FAD::State::kConfiguring2, FAD::State::kConfigured)
+        T::AddEvent("RESET_CONFIGURE", FAD::State::kConfiguring1, FAD::State::kConfiguring2, FAD::State::kConfiguring3, FAD::State::kConfigured)
             (bind(&StateMachineFAD::ResetConfig, this))
             ("If configuration failed and the fadctrl is waiting for something, use this to reset the state.");
@@ -1957,6 +1955,4 @@
     Configs fConfigs;
     Configs::const_iterator fTargetConfig;
-
-    Time fConfigTimer;
 
 
