diff --git a/MAC/APL/PAC/IBS_Protocol/src/IBS_Protocol.prot b/MAC/APL/PAC/IBS_Protocol/src/IBS_Protocol.prot
index 821831ecaf96d5ef57ff2edb86b5ba2fc8f8e06d..747a98b738b0da2f19d0d3700f82fb137ec95246 100644
--- a/MAC/APL/PAC/IBS_Protocol/src/IBS_Protocol.prot
+++ b/MAC/APL/PAC/IBS_Protocol/src/IBS_Protocol.prot
@@ -132,7 +132,12 @@ event = {
 		type = "string";
 	};
 
-	// how the subbands should be allocated to which beamlets
+    param = {
+		name = "band";
+		type = "string";
+	};
+
+    // how the subbands should be allocated to which beamlets
 	// e.g.
 	// beamlet 0 -> subband 384
 	// beamlet 1 -> subband 385
@@ -157,10 +162,10 @@ event = {
 	};
 
 	// NEW: temporarely(?) for selecting the right calibrationTable.
-	param = {
-		name = "rcuMode";
-		type = "uint32";
-	};
+	//param = {
+	//	name = "rcuMode";
+	//	type = "uint32";
+	//};
 };
 
 event = {
@@ -189,7 +194,7 @@ event = {
 		name = "beamName";
 		type = "string";
 	};
-	
+
 	// New mapping of beamlets to subbands, the left-hand side of
 	// the mapping (the beamlets) must be identical to the left-hand
 	// side of the mapping specified in the BEAMALLOC event.
@@ -205,7 +210,7 @@ event = {
 event = {
 	signal = BEAMMODIFYACK;
 	dir = OUT;
-	
+
 	// handle
 	param = {
 		name = "beamName";
diff --git a/MAC/APL/PAC/ITRFBeamServer/src/AnalogueBeam.cc b/MAC/APL/PAC/ITRFBeamServer/src/AnalogueBeam.cc
index 7407bc8648598b5b81ec3e1860b3c4d357c1105a..6ee517809e421faa6016065c1095d771e4c9a91a 100644
--- a/MAC/APL/PAC/ITRFBeamServer/src/AnalogueBeam.cc
+++ b/MAC/APL/PAC/ITRFBeamServer/src/AnalogueBeam.cc
@@ -46,11 +46,12 @@ using namespace RTC;
 //
 // AnalogueBeam(name, subarray, nrSubbands)
 //
-AnalogueBeam::AnalogueBeam(const string& 			name, 
-						   const string&			antennaSet,
+AnalogueBeam::AnalogueBeam(const string& 			name,
+						   const string&			antennaSetName,
+						   const string&			bandName,
 						   const bitset<MAX_RCUS>&	rcuMask,
 						   uint						rankNr) :
-	Beam		(name, antennaSet, rcuMask),
+	Beam		(name, antennaSetName, bandName, rcuMask),
 	itsRankNr	(rankNr)
 {}
 
diff --git a/MAC/APL/PAC/ITRFBeamServer/src/AnalogueBeam.h b/MAC/APL/PAC/ITRFBeamServer/src/AnalogueBeam.h
index 4e0e8974c860db46cc27de2051d9a470694c0cc3..26ad1165bb7a911cf674d113be88459bf9105777 100644
--- a/MAC/APL/PAC/ITRFBeamServer/src/AnalogueBeam.h
+++ b/MAC/APL/PAC/ITRFBeamServer/src/AnalogueBeam.h
@@ -39,8 +39,9 @@ public:
 	// key-value logger as nodeid.
 	// @param rcuMask The RCUs that participate in this beam.
 	// @param ringNr The serdes segment the allocation is ment for.
-	AnalogueBeam(const string& 				name, 
-				 const string&				antennaSet,
+	AnalogueBeam(const string& 				name,
+				 const string&				antennaSetName,
+				 const string&				bandName,
 				 const bitset<MAX_RCUS>&	rcuMask,
 				 uint 						rankNr);
 	AnalogueBeam() : itsRankNr(0) {};
diff --git a/MAC/APL/PAC/ITRFBeamServer/src/Beam.cc b/MAC/APL/PAC/ITRFBeamServer/src/Beam.cc
index 1389c2ce7d5c4a28302724aad0f455384ad8d951..1387e6c94909ef842ef9faa54b8166bf4bc6b164 100644
--- a/MAC/APL/PAC/ITRFBeamServer/src/Beam.cc
+++ b/MAC/APL/PAC/ITRFBeamServer/src/Beam.cc
@@ -34,11 +34,13 @@ using namespace std;
 //
 // Beam(name, rcuMask)
 //
-Beam::Beam(const string& 				name, 
+Beam::Beam(const string& 				name,
 		   const string&				antennaSet,
+		   const string&				band,
 		   const bitset<MAX_RCUS>&		rcuMask) :
-	itsName		 (name), 
+	itsName		 (name),
 	itsAntennaSet(antennaSet),
+	itsBand      (band),
 	itsRCUs		 (rcuMask)
 {}
 
@@ -71,7 +73,7 @@ void Beam::_resolveGaps()
 			++iter;
 		}
 	}
-	
+
 	// Loop over the new list and fill the gaps again.
 	iter = itsPointings.begin();
 	end  = itsPointings.end();
@@ -82,7 +84,7 @@ void Beam::_resolveGaps()
 			Pointing	nilPointing(0.0 ,0.0, "NONE", endTime, int(iter->time()-endTime.sec()));
 			itsPointings.insert(iter, nilPointing);
 		}
-			
+
 		if (iter->duration() == 0) {		// current pointings lasts forever?, delete rest of pointings.
 			itsPointings.erase(++iter, end);
 			return;
@@ -108,7 +110,7 @@ bool Beam::_pointingOverlaps(const IBS_Protocol::Pointing& pt) const
 			return (true);
 		}
 		++iter;
-	}       
+	}
 
 	return (false);
 }
@@ -147,7 +149,7 @@ Pointing Beam::pointingAtTime(const Timestamp& time)
 	}
 
 	// if nothing found, return NIL pointing
