Index: hvcontrol/History.txt
===================================================================
--- hvcontrol/History.txt	(revision 111)
+++ hvcontrol/History.txt	(revision 112)
@@ -24,2 +24,4 @@
     	    return OK if no HV boards available.
 	    Number of HV boards is not limited anymore. 
+24/9/2009   Program is terminated if too many errors are encountered by the
+    	    monitor thread
Index: hvcontrol/src/ProcessIO.cc
===================================================================
--- hvcontrol/src/ProcessIO.cc	(revision 111)
+++ hvcontrol/src/ProcessIO.cc	(revision 112)
@@ -619,11 +619,11 @@
     else {
       PrintMessage("Error: Could not set HV of board %d, chain %d, channel %d. Skipping channel\n",fHVBoard[Board]->GetBoardNumber(),Chain,Channel);
-      //SlowDataClass->NewEntry("Error");
-      //SlowDataClass->AddToEntry("%s %d %d %d %d %.2f ",fHVBoard[Board]->BoardName,Board, Chain, Channel, Target, calib->DACToHV(Target,Board,Chain,Channel));
+      SlowDataClass->NewEntry("Error");
+      SlowDataClass->AddToEntry("%s %d %d %d %d %.2f ",fHVBoard[Board]->BoardName,Board, Chain, Channel, Target, calib->DACToHV(Target,Board,Chain,Channel));
       return false;
     }
   }
-  //SlowDataClass->NewEntry("Value");
-  //SlowDataClass->AddToEntry("%s %d %d %d %d %.2f ",fHVBoard[Board]->BoardName,Board, Chain, Channel, Target, calib->DACToHV(Target,Board,Chain,Channel));
+  SlowDataClass->NewEntry("Value");
+  SlowDataClass->AddToEntry("%s %d %d %d %d %.2f ",fHVBoard[Board]->BoardName,Board, Chain, Channel, Target, calib->DACToHV(Target,Board,Chain,Channel));
   return true;
 }
@@ -633,8 +633,16 @@
 void ProcessIO::Monitor() {
 
+  static unsigned int MismatchCount, ErrorCount;
+  
   for (int i=0; i<NumHVBoards; i++) {
 
     if (fHVBoard[i]->GetStatus() != 1) {
-      PrintMessage("Error: Monitor, could not read status of board %d\n", fHVBoard[i]->GetBoardNumber());
+      PrintMessage("Error: Monitor could not read status of board %d\n", fHVBoard[i]->GetBoardNumber());
+      sleep(1);
+      if (ErrorCount++ > 10) {
+        PrintMessage("Too many errors from HV monitor, terminating program after next command\n");
+        Exit = true;
+        pthread_kill(SocketThread, SIGUSR1);
+      } 
     }
     
@@ -645,5 +653,6 @@
     
     if (!fHVBoard[i]->WrapOK) {
-      PrintMessage("Error: Wrap counter mismatch board %d\n",fHVBoard[i]->GetBoardNumber());
+      if (MismatchCount++>10) PrintMessage("Error: Wrap counter mismatch board %d\n",fHVBoard[i]->GetBoardNumber());
+      else PrintMessage("Too many wrap counter mismatches, stopping messages\n");
     }
 
Index: hvcontrol/src/ProcessIO.h
===================================================================
--- hvcontrol/src/ProcessIO.h	(revision 111)
+++ hvcontrol/src/ProcessIO.h	(revision 112)
@@ -45,5 +45,5 @@
   pthread_t HVMonitor;       // exit function sends signal to these threads
   pthread_t SocketThread;
-
+  
   bool Verbose;  
   int Socket;                // -1 if not connected
