Index: /fact/FADctrl/FAD.cc
===================================================================
--- /fact/FADctrl/FAD.cc	(revision 10968)
+++ /fact/FADctrl/FAD.cc	(revision 10969)
@@ -32,4 +32,5 @@
    {"roi", &FAD::cmd_roi, true, 2, "<range> <value>", "Set ROI to for channel range to value"},
    {"dac", &FAD::cmd_dac, true, 2, "<range> <value>", "Set DAC numbers in range to value"},
+   {"execute", &FAD::cmd_execute, true, 0, "", "confirm FAD configuration settings, e.g. DAC, ROI, run#"},
    {"address", &FAD::cmd_address, true, 2, "<range> <value>", "Set addresses in range to value"},
    {"send", &FAD::cmd_send, true, 1, "<value>", "Send arbitrary data to board"},
@@ -205,8 +206,19 @@
 
 //
+// Execute: Confirm new ROI, DAC or what ever settings
+//
+
+void FAD::cmd_execute() {
+
+  for (unsigned int i=0; i<Boards.size(); i++) Boards[i]->Send(CMD_Execute);
+}
+
+
+//
 // Set run number
 //
 void FAD::cmd_runnumber() {
-
+	
+	unsigned short Buffer[4] = {0};
   int Num;
 
@@ -215,10 +227,12 @@
 	return;
   }
+	Buffer[0] = htons(CMD_Write | ADDR_RUNNUMBER);
+	Buffer[1] = htons( (unsigned short)( ((unsigned int)Num) >> 16 ) );
+	Buffer[2] = htons(CMD_Write | (ADDR_RUNNUMBER + 1) );
+	Buffer[3] = htons( (unsigned short)Num );
 
   for (unsigned int i=0; i<Boards.size(); i++) {
-	Boards[i]->Send(CMD_Write | ADDR_RUNNUMBER );
-	Boards[i]->Send((unsigned short) (Num>>16));		// Write the HIGH-word first
-	Boards[i]->Send(CMD_Write | (ADDR_RUNNUMBER+1) );
-	Boards[i]->Send((unsigned short) Num); // now write the LOW-word
+	Boards[i]->Send(Buffer, sizeof(Buffer));
+	Boards[i]->Send(CMD_Execute);
   }
 }
@@ -351,4 +365,5 @@
   for (unsigned int i=0; i<Boards.size(); i++) {
 	Boards[i]->Send(Buffer, sizeof(Buffer));
+	Boards[i]->Send(CMD_Execute);
   }
 } 
@@ -380,13 +395,12 @@
   }
 
-  // Disable triggers for all boards and wait (workaround for firmware bug)  
-  for (unsigned int i=0; i<Boards.size(); i++) Boards[i]->Send(CMD_TRIGGERS_OFF);
-  usleep(500000);
 
   // Send command buffer and enable triggers again
   for (unsigned int i=0; i<Boards.size(); i++) {
-	Boards[i]->Send(Buffer, sizeof(Buffer));
-	Boards[i]->Send(CMD_TRIGGERS_ON);
-  }
+	Boards[i]->Send(Buffer+R.Min*2, (R.Max-R.Min+1)*2*sizeof(unsigned short));
+	Boards[i]->Send(CMD_Execute);
+  }
+
+	
 } 
 
Index: /fact/FADctrl/FAD.h
===================================================================
--- /fact/FADctrl/FAD.h	(revision 10968)
+++ /fact/FADctrl/FAD.h	(revision 10969)
@@ -71,4 +71,5 @@
 	void cmd_trigger();		void cmd_socketmode();
 	void cmd_runnumber();	void cmd_reset();
+	void cmd_execute();
 	void cmd_srclk();		void cmd_sclk();
 	void cmd_dwrite();		void cmd_domino();
Index: /fact/FADctrl/FADBoard.cc
===================================================================
--- /fact/FADctrl/FADBoard.cc	(revision 10968)
+++ /fact/FADctrl/FADBoard.cc	(revision 10969)
@@ -168,5 +168,5 @@
 
   vector<unsigned short> ROICmd;
-  unsigned short DACCmd[] = {htons(CMD_Write | (BADDR_DAC + 1)), 0, htons(CMD_Write | (BADDR_DAC + 2)), 0, htons(CMD_Write | (BADDR_DAC + 3)), 0};
+  unsigned short DACCmd[] = {htons(CMD_Write | (BADDR_DAC + 1)), 0, htons(CMD_Write | (BADDR_DAC + 2)), 0, htons(CMD_Write | (BADDR_DAC + 3)), 0, htons(CMD_Execute) };
   string Message = string("ACALIBDONE")+Name+"\n";
 
@@ -183,19 +183,15 @@
 	InitialStatus = GetStatus();
 
-	Send(CMD_TRIGGERS_OFF);
-	usleep(500000);
-
 	for (unsigned int i=0; i<NChips*NChannels; i++) {
 	  ROICmd.push_back(htons(CMD_Write | (BADDR_ROI + i)));
 	  ROICmd.push_back(htons(NBins));
 	}
+	ROICmd.push_back(htons(CMD_Execute));
 	Send(&ROICmd[0], ROICmd.size()*sizeof(unsigned short));
 
-    DACCmd[1] = htons(0);
-    DACCmd[3] = htons(0);
-    DACCmd[5] = htons(0);
+	DACCmd[1] = htons(0);
+	DACCmd[3] = htons(0);
+	DACCmd[5] = htons(0);
 	Send(DACCmd, sizeof(DACCmd));
-
-	Send(CMD_TRIGGERS_ON);
 
 	// Clear sum vector and set state to accumulate
@@ -335,6 +331,4 @@
   case cleanup:
     // ROI values
-	Send(CMD_TRIGGERS_OFF);
-	usleep(100000);
 
 	ROICmd.clear();
@@ -343,12 +337,11 @@
 	  ROICmd.push_back(htons(InitialStatus.ROI[i/NChannels][i%NChannels]));
 	}
+	ROICmd.push_back(htons(CMD_Execute));
 	Send(&ROICmd[0], ROICmd.size()*sizeof(unsigned short));
 
-	Send(CMD_TRIGGERS_ON);
-
 	// DAC values
-    DACCmd[1] = htons(InitialStatus.DAC[1]);
-    DACCmd[3] = htons(InitialStatus.DAC[2]);
-    DACCmd[5] = htons(InitialStatus.DAC[3]);
+	DACCmd[1] = htons(InitialStatus.DAC[1]);
+	DACCmd[3] = htons(InitialStatus.DAC[2]);
+	DACCmd[5] = htons(InitialStatus.DAC[3]);
   	Send(DACCmd, sizeof(DACCmd));
 	
Index: /fact/FADctrl/FADFormat.h
===================================================================
--- /fact/FADctrl/FADFormat.h	(revision 10968)
+++ /fact/FADctrl/FADFormat.h	(revision 10969)
@@ -27,6 +27,8 @@
 #define CMD_Trigger_C 0xB000 	// continous trigger
 #define CMD_Trigger_S 0x2000 	// stop continous trigger
+
+#define CMD_Execute 0x0400		// only after 'execute' Config-RAM changes will have an effect
+#define CMD_Write 0x0500 		// write to Config-RAM
 #define CMD_Read 0x0A00 		// read from Config-RAM
-#define CMD_Write 0x0500 		// write to Config-RAM
 #define CMD_RESET_TRIGGER_ID 0x2A00
 
