diff --git a/MAC/APL/StationCU/src/StationControl/ActiveObs.cc b/MAC/APL/StationCU/src/StationControl/ActiveObs.cc
index 030356be9837723363760fab61d57c10a1c8cfec..524673d378e04ad939d05e874b3863e973fcf496 100644
--- a/MAC/APL/StationCU/src/StationControl/ActiveObs.cc
+++ b/MAC/APL/StationCU/src/StationControl/ActiveObs.cc
@@ -55,6 +55,8 @@ namespace LOFAR {
 ActiveObs::ActiveObs(const string&		name,
 					 State				initial,
 					 ParameterSet*		thePS,
+					 const string&		LBAbitmapString,
+					 const string&		HBAbitmapString,
 					 bool				hasSplitters,
 					 GCFTask&			task) :
 	GCFTask				(initial, string("ActiveObs:") + name),
@@ -77,7 +79,9 @@ ActiveObs::ActiveObs(const string&		name,
 						 itsInstanceNr, itsObsPar.obsID)),
 	itsReadyFlag		(false),
 	itsReqState			(CTState::NOSTATE),
-	itsCurState			(CTState::NOSTATE)
+	itsCurState			(CTState::NOSTATE),
+	itsLBAs				(LBAbitmapString),
+	itsHBAs				(HBAbitmapString)
 {
 	if (thePS->isDefined("Observation.TBB.TBBsetting[0].filter0_coeff0")) {
 		LOG_INFO("Observation also uses the TB boards");
@@ -171,12 +175,12 @@ GCFEvent::TResult	ActiveObs::starting(GCFEvent&	event, GCFPortInterface&	port)
 
 	switch (event.signal) {
 	case F_ENTRY:  {
-		// first make a mapping of the receivers that are used.
-		// the StationController already modified the set to reflect the available receivers
-		// So askfor this 'core' set by passed zeros.
-		// the receiver bitmap can be derived from the RCUset.
+		// First make a mapping of the receivers that are used.
+		// The StationController already modified the set to reflect the available receivers
+		// So askfor this 'core' set by passing zeros in the getRCUbitset function.
 		StationConfig		config;
 		bitset<MAX_RCUS>	theRCUs(itsObsPar.getRCUbitset(0, 0, ""));
+		// The receiver bitmap can be derived from the RCUset.
 		string	rbm;
 		rbm.resize(MAX_RCUS, '0');
 		for (int i = 0; i < MAX_RCUS; i++) {
@@ -186,6 +190,8 @@ GCFEvent::TResult	ActiveObs::starting(GCFEvent&	event, GCFPortInterface&	port)
 		}
 		LOG_INFO_STR("Setting receiverBitMap of DP:" << itsObsPar.realPVSSdatapoint << "." << PN_OBS_RECEIVER_BITMAP << "to " << theRCUs);
 		itsPropertySet->setValue(PN_OBS_RECEIVER_BITMAP,GCFPVString (rbm));
+		itsPropertySet->setValue(PN_OBS_LBA_BITMAP,GCFPVString (itsLBAs));
+		itsPropertySet->setValue(PN_OBS_HBA_BITMAP,GCFPVString (itsHBAs));
 		itsPropertySet->setValue(PN_OBS_CLAIM_NAME, 
 								 GCFPVString(formatString("LOFAR_ObsSW_Observation%d", itsObsPar.obsID)));
 
diff --git a/MAC/APL/StationCU/src/StationControl/ActiveObs.h b/MAC/APL/StationCU/src/StationControl/ActiveObs.h
index 596d9cd097cda77a472e9f1ab9913d55cd95335d..3363d6c49e9ecba35f3bcdfa501c0e813e863d5b 100644
--- a/MAC/APL/StationCU/src/StationControl/ActiveObs.h
+++ b/MAC/APL/StationCU/src/StationControl/ActiveObs.h
@@ -63,6 +63,8 @@ public:
 	ActiveObs (const string&	name,
 			   State			initial,
 			   ParameterSet*	aPS,
+			   const string&	LBAbitmap,
+			   const string&	HBAbitmap,
 			   bool				hasSplitters,
 			   GCFTask&			task);
 	virtual ~ActiveObs();
@@ -111,6 +113,8 @@ private:
 	bool						itsReadyFlag;
 	CTState::CTstateNr			itsReqState;
 	CTState::CTstateNr			itsCurState;
+	string						itsLBAs;
+	string						itsHBAs;
 };
 
 //#
diff --git a/MAC/APL/StationCU/src/StationControl/PVSSDatapointDefs.h b/MAC/APL/StationCU/src/StationControl/PVSSDatapointDefs.h
index 8e46aba4d486f06c85a41c0b1ff06d530cfeb610..8834630bd6a0fd5f3fe4f735857ad5d87fddea9f 100644
--- a/MAC/APL/StationCU/src/StationControl/PVSSDatapointDefs.h
+++ b/MAC/APL/StationCU/src/StationControl/PVSSDatapointDefs.h
@@ -1,4 +1,4 @@
-// This file was generated by create_db_files v1.0 on Thu Mar 19 14:56:58 UTC 2009
+// This file was generated by create_db_files v2.0 on Thu Jan  5 11:01:56 UTC 2012
 
 #ifndef LOFAR_DEPLOYMENT_PVSSDATAPOINTS_H
 #define LOFAR_DEPLOYMENT_PVSSDATAPOINTS_H
@@ -42,7 +42,6 @@
 #define PST_OBSERVATION	"Observation"
 #define	PN_OBS_CLAIM_CLAIM_DATE	"claim.claimDate"
 #define	PN_OBS_CLAIM_NAME	"claim.name"
-#define PN_OBS_RECEIVER_BITMAP	"receiverBitmap"
 #define PN_OBS_CLAIM_PERIOD	"claimPeriod"
 #define PN_OBS_PREPARE_PERIOD	"preparePeriod"
 #define PN_OBS_START_TIME	"startTime"
@@ -68,17 +67,74 @@
 #define PSN_OBSERVATION_CONTROL	"LOFAR_ObsSW_@observation@_ObservationControl"
 #define PST_OBSERVATION_CONTROL	"ObservationControl"
 
-// OnlineControl
-#define PSN_ONLINE_CONTROL	"LOFAR_ObsSW_@observation@_OnlineControl"
-#define PST_ONLINE_CONTROL	"OnlineControl"
+// InputBuffer
+#define PSN_INPUT_BUFFER	"LOFAR_PermSW_@psionode@_InputBuffer"
+#define PST_INPUT_BUFFER	"InputBuffer"
+#define PN_IPB_STATION_NAME	"stationName"
+#define PN_IPB_OBSERVATION_NAME	"observationName"
+#define PN_IPB_STREAM0_BLOCKS_IN	"stream0.blocksIn"
+#define PN_IPB_STREAM0_PERC_BAD	"stream0.percBad"
+#define PN_IPB_STREAM0_REJECTED	"stream0.rejected"
+#define PN_IPB_STREAM1_BLOCKS_IN	"stream1.blocksIn"
+#define PN_IPB_STREAM1_PERC_BAD	"stream1.percBad"
+#define PN_IPB_STREAM1_REJECTED	"stream1.rejected"
+#define PN_IPB_STREAM2_BLOCKS_IN	"stream2.blocksIn"
+#define PN_IPB_STREAM2_PERC_BAD	"stream2.percBad"
+#define PN_IPB_STREAM2_REJECTED	"stream2.rejected"
+#define PN_IPB_STREAM3_BLOCKS_IN	"stream3.blocksIn"
+#define PN_IPB_STREAM3_PERC_BAD	"stream3.percBad"
+#define PN_IPB_STREAM3_REJECTED	"stream3.rejected"
+#define PN_IPB_LATE	"late"
+#define PN_IPB_IO_TIME	"IOTime"
+
+// Adder
+#define PSN_ADDER	"LOFAR_ObsSW_@osionode@_@adder@"
+#define PST_ADDER	"Adder"
+#define PN_ADD_DROPPING	"dropping"
+#define PN_ADD_DROPPED	"dropped"
+#define PN_ADD_DATA_PRODUCT_TYPE	"dataProductType"
+#define PN_ADD_FILE_NAME	"fileName"
+#define PN_ADD_LOCUS_NODE	"locusNode"
+#define PN_ADD_DIRECTORY	"directory"
+#define PN_ADD_OBSERVATION_NAME	"observationName"
+
+// Writer
+#define PSN_WRITER	"LOFAR_ObsSW_@oslocusnode@_@writer@"
+#define PST_WRITER	"Writer"
+#define PN_WTR_TIME	"time"
+#define PN_WTR_COUNT	"count"
+#define PN_WTR_DROPPED	"dropped"
+#define PN_WTR_FILE_NAME	"fileName"
+#define PN_WTR_DATA_RATE	"dataRate"
+#define PN_WTR_DATA_PRODUKT_TYPE	"dataProduktType"
+#define PN_WTR_OBSERVATION_NAME	"observationName"
+
+// IONode
+#define PSN_IO_NODE	"LOFAR_PIC_BGP_@midplane@_@ionode@"
+#define PST_IO_NODE	"IONode"
+#define PN_ION_STATION0	"station0"
+#define PN_ION_IP0	"IP0"
+#define PN_ION_MAC0	"MAC0"
+#define PN_ION_STATION1	"station1"
+#define PN_ION_IP1	"IP1"
+#define PN_ION_MAC1	"MAC1"
+#define PN_ION_USE2ND_STATION	"use2ndStation"
+#define PN_ION_USED_STATION	"usedStation"
+#define PN_ION_USEDIP	"usedIP"
+#define PN_ION_USEDMAC	"usedMAC"
 
-// Correlator
-#define PSN_CORRELATOR	"LOFAR_ObsSW_@observation@_OnlineControl_Correlator"
-#define PST_CORRELATOR	"Correlator"
+// LocusNode
+#define PSN_LOCUS_NODE	"LOFAR_PIC_@osrack@_@locusnode@"
+#define PST_LOCUS_NODE	"LocusNode"
+#define PN_LCN_FREE	"free"
+#define PN_LCN_TOTAL	"total"
+#define PN_LCN_CLAIMED	"claimed"
 
-// StorageAppl
-#define PSN_STORAGE_APPL	"LOFAR_ObsSW_@observation@_OnlineControl_StorageAppl"
-#define PST_STORAGE_APPL	"StorageAppl"
+// CEPHardwareMonitor
+#define PSN_CEP_HARDWARE_MONITOR	"LOFAR_PermSW_HardwareMonitor"
+#define PST_CEP_HARDWARE_MONITOR	"CEPHardwareMonitor"
+#define PN_CHM_BGP_CONNECTED	"BGP.connected"
+#define PN_CHM_CLUSTER_CONNECTED	"Cluster.connected"
 
 // Cabinet
 #define PSN_CABINET	"LOFAR_PIC_@cabinet@"
@@ -217,10 +273,15 @@
 #define PN_RCU_TRIGGER_FILTER	"Trigger.filter"
 #define PN_RCU_TRIGGER_WINDOW	"Trigger.window"
 #define PN_RCU_TRIGGER_OPERATING_MODE	"Trigger.operatingMode"
-#define PN_RCU_TRIGGER_COEFF0	"Trigger.coeff0"
-#define PN_RCU_TRIGGER_COEFF1	"Trigger.coeff1"
-#define PN_RCU_TRIGGER_COEFF2	"Trigger.coeff2"
-#define PN_RCU_TRIGGER_COEFF3	"Trigger.coeff3"
+#define PN_RCU_TRIGGER_TRIGGER_MODE	"Trigger.triggerMode"
+#define PN_RCU_TRIGGER_FILTER0_COEFF0	"Trigger.filter0.coeff0"
+#define PN_RCU_TRIGGER_FILTER0_COEFF1	"Trigger.filter0.coeff1"
+#define PN_RCU_TRIGGER_FILTER0_COEFF2	"Trigger.filter0.coeff2"
+#define PN_RCU_TRIGGER_FILTER0_COEFF3	"Trigger.filter0.coeff3"
+#define PN_RCU_TRIGGER_FILTER1_COEFF0	"Trigger.filter1.coeff0"
+#define PN_RCU_TRIGGER_FILTER1_COEFF1	"Trigger.filter1.coeff1"
+#define PN_RCU_TRIGGER_FILTER1_COEFF2	"Trigger.filter1.coeff2"
+#define PN_RCU_TRIGGER_FILTER1_COEFF3	"Trigger.filter1.coeff3"
 
 // TBBoard
 #define PSN_TB_BOARD	"LOFAR_PIC_@cabinet@_@subrack@_@TBBoard@"
@@ -248,6 +309,88 @@
 #define PN_TBB_IMAGE_INFO_TP_FILE	"imageInfo.TPFile"
 #define PN_TBB_IMAGE_INFO_MP_FILE	"imageInfo.MPFile"
 
+// LBAAntenna
+#define PSN_LBA_ANTENNA	"LOFAR_PIC_@lbaantenna@"
+#define PST_LBA_ANTENNA	"LBAAntenna"
+#define	PN_LBA_COMMON_RCUX	"common.RCUX"
+#define	PN_LBA_COMMON_RCUY	"common.RCUY"
+#define	PN_LBA_COMMON_DELTAX	"common.deltaX"
+#define	PN_LBA_COMMON_DELTAY	"common.deltaY"
+#define	PN_LBA_COMMON_DELTAZ	"common.deltaZ"
+
+// HBAAntenna
+#define PSN_HBA_ANTENNA	"LOFAR_PIC_@hbaantenna@"
+#define PST_HBA_ANTENNA	"HBAAntenna"
+#define	PN_HBA_COMMON_RCUX	"common.RCUX"
+#define	PN_HBA_COMMON_RCUY	"common.RCUY"
+#define	PN_HBA_COMMON_DELTAX	"common.deltaX"
+#define	PN_HBA_COMMON_DELTAY	"common.deltaY"
+#define	PN_HBA_COMMON_DELTAZ	"common.deltaZ"
+#define	PN_HBA_ELEMENT00_STATUS_STATE	"element00.status.state"
+#define	PN_HBA_ELEMENT00_STATUS_CHILD_STATE	"element00.status.childState"
+#define	PN_HBA_ELEMENT00_STATUS_MESSAGE	"element00.status.message"
+#define	PN_HBA_ELEMENT00_STATUS_LEAF	"element00.status.leaf"
+#define	PN_HBA_ELEMENT01_STATUS_STATE	"element01.status.state"
+#define	PN_HBA_ELEMENT01_STATUS_CHILD_STATE	"element01.status.childState"
+#define	PN_HBA_ELEMENT01_STATUS_MESSAGE	"element01.status.message"
+#define	PN_HBA_ELEMENT01_STATUS_LEAF	"element01.status.leaf"
+#define	PN_HBA_ELEMENT02_STATUS_STATE	"element02.status.state"
+#define	PN_HBA_ELEMENT02_STATUS_CHILD_STATE	"element02.status.childState"
+#define	PN_HBA_ELEMENT02_STATUS_MESSAGE	"element02.status.message"
+#define	PN_HBA_ELEMENT02_STATUS_LEAF	"element02.status.leaf"
+#define	PN_HBA_ELEMENT03_STATUS_STATE	"element03.status.state"
+#define	PN_HBA_ELEMENT03_STATUS_CHILD_STATE	"element03.status.childState"
+#define	PN_HBA_ELEMENT03_STATUS_MESSAGE	"element03.status.message"
+#define	PN_HBA_ELEMENT03_STATUS_LEAF	"element03.status.leaf"
+#define	PN_HBA_ELEMENT04_STATUS_STATE	"element04.status.state"
+#define	PN_HBA_ELEMENT04_STATUS_CHILD_STATE	"element04.status.childState"
+#define	PN_HBA_ELEMENT04_STATUS_MESSAGE	"element04.status.message"
+#define	PN_HBA_ELEMENT04_STATUS_LEAF	"element04.status.leaf"
+#define	PN_HBA_ELEMENT05_STATUS_STATE	"element05.status.state"
+#define	PN_HBA_ELEMENT05_STATUS_CHILD_STATE	"element05.status.childState"
+#define	PN_HBA_ELEMENT05_STATUS_MESSAGE	"element05.status.message"
+#define	PN_HBA_ELEMENT05_STATUS_LEAF	"element05.status.leaf"
+#define	PN_HBA_ELEMENT06_STATUS_STATE	"element06.status.state"
+#define	PN_HBA_ELEMENT06_STATUS_CHILD_STATE	"element06.status.childState"
+#define	PN_HBA_ELEMENT06_STATUS_MESSAGE	"element06.status.message"
+#define	PN_HBA_ELEMENT06_STATUS_LEAF	"element06.status.leaf"
+#define	PN_HBA_ELEMENT07_STATUS_STATE	"element07.status.state"
+#define	PN_HBA_ELEMENT07_STATUS_CHILD_STATE	"element07.status.childState"
+#define	PN_HBA_ELEMENT07_STATUS_MESSAGE	"element07.status.message"
+#define	PN_HBA_ELEMENT07_STATUS_LEAF	"element07.status.leaf"
+#define	PN_HBA_ELEMENT08_STATUS_STATE	"element08.status.state"
+#define	PN_HBA_ELEMENT08_STATUS_CHILD_STATE	"element08.status.childState"
+#define	PN_HBA_ELEMENT08_STATUS_MESSAGE	"element08.status.message"
+#define	PN_HBA_ELEMENT08_STATUS_LEAF	"element08.status.leaf"
+#define	PN_HBA_ELEMENT09_STATUS_STATE	"element09.status.state"
+#define	PN_HBA_ELEMENT09_STATUS_CHILD_STATE	"element09.status.childState"
+#define	PN_HBA_ELEMENT09_STATUS_MESSAGE	"element09.status.message"
+#define	PN_HBA_ELEMENT09_STATUS_LEAF	"element09.status.leaf"
+#define	PN_HBA_ELEMENT10_STATUS_STATE	"element10.status.state"
+#define	PN_HBA_ELEMENT10_STATUS_CHILD_STATE	"element10.status.childState"
+#define	PN_HBA_ELEMENT10_STATUS_MESSAGE	"element10.status.message"
+#define	PN_HBA_ELEMENT10_STATUS_LEAF	"element10.status.leaf"
+#define	PN_HBA_ELEMENT11_STATUS_STATE	"element11.status.state"
+#define	PN_HBA_ELEMENT11_STATUS_CHILD_STATE	"element11.status.childState"
+#define	PN_HBA_ELEMENT11_STATUS_MESSAGE	"element11.status.message"
+#define	PN_HBA_ELEMENT11_STATUS_LEAF	"element11.status.leaf"
+#define	PN_HBA_ELEMENT12_STATUS_STATE	"element12.status.state"
+#define	PN_HBA_ELEMENT12_STATUS_CHILD_STATE	"element12.status.childState"
+#define	PN_HBA_ELEMENT12_STATUS_MESSAGE	"element12.status.message"
+#define	PN_HBA_ELEMENT12_STATUS_LEAF	"element12.status.leaf"
+#define	PN_HBA_ELEMENT13_STATUS_STATE	"element13.status.state"
+#define	PN_HBA_ELEMENT13_STATUS_CHILD_STATE	"element13.status.childState"
+#define	PN_HBA_ELEMENT13_STATUS_MESSAGE	"element13.status.message"
+#define	PN_HBA_ELEMENT13_STATUS_LEAF	"element13.status.leaf"
+#define	PN_HBA_ELEMENT14_STATUS_STATE	"element14.status.state"
+#define	PN_HBA_ELEMENT14_STATUS_CHILD_STATE	"element14.status.childState"
+#define	PN_HBA_ELEMENT14_STATUS_MESSAGE	"element14.status.message"
+#define	PN_HBA_ELEMENT14_STATUS_LEAF	"element14.status.leaf"
+#define	PN_HBA_ELEMENT15_STATUS_STATE	"element15.status.state"
+#define	PN_HBA_ELEMENT15_STATUS_CHILD_STATE	"element15.status.childState"
+#define	PN_HBA_ELEMENT15_STATUS_MESSAGE	"element15.status.message"
+#define	PN_HBA_ELEMENT15_STATUS_LEAF	"element15.status.leaf"
+
 // LogProcessor
 #define PSN_LOG_PROCESSOR	"LOFAR_PermSW_Daemons_LogProcessor"
 #define PST_LOG_PROCESSOR	"LogProcessor"
@@ -285,25 +428,15 @@
 #define PN_CLC_REQUESTED_BITMODE	"requestedBitmode"
 #define PN_CLC_ACTUAL_BITMODE	"actualBitmode"
 
-// Antenna
-#define PSN_ANTENNA	"@antenna@"
-#define PST_ANTENNA	"Antenna"
-#define	PN_ANT_STATUS_STATE	"status.state"
-#define	PN_ANT_STATUS_CHILD_STATE	"status.childState"
-#define	PN_ANT_STATUS_MESSAGE	"status.message"
-#define	PN_ANT_STATUS_LEAF	"status.leaf"
-#define PN_ANT_RCUX	"RCUX"
-#define PN_ANT_RCUY	"RCUY"
-#define PN_ANT_DELTAX	"deltaX"
-#define PN_ANT_DELTAY	"deltaY"
-#define PN_ANT_DELTAH	"deltaH"
-
 // StnObservation
 #define PSN_STN_OBSERVATION	"LOFAR_ObsSW_@observation@"
 #define PST_STN_OBSERVATION	"StnObservation"
 #define PN_OBS_NAME	"name"
 #define	PN_OBS_CLAIM_CLAIM_DATE	"claim.claimDate"
 #define	PN_OBS_CLAIM_NAME	"claim.name"
+#define PN_OBS_RECEIVER_BITMAP	"receiverBitmap"
+#define PN_OBS_LBA_BITMAP	"LBAbitmap"
+#define PN_OBS_HBA_BITMAP	"HBAbitmap"
 
 // BeamControl
 #define PSN_BEAM_CONTROL	"LOFAR_ObsSW_@observation@_BeamControl"
@@ -340,5 +473,6 @@
 #define PN_TBC_TRIGGER_PEAK_VALUE	"trigger.peakValue"
 #define PN_TBC_TRIGGER_FLAGS	"trigger.flags"
 #define PN_TBC_TRIGGER_TABLE	"trigger.table"
+#define PN_TBC_TRIGGER_MISSED	"trigger.missed"
 
 #endif
diff --git a/MAC/APL/StationCU/src/StationControl/StationControl.cc b/MAC/APL/StationCU/src/StationControl/StationControl.cc
index d1e82693d38aa9c5ff3f9ccae3a0c0fb77325aa6..253c9e06d70aa7ab1ea502a6f3845ee4ad46a6ef 100644
--- a/MAC/APL/StationCU/src/StationControl/StationControl.cc
+++ b/MAC/APL/StationCU/src/StationControl/StationControl.cc
@@ -27,11 +27,13 @@
 #include <Common/LofarLogger.h>
 #include <Common/LofarLocators.h>
 #include <Common/LofarConstants.h>
+#include <Common/StreamUtil.h>
 #include <Common/SystemUtil.h>
 #include <Common/Version.h>
 #include <ApplCommon/LofarDirs.h>
 #include <ApplCommon/StationConfig.h>
 #include <ApplCommon/StationInfo.h>
+#include <ApplCommon/AntennaSets.h>
 
 #include <Common/ParameterSet.h>
 #include <GCF/PVSS/GCF_PVTypes.h>
@@ -124,8 +126,8 @@ StationControl::StationControl(const string&	cntlrName) :
 	itsRCUmask.reset();
 	itsTBmask.reset();
 
-	LOG_DEBUG_STR("sizeof itsLBArcumask: " << itsLBArcumask.size());
-	LOG_DEBUG_STR("sizeof itsHBArcumask: " << itsHBArcumask.size());
+	LOG_DEBUG_STR("sizeof itsLBAmask: " << itsLBAmask.size());
+	LOG_DEBUG_STR("sizeof itsHBAmask: " << itsHBAmask.size());
 	LOG_DEBUG_STR("sizeof itsRCUmask: " << itsRCUmask.size());
 	LOG_DEBUG_STR("sizeof itsTBmask: "  << itsTBmask.size());
 }
@@ -1033,6 +1035,7 @@ void StationControl::_handleQueryEvent(GCFEvent& event)
 {
 	LOG_TRACE_FLOW_STR ("_handleQueryEvent:" << eventName(event));
 	
+	// Check for errors
 	DPQueryChangedEvent		DPevent(event);
 	if (DPevent.result != SA_NO_ERROR) {
 		LOG_ERROR_STR("PVSS reported error " << DPevent.result << " for a query " << 
@@ -1040,6 +1043,7 @@ void StationControl::_handleQueryEvent(GCFEvent& event)
 		return;
 	}
 
+	// Remember Query ID if not done before.
 	if (!itsStateQryID) {
 		itsStateQryID = DPevent.QryID;
 	}
@@ -1047,6 +1051,7 @@ void StationControl::_handleQueryEvent(GCFEvent& event)
 	// The selected datapoints are delivered with full PVSS names, like:
 	// CS001:LOFAR_PIC_Cabinet0_Subrack0_RSPBoard0_RCU5.status.state
 	// CS001:LOFAR_PIC_Cabinet0_Subrack0_RSPBoard0.splitterOn
+	// CS001:LOFAR_PIC_LBA000.status.state
 	// Each event may contain more than one DP.
 	int     nrDPs = ((GCFPVDynArr*)(DPevent.DPnames._pValue))->getValue().size();
 	GCFPVDynArr*    DPnames  = (GCFPVDynArr*)(DPevent.DPnames._pValue);
@@ -1063,14 +1068,65 @@ void StationControl::_handleQueryEvent(GCFEvent& event)
 
 		LOG_DEBUG_STR("QryUpdate: DP=" << nameStr << ", value=" << newState);
 
+		// test for LBA
+		if ((pos = nameStr.find("PIC_LBA")) != string::npos) {
+			uint		antNr;
+			if (sscanf(nameStr.substr(pos).c_str(), "PIC_LBA%u.status.state", &antNr) != 1) {
+				LOG_ERROR_STR("Cannot determine address of " << nameStr << 
+								". AVAILABILITY OF ANTENNA'S MIGHT NOT BE UP TO DATE ANYMORE");
+				continue;
+			}
+			if (antNr >= itsNrLBAs) {
+				LOG_ERROR_STR("LBA antenna number " << antNr << " is out of range!!!");
+				continue;
+			}
+
+			LOG_INFO_STR("New state of LBA " << antNr << " is " << newState);
+			// LBA's in de mode OFF and OPERATIONAL may be used in observations.
+			if (newState == modeOff || newState == modeOperational) {
+				itsLBAmask.set(antNr);
+			}
+			else {	// all other modes
+				itsLBAmask.reset(antNr);
+			}
+		} // PIC_LBA
+
+		// test for HBA
+		if ((pos = nameStr.find("PIC_HBA")) != string::npos) {
+			uint		antNr;
+			if (sscanf(nameStr.substr(pos).c_str(), "PIC_HBA%u.status.state", &antNr) != 1) {
+				LOG_ERROR_STR("Cannot determine address of " << nameStr << 
+								". AVAILABILITY OF ANTENNA'S MIGHT NOT BE UP TO DATE ANYMORE");
+				continue;
+			}
+			if (antNr >= itsNrHBAs) {
+				LOG_ERROR_STR("HBA antenna number " << antNr << " is out of range!!!");
+				continue;
+			}
+
+			LOG_INFO_STR("New state of HBA " << antNr << " is " << newState);
+			// HBA's in de mode OFF and OPERATIONAL may be used in observations.
+			if (newState == modeOff || newState == modeOperational) {
+				itsHBAmask.set(antNr);
+			}
+			else {	// all other modes
+				itsHBAmask.reset(antNr);
+			}
+		} // PIC_HBA
+
 		// test for RCU
 		if ((pos = nameStr.find("_RCU")) != string::npos) {
-			int		rcu;
-			if (sscanf(nameStr.substr(pos).c_str(), "_RCU%d.status.state", &rcu) != 1) {
+			uint		rcu;
+			if (sscanf(nameStr.substr(pos).c_str(), "_RCU%u.status.state", &rcu) != 1) {
 				LOG_ERROR_STR("Cannot determine address of " << nameStr << 
 								". AVAILABILITY OF ANTENNA'S MIGHT NOT BE UP TO DATE ANYMORE");
 				continue;
 			}
+			if (rcu >= itsNrRCUs) {
+				LOG_ERROR_STR("RCU number " << rcu << " is out of range!!!");
+				continue;
+			}
+
 			LOG_INFO_STR("New state of RCU " << rcu << " is " << newState);
 			// RCU's in de mode OFF and OPERATIONAL may be used in observations.
 			if (newState == modeOff || newState == modeOperational) {
@@ -1079,13 +1135,17 @@ void StationControl::_handleQueryEvent(GCFEvent& event)
 			else {	// all other modes
 				itsRCUmask.reset(rcu);
 			}
-		}
+		} // _RCU
 
 		// test for RSPBoard
 		else if ((pos = nameStr.find("_RSPBoard")) != string::npos) {
-			int		rsp;
+			uint		rsp;
 			if (nameStr.find(".status.state") != string::npos) {
-				if (sscanf(nameStr.substr(pos).c_str(), "_RSPBoard%d.status.state", &rsp) == 1) {
+				if (sscanf(nameStr.substr(pos).c_str(), "_RSPBoard%u.status.state", &rsp) == 1) {
+					if (rsp >= itsNrRSPs) {
+						LOG_ERROR_STR("RSP board number " << rsp << " is out of range!!!");
+						continue;
+					}
 					LOG_INFO_STR("New state of RSPBoard " << rsp << " is " << newState);
 					int rcubase = rsp * NR_RCUS_PER_RSPBOARD;
 					for (int i = 0; i < NR_RCUS_PER_RSPBOARD; i++) {
@@ -1104,7 +1164,11 @@ void StationControl::_handleQueryEvent(GCFEvent& event)
 					itsSplitterQryID = DPevent.QryID;
 				}
 
-				if (sscanf(nameStr.substr(pos).c_str(), "_RSPBoard%d.splitterOn", &rsp) == 1) {
+				if (sscanf(nameStr.substr(pos).c_str(), "_RSPBoard%u.splitterOn", &rsp) == 1) {
+					if (rsp >= itsNrRSPs) {
+						LOG_ERROR_STR("RSP boardnumber " << rsp << " is out of range!!!");
+						continue;
+					}
 					if (itsSplitters[rsp] != (newState ? true : false)) {
 						LOG_INFO_STR("New setting of splitter " << rsp << " is " << (newState ? "on" : "off"));
 						if (newState) {
@@ -1121,16 +1185,20 @@ void StationControl::_handleQueryEvent(GCFEvent& event)
 								". STATE OF ANTENNA'S OR SPLITTERS MIGHT NOT BE UP TO DATE ANYMORE");
 				continue;
 			}
-		}
+		} // _RSPBoard
 
 		// test for TBBoard
 		else if ((pos = nameStr.find("_TBBoard")) != string::npos) {
-			int		tbb;
-			if (sscanf(nameStr.substr(pos).c_str(), "_TBBoard%d.status.state", &tbb) != 1) {
+			uint		tbb;
+			if (sscanf(nameStr.substr(pos).c_str(), "_TBBoard%u.status.state", &tbb) != 1) {
 				LOG_ERROR_STR("Cannot determine address of " << nameStr << 
 								". AVAILABILITY OF TBBOARD'S MIGHT NOT BE UP TO DATE ANYMORE");
 				continue;
 			}
+			if (tbb >= itsNrTBBs) {
+				LOG_ERROR_STR("TB boardnumber " << tbb << " is out of range!!!");
+				continue;
+			}
 			LOG_INFO_STR("New state of TBBoard " << tbb << " is " << newState);
 			if (newState != RTDB_OBJ_STATE_OPERATIONAL) {
 				itsTBmask.reset(tbb);
@@ -1138,14 +1206,17 @@ void StationControl::_handleQueryEvent(GCFEvent& event)
 			else {
 				itsTBmask.set(tbb);
 			}
-		}
+		} // _TBBoard
 
 		else {
 			LOG_DEBUG_STR("State of unknown component received: " << nameStr);
 		}
 	} // for
 
-	_updateAntennaMasks();	// translate new RCU mask to the LBA and HBA masks.
+	if (itsHasSplitters && itsSplitters.count() != 0 && itsSplitters.count() != itsNrRSPs) {
+		LOG_WARN_STR("Not all splitters have the same state! " << itsSplitters);
+		// TODO: ring some bells in the Navigator?
+	}
 }
 
 
@@ -1191,16 +1262,49 @@ uint16 StationControl::_addObservation(const string&	name)
 	// As base we use the definition of the AntennaSetsfile which we limit to the
 	// receivers specified by the user (if any). Finally we can optionally correct
 	// this set with the 'realtime' availability of the receivers.
-	StationConfig			config;
-	Observation::RCUset_t	definedReceivers = itsAntSet->RCUallocation(theObs.antennaSet);
-	Observation::RCUset_t	userReceivers    = theObs.getRCUbitset(config.nrLBAs, config.nrHBAs, theObs.antennaSet);
-	Observation::RCUset_t	realReceivers    = definedReceivers & userReceivers;
+	StationConfig	config;
+	bool			onLBAField(itsAntSet->usesLBAfield(theObs.antennaSet));
+	RCUmask_t		definedReceivers = (onLBAField ? itsAntSet->LBAallocation(theObs.antennaSet) 
+									 			   : itsAntSet->HBAallocation(theObs.antennaSet));
+	RCUmask_t		userReceivers    = theObs.getRCUbitset(config.nrLBAs, config.nrHBAs, theObs.antennaSet);
+	RCUmask_t		realReceivers    = definedReceivers & userReceivers;
 LOG_DEBUG_STR("definedReceivers =" << definedReceivers);
 LOG_DEBUG_STR("userReceivers    =" << userReceivers);
 LOG_DEBUG_STR("def&userReceivers=" << realReceivers);
+	// Before optionally applying the current hardware status make bitmap strings for PVSS.
+	string		LBAbitmap;
+	string		HBAbitmap;
+	LBAbitmap.resize(config.nrLBAs,'0');
+	HBAbitmap.resize(config.nrHBAs,'0');
+	if (onLBAField) {
+		for (int i(0); i < config.nrLBAs; i++) {
+			if (realReceivers[2*i] || realReceivers[2*i+1]) {
+				LBAbitmap[i] ='1';
+			}
+		}
+	} 
+	else  {
+		for (int i(0); i < config.nrHBAs; i++) {
+			if (realReceivers[2*i] || realReceivers[2*i+1]) {
+				HBAbitmap[i] ='1';
+			}
+		}
+	}
+
 	// apply the current state of the hardware to the desired selection when user likes that.
 	if (itsUseHWinfo) {
-		realReceivers &= itsRCUmask;
+		vector<int>		*mappingPtr = onLBAField ? &itsLBAmapping : &itsHBAmapping;
+		AntennaMask_t	antBitSet   = onLBAField ? itsLBAmask     : itsHBAmask;
+		for (int rcu = 0; rcu < MAX_RCUS; rcu++) {
+			int		idx((*mappingPtr)[rcu]);
+			if (!realReceivers[rcu] || idx<0 || !antBitSet[idx]) {
+				realReceivers.reset(rcu);
+				if (idx >= 0 && !antBitSet[idx]) {
+					LOG_INFO_STR("Rejecting RCU " << rcu << " because Antenna is out of order");
+				}
+			}
+		}
+LOG_DEBUG_STR("final receivers   =" << realReceivers);
 		// Write the corrected set back into the ParameterSetfile.
 		string prefix = theObsPS.locateModule("Observation") + "Observation.";
 		// save original under different name (using 'replace' is 'add' w. simplified testing)
@@ -1216,7 +1320,7 @@ LOG_DEBUG_STR("def&userReceivers=" << realReceivers);
 
 
 	// create an activeObservation object that will manage the child controllers.
-	ActiveObs*	theNewObs = new ActiveObs(name, (State)&ActiveObs::initial, &theObsPS, itsHasSplitters, *this);
+	ActiveObs*	theNewObs = new ActiveObs(name, (State)&ActiveObs::initial, &theObsPS, LBAbitmap, HBAbitmap, itsHasSplitters, *this);
 	if (!theNewObs) {
 		LOG_FATAL_STR("Unable to create the Observation '" << name << "'");
 		return (CT_RESULT_UNSPECIFIED);
@@ -1300,27 +1404,48 @@ void StationControl::_abortObsWithWrongBitmode()
 void StationControl::_initAntennaMasks()
 {
 	// reset all variables
-	itsLBArcumask.reset();
-	itsHBArcumask.reset();
+	itsLBAmask.reset();
+	itsHBAmask.reset();
 
 	// Adopt values from RemoteStation.conf
 	StationConfig	SC;
-	itsNrRSPboards = SC.nrRSPs;
-	itsNrLBAs 	   = SC.nrLBAs;
-	itsNrHBAs 	   = SC.nrHBAs;
+	itsNrRSPs = SC.nrRSPs;
+	itsNrTBBs = SC.nrRSPs;
+	itsNrLBAs = SC.nrLBAs;
+	itsNrHBAs = SC.nrHBAs;
+	itsNrRCUs = SC.nrRSPs * NR_RCUS_PER_RSPBOARD;
 	itsHasSplitters= SC.hasSplitters;
 
-	ASSERTSTR (2*itsNrLBAs <= itsLBArcumask.size() && 
-			   2*itsNrHBAs <= itsHBArcumask.size(), "Number of antennas exceed expected count");
-
-	// set the right bits.
-	for (uint i = 0; i < itsNrLBAs; i++) {
-		itsLBArcumask.set(2*i);
-		itsLBArcumask.set(2*i+1);
-	}   
-	for (uint i = 0; i < itsNrHBAs; i++) {
-		itsHBArcumask.set(2*i);
-		itsHBArcumask.set(2*i+1);
+	ASSERTSTR (itsNrLBAs <= itsLBAmask.size() && 
+			   itsNrHBAs <= itsHBAmask.size(), "Number of antennas exceed expected count");
+
+	// Setup mapping from LBA antennas and HBA antennas to RCU numbers.
+	// itsxBAmapping(antNr,*) contains the
+	itsLBAmapping.resize(MAX_RCUS, -1);		// 192
+	itsHBAmapping.resize(MAX_RCUS, -1);
+	for (int ant  = 0; ant < (int)MAX_ANTENNAS; ant++) {
+		if (ant < (int)itsNrHBAs) {
+			itsHBAmapping[N_POL*ant]   = ant;
+			itsHBAmapping[N_POL*ant+1] = ant;
+		}
+		if (ant < (int)itsNrLBAs) {
+			if (ant > (int)itsNrRSPs * (int)NR_ANTENNAS_PER_RSPBOARD) {
+				itsLBAmapping[N_POL*ant+1 - (NR_RCUS_PER_RSPBOARD*itsNrRSPs)] = ant;
+				itsLBAmapping[N_POL*ant   - (NR_RCUS_PER_RSPBOARD*itsNrRSPs)] = ant;
+			}
+			else {
+				itsLBAmapping[N_POL*ant]   = ant;
+				itsLBAmapping[N_POL*ant+1] = ant;
+			}
+		}
+	}
+	 {	stringstream	oss;
+		writeVector(oss, itsLBAmapping);
+		LOG_DEBUG_STR("LBAmap: " << oss.str());
+	}
+	{	stringstream	oss;
+		writeVector(oss, itsHBAmapping);
+		LOG_DEBUG_STR("HBAmap: " << oss.str());
 	}
 
 	// The masks are now initialized with the static information. The _handleQueryEvent routine
@@ -1328,51 +1453,6 @@ void StationControl::_initAntennaMasks()
 	// correct and latest state.
 }       
 
-//
-// _updateAntennaMasks()
-//
-// Translates the RCU mask to the LBA and HBA masks.
-// This routine is familiar with mapping of the antennas on the RCU's.
-//
-void StationControl::_updateAntennaMasks()
-{
-	// setup constants
-	bool	doubleMappedLBA    (itsNrLBAs > (itsNrRSPboards * NR_ANTENNAS_PER_RSPBOARD));
-	int		doubleMapRCUoffset (itsNrRSPboards * NR_RCUS_PER_RSPBOARD);
-
-	// Note: the definition in StationControl.h and the ASSERT in _initAntennaMasks assure
-	//		 that we never exceed the boundaries of the bitmaps here.
-	for (int rcu = 0; rcu < MAX_RCUS/2 ; rcu+=2) {
-		if (itsRCUmask[rcu] && itsRCUmask[rcu+1]) {		// X and Y
-			itsLBArcumask.set(rcu);
-			itsLBArcumask.set(rcu+1);
-			if (doubleMappedLBA) {
-				itsLBArcumask.set(doubleMapRCUoffset+rcu);
-				itsLBArcumask.set(doubleMapRCUoffset+rcu+1);
-			}
-			itsHBArcumask.set(rcu);
-			itsHBArcumask.set(rcu+1);
-		}
-		else {
-			itsLBArcumask.reset(rcu);
-			itsLBArcumask.reset(rcu+1);
-			if (doubleMappedLBA) {
-				itsLBArcumask.reset(doubleMapRCUoffset+rcu);
-				itsLBArcumask.reset(doubleMapRCUoffset+rcu+1);
-			}
-			itsHBArcumask.reset(rcu);
-			itsHBArcumask.reset(rcu+1);
-		}
-	}
-	LOG_DEBUG_STR("itsRCU:" << string(itsRCUmask.to_string<char,char_traits<char>,allocator<char> >()));
-	LOG_DEBUG_STR("itsLBA:" << string(itsLBArcumask.to_string<char,char_traits<char>,allocator<char> >()));
-	LOG_DEBUG_STR("itsHBA:" << string(itsHBArcumask.to_string<char,char_traits<char>,allocator<char> >()));
-
-	if (itsHasSplitters && itsSplitters.count() != 0 && itsSplitters.count() != itsNrRSPboards) {
-		LOG_WARN_STR("Not all splitters have the same state! " << itsSplitters);
-		// TODO: ring some bells in the Navigator?
-	}
-}
 
 //
 // _searchObsByTimerID(timerID)
diff --git a/MAC/APL/StationCU/src/StationControl/StationControl.h b/MAC/APL/StationCU/src/StationControl/StationControl.h
index ffa9cf29e57443bbaa518ccfade818eb45d3467f..b5eef6b10eed442e898b91757fcae7d167783df7 100644
--- a/MAC/APL/StationCU/src/StationControl/StationControl.h
+++ b/MAC/APL/StationCU/src/StationControl/StationControl.h
@@ -31,6 +31,7 @@
 #include <Common/LofarConstants.h>
 #include <ApplCommon/Observation.h>
 #include <ApplCommon/AntennaSets.h>
+#include <ApplCommon/StationDatatypes.h>
 
 //# ACC Includes
 #include <Common/ParameterSet.h>
@@ -96,7 +97,6 @@ private:
 
 	// helper methods
 	void	_initAntennaMasks	 ();
-	void	_updateAntennaMasks  ();
 	void	_updateObsListInPVSS ();
 	uint16	_addObservation		 (const string&   	name);
 	void	_abortObservation	 (ObsIter			theObs);
@@ -145,16 +145,19 @@ private:
 
 	// Availability information of Antenna's and circuit boards.
 	bool									itsUseHWinfo;
-	bitset<MAX_RCUS>						itsLBArcumask;
-	bitset<MAX_RCUS>						itsHBArcumask;
-	bitset<MAX_RCUS>						itsRCUmask;
+	RCUmask_t								itsRCUmask;
+	AntennaMask_t							itsLBAmask;
+	AntennaMask_t							itsHBAmask;
 	bitset<MAX_RCUS / NR_RCUS_PER_TBBOARD>	itsTBmask;
 	uint32									itsNrLBAs;
 	uint32									itsNrHBAs;
-	uint32									itsNrRSPboards;
+	uint32									itsNrRCUs;
+	uint32									itsNrRSPs;
+	uint32									itsNrTBBs;
 	bool									itsHasSplitters;
 	bitset<MAX_RSPBOARDS>					itsSplitters;	// On or Off.
-
+	vector<int>								itsLBAmapping;
+	vector<int>								itsHBAmapping;
     unsigned                                itsSetupSequence;
 };
 
diff --git a/MAC/APL/StationCU/src/StationControl/StationControlMain.cc b/MAC/APL/StationCU/src/StationControl/StationControlMain.cc
index 9773aeab40014c879ed669504914f30d1c0996ac..38ff113ea9e627c501b9ae2e5eaa6a946e4f8969 100644
--- a/MAC/APL/StationCU/src/StationControl/StationControlMain.cc
+++ b/MAC/APL/StationCU/src/StationControl/StationControlMain.cc
@@ -22,7 +22,6 @@
 //#
 #include <lofar_config.h>
 #include <Common/LofarLogger.h>
-#include <Common/Exception.h>
 #include <Common/SystemUtil.h>
 #include <APL/APLCommon/ChildControl.h>
 #include <APL/APLCommon/ParentControl.h>
@@ -34,9 +33,6 @@ using namespace LOFAR::GCF::TM;
 using namespace LOFAR::APLCommon;
 using namespace LOFAR::StationCU;
 
-// Use a terminate handler that can produce a backtrace.
-Exception::TerminateHandler t(Exception::terminate);
-
 int main(int argc, char* argv[])
 {
 	using LOFAR::basename;