diff --git a/Appl/CEP/CS1/CS1_DFTImager/src/DFTImager.cc b/Appl/CEP/CS1/CS1_DFTImager/src/DFTImager.cc
index b0c92c6db629f22973c36faf198955b51775a2b2..7ea02509383487a152f6b0dfe5bf3105f498d072 100644
--- a/Appl/CEP/CS1/CS1_DFTImager/src/DFTImager.cc
+++ b/Appl/CEP/CS1/CS1_DFTImager/src/DFTImager.cc
@@ -73,11 +73,6 @@ namespace LOFAR
     //  PolarizationsToCheck.resize(NumPolarizations);
     //  DeterminePolarizationsToCheck(UseOnlyXpolarizations);
 
-      TimeslotData.resize(NumPairs*NumBands);
-      for (int i = 0; i < NumPairs*NumBands; i++)
-      { TimeslotData[i].resize(NumPolarizations, NumChannels, WindowSize);
-      }
-
       int index = 0;
       for (int i = 0; i < NumAntennae; i++)
       { for(int j = i; j < NumAntennae; j++)
@@ -164,66 +159,104 @@ namespace LOFAR
       }
     }
 
-    //===============>>> DFTImager::ImageTimeslot  <<<===============
-    /* This function iterates over baseline and band and uses FlagBaselineBand() to determine
-      for each one if it needs to be flagged. It treats the autocorrelations separately,
-      to detect entire malfunctioning telescopes. Finally it writes the flags.
+    //===============>>> DFTImager::ImageBaseline  <<<===============
+    /*
+      Cube<Complex>         TimeslotData(NumBands*NumPairs, NumPolarizations, NumChannels);
+      Matrix<Double>        UVWData(NumBands*NumPairs, 3);
+      vector< Cube<float> > Image(NumBands, Cube<float> (Resolution, Resolution, NumChannels));
     */
-    void DFTImager::ImageTimeslot()
+    void DFTImager::ImageBaseline(Matrix<Complex>& TimeslotData,
+                                  Vector<Double>& UVWData,
+                                  Cube<float>& Image)
     {
-/*      Cube<bool>     Image(NumPolarizations, NumChannels, NumPairs*NumBands, false);
-      vector<bool>   test(NumPairs*NumBands);
-      for (int i = 0; i < NumBands; i++)
+      vector<double> arrayLM(Resolution+1);
+      const double pi   = 3.14;
+      const double Freq = 60000000.0; // needs to be parameter
+      const double c    = 299792458.0;
+      for (int i=0; i <= Resolution; i++)
+      { arrayLM[i] = -1 + i*2/Resolution;
+      }
+      for (int k = 0; k < NumChannels; k++)
       {
-        vector< vector<double> > CrossCorrRMS(NumPolarizations, NumPairs - NumAntennae);
-        for(int j = 0; j < NumAntennae; j++)
+        Matrix<float> skymap(Resolution, Resolution);
+        for (int l = 0; l < Resolution; l++)
         {
-          for(int k = j+1; k < NumAntennae; k++)
+          //cout << l << ":";
+          for (int m = 0; m < Resolution; m++)
           {
-            int index = i*NumPairs + BaselineIndex[pairii(j, k)];
-            Matrix<Bool> image = Image.xyPlane(index);
-            if ((BaselineLengths[BaselineIndex[pairii(j, k)]] < 3000000))//radius of the Earth in meters? WSRT sometimes has fake telescopes at 3854243 m
-            { //we skip the non-existent telescopes
-              test = ImageBaselineBand(&image,
-                                        &(TimeslotData[index]),
-                                        Position);
+            //cout << m << ";";
+            double temp = (arrayLM[l]*arrayLM[l] + arrayLM[m]*arrayLM[m]);
+            if (temp < 1.0)
+            {
+              double n = std::sqrt(1 - temp);
+              Complex I = TimeslotData(k, 0) + TimeslotData(k, NumPolarizations-1);
+              Complex X = UVWData(0)*arrayLM[l] + UVWData(1)*arrayLM[m]+ UVWData(2) * (n - 1.0);
+              Complex z = Complex(n, 0)*I*exp(Complex(2,0)*Complex(pi, 0)*Complex(0,1)*Complex(Freq, 0)*X/Complex(c, 0));
+              skymap(l, m) += 2 * z.real();
             }
           }
         }
-        //this code could be separated in to different functions
-        for(int j = 0; j < NumAntennae; j++) //write the data
+        Image.xyPlane(k) = Image.xyPlane(k) + skymap;
+      }
+    }
+    //===============>>> DFTImager::ImageTimeslot  <<<===============
+    /*
+      Cube<Complex>         TimeslotData(NumBands*NumPairs, NumPolarizations, NumChannels);
+      Matrix<Double>        UVWData(NumBands*NumPairs, 3);
+      vector< Cube<float> > Image(NumBands, Cube<float> (Resolution, Resolution, NumChannels));
+    */
+    void DFTImager::ImageTimeslot(Cube<Complex>& TimeslotData,
+                                  Matrix<Double>& UVWData,
+                                  vector<Cube<float> >& Image)
+    {
+      for (int k = 0; k < NumBands; k++)
+      {
+        for(int l = 0; l < NumAntennae; l++)
         {
-          for(int k = j; k < NumAntennae; k++)
+          for(int m = l+1; m < NumAntennae; m++)
           {
-            int index = i*NumPairs + BaselineIndex[pairii(j, k)];
-            Matrix<bool> image = Image.xyPlane(index);
-            (*Imagefile).WriteImageData(&image);
+            int index = k*NumPairs + BaselineIndex[pairii(l, m)];
+            if ((BaselineLengths[BaselineIndex[pairii(l, m)]] < 3000000))//radius of the Earth in meters? WSRT sometimes has fake telescopes at 3854243 m
+            { //we skip the non-existent telescopes
+              if (UVWData(0, index)*UVWData(0, index) + UVWData(1, index)*UVWData(1, index) + UVWData(2, index)*UVWData(2, index) > 0.1)
+              {
+                Matrix<Complex> TD = TimeslotData.xyPlane(index);
+                Vector<Double> UD  = UVWData.column(index);
+                ImageBaseline(TD, UD, Image[k]);
+              }
+            }
           }
         }
-      }*/
+      }
     }
