diff --git a/Appl/CEP/CS1/CS1_Storage/include/CS1_Storage/MSWriter.h b/Appl/CEP/CS1/CS1_Storage/include/CS1_Storage/MSWriter.h
index 20bd28ca77827d987e008a6b8e04f540b3f34722..672c583a69393170df291ceff831f473588edda5 100644
--- a/Appl/CEP/CS1/CS1_Storage/include/CS1_Storage/MSWriter.h
+++ b/Appl/CEP/CS1/CS1_Storage/include/CS1_Storage/MSWriter.h
@@ -47,7 +47,7 @@ namespace LOFAR
       // The WSRT is taken as the center of the array.
       // Thus antPos must have shape [2,nantennas].
       MSWriter (const char* msName, double startTime, double timeStep, 
-                int nChan, int nPol, uint nantennas,
+                int nChan, int nPol, uint nBeams, uint nAntennas,
                 const vector<double>& antPos,
 		const vector<std::string>& storageStationNames,
 		uint timesToIntegrate, uint subbandsPerPset);
diff --git a/Appl/CEP/CS1/CS1_Storage/include/CS1_Storage/MSWriterImpl.h b/Appl/CEP/CS1/CS1_Storage/include/CS1_Storage/MSWriterImpl.h
index 7a2e2718baa2c6c6153612d22f5b37e1777fe797..3e2bb9e0a7dc7d52fc2270a39a803c7404832a88 100644
--- a/Appl/CEP/CS1/CS1_Storage/include/CS1_Storage/MSWriterImpl.h
+++ b/Appl/CEP/CS1/CS1_Storage/include/CS1_Storage/MSWriterImpl.h
@@ -28,6 +28,7 @@
 //# Includes
 #include <Common/LofarTypes.h>
 #include <casa/aips.h>
+#include <measures/Measures/MDirection.h>
 #include <Common/lofar_vector.h>
 
 //# Forward Declarations
@@ -61,7 +62,7 @@ namespace LOFAR
       // relative to the center (which is set to Westerbork). So antPos
       // must have shape [3,nantennas].
       MSWriterImpl (const char* msName, double startTime, double timeStep,
-                    int nfreq, int ncorr,
+                    int nfreq, int ncorr, int nbeams,
                     int nantennas, const vector<double>& antPos,
 		    const vector<std::string>& storageStationNames, 
 		    int timesToIntegrate, int subbandsPerPset);
@@ -159,6 +160,7 @@ namespace LOFAR
       double itsTimeStep;                ///< duration of each exposure (sec)
       uint itsTimesToIntegrate;          ///< Number of timeSteps to integrate (sec)
       double itsStartTime;               ///< start time of observation (sec)
+      casa::Block<casa::MDirection> itsField;  ///< field (beam) directions
       casa::Block<casa::Int>* itsNrPol;  ///< nr of polarizations for each band
       casa::Block<casa::Int>* itsNrChan; ///< nr of channels for each band
       casa::Block<casa::Int>* itsPolnr;  ///< rownr in POL subtable for each band
diff --git a/Appl/CEP/CS1/CS1_Storage/include/CS1_Storage/WH_SubbandWriter.h b/Appl/CEP/CS1/CS1_Storage/include/CS1_Storage/WH_SubbandWriter.h
index 3ae1449d609875ef190fa733f0513b43c4b2e36a..2a3dede9181aeb4faecc7d6fd95a700d20867648 100644
--- a/Appl/CEP/CS1/CS1_Storage/include/CS1_Storage/WH_SubbandWriter.h
+++ b/Appl/CEP/CS1/CS1_Storage/include/CS1_Storage/WH_SubbandWriter.h
@@ -79,6 +79,7 @@ namespace LOFAR
       uint  itsNBaselines;
       uint  itsNInputsPerSubband;
       uint  itsNChannels;
+      uint  itsNBeams;
       uint  itsNPolSquared;
       uint  itsNVisibilities;
 
