diff --git a/Appl/CEP/CS1/CS1_Interface/include/CS1_Interface/CS1_Parset.h b/Appl/CEP/CS1/CS1_Interface/include/CS1_Interface/CS1_Parset.h
index 18003e40d05c6e3aaee20d07090685fa91fd2384..bc132934280f6ca2e9bebef7431fa9c9edbd2711 100644
--- a/Appl/CEP/CS1/CS1_Interface/include/CS1_Interface/CS1_Parset.h
+++ b/Appl/CEP/CS1/CS1_Interface/include/CS1_Interface/CS1_Parset.h
@@ -84,7 +84,6 @@ public:
 	double         timeInterval() const;
 	uint32         nrBGLNodesPerCell() const;
 	vector<double> refFreqs() const;
-	vector<string> msNames() const;
 	double         chanWidth() const;
 	vector<string> delay_Ports() const;
 	vector<string> getPortsOf(const string& aKey) const;
@@ -95,6 +94,7 @@ public:
 	bool	       useGather() const;
 	uint32	       nrOutputsPerInputNode() const;
 	uint32	       nrInputsPerStorageNode() const;
+	string	       getMSname(unsigned firstSB, unsigned lastSB) const;
 	
 	//# Datamembers
 	string	       name;
diff --git a/Appl/CEP/CS1/CS1_Interface/src/CS1_Parset.cc b/Appl/CEP/CS1/CS1_Interface/src/CS1_Parset.cc
index 4926c62b68eace7716775ad5bf2954d82c01e4bb..7c1663fd60c6f4efff0551b8c3cbcdd848de2a29 100644
--- a/Appl/CEP/CS1/CS1_Interface/src/CS1_Parset.cc
+++ b/Appl/CEP/CS1/CS1_Interface/src/CS1_Parset.cc
@@ -29,6 +29,12 @@
 //#include <APL/APLCommon/APLUtilities.h>
 #include <CS1_Interface/CS1_Parset.h>
 