-
     //===============>>> DFTImager::UpdateTimeslotData  <<<===============
     /* This function reads the visibility data for one timeslot and checks if
       a mosaicing mode is active*/
     /* The datastructure Timeslotdata is rather complex because it flattens
        half-filled antenna x antenna x bands matrix into a vector of NumPairs X bands length. */
-    bool DFTImager::UpdateTimeslotData(vector<int>* OldFields,
-                                                  vector<int>* OldBands,
-                                                  int* TimeCounter,
-                                                  Table* TimeslotTable,
-                                                  double* Time)
+    bool DFTImager::UpdateTimeslotData(vector<int>& OldFields,
+                                       vector<int>& OldBands,
+                                       int* TimeCounter,
+                                       Table* TimeslotTable,
+                                       Cube<Complex>& TimeslotData,
+                                       Matrix<Double>& UVWData,
+                                       double* Time)
     {
       int           rowcount = (*TimeslotTable).nrow();
+
       ROTableVector<Int>     antenna1((*TimeslotTable), "ANTENNA1");
       ROTableVector<Int>     antenna2((*TimeslotTable), "ANTENNA2");
       ROTableVector<Int>     bandnr  ((*TimeslotTable), "DATA_DESC_ID");
       ROTableVector<Int>     fieldid ((*TimeslotTable), "FIELD_ID");
       ROTableVector<Double>  time    ((*TimeslotTable), "TIME_CENTROID");//for testing purposes
       ROArrayColumn<Complex> data    ((*TimeslotTable), "DATA");
+      ROArrayColumn<Double>  uvw     ((*TimeslotTable), "UVW");
+
+      Matrix<Double>         uvwdata(3, rowcount);
       Cube<Complex>          Data(NumPolarizations, NumChannels, rowcount);
 
       data.getColumn(Data); //We're not checking Data.nrow() Data.ncolumn(), assuming all data is the same size.
+      uvw.getColumn(uvwdata);
       (*Time) = time(0);//for testing purposes, might be useful in the future
 
       bool NewField_or_Frequency = false;
@@ -234,19 +267,21 @@ namespace LOFAR
         int field = fieldid(i);
         int band  = bandnr(i);
         int index = (band % NumBands) * NumPairs + bi;
-        if ((*TimeCounter) > WindowSize - 1)
+        if ((*TimeCounter) > 1)
         {
-          if (field != (*OldFields)[bi]) //pointing mosaicing
-          { NewField_or_Frequency = true;
+          if (field != OldFields[bi]) //pointing mosaicing
+          { //NewField_or_Frequency = true;
+            cout << "OldField:" << OldFields[bi] << " NewField:" << field << endl;
           }
-          if (band  != (*OldBands)[index]) //frequency mosaicing
-          { NewField_or_Frequency = true;
+          if (band  != OldBands[index]) //frequency mosaicing
+          { //NewField_or_Frequency = true;
+            cout << "OldBand:" << OldBands[bi] << " NewBand:" << band << endl;
           }
         }
-        (*OldFields)[bi]   = field;
-        (*OldBands)[index] = band;
-
-        TimeslotData[index].xyPlane((*TimeCounter) % WindowSize) = Data.xyPlane(i); //TimeslotData is only WindowSize size!
+        OldFields[bi]   = field;
+        OldBands[index] = band;
+        TimeslotData.xyPlane(index) = Data.xyPlane(i);
+        UVWData.column(index)       = uvwdata.column(i);
       }
       (*TimeCounter)++; //we want to reset if we detect a gap in DATA_DESC_ID or FIELD. Maybe TIME too???
       return NewField_or_Frequency; //assuming everybody is changing field or frequency at the same time!
@@ -255,14 +290,17 @@ namespace LOFAR
     //===============>>> DFTImager::FlagDataOrBaselines  <<<===============
     /* This function iterates over the data per timeslot and uses Flagtimeslot()
       to actually flag datapoints (if flagDatapoints), and entire baselines (if flagRMS)*/
-    void DFTImager::MakeImage(int Resolution)
+    void DFTImager::MakeImage(int resolution)
     {
-      TableIterator timeslot_iter = (*MSfile).TimeslotIterator();
-      int           TimeCounter   = 0;
-      double        Time          = 0.0;//for testing purposes
-      vector<int>   OldFields(NumPairs);         //to check on multipointing and mosaicing
-      vector<int>   OldBands(NumPairs*NumBands); //to check on multifrequency and freq mosaicing
-      vector< Cube<float> > Image(NumBands);
+      Resolution = resolution;
+      TableIterator         timeslot_iter = (*MSfile).TimeslotIterator();
+      int                   TimeCounter   = 0;
+      double                Time          = 0.0;//for testing purposes
+      vector<int>           OldFields(NumPairs);         //to check on multipointing and mosaicing
+      vector<int>           OldBands(NumPairs*NumBands); //to check on multifrequency and freq mosaicing
+      Cube<Complex>         TimeslotData(NumPolarizations, NumChannels, NumBands*NumPairs);
+      Matrix<Double>        UVWData(3, NumBands*NumPairs);
+      vector< Cube<float> > Image(NumBands, Cube<float> (Resolution, Resolution, NumChannels, 0.0));
 
       int           step          = NumTimeslots / 10 + 1; //not exact but it'll do
       int           row           = 0;
@@ -270,10 +308,12 @@ namespace LOFAR
       while (!timeslot_iter.pastEnd())
       {
         Table TimeslotTable  = timeslot_iter.table();
-        bool  NewFieldorFreq = UpdateTimeslotData(&OldFields,
-                                                  &OldBands,
+        bool  NewFieldorFreq = UpdateTimeslotData(OldFields,
+                                                  OldBands,
                                                   &TimeCounter,
                                                   &TimeslotTable,
+                                                  TimeslotData,
+                                                  UVWData,
                                                   &Time);
         if (NewFieldorFreq)
         {
@@ -282,13 +322,15 @@ namespace LOFAR
         }
         cout << "Processing: " << MVTime(Time/(24*3600)).string(MVTime::YMD) << endl; //for testing purposes
 
-        ImageTimeslot();
+        ImageTimeslot(TimeslotData,
+                      UVWData,
+                      Image);
         timeslot_iter++;
         if (row++ % step == 0) // to tell the user how much % we have processed,
         { cout << 10*(row/step) << "%" << endl; //not very accurate for low numbers of timeslots, but it'll do for now
         }
       }
-      Imagefile->WriteImage(&Image);
+      Imagefile->WriteImage(Image);
     }
     //===============>>> DFTImager  <<<===============
   } //namespace CS1
diff --git a/Appl/CEP/CS1/CS1_DFTImager/src/DFTImager.h b/Appl/CEP/CS1/CS1_DFTImager/src/DFTImager.h
index 6767aa4b0785cfad92a5178901824045a47edb8f..2c736d2518a5d12cb6abca16cf2a1c42d30d2058 100644
--- a/Appl/CEP/CS1/CS1_DFTImager/src/DFTImager.h
+++ b/Appl/CEP/CS1/CS1_DFTImager/src/DFTImager.h
@@ -33,13 +33,9 @@ namespace LOFAR
   namespace CS1
   {
     using casa::Cube;
-    using casa::Matrix;
     using casa::Complex;
-    using casa::Int;
-    using casa::Double;
-    using casa::Bool;
-    using casa::Table;
-    using std::list;
+    using casa::Matrix;
+    using casa::Vector;
     using std::vector;
 
     typedef pair<int, int> pairii;
@@ -51,7 +47,7 @@ namespace LOFAR
                   Image_File* Imagefile);
         ~DFTImager();
 
-        void MakeImage(int Resolution);
+        void MakeImage(int resolution);
 
       protected:
         int                     NumAntennae;
@@ -59,7 +55,6 @@ namespace LOFAR
         int                     NumBands;
         int                     NumChannels;
         int                     NumPolarizations;
-        int                     WindowSize;
         int                     NumTimeslots;
         double                  MinThreshold;
         double                  MaxThreshold;
@@ -67,9 +62,7 @@ namespace LOFAR
         vector<double>          BaselineLengths;
         vector<pairii>          PairsIndex;
         map<pairii, int>        BaselineIndex;
-        vector< Cube<Complex> > TimeslotData;
         vector<casa::String>    AntennaNames;
-        Cube< int >             Statistics;
         int                     Resolution;
 
         MS_File*    MSfile;
@@ -77,12 +70,19 @@ namespace LOFAR
 
       private:
         void ComputeBaselineLengths();
-        bool UpdateTimeslotData(vector<int>* OldFields,
-                                vector<int>* OldBands,
+        void ImageBaseline(Matrix<casa::Complex>& TimeslotData,
+                           Vector<casa::Double>& UVWData,
+                           Cube<float>& Image);
+        void ImageTimeslot(Cube<casa::Complex>& TimeslotData,
+                           Matrix<casa::Double>& UVWData,
+                           vector<Cube<float> >& Image);
+        bool UpdateTimeslotData(vector<int>& OldFields,
+                                vector<int>& OldBands,
                                 int* TimeCounter,
-                                Table* TimeslotTable,
+                                casa::Table* TimeslotTable,
+                                casa::Cube<casa::Complex>& TimeslotData,
+                                casa::Matrix<casa::Double>& UVWData,
                                 double* Time);
-        void ImageTimeslot(void);
     }; // DFTImager
   }; // namespace CS1
 }; // namespace LOFAR