diff --git a/Appl/CEP/CS1/CS1_Storage/src/MSWriter.cc b/Appl/CEP/CS1/CS1_Storage/src/MSWriter.cc
index fc80befcac87caf5a25bd62699dfa1d73daf3948..8cb5c30c1ee35fdde0a7afe8b1c9902293900d46 100644
--- a/Appl/CEP/CS1/CS1_Storage/src/MSWriter.cc
+++ b/Appl/CEP/CS1/CS1_Storage/src/MSWriter.cc
@@ -37,17 +37,17 @@ namespace LOFAR
     using namespace casa;
 
     MSWriter::MSWriter (const char* msName, double startTime, double timeStep,
-                        int nChan, int nPol,
-                        uint nantennas, const vector<double>& antPos,
+                        int nChan, int nPol, uint nBeams,
+                        uint nAntennas, const vector<double>& antPos,
 			const vector<string>& storageStationNames,
 			uint timesToIntegrate, uint subbandsPerPset)
       : itsWriter (0)
     {
-      ASSERTSTR(antPos.size() == 3*nantennas, antPos.size() << " == " << 3*nantennas <<
+      ASSERTSTR(antPos.size() == 3*nAntennas, antPos.size() << " == " << 3*nAntennas <<
                 "Antenna position vector does not have the right size!");
       try {
         itsWriter = new MSWriterImpl (msName, startTime, timeStep, nChan, nPol, 
-                                      nantennas, 
+                                      nBeams, nAntennas,
                                       antPos, storageStationNames, timesToIntegrate,
 				      subbandsPerPset);
       } catch (AipsError x) {
diff --git a/Appl/CEP/CS1/CS1_Storage/src/MSWriterImpl.cc b/Appl/CEP/CS1/CS1_Storage/src/MSWriterImpl.cc
index bebd70ee1787cd400cab3133142133cc80860064..62e688049ea22bbbe8ba2d0fedf1ac4ae57e09ff 100644
--- a/Appl/CEP/CS1/CS1_Storage/src/MSWriterImpl.cc
+++ b/Appl/CEP/CS1/CS1_Storage/src/MSWriterImpl.cc
@@ -68,7 +68,7 @@ namespace LOFAR
     using namespace casa;
 
     MSWriterImpl::MSWriterImpl (const char* msName, double startTime, double timeStep,
-                                int nfreq, int ncorr,
+                                int nfreq, int ncorr, int nbeams,
                                 int nantennas, const vector<double>& antPos,
 				const vector<string>& storageStationNames,
 				int timesToIntegrate, int subbandsPerPset)
@@ -82,6 +82,7 @@ namespace LOFAR
         itsTimeStep (timeStep),
 	itsTimesToIntegrate(timesToIntegrate),
 	itsStartTime(0),
+	itsField(nbeams),
         itsNrPol    (0),
         itsNrChan   (0),
         itsPolnr    (0),
@@ -366,6 +367,7 @@ namespace LOFAR
       MDirection indir(radec, MDirection::J2000);
       Vector<MDirection> outdir(1);
       outdir(0) = indir;
+      itsField[itsNrField] = indir;
       // Put the direction into the FIELD subtable.
       {
         MSField msfield = itsMS->field();
@@ -620,7 +622,7 @@ namespace LOFAR
       Quantity qtime(time, "s");
       itsFrame->set (MEpoch(qtime, MEpoch::UTC));
       MDirection::Ref outref(MDirection::HADEC, *itsFrame);
-      MDirection outdir = MDirection::Convert (*itsArrayPos, outref) ();
+      MDirection outdir = MDirection::Convert (itsField[fieldId], outref) ();
       Double ha = outdir.getAngle().getValue()(0);
       Double dec = outdir.getAngle().getValue()(1);
       Double sinha = std::sin(ha);
diff --git a/Appl/CEP/CS1/CS1_Storage/src/WH_SubbandWriter.cc b/Appl/CEP/CS1/CS1_Storage/src/WH_SubbandWriter.cc
index 04f8932686f68a8d8f80e95702ec4e2a466a23bb..227e20a1a61845417bd55131575442f90a7a71ef 100644
--- a/Appl/CEP/CS1/CS1_Storage/src/WH_SubbandWriter.cc
+++ b/Appl/CEP/CS1/CS1_Storage/src/WH_SubbandWriter.cc
@@ -72,13 +72,14 @@ namespace LOFAR
       itsNStations = itsPS.getUint32("Observation.NStations");
       itsNBaselines = itsNStations * (itsNStations +1)/2;
       itsNChannels = itsPS.getUint32("Observation.NChannels");
+      itsNBeams = itsPS.getUint32("Observation.NBeams");
       itsNInputsPerSubband = itsNinputs;
       uint pols = itsPS.getUint32("Observation.NPolarisations");
       itsNPolSquared = pols*pols;
 
       uint nrSamples = itsPS.getUint32("Observation.NSubbandSamples");
       itsWeightFactor = (float)itsNChannels/(float)nrSamples;  // The inverse of maximum number of valid samples
-
+      
       vector<double> refFreqs= itsPS.getDoubleVector("Observation.RefFreqs");
       unsigned nrSubbands = itsPS.getUint32("Observation.NSubbands");
       ASSERTSTR(refFreqs.size() >= nrSubbands, "Wrong number of refFreqs specified!");
@@ -176,9 +177,10 @@ namespace LOFAR
 #endif
 			       startTime, timeStep * itsTimesToIntegrate, 
                                itsNChannels, itsNPolSquared, itsNStations, 
+			       itsNBeams,
                                antPos, storageStationNames, itsTimesToIntegrate, 
 			       itsPS.getUint32("General.SubbandsPerPset"));
-
+			       
       double chanWidth = itsPS.getDouble("Observation.SampleRate") /
 			 itsPS.getDouble("Observation.NChannels");
       LOG_TRACE_VAR_STR("chanWidth = " << chanWidth);
@@ -204,7 +206,7 @@ namespace LOFAR
       
       //## TODO: add support for more than 1 beam ##//
       vector<double> beamDirs = itsPS.getDoubleVector("Observation.BeamDirections");
-      ASSERT(beamDirs.size() == 2 * itsPS.getUint32("Observation.NBeams"));
+      ASSERT(beamDirs.size() == 2 * itsNBeams);
       double RA = beamDirs[0];
       double DEC = beamDirs[1];
       // For nr of beams