-	if (iter == end) {			
+	if (iter == end) {
 		return (Pointing());
 	}
 
diff --git a/MAC/APL/PAC/ITRFBeamServer/src/Beam.h b/MAC/APL/PAC/ITRFBeamServer/src/Beam.h
index 0e825d3d0cd12a3800bcb0ef94b730896f605081..85ef3ee8c3c424aa4d4e17d919b3ef055d5bea76 100644
--- a/MAC/APL/PAC/ITRFBeamServer/src/Beam.h
+++ b/MAC/APL/PAC/ITRFBeamServer/src/Beam.h
@@ -44,8 +44,9 @@ public:
 	// @param name String identifying this beam uniquely in the OTDB, used with
 	// key-value logger as nodeid.
 	// @param rcuMask The RCUs that participate in this beam.
-	Beam(const string& 				name, 
+	Beam(const string& 				name,
 		 const string&				antennaSet,
+		 const string&				band,
 		 const bitset<MAX_RCUS>&	rcuMask);
 	Beam() {};
 
@@ -56,7 +57,7 @@ public:
 	int addPointing(const IBS_Protocol::Pointing& pointing);
 
 	// @return Current pointing.
-	IBS_Protocol::Pointing currentPointing() const { return (itsCurrentPointing); } 
+	IBS_Protocol::Pointing currentPointing() const { return (itsCurrentPointing); }
 
 	// @return Current pointing.
 	IBS_Protocol::Pointing pointingAtTime(const RTC::Timestamp& time);
@@ -70,6 +71,9 @@ public:
 	// Get the name of the subarray on which this beam operates.
 	string antennaSetName() const { return (itsAntennaSet); }
 
+    // Get the name of the band on which this beam operates.
+	string bandName() const { return (itsBand); }
+
 	// Get beam name (unique name, can be used as key in key-value logger).
 	const bitset<MAX_RCUS>& rcuMask() const { return (itsRCUs); }
 
@@ -97,6 +101,9 @@ private:
 	// Name of the AntennaSet the beam is allocated on.
 	string 		itsAntennaSet;
 
+    // Name of the AntennaSet the beam is allocated on.
+	string 		itsBand;
+
 	// RCUs participating in the beam
 	bitset<MAX_RCUS>		itsRCUs;
 
diff --git a/MAC/APL/PAC/ITRFBeamServer/src/BeamServer.cc b/MAC/APL/PAC/ITRFBeamServer/src/BeamServer.cc
index ab50479090c1a2b95f3b64e25f43a4de889d77ef..d530ee62d53ecbe7110091d575e93ce2193c7188 100644
--- a/MAC/APL/PAC/ITRFBeamServer/src/BeamServer.cc
+++ b/MAC/APL/PAC/ITRFBeamServer/src/BeamServer.cc
@@ -79,11 +79,21 @@ BeamServer::BeamServer(const string& name, long	timestamp) :
 	itsCalServer			(0),
 	itsBeamsModified		(false),
 	itsAnaBeamMgr			(0),
-	itsCalTableMode1		(0),
-	itsCalTableMode3		(0),
-	itsCalTableMode5		(0),
-	itsCalTableMode6		(0),
-	itsCalTableMode7		(0),
+    itsCalTable_LBA_INNER_10_90       (0),
+    itsCalTable_LBA_INNER_30_90       (0),
+    itsCalTable_LBA_OUTER_10_90       (0),
+    itsCalTable_LBA_OUTER_30_90       (0),
+    itsCalTable_LBA_SPARSE_EVEN_10_90 (0),
+    itsCalTable_LBA_SPARSE_EVEN_30_90 (0),
+    itsCalTable_LBA_SPARSE_ODD_10_90  (0),
+    itsCalTable_LBA_SPARSE_ODD_30_90  (0),
+    itsCalTable_LBA_X_10_90           (0),
+    itsCalTable_LBA_X_30_90           (0),
+    itsCalTable_LBA_Y_10_90           (0),
+    itsCalTable_LBA_Y_30_90           (0),
+    itsCalTable_HBA_110_190           (0),
+    itsCalTable_HBA_170_230           (0),
+    itsCalTable_HBA_210_250           (0),
 	itsUpdateInterval		(0),
 	itsComputeInterval		(0),
 	itsHBAUpdateInterval	(0),
@@ -145,11 +155,21 @@ BeamServer::BeamServer(const string& name, long	timestamp) :
 	// read static calibrationtables if available
 	StationConfig	SC;
 	if (itsStaticCalEnabled) {
-		_loadCalTable(1, SC.nrRSPs);
-		_loadCalTable(3, SC.nrRSPs);
-		_loadCalTable(5, SC.nrRSPs);
-		_loadCalTable(6, SC.nrRSPs);
-		_loadCalTable(7, SC.nrRSPs);
+        _loadCalTable("LBA_INNER", "10_90", SC.nrRSPs);
+        _loadCalTable("LBA_INNER", "30_90", SC.nrRSPs);
+        _loadCalTable("LBA_OUTER", "10_90", SC.nrRSPs);
+        _loadCalTable("LBA_OUTER", "30_90", SC.nrRSPs);
+        _loadCalTable("LBA_SPARSE_EVEN", "10_90", SC.nrRSPs);
+        _loadCalTable("LBA_SPARSE_EVEN", "30_90", SC.nrRSPs);
+        _loadCalTable("LBA_SPARSE_ODD", "10_90", SC.nrRSPs);
+        _loadCalTable("LBA_SPARSE_ODD", "30_90", SC.nrRSPs);
+        _loadCalTable("LBA_X", "10_90", SC.nrRSPs);
+        _loadCalTable("LBA_X", "30_90", SC.nrRSPs);
+        _loadCalTable("LBA_Y", "10_90", SC.nrRSPs);
+        _loadCalTable("LBA_Y", "30_90", SC.nrRSPs);
+        _loadCalTable("HBA", "110_190", SC.nrRSPs);
+        _loadCalTable("HBA", "170_230", SC.nrRSPs);
+        _loadCalTable("HBA", "210_250", SC.nrRSPs);
 	}
 	else {
 		LOG_WARN("Static calibration is disabled!");
@@ -588,11 +608,21 @@ GCFEvent::TResult BeamServer::enabled(GCFEvent& event, GCFPortInterface& port)
 	case IBS_GETCALINFO: {
 		IBSGetcalinfoackEvent	answer;
 		ostringstream	oss;
-		if (itsCalTableMode1)	oss << *itsCalTableMode1 << endl;
-		if (itsCalTableMode3)	oss << *itsCalTableMode3 << endl;
-		if (itsCalTableMode5)	oss << *itsCalTableMode5 << endl;
-		if (itsCalTableMode6)	oss << *itsCalTableMode6 << endl;
-		if (itsCalTableMode7)	oss << *itsCalTableMode7 << endl;
+        if (itsCalTable_LBA_INNER_10_90)        oss << *itsCalTable_LBA_INNER_10_90 << endl;
+        if (itsCalTable_LBA_INNER_30_90)        oss << *itsCalTable_LBA_INNER_30_90 << endl;
+        if (itsCalTable_LBA_OUTER_10_90)        oss << *itsCalTable_LBA_OUTER_10_90 << endl;
+        if (itsCalTable_LBA_OUTER_30_90)        oss << *itsCalTable_LBA_OUTER_30_90 << endl;
+        if (itsCalTable_LBA_SPARSE_EVEN_10_90)  oss << *itsCalTable_LBA_SPARSE_EVEN_10_90 << endl;
+        if (itsCalTable_LBA_SPARSE_EVEN_30_90)  oss << *itsCalTable_LBA_SPARSE_EVEN_30_90 << endl;
+        if (itsCalTable_LBA_SPARSE_ODD_10_90)   oss << *itsCalTable_LBA_SPARSE_ODD_10_90 << endl;
+        if (itsCalTable_LBA_SPARSE_ODD_30_90)   oss << *itsCalTable_LBA_SPARSE_ODD_30_90 << endl;
+        if (itsCalTable_LBA_X_10_90)            oss << *itsCalTable_LBA_X_10_90 << endl;
+        if (itsCalTable_LBA_X_30_90)            oss << *itsCalTable_LBA_X_30_90 << endl;
+        if (itsCalTable_LBA_Y_10_90)            oss << *itsCalTable_LBA_Y_10_90 << endl;
+        if (itsCalTable_LBA_Y_30_90)            oss << *itsCalTable_LBA_Y_30_90 << endl;
+        if (itsCalTable_HBA_110_190)            oss << *itsCalTable_HBA_110_190 << endl;
+        if (itsCalTable_HBA_170_230)            oss << *itsCalTable_HBA_170_230 << endl;
+        if (itsCalTable_HBA_210_250)            oss << *itsCalTable_HBA_210_250 << endl;
 		answer.info = oss.str();
 		port.send(answer);
 	}
@@ -988,7 +1018,7 @@ bool BeamServer::beamalloc_start(IBSBeamallocEvent& ba,
 {
 	// allocate the beam
 	int		beamError(IBS_NO_ERR);
-	DigitalBeam* beam = checkBeam(&port, ba.beamName, ba.antennaSet, ba.allocation, ba.rcumask, ba.ringNr, ba.rcuMode, &beamError);
+	DigitalBeam* beam = checkBeam(&port, ba.beamName, ba.antennaSet, ba.band, ba.allocation, ba.rcumask, ba.ringNr, &beamError);
 
 	if (!beam) {
 		LOG_FATAL_STR("BEAMALLOC: failed to allocate beam " << ba.beamName << " on " << ba.antennaSet);
@@ -1088,7 +1118,7 @@ int BeamServer::beampointto_action(IBSPointtoEvent&		ptEvent,
 
 	// note we don't know if we added the beam before, just do it again and ignore returnvalue.
 	itsAnaBeamMgr->addBeam(AnalogueBeam(ptEvent.beamName, beamIter->second->antennaSetName(),
-									beamIter->second->rcuMask(), ptEvent.rank));
+                                        beamIter->second->bandName(), beamIter->second->rcuMask(), ptEvent.rank));
 	if (!itsAnaBeamMgr->addPointing(ptEvent.beamName, ptEvent.pointing)) {
 		return (IBS_UNKNOWN_BEAM_ERR);
 	}
@@ -1221,10 +1251,10 @@ void BeamServer::destroyAllBeams(GCFPortInterface* port)
 DigitalBeam* BeamServer::checkBeam(GCFPortInterface* 				port,
 						  std::string 						name,
 						  std::string 						antennaSetName,
+						  std::string 						band,
 						  IBS_Protocol::Beamlet2SubbandMap	allocation,
 						  bitset<LOFAR::MAX_RCUS>		    rcumask,
 						  uint								ringNr,
-						  uint								rcuMode,
 						  int*								beamError)
 {
 	LOG_TRACE_FLOW_STR("checkBeam(port=" << port->getName() << ", name=" << name << ", subarray=" << antennaSetName
@@ -1283,7 +1313,7 @@ DigitalBeam* BeamServer::checkBeam(GCFPortInterface* 				port,
 		return (0);
 	}
 
-	DigitalBeam* beam = new DigitalBeam(name, antennaSetName, allocation, rcumask, ringNr, rcuMode);
+	DigitalBeam* beam = new DigitalBeam(name, antennaSetName, band, allocation, rcumask, ringNr);
 
 	if (beam) { // register new beam
 		itsClientBeams[port].insert(beam);
@@ -1502,58 +1532,61 @@ void BeamServer::_logBeamAdministration()
 //
 // _getCalFactor(rcumode, rcu, subbandNr)
 //
-complex<double>	BeamServer::_getCalFactor(uint rcuMode, uint rcu, uint subbandNr)
+complex<double>	BeamServer::_getCalFactor(const string& antennaSet, const string& band, uint rcu, uint subbandNr)
 {
 	complex<double>	result(1.0, 0.0);
 
-	switch (rcuMode) {
-	case 1:
-	case 2:
-		if (itsCalTableMode1) { result = itsCalTableMode1->calFactor(rcu, subbandNr); } break;
-	case 3:
-	case 4:
-		if (itsCalTableMode3) { result = itsCalTableMode3->calFactor(rcu, subbandNr); } break;
-	case 5:
-		if (itsCalTableMode5) { result = itsCalTableMode5->calFactor(rcu, subbandNr); } break;
-	case 6:
-		if (itsCalTableMode6) { result = itsCalTableMode6->calFactor(rcu, subbandNr); } break;
-	case 7:
-		if (itsCalTableMode7) { result = itsCalTableMode7->calFactor(rcu, subbandNr); } break;
-	default:
-		break;
-	}
-
-//	LOG_DEBUG_STR("calFactor(" << rcuMode << "," << rcu << "," << subbandNr << ")=" << result);
+	string name;
+    name = name + antennaSet + "-" + band;;
+
+    if      (name == "LBA_INNER-10_90")       result = itsCalTable_LBA_INNER_10_90->calFactor(rcu, subbandNr);
+    else if (name == "LBA_INNER-30_90")       result = itsCalTable_LBA_INNER_30_90->calFactor(rcu, subbandNr);
+    else if (name == "LBA_OUTER-10_90")       result = itsCalTable_LBA_OUTER_10_90->calFactor(rcu, subbandNr);
+    else if (name == "LBA_OUTER-30_90")       result = itsCalTable_LBA_OUTER_30_90->calFactor(rcu, subbandNr);
+    else if (name == "LBA_SPARSE_EVEN-10_90") result = itsCalTable_LBA_SPARSE_EVEN_10_90->calFactor(rcu, subbandNr);
+    else if (name == "LBA_SPARSE_EVEN-30_90") result = itsCalTable_LBA_SPARSE_EVEN_30_90->calFactor(rcu, subbandNr);
+    else if (name == "LBA_SPARSE_ODD-10_90")  result = itsCalTable_LBA_SPARSE_ODD_10_90->calFactor(rcu, subbandNr);
+    else if (name == "LBA_SPARSE_ODD-30_90")  result = itsCalTable_LBA_SPARSE_ODD_30_90->calFactor(rcu, subbandNr);
+    else if (name == "LBA_X-10_90")           result = itsCalTable_LBA_X_10_90->calFactor(rcu, subbandNr);
+    else if (name == "LBA_X-30_90")           result = itsCalTable_LBA_X_30_90->calFactor(rcu, subbandNr);
+    else if (name == "LBA_Y-10_90")           result = itsCalTable_LBA_Y_10_90->calFactor(rcu, subbandNr);
+    else if (name == "LBA_Y-30_90")           result = itsCalTable_LBA_Y_30_90->calFactor(rcu, subbandNr);
+    else if (name == "HBA-110_190")           result = itsCalTable_HBA_110_190->calFactor(rcu, subbandNr);
+    else if (name == "HBA-170_230")           result = itsCalTable_HBA_170_230->calFactor(rcu, subbandNr);
+    else if (name == "HBA-210_250")           result = itsCalTable_HBA_210_250->calFactor(rcu, subbandNr);
+
+//	LOG_DEBUG_STR("calFactor(" << antennaSet << "," << band <<  "," << rcu << "," << subbandNr << ")=" << result);
 	return (result);
 }
 
-void BeamServer::_loadCalTable(uint rcuMode, uint nrRSPBoards)
+void BeamServer::_loadCalTable(const string& antennaSet, const string& band, uint nrRSPBoards)
 {
 	StatCal**	tableHandle(0);
-	switch (rcuMode) {
-		case 1:
-		case 2: tableHandle = &itsCalTableMode1; break;
-		case 3:
-		case 4: tableHandle = &itsCalTableMode3; break;
-		case 5: tableHandle = &itsCalTableMode5; break;
-		case 6: tableHandle = &itsCalTableMode6; break;
-		case 7: tableHandle = &itsCalTableMode7; break;
-		default: return;
-	}
-
-	(*tableHandle) = new StatCal(rcuMode, nrRSPBoards);
+	string name;
+    name = name + antennaSet + "-" + band;
+
+    if      (name == "LBA_INNER-10_90")       tableHandle = &itsCalTable_LBA_INNER_10_90;
+    else if (name == "LBA_INNER-30_90")       tableHandle = &itsCalTable_LBA_INNER_30_90;
+    else if (name == "LBA_OUTER-10_90")       tableHandle = &itsCalTable_LBA_OUTER_10_90;
+    else if (name == "LBA_OUTER-30_90")       tableHandle = &itsCalTable_LBA_OUTER_30_90;
+    else if (name == "LBA_SPARSE_EVEN-10_90") tableHandle = &itsCalTable_LBA_SPARSE_EVEN_10_90;
+    else if (name == "LBA_SPARSE_EVEN-30_90") tableHandle = &itsCalTable_LBA_SPARSE_EVEN_30_90;
+    else if (name == "LBA_SPARSE_ODD-10_90")  tableHandle = &itsCalTable_LBA_SPARSE_ODD_10_90;
+    else if (name == "LBA_SPARSE_ODD-30_90")  tableHandle = &itsCalTable_LBA_SPARSE_ODD_30_90;
+    else if (name == "LBA_X-10_90")           tableHandle = &itsCalTable_LBA_X_10_90;
+    else if (name == "LBA_X-30_90")           tableHandle = &itsCalTable_LBA_X_30_90;
+    else if (name == "LBA_Y-10_90")           tableHandle = &itsCalTable_LBA_Y_10_90;
+    else if (name == "LBA_Y-30_90")           tableHandle = &itsCalTable_LBA_Y_30_90;
+    else if (name == "HBA-110_190")           tableHandle = &itsCalTable_HBA_110_190;
+    else if (name == "HBA-170_230")           tableHandle = &itsCalTable_HBA_170_230;
+    else if (name == "HBA-210_250")           tableHandle = &itsCalTable_HBA_210_250;
+    else return;
+
+	(*tableHandle) = new StatCal(antennaSet, band, nrRSPBoards);
 	if ((*tableHandle) && !(*tableHandle)->isValid()) {
 		delete (*tableHandle);
 		(*tableHandle) = 0;
-		switch (rcuMode) {
-			case 1:
-			case 2: LOG_WARN ("NO CALIBRATION TABLE FOUND FOR MODE 1 AND 2"); break;
-			case 3:
-			case 4: LOG_WARN ("NO CALIBRATION TABLE FOUND FOR MODE 3 AND 4"); break;
-			case 5:
-			case 6:
-			case 7: LOG_WARN_STR ("NO CALIBRATION TABLE FOUND FOR MODE " << rcuMode); break;
-		}
+        LOG_WARN_STR ("NO CALIBRATION TABLE FOUND FOR ANTENNASET " << antennaSet << ", BAND " << band);
 		return;
 	}
 
@@ -1705,8 +1738,8 @@ void BeamServer::compute_weights(Timestamp weightTime)
 						continue;
 					}
 
-					complex<double>	CalFactor = _getCalFactor(beamIter->second->rcuMode(), rcu,
-																itsBeamletAllocation[beamlet+firstBeamlet].subbandNr);
+					complex<double>	CalFactor = _getCalFactor(beamIter->second->antennaSetName(), beamIter->second->bandName(),
+                                                              rcu, itsBeamletAllocation[beamlet+firstBeamlet].subbandNr);
 					int	bitPlane = beamlet / beamletsPerPlane;
 					itsWeights(rcu, bitPlane, beamlet % beamletsPerPlane) =
 						CalFactor * exp(itsBeamletAllocation[beamlet+firstBeamlet].scaling *
diff --git a/MAC/APL/PAC/ITRFBeamServer/src/BeamServer.h b/MAC/APL/PAC/ITRFBeamServer/src/BeamServer.h
index 3a5ded97e48bb60de3578d34a206a9b9bb371a7e..0bb20151f5d44d882243e7d26d04ea915c3b5a04 100644
--- a/MAC/APL/PAC/ITRFBeamServer/src/BeamServer.h
+++ b/MAC/APL/PAC/ITRFBeamServer/src/BeamServer.h
@@ -88,13 +88,13 @@ private:
 	void  destroyAllBeams(GCFPortInterface* port);
 
 	// Create new beam and update administration
-	DigitalBeam*	checkBeam(GCFPortInterface* 					port,
-					string 								name, 
-					string 								subarrayname, 
+	DigitalBeam*	checkBeam(GCFPortInterface* 		port,
+					string 								name,
+					string 								antennaSetName,
+					string 								band,
 					IBS_Protocol::Beamlet2SubbandMap	allocation,
 					bitset<LOFAR::MAX_RCUS>				rcumask,
 					uint								ringNr,
-					uint								rcuMode,
 					int*								beamError);
 
 	// Destroy beam of specified transaction.
@@ -179,8 +179,8 @@ private:
 	void _logBeamAdministration();
 
 	// RCU calibration
-	std::complex<double>	_getCalFactor(uint rcuMode, uint rcu, uint subbandNr);
-	void 					_loadCalTable(uint rcuMode, uint nrRSPBoards);
+	std::complex<double>	_getCalFactor(const string& antennaSet, const string& band, uint rcu, uint subbandNr);
+	void 					_loadCalTable(const string& antennaSet, const string& band, uint nrRSPBoards);
 
 	// ### data members ###
 
@@ -203,7 +203,7 @@ private:
 	blitz::Array<std::complex<double>,  3> itsWeights;
 	blitz::Array<std::complex<int16_t>, 3> itsWeights16;
 
-	// RCU Allocations in the AntennaArrays. Remember that each RCU can participate 
+	// RCU Allocations in the AntennaArrays. Remember that each RCU can participate
 	// in more than one beam.
 	bitset<MAX_RCUS>			itsLBAallocation;	// which RCUs are used for LBA
 	bitset<MAX_RCUS>			itsHBAallocation;	// which RCUs are used for HBA
@@ -233,12 +233,22 @@ private:
 	map<string, DigitalBeam*> 	itsBeamPool;			//
 	AnaBeamMgr*					itsAnaBeamMgr;			// for managing the analogue beams
 
-	StatCal*					itsCalTableMode1;		// table for mode 1 and 2
-	StatCal*					itsCalTableMode3;		// table for mode 3 and 4
-	StatCal*					itsCalTableMode5;		// table for mode 5
-	StatCal*					itsCalTableMode6;		// table for mode 6
-	StatCal*					itsCalTableMode7;		// table for mode 7
-	
+    StatCal*                    itsCalTable_LBA_INNER_10_90;
+    StatCal*                    itsCalTable_LBA_INNER_30_90;
+    StatCal*                    itsCalTable_LBA_OUTER_10_90;
+    StatCal*                    itsCalTable_LBA_OUTER_30_90;
+    StatCal*                    itsCalTable_LBA_SPARSE_EVEN_10_90;
+    StatCal*                    itsCalTable_LBA_SPARSE_EVEN_30_90;
+    StatCal*                    itsCalTable_LBA_SPARSE_ODD_10_90;
+    StatCal*                    itsCalTable_LBA_SPARSE_ODD_30_90;
+    StatCal*                    itsCalTable_LBA_X_10_90;
+    StatCal*                    itsCalTable_LBA_X_30_90;
+    StatCal*                    itsCalTable_LBA_Y_10_90;
+    StatCal*                    itsCalTable_LBA_Y_30_90;
+    StatCal*                    itsCalTable_HBA_110_190;
+    StatCal*                    itsCalTable_HBA_170_230;
+    StatCal*                    itsCalTable_HBA_210_250;
+
 	// constants
 	uint   	itsMaxRCUs;				//
 	uint   	itsMaxRSPboards;		//
diff --git a/MAC/APL/PAC/ITRFBeamServer/src/DigitalBeam.cc b/MAC/APL/PAC/ITRFBeamServer/src/DigitalBeam.cc
index 65badc0c0283ad066b1c79f11d7beed8191990e8..f4f5587202b219edc39eb4d4b9bece31c8c70e54 100644
--- a/MAC/APL/PAC/ITRFBeamServer/src/DigitalBeam.cc
+++ b/MAC/APL/PAC/ITRFBeamServer/src/DigitalBeam.cc
@@ -48,16 +48,15 @@ using namespace RTC;
 //
 // DigitalBeam(name, subarray, nrSubbands)
 //
-DigitalBeam::DigitalBeam(const string& 				name, 
-					     const string& 				antennaSet, 
-					     const Beamlet2SubbandMap&	allocation, 
+DigitalBeam::DigitalBeam(const string& 				name,
+					     const string& 				antennaSetName,
+					     const string& 				bandName,
+					     const Beamlet2SubbandMap&	allocation,
 					     const bitset<MAX_RCUS>&	rcuMask,
-					     uint						ringNr,
-						 uint						rcuMode) :
-	Beam 				(name, antennaSet, rcuMask),
-	itsBeamletAllocation(allocation),
-	itsRingNr			(ringNr),
-	itsRCUmode			(rcuMode)
+					     uint						ringNr) :
+	Beam 				(name, antennaSetName, bandName, rcuMask),
+    itsBeamletAllocation(allocation),
+	itsRingNr			(ringNr)
 {}
 
 //
diff --git a/MAC/APL/PAC/ITRFBeamServer/src/DigitalBeam.h b/MAC/APL/PAC/ITRFBeamServer/src/DigitalBeam.h
index 9815dfd0fb10cf1ce68a90f2fe5fc43caab0192d..b4e001c891ffe1c8eb89a744484dac8e1df068e9 100644
--- a/MAC/APL/PAC/ITRFBeamServer/src/DigitalBeam.h
+++ b/MAC/APL/PAC/ITRFBeamServer/src/DigitalBeam.h
@@ -51,11 +51,11 @@ public:
 	// @param rcuMask The RCUs that participate in this beam.
 	// @param ringNr The serdes segment the allocation is ment for.
 	DigitalBeam(const string& 							name,
-			    const string& 							antenneSet,
+			    const string& 							antenneSetName,
+			    const string& 							band,
 			    const IBS_Protocol::Beamlet2SubbandMap&	allocation,
 			    const bitset<MAX_RCUS>&					rcuMask,
-			    uint 									ringNr,
-				uint									rcuMode);
+			    uint 									ringNr);
 
 	// Default destructor.
 	virtual ~DigitalBeam();
@@ -73,10 +73,7 @@ public:
 	// Get number of ringSegment
 	uint ringNr() const	{ return (itsRingNr); }
 
-	// Get rcuMode of beam
-	uint rcuMode() const	{ return (itsRCUmode); }
-
-	// Set handle (=uniq ID) from the CalServer
+    // Set handle (=uniq ID) from the CalServer
 	void  calibrationHandle(const string& name) { itsCShandle = name; }
 	string calibrationHandle()				 { return (itsCShandle); }
 
@@ -90,15 +87,12 @@ private:
 
 	//# ----- DATAMEMBERS -----
 
-	// Allocation.
+    // Allocation.
 	IBS_Protocol::Beamlet2SubbandMap 	itsBeamletAllocation;
 
 	// ringSegment the beam is allocated on
 	uint		itsRingNr;
 
-	// temp: rcumode of the beam (will become obsolete when new CalServer is used).
-	uint		itsRCUmode;
-
 	// The antenna array.
 //	CAL::SubArray 		itsSubArray;
 
diff --git a/MAC/APL/PAC/ITRFBeamServer/src/StatCal.cc b/MAC/APL/PAC/ITRFBeamServer/src/StatCal.cc
index a71a278506b328cbb94ecffd3e69725dcbd609e9..b87b402ce8b8ed5c1792919223564ca661988e22 100644
--- a/MAC/APL/PAC/ITRFBeamServer/src/StatCal.cc
+++ b/MAC/APL/PAC/ITRFBeamServer/src/StatCal.cc
@@ -40,18 +40,20 @@ namespace LOFAR {
 //
 // StatCal()
 //
-StatCal::StatCal(uint mode, uint nrRSPBoards):
-    itsNantennas(nrRSPBoards*NR_ANTENNAS_PER_RSPBOARD), 
-	itsNpols	(2), 
-	itsNsubbands(512), 
-	itsMode		(mode), 
+StatCal::StatCal(const string& antennaSet, const string& band, uint nrRSPBoards):
+    itsNantennas(nrRSPBoards*NR_ANTENNAS_PER_RSPBOARD),
+	itsNpols	(2),
+	itsNsubbands(512),
+	itsAntennaSet(antennaSet),
+	itsBand(band),
 	itsIsValid	(false)
 {
-	LOG_DEBUG(formatString("StatCal(mode=%d,#Ant=%d,#Pol=%d,#Sub=%d)",mode, itsNantennas, itsNpols, itsNsubbands));
+	LOG_DEBUG(formatString("StatCal(antset=%s,band=%s,#Ant=%d,#Pol=%d,#Sub=%d)",
+                            antennaSet.c_str(), band.c_str(), itsNantennas, itsNpols, itsNsubbands));
 
     itsStaticCalibration.resize(itsNantennas, itsNpols, itsNsubbands);
     itsStaticCalibration = complex<double>(0.0,0.0);
-    itsIsValid = _readData(mode);
+    itsIsValid = _readData(antennaSet, band);
 }
 
 //
@@ -64,13 +66,15 @@ StatCal::~StatCal()
 //
 // _readData(mode)
 //
-bool StatCal::_readData(uint mode)
+bool StatCal::_readData(const string& antennaSet, const string& band)
 {
 	ConfigLocator	CL;
 	char			baseName[256];
-    snprintf(baseName, sizeof baseName, "CalTable_mode%d.dat", mode);
+    snprintf(baseName, sizeof baseName, "CalTable-%s-%s.dat", antennaSet.c_str(), band.c_str());
 	itsFileName = CL.locate(baseName);
 
+    LOG_INFO_STR("### baseName = " << baseName << ", itsFileName = " << itsFileName);
+
 	// try to open the file
     FILE 			*file;
     if (!(file = fopen(itsFileName.c_str(), "r"))) {
@@ -79,7 +83,7 @@ bool StatCal::_readData(uint mode)
 	}
 
 	// read and check the headerinformation
-	if (!_readHeaderInfo(file) || !_checkHeaderInfo(mode)) {
+	if (!_readHeaderInfo(file) || !_checkHeaderInfo(antennaSet, band)) {
 		return (false);
 	}
 
@@ -87,9 +91,9 @@ bool StatCal::_readData(uint mode)
     complex<double> value;
 	for (uint sb = 0; sb < itsNsubbands; sb++) {
 		for (uint ant = 0; ant < itsNantennas; ant++) {
-			for (uint pol = 0; pol < itsNpols; pol++) {    
+			for (uint pol = 0; pol < itsNpols; pol++) {
 				if (fread(&value, sizeof(complex<double>), 1, file) != 1) {
-					LOG_ERROR_STR("Error while loading calibrationtable " << itsFileName << " at element " << 
+					LOG_ERROR_STR("Error while loading calibrationtable " << itsFileName << " at element " <<
 								(sb*itsNantennas+ant)*itsNpols+pol);
 					fclose(file);
 					return(false);
@@ -99,7 +103,7 @@ bool StatCal::_readData(uint mode)
 		}
 	}
 	fclose(file);
-	LOG_INFO_STR("Static CalibrationTable loaded for mode " << mode << ", first value = " << itsStaticCalibration(0,0,0));
+	LOG_INFO_STR("Static CalibrationTable loaded for antennaSet " << antennaSet << ", band " << band << ", first value = " << itsStaticCalibration(0,0,0));
 	return (true);
 }
 
@@ -115,7 +119,7 @@ bool StatCal::_readHeaderInfo(FILE*	file)
 		return (true);
 	}
 
-	while (fgets(line, 1024,file)) {
+	while (fgets(line, 1024, file)) {
 		if (line[strlen(line)-1] == '\n') {	// cut trailing newline character if any
 			line[strlen(line)-1] = '\0';
 		}
@@ -125,8 +129,10 @@ bool StatCal::_readHeaderInfo(FILE*	file)
 		}
 		if (strstr(line, "CalTableHeader.Observation.Station"))
 			itsHI.station = ltrim(value);
-		else if (strstr(line, "CalTableHeader.Observation.Mode"))
-			itsHI.mode = atoi(value);
+		else if (strstr(line, "CalTableHeader.Observation.AntennaSet"))
+			itsHI.antennaSet = ltrim(value);
+        else if (strstr(line, "CalTableHeader.Observation.Band"))
+			itsHI.band = ltrim(value);
 		else if (strstr(line, "CalTableHeader.Observation.Source"))
 			itsHI.source = ltrim(value);
 		else if (strstr(line, "CalTableHeader.Observation.Date"))
@@ -152,19 +158,24 @@ bool StatCal::_readHeaderInfo(FILE*	file)
 //
 // _checkHeaderInfo(mode)
 //
-bool StatCal::_checkHeaderInfo(uint	mode) const
+bool StatCal::_checkHeaderInfo(const string& antennaSet, const string& band) const
 {
-	if (itsHI.mode == -1) {	// file without header?
+	if (itsHI.antennaSet == "") {	// file without header?
 		return (true);
 	}
 
-	if ((uint)itsHI.mode != mode) {
-		LOG_ERROR_STR("CALTABLE FOR MODE " << mode << " CONTAINS WEIGHTS FOR MODE " << itsHI.mode);
+	if (itsHI.antennaSet != antennaSet) {
+		LOG_ERROR_STR("CALTABLE FOR ANTENNASET " << antennaSet << " CONTAINS WEIGHTS FOR ANTENNASET " << itsHI.antennaSet);
+		return (false);
+	}
+
+    if ((itsHI.antennaSet == "HBA") && (itsHI.band != band)) {
+		LOG_ERROR_STR("CALTABLE FOR BAND " << band << " CONTAINS WEIGHTS FOR BAND " << itsHI.band);
 		return (false);
 	}
 
 	if (itsHI.station != PVSSDatabaseName()) {
-		LOG_ERROR_STR("CALTABLE FOR MODE " << mode << " IS MENT FOR STATION " << itsHI.station);
+		LOG_ERROR_STR("CALTABLE NOT FOR THIS STATION " << itsHI.station);
 		return (false);
 	}
 
@@ -178,7 +189,8 @@ ostream& StatCal::print(ostream& os)const
 {
 	os << "Filename   : " << itsFileName << endl;
 	os << "Station    : " << itsHI.station << endl;
-	os << "Mode       : " << itsHI.mode << endl;
+	os << "AntennaSet : " << itsHI.antennaSet << endl;
+	os << "Band       : " << itsHI.band << endl;
 	os << "Source     : " << itsHI.source << endl;
 	os << "Date       : " << itsHI.date << endl;
 	os << "CalVersion : " << itsHI.calVersion << endl;
@@ -200,7 +212,7 @@ complex<double> StatCal::calFactor(uint	rcuNr, uint subbandNr) const
 
 	return (itsStaticCalibration((int)rcuNr/2, (int)rcuNr%2, (int)subbandNr));
 }
-	
+
 
   } // namespace BS
 } // namespace LOFAR
diff --git a/MAC/APL/PAC/ITRFBeamServer/src/StatCal.h b/MAC/APL/PAC/ITRFBeamServer/src/StatCal.h
index 2f273b8ca70c217be0cc7bf216c4d2e673392bcd..32e79207a74b8a4d582fe0d4ba6e1a05f52ba438 100644
--- a/MAC/APL/PAC/ITRFBeamServer/src/StatCal.h
+++ b/MAC/APL/PAC/ITRFBeamServer/src/StatCal.h
@@ -38,7 +38,7 @@ class StatCal {
 public:
 
 	// constructor and destructor
-	explicit StatCal(uint rcumode, uint nrRSPBoards);
+	explicit StatCal(const string& antennaSet, const string& band, uint nrRSPBoards);
 	~StatCal();
 
 	std::complex<double> calFactor(uint	rcuNr, uint subbandNr) const;
@@ -57,23 +57,25 @@ private:
 	StatCal& operator= (const StatCal&); // not implemented
 
 	// helper functions
-	bool _readData       (uint	mode);
+	bool _readData       (const string& antennaSet, const string& band);
 	bool _readHeaderInfo (FILE*	file);
-	bool _checkHeaderInfo(uint	mode) const;
-	
+	bool _checkHeaderInfo(const string& antennaSet, const string& band) const;
+
 	uint 	itsNantennas;
 	uint 	itsNpols;
 	uint 	itsNsubbands;
-	uint 	itsMode;
+	string 	itsAntennaSet;
+	string 	itsBand;
 	string 	itsFileName;
 	bool	itsIsValid;
 
 	class headerinfo {
 	public:
-		headerinfo() : mode(-1) {};
+		headerinfo() : antennaSet("") {};
 		// datamembers
 		string	station;
-		int		mode;
+		string	antennaSet;
+		string	band;
 		string	source;
 		string	date;
 		string	calVersion;
@@ -84,8 +86,8 @@ private:
 	};
 	headerinfo		itsHI;
 
-	// two 
-	blitz::Array<std::complex<double>, 3> itsStaticCalibration;  // 
+	// two
+	blitz::Array<std::complex<double>, 3> itsStaticCalibration;  //
 };
 
 //# -------------------- inline functions --------------------
diff --git a/MAC/APL/PAC/ITRFBeamServer/src/beamctl.cc b/MAC/APL/PAC/ITRFBeamServer/src/beamctl.cc
index 502e7c8edd0876242e62793ee2f7eed1046487a8..8990390c85735daacac0872b256dc1a5d774e01e 100644
--- a/MAC/APL/PAC/ITRFBeamServer/src/beamctl.cc
+++ b/MAC/APL/PAC/ITRFBeamServer/src/beamctl.cc
@@ -277,11 +277,11 @@ GCFEvent::TResult beamctl::create_beam(GCFEvent& event, GCFPortInterface& port)
         IBSBeamallocEvent   alloc;
         alloc.beamName     = BEAMCTL_BEAM + formatString("_%d", getpid());
         alloc.antennaSet   = itsAntSet;
+        alloc.band         = itsBandStr;
         alloc.rcumask      = getRCUMask() & globalAntennaSets()->RCUallocation(itsAntSet);
         // assume beamletnumbers are right so the ring can be extracted from those numbers.
         // when the user did this wrong the BeamServer will complain.
         alloc.ringNr       = itsBeamlets.front() >= BEAMLET_RING_OFFSET;
-        alloc.rcuMode      = itsRCUmode;
 
         list<int>::iterator its = itsSubbands.begin();
         list<int>::iterator itb = itsBeamlets.begin();
@@ -523,7 +523,7 @@ void beamctl::usage() const
         "       beamctl <rcuspec> <anapointing> [<anapointing> ...] [<dataspec> <digpointing> [<digpointing> ...]] FOR HBA ANTENNAS\n"
         "       beamctl --calinfo\n"
         "where:\n"
-        "  <rcuspec>      = --antennaset [--rcus] --band \n"
+        "  <rcuspec>      = --antennaset --rcus --band \n"
         "  <dataspec>     = --subbands --beamlets \n"
         "  <digpointing>  = --digdir \n"
         "  <anapointing>  = --anadir \n"
@@ -532,7 +532,7 @@ void beamctl::usage() const
         "                    # name = LBA_INNER | LBA_OUTER | LBA_SPARSE_EVEN | LBA_SPARSE_ODD |\n"
         "                    # LBA_X | LBA_Y | HBA_ZERO |  HBA_ONE | HBA_DUAL | HBA_JOINED |\n"
         "                    # HBA_ZERO_INNER | HBA_ONE_INNER | HBA_DUAL_INNER | HBA_JOINED_INNER\n"
-        "  --rcus=<set>      # optional subselection of RCU's\n"
+        "  --rcus=<set>      # subselection of RCU's\n"
         "  --band=name       # name of band selection, may not conflict with antennaset\n"
         "                    # name = 10_90 | 30_90 | 110_190 | 170_230 | 210_250\n"
         "  --subbands=<set>  # set of subbands to use for this beam\n"
@@ -670,22 +670,28 @@ bool beamctl::checkOptions()
                 case 1:
                 case 3: {
                     itsBand = BAND_10_90;
+                    itsBandStr = "10_90";
                 } break;
                 case 2:
                 case 4: {
                     itsBand = BAND_30_90;
+                    itsBandStr = "30_90";
                 } break;
                 case 5: {
                     itsBand = BAND_110_190;
+                    itsBandStr = "110_190";
                 } break;
                 case 6: {
                     itsBand = BAND_170_230;
+                    itsBandStr = "170_230";
                 } break;
                 case 7: {
                     itsBand = BAND_210_250;
+                    itsBandStr = "210_250";
                 } break;
                 default : {
                     itsBand = BAND_UNDEFINED;
+                    itsBandStr = "unknown";
                 } break;
             }
         }
@@ -775,17 +781,17 @@ bool beamctl::parseOptions(int  myArgc, char** myArgv)
         break;
 
         case 'B': {     // band
-            string band (optarg);
-
-            if (band == "10_90")        itsBand = BAND_10_90;
-            else if (band == "10_70")   itsBand = BAND_10_70;
-            else if (band == "30_70")   itsBand = BAND_30_70;
-            else if (band == "30_90")   itsBand = BAND_30_90;
-            else if (band == "110_190") itsBand = BAND_110_190;
-            else if (band == "170_230") itsBand = BAND_170_230;
-            else if (band == "210_250") itsBand = BAND_210_250;
+            itsBandStr = optarg;
+
+            if (itsBandStr == "10_90")        itsBand = BAND_10_90;
+            else if (itsBandStr == "10_70")   itsBand = BAND_10_70;
+            else if (itsBandStr == "30_70")   itsBand = BAND_30_70;
+            else if (itsBandStr == "30_90")   itsBand = BAND_30_90;
+            else if (itsBandStr == "110_190") itsBand = BAND_110_190;
+            else if (itsBandStr == "170_230") itsBand = BAND_170_230;
+            else if (itsBandStr == "210_250") itsBand = BAND_210_250;
             else itsBand = BAND_UNDEFINED;
-            cout << "band : " << band << endl;
+            cout << "band : " << itsBandStr << endl;
         }
         break;
 
diff --git a/MAC/APL/PAC/ITRFBeamServer/src/beamctl.h b/MAC/APL/PAC/ITRFBeamServer/src/beamctl.h
index 2e8f710f068111b033478fe2773976057271805c..61dd27fef3f9f83b52895f1a827a5b86c3e786ba 100644
--- a/MAC/APL/PAC/ITRFBeamServer/src/beamctl.h
+++ b/MAC/APL/PAC/ITRFBeamServer/src/beamctl.h
@@ -80,6 +80,7 @@ private:
 
 	// place to store the argument values.
 	string			itsAntSet; 			// name of the antennaSet
+	string			itsBandStr;			// name of the band
 	list<int>		itsRCUs;   			// selection of rcus
 	list<int>		itsSubbands; 		// selection of subbands
 	list<int>		itsBeamlets; 		// selection of beamlets
diff --git a/MAC/APL/PAC/ITRFBeamServer/test/tAnaBeamMgr.cc b/MAC/APL/PAC/ITRFBeamServer/test/tAnaBeamMgr.cc
index 635a91319a4fa26d6113aff6dcb2c4eeb850d0a7..6402d7435adf573a230023c3c64eab87208272b1 100644
--- a/MAC/APL/PAC/ITRFBeamServer/test/tAnaBeamMgr.cc
+++ b/MAC/APL/PAC/ITRFBeamServer/test/tAnaBeamMgr.cc
@@ -37,7 +37,7 @@ using namespace RTC;
 using namespace BS;
 using namespace IBS_Protocol;
 
-int main(int, char*	argv[]) 
+int main(int, char*	argv[])
 {
 	INIT_LOGGER(argv[0]);
 
@@ -52,7 +52,7 @@ int main(int, char*	argv[])
 	bitset<MAX_RCUS>		rcuMask4(0x00000F00);	// overlaps with 2
 
 	// In these first tests we test the addPointing mechanism of the Beam class.
-	AnalogueBeam	beam1("beam1", "LBA_INNER", rcuMask1, 1);
+	AnalogueBeam	beam1("beam1", "LBA_INNER", "10_90", rcuMask1, 1);
 	LOG_DEBUG("--- POINTING TEST 1: are contiguous pointings added in the right order");
 	beam1.addPointing(Pointing(0.1, 0.1,  "J2000", Timestamp(1262700000,0), 1000));
 	beam1.addPointing(Pointing(0.1, 0.11, "J2000", Timestamp(1262700000+1000,0), 1100));
@@ -65,23 +65,23 @@ int main(int, char*	argv[])
 	LOG_DEBUG("--- POINTING TEST 3: are overlapping pointings rejected");
 	beam1.addPointing(Pointing(0.1, 0.3, "J2000", Timestamp(1262700000+1200,0), 200));
 	beam1.showPointings();
-	
+
 	LOG_DEBUG("--- POINTING TEST 4: are gaps splitted when a new pointing is inserted in the gap");
 	beam1.addPointing(Pointing(0.1, 0.4, "J2000", Timestamp(1262700000+3000,0), 500));
 	beam1.showPointings();
-	
+
 	LOG_DEBUG("--- POINTING TEST 5: can we insert a pointing in 'reverse' order'");
 	beam1.addPointing(Pointing(0.1, 0.5, "J2000", Timestamp(1262700000-600,0), 600));
 	beam1.showPointings();
-	
+
 	LOG_DEBUG("--- POINTING TEST 6: can we insert an everlasting pointing in the middle");
 	beam1.addPointing(Pointing(0.1, 0.6, "J2000", Timestamp(1262700000+4000,0), 0));
 	beam1.showPointings();
-	
+
 	LOG_DEBUG("--- POINTING TEST 7: can we add an everlasting pointing at the end");
 	beam1.addPointing(Pointing(0.1, 0.7, "J2000", Timestamp(1262700000+9000,0), 0));
 	beam1.showPointings();
-	
+
 	// In the second set of tests we test the mechanism of activating the right analogueBeams.
 	// Remember that this depends on many conditions like rank, rcu overlap and consistency in
 	// staying active when a beam is active.
@@ -97,11 +97,11 @@ int main(int, char*	argv[])
 	beamMgr1.showAdmin();
 
 	LOG_DEBUG("--- SCHEDULE TEST 3: are NONE pointings also scheduled and are old pointings deleted");
-	beamMgr1.activateBeams(Timestamp(1262700000+2500, 0));	
+	beamMgr1.activateBeams(Timestamp(1262700000+2500, 0));
 	beamMgr1.showAdmin();
 
 	LOG_DEBUG("--- SCHEDULE TEST 4: can we add an overlapping beam with the another rank");
-	AnalogueBeam	beam2("beam2", "LBA_INNER", rcuMask2, 3);
+	AnalogueBeam	beam2("beam2", "LBA_INNER", "10_90", rcuMask2, 3);
 	beam2.addPointing(Pointing(0.2, 0.6, "AZEL", Timestamp(1262700000+2200,0), 400));
 	beamMgr1.addBeam(beam2);
 	beamMgr1.showAdmin();
@@ -111,7 +111,7 @@ int main(int, char*	argv[])
 	beamMgr1.showAdmin();
 
 	LOG_DEBUG("--- SCHEDULE TEST 6: can we add an overlapping beam with a higher rank as the previous beam");
-	AnalogueBeam	beam3("beam3", "LBA_INNER", rcuMask3, 2);
+	AnalogueBeam	beam3("beam3", "LBA_INNER", "10_90", rcuMask3, 2);
 	beam3.addPointing(Pointing(0.3, 0.6, "ITRF", Timestamp(1262700000+2000,0), 1400));
 	beamMgr1.addBeam(beam3);
 	beamMgr1.showAdmin();
@@ -121,7 +121,7 @@ int main(int, char*	argv[])
 	beamMgr1.showAdmin();
 
 	LOG_DEBUG("--- SCHEDULE TEST 8: add an NON overlapping beam with an equal rank as the first beam which starts earlier");
-	AnalogueBeam	beam4("beam4", "LBA_INNER", rcuMask4, 1);
+	AnalogueBeam	beam4("beam4", "LBA_INNER", "10_90", rcuMask4, 1);
 	beam4.addPointing(Pointing(0.4, 0.6, "MOON", Timestamp(1262700000+2000,0), 1400));
 	beamMgr1.addBeam(beam4);
 	beamMgr1.showAdmin();
@@ -131,7 +131,7 @@ int main(int, char*	argv[])
 	beamMgr1.showAdmin();
 
 	LOG_DEBUG("--- SCHEDULE TEST 10: delete beam 1");
-	beamMgr1.deleteBeam(beam1.name());	
+	beamMgr1.deleteBeam(beam1.name());
 	beamMgr1.showAdmin();
 
 	LOG_DEBUG("--- SCHEDULE TEST 11: will the third beam become active also (it should)");
diff --git a/MAC/APL/PAC/ITRFBeamServer/test/tStatCal.cc b/MAC/APL/PAC/ITRFBeamServer/test/tStatCal.cc
index 0034865e51ac6a684a82d71c2733894bf5751951..a0bde1558ebaf4de8e087d10ddac6e468fecd538 100644
--- a/MAC/APL/PAC/ITRFBeamServer/test/tStatCal.cc
+++ b/MAC/APL/PAC/ITRFBeamServer/test/tStatCal.cc
@@ -33,11 +33,11 @@ using namespace blitz;
 using namespace LOFAR;
 using namespace BS;
 
-int main(int, char*	argv[]) 
+int main(int, char*	argv[])
 {
 	INIT_LOGGER(argv[0]);
 
-	StatCal		theCalTable(1,12);
+	StatCal		theCalTable("LBA_INNER", "10_90", 12);
 	blitz::Array<std::complex<double>,3> theData = theCalTable();
 
 	cout << "RCU 5: X,Y for subband 10..15: " << endl;
diff --git a/MAC/APL/StationCU/src/BeamControl/BeamControl.cc b/MAC/APL/StationCU/src/BeamControl/BeamControl.cc
index c49d0fd94a06080d3a4dc618eac7d9f6c26f607a..5e8c4ac4df990bc0a1f7571be729461968545d44 100644
--- a/MAC/APL/StationCU/src/BeamControl/BeamControl.cc
+++ b/MAC/APL/StationCU/src/BeamControl/BeamControl.cc
@@ -61,7 +61,7 @@ namespace LOFAR {
 	namespace StationCU {
 
 #define MAX2(a,b)	((a)>(b)?(a):(b))
-	
+
 // static pointer to this object for signal handler
 static BeamControl*	thisBeamControl = 0;
 
@@ -155,7 +155,7 @@ void    BeamControl::setState(CTState::CTstateNr     newState)
 		CTState		cts;
 		itsPropertySet->setValue(PN_FSM_CURRENT_ACTION, GCFPVString(cts.name(newState)));
 	}
-}   
+}
 
 
 //
@@ -163,20 +163,20 @@ void    BeamControl::setState(CTState::CTstateNr     newState)
 //
 // Connect to PVSS and report state back to startdaemon
 //
-GCFEvent::TResult BeamControl::initial_state(GCFEvent& event, 
+GCFEvent::TResult BeamControl::initial_state(GCFEvent& event,
 													GCFPortInterface& port)
 {
 	LOG_DEBUG_STR ("initial:" << eventName(event) << "@" << port.getName());
 
 	GCFEvent::TResult status = GCFEvent::HANDLED;
-  
+
 	switch (event.signal) {
 	case F_ENTRY:
    		break;
 
     case F_INIT: {
 		// Get access to my own propertyset.
-		string	propSetName(createPropertySetName(PSN_BEAM_CONTROL, getName(), 
+		string	propSetName(createPropertySetName(PSN_BEAM_CONTROL, getName(),
 												  globalParameterSet()->getString("_DPname")));
 		LOG_INFO_STR ("Activating PropertySet" << propSetName);
 		itsPropertySet = new RTDBPropertySet(propSetName,
@@ -201,7 +201,7 @@ GCFEvent::TResult BeamControl::initial_state(GCFEvent& event,
 		itsTimerPort->setTimer(0.0);
 	}
 	break;
-	  
+
 	case F_TIMER:
 		if (!itsPropertySetInitialized) {
 			itsPropertySetInitialized = true;
@@ -226,7 +226,7 @@ GCFEvent::TResult BeamControl::initial_state(GCFEvent& event,
 //			itsPropertySet->setValue(PN_BC_ANGLETIMES,		GCFPVDynArr(LPT_DYNUNSIGNED, dpeValues));
 			itsPropertySet->setValue(PN_BC_DIRECTION_TYPE,	GCFPVDynArr(LPT_DYNSTRING, dpeValues));
 			itsPropertySet->setValue(PN_BC_BEAM_NAME,		GCFPVDynArr(LPT_DYNSTRING, dpeValues));
-		  
+
 			// Start ParentControl task
 			LOG_DEBUG ("Enabling ParentControl task and wait for my name");
 			itsParentPort = itsParentControl->registerTask(this);
@@ -241,7 +241,7 @@ GCFEvent::TResult BeamControl::initial_state(GCFEvent& event,
 	case F_DISCONNECTED:
 	case F_EXIT:
 		break;
-	
+
 	case CONTROL_CONNECT: {
 		CONTROLConnectEvent		msg(event);
 		LOG_DEBUG_STR("Received CONNECT(" << msg.cntlrName << ")");
@@ -297,7 +297,7 @@ GCFEvent::TResult BeamControl::started_state(GCFEvent& event, GCFPortInterface&
 		break;
 
 	case F_CONNECTED: {
-		ASSERTSTR (&port == itsBeamServer, "F_CONNECTED event from port " 
+		ASSERTSTR (&port == itsBeamServer, "F_CONNECTED event from port "
 																	<< port.getName());
 		itsTimerPort->cancelAllTimers();
 		LOG_INFO ("Connected with BeamServer, going to claimed state");
@@ -310,14 +310,14 @@ GCFEvent::TResult BeamControl::started_state(GCFEvent& event, GCFPortInterface&
 
 	case F_DISCONNECTED: {
 		port.close();
-		ASSERTSTR (&port == itsBeamServer, 
+		ASSERTSTR (&port == itsBeamServer,
 								"F_DISCONNECTED event from port " << port.getName());
 		LOG_WARN ("Connection with BeamServer failed, retry in 2 seconds");
 		itsTimerPort->setTimer(2.0);
 		break;
 	}
 
-	case F_TIMER: 
+	case F_TIMER:
 //		GCFTimerEvent& timerEvent=static_cast<GCFTimerEvent&>(event);
 		LOG_DEBUG ("Trying to (re)connect to BeamServer");
 		itsBeamServer->open();		// will result in F_CONN or F_DISCONN
@@ -370,7 +370,7 @@ GCFEvent::TResult BeamControl::claimed_state(GCFEvent& event, GCFPortInterface&
 
 	case F_DISCONNECTED: {
 		port.close();
-		ASSERTSTR (&port == itsBeamServer, 
+		ASSERTSTR (&port == itsBeamServer,
 								"F_DISCONNECTED event from port " << port.getName());
 		LOG_WARN("Connection with BeamServer lost, may be due to splitter change, going to reconnect.");
 		setObjectState("Connection with BeamServer lost!", itsPropertySet->getFullScope(), RTDB_OBJ_STATE_BROKEN);
@@ -423,12 +423,11 @@ int32 BeamControl::convertFilterSelection(const string&	filterselection, const s
 	if (filterselection == "HBA_170_230")	{ return(6); }	// 160 Mhz
 	if (filterselection == "HBA_210_250")	{ return(7); }	// 200 Mhz
 
-	LOG_WARN_STR ("filterselection value '" << filterselection << 
+	LOG_WARN_STR ("filterselection value '" << filterselection <<
 									"' not recognized, using LBA_10_70");
 	return (1);
 }
 
-
 //
 // allocBeams_state(event, port)
 //
@@ -448,7 +447,7 @@ GCFEvent::TResult BeamControl::allocBeams_state(GCFEvent& event, GCFPortInterfac
 	// Create a new subarray
 	//
 	switch (event.signal) {
-	case F_ENTRY: 
+	case F_ENTRY:
 		itsTimerPort->cancelAllTimers();
 		itsTimerPort->setTimer(0.01);		// give CalControl + CalServer some time to allocated the beams.
 		break;
@@ -464,11 +463,13 @@ GCFEvent::TResult BeamControl::allocBeams_state(GCFEvent& event, GCFPortInterfac
 		IBSBeamallocEvent beamAllocEvent;
 		beamAllocEvent.beamName   = curBeamName;
 		beamAllocEvent.antennaSet = allocatingDigitalBeams ? itsObs->beams[beamIdx].antennaSet : itsObs->anaBeams[beamIdx].antennaSet;
-		LOG_DEBUG_STR("beam@antennaSet : " << beamAllocEvent.beamName << "@" << beamAllocEvent.antennaSet);
-		beamAllocEvent.rcumask = itsObs->getRCUbitset(0, 0, beamAllocEvent.antennaSet) & 
-								 globalAntennaSets()->RCUallocation(beamAllocEvent.antennaSet);	
+
+        beamAllocEvent.band       = itsObs->filter.substr(4, string::npos);
+
+        LOG_DEBUG_STR("beam@antennaSet : " << beamAllocEvent.beamName << "@" << beamAllocEvent.antennaSet);
+		beamAllocEvent.rcumask = itsObs->getRCUbitset(0, 0, beamAllocEvent.antennaSet) &
+								 globalAntennaSets()->RCUallocation(beamAllocEvent.antennaSet);
 		beamAllocEvent.ringNr = 0;
-		beamAllocEvent.rcuMode = convertFilterSelection(itsObs->filter, beamAllocEvent.antennaSet);
 
 		// digital part
 		if (!itsObs->beams.empty()) {			// fill digital part if any
@@ -514,7 +515,7 @@ GCFEvent::TResult BeamControl::allocBeams_state(GCFEvent& event, GCFPortInterfac
 	case IBS_BEAMALLOCACK: {
 		IBSBeamallocackEvent		ack(event);
 		if (ack.status != IBS_NO_ERR) {
-			LOG_ERROR_STR("Beamlet allocation for beam " << ack.beamName 
+			LOG_ERROR_STR("Beamlet allocation for beam " << ack.beamName
 					  << " failed with errorcode: " << errorName(ack.status));
 			setObjectState("Beamlet alloc error", itsPropertySet->getFullScope(), RTDB_OBJ_STATE_BROKEN);
 			setState(CTState::CLAIMED);
@@ -575,7 +576,7 @@ GCFEvent::TResult BeamControl::sendPointings_state(GCFEvent& event, GCFPortInter
 												  RTC::Timestamp(ptIter->startTime,0), ptIter->duration);
 		ptEvent.analogue = !sendingDigitalPts;
 		ptEvent.rank	 = sendingDigitalPts ? 0 : itsObs->anaBeams[beamIdx].rank;	// rank not used by digital beams
-		
+
 		// find next pt if any.
 		++ptIter;
 		LOG_DEBUG_STR("sendingDigitalPts=" << sendingDigitalPts);
@@ -666,7 +667,7 @@ GCFEvent::TResult BeamControl::sendPointings_state(GCFEvent& event, GCFPortInter
 //
 // active_state(event, port)
 //
-// Normal operation state. 
+// Normal operation state.
 //
 GCFEvent::TResult BeamControl::active_state(GCFEvent& event, GCFPortInterface& port)
 {
@@ -695,7 +696,7 @@ GCFEvent::TResult BeamControl::active_state(GCFEvent& event, GCFPortInterface& p
 //		TRAN(BeamControl::started_state);
 		break;
 	}
-	
+
 	// -------------------- EVENTS RECEIVED FROM PARENT CONTROL --------------------
 
 	case CONTROL_SCHEDULE: {
@@ -794,7 +795,7 @@ GCFEvent::TResult BeamControl::quiting_state(GCFEvent& event, GCFPortInterface&
 		itsTimerPort->setTimer(1.0);		// wait 1 second to let message go away
 		break;
 	}
-	
+
 	case F_TIMER:
 		GCFScheduler::instance()->stop();
 		break;
@@ -876,7 +877,7 @@ bool BeamControl::handleBeamFreeAck(GCFEvent&		event)
 	if (ack.status != IBS_NO_ERR) {
 		LOG_ERROR_STR("Beam de-allocation failed with errorcode: " << errorName(ack.status));
 		itsPropertySet->setValue(PN_FSM_ERROR,GCFPVString("De-allocation of the beam failed."));
-		return (false);	
+		return (false);
 	}
 
 	set<string>::iterator	iter = itsBeamIDs.begin();
@@ -903,7 +904,7 @@ bool BeamControl::handleBeamFreeAck(GCFEvent&		event)
 
 // _defaultEventHandler(event, port)
 //
-GCFEvent::TResult BeamControl::_defaultEventHandler(GCFEvent&			event, 
+GCFEvent::TResult BeamControl::_defaultEventHandler(GCFEvent&			event,
 													GCFPortInterface&	port)
 {
 	CTState		cts;
@@ -925,7 +926,7 @@ GCFEvent::TResult BeamControl::_defaultEventHandler(GCFEvent&			event,
 				result = GCFEvent::HANDLED;
 			}
 			break;
-		
+
 		case CONTROL_QUIT:
 			TRAN(BeamControl::quiting_state);
 			break;
@@ -943,7 +944,7 @@ GCFEvent::TResult BeamControl::_defaultEventHandler(GCFEvent&			event,
 			break;
 
 		case DP_CHANGED: {
-			LOG_DEBUG_STR("DP " << DPChangedEvent(event).DPname << " was changed"); 
+			LOG_DEBUG_STR("DP " << DPChangedEvent(event).DPname << " was changed");
 			result = GCFEvent::HANDLED;
 		}
 		break;
@@ -954,7 +955,7 @@ GCFEvent::TResult BeamControl::_defaultEventHandler(GCFEvent&			event,
 	}
 
 	if (result == GCFEvent::NOT_HANDLED) {
-		LOG_WARN_STR("Event " << eventName(event) << " NOT handled in state " << 
+		LOG_WARN_STR("Event " << eventName(event) << " NOT handled in state " <<
 					 cts.name(itsState));
 	}