diff --git a/Appl/CEP/CS1/CS1_DFTImager/src/Image_File.cc b/Appl/CEP/CS1/CS1_DFTImager/src/Image_File.cc
index b20362ffdabd35438d6f0db9f9a6212f0b9135ae..4cf485291caa8783d4d70e956d5575f5fe229700 100644
--- a/Appl/CEP/CS1/CS1_DFTImager/src/Image_File.cc
+++ b/Appl/CEP/CS1/CS1_DFTImager/src/Image_File.cc
@@ -77,10 +77,10 @@ namespace LOFAR
 
     //===============>>>  Image_file::~WriteImage  <<<===============
 
-    void Image_File::WriteImage(std::vector< casa::Cube<float> >* image)
+    void Image_File::WriteImage(std::vector< casa::Cube<float> > image)
     {
-      casa::Cube<float> Bal = (*image)[0];
-      init(Bal.shape(), image->size());
+      casa::Cube<float> Bal = image[0];
+      init(Bal.shape(), image.size());
       Image->putSlice(Bal, casa::IPosition(3, 0, 0, 0), casa::IPosition(3, 0, 0, 0));
     }
 
diff --git a/Appl/CEP/CS1/CS1_DFTImager/src/Image_File.h b/Appl/CEP/CS1/CS1_DFTImager/src/Image_File.h
index 876236ca933f935fda555ab4b69146590be033ff..976965386a05fa5a058129842d1e96b2d0d7ce74 100644
--- a/Appl/CEP/CS1/CS1_DFTImager/src/Image_File.h
+++ b/Appl/CEP/CS1/CS1_DFTImager/src/Image_File.h
@@ -51,7 +51,7 @@ namespace LOFAR
     public:
       Image_File(const std::string& imagename);
       ~Image_File();
-      void WriteImage(vector< casa::Cube<float> >* image);
+      void WriteImage(vector< casa::Cube<float> > image);
 
     protected:
       std::string              ImageName;
diff --git a/Appl/CEP/CS1/CS1_DFTImager/src/MS_File.h b/Appl/CEP/CS1/CS1_DFTImager/src/MS_File.h
index c1a530418cc357cd5b72fb273956125745b2bd1c..02fd216ddf6c831a7a7decf0cf7bb4b44d53a017 100644
--- a/Appl/CEP/CS1/CS1_DFTImager/src/MS_File.h
+++ b/Appl/CEP/CS1/CS1_DFTImager/src/MS_File.h
@@ -25,6 +25,7 @@
 #include <string>
 #include <tables/Tables.h>
 #include <tables/Tables/TableIter.h>
+#include <casa/Arrays.h>
 
 namespace LOFAR
 {