diff --git a/MAC/APL/PIC/RSP_Driver/src/BMRead.cc b/MAC/APL/PIC/RSP_Driver/src/BMRead.cc
index 41b2e14c1b111f5b2fcb9e23097add8103080099..1f562604615018912a1782eb73b4486a1752f8c5 100644
--- a/MAC/APL/PIC/RSP_Driver/src/BMRead.cc
+++ b/MAC/APL/PIC/RSP_Driver/src/BMRead.cc
@@ -52,7 +52,9 @@ void BMRead::sendrequest()
   if ((( Cache::getInstance().getBack().getVersions().bp()(getBoardId()).fpga_maj * 10) +
          Cache::getInstance().getBack().getVersions().bp()(getBoardId()).fpga_min) < 74) {
     LOG_DEBUG_STR(formatString("BMRead:: Firmware on board[%d], has NO bitmode support", getBoardId()));
+    Cache::getInstance().getState().bmState().unmodified(getBoardId());
     setContinue(true); // continue with next action
+    setFinished();
   }
   else {
       EPAReadEvent bmread;
@@ -87,6 +89,7 @@ GCFEvent::TResult BMRead::handleack(GCFEvent& event, GCFPortInterface& /*port*/)
 
   if (!bm.hdr.isValidAck(itsHdr))
   {
+    Cache::getInstance().getState().bmState().read_error(getBoardId());
     LOG_ERROR("BMRead::handleack: invalid ack");
     return GCFEvent::NOT_HANDLED;
   }
@@ -98,6 +101,8 @@ GCFEvent::TResult BMRead::handleack(GCFEvent& event, GCFPortInterface& /*port*/)
   Cache::getInstance().getBack().getBitModeInfo()()(getBoardId()).bm_select = bm.beammode.bm_select;
   Cache::getInstance().getBack().getBitModeInfo()()(getBoardId()).bm_max    = bm.beammode.bm_max;
   
+  Cache::getInstance().getState().bmState().read_ack(getBoardId());
+    
   LOG_DEBUG_STR("BMRead::handleack() done");
   return GCFEvent::HANDLED;
 }