+#include <boost/algorithm/string.hpp>
+#include <boost/algorithm/string/classification.hpp>
+#include <boost/algorithm/string/split.hpp>
+#include <boost/format.hpp>
+
+
 namespace LOFAR {
 	using namespace ACC::APS;
 	namespace CS1 {
@@ -79,52 +85,34 @@ vector<double> CS1_Parset::refFreqs() const
   
   for (uint i = 0; i < nrSubbands(); i++)
   {
-   
     refFreqs.push_back((getUint32("Observation.nyquistZone")-1)*(getUint32("Observation.sampleClock")*1000000/2) + 
                         sampleRate()*subbandIDs[i]);
+
   }
   
   return refFreqs;
 }
 
-vector<string> CS1_Parset::msNames() const
+string CS1_Parset::getMSname(unsigned firstSB, unsigned lastSB) const
 {
-  uint32 first, last;
-  string msName;
-  vector<string> msNames;
-  char obsid[32];
-  char subbandID[32];
-  
-  if (!isDefined("Observation.MSNameMask"))
-  {
-    sprintf(obsid, "%05u", getUint32("Observation.treeID"));
-    string msNumber = "/data/L" + getString("Observation.year") + "_" + string(obsid);
-  
-    if (getUint32("OLAP.subbandsPerPset") == 1 )
-    {
-      for (uint i = 0; i < nrSubbands(); i++)
-      {
-        sprintf(subbandID, "_SB%u", i);
-        msName = msNumber + string(subbandID) + ".MS";
-        msNames.push_back(msName);
-      }  
-    }
-    else
-    {
-      for (uint i = 0; i < nrSubbands()/getUint32("OLAP.subbandsPerPset") ; i++)
-      {
-        first = i * getUint32("OLAP.subbandsPerPset");
-        last =  first + getUint32("OLAP.subbandsPerPset") -1;
-        sprintf(subbandID, "_SB%u-%u", first, last);
-        msName = msNumber + string(subbandID) + ".MS";
-       msNames.push_back(msName);
-      }
-    }
-  }
-  else
-    return getStringVector("Observation.MSNameMask");
- 
-  return (msNames);
+  using namespace boost;
+
+  string	 name	   = getString("Observation.MSNameMask");
+  string	 startTime = getString("Observation.startTime");
+  vector<string> splitStartTime;
+  split(splitStartTime, startTime, is_any_of("- :"));
+
+  replace_all(name, "${YEAR}", splitStartTime[0]);
+  replace_all(name, "${MONTH}", splitStartTime[1]);
+  replace_all(name, "${DAY}", splitStartTime[2]);
+  replace_all(name, "${HOURS}", splitStartTime[3]);
+  replace_all(name, "${MINUTES}", splitStartTime[4]);
+  replace_all(name, "${SECONDS}", splitStartTime[5]);
+
+  replace_all(name, "${MSNUMBER}", str(format("%05u") % getUint32("Observation.ObsId")));
+  replace_all(name, "${SUBBAND}", str(firstSB != lastSB ? format("%u-%u") % firstSB % lastSB : format("%d") % firstSB));
+
+  return name;
 }
 
 vector<string> CS1_Parset::delay_Ports() const
diff --git a/Appl/CEP/CS1/CS1_Run/src/CS1.parset b/Appl/CEP/CS1/CS1_Run/src/CS1.parset
index 7ec53633039d26594d7f9f05ecdd95905c57cbf4..512bc850fd4febd331c09135c2616fc0f4be7b2d 100644
--- a/Appl/CEP/CS1/CS1_Run/src/CS1.parset
+++ b/Appl/CEP/CS1/CS1_Run/src/CS1.parset
@@ -47,6 +47,7 @@ OLAP.IONProc.integrationSteps = 1
 
 OLAP.StorageProc.integrationSteps = 60
 OLAP.StorageProc.subbandsPerMS = 1
+Observation.MSNameMask = /data/L${YEAR}_${MSNUMBER}/SB${SUBBAND}.MS
 
 # Variables for the DelayCompensation
 OLAP.DelayComp.converterType = IMPL  # should be one of IMPL, CLIENT
diff --git a/Appl/CEP/CS1/CS1_Run/src/CS1_Run.py b/Appl/CEP/CS1/CS1_Run/src/CS1_Run.py
index ae115cb7ca4d2f6082ee31c22dfb5006a5ea5549..c407e3baaa3d0fed67834afb3a4e2788f8fa7249 100755
--- a/Appl/CEP/CS1/CS1_Run/src/CS1_Run.py
+++ b/Appl/CEP/CS1/CS1_Run/src/CS1_Run.py
@@ -157,51 +157,35 @@ if __name__ == '__main__':
     runningNumberFile = '/log/nextMSNumber'
     MSdatabaseFile = '/log/MSList'
 
-    if not 'Observation.MSNameMask' in parset:
-        try:
-            inf = open(runningNumberFile, 'r')
-            measurementnumber = int(inf.readline())
-            inf.close()
-            
-            # MS name is L<yyyy>_<nnnnn>_<mmm>.MS
-            # the <mmm> is filled in by the subbandwriter
-	    
-	    #MSNumber = '/data/L' + parset.getString(Observation.year) + '_' + parset.getString('Observation.treeID')
-	    
-            year = str(time.gmtime()[0])
-            MSNumber = '/data/L' + year + '_' + '%05d' % measurementnumber
-	    MSName = MSNumber + '.MS'
-	    subbandsPerStorage = parset.getInt32('OLAP.subbandsPerPset') * parset.getInt32('OLAP.psetsPerStorage')
-	    subbandsPerMS      = parset.getInt32('OLAP.StorageProc.subbandsPerMS')
-	    
-	    if (subbandsPerMS == 1):
-	        MSName = '\'' + MSNumber + '/SB%01d' % 0 + '.MS' + '\''
-	        for i in range(1, len(parset.getInt32Vector('Observation.subbandList'))):
-                    MSName = MSName + ', \\\n' + '\'' + MSNumber + '/SB%01d' % i + '.MS' + '\''
-	    else:
-		MSName = '\'' + MSNumber + '/SB%01d' % 0 + '-%01d' % (subbandsPerMS - 1) +'.MS' + '\''
-		for i in range(1, len(parset.getInt32Vector('Observation.subbandList')) / subbandsPerMS):
-		    first = i * subbandsPerMS
-		    last =  first + subbandsPerMS - 1
-		    MSName = MSName + ', \\\n' + '\'' + MSNumber + '/SB%01d' % first + '-%01d' % last +'.MS' + '\''
-            
-            outf = open(runningNumberFile, 'w')
-            outf.write(str(measurementnumber + 1) + '\n')
-            outf.close()
-            
-            dbfile = open(MSdatabaseFile, 'a')
-            nodesStr = str([1] * parset.getNCells() + [0] * (12 - parset.getNCells()))[1:-1]
-            dateStr = time.strftime('%Y %0m %0d', time.gmtime())
-            dbfile.write(MSNumber + '\t' + dateStr + '\t' + nodesStr + '\n')
-            dbfile.close()
-        except:
-            MSName = '/data/Test.MS'
-	    sys.exit(1)
-
-	parset['Observation.MSNameMask'] = '[' + MSName + ']'
- 
+    try:
+	inf = open(runningNumberFile, 'r')
+	measurementnumber = int(inf.readline())
+	inf.close()
+	parset['Observation.ObsId'] = measurementnumber
+	outf = open(runningNumberFile, 'w')
+	outf.write(str(measurementnumber + 1) + '\n')
+	outf.close()
+	
+	dbfile = open(MSdatabaseFile, 'a')
+	nodesStr = str([1] * parset.getNCells() + [0] * (12 - parset.getNCells()))[1:-1]
+	dateStr = time.strftime('%Y %0m %0d %H %M %S', time.gmtime()).split()
+	MS = parset.getString('Observation.MSNameMask')
+	MS = MS.replace('${YEAR}', dateStr[0])
+	MS = MS.replace('${MONTH}', dateStr[1])
+	MS = MS.replace('${DAY}', dateStr[2])
+	MS = MS.replace('${HOURS}', dateStr[3])
+	MS = MS.replace('${MINUTES}', dateStr[4])
+	MS = MS.replace('${SECONDS}', dateStr[5])
+	MS = MS.replace('${MSNUMBER}', '%05d' % parset['Observation.ObsId'])
+	MS = MS.replace('${SUBBAND}', '*')
+	
+	dbfile.write(MS + '\t' + ' '.join(dateStr[0:3]) + '\t' + nodesStr + '\n')
+	dbfile.close()
+    except:
+	sys.exit(1)
+
 
-    obsID = 'L' + year + '_' + '%05d' % measurementnumber
+    obsID = 'L' + dateStr[0] + '_' + '%05d' % measurementnumber
     
     # start the observation
     doObservation(obsID, parset)
diff --git a/Appl/CEP/CS1/CS1_Storage/src/WH_SubbandWriter.cc b/Appl/CEP/CS1/CS1_Storage/src/WH_SubbandWriter.cc
index ff7e752d27cf0f512eabd30805183b7f7e70a92c..fb46e13458127ee2ecdfcd7df5ae3e602074a684 100644
--- a/Appl/CEP/CS1/CS1_Storage/src/WH_SubbandWriter.cc
+++ b/Appl/CEP/CS1/CS1_Storage/src/WH_SubbandWriter.cc
@@ -137,27 +137,6 @@ namespace LOFAR
       };
 #endif
 
