diff --git a/LCU/checkhardware/lib/general_lib.py b/LCU/checkhardware/lib/general_lib.py
index 3901371b930b1a0dd81c7c7c35f0044542c0cf76..c1de15811aed6a79218666d9ba6676913fc9555e 100644
--- a/LCU/checkhardware/lib/general_lib.py
+++ b/LCU/checkhardware/lib/general_lib.py
@@ -6,6 +6,8 @@ from subprocess import (Popen, PIPE)
 import time
 import os
 
+general_version = '0913'
+
 def writeMessage(msg):
     res = sendCmd('wall', msg)
     return
diff --git a/LCU/checkhardware/lib/lofar_lib.py b/LCU/checkhardware/lib/lofar_lib.py
index ebb97538c4b2a9be9c1395ff40aa0f11ec63a6c2..b017e813a042bbd409ff9c6ed841d7be7a2fb1aa 100644
--- a/LCU/checkhardware/lib/lofar_lib.py
+++ b/LCU/checkhardware/lib/lofar_lib.py
@@ -6,6 +6,8 @@ import time
 from general_lib import sendCmd
 import logging
 
+lofar_version = '0913'
+
 CoreStations          = ('CS001C','CS002C','CS003C','CS004C','CS005C','CS006C','CS007C','CS011C',\
                          'CS013C','CS017C','CS021C','CS024C','CS026C','CS028C','CS030C','CS031',\
                          'CS032C','CS101C','CS103C','CS201C','CS301C','CS302C','CS401C','CS501C')
