diff --git a/.gitattributes b/.gitattributes
index 6784302f8ebf0a1210567b9360e952cc296f2939..45952126d823ff4e38c47b754150fc326da07e26 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -72,6 +72,8 @@ CEP/BB/BBSKernel/test/tParmMerge.in_mep2/table.f0 -text svneol=unset#unset
 CEP/BB/BBSKernel/test/tParmMerge.in_mep2/table.f0i -text svneol=unset#unset
 CEP/BB/BBSKernel/test/tParmMerge.in_mep2/table.lock -text svneol=unset#unset
 CEP/BB/BB_GUI/make_jar.sh -text svneol=native#application/octet-stream
+CEP/BB/MWImager/bootstrap -text
+CEP/BB/MWImager/src/mwimager -text
 CEP/BB/SourceDB/bootstrap -text
 CEP/CPA/PSS3/CAL/src/TEST.MEP/InitialValues/table.dat -text svneol=unset#unset
 CEP/CPA/PSS3/CAL/src/TEST.MEP/InitialValues/table.f0 -text svneol=unset#unset
diff --git a/CEP/BB/MWImager/Makefile.am b/CEP/BB/MWImager/Makefile.am
new file mode 100644
index 0000000000000000000000000000000000000000..7ccd237825e0ad2757534e8056048d00cc1476c8
--- /dev/null
+++ b/CEP/BB/MWImager/Makefile.am
@@ -0,0 +1,3 @@
+SUBDIRS       = include src test
+
+include $(top_srcdir)/Makefile.common
diff --git a/CEP/BB/MWImager/bootstrap b/CEP/BB/MWImager/bootstrap
new file mode 100755
index 0000000000000000000000000000000000000000..06f18cde1dbfd6912ef7d927c4d35d25c7137a62
--- /dev/null
+++ b/CEP/BB/MWImager/bootstrap
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+../../../autoconf_share/bootstrap ../../../autoconf_share
diff --git a/CEP/BB/MWImager/configure.in b/CEP/BB/MWImager/configure.in
new file mode 100644
index 0000000000000000000000000000000000000000..0c90906f8fc3d20bb97fdebf006c10880d186ba6
--- /dev/null
+++ b/CEP/BB/MWImager/configure.in
@@ -0,0 +1,66 @@
+dnl
+dnl Process this file with autoconf to produce a configure script.
+dnl
+AC_INIT()
+dnl AC_CONFIG_AUX_DIR(config)
+dnl AM_CONFIG_HEADER(config/config.h)
+AM_CONFIG_HEADER(config.h)
+AM_INIT_AUTOMAKE(MWImager, 0.1, no-define)
+
+dnl Initialize for LOFAR (may set compilers)
+lofar_INIT
+
+dnl Checks for programs.
+AC_PROG_AWK
+AC_PROG_YACC
+AC_PROG_CC
+AC_PROG_CXX
+AM_PROG_LEX
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_DISABLE_SHARED
+AC_PROG_LIBTOOL
+
+dnl Checks for libraries.
+
+dnl dnl Replace `main' with a function in -lfl:
+dnl AC_CHECK_LIB(fl, main)
+dnl dnl Replace `main' with a function in -lcosev_r:
+dnl AC_CHECK_LIB(cosev_r, main)
+dnl dnl Replace `main' with a function in -lcosnm_r:
+dnl AC_CHECK_LIB(cosnm_r, main)
+dnl dnl Replace `main' with a function in -lorb_r:
+dnl AC_CHECK_LIB(orb_r, main)
+dnl dnl Replace `main' with a function in -lpthread:
+dnl AC_CHECK_LIB(pthread, main)
+dnl dnl Replace `main' with a function in -lvport_r:
+dnl AC_CHECK_LIB(vport_r, main)
+
+dnl Checks for header files.
+AC_HEADER_STDC
+AC_CHECK_HEADERS(unistd.h)
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_TYPE_SIZE_T
+
+dnl Checks for library functions.
+AC_FUNC_VPRINTF
+
+dnl
+dnl Check for LOFAR specific things
+dnl
+lofar_GENERAL
+lofar_INTERNAL(LCS/Common,Common,,1,Common/LofarTypedefs.h,,)
+lofar_INTERNAL(LCS/ACC/APS,APS,,1,APS/ParameterSet.h,,)
+
+dnl
+dnl Output Makefiles
+dnl
+AC_OUTPUT(
+include/Makefile
+include/MWImager/Makefile
+src/Makefile
+test/Makefile
+Makefile
+)
diff --git a/CEP/BB/MWImager/include/MWImager/ConvertParset.h b/CEP/BB/MWImager/include/MWImager/ConvertParset.h
new file mode 100644
index 0000000000000000000000000000000000000000..504b96da37b35fd4285eaa0e610eb024a66cf76d
--- /dev/null
+++ b/CEP/BB/MWImager/include/MWImager/ConvertParset.h
@@ -0,0 +1,43 @@
+//# ConvertParset.h: Convert a ParSet file from SAS to cimager format
+//#
+//# Copyright (C) 2008
+//# ASTRON (Netherlands Foundation for Research in Astronomy)
+//# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands, seg@astron.nl
+//#
+//# This program is free software; you can redistribute it and/or modify
+//# it under the terms of the GNU General Public License as published by
+//# the Free Software Foundation; either version 2 of the License, or
+//# (at your option) any later version.
+//#
+//# This program is distributed in the hope that it will be useful,
+//# but WITHOUT ANY WARRANTY; without even the implied warranty of
+//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//# GNU General Public License for more details.
+//#
+//# You should have received a copy of the GNU General Public License
+//# along with this program; if not, write to the Free Software
+//# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//#
+//# $Id$
+
+#include <APS/ParameterSet.h>
+
+namespace LOFAR {
+
+  class MWImager
+  {
+  public:
+    // Convert the input parset file (in SAS format) to the output parset
+    // (in cimager format).
+    // The output parset is written if the output name is not empty.
+    static ACC::APS::ParameterSet convertParset (const std::string& nameIn,
+						 const std::string& nameOut);
+
+    // Convert the input parset (in SAS format) to the output parset
+    // (in cimager format).
+    // The output parset is written if the output name is not empty.
+    static ACC::APS::ParameterSet convertParset (const ACC::APS::ParameterSet&,
+						 const std::string& nameOut);
+  };
+
+}  //# namespace LOFAR
diff --git a/CEP/BB/MWImager/include/MWImager/Makefile.am b/CEP/BB/MWImager/include/MWImager/Makefile.am
new file mode 100644
index 0000000000000000000000000000000000000000..22a51496e01d48927071bcc3317a7f7aaf172bae
--- /dev/null
+++ b/CEP/BB/MWImager/include/MWImager/Makefile.am
@@ -0,0 +1,4 @@
+pkginclude_HEADERS	= Package__Version.h \
+			  ConvertParset.h
+
+include $(top_srcdir)/Makefile.common
diff --git a/CEP/BB/MWImager/include/Makefile.am b/CEP/BB/MWImager/include/Makefile.am
new file mode 100644
index 0000000000000000000000000000000000000000..0a70cf401e7826994d680b0c5772f3735cef2705
--- /dev/null
+++ b/CEP/BB/MWImager/include/Makefile.am
@@ -0,0 +1,3 @@
+SUBDIRS	= MWImager
+
+include $(top_srcdir)/Makefile.common
diff --git a/CEP/BB/MWImager/src/ConvertParset.cc b/CEP/BB/MWImager/src/ConvertParset.cc
new file mode 100644
index 0000000000000000000000000000000000000000..34909d9e69b15ce11d096de9ca4d915561b983e5
--- /dev/null
+++ b/CEP/BB/MWImager/src/ConvertParset.cc
@@ -0,0 +1,154 @@
+//# ConvertParset.cc: Convert a ParSet file from SAS to cimager format
+//#
+//# Copyright (C) 2008
+//# ASTRON (Netherlands Foundation for Research in Astronomy)
+//# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands, seg@astron.nl
+//#
+//# This program is free software; you can redistribute it and/or modify
+//# it under the terms of the GNU General Public License as published by
+//# the Free Software Foundation; either version 2 of the License, or
+//# (at your option) any later version.
+//#
+//# This program is distributed in the hope that it will be useful,
+//# but WITHOUT ANY WARRANTY; without even the implied warranty of
+//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//# GNU General Public License for more details.
+//#
+//# You should have received a copy of the GNU General Public License
+//# along with this program; if not, write to the Free Software
+//# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//#
+//# $Id$
+
+#include <lofar_config.h>
+#include <MWImager/ConvertParset.h>
+#include <Common/StringUtil.h>
+#include <Common/StreamUtil.h>
+#include <sstream>
+#include <iostream>
+
+using namespace std;
+
+namespace LOFAR {
+
+  ACC::APS::ParameterSet MWImager::convertParset (const string& nameIn,
+						const string& nameOut)
+  {
+    return convertParset (ACC::APS::ParameterSet(nameIn), nameOut);
+  }
+
+  ACC::APS::ParameterSet MWImager::convertParset (const ACC::APS::ParameterSet& in,
+						const string& nameOut)
+  {
+    ACC::APS::ParameterSet out;
+    string outname;
+    {
+      string datacolumn  = in.getString ("datacolumn");
+      string dataset     = in.getString ("dataset");
+      string minUV       = in.getString ("minUV");
+      string ncycles     = in.getString ("ncycles");
+      string restore     = in.getString ("restore");
+      vector<double> restoreBeam = in.getDoubleVector ("restore_beam");
+      out.add ("Cimager.dataset",    dataset);
+      out.add ("Cimager.datacolumn", datacolumn);
+      out.add ("Cimager.MinUV",      minUV);
+      out.add ("Cimager.ncycles",    ncycles);
+      out.add ("Cimager.restore",    restore);
+      vector<string> restoreBeamStr (restoreBeam.size());
+      for (unsigned i=0; i<restoreBeam.size(); ++i) {
+	ostringstream os;
+	os << restoreBeam[i];
+	restoreBeamStr[i] = os.str() + "deg";
+      }
+      ostringstream osvec;
+      osvec << restoreBeamStr;
+      out.add ("Cimager.restore.beam", osvec.str());
+      // The output name is the MS name minus the possibly trailing .MS.
+      outname = dataset;
+      string::size_type pos = outname.rfind (".MS");
+      if (pos != string::npos) {
+	outname.erase (pos);
+      }
+    }
+    {
+      ACC::APS::ParameterSet grin = in.makeSubset ("Gridder.");
+      string cutoff     = grin.getString ("cutoff");
+      string nfacets    = grin.getString ("nfacets");
+      string nwplanes   = grin.getString ("nwplanes");
+      string oversample = grin.getString ("oversample");
+      string wmax       = grin.getString ("wmax");
+      string maxsupport = grin.getString ("maxsupport");
+      string type       = grin.getString ("type");
+      string name = "Cimager.gridder." + type;
+      out.add ("Cimager.gridder",    type);
+      out.add (name + ".wmax",       wmax);
+      out.add (name + ".nwplanes",   nwplanes);
+      out.add (name + ".oversample", oversample);
+      out.add (name + ".cutoff",     cutoff);
+      out.add (name + ".maxsupport", maxsupport);
+    }
+    {
+      ACC::APS::ParameterSet soin = in.makeSubset ("Solver.");
+      string algorithm = soin.getString ("algorithm");
+      string gain      = soin.getString ("gain");
+      string niter     = soin.getString ("niter");
+      string type      = soin.getString ("type");
+      string verbose   = soin.getString ("verbose");
+      string scales    = soin.getString ("scales");
+      out.add ("Cimager.solver", type);
+      out.add ("Cimager.solver.Clean.algorithm", algorithm);
+      out.add ("Cimager.solver.Clean.niter",     niter);
+      out.add ("Cimager.solver.Clean.gain",      gain);
+      out.add ("Cimager.solver.Clean.verbose",   verbose);
+      out.add ("Cimager.solver.Clean.scales",    scales);
+      outname += '_' + type;
+    }
+    {
+      ACC::APS::ParameterSet imin = in.makeSubset ("Images.");
+      string angle1    = imin.getString ("angle1");
+      string angle2    = imin.getString ("angle2");
+      string dirType   = imin.getString ("directionType");
+      string nchan     = imin.getString ("nchan");
+      string shape     = imin.getString ("shape");
+      string frequency = imin.getString ("frequency");
+      vector<string> stokes   = imin.getStringVector ("stokes");
+      vector<int32>  cellSize = imin.getInt32Vector  ("cellSize");
+      vector<string> cellSizeVec (cellSize.size());
+      for (unsigned i=0; i<cellSize.size(); ++i) {
+	ostringstream os;
+	os << cellSize[i] << "arcsec";
+	cellSizeVec[i] = os.str();
+      }
+      ostringstream cellSizeStr;
+      cellSizeStr << cellSizeVec;
+      vector<string> names(stokes.size());
+      for (unsigned i=0; i<stokes.size(); ++i) {
+	stokes[i] = toLower(stokes[i]);
+	names[i]  = "image." + stokes[i] + '.' + outname;
+      }
+      ostringstream namesStr;
+      namesStr << names;
+      out.add ("Cimager.Images.Names", namesStr.str());
+      vector<string> dirVec(3);
+      dirVec[0] = angle1;
+      dirVec[1] = angle2;
+      dirVec[2] = dirType;
+      ostringstream dirVecStr;
+      dirVecStr << dirVec;
+      for (unsigned i=0; i<stokes.size(); ++i) {
+	string name = "Cimager.Images.image." + stokes[i] + '.' + outname + '.';
+	out.add (name+"shape",     shape);
+	out.add (name+"cellsize",  cellSizeStr.str());
+	out.add (name+"frequency", frequency);
+	out.add (name+"nchan",     nchan);
+	out.add (name+"direction", dirVecStr.str());
+      }
+    }
+    // Write into a parset file if output name is given.
+    if (! nameOut.empty()) {
+      out.writeFile (nameOut);
+    }
+    return out;
+  }
+
+}  //# namespace LOFAR
diff --git a/CEP/BB/MWImager/src/Makefile.am b/CEP/BB/MWImager/src/Makefile.am
new file mode 100644
index 0000000000000000000000000000000000000000..29c5840a10588884a1c710d9944d867a4c91f6cd
--- /dev/null
+++ b/CEP/BB/MWImager/src/Makefile.am
@@ -0,0 +1,21 @@
+lib_LTLIBRARIES		= libmwimager.la
+
+libmwimager_la_SOURCES	= Package__Version.cc \
+			  ConvertParset.cc
+
+bin_PROGRAMS 		= versionmwimager \
+			  convertimagerparset
+
+convertimagerparset_SOURCES		= convertimagerparset.cc
+convertimagerparset_LDADD		= libmwimager.la
+convertimagerparset_DEPENDENCIES	= libmwimager.la $(LOFAR_DEPEND)
+
+versionmwimager_SOURCES      = versionmwimager.cc
+versionmwimager_LDADD        = libmwimager.la
+versionmwimager_DEPENDENCIES = libmwimager.la $(LOFAR_DEPEND)
+
+scriptdir = $(bindir)
+dist_script_SCRIPTS = mwimager
+
+include $(top_srcdir)/Makefile.common
+
diff --git a/CEP/BB/MWImager/src/convertimagerparset.cc b/CEP/BB/MWImager/src/convertimagerparset.cc
new file mode 100644
index 0000000000000000000000000000000000000000..3248db69013fe71de1d8e240c86941cea0f3a6a7
--- /dev/null
+++ b/CEP/BB/MWImager/src/convertimagerparset.cc
@@ -0,0 +1,42 @@
+//# convertimagerparset.cc: Convert a ParSet file from SAS to cimager format
+//#
+//# Copyright (C) 2008
+//# ASTRON (Netherlands Foundation for Research in Astronomy)
+//# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands, seg@astron.nl
+//#
+//# This program is free software; you can redistribute it and/or modify
+//# it under the terms of the GNU General Public License as published by
+//# the Free Software Foundation; either version 2 of the License, or
+//# (at your option) any later version.
+//#
+//# This program is distributed in the hope that it will be useful,
+//# but WITHOUT ANY WARRANTY; without even the implied warranty of
+//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//# GNU General Public License for more details.
+//#
+//# You should have received a copy of the GNU General Public License
+//# along with this program; if not, write to the Free Software
+//# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+//#
+//# $Id$
+
+#include <lofar_config.h>
+#include <MWImager/ConvertParset.h>
+#include <iostream>
+
+using namespace std;
+using namespace LOFAR;
+
+int main (int argc, const char* argv[])
+{
+  if (argc < 3) {
+    cerr << "Run as:  convertimagerparset namein nameout" << endl;
+  }
+  try {
+    MWImager::convertParset (argv[1], argv[2]);
+  } catch (std::exception& x) {
+    cerr << string("Unexpected exception: ") + x.what() << endl;
+    return 1;
+  }
+  return 0;
+}
diff --git a/CEP/BB/MWImager/src/mwimager b/CEP/BB/MWImager/src/mwimager
new file mode 100755
index 0000000000000000000000000000000000000000..f77f940f443cb2814f228414ca9fa6493ca409d4
--- /dev/null
+++ b/CEP/BB/MWImager/src/mwimager
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+if test $# != 1; then
+  echo "run as:   mwimager parset-file"
+  exit 1
+fi
+
+# Convert parset file from SAS format to cimager format.
+convertimagerparset $1 $1.cvt
+
+# Run the imager.
+~/askapsoft/Code/Components/Synthesis/synthesis/trunk/apps/cimager.sh -inputs $1.cvt
+
+# Convert to FITS.
+## image2fits 
diff --git a/CEP/BB/MWImager/test/Makefile.am b/CEP/BB/MWImager/test/Makefile.am
new file mode 100644
index 0000000000000000000000000000000000000000..3ad1c1d94ea04c8c1218401bf30387d5ea986254
--- /dev/null
+++ b/CEP/BB/MWImager/test/Makefile.am
@@ -0,0 +1,8 @@
+CHECKTOOLPROGS		= tconvertimagerparset
+
+TESTS		= tconvertimagerparset.sh
+
+EXTRA_DIST	= tconvertimagerparset.in tconvertimagerparset.stdout
+
+include $(top_srcdir)/Makefile.common
+
diff --git a/CEP/BB/MWImager/test/tconvertimagerparset.in b/CEP/BB/MWImager/test/tconvertimagerparset.in
new file mode 100644
index 0000000000000000000000000000000000000000..d7bfaa6044524da906059d2037719370d14fe10a
--- /dev/null
+++ b/CEP/BB/MWImager/test/tconvertimagerparset.in
@@ -0,0 +1,30 @@
+Images.stokes = [I,Q,U,V]
+Images.shape = [20,48, 2048]
+Images.cellSize = [240, 240]
+Images.frequency = [12345678, 12345679]
+Images.nchan = 1
+Images.angle1 = 230.35
+Images.angle2 = -10,345
+Images.directionType = J2000
+
+Solver.type = Dirty
+Solver.algorithm = MultiScale
+Solver.niter = 10
+Solver.gain = 1.0
+Solver.verbose = True
+Solver.scales = [0, 3]
+
+Gridder.type = WProject
+Gridder.wmax = 75
+Gridder.nwplanes = 201
+Gridder.oversample = 2
+Gridder.maxsupport = 1024
+Gridder.cutoff = 0.001
+Gridder.nfacets = 1
+
+dataset = abc/def.MS
+datacolumn = CORRECTED_DATA
+minUV = 1.0
+ncycles = 0
+restore = False
+restore_beam = [1, 1, 0]
diff --git a/CEP/BB/MWImager/test/tconvertimagerparset.run b/CEP/BB/MWImager/test/tconvertimagerparset.run
new file mode 100755
index 0000000000000000000000000000000000000000..20d1a8269a693034956005370237ad3f165fb065
--- /dev/null
+++ b/CEP/BB/MWImager/test/tconvertimagerparset.run
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+../src/convertimagerparset tconvertimagerparset.in tconvertimagerparset_tmp.dat
+cat tconvertimagerparset_tmp.dat
diff --git a/CEP/BB/MWImager/test/tconvertimagerparset.sh b/CEP/BB/MWImager/test/tconvertimagerparset.sh
new file mode 100755
index 0000000000000000000000000000000000000000..1420a20b7ba5e3d440f33dae679073424e0f2300
--- /dev/null
+++ b/CEP/BB/MWImager/test/tconvertimagerparset.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+$lofar_sharedir/runtest.sh tconvertimagerparset > tconvertimagerparset.log 2>&1
diff --git a/CEP/BB/MWImager/test/tconvertimagerparset.stdout b/CEP/BB/MWImager/test/tconvertimagerparset.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..59e32a2451f9bbb5ee3b57021d2a0ac503cd84ed
--- /dev/null
+++ b/CEP/BB/MWImager/test/tconvertimagerparset.stdout
@@ -0,0 +1,39 @@
+Cimager.Images.Names=[image.i.abc/def_Dirty,image.q.abc/def_Dirty,image.u.abc/def_Dirty,image.v.abc/def_Dirty]
+Cimager.Images.image.i.abc/def_Dirty.cellsize=[240arcsec,240arcsec]
+Cimager.Images.image.i.abc/def_Dirty.direction=[230.35,-10,345,J2000]
+Cimager.Images.image.i.abc/def_Dirty.frequency=[12345678, 12345679]
+Cimager.Images.image.i.abc/def_Dirty.nchan=1
+Cimager.Images.image.i.abc/def_Dirty.shape=[20,48, 2048]
+Cimager.Images.image.q.abc/def_Dirty.cellsize=[240arcsec,240arcsec]
+Cimager.Images.image.q.abc/def_Dirty.direction=[230.35,-10,345,J2000]
+Cimager.Images.image.q.abc/def_Dirty.frequency=[12345678, 12345679]
+Cimager.Images.image.q.abc/def_Dirty.nchan=1
+Cimager.Images.image.q.abc/def_Dirty.shape=[20,48, 2048]
+Cimager.Images.image.u.abc/def_Dirty.cellsize=[240arcsec,240arcsec]
+Cimager.Images.image.u.abc/def_Dirty.direction=[230.35,-10,345,J2000]
+Cimager.Images.image.u.abc/def_Dirty.frequency=[12345678, 12345679]
+Cimager.Images.image.u.abc/def_Dirty.nchan=1
+Cimager.Images.image.u.abc/def_Dirty.shape=[20,48, 2048]
+Cimager.Images.image.v.abc/def_Dirty.cellsize=[240arcsec,240arcsec]
+Cimager.Images.image.v.abc/def_Dirty.direction=[230.35,-10,345,J2000]
+Cimager.Images.image.v.abc/def_Dirty.frequency=[12345678, 12345679]
+Cimager.Images.image.v.abc/def_Dirty.nchan=1
+Cimager.Images.image.v.abc/def_Dirty.shape=[20,48, 2048]
+Cimager.MinUV=1.0
+Cimager.datacolumn=CORRECTED_DATA
+Cimager.dataset=abc/def.MS
+Cimager.gridder=WProject
+Cimager.gridder.WProject.cutoff=0.001
+Cimager.gridder.WProject.maxsupport=1024
+Cimager.gridder.WProject.nwplanes=201
+Cimager.gridder.WProject.oversample=2
+Cimager.gridder.WProject.wmax=75
+Cimager.ncycles=0
+Cimager.restore=False
+Cimager.restore.beam=[1deg,1deg,0deg]
+Cimager.solver=Dirty
+Cimager.solver.Clean.algorithm=MultiScale
+Cimager.solver.Clean.gain=1.0
+Cimager.solver.Clean.niter=10
+Cimager.solver.Clean.scales=[0, 3]
+Cimager.solver.Clean.verbose=True