-      // create MSWriter object
-      vector<string> msNames = itsCS1PS->msNames();
-
-#if 0
-      // split name in base part and extension (if any)
-      string::size_type idx = msName.rfind('.');
-      pair<string,string> ms(msName.substr(0,idx),
-                             idx == string::npos ? "" : msName.substr(idx));
-      // insert subband-id into the name
-      ostringstream oss;
-      oss << '.' << setfill('0') << setw(3) << itsSubbandID;
-      // rebuild the MS name string
-      msName = ms.first + oss.str() + ms.second;
-#endif
-      
-#if defined HAVE_MPI
-      LOG_TRACE_VAR_STR("Creating MS-file \"" << msNames[TH_MPI::getCurrentRank()] << "\"");
-#else
-      LOG_TRACE_VAR_STR("Creating MS-file \"" << msNames[0] << "\"");
-#endif
-      
       double startTime = itsCS1PS->startTime();
       LOG_TRACE_VAR_STR("startTime = " << startTime);
       
@@ -173,17 +152,20 @@ namespace LOFAR
 
       itsNrSubbandsPerMS = itsCS1PS->getUint32("OLAP.StorageProc.subbandsPerMS");
       ASSERT(itsCS1PS->getUint32("OLAP.subbandsPerPset") * itsCS1PS->getUint32("OLAP.psetsPerStorage") % itsNrSubbandsPerMS == 0);
-      itsWriters.resize(itsCS1PS->getUint32("OLAP.subbandsPerPset") * itsCS1PS->getUint32("OLAP.psetsPerStorage") / itsNrSubbandsPerMS);
-      itsFieldIDs.resize(itsWriters.size());
+      unsigned mssesPerStorage = itsCS1PS->getUint32("OLAP.subbandsPerPset") * itsCS1PS->getUint32("OLAP.psetsPerStorage") / itsNrSubbandsPerMS;
+      itsWriters.resize(mssesPerStorage);
+      itsFieldIDs.resize(mssesPerStorage);
   
-      for (unsigned i = 0; i < itsWriters.size(); i ++) {
-	itsWriters[i] = new MSWriter(
-
+      for (unsigned i = 0; i < mssesPerStorage; i ++) {
 #if defined HAVE_MPI
-	  msNames[TH_MPI::getCurrentRank() * itsWriters.size() + i].c_str(),
+	unsigned firstSubband = (TH_MPI::getCurrentRank() * mssesPerStorage + i) * itsNrSubbandsPerMS;
 #else
-	  msNames[i].c_str(),
+	unsigned firstSubband = i * itsNrSubbandsPerMS;
 #endif
+	unsigned lastSubband  = firstSubband + itsNrSubbandsPerMS - 1;
+
+	itsWriters[i] = new MSWriter(
+	  itsCS1PS->getMSname(firstSubband, lastSubband).c_str(),
 	  startTime, itsCS1PS->storageIntegrationTime(), itsNChannels,
 	  itsNPolSquared, itsNBeams, itsNStations, antPos,
 	  storageStationNames, itsTimesToIntegrate, itsNrSubbandsPerMS);