@@ -19,6 +21,8 @@ InternationalStations =	('DE601C','DE602C','DE603C','DE604C','DE605C','FR606C','
 StationType = dict( CS=1, RS=2, IS=3 )
 
 logger = None
+rcumode = -1
+
 def init_lofar_lib():
     global logger
     logger = logging.getLogger()
@@ -214,6 +218,8 @@ def resetRSPsettings():
 
 def turnonRCUs(mode, rcus):
     global logger
+    global rcumode
+    start_mode = rcumode
     logger.info("turn RCU's on, mode %d" %(mode))
     logger.info("enable rcus")
     rspctl('--rcuenable=1', wait=0.0)
@@ -225,19 +231,25 @@ def turnonRCUs(mode, rcus):
         rspctl('--specinv=0', wait=0.0)
     logger.info("set rcu mode")
     rsp_rcu_mode(mode, rcus)
-    if mode >= 5:
+    if mode >= 5 and mode != start_mode:
         logger.info("set hbadelays to 0 for 1 second")
         rspctl('--hbadelay=%s' %(('0,'* 16)[:-1]), wait=8.0)
+        rsp_hba_delay(('128,'*16)[:-1], rcus)
+    rcumode = mode
     
 def turnoffRCUs():
     global logger
+    global rcumode
     logger.info("RCU's off, mode 0")
     rspctl('--rcumode=0', wait=0.0)
     rspctl('--rcuenable=0', wait=0.0)
     rspctl('--aweights=0,0', wait=1.0)
+    rcumode = 0
 
 # set rcu mode, if mode > 4(hba) turn on hba's in steps to avoid power dips
 def rsp_rcu_mode(mode, n_rcus=96):
+    global rcumode
+    rcumode = mode
     if mode > 0 and mode < 5: # lba modes
         rspctl('--rcumode=%d' %(mode), wait=3.0)
         return (0)
@@ -252,14 +264,36 @@ def rsp_rcu_mode(mode, n_rcus=96):
         if jump < 2: jump = 2
         
         for step in range(steps):
-            selection = '--select='
+            selection = ''
             for rcu in range(step*2, n_rcus, jump):
                 selection += '%d,%d,' %(rcu,rcu+1)
-            rspctl('--rcumode=%d %s' %(mode, selection[:-1]), wait=0.5)
+            rspctl('--rcumode=%d --select=%s' %(mode, selection[:-1]), wait=0.5)
         time.sleep(2.5)
         return (0) 
     else:
         return (-1)
         
+# set hba_delays in steps to avoid power dips
+def rsp_hba_delay(delay, n_rcus=96):
+    if delay == 0:
+        rspctl('--hbadelay=%s' %(delay), wait=4.0)
+        return (0)
+    else:
+        #n_rcus = n_boards * 8
+        n_pwr_rcus = n_rcus / 2
+        # maximum 24 power RCUs each step
+        steps = n_pwr_rcus / 24 # 4 steps for NL stations, 8 steps for IS stations
+        jump = n_rcus / 24      # jump = 8 for NL stations and 16 for IS stations
+        
+        if steps == 0: steps = 1
+        if jump < 2: jump = 2
+        
+        for step in range(steps):
+            selection = ''
+            for rcu in range(step*2, n_rcus, jump):
+                selection += '%d,%d,' %(rcu,rcu+1)
+            rspctl('--hbadelay=%s --select=%s' %(delay, selection[:-1]), wait=2.0)
+        time.sleep(2.0)
+        return (0) 
 
     
diff --git a/LCU/checkhardware/lib/search_lib.py b/LCU/checkhardware/lib/search_lib.py
index 7120d1899c4c6634691f37bed836bb29a36bd3b4..a9cb50984e8a6fad465144be4027c61265305de2 100644
--- a/LCU/checkhardware/lib/search_lib.py
+++ b/LCU/checkhardware/lib/search_lib.py
@@ -9,8 +9,9 @@ from numpy import ma, fft, power, arange, asarray, isscalar, NaN, Inf, zeros
 from sys import exit
 import logging
 
-logger = logging.getLogger()
+search_version = '0913'
 
+logger = logging.getLogger()
 
 """
 search for all peaks (min & max) in spectra
diff --git a/LCU/checkhardware/lib/test_db.py b/LCU/checkhardware/lib/test_db.py
index 1dbc20667863c73d0363df645816628579eb1232..767169d4205ad668acdfd16e232cef5385b89a73 100644
--- a/LCU/checkhardware/lib/test_db.py
+++ b/LCU/checkhardware/lib/test_db.py
@@ -4,6 +4,8 @@ from general_lib import *
 from lofar_lib import *
 import logging
 
+db_version = '0913'
+
 logger = None
 def init_test_db():
     global logger
@@ -21,6 +23,8 @@ class cDB:
         self.nr_hba = nHBA
         self.nr_tbb = nTBB
         
+        self.script_versions = ''
+        
         self.rcumode = -1
         self.tests   = ''
         self.check_start_time = 0
@@ -109,7 +113,8 @@ class cDB:
         print logdir
         date = getShortDateStr(self.check_start_time)
         log = cTestLogger(logdir)
-
+        log.addLine("%s,NFO,---,VERSIONS,%s" %(date, self.script_versions))
+        
         log.addLine("%s,NFO,---,STATION,NAME=%s" %(date, getHostName()))   
         log.addLine("%s,NFO,---,RUNTIME,START=%s,STOP=%s" %(date, getDateTimeStr(self.check_start_time), getDateTimeStr(self.check_stop_time)))
         log.addLine("%s,NFO,---,CHECKS%s" %(date, self.tests))
@@ -160,28 +165,28 @@ class cDB:
                 for ant in lba.ant:
                     if ant.down:
                             log.addLine("%s,%s,%03d,DOWN  ,X=%3.1f,Y=%3.1f,Xoff=%d,Yoff=%d" %\
-                                       (date, lba.label, ant.nr, ant.x.test_signal, ant.y.test_signal, ant.x.offset, ant.y.offset))
+                                       (date, lba.label, ant.nr_pvss, ant.x.test_signal, ant.y.test_signal, ant.x.offset, ant.y.offset))
                     else:
                         if lba.signal_check_done:
                             valstr = ''
                             if ant.x.too_low or ant.x.too_high: valstr += ",X=%3.1f" %(ant.x.test_signal)
                             if ant.y.too_low or ant.y.too_high: valstr += ",Y=%3.1f" %(ant.y.test_signal)    
                             if len(valstr):
-                                log.addLine("%s,%s,%03d,RF_FAIL%s" %(date, lba.label, ant.nr, valstr))
+                                log.addLine("%s,%s,%03d,RF_FAIL%s" %(date, lba.label, ant.nr_pvss, valstr))
                         
                         if lba.oscillation_check_done:
                             valstr = ''
                             if ant.x.osc: valstr += ',X=1'
                             if ant.y.osc: valstr += ',Y=1'
                             if len(valstr):
-                                log.addLine("%s,%s,%03d,OSCILLATION%s" %(date, lba.label, ant.nr, valstr))
+                                log.addLine("%s,%s,%03d,OSCILLATION%s" %(date, lba.label, ant.nr_pvss, valstr))
                         
                         if lba.spurious_check_done:
                             valstr = ''
                             if ant.x.spurious: valstr += ',X=1'
                             if ant.y.spurious: valstr += ',Y=1'
                             if len(valstr):
-                                log.addLine("%s,%s,%03d,SPURIOUS%s" %(date, lba.label, ant.nr, valstr))
+                                log.addLine("%s,%s,%03d,SPURIOUS%s" %(date, lba.label, ant.nr_pvss, valstr))
                             
                         if lba.noise_check_done:
                             noise = False
@@ -193,7 +198,7 @@ class cDB:
                                 proc = (100.0 / ant.y.low_seconds) * ant.y.low_bad_seconds
                                 valstr += ',Yproc=%5.3f,Yval=%3.1f,Ydiff=%5.3f,Yref=%3.1f' %(proc, ant.y.low_val, ant.y.low_diff, ant.y.low_ref)
                             if len(valstr):
-                                log.addLine("%s,%s,%03d,LOW_NOISE%s" %(date, lba.label, ant.nr, valstr))
+                                log.addLine("%s,%s,%03d,LOW_NOISE%s" %(date, lba.label, ant.nr_pvss, valstr))
                                 noise = True
                         
                             valstr = ''
@@ -204,7 +209,7 @@ class cDB:
                                 proc = (100.0 / ant.y.high_seconds) * ant.y.high_bad_seconds
                                 valstr += ',Yproc=%5.3f,Yval=%3.1f,Ydiff=%5.3f,Yref=%3.1f' %(proc, ant.y.high_val, ant.y.high_diff, ant.y.high_ref)
                             if len(valstr):
-                                log.addLine("%s,%s,%03d,HIGH_NOISE%s" %(date, lba.label, ant.nr, valstr))
+                                log.addLine("%s,%s,%03d,HIGH_NOISE%s" %(date, lba.label, ant.nr_pvss, valstr))
                                 noise = True
                             
                             valstr = ''
@@ -215,7 +220,7 @@ class cDB:
                                 proc = (100.0 / ant.y.jitter_seconds) * ant.y.jitter_bad_seconds
                                 valstr += ',Xproc=%5.3f,Ydiff=%5.3f,Yref=%3.1f' %(proc, ant.y.jitter_val, ant.y.jitter_ref)
                             if len(valstr):
-                                log.addLine("%s,%s,%03d,JITTER%s" %(date, lba.label, ant.nr, valstr))
+                                log.addLine("%s,%s,%03d,JITTER%s" %(date, lba.label, ant.nr_pvss, valstr))
         # end lbl/lbh                
         
         
@@ -475,7 +480,8 @@ class cDB:
         class cAntenna:
             def __init__(self, nr, nr_offset):
                 self.nr = nr
-                self.nr_total = nr + nr_offset
+                self.nr_pvss = nr + nr_offset
+                #self.nr_pvss = nr
                 self.x = cDB.cPolarity(rcu=(nr*2))
                 self.y = cDB.cPolarity(rcu=(nr*2+1))
                 
diff --git a/LCU/checkhardware/lib/test_lib.py b/LCU/checkhardware/lib/test_lib.py
index f86d5b4faddb99f2da169a6ed1b4c88164aa65b7..d0de7742e1fa00077f352b07c0966a2b904d2f1d 100644
--- a/LCU/checkhardware/lib/test_lib.py
+++ b/LCU/checkhardware/lib/test_lib.py
@@ -8,6 +8,8 @@ import os
 import numpy as np
 import logging
 
+test_version = '0913'
+
 logger = None
 def init_test_lib():
     global logger
@@ -90,9 +92,11 @@ class cRCUdata:
                 self.testSignal_Y = ssY[subband]
                 self.testSubband_Y = subband
                 return                
+            else:
+                logger.debug("Test signal on subband %d not strong enough X=%3.1fdB Y=%3.1fdB" %(subband, ssX[subband], ssY[subband]))
                 
         # no subband given or not in requested range, look for better
-        for i in range(ssX.shape[0]):
+        for i in range(1,ssX.shape[0],1):
             if ssX[i] > minsignal  and ssX[i] < maxsignal and ssX[i] > self.testSignal_X:
                 self.testSignal_X = ssX[i]
                 self.testSubband_X = i
@@ -541,10 +545,13 @@ class cHBA:
         
         time.sleep(2.0)
         ctrlstr1 = ('128,'* 16)[:-1] 
-        ctrlstr2 = ('253,'* 16)[:-1]
+        #ctrlstr2 = ('252,'* 16)[:-1]
+        ctrlstr2 = ('252,'* 16)[:-1]
         for ctrl in (ctrlstr1, ctrlstr2):
-            rspctl('--hbadelay=%s' %(ctrl), wait=10.0)
+            #rsp_hba_delay(delay=ctrl, n_rcus=self.db.nr_rcu)
+            rspctl('--hbadelay=%s' %(ctrl), wait=12.0)
             data = rspctl('--realdelays', wait=0.0).splitlines()
+            
             ctrllist = ctrl.split(',')
             for line in data:
                 if line[:3] == 'HBA':
@@ -577,7 +584,7 @@ class cHBA:
             turnonRCUs(mode=mode, rcus=self.db.nr_rcu)
             self.hba.resetRcuState()
             
-        rspctl('--hbadelay=%s' %(('253,'* 16)[:-1]), wait=10.0)
+        rspctl('--hbadelay=%s' %(('252,'* 16)[:-1]), wait=10.0)
         self.rcudata.record(rec_time=1)
         
         logger.debug("- test X -")
@@ -611,7 +618,7 @@ class cHBA:
             turnonRCUs(mode=mode, rcus=self.db.nr_rcu)
             self.hba.resetRcuState()
         
-        rspctl('--hbadelay=%s' %(('253,'* 16)[:-1]), wait=10.0)
+        rspctl('--hbadelay=%s' %(('252,'* 16)[:-1]), wait=10.0)
         clean = False
         while not clean:
             clean = True
@@ -647,7 +654,7 @@ class cHBA:
             if tile.x.rcu_off or tile.y.rcu_off:
                 logger.info("skip low-noise test for tile %d, RCUs turned off" %(tile.nr))
                 
-        rspctl('--hbadelay=%s' %(('253,'* 16)[:-1]), wait=10.0)
+        rspctl('--hbadelay=%s' %(('252,'* 16)[:-1]), wait=10.0)
         self.rcudata.record(rec_time=record_time)
         
         
@@ -724,7 +731,7 @@ class cHBA:
             turnonRCUs(mode=mode, rcus=self.db.nr_rcu)
             self.hba.resetRcuState()
             
-        rspctl('--hbadelay=%s' %(('253,'* 16)[:-1]), wait=10.0)
+        rspctl('--hbadelay=%s' %(('252,'* 16)[:-1]), wait=10.0)
         self.rcudata.record(rec_time=1)
         
         # result is a sorted list on maxvalue
@@ -754,15 +761,15 @@ class cHBA:
         
         # check twice
         # 128 ...
-        # 253 ...
+        # 248 ...
         
         for tile in self.hba.tile:
             if tile.x.rcu_off or tile.y.rcu_off:
                 logger.info("skip signal test for tile %d, RCUs turned off" %(tile.nr))
                     
-        for ctrl in ('128,', '253,'):
+        for ctrl in ('128,', '252,'):
             if ctrl == '128,': ctrl_nr = 0
-            elif ctrl == '253,': ctrl_nr = 1
+            elif ctrl == '252,': ctrl_nr = 1
                 
             logger.info("HBA signal test, ctrl word %s" %(ctrl[:-1]))
             
@@ -841,7 +848,7 @@ class cHBA:
                         logger.info("HBA Tile=%d  Error:  X=%3.1fdB  Y=%3.1fdB" %\
                                      (tile.nr, ssdataX[tile.nr], ssdataY[tile.nr]))
                         
-        rspctl('--hbadelay=%s' %(('253,'* 16)[:-1]), wait=8.0)
+        rspctl('--hbadelay=%s' %(('252,'* 16)[:-1]), wait=8.0)
         logger.info("Done HBA signal test")
         
         self.hba.signal_check_done = 1
@@ -875,15 +882,18 @@ class cHBA:
         turnoffRCUs()
         turnonRCUs(mode=mode, rcus=self.db.nr_rcu)
         self.hba.resetRcuState()
-        
-        n_rcus_off = 0
-        delay_start  = 0
-        for ctrl in ('128', '253'):
+       
+        n_rcus_off  = 0
+        delay_start = 0
+        for ctrl in ('128', '248'):
             if ctrl == '128': ctrl_nr = 0
-            elif ctrl == '253': ctrl_nr = 1
+            elif ctrl == '248': ctrl_nr = 1
+             
+            # delay command for first element             
+            ctrlstring = (ctrl+',' + '2,'*15)[:33]
+            rspctl('--hbadelay=%s' %(ctrlstring), wait=0.0)
+            delay_start = time.time()
             
-            #ctrlstring = (ctrl+',' + '2,'*15)[:33]
-            #rspctl('--hbadelay=%s' %(ctrlstring), wait=10.0)
             for elem in range(self.hba.tile[0].nr_elements):
                 logger.info("check elements %d, ctrlword=%s" %(elem+1, ctrl))
                 if n_rcus_off > 0:
@@ -897,10 +907,18 @@ class cHBA:
                 clean = False
                 while not clean:
                     clean = True
-                    ctrlstring = ('2,'*elem + ctrl + ',' + '2,'*15)[:33]
-                    rspctl('--hbadelay=%s' %(ctrlstring), wait=10.0)
+                    # wait if delay command ot ready
+                    if (time.time() - delay_start) < 10.0:
+                        time.sleep(10.0 - (time.time() - delay_start))
                     self.rcudata.record(rec_time=record_time)
                     
+                    # Record done. While analysing set delay for next run
+                    next_elem = elem + 1
+                    if next_elem < self.hba.tile[0].nr_elements:
+                        ctrlstring = ('2,'*next_elem + ctrl + ',' + '2,'*15)[:33]
+                        rspctl('--hbadelay=%s' %(ctrlstring), wait=0.0)
+                        delay_start = time.time()
+                    
                     clean, n_off = self.checkOscillationElements(elem)
                     n_rcus_off += n_off
                     if n_off > 0: continue
@@ -919,6 +937,7 @@ class cHBA:
         rspctl('--hbadelay=%s' %(('128,'* 16)[:-1]), wait=8.0)
         return
     
+    # Do a complete element test testing only the signal
     def checkElementsSignal(self, mode, subband, rf_min_signal, rf_low_deviation, rf_high_deviation):
                       
         logger.info("=== Start HBA element based signal test in mode %d ===" %(mode))
@@ -928,14 +947,17 @@ class cHBA:
         turnonRCUs(mode=mode, rcus=self.db.nr_rcu)
         self.hba.resetRcuState()
         
-        n_rcus_off = 0
-        delay_start  = 0
-        for ctrl in ('128', '253'):
+        n_rcus_off  = 0
+        delay_start = 0
+        for ctrl in ('128', '248'):
             if ctrl == '128': ctrl_nr = 0
-            elif ctrl == '253': ctrl_nr = 1
+            elif ctrl == '248': ctrl_nr = 1
             
+            # delay command for first element
             ctrlstring = (ctrl+',' + '2,'*15)[:33]
-            rspctl('--hbadelay=%s' %(ctrlstring), wait=10.0)
+            rspctl('--hbadelay=%s' %(ctrlstring), wait=0.0)
+            delay_start = time.time()
+            
             for elem in range(self.hba.tile[0].nr_elements):
                 logger.info("check elements %d, ctrlword=%s" %(elem+1, ctrl))
                 if n_rcus_off > 0:
@@ -946,18 +968,20 @@ class cHBA:
                         self.turnOffTile(tile.nr)
                         n_rcus_off += 1
                         logger.info("skip tile %d, modem error" %(tile.nr))
-                clean = False
-                while not clean:
-                    clean = True
-                    if (time.time() - delay_start) < 10.0:
-                        time.sleep(10.0 - (time.time() - delay_start))
-                    
-                    self.rcudata.record(rec_time=2)
-                    
-                    ctrlstring = ('2,'*elem + ctrl + ',' + '2,'*15)[:33]
+                
+                # wait if delay command ot ready
+                if (time.time() - delay_start) < 10.0:
+                    time.sleep(10.0 - (time.time() - delay_start))
+                self.rcudata.record(rec_time=2)
+
+                # Record done. While analysing set delay for next run
+                next_elem = elem + 1
+                if next_elem < self.hba.tile[0].nr_elements:
+                    ctrlstring = ('2,'*next_elem + ctrl + ',' + '2,'*15)[:33]
                     rspctl('--hbadelay=%s' %(ctrlstring), wait=0.0)
                     delay_start = time.time()
-                    self.checkSignalElements(elem, ctrl_nr, subband, rf_min_signal, rf_low_deviation, rf_high_deviation)
+                
+                self.checkSignalElements(elem, ctrl_nr, subband, rf_min_signal, rf_low_deviation, rf_high_deviation)
 
         self.hba.element_check_done = 1
         self.db.addTestDone('ES%d' %(mode))