diff --git a/MAC/APL/PIC/RSP_Driver/src/BMWrite.cc b/MAC/APL/PIC/RSP_Driver/src/BMWrite.cc
index 3997cf280fc23337d89c79f67908facf431acba1..e884df65895bbfd7128da452e81e87b63a18f7ad 100644
--- a/MAC/APL/PIC/RSP_Driver/src/BMWrite.cc
+++ b/MAC/APL/PIC/RSP_Driver/src/BMWrite.cc
@@ -55,7 +55,9 @@ void BMWrite::sendrequest()
   if ((( Cache::getInstance().getBack().getVersions().bp()(getBoardId()).fpga_maj * 10) +
          Cache::getInstance().getBack().getVersions().bp()(getBoardId()).fpga_min) < 74) {
     LOG_DEBUG_STR(formatString("BMWrite:: Firmware on board[%d], has NO bitmode support", getBoardId()));
+    Cache::getInstance().getState().bmState().read_ack(getBoardId());
     setContinue(true); // continue with next action
+    setFinished();
   }
   else {
       
@@ -67,7 +69,7 @@ void BMWrite::sendrequest()
       if (RTC::RegisterState::WRITE != Cache::getInstance().getState().bmState().get(getBoardId())) {
         Cache::getInstance().getState().bmState().unmodified(getBoardId());
         setContinue(true);
-    
+        setFinished();
         return;
       }
         
diff --git a/MAC/APL/PIC/RSP_Driver/src/BWWrite.cc b/MAC/APL/PIC/RSP_Driver/src/BWWrite.cc
index bc7e51ee7e3906d30376bfeddc465cd5fe8a2335..d04fd573c35be36fe1badc8b1fab65e59aa4bf84 100644
--- a/MAC/APL/PIC/RSP_Driver/src/BWWrite.cc
+++ b/MAC/APL/PIC/RSP_Driver/src/BWWrite.cc
@@ -46,8 +46,9 @@ using namespace EPA_Protocol;
 
 BWWrite::BWWrite(GCFPortInterface& board_port, int board_id, int blp, int regid)
 	: SyncAction(board_port, board_id, MEPHeader::BF_N_FRAGMENTS*MAX_NR_BM_BANKS),
-	  m_blp(blp), m_regid(regid), itsBank(0), m_remaining(0), m_offset(0)
+	  m_blp(blp), m_regid(regid), itsBank(0), itsActiveBanks(1), m_remaining(0), m_offset(0)
 {
+	
 	memset(&m_hdr, 0, sizeof(MEPHeader));
 }
 
@@ -57,13 +58,17 @@ BWWrite::~BWWrite()
 
 void BWWrite::sendrequest()
 {
-    int activeBanks = (MAX_BITS_PER_SAMPLE / Cache::getInstance().getBack().getBitsPerSample());
-    if (getCurrentIndex() >= (activeBanks*MEPHeader::BF_N_FRAGMENTS)) {
+    itsActiveBanks = (MAX_BITS_PER_SAMPLE / Cache::getInstance().getBack().getBitsPerSample());
+    uint8 global_blp = (getBoardId() * NR_BLPS_PER_RSPBOARD) + m_blp;
+    if (getCurrentIndex() >= (itsActiveBanks*MEPHeader::BF_N_FRAGMENTS)) {
+        if (getCurrentIndex() == (MEPHeader::BF_N_FRAGMENTS*MAX_NR_BM_BANKS - 1)) {
+            Cache::getInstance().getState().bf().write_ack(global_blp * MEPHeader::N_PHASEPOL + m_regid);
+        }
         setContinue(true);
         return;
     }
     
-    uint8 global_blp = (getBoardId() * NR_BLPS_PER_RSPBOARD) + m_blp;
+    
     itsBank = (getCurrentIndex() / MEPHeader::BF_N_FRAGMENTS) ;
         
 	// no conditional, update every second
@@ -122,11 +127,13 @@ void BWWrite::sendrequest()
                          m_offset);
 		break;
 	}
-	
+
+#if 0	
 	if (getBoardId() == 11) {
 		LOG_INFO_STR("BWWrite:board:" << getBoardId() << ",global_blp=" << (int)global_blp << ",bank=" << itsBank 
 			<< "," << bfcoefs.hdr);
 	}
+#endif
 
 	// create blitz view om the weights in the bfcoefs message to be sent to the RSP hardware
 	int nbeamlets_per_fragment = MEPHeader::N_BEAMLETS / MEPHeader::BF_N_FRAGMENTS;
@@ -154,13 +161,13 @@ void BWWrite::sendrequest()
 
 		Range hw_range(hw_offset, hw_offset + nbeamlets_per_fragment - MEPHeader::N_BLPS, MEPHeader::N_BLPS);
 		Range cache_range(cache_offset, cache_offset + (nbeamlets_per_fragment / MEPHeader::N_SERDES_LANES) - 1, 1);
-		
+#if 0		
 		if (getBoardId() == 11) {
 			LOG_INFO_STR("board=" << getBoardId() << ",bank=" << itsBank << ",lane=" << lane 
 					<< (m_regid / 2 ? ",Y" : ",X") << (m_regid % 2 ? "I" : "R")
 					<< ", hw_range=" << hw_range << ", cache_range=" << cache_range);
 		}
-
+#endif
 		// X = normal 0
 		weights(hw_range, 0) = Cache::getInstance().getBack().getBeamletWeights()()(0, global_blp * 2, itsBank, cache_range);
 
@@ -295,7 +302,7 @@ GCFEvent::TResult BWWrite::handleack(GCFEvent& event, GCFPortInterface& /*port*/
 		//
 		// Last fragment signals completion
 		//
-		if (MEPHeader::MEPHeader::BF_N_FRAGMENTS - 1 == getCurrentIndex()) {
+		if ((MEPHeader::BF_N_FRAGMENTS*itsActiveBanks-1) == getCurrentIndex()) {
 		  Cache::getInstance().getState().bf().write_ack(global_blp * MEPHeader::N_PHASEPOL + m_regid);
 		}
 	}
diff --git a/MAC/APL/PIC/RSP_Driver/src/BWWrite.h b/MAC/APL/PIC/RSP_Driver/src/BWWrite.h
index e8d45e17dbb0432e2f105a1615877d2197c47e77..bc8a9c8dc723cda79103daecdb81df59fcc8addf 100644
--- a/MAC/APL/PIC/RSP_Driver/src/BWWrite.h
+++ b/MAC/APL/PIC/RSP_Driver/src/BWWrite.h
@@ -63,6 +63,7 @@ private:
 	int    m_blp;
 	int    m_regid;
 	int    itsBank;
+	int    itsActiveBanks;
 
 	size_t m_remaining; // how much to write
 	size_t m_offset;    // where to write
diff --git a/MAC/APL/PIC/RSP_Driver/src/BstRead.cc b/MAC/APL/PIC/RSP_Driver/src/BstRead.cc
index 01139bdb3011a7dfa36613e32ebed5383468a10b..7f59eb6bb18c16f15fc91b993e9680a4541973c0 100644
--- a/MAC/APL/PIC/RSP_Driver/src/BstRead.cc
+++ b/MAC/APL/PIC/RSP_Driver/src/BstRead.cc
@@ -39,9 +39,10 @@ using namespace EPA_Protocol;
 using namespace RSP_Protocol;
 
 BstRead::BstRead(GCFPortInterface& board_port, int board_id, int lane_id)
-  : SyncAction(board_port, board_id, MEPHeader::N_SERDES_LANES)
+  : SyncAction(board_port, board_id, MEPHeader::N_SERDES_LANES)  // MEPHeader::MAX_N_BANKS in new firmware
 {
 	itsLaneId = lane_id;
+	itsRealLaneId = (lane_id < 10)?lane_id:(lane_id-10);
 	memset(&m_hdr, 0, sizeof(MEPHeader));
 }
 
@@ -59,17 +60,14 @@ void BstRead::sendrequest()
 	if ((( Cache::getInstance().getBack().getVersions().bp()(getBoardId()).fpga_maj * 10) +
 		Cache::getInstance().getBack().getVersions().bp()(getBoardId()).fpga_min     ) < 74) {
 		// if old firmware version do
-		int real_lane = (itsLaneId < 10)?itsLaneId:(itsLaneId-10);
-		if (getCurrentIndex() != real_lane) {
+		if (getCurrentIndex() != itsRealLaneId) {
 			setContinue(true);
+			return;
 		}
 	}
 	else {
 		// if new firmware version do
 		if (getCurrentIndex() >= (MAX_BITS_PER_SAMPLE / Cache::getInstance().getBack().getBitsPerSample())) {
-			if (getCurrentIndex() == MEPHeader::N_SERDES_LANES - 1) {
-				Cache::getInstance().getState().bst().read_ack(getBoardId());
-			}
 			setContinue(true);
 			return;
 		}
@@ -77,8 +75,6 @@ void BstRead::sendrequest()
 
 	EPAReadEvent bstread;
 
-	Cache::getInstance().getState().bst().read(getBoardId());
-
 	bstread.hdr.set(MEPHeader::READ, MEPHeader::DST_RSP, MEPHeader::BST, getCurrentIndex(), MEPHeader::BST_POWER_SIZE); 
 	m_hdr = bstread.hdr;
 	getBoardPort().send(bstread);
@@ -87,8 +83,12 @@ void BstRead::sendrequest()
 string s;
 hexdump(s, (void*)&bstread, sizeof(bstread));
 LOG_INFO_STR("BSTREADREQUEST=" << s);
-#endif
 LOG_INFO(formatString("BSTREAD:board=%d,dstid=%d,pid=%d,regid=%d,offset=%d,payload=%d,seqnr=%d", getBoardId(), bstread.hdr.m_fields.addr.dstid, bstread.hdr.m_fields.addr.pid, bstread.hdr.m_fields.addr.regid, bstread.hdr.m_fields.offset, bstread.hdr.m_fields.payload_length, bstread.hdr.m_fields.seqnr));
+
+if (getBoardId() == 11) {
+    LOG_INFO(formatString("BSTREAD:board=%d,dstid=%d,pid=%d,regid=%d,offset=%d,payload=%d,seqnr=%d", getBoardId(), bstread.hdr.m_fields.addr.dstid, bstread.hdr.m_fields.addr.pid, bstread.hdr.m_fields.addr.regid, bstread.hdr.m_fields.offset, bstread.hdr.m_fields.payload_length, bstread.hdr.m_fields.seqnr));
+}
+#endif
 }
 
 void BstRead::sendrequest_status()
@@ -138,7 +138,7 @@ GCFEvent::TResult BstRead::handleack(GCFEvent& event, GCFPortInterface& /*port*/
 	EPABstStatsEvent ack(event);
 
 	if (!ack.hdr.isValidAck(m_hdr)) {
-		Cache::getInstance().getState().bst().read_error(getBoardId());
+		Cache::getInstance().getState().bst().read_error(itsRealLaneId);
 		LOG_ERROR("BstRead::handleack: invalid ack");
 		return GCFEvent::NOT_HANDLED;
 	}
@@ -147,21 +147,20 @@ GCFEvent::TResult BstRead::handleack(GCFEvent& event, GCFPortInterface& /*port*/
 
 	int swstart;
 	// In new firmware versions BST registers are used in a different way
-	int real_lane = (itsLaneId < 10)?itsLaneId:(itsLaneId-10);
 	if ((( Cache::getInstance().getBack().getVersions().bp()(getBoardId()).fpga_maj * 10) +
 		Cache::getInstance().getBack().getVersions().bp()(getBoardId()).fpga_min     ) < 74) {
-		swstart = (real_lane * MEPHeader::N_BEAMLETS);
+		swstart = (itsRealLaneId * MEPHeader::N_BEAMLETS);
 	}
 	else {          
-		swstart = (real_lane * MEPHeader::N_BEAMLETS) + (getCurrentIndex() * MEPHeader::N_DATA_SLOTS);
+		swstart = (itsRealLaneId * MEPHeader::N_BEAMLETS) + (getCurrentIndex() * MEPHeader::N_DATA_SLOTS);
 	}
 
 	Range fragment_range(swstart, swstart+MEPHeader::N_DATA_SLOTS-1);
 
 	// normal set 0/1, if splitter active also 2/3
 	int beamletsSet = (itsLaneId < 10)?0:2;
-
-	LOG_INFO_STR("fragment_range[" << getBoardId() << "," << getCurrentIndex() << "]=" << fragment_range);
+  
+	LOG_DEBUG_STR("fragment_range[" << getBoardId() << "," << getCurrentIndex() << "]=" << fragment_range);
 
 	if (getCurrentIndex() != ack.hdr.m_fields.addr.regid) {
 		LOG_ERROR("invalid bst ack");
@@ -170,21 +169,19 @@ GCFEvent::TResult BstRead::handleack(GCFEvent& event, GCFPortInterface& /*port*/
 
 	Array<uint32, 2> stats((uint32*)&ack.stat,
 	shape((MEPHeader::BST_POWER_SIZE / sizeof(uint32)) / N_POL, N_POL), neverDeleteData);
-	LOG_INFO(formatString("real_lane=%d, beamletsSet=%d, swstart=%d", real_lane, beamletsSet, swstart));
-//	LOG_INFO_STR("stats:" << stats); 
+	LOG_DEBUG(formatString("real_lane=%d, beamletsSet=%d, swstart=%d", itsRealLaneId, beamletsSet, swstart));
+	LOG_DEBUG_STR("stats:" << stats); 
 	Array<double, 2>& cache(Cache::getInstance().getBack().getBeamletStats()());
 
 	// x-pol beamlet statistics: copy and convert to double
 	cache(beamletsSet,     fragment_range) =
-	convert_uint32_to_double(stats(Range::all(), 0));
+	    convert_uint32_to_double(stats(Range::all(), 0));
 
 	// y-pol beamlet statistics: copy and convert to double
 	cache(beamletsSet + 1, fragment_range) =
-	convert_uint32_to_double(stats(Range::all(), 1));
+	    convert_uint32_to_double(stats(Range::all(), 1));
 
-	if (getCurrentIndex() == MEPHeader::N_SERDES_LANES - 1) {
-		Cache::getInstance().getState().bst().read_ack(getBoardId());
-	}
+	Cache::getInstance().getState().bst().read_ack(itsRealLaneId);
 
 	return GCFEvent::HANDLED;
 }
diff --git a/MAC/APL/PIC/RSP_Driver/src/BstRead.h b/MAC/APL/PIC/RSP_Driver/src/BstRead.h
index fc512e17ff2fb35f4e4111590194c7d6e52e4bc9..efbeb5d320e2754a86e84b343238c4fee4f7d442 100644
--- a/MAC/APL/PIC/RSP_Driver/src/BstRead.h
+++ b/MAC/APL/PIC/RSP_Driver/src/BstRead.h
@@ -59,8 +59,10 @@ namespace LOFAR {
       virtual GCFEvent::TResult handleack(GCFEvent& event, GCFPortInterface& port);
 
     private:
-      EPA_Protocol::MEPHeader m_hdr;
       int itsLaneId;
+      int itsRealLaneId;
+      
+      EPA_Protocol::MEPHeader m_hdr;
     };
   };
 };
diff --git a/MAC/APL/PIC/RSP_Driver/src/SSRead.cc b/MAC/APL/PIC/RSP_Driver/src/SSRead.cc
index 60f824ce1e81c4bb037d3df2c3b9a0b3c5860c80..5ec208b33f03da165639ca7cb6e18c317e85dc91 100644
--- a/MAC/APL/PIC/RSP_Driver/src/SSRead.cc
+++ b/MAC/APL/PIC/RSP_Driver/src/SSRead.cc
@@ -54,6 +54,7 @@ void SSRead::sendrequest()
 	itsActivePlanes = (MAX_BITS_PER_SAMPLE / Cache::getInstance().getBack().getBitsPerSample());
 	if (getCurrentIndex() >= (itsActivePlanes*NR_BLPS_PER_RSPBOARD)) {
 		setContinue(true);
+		return;
 	}
 
 	int dstid = 1 << (getCurrentIndex() / itsActivePlanes);
diff --git a/MAC/APL/PIC/RSP_Driver/src/SSWrite.cc b/MAC/APL/PIC/RSP_Driver/src/SSWrite.cc
index 9ad8cb8bbf60b395338f377e05812b1b28e1eea3..e7c8aa3ca6a07798a1f8d8981916dd430f4f1fd1 100644
--- a/MAC/APL/PIC/RSP_Driver/src/SSWrite.cc
+++ b/MAC/APL/PIC/RSP_Driver/src/SSWrite.cc
@@ -40,7 +40,9 @@ using namespace RSP;
 using namespace RTC;
 
 SSWrite::SSWrite(GCFPortInterface& board_port, int board_id)
-  : SyncAction(board_port, board_id, NR_BLPS_PER_RSPBOARD * MAX_BITS_PER_SAMPLE / MIN_BITS_PER_SAMPLE)
+  : SyncAction(board_port, board_id, NR_BLPS_PER_RSPBOARD * (MAX_BITS_PER_SAMPLE / MIN_BITS_PER_SAMPLE)),
+    itsActiveBanks(1)
+    
 {
 	memset(&m_hdr, 0, sizeof(MEPHeader));
 }
@@ -57,6 +59,7 @@ void SSWrite::sendrequest()
 		setContinue(true);
 		return;
 	}
+	
 	uint8 global_blp = (getBoardId() * NR_BLPS_PER_RSPBOARD) + (getCurrentIndex()/itsActiveBanks);
 	LOG_DEBUG(formatString(">>>> SSWrite(%s) global_blp=%d", getBoardPort().getName().c_str(), global_blp));
 
@@ -69,7 +72,7 @@ void SSWrite::sendrequest()
 	int dstid = 1 << (getCurrentIndex() / itsActiveBanks);
 	// used bank 
 	int bank = getCurrentIndex() % itsActiveBanks;
-	LOG_INFO(formatString("SSWRITE:board=%d, index=%d, globalblp=%d, dstID=%d, bank=%d, regid=%d", 
+	LOG_DEBUG(formatString("SSWRITE:board=%d, index=%d, globalblp=%d, dstID=%d, bank=%d, regid=%d", 
 							getBoardId(), getCurrentIndex(), global_blp, dstid, bank, MEPHeader::SS_SELECT+bank));
 
 	ss.hdr.set( MEPHeader::WRITE, 
@@ -133,8 +136,10 @@ GCFEvent::TResult SSWrite::handleack(GCFEvent& event, GCFPortInterface& /*port*/
 		LOG_ERROR("SSWrite::handleack: invalid ack");
 		return GCFEvent::NOT_HANDLED;
 	}
-
-	Cache::getInstance().getState().ss().write_ack(global_blp);
+	
+    if ((getCurrentIndex() % itsActiveBanks) == 0) {
+	    Cache::getInstance().getState().ss().write_ack(global_blp);
+	}
 
 	return GCFEvent::HANDLED;
 }
diff --git a/MAC/APL/PIC/RSP_Driver/src/SSWrite.h b/MAC/APL/PIC/RSP_Driver/src/SSWrite.h
index 0f93c6b63c1ab498bd9e48236d0211b359793f02..4d14c3b14d730cf97ac13d539992124cc5b99364 100644
--- a/MAC/APL/PIC/RSP_Driver/src/SSWrite.h
+++ b/MAC/APL/PIC/RSP_Driver/src/SSWrite.h
@@ -60,8 +60,9 @@ namespace LOFAR {
       virtual GCFEvent::TResult handleack(GCFEvent& event, GCFPortInterface& port);
 
     private:
-      EPA_Protocol::MEPHeader m_hdr;
       int itsActiveBanks;
+      
+      EPA_Protocol::MEPHeader m_hdr;
     };
   };
 };
diff --git a/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/AllRegisterState.h b/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/AllRegisterState.h
index 96712dd30bfb9069626a7b3afa7a234b1e84b67f..a3334af0aff49defe6c6ef375fd7f1e5cb03423e 100644
--- a/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/AllRegisterState.h
+++ b/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/AllRegisterState.h
@@ -67,7 +67,7 @@ public:
 		rsuclear_state.resize(nrRspBoards);
 		diagwgsettings_state.resize(nrRcus * EPA_Protocol::MEPHeader::N_DIAG_WG_REGISTERS);
 		sst_state.resize(nrBlps * EPA_Protocol::MEPHeader::SST_N_FRAGMENTS);
-		bst_state.resize(nrRspBoards);
+		bst_state.resize(EPA_Protocol::MEPHeader::N_SERDES_LANES);
 		xst_state.resize(nrRspBoards * EPA_Protocol::MEPHeader::XST_NR_STATS);
 		cdo_state.resize(nrRspBoards * EPA_Protocol::MEPHeader::N_CDO_REGISTERS);
 		bs_state.resize(nrBlps);
diff --git a/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/MEPHeader.h b/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/MEPHeader.h
index fe98a8314beb49dcfefb7e9a636dbc085a99f760..7f361bdcc790f02bba289c878baa5e47cf7164e5 100644
--- a/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/MEPHeader.h
+++ b/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/MEPHeader.h
@@ -247,6 +247,7 @@ public:
 	static const uint16 N_BEAMLETS       = N_SERDES_LANES * N_DATA_SLOTS;
 	static const uint16 XLET_SIZE        = N_POL * sizeof(std::complex<uint32>);
 	static const uint16 WEIGHT_SIZE      = N_POL * sizeof(std::complex<uint16>);
+	static const uint16 MAX_N_BANKS      = 4;
 
 	// TBB related constants
 	static const uint16 TBB_MAXPAYLOADSIZE     = 1948; // available TBB payload bytes
diff --git a/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/Statistics.h b/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/Statistics.h
index 493abb6ac296624fa3b70f2ba8c2965285d9213a..f4769f42beefd9c7e7e2e9cd4e4264a3ff8817d8 100644
--- a/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/Statistics.h
+++ b/MAC/APL/PIC/RSP_Protocol/include/APL/RSP_Protocol/Statistics.h
@@ -82,7 +82,7 @@ namespace LOFAR {
        * Statistics
        * Dimensions are: (N_DEVICES, N_SUBBANDS);
        *
-       * N_DEVICES == 2 * N_POL for beamlet statistics
+       * N_DEVICES == 2 * N_POL for beamlet statistics (2 *) for splitter
        * N_DEVICES == N_RSPBOARDS * N_BLPS * N_POL for subband statistics
        * 
        */