Index: hvcontrol/src/HV.cc
===================================================================
--- hvcontrol/src/HV.cc	(revision 98)
+++ hvcontrol/src/HV.cc	(revision 100)
@@ -22,7 +22,4 @@
   m = PIO;
 
-  fTestMode = m->config->TestMode;
-  fTestModeWrap = 0;
-  
   SetTimeOut(m->config->fTimeOut);
   BoardNumber = DeviceNumber;
@@ -34,9 +31,4 @@
   LastWrapCount = -1;
   
-  if (fTestMode) {
-    fDescriptor = 99;
-    return;
-  }
-
   ClearVoltageArrays();
 
@@ -78,5 +70,5 @@
 // Destructor (Resetting board)
 HVBoard::~HVBoard() {
-  if(fDescriptor >= 0 && !fTestMode) {
+  if(fDescriptor >= 0) {
     Reset();
     close(fDescriptor);
@@ -87,5 +79,5 @@
 // Communicate: Write and read from HV Board until fTimeOut has been reached 
 //
-// Returns: 0 read error, 1 success, -1 fTimeOut exceeded
+// Returns: 0 error, 1 success, -1 fTimeOut exceeded
 int HVBoard::Communicate(unsigned char* wbuf, int Bytes) {
 
@@ -96,5 +88,5 @@
   // === Write data ===
   if (write(fDescriptor, wbuf, Bytes) < Bytes) {
-    m->PrintMessage("Error: could not write (all) data to HV board\n");
+    m->PrintMessage("Error: Could not write (all) data to HV board\n");
     return 0;
   }
@@ -128,5 +120,5 @@
   }
   LastWrapCount = rbuf & 0X07;  
-  for (int i=0; i<NUM_CHAINS; i++) Overcurrent[i]=(rbuf & (0X08 << i));
+  for (int i=0; i<NUM_CHAINS; i++) Overcurrent[i] = (rbuf & (0X08 << i));
   ResetButton = (bool) (rbuf & 0X80);
 
@@ -140,6 +132,4 @@
 int HVBoard::Reset() {
   
-  if (fTestMode) return 1; 
-
   unsigned char wbuf[] = {REG_RESET,0,0};
   int ret;
@@ -153,6 +143,4 @@
 int HVBoard::GetStatus() {
 
-  if (fTestMode) return 1;
-
   unsigned char wbuf[] = {REG_STATUS,0,0};
   
@@ -164,16 +152,11 @@
 int HVBoard::SetHV(int chain, unsigned int channel, int hv) {
 
-  if (fTestMode){
-    m->PrintMessage("Test mode: Nothing to be done. \n");
-    return 1;
-  }
+  unsigned char wbuf[] = {0,0,0};
+  int ret;
   
-  unsigned char wbuf[] = {0,0,0};
-
-  if (hv > 0x3FFF) {
-    m->PrintMessage(" Error: HV beyond upper 0x3FFF\n"); 
+  if (hv<0 || hv > 0x3FFF) {
+    m->PrintMessage("Error: Voltage out of range 0-0x3FFF\n"); 
     return 0;
   }
-  if (hv<0) hv = 0;
   
   switch (chain) {
@@ -183,5 +166,5 @@
     case 3: wbuf[0] = REG_HV3; break;
 
-    default : m->PrintMessage(" Error: chain %d does not exist\n",chain); return 0;
+    default : m->PrintMessage(" Error: Chain %d does not exist\n",chain); return 0;
   }
  
@@ -192,5 +175,6 @@
   wbuf[2] |= (unsigned char)(hv & 0X000000FF);              // Add [D7-D0]
    
-  return Communicate(wbuf, 3);
+  if ((ret = Communicate(wbuf, 3)) == 1) HV[chain][channel] = hv;
+  return ret;
 }
 
Index: hvcontrol/src/HV.h
===================================================================
--- hvcontrol/src/HV.h	(revision 98)
+++ hvcontrol/src/HV.h	(revision 100)
@@ -33,6 +33,4 @@
   
    int BoardNumber;
-   int fTestModeWrap;
-   bool fTestMode;
    class ProcessIO *m;
    
Index: hvcontrol/src/HVCalib.cc
===================================================================
--- hvcontrol/src/HVCalib.cc	(revision 98)
+++ hvcontrol/src/HVCalib.cc	(revision 100)
@@ -7,5 +7,5 @@
                 sabrina.stark@phys.ethz.ch
 
-  Contents:     Class reading the calibration tabel for DAC to HV values
+  Contents:     Class reading the calibration table for DAC to HV values
 
 \*************************************************************************/
@@ -24,41 +24,33 @@
 HVCalib::HVCalib(HVConfig* hvConfig) {
 
-  char calibfile[80];
-  int idac, idacOld;
-  int istep, ihv1000, ihvOld;
-  char dLine[6000];
+  char calibfile[80], dLine[6000];
+  int idac, idacOld, istep, ihv1000, ihvOld;
   bool first = true;
   float hv1000,dac;
   double intpart;
 
-  iDACMin = hvConfig->DACMin;
-  fHVCalibSlope = hvConfig->fHVCalibSlope;
-  NDACValues = hvConfig->DACMax - hvConfig->DACMin;
+  Config = hvConfig;
+  
+  iDACMin = Config->DACMin;
+  fHVCalibSlope = Config->fHVCalibSlope;
+  NDACValues = Config->DACMax - Config->DACMin;
   NHVValues = 10*NDACValues;
 
-
-  HVArray = new double***[hvConfig->NumHVBoards];
-  for(int i=0; i<hvConfig->NumHVBoards; i++) {
-    HVArray[i] = new double**[NUM_CHAINS];
+  HVArray = new double*** [Config->NumHVBoards];
+  DACArray = new int*** [Config->NumHVBoards];
+  for(int i=0; i<Config->NumHVBoards; i++) {
+    HVArray[i] = new double** [NUM_CHAINS];
+    DACArray[i] = new int** [NUM_CHAINS];
     for(int j=0; j<NUM_CHAINS; j++) {
-      HVArray[i][j] = new double*[NUM_CHANNELS];
+      HVArray[i][j] = new double* [NUM_CHANNELS];
+      DACArray[i][j] = new int* [NUM_CHANNELS];
       for(int k=0; k<NUM_CHANNELS; k++) {
-	HVArray[i][j][k] = new double[NDACValues];
+	HVArray[i][j][k] = new double [NDACValues];
+	DACArray[i][j][k] = new int [NHVValues];
       }
     }
   }
 
-  DACArray = new int***[hvConfig->NumHVBoards];
-  for(int i=0; i<hvConfig->NumHVBoards; i++) {
-    DACArray[i] = new int**[NUM_CHAINS];
-    for(int j=0; j<NUM_CHAINS; j++) {
-      DACArray[i][j] = new int*[NUM_CHANNELS];
-      for(int k=0; k<NUM_CHANNELS; k++) {
-	DACArray[i][j][k] = new int[NHVValues];
-      }
-    }
-  }
-
-  for(int i=0; i<hvConfig->NumHVBoards; i++){
+  for(int i=0; i<Config->NumHVBoards; i++){
     for(int j=0; j<NUM_CHAINS; j++){
       sprintf(calibfile,"Calib/%s_%c%d.txt",hvConfig->fUSBDevice[i],65+j,1); 
@@ -68,5 +60,5 @@
 	fin >> dac;
 	idacOld = 0;
-	if ((int) dac >= hvConfig->DACMin) {
+	if ((int) dac >= Config->DACMin) {
 	  if (first){
 	    iDACMin = (int) dac;
@@ -76,5 +68,8 @@
 	  istep = idac - idacOld;
 	  for(int k=0; k<NUM_CHANNELS; k++){
+ 	    if (idac>=NDACValues) break;
+
 	    fin>>HVArray[i][j][k][idac];
+
 	    for (int l=1; l<istep;l++){
 	      HVArray[i][j][k][idac-istep+l] = HVArray[i][j][k][idac-istep] + l*(HVArray[i][j][k][idac]-HVArray[i][j][k][idac-istep])/istep;
@@ -93,10 +88,10 @@
   }
 
-  for(int i=0; i<hvConfig->NumHVBoards; i++){
-    for(int j=0;j<NUM_CHAINS;j++){
-      for(int k=0;k<NUM_CHANNELS;k++){
+  for(int i=0; i<Config->NumHVBoards; i++){
+    for(int j=0; j<NUM_CHAINS; j++){
+      for(int k=0; k<NUM_CHANNELS; k++){
 	ihvOld = 0;
 	first = true;
-	for (int l=0; l<NDACValues;l++){
+	for (int l=0; l<NDACValues; l++){
 	  if (l == 0){
 	    ihvOld = 0;
@@ -129,22 +124,18 @@
 HVCalib::~HVCalib() {
 
-
-  for (int i=0; i<MAX_NUM_HVBOARDS; i++){
-    for (int j=0; j<NUM_CHAINS;j++){
-      for (int k=0; k<NUM_CHANNELS;k++){
-	delete [] HVArray[i][j][k];
-	delete [] HVArray;
+  for(int i=0; i<Config->NumHVBoards; i++) {
+    for(int j=0; j<NUM_CHAINS; j++) {
+      for(int k=0; k<NUM_CHANNELS; k++) {
+	delete[] HVArray[i][j][k];
+	delete[] DACArray[i][j][k];
       }
+      delete[] HVArray[i][j];
+      delete[] DACArray[i][j];
     }
+    delete[] HVArray[i];
+    delete[] DACArray[i];
   }
-
-  for (int i=0; i<MAX_NUM_HVBOARDS; i++){
-    for (int j=0; j<NUM_CHAINS;j++){
-      for (int k=0; k<NUM_CHANNELS;k++){
-	delete [] DACArray[i][j][k];
-	delete [] DACArray;
-      }
-    }
-  }
+  delete[] HVArray;
+  delete[] DACArray;
 }
 
@@ -175,6 +166,6 @@
       ihv = (int) (hv1000<0 ? ceil(hv1000) : floor(hv1000));
     }
+    if (ihv >= NHVValues) ihv = NHVValues;
     return DACArray[board][chain][channel][ihv];
   }
 }
-
Index: hvcontrol/src/HVCalib.h
===================================================================
--- hvcontrol/src/HVCalib.h	(revision 98)
+++ hvcontrol/src/HVCalib.h	(revision 100)
@@ -16,12 +16,13 @@
   int NDACValues;
   int NHVValues;
+  int iDACMin;
+  double fHVCalibSlope;
 
+  HVConfig *Config;
+  
  public:
 
-  HVCalib(HVConfig *hvConfig);
+  HVCalib(HVConfig *);
   ~HVCalib();
-
-  int iDACMin;
-  double fHVCalibSlope;
 
   int HVToDAC(double hv, int board, int chain, int channel);
Index: hvcontrol/src/HVConfig.cc
===================================================================
--- hvcontrol/src/HVConfig.cc	(revision 98)
+++ hvcontrol/src/HVConfig.cc	(revision 100)
@@ -16,25 +16,6 @@
 HVConfig::HVConfig(const char *configfile) {
 
-  fUSBDevice = new char*[MAX_NUM_HVBOARDS];
-
-  for (int i=0; i<MAX_NUM_HVBOARDS; i++) {
-    fUSBDevice[i]      = new char[BUFFER_LENGTH];
-    USBDeviceNumber[i] = 0;
-  }
-
-  TestMode           = false;
-  NumHVBoards        = 0;
-  fStatusRefreshRate = 1.;
-  fTimeOut           = 1.;
-  DACMin             = 11008;
-  DACMax             = 12496;
-  fHVCalibOffset      = -.8;
-  fHVCalibSlope       = 0.0064;
-  fHVMaxDiff          = 1;
-  
   // Read configuration file
   FILE *f;
-  char str[MAX_COM_SIZE], dev[MAX_COM_SIZE];
-  int j = 0;
 
   if ((f = fopen(configfile,"r")) == NULL) {
@@ -42,23 +23,15 @@
     throw;
   }
-  else printf("Opening configuration file: %s\n", configfile);
+  printf("Opening configuration file: %s\n", configfile);
  
+  // Determine number of entries in 'Boards' card and allocate memeory
+  NumHVBoards = (int) ReadCard("Boards", NULL, 'n', f);
+  fUSBDevice = new char* [NumHVBoards];
+  for (int i=0; i<NumHVBoards; i++) fUSBDevice[i] = new char [BUFFER_LENGTH];
+  ReadCard("Boards", fUSBDevice, 'S', f, NumHVBoards);
+
   ReadCard("LogFile",       fLogFile,    's',f);
   ReadCard("PixMapTable",   fPixMapTable,'s',f);
   ReadCard("SlowDirectory", fSlowDir,	 's',f);
-  
-  ReadCard("TestMode",   &str,        's',f);
-  if (!strcmp(str,"TRUE")) TestMode = true;
-
-  for (int i=0; i<MAX_NUM_HVBOARDS; i++) {
-    sprintf(str,"Board%d",i);
-
-    if (ReadCard(str, dev, 's', f)) {
-      USBDeviceNumber[j] = i;
-      sprintf(fUSBDevice[j++],"%s",dev);
-      NumHVBoards++;     
-    }
-  }
-  
   ReadCard("TimeOut",           &fTimeOut,           'f', f);
   ReadCard("StatusRefreshRate", &fStatusRefreshRate, 'f', f);
@@ -76,6 +49,6 @@
 HVConfig::~HVConfig() {
 
-  for (int i=0; i<MAX_NUM_HVBOARDS; i++) delete [] fUSBDevice[i];
-  delete [] fUSBDevice;
+  for (int i=0; i<NumHVBoards; i++) delete[] fUSBDevice[i];
+  delete[] fUSBDevice;
 }
 
@@ -83,5 +56,7 @@
 // ReadCard function (original version by F. Goebel)
 // Data is read into an array if MaxNum is larger than 1
-bool ReadCard(const char *card_flag, void *store, char Type, FILE *File, unsigned int MaxNum) {
+// If Type is 'n', the number of elements for the card is counted.
+// Type 'S' is for reading an array of strings
+unsigned int ReadCard(const char *card_flag, void *store, char Type, FILE *File, unsigned int MaxNum) {
   
   char *card_name, *card_val, Buffer[MAX_COM_SIZE];
@@ -97,5 +72,5 @@
 
     // Read numbers of given type (if MaxNum>1 read array)
-    while ((card_val=strtok(NULL," \t\n")) != NULL && Count++<MaxNum) {
+    while ((card_val=strtok(NULL," \t\n"))!=NULL && card_val[0]!='#' && Count++<MaxNum) {
       switch (Type) {
 	case 'I': *(((int *&) store)++) = (int) strtol(card_val, NULL, 10);
@@ -113,13 +88,17 @@
 	case 's': sprintf((char *) store, "%s", card_val);
 	      	  break;
-	case 'c': *((char *) store) = card_val[0];
+	case 'S': sprintf(*(((char **&) store)++), "%s", card_val);
+	      	  break;
+	case 'c': *(((char *&) store)++) = card_val[0];
+	      	  break;
+  	case 'n': MaxNum = UINT_MAX;
 	      	  break;
 	default:  fprintf(stderr,"Warning: Unknown type '%c' for reading of configuration file\n", Type);
-	      	  return false;
+	      	  return 0;
       }
     }
-    return true;  // Finished reading data for card name  
+    return Count;  // Finished reading data for card name  
   }
-  return false;
+  return 0;
 }
 
Index: hvcontrol/src/HVConfig.h
===================================================================
--- hvcontrol/src/HVConfig.h	(revision 98)
+++ hvcontrol/src/HVConfig.h	(revision 100)
@@ -7,7 +7,7 @@
 #include <stdlib.h>
 #include <stdio.h>
+#include <limits.h>
 
-#define MAX_COM_SIZE 1000
-#define MAX_NUM_HVBOARDS 20
+#define MAX_COM_SIZE 5000
 #define NUM_CHAINS 4
 #define NUM_CHANNELS 32
@@ -29,15 +29,12 @@
 
   int NumHVBoards;
-  int USBDeviceNumber[MAX_NUM_HVBOARDS];
-
-  int fCCPort;
-
-  bool TestMode;
+  char **fUSBDevice;
+//  char (*fUSBDevice)[BUFFER_LENGTH];
 
   char   fLogFile[BUFFER_LENGTH];
   char   fSlowDir[BUFFER_LENGTH];
-  char** fUSBDevice;
 
   char   fPixMapTable[BUFFER_LENGTH];
+  int fCCPort;
  
   float  fTimeOut;
@@ -46,12 +43,10 @@
   int DACMin;
   int DACMax;
-
   float  fHVCalibOffset;
   float  fHVCalibSlope;
-  
   unsigned int  fHVMaxDiff;
 };
 
-bool ReadCard(const char *, void *, char, FILE *, unsigned int=1);
+unsigned int ReadCard(const char *, void *, char, FILE *, unsigned int=1);
 
 #endif
Index: hvcontrol/src/ProcessIO.cc
===================================================================
--- hvcontrol/src/ProcessIO.cc	(revision 98)
+++ hvcontrol/src/ProcessIO.cc	(revision 100)
@@ -36,5 +36,5 @@
   LastBoard   = -1;
   FirstChain  = 0;
-  LastChain   = 3;
+  LastChain   = NUM_CHAINS-1;
   
   if (config->fStatusRefreshRate >= MIN_RATE && config->fStatusRefreshRate <= MAX_RATE) 
@@ -43,20 +43,14 @@
     
   // Open HV devices
-  if(config->TestMode){
-    fprintf(stdout,"Test mode: One HVBoard initialized as dummy.\n");
-    fHVBoard[NumHVBoards] = new HVBoard(0, 0, this);
-    NumHVBoards++;
-  }
-  else {
-    for (int i=0; i<config->NumHVBoards; i++) {
-      fHVBoard[NumHVBoards] = new HVBoard(config->USBDeviceNumber[i], config->fUSBDevice[i], this);
-      if(fHVBoard[NumHVBoards]->fDescriptor >= 0) {
-         printf("Synchronized and reset HV board %d (%s)\n",i,config->fUSBDevice[i]);
-         NumHVBoards++;
-      }
-      else {
-        printf("Failed to synchronize to HV board %d (%s)\n",i,config->fUSBDevice[i]);
-	delete fHVBoard[NumHVBoards];
-      }
+  fHVBoard = new HVBoard* [config->NumHVBoards]; 
+  for (int i=0; i<config->NumHVBoards; i++) {
+    fHVBoard[NumHVBoards] = new HVBoard(i, config->fUSBDevice[i], this);
+    if(fHVBoard[NumHVBoards]->fDescriptor >= 0) {
+       printf("Synchronized and reset HV board %d (%s)\n",i,config->fUSBDevice[i]);
+       NumHVBoards++;
+    }
+    else {
+      printf("Failed to synchronize to HV board %d (%s)\n",i,config->fUSBDevice[i]);
+      delete fHVBoard[NumHVBoards];
     }
   } 
@@ -79,11 +73,13 @@
 ProcessIO::~ProcessIO() {
   
+  delete SlowDataClass;     
+
   for (int i=0; i<NumHVBoards; i++) delete fHVBoard[i];
-
-  delete SlowDataClass;   delete config;    delete pm;
+  delete[] fHVBoard;
+    
+  delete pm;   delete calib;    delete config;    
   
   if(Logfile != NULL) {
-    if(!fclose(Logfile)) printf("Closing logfile\n");
-    else perror("Error closing logfile");
+    if(fclose(Logfile) != 0) perror("Error closing logfile");
   }
 }
@@ -145,10 +141,10 @@
       LastChain = 3;
     } 
-    else if (NParam==2 && atoi(Param[1])>=0 && atoi(Param[1])<4) {
+    else if (NParam==2 && atoi(Param[1])>=0 && atoi(Param[1])<NUM_CHAINS) {
       FirstChain = atoi(Param[1]);
       LastChain = FirstChain;
     }
-    else if (NParam==3 && atoi(Param[1])>=0 && atoi(Param[1])<4 && 
-           atoi(Param[2])>0 && atoi(Param[2])<4) {
+    else if (NParam==3 && atoi(Param[1])>=0 && atoi(Param[1])<NUM_CHAINS && 
+           atoi(Param[2])>0 && atoi(Param[2])<NUM_CHAINS) {
       FirstChain = atoi(Param[1]);
       LastChain = atoi(Param[2]);
@@ -164,11 +160,10 @@
     PrintMessage( " Log file:          %s\n"
     	    	  " Pixel map table:   %s\n"
-    	    	  " Test mode:         %s\n"
     	    	  " %d USB devices:\n", config->fLogFile, config->fPixMapTable,
-		  config->TestMode ? "yes" : "no", config->NumHVBoards);  
-    for (int i=0;i<NumHVBoards;i++) { 
-      PrintMessage(" Board%d: %s\n ", config->USBDeviceNumber[i], config->fUSBDevice[i]);
-    }
-    PrintMessage( "\n TimeOut:           %.2f s\n"
+		  config->NumHVBoards);  
+    for (int i=0; i<config->NumHVBoards; i++) { 
+      PrintMessage(" Board %d: %s\n ", i, config->fUSBDevice[i]);
+    }
+    PrintMessage( " TimeOut:           %.2f s\n"
     	    	  " StatusRefreshRate: %.2f Hz\n"
     	    	  " CCPort:            %d\n"
@@ -211,58 +206,53 @@
 
 
-  // Set new high voltage --------------------------------------------------------------------------------------
+  // Set new high voltage (if no boards available, simply returns OK)
+  // First reponse to socket should be 'OK' if no error occurred.
   if (Match(Param[0], "hv") || Match(Param[0], "hvdiff")) {
 
-    if (!NumHVBoards) return;
-
-    int hvoltage, DACValue, Errors=0, Board, Chain=0, Channel=0;
+    int hvoltage, DACValue, Errors=0, Board=-1, Chain=-1, Channel=-1;
     double hvoltageV;
-    bool allchannels = false, SetDac = false;
-    
-    // Need two parameters or three if last is 'dac'
+    bool SetDac;
+    
+    // Need two or parameters
     if (NParam<3 || NParam>4) {
-      PrintMessage("ERROR - usage: hv <channel>|<all> <voltage> [dac]\n");
-      return;
-    }
-
-    if (NParam==4 && Match(Param[3], "dac")) SetDac = true;
-    
+      PrintMessage("Usage: hv/hvdiff <channel>|<all> <voltage> [dac]\n");
+      return;
+    }
+
+    // Evaluate voltage parameter
+    if (NParam==4 && Match(Param[3], "dac")) {
+      SetDac = true;
+      if (!ConvertToInt(Param[2], &hvoltage)) {
+        PrintMessage("Error: Wrong number format for DAC voltage setting\n");
+        return;
+      } 
+    }
+    else {
+      SetDac = false;
+      if (!ConvertToDouble(Param[2], &hvoltageV)) {
+        PrintMessage("Error: Wrong number format for voltage setting\n");
+        return;
+      }
+    } 
+
     // Evaluate pixel or channel parameter    
-    if((Board = pm->Pixel_to_HVboard(Param[1])) != 999999999) {
+    if(pm->Pixel_to_HVboard(Param[1]) != 999999999) {
+      Board = pm->Pixel_to_HVboard(Param[1]);
       Chain = pm->Pixel_to_HVchain(Param[1]);
       Channel = pm->Pixel_to_HVchannel(Param[1]);
     }
-    else if (Match(Param[1], "all")) allchannels = true;
-    else if (ConvertToInt(Param[1], &Channel)) {
-      Board = -1;
-      Chain = -1;
-    } 
-    else {
-      PrintMessage("ERROR - wrong input format - usage: hv <channel>|<all> <voltage>\n");
-      return;
-    }
-    // Check channel limits (voltage limit is only checked in SetHV())
-    if (Channel<0 || Channel>31) {
-      PrintMessage("ERROR - channel out of range (0...31)!\n");
-      return;
-    }
-
-    if (SetDac && !ConvertToInt(Param[2], &hvoltage)) {
-      PrintMessage("ERROR - wrong number format for DAC voltage setting\n");
-      return;
-    } 
-    if (!SetDac && !ConvertToDouble(Param[2], &hvoltageV)) {
-      PrintMessage("ERROR - wrong number format for voltage setting\n");
-      return;
-    } 
+    else if (!Match(Param[1], "all") && !ConvertToInt(Param[1], &Channel)) {
+      PrintMessage("Error: Wrong channel identification\n");
+      return;
+    }
 
     for (int i=FirstBoard; i<=LastBoard; i++) {
-      if (!allchannels && Board != 999999999 && i != Board && Board!=-1) continue;
+      if (i!=Board && Board!=-1) continue;
 
       for (int j=FirstChain; j<=LastChain; j++) {
-        if (!allchannels && Chain != 999999999 && j != Chain && Chain!=-1) continue;
+        if (j!=Chain && Chain!=-1) continue;
 
 	for (int k=0; k<NUM_CHANNELS; k++) {
-	  if (!allchannels && k!= Channel) continue;
+	  if (k!=Channel && Channel!=-1) continue;
 
     	  // Convert from HV to DAC values
@@ -277,7 +267,7 @@
 	  }
 	  
-	  // Set new voltage (if DAC value, update calilbrated value)
+	  // Set new voltage (if DAC value, update calibrated value)
 	  if(!RampVoltage(DACValue, i, j, k)) Errors++;
-	  else if(SetDac) fHVBoard[i]->HVV[j][k] = calib->DACToHV(fHVBoard[i]->HV[j][k], i, j, k);
+	  if(SetDac) fHVBoard[i]->HVV[j][k] = calib->DACToHV(fHVBoard[i]->HV[j][k], i, j, k);
 
 	} // Channels	
@@ -285,6 +275,6 @@
     } // Boards
 
-    if (Errors > 0) PrintMessage("Warning: Errors on %d channel(s) occurred\n", Errors);
-    else PrintMessage("OK - no error(s)\n");
+    if (Errors > 0) PrintMessage("ERROR - Errors on %d channel(s) occurred\n", Errors);
+    else PrintMessage("OK - no errors\n");
     
     return;
@@ -436,5 +426,5 @@
     state = active;
     pthread_kill(HVMonitor, SIGUSR1);
-    PrintMessage("OK - status monitoring activated\n");
+    PrintMessage("Status monitoring activated\n");
     return;  
   }
@@ -617,20 +607,18 @@
 
     if (fHVBoard[Board]->SetHV(Chain, Channel, fHVBoard[Board]->HV[Chain][Channel]+Diff) == 1) {
-      fHVBoard[Board]->HV[Chain][Channel] += Diff;
-
       if (Verbose) {
-	PrintMessage("OK - board %d: high voltage of chain %d channel %d set to %d | 0X%.4X | %f V\n",fHVBoard[Board]->GetBoardNumber(),Chain, Channel, Target, Target, calib->DACToHV(Target,fHVBoard[Board]->GetBoardNumber(),Chain,Channel));
+	PrintMessage("Board %d: high voltage of chain %d channel %d set to %d | 0X%.4X | %f V\n",fHVBoard[Board]->GetBoardNumber(),Chain, Channel, Target, Target, calib->DACToHV(Target,fHVBoard[Board]->GetBoardNumber(),Chain,Channel));
 	PrintBoardStatus(Board);
       }
     }
     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));
+      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));
       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;
 }
@@ -676,13 +664,4 @@
 }
 
-
-// Get index of board with sequential number board
-int ProcessIO::GetBoardIdx(int board) {
-
-  for (int i=0; i<MAX_NUM_HVBOARDS; i++) {
-    if (board == fHVBoard[i]->GetBoardNumber()) return i;
-  }
-  return -1;
-}
 
 // Print current board status
Index: hvcontrol/src/ProcessIO.h
===================================================================
--- hvcontrol/src/ProcessIO.h	(revision 98)
+++ hvcontrol/src/ProcessIO.h	(revision 100)
@@ -32,6 +32,6 @@
   HVConfig    *config;
   HVCalib     *calib;
-  HVBoard* fHVBoard[MAX_NUM_HVBOARDS];
-  SlowData* SlowDataClass;
+  HVBoard **fHVBoard;
+  SlowData *SlowDataClass;
   
   pthread_mutex_t control_mutex;
@@ -70,5 +70,4 @@
   void Monitor();
   void ResetBoard(int);
-  int GetBoardIdx(int);
   void PrintBoardStatus(int);
   int ParseInput(char*, const char *Param[]);
