diff --git a/CEP/DP3/DPPP/include/DPPP/AORFlagger.h b/CEP/DP3/DPPP/include/DPPP/AORFlagger.h
index 93a29d66ee89c8b482580331b5c6c3e174dbf48a..1d9a71928fafb144afabf975c62e98179a41c149 100644
--- a/CEP/DP3/DPPP/include/DPPP/AORFlagger.h
+++ b/CEP/DP3/DPPP/include/DPPP/AORFlagger.h
@@ -38,9 +38,9 @@
 
 namespace LOFAR {
 
-  class ParameterSet;
-
   namespace DPPP {
+    class ParSet;
+
     // @ingroup NDPPP
 
     // This class is a DPStep class flagging data points based on the
@@ -70,7 +70,7 @@ namespace LOFAR {
     public:
       // Construct the object.
       // Parameters are obtained from the parset using the given prefix.
-      AORFlagger (DPInput*, const ParameterSet&, const string& prefix);
+      AORFlagger (DPInput*, const ParSet&, const string& prefix);
 
       virtual ~AORFlagger();
 
diff --git a/CEP/DP3/DPPP/include/DPPP/Averager.h b/CEP/DP3/DPPP/include/DPPP/Averager.h
index f137ef49baebfe023b63d3ae0a0a511b57dceb2f..06b11b4c5b17c77682cec057ce96d36ea8fc76f5 100644
--- a/CEP/DP3/DPPP/include/DPPP/Averager.h
+++ b/CEP/DP3/DPPP/include/DPPP/Averager.h
@@ -33,9 +33,9 @@
 
 namespace LOFAR {
 
-  class ParameterSet;
-
   namespace DPPP {
+    class ParSet;
+
     // @ingroup NDPPP
 
     // This class is a DPStep class calculating the weighted average of
@@ -55,7 +55,7 @@ namespace LOFAR {
     public:
       // Construct the object.
       // Parameters are obtained from the parset using the given prefix.
-      Averager (DPInput*, const ParameterSet&, const string& prefix);
+      Averager (DPInput*, const ParSet&, const string& prefix);
 
       // Construct the object using the given parameters.
       Averager (DPInput*, const string& stepname,
diff --git a/CEP/DP3/DPPP/include/DPPP/BaselineSelection.h b/CEP/DP3/DPPP/include/DPPP/BaselineSelection.h
index 7fa3c694f3477d1b045d2ade325b4fdf7d2dc1c4..7f83ace2753098399f3f912ccfaf8c97aa3d1b0a 100644
--- a/CEP/DP3/DPPP/include/DPPP/BaselineSelection.h
+++ b/CEP/DP3/DPPP/include/DPPP/BaselineSelection.h
@@ -27,14 +27,13 @@
 // @file
 // @brief Class to handle the baseline selection
 
+#include <DPPP/ParSet.h>
 #include <DPPP/DPInfo.h>
+#include <Common/ParameterValue.h>
 #include <casa/Arrays/Vector.h>
 #include <casa/Arrays/Matrix.h>
 
 namespace LOFAR {
-  class ParameterSet;
-  class ParameterValue;
-
   namespace DPPP {
 
     // Class containing a few static functions to parse a baseline selection
@@ -54,7 +53,7 @@ namespace LOFAR {
       //  <li> minbl:    minimum baseline length (in m); only if minmax=true
       //  <li> maxbl:    maximum baseline length (in m); only if minmax=true
       // </ul>
-      BaselineSelection (const ParameterSet&, const string& prefix,
+      BaselineSelection (const ParSet&, const string& prefix,
                          bool minmax=false,
 			 const string& defaultCorrType=string());
 
diff --git a/CEP/DP3/DPPP/include/DPPP/CMakeLists.txt b/CEP/DP3/DPPP/include/DPPP/CMakeLists.txt
index 82df68d72afc7088885970b97b954e1494100068..5ecc418523b596b7bec6eba3bb425d377163c75a 100644
--- a/CEP/DP3/DPPP/include/DPPP/CMakeLists.txt
+++ b/CEP/DP3/DPPP/include/DPPP/CMakeLists.txt
@@ -3,7 +3,7 @@
 # List of header files that will be installed.
 set(inst_HEADERS
   DPRun.h DPStep.h DPInput.h DPBuffer.h DPInfo.h
-  DPLogger.h ProgressMeter.h FlagCounter.h
+  ParSet.h DPLogger.h ProgressMeter.h FlagCounter.h
   UVWCalculator.h BaselineSelection.h
   MSReader.h MSWriter.h MSUpdater.h Counter.h
   Averager.h MedFlagger.h PreFlagger.h UVWFlagger.h AORFlagger.h
diff --git a/CEP/DP3/DPPP/include/DPPP/Counter.h b/CEP/DP3/DPPP/include/DPPP/Counter.h
index 8215f2383e12162f511a6bd992366e01ada4f2a6..0d8cbbca992faa983e07fa6147bc1203a11b46cb 100644
--- a/CEP/DP3/DPPP/include/DPPP/Counter.h
+++ b/CEP/DP3/DPPP/include/DPPP/Counter.h
@@ -33,9 +33,9 @@
 
 namespace LOFAR {
 
-  class ParameterSet;
-
   namespace DPPP {
+    class ParSet;
+
     // @ingroup NDPPP
 
     // This class is a DPStep class counting the number of flags per
@@ -48,7 +48,7 @@ namespace LOFAR {
     public:
       // Construct the object.
       // Parameters are obtained from the parset using the given prefix.
-      Counter (DPInput*, const ParameterSet&, const string& prefix);
+      Counter (DPInput*, const ParSet&, const string& prefix);
 
       virtual ~Counter();
 
diff --git a/CEP/DP3/DPPP/include/DPPP/DPRun.h b/CEP/DP3/DPPP/include/DPPP/DPRun.h
index d00f0a8771f54493534187e7a42355a4a9aeec85..3ba728f3d46e3ae23aab96c0d883dfaf7d1abd06 100644
--- a/CEP/DP3/DPPP/include/DPPP/DPRun.h
+++ b/CEP/DP3/DPPP/include/DPPP/DPRun.h
@@ -29,7 +29,7 @@
 
 #include <lofar_config.h>
 #include <DPPP/DPStep.h>
-#include <Common/ParameterSet.h>
+#include <DPPP/ParSet.h>
 
 namespace LOFAR {
   namespace DPPP {
@@ -49,7 +49,7 @@ namespace LOFAR {
     private:
       // Create the step objects.
       // It fills DPInfo object and the name of the MS being written.
-      static DPStep::ShPtr makeSteps (const ParameterSet& parset,
+      static DPStep::ShPtr makeSteps (const ParSet& parset,
                                       std::string& msName);
     };
 
diff --git a/CEP/DP3/DPPP/include/DPPP/Demixer.h b/CEP/DP3/DPPP/include/DPPP/Demixer.h
index ffe995a871730abd92f78adb376acabc7e578668..25b8258a8d695b16cbd46553d4fd2de653c07650 100644
--- a/CEP/DP3/DPPP/include/DPPP/Demixer.h
+++ b/CEP/DP3/DPPP/include/DPPP/Demixer.h
@@ -46,9 +46,9 @@
 
 namespace LOFAR {
 
-  class ParameterSet;
-
   namespace DPPP {
+    class ParSet;
+
     // @ingroup NDPPP
 
     typedef vector<Patch::ConstPtr> PatchList;
@@ -68,7 +68,7 @@ namespace LOFAR {
     public:
       // Construct the object.
       // Parameters are obtained from the parset using the given prefix.
-      Demixer (DPInput*, const ParameterSet&, const string& prefix);
+      Demixer (DPInput*, const ParSet&, const string& prefix);
 
       // Process the data.
       // It keeps the data.
diff --git a/CEP/DP3/DPPP/include/DPPP/Filter.h b/CEP/DP3/DPPP/include/DPPP/Filter.h
index 2ebe3e237017226bd1254d9b2670139eed01daf2..ee63f38274933208b913bcfcabb5ad47766a4634 100644
--- a/CEP/DP3/DPPP/include/DPPP/Filter.h
+++ b/CEP/DP3/DPPP/include/DPPP/Filter.h
@@ -33,9 +33,9 @@
 
 namespace LOFAR {
 
-  class ParameterSet;
-
   namespace DPPP {
+    class ParSet;
+
     // @ingroup NDPPP
 
     // This class is a DPInput step reading the data from a MeasurementSet.
@@ -128,7 +128,7 @@ namespace LOFAR {
 
       // Construct the object for the given MS.
       // Parameters are obtained from the parset using the given prefix.
-      Filter (DPInput* input, const ParameterSet&, const string& prefix);
+      Filter (DPInput* input, const ParSet&, const string& prefix);
 
       // Construct the object for the given MS and baseline selection.
       Filter (DPInput* input, const BaselineSelection&);
diff --git a/CEP/DP3/DPPP/include/DPPP/FlagCounter.h b/CEP/DP3/DPPP/include/DPPP/FlagCounter.h
index 92d7a596d2a0c185cf7b6f0660268097ab77ebb8..7a8fee17554082d031caae536d2d21083d24e2f8 100644
--- a/CEP/DP3/DPPP/include/DPPP/FlagCounter.h
+++ b/CEP/DP3/DPPP/include/DPPP/FlagCounter.h
@@ -33,11 +33,11 @@
 #include <casa/Arrays/Vector.h>
 
 namespace LOFAR {
-  class ParameterSet;
-
   namespace DPPP {
+
     //# Forward Declarations.
     class DPInfo;
+    class ParSet;
 
     // @ingroup NDPPP
 
@@ -57,8 +57,7 @@ namespace LOFAR {
 
       // This constructor creates an empty object.
       // It reads info from the parset to see if percentages have to be saved.
-      FlagCounter (const string& msName, const ParameterSet&,
-                   const string& prefix);
+      FlagCounter (const string& msName, const ParSet&, const string& prefix);
 
       // Size all counters and initialize them to zero using the sizes
       // from the DPInfo object.
diff --git a/CEP/DP3/DPPP/include/DPPP/MSReader.h b/CEP/DP3/DPPP/include/DPPP/MSReader.h
index 5d86df4ca81355e3650402d16df6d071611698be..62ba12d5494b726e9871a30e6f068ed07aa6bc81 100644
--- a/CEP/DP3/DPPP/include/DPPP/MSReader.h
+++ b/CEP/DP3/DPPP/include/DPPP/MSReader.h
@@ -38,9 +38,9 @@
 
 namespace LOFAR {
 
-  class ParameterSet;
-
   namespace DPPP {
+    class ParSet;
+
     // @ingroup NDPPP
 
     // This class is a DPInput step reading the data from a MeasurementSet.
@@ -135,7 +135,7 @@ namespace LOFAR {
       // Parameters are obtained from the parset using the given prefix.
       // The missingData argument is for MultiMSReader.
       MSReader (const std::string& msName,
-                const ParameterSet&, const string& prefix,
+                const ParSet&, const string& prefix,
                 bool missingData = false);
 
       virtual ~MSReader();
@@ -172,8 +172,8 @@ namespace LOFAR {
       virtual casa::Cube<bool> getFullResFlags (const casa::RefRows& rowNrs);
 
       // Read the given data column at the given row numbers.
-      ///      virtual casa::Cube<casa::Complex> getData (const casa::String& columnName,
-      ///                                                 const casa::RefRows& rowNrs);
+      virtual casa::Cube<casa::Complex> getData (const casa::String& columnName,
+                                                 const casa::RefRows& rowNrs);
 
       // Write the flags at the given row numbers.
       // It is used by MSUpdater.
diff --git a/CEP/DP3/DPPP/include/DPPP/MSUpdater.h b/CEP/DP3/DPPP/include/DPPP/MSUpdater.h
index acb87da13ef10645b0d76b9cf8fb575968f87e9d..49f84e208aebb277a1bae8e0535d579ab9420c5e 100644
--- a/CEP/DP3/DPPP/include/DPPP/MSUpdater.h
+++ b/CEP/DP3/DPPP/include/DPPP/MSUpdater.h
@@ -32,9 +32,9 @@
 
 namespace LOFAR {
 
-  class ParameterSet;
-
   namespace DPPP {
+    class ParSet;
+
     //# Forward Declarations.
     class MSReader;
 
@@ -50,7 +50,7 @@ namespace LOFAR {
     class MSUpdater: public DPStep
     {
     public:
-      MSUpdater (MSReader*, const ParameterSet& parset,
+      MSUpdater (MSReader*, const ParSet& parset,
                  const std::string& prefix);
 
       virtual ~MSUpdater();
diff --git a/CEP/DP3/DPPP/include/DPPP/MSWriter.h b/CEP/DP3/DPPP/include/DPPP/MSWriter.h
index fad5c9432cdebac548b5a15d83e87276174fbdea..7d32aa282d0471c735b5dd5d26f8ba8b75f6473f 100644
--- a/CEP/DP3/DPPP/include/DPPP/MSWriter.h
+++ b/CEP/DP3/DPPP/include/DPPP/MSWriter.h
@@ -39,6 +39,8 @@ namespace LOFAR {
   class ParameterSet;
 
   namespace DPPP {
+    class ParSet;
+
     // @ingroup NDPPP
 
     // This class is a DPStep creating a new MeasurementSet and writing
@@ -62,7 +64,7 @@ namespace LOFAR {
     public:
       explicit MSWriter (MSReader* reader, const std::string& outName,
                          const DPInfo&,
-                         const ParameterSet&, const string& prefix);
+                         const ParSet&, const string& prefix);
 
       virtual ~MSWriter();
 
diff --git a/CEP/DP3/DPPP/include/DPPP/MedFlagger.h b/CEP/DP3/DPPP/include/DPPP/MedFlagger.h
index 3410d28bab401f92f322098fab2efcde1891dc9c..4e3e17434c7b373d9daad5ca64802c571feccb5a 100644
--- a/CEP/DP3/DPPP/include/DPPP/MedFlagger.h
+++ b/CEP/DP3/DPPP/include/DPPP/MedFlagger.h
@@ -33,9 +33,10 @@
 #include <Common/lofar_vector.h>
 
 namespace LOFAR {
-  class ParameterSet;
 
   namespace DPPP {
+    class ParSet;
+
     // @ingroup NDPPP
 
     // This class is a DPStep class flagging data points based on the median
@@ -77,7 +78,7 @@ namespace LOFAR {
     public:
       // Construct the object.
       // Parameters are obtained from the parset using the given prefix.
-      MedFlagger (DPInput*, const ParameterSet&, const string& prefix);
+      MedFlagger (DPInput*, const ParSet&, const string& prefix);
 
       virtual ~MedFlagger();
 
diff --git a/CEP/DP3/DPPP/include/DPPP/MultiMSReader.h b/CEP/DP3/DPPP/include/DPPP/MultiMSReader.h
index 6a9c2255fee485420725afca95a178414b254dc5..35623820d6486b0a3c4a912853753a41acd8471b 100644
--- a/CEP/DP3/DPPP/include/DPPP/MultiMSReader.h
+++ b/CEP/DP3/DPPP/include/DPPP/MultiMSReader.h
@@ -38,9 +38,9 @@
 
 namespace LOFAR {
 
-  class ParameterSet;
-
   namespace DPPP {
+    class ParSet;
+
     // @ingroup NDPPP
 
     // This class is a DPInput step reading the data from a MeasurementSet.
@@ -131,7 +131,7 @@ namespace LOFAR {
       // Construct the object for the given MS.
       // Parameters are obtained from the parset using the given prefix.
       MultiMSReader (const vector<string>& msNames,
-                     const ParameterSet&, const string& prefix);
+                     const ParSet&, const string& prefix);
 
       virtual ~MultiMSReader();
 
@@ -167,8 +167,8 @@ namespace LOFAR {
       virtual casa::Cube<bool> getFullResFlags (const casa::RefRows& rowNrs);
 
       // Read the given data column at the given row numbers.
-      ///      virtual casa::Cube<casa::Complex> getData (const casa::String& columnName,
-      ///                                                 const casa::RefRows& rowNrs);
+      virtual casa::Cube<casa::Complex> getData (const casa::String& columnName,
+                                                 const casa::RefRows& rowNrs);
 
       // Tell if the visibility data are to be read.
       virtual void setReadVisData (bool readVisData);
diff --git a/CEP/DP3/DPPP/include/DPPP/ParSet.h b/CEP/DP3/DPPP/include/DPPP/ParSet.h
new file mode 100644
index 0000000000000000000000000000000000000000..69f5baa1ecb6f2c8d671962c1962acf7a61f1fed
--- /dev/null
+++ b/CEP/DP3/DPPP/include/DPPP/ParSet.h
@@ -0,0 +1,112 @@
+//# ParSet.h: Wrapper around ParaMeterSet to keep track of parameters asked for
+//# Copyright (C) 2010
+//# ASTRON (Netherlands Institute for Radio Astronomy)
+//# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+//#
+//# This file is part of the LOFAR software suite.
+//# The LOFAR software suite 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 3 of the License, or
+//# (at your option) any later version.
+//#
+//# The LOFAR software suite 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 the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
+//#
+//# $Id$
+//#
+//# @author Ger van Diepen
+
+#ifndef DPPP_PARSET_H
+#define DPPP_PARSET_H
+
+// @file
+// @brief Wrapper around ParaMeterSet to keep track of parameters asked for
+
+#include <Common/ParameterSet.h>
+#include <Common/lofar_string.h>
+#include <Common/lofar_vector.h>
+#include <Common/lofar_set.h>
+
+namespace LOFAR {
+
+  namespace DPPP {
+
+    // @ingroup NDPPP
+
+    // This class keeps track of the parameters asked for.
+    // In this way it is possible to give a warning or error that the
+    // ParameterSet has more parameters than asked for. It is an aid in
+    // detecting misspelled parameters names.
+
+    class ParSet
+    {
+    public:
+      ParSet (const ParameterSet&);
+
+      // Ask a parameter with a possible default value.
+      // @{
+      bool   getBool  (const string& aKey) const;
+      bool   getBool  (const string& aKey, bool aValue) const;
+      int    getInt   (const string& aKey) const;
+      int    getInt   (const string& aKey, int aValue) const;
+      uint   getUint  (const string& aKey) const;
+      uint   getUint  (const string& aKey, uint aValue) const;
+      float  getFloat (const string& aKey) const;
+      float  getFloat (const string& aKey, float aValue) const;
+      double getDouble(const string& aKey) const;
+      double getDouble(const string& aKey, double aValue) const;
+      string getString(const string& aKey) const;
+      string getString(const string& aKey, const string& aValue) const;
+      vector<bool>   getBoolVector  (const string& aKey,
+                                     bool expandable = false) const;
+      vector<bool>   getBoolVector  (const string& aKey,
+                                     const vector<bool>& aValue,
+                                     bool expandable = false) const;
+      vector<int>    getIntVector   (const string& aKey,
+                                     bool expandable = false) const;
+      vector<int>    getIntVector   (const string& aKey,
+                                     const vector<int>& aValue,
+                                     bool expandable = false) const;
+      vector<uint>   getUintVector  (const string& aKey,
+                                     bool expandable = false) const;
+      vector<uint>   getUintVector  (const string& aKey,
+                                     const vector<uint>& aValue,
+                                     bool expandable = false) const;
+      vector<float>  getFloatVector (const string& aKey,
+                                     bool expandable = false) const;
+      vector<float>  getFloatVector (const string& aKey,
+                                     const vector<float>& aValue,
+                                     bool expandable = false) const;
+      vector<double> getDoubleVector(const string& aKey,
+                                     bool expandable = false) const;
+      vector<double> getDoubleVector(const string& aKey,
+                                     const vector<double>& aValue,
+                                     bool expandable = false) const;
+      vector<string> getStringVector(const string& aKey,
+                                     bool expandable = false) const;
+      vector<string> getStringVector(const string& aKey,
+                                     const vector<string>& aValue,
+                                     bool expandable = false) const;
+      ParameterRecord getRecord (const string& aKey) const;
+
+      // Get all unused parameters.
+      vector<string> unusedKeys() const;
+
+      // Get the underlying ParameterSet.
+      const ParameterSet& parameterSet() const
+        { return itsParSet; }
+
+    private:
+      ParameterSet        itsParSet;
+      mutable set<string> itsAskedParms;
+    };
+
+  } //# end namespace
+}
+
+#endif
diff --git a/CEP/DP3/DPPP/include/DPPP/PhaseShift.h b/CEP/DP3/DPPP/include/DPPP/PhaseShift.h
index 4018a9b06b5e5671e933495b2c5564697661f5a5..13421919feba2ef8bbb92bccafd38440d4d5dda5 100644
--- a/CEP/DP3/DPPP/include/DPPP/PhaseShift.h
+++ b/CEP/DP3/DPPP/include/DPPP/PhaseShift.h
@@ -33,9 +33,9 @@
 
 namespace LOFAR {
 
-  class ParameterSet;
-
   namespace DPPP {
+    class ParSet;
+
     // @ingroup NDPPP
 
     // This class is a DPStep class to shift the data and UVW coordinates
@@ -50,13 +50,13 @@ namespace LOFAR {
       // Construct the object.
       // Parameters are obtained from the parset using the given prefix.
       // This is the standard constructor where the phasecenter must be given.
-      PhaseShift (DPInput*, const ParameterSet&, const string& prefix);
+      PhaseShift (DPInput*, const ParSet&, const string& prefix);
 
       // Construct the object.
       // Parameters are obtained from the parset using the given prefix.
       // This is a constructor for Demixer where the phasecenter has the
       // given default value.
-      PhaseShift (DPInput*, const ParameterSet&, const string& prefix,
+      PhaseShift (DPInput*, const ParSet&, const string& prefix,
                   const vector<string>& defVal);
 
       virtual ~PhaseShift();
@@ -87,10 +87,6 @@ namespace LOFAR {
       const casa::Matrix<casa::DComplex>& getPhasors() const
         { return itsPhasors; }
 
-      // Get the phase center.
-      const vector<string>& getPhaseCenter() const
-        { return itsCenter; }
-
     private:
       // Interpret the phase center specification.
       // Currently only J2000 RA and DEC can be given.
diff --git a/CEP/DP3/DPPP/include/DPPP/PreFlagger.h b/CEP/DP3/DPPP/include/DPPP/PreFlagger.h
index b335bc8c0714a354f5fa8f16d2c0e004dc21f7ee..baa8c937b6acfb204930eff4a48cfcf1b5c17788 100644
--- a/CEP/DP3/DPPP/include/DPPP/PreFlagger.h
+++ b/CEP/DP3/DPPP/include/DPPP/PreFlagger.h
@@ -34,10 +34,11 @@
 #include <measures/Measures/MDirection.h>
 
 namespace LOFAR {
-  class ParameterSet;
   class ParameterValue;
 
   namespace DPPP {
+    class ParSet;
+
     // @ingroup NDPPP
 
     // This class is a DPStep class flagging data points based on data
@@ -74,7 +75,7 @@ namespace LOFAR {
 
       // Construct the object.
       // Parameters are obtained from the parset using the given prefix.
-      PreFlagger (DPInput*, const ParameterSet&, const string& prefix);
+      PreFlagger (DPInput*, const ParSet&, const string& prefix);
 
       virtual ~PreFlagger();
 
@@ -124,7 +125,7 @@ namespace LOFAR {
         {}
 
         // Construct from the parset parameters.
-        PSet (DPInput*, const ParameterSet& parset, const string& prefix);
+        PSet (DPInput*, const ParSet& parset, const string& prefix);
 
         // Set and return the flags.
         casa::Cube<bool>* process (DPBuffer&, uint timeSlot,
diff --git a/CEP/DP3/DPPP/include/DPPP/StationAdder.h b/CEP/DP3/DPPP/include/DPPP/StationAdder.h
index 3cd95859eae663f27a826436276abb2a855a58b0..755962612147f65330480876c0bf6d996084ad7d 100644
--- a/CEP/DP3/DPPP/include/DPPP/StationAdder.h
+++ b/CEP/DP3/DPPP/include/DPPP/StationAdder.h
@@ -34,9 +34,10 @@
 #include <measures/Measures/MPosition.h>
 
 namespace LOFAR {
-  class ParameterSet;
 
   namespace DPPP {
+    class ParSet;
+
     // @ingroup NDPPP
 
     // This class is a DPStep class summing stations to a superstation.
@@ -62,7 +63,7 @@ namespace LOFAR {
     public:
       // Construct the object.
       // Parameters are obtained from the parset using the given prefix.
-      StationAdder (DPInput*, const ParameterSet&, const string& prefix);
+      StationAdder (DPInput*, const ParSet&, const string& prefix);
 
       virtual ~StationAdder();
 
diff --git a/CEP/DP3/DPPP/include/DPPP/UVWFlagger.h b/CEP/DP3/DPPP/include/DPPP/UVWFlagger.h
index 3642f190ea3c8535812656baff027ee5cd241220..f3a6b32adcfc5ccc38439cfa2d41fca814c231ed 100644
--- a/CEP/DP3/DPPP/include/DPPP/UVWFlagger.h
+++ b/CEP/DP3/DPPP/include/DPPP/UVWFlagger.h
@@ -33,10 +33,11 @@
 #include <Common/lofar_vector.h>
 
 namespace LOFAR {
-  class ParameterSet;
   class ParameterValue;
 
   namespace DPPP {
+    class ParSet;
+
     // @ingroup NDPPP
 
     // This class is a DPStep class flagging data points based on data
@@ -58,7 +59,7 @@ namespace LOFAR {
       // The antenna names are used to find antenna numbers.
       // The channel frequencies as they are in the input step must be given
       // starting at the start-channel.
-      UVWFlagger (DPInput*, const ParameterSet&, const string& prefix);
+      UVWFlagger (DPInput*, const ParSet&, const string& prefix);
 
       virtual ~UVWFlagger();
 
@@ -96,7 +97,7 @@ namespace LOFAR {
       // (min and max are also turned into a range).
       // Optionally the values are squared to avoid having to take a sqrt
       // of the data's UVW coordinates.
-      vector<double> fillUVW (const ParameterSet& parset,
+      vector<double> fillUVW (const ParSet& parset,
                               const string& prefix,
                               const string& name,
                               bool square);
diff --git a/CEP/DP3/DPPP/src/AORFlagger.cc b/CEP/DP3/DPPP/src/AORFlagger.cc
index d74578eb729c90d670764e53429279c4e0c00eb7..81eda1d4a83f92dc36c9dab33487ba162e241817 100644
--- a/CEP/DP3/DPPP/src/AORFlagger.cc
+++ b/CEP/DP3/DPPP/src/AORFlagger.cc
@@ -25,7 +25,7 @@
 #include <DPPP/AORFlagger.h>
 #include <DPPP/DPBuffer.h>
 #include <DPPP/DPInfo.h>
-#include <Common/ParameterSet.h>
+#include <DPPP/ParSet.h>
 #include <Common/LofarLogger.h>
 
 #include <casa/OS/HostInfo.h>
@@ -68,8 +68,7 @@ namespace LOFAR {
   namespace DPPP {
 
     AORFlagger::AORFlagger (DPInput* input,
-                            const ParameterSet& parset,
-                            const string& prefix)
+                            const ParSet& parset, const string& prefix)
       : itsInput       (input),
         itsName        (prefix),
         itsBufIndex    (0),
diff --git a/CEP/DP3/DPPP/src/Averager.cc b/CEP/DP3/DPPP/src/Averager.cc
index 028148c1a8d645c3f85f346de77bb241c14a6180..24bf4720fdf494913ad9fd99267049891304ff28 100644
--- a/CEP/DP3/DPPP/src/Averager.cc
+++ b/CEP/DP3/DPPP/src/Averager.cc
@@ -25,7 +25,7 @@
 #include <DPPP/Averager.h>
 #include <DPPP/DPBuffer.h>
 #include <DPPP/DPInfo.h>
-#include <Common/ParameterSet.h>
+#include <DPPP/ParSet.h>
 #include <Common/LofarLogger.h>
 #include <casa/Arrays/ArrayMath.h>
 #include <iostream>
@@ -37,8 +37,7 @@ namespace LOFAR {
   namespace DPPP {
 
     Averager::Averager (DPInput* input,
-                        const ParameterSet& parset,
-                        const string& prefix)
+                        const ParSet& parset, const string& prefix)
       : itsInput     (input),
         itsName      (prefix),
         itsNChanAvg  (parset.getUint  (prefix+"freqstep", 1)),
diff --git a/CEP/DP3/DPPP/src/BaselineSelection.cc b/CEP/DP3/DPPP/src/BaselineSelection.cc
index b01f42050979337999def471bb6bf87d69c3ceaf..d5d3f45f5c15a820b04775f493d6f066c8cff951 100644
--- a/CEP/DP3/DPPP/src/BaselineSelection.cc
+++ b/CEP/DP3/DPPP/src/BaselineSelection.cc
@@ -25,8 +25,6 @@
 #include <DPPP/BaselineSelection.h>
 #include <DPPP/DPLogger.h>
 #include <MS/BaselineSelect.h>
-#include <Common/ParameterSet.h>
-#include <Common/ParameterValue.h>
 #include <Common/LofarLogger.h>
 #include <Common/StreamUtil.h>
 
@@ -39,7 +37,7 @@ namespace LOFAR {
     BaselineSelection::BaselineSelection()
     {}
 
-    BaselineSelection::BaselineSelection (const ParameterSet& parset,
+    BaselineSelection::BaselineSelection (const ParSet& parset,
                                           const string& prefix,
                                           bool minmax,
 					  const string& defaultCorrType)
diff --git a/CEP/DP3/DPPP/src/CMakeLists.txt b/CEP/DP3/DPPP/src/CMakeLists.txt
index 708486fdc2d2f54c9b9f8808bf3a83f68c938fc9..9c3b4f87d6d703f136684d223fa25ebc4e234bd2 100644
--- a/CEP/DP3/DPPP/src/CMakeLists.txt
+++ b/CEP/DP3/DPPP/src/CMakeLists.txt
@@ -6,7 +6,7 @@ include(PythonInstall)
 lofar_add_library(dppp
   Package__Version.cc
   DPRun.cc DPStep.cc DPInput.cc DPBuffer.cc DPInfo.cc
-  DPLogger.cc ProgressMeter.cc FlagCounter.cc
+  ParSet.cc DPLogger.cc ProgressMeter.cc FlagCounter.cc
   UVWCalculator.cc  BaselineSelection.cc
   MSReader.cc MultiMSReader.cc MSWriter.cc MSUpdater.cc Counter.cc
   Averager.cc MedFlagger.cc AORFlagger.cc PreFlagger.cc UVWFlagger.cc
diff --git a/CEP/DP3/DPPP/src/Counter.cc b/CEP/DP3/DPPP/src/Counter.cc
index 771580217e1a948f350e8a2138a89160c8f2dcfe..832f074d5028f8e1cb453b1109a525f2d24d7500 100644
--- a/CEP/DP3/DPPP/src/Counter.cc
+++ b/CEP/DP3/DPPP/src/Counter.cc
@@ -24,7 +24,7 @@
 #include <lofar_config.h>
 #include <DPPP/Counter.h>
 #include <DPPP/DPInfo.h>
-#include <Common/ParameterSet.h>
+#include <DPPP/ParSet.h>
 #include <iostream>
 
 using namespace casa;
@@ -33,8 +33,7 @@ namespace LOFAR {
   namespace DPPP {
 
     Counter::Counter (DPInput* input,
-                      const ParameterSet& parset,
-                      const string& prefix)
+                      const ParSet& parset, const string& prefix)
       : itsName        (prefix),
         itsCount       (0),
         itsFlagCounter (input->msName(), parset, prefix)
diff --git a/CEP/DP3/DPPP/src/DPRun.cc b/CEP/DP3/DPPP/src/DPRun.cc
index 9bab26e89100cd29fece130ec5fcacc055583144..3e3ec6b7925b5889d9d0d18dfb4d7d3ad8c86889 100644
--- a/CEP/DP3/DPPP/src/DPRun.cc
+++ b/CEP/DP3/DPPP/src/DPRun.cc
@@ -39,7 +39,7 @@
 #include <DPPP/StationAdder.h>
 #include <DPPP/Filter.h>
 #include <DPPP/Counter.h>
-#include <DPPP/ApplyCal.h>
+#include <DPPP/ParSet.h>
 #include <DPPP/ProgressMeter.h>
 #include <DPPP/DPLogger.h>
 #include <Common/Timer.h>
@@ -57,9 +57,9 @@ namespace LOFAR {
       casa::Timer timer;
       NSTimer nstimer;
       nstimer.start();
-      ParameterSet parset (parsetName);
+      ParSet parset ((ParameterSet(parsetName)));
       DPLogger::useLogger = parset.getBool ("uselogger", false);
-      int  checkparset    = parset.getInt  ("checkparset", 0);
+      bool checkparset    = parset.getBool ("checkparset", false);
       bool showProgress   = parset.getBool ("showprogress", true);
       bool showTimings    = parset.getBool ("showtimings", true);
       string msName;
@@ -73,19 +73,17 @@ namespace LOFAR {
         DPLOG_INFO (os.str(), true);
         step = step->getNextStep();
       }
-      if (checkparset >= 0) {
-        // Show unused parameters (might be misspelled).
-        vector<string> unused = parset.unusedKeys();
-        if (! unused.empty()) {
-          DPLOG_WARN_STR
-            (endl
-             << "*** WARNING: the following parset keywords were not used ***"
-             << endl
-             << "             maybe they are misspelled"
-             << endl
-             << "    " << unused << endl);
-          ASSERTSTR (checkparset==0, "Unused parset keywords found");
-        }
+      // Show unused parameters (might be misspelled).
+      vector<string> unused = parset.unusedKeys();
+      if (! unused.empty()) {
+        DPLOG_WARN_STR
+          (endl
+           << "*** WARNING: the following parset keywords were not used ***"
+           << endl
+           << "             maybe they are misspelled"
+           << endl
+           << "    " << unused << endl);
+        ASSERTSTR (!checkparset, "Unused parset keywords found");
       }
       // Process until the end.
       uint ntodo = firstStep->getInfo().ntime();
@@ -159,7 +157,7 @@ namespace LOFAR {
       // The destructors are called automatically at this point.
     }
 
-    DPStep::ShPtr DPRun::makeSteps (const ParameterSet& parset, string& msName)
+    DPStep::ShPtr DPRun::makeSteps (const ParSet& parset, string& msName)
     {
       DPStep::ShPtr firstStep;
       DPStep::ShPtr lastStep;
@@ -254,8 +252,6 @@ namespace LOFAR {
           step = DPStep::ShPtr(new StationAdder (reader, parset, prefix));
         } else if (type == "filter") {
           step = DPStep::ShPtr(new Filter (reader, parset, prefix));
-          ///        } else if (type == "applycal"  ||  type == "correct") {
-          ///          step = DPStep::ShPtr(new ApplyCal (reader, parset, prefix));
         } else {
           THROW (LOFAR::Exception, "DPPP step type " << type << " is unknown");
         }
diff --git a/CEP/DP3/DPPP/src/Demixer.cc b/CEP/DP3/DPPP/src/Demixer.cc
index a74d159cf27710d586fe5cb6d218c86bb2bec029..34a33b0e0c22d9d79085a8fe58115ca898ac8487 100644
--- a/CEP/DP3/DPPP/src/Demixer.cc
+++ b/CEP/DP3/DPPP/src/Demixer.cc
@@ -30,6 +30,7 @@
 #include <DPPP/DPInfo.h>
 #include <DPPP/EstimateMixed.h>
 #include <DPPP/PhaseShift.h>
+#include <DPPP/ParSet.h>
 #include <DPPP/Simulate.h>
 #include <DPPP/SourceDBUtil.h>
 #include <DPPP/SubtractMixed.h>
@@ -41,7 +42,6 @@
 #include <ParmDB/ParmCache.h>
 #include <ParmDB/Parm.h>
 
-#include <Common/ParameterSet.h>
 #include <Common/LofarLogger.h>
 #include <Common/OpenMP.h>
 #include <Common/StreamUtil.h>
@@ -70,8 +70,7 @@ namespace LOFAR {
     } //# end unnamed namespace
 
     Demixer::Demixer (DPInput* input,
-                      const ParameterSet& parset,
-                      const string& prefix)
+                      const ParSet& parset, const string& prefix)
       : itsInput          (input),
         itsName           (prefix),
         itsSkyName        (parset.getString(prefix+"skymodel", "sky")),
@@ -361,21 +360,8 @@ namespace LOFAR {
       }
       os << "  targetsource:       " << itsTargetSource << std::endl;
       os << "  subtractsources:    " << itsSubtrSources << std::endl;
-      uint inx=0;
-      for (uint i=0; i<itsSubtrSources.size(); ++i ) {
-        os << "                        "
-           << itsPhaseShifts[inx++]->getPhaseCenter() << std::endl;
-      }
       os << "  modelsources:       " << itsModelSources << std::endl;
-      for (uint i=0; i<itsModelSources.size(); ++i ) {
-        os << "                        "
-           << itsPhaseShifts[inx++]->getPhaseCenter() << std::endl;
-      }
       os << "  extrasources:       " << itsExtraSources << std::endl;
-      for (uint i=0; i<itsExtraSources.size(); ++i ) {
-        os << "                        "
-           << itsPhaseShifts[inx++]->getPhaseCenter() << std::endl;
-      }
 //      os << "  elevationcutoffs: " << itsCutOffs << std::endl;
 //      os << "  jointsolve:     " << itsJointSolve << std::endl;
       os << "  propagatesolutions: " << std::boolalpha << itsPropagateSolutions
diff --git a/CEP/DP3/DPPP/src/Filter.cc b/CEP/DP3/DPPP/src/Filter.cc
index e6f77493247038839e59c1927047d760ef4a2da0..9b4bb455897a5cd11f483f02ef27d8ac38481ae4 100644
--- a/CEP/DP3/DPPP/src/Filter.cc
+++ b/CEP/DP3/DPPP/src/Filter.cc
@@ -25,8 +25,8 @@
 #include <DPPP/Filter.h>
 #include <DPPP/DPBuffer.h>
 #include <DPPP/DPInfo.h>
+#include <DPPP/ParSet.h>
 #include <DPPP/DPLogger.h>
-#include <Common/ParameterSet.h>
 
 #include <tables/Tables/ExprNode.h>
 #include <tables/Tables/RecordGram.h>
@@ -38,8 +38,7 @@ namespace LOFAR {
   namespace DPPP {
 
     Filter::Filter (DPInput* input,
-                    const ParameterSet& parset,
-                    const string& prefix)
+                    const ParSet& parset, const string& prefix)
       : itsInput        (input),
         itsName         (prefix),
         itsStartChanStr (parset.getString(prefix+"startchan", "0")),
diff --git a/CEP/DP3/DPPP/src/FlagCounter.cc b/CEP/DP3/DPPP/src/FlagCounter.cc
index edd1e3661870b965025b5e31290a1acc231fcaa7..aa2ad7b48e888584689259441cf81484a745471b 100644
--- a/CEP/DP3/DPPP/src/FlagCounter.cc
+++ b/CEP/DP3/DPPP/src/FlagCounter.cc
@@ -24,7 +24,7 @@
 #include <lofar_config.h>
 #include <DPPP/FlagCounter.h>
 #include <DPPP/DPInput.h>
-#include <Common/ParameterSet.h>
+#include <DPPP/ParSet.h>
 #include <Common/StreamUtil.h>
 #include <Common/LofarLogger.h>
 #include <tables/Tables/Table.h>
@@ -50,8 +50,7 @@ namespace LOFAR {
     {}
 
     FlagCounter::FlagCounter (const string& msName,
-                              const ParameterSet& parset,
-                              const string& prefix)
+                              const ParSet& parset, const string& prefix)
     {
       itsWarnPerc = parset.getDouble (prefix+"warnperc", 0);
       itsShowFF   = parset.getBool   (prefix+"showfullyflagged", false);
diff --git a/CEP/DP3/DPPP/src/MSReader.cc b/CEP/DP3/DPPP/src/MSReader.cc
index 61326aef40eb534546eec3e6f4c5e7a4f021bcf8..883e389a0fdfd381772fcce227ad656762871bf4 100644
--- a/CEP/DP3/DPPP/src/MSReader.cc
+++ b/CEP/DP3/DPPP/src/MSReader.cc
@@ -26,7 +26,7 @@
 #include <DPPP/DPBuffer.h>
 #include <DPPP/DPInfo.h>
 #include <DPPP/DPLogger.h>
-#include <Common/ParameterSet.h>
+#include <DPPP/ParSet.h>
 #include <Common/LofarLogger.h>
 
 #include <tables/Tables/TableRecord.h>
@@ -58,8 +58,7 @@ namespace LOFAR {
     {}
 
     MSReader::MSReader (const string& msName,
-                        const ParameterSet& parset,
-                        const string& prefix,
+                        const ParSet& parset, const string& prefix,
                         bool missingData)
       : itsReadVisData (False),
         itsMissingData (missingData),
@@ -745,7 +744,6 @@ namespace LOFAR {
       return flags;
     }
 
-    /*
     Cube<Complex> MSReader::getData (const String& columnName,
                                      const RefRows& rowNrs)
     {
@@ -758,7 +756,6 @@ namespace LOFAR {
       Cube<Complex> data = dataCol.getColumnCells (rowNrs);
       return (itsUseAllChan ? data : data(itsArrSlicer));
     }
-    */
 
     void MSReader::putFlags (const RefRows& rowNrs,
                              const Cube<bool>& flags)
diff --git a/CEP/DP3/DPPP/src/MSUpdater.cc b/CEP/DP3/DPPP/src/MSUpdater.cc
index 89baabe4db45b1c91683eb6db74fdeeec57dd2ad..2825aed88f70e5a15fce7879d7d80946e4277855 100644
--- a/CEP/DP3/DPPP/src/MSUpdater.cc
+++ b/CEP/DP3/DPPP/src/MSUpdater.cc
@@ -26,7 +26,7 @@
 #include <DPPP/MSReader.h>
 #include <DPPP/MSWriter.h>
 #include <DPPP/DPBuffer.h>
-#include <Common/ParameterSet.h>
+#include <DPPP/ParSet.h>
 #include <iostream>
 
 using namespace casa;
@@ -34,7 +34,7 @@ using namespace casa;
 namespace LOFAR {
   namespace DPPP {
 
-    MSUpdater::MSUpdater (MSReader* reader, const ParameterSet& parset,
+    MSUpdater::MSUpdater (MSReader* reader, const ParSet& parset,
                           const string&)
       : itsReader      (reader),
         itsNrCorr      (reader->getInfo().ncorr()),
@@ -43,7 +43,7 @@ namespace LOFAR {
         itsNrTimes     (0)
     {
       NSTimer::StartStop sstime(itsTimer);
-      MSWriter::writeHistory (reader->table(), parset);
+      MSWriter::writeHistory (reader->table(), parset.parameterSet());
     }
 
     MSUpdater::~MSUpdater()
diff --git a/CEP/DP3/DPPP/src/MSWriter.cc b/CEP/DP3/DPPP/src/MSWriter.cc
index a075a61cac358b13c7ce5b014738d16551be77c2..5a3f6b5cf9f382d80d02cfec564a4acbb1fd3284 100644
--- a/CEP/DP3/DPPP/src/MSWriter.cc
+++ b/CEP/DP3/DPPP/src/MSWriter.cc
@@ -27,9 +27,9 @@
 #include <DPPP/MSUpdater.h>
 #include <DPPP/DPBuffer.h>
 #include <DPPP/DPInfo.h>
+#include <DPPP/ParSet.h>
 #include <DPPP/DPLogger.h>
 #include <MS/VdsMaker.h>
-#include <Common/ParameterSet.h>
 #include <tables/Tables/TableCopy.h>
 #include <tables/Tables/DataManInfo.h>
 #include <tables/Tables/SetupNewTab.h>
@@ -50,7 +50,7 @@ namespace LOFAR {
 
     MSWriter::MSWriter (MSReader* reader, const std::string& outName,
                         const DPInfo& info,
-                        const ParameterSet& parset, const string& prefix)
+                        const ParSet& parset, const string& prefix)
       : itsReader       (reader),
         itsInterval     (info.timeInterval()),
         itsNrCorr       (info.ncorr()),
@@ -80,7 +80,7 @@ namespace LOFAR {
       }
       createMS (outName, info, tileSize, tileNChan);
       // Write the parset info into the history.
-      writeHistory (itsMS, parset);
+      writeHistory (itsMS, parset.parameterSet());
       itsMS.flush (true, true);
       DPLOG_INFO ("Finished preparing output MS", false);
     }
diff --git a/CEP/DP3/DPPP/src/MedFlagger.cc b/CEP/DP3/DPPP/src/MedFlagger.cc
index 32ec6e6b8ab8590f9e4e9114ecba6b3ab51deaf5..a42a67ab49b1fb9bee81021b71b9d7ef3c0d429b 100644
--- a/CEP/DP3/DPPP/src/MedFlagger.cc
+++ b/CEP/DP3/DPPP/src/MedFlagger.cc
@@ -25,7 +25,7 @@
 #include <DPPP/MedFlagger.h>
 #include <DPPP/DPBuffer.h>
 #include <DPPP/DPInfo.h>
-#include <Common/ParameterSet.h>
+#include <DPPP/ParSet.h>
 #include <Common/StreamUtil.h>
 #include <Common/LofarLogger.h>
 #include <casa/Arrays/ArrayMath.h>
@@ -42,8 +42,7 @@ namespace LOFAR {
   namespace DPPP {
 
     MedFlagger::MedFlagger (DPInput* input,
-                            const ParameterSet& parset,
-                            const string& prefix)
+                            const ParSet& parset, const string& prefix)
       : itsInput         (input),
         itsName          (prefix),
         itsThresholdStr  (parset.getString (prefix+"threshold", "1")),
diff --git a/CEP/DP3/DPPP/src/MultiMSReader.cc b/CEP/DP3/DPPP/src/MultiMSReader.cc
index d127fd3e2eaf9a84ebf2ca7a8e77a8e4144f9b22..73d070ce5caa9226dd5abacf02d713580cc7e37c 100644
--- a/CEP/DP3/DPPP/src/MultiMSReader.cc
+++ b/CEP/DP3/DPPP/src/MultiMSReader.cc
@@ -25,7 +25,7 @@
 #include <DPPP/MultiMSReader.h>
 #include <DPPP/DPBuffer.h>
 #include <DPPP/DPInfo.h>
-#include <Common/ParameterSet.h>
+#include <DPPP/ParSet.h>
 #include <Common/StreamUtil.h>
 #include <Common/LofarLogger.h>
 #include <tables/Tables/TableRecord.h>
@@ -48,8 +48,7 @@ namespace LOFAR {
   namespace DPPP {
 
     MultiMSReader::MultiMSReader (const vector<string>& msNames,
-                                  const ParameterSet& parset,
-                                  const string& prefix)
+                                  const ParSet& parset, const string& prefix)
       : itsFirst    (-1),
         itsNMissing (0),
         itsMSNames  (msNames)
@@ -404,7 +403,6 @@ namespace LOFAR {
       return flags;
     }
 
-    /*
     Cube<Complex> MultiMSReader::getData (const String& columnName,
                                           const RefRows& rowNrs)
     {
@@ -424,7 +422,6 @@ namespace LOFAR {
       }
       return data;
     }
-    */
 
     void MultiMSReader::combineFullResFlags (const vector<Cube<bool> >& vec,
                                              Cube<bool>& flags) const
diff --git a/CEP/DP3/DPPP/src/ParSet.cc b/CEP/DP3/DPPP/src/ParSet.cc
new file mode 100644
index 0000000000000000000000000000000000000000..61e1430f2f2d1a35813f4f26a080f7c4033174f3
--- /dev/null
+++ b/CEP/DP3/DPPP/src/ParSet.cc
@@ -0,0 +1,217 @@
+//# ParSet.cc: Wrapper around ParaMeterSet to keep track of parameters asked for
+//# Copyright (C) 2010
+//# ASTRON (Netherlands Institute for Radio Astronomy)
+//# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+//#
+//# This file is part of the LOFAR software suite.
+//# The LOFAR software suite 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 3 of the License, or
+//# (at your option) any later version.
+//#
+//# The LOFAR software suite 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 the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
+//#
+//# $Id$
+//#
+//# @author Ger van Diepen
+
+#include <DPPP/ParSet.h>
+#include <Common/ParameterRecord.h>
+#include <set>
+
+namespace LOFAR {
+  namespace DPPP {
+
+    ParSet::ParSet (const ParameterSet& parset )
+      : itsParSet (parset)
+    {}
+
+    bool   ParSet::getBool  (const string& aKey) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getBool (aKey);
+    }
+
+    bool   ParSet::getBool  (const string& aKey, bool aValue) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getBool (aKey, aValue);
+    }
+
+    int    ParSet::getInt   (const string& aKey) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getInt (aKey);
+    }
+
+    int    ParSet::getInt   (const string& aKey, int aValue) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getInt (aKey, aValue);
+    }
+
+    uint   ParSet::getUint  (const string& aKey) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getUint (aKey);
+    }
+
+    uint   ParSet::getUint  (const string& aKey, uint aValue) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getUint (aKey, aValue);
+    }
+
+    float  ParSet::getFloat (const string& aKey) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getFloat (aKey);
+    }
+
+    float  ParSet::getFloat (const string& aKey, float aValue) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getFloat (aKey, aValue);
+    }
+
+    double ParSet::getDouble(const string& aKey) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getDouble (aKey);
+    }
+
+    double ParSet::getDouble(const string& aKey, double aValue) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getDouble (aKey, aValue);
+    }
+
+    string ParSet::getString(const string& aKey) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getString (aKey);
+    }
+
+    string ParSet::getString(const string& aKey, const string& aValue) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getString (aKey, aValue);
+    }
+
+    vector<bool>   ParSet::getBoolVector  (const string& aKey,
+                                           bool expandable) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getBoolVector (aKey, expandable);
+    }
+
+    vector<bool>   ParSet::getBoolVector  (const string& aKey,
+                                           const vector<bool>& aValue,
+                                           bool expandable) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getBoolVector (aKey, aValue, expandable);
+    }
+
+    vector<int>    ParSet::getIntVector   (const string& aKey,
+                                           bool expandable) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getIntVector (aKey, expandable);
+    }
+
+    vector<int>    ParSet::getIntVector   (const string& aKey,
+                                           const vector<int>& aValue,
+                                           bool expandable) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getIntVector (aKey, aValue, expandable);
+    }
+
+    vector<uint>   ParSet::getUintVector  (const string& aKey,
+                                           bool expandable) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getUintVector (aKey, expandable);
+    }
+
+    vector<uint>   ParSet::getUintVector  (const string& aKey,
+                                           const vector<uint>& aValue,
+                                           bool expandable) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getUintVector (aKey, aValue, expandable);
+    }
+
+    vector<float>  ParSet::getFloatVector (const string& aKey,
+                                           bool expandable) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getFloatVector (aKey, expandable);
+    }
+
+    vector<float>  ParSet::getFloatVector (const string& aKey,
+                                           const vector<float>& aValue,
+                                           bool expandable) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getFloatVector (aKey, aValue, expandable);
+    }
+
+    vector<double> ParSet::getDoubleVector(const string& aKey,
+                                           bool expandable) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getDoubleVector (aKey, expandable);
+    }
+
+    vector<double> ParSet::getDoubleVector(const string& aKey,
+                                           const vector<double>& aValue,
+                                           bool expandable) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getDoubleVector (aKey, aValue, expandable);
+    }
+
+    vector<string> ParSet::getStringVector(const string& aKey,
+                                           bool expandable) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getStringVector (aKey, expandable);
+    }
+
+    vector<string> ParSet::getStringVector(const string& aKey,
+                                           const vector<string>& aValue,
+                                           bool expandable) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getStringVector (aKey, aValue, expandable);
+    }
+
+    ParameterRecord ParSet::getRecord(const string& aKey) const
+    {
+      itsAskedParms.insert (aKey);
+      return itsParSet.getRecord (aKey);
+    }
+
+    vector<string> ParSet::unusedKeys() const
+    {
+      vector<string> vec;
+      for (ParameterSet::const_iterator iter = itsParSet.begin();
+           iter != itsParSet.end(); ++iter) {
+        if (itsAskedParms.find (iter->first) == itsAskedParms.end()) {
+          vec.push_back (iter->first);
+        }
+      }
+      return vec;
+    }
+
+
+  } //# end namespace
+}
diff --git a/CEP/DP3/DPPP/src/PhaseShift.cc b/CEP/DP3/DPPP/src/PhaseShift.cc
index 4501069dcd8190ae3b017486a06be79e94b218a9..c24752220567c8641b180230feb544fb755f1942 100644
--- a/CEP/DP3/DPPP/src/PhaseShift.cc
+++ b/CEP/DP3/DPPP/src/PhaseShift.cc
@@ -25,7 +25,7 @@
 #include <DPPP/PhaseShift.h>
 #include <DPPP/DPBuffer.h>
 #include <DPPP/DPInfo.h>
-#include <Common/ParameterSet.h>
+#include <DPPP/ParSet.h>
 #include <Common/LofarLogger.h>
 #include <Common/StreamUtil.h>
 #include <casa/Arrays/ArrayMath.h>
@@ -43,16 +43,14 @@ namespace LOFAR {
   namespace DPPP {
 
     PhaseShift::PhaseShift (DPInput* input,
-                            const ParameterSet& parset,
-                            const string& prefix)
+                            const ParSet& parset, const string& prefix)
       : itsInput   (input),
         itsName    (prefix),
         itsCenter  (parset.getStringVector(prefix+"phasecenter"))
     {}
 
     PhaseShift::PhaseShift (DPInput* input,
-                            const ParameterSet& parset,
-                            const string& prefix,
+                            const ParSet& parset, const string& prefix,
                             const vector<string>& defVal)
       : itsInput   (input),
         itsName    (prefix),
diff --git a/CEP/DP3/DPPP/src/PreFlagger.cc b/CEP/DP3/DPPP/src/PreFlagger.cc
index f9c6715efc9adb7bfebc7c24491ceaa4df5de5b2..2e24393113dba9a21f85ac3c83ec3e153969b5f5 100644
--- a/CEP/DP3/DPPP/src/PreFlagger.cc
+++ b/CEP/DP3/DPPP/src/PreFlagger.cc
@@ -25,8 +25,8 @@
 #include <DPPP/PreFlagger.h>
 #include <DPPP/DPBuffer.h>
 #include <DPPP/DPInfo.h>
+#include <DPPP/ParSet.h>
 #include <DPPP/DPLogger.h>
-#include <Common/ParameterSet.h>
 #include <Common/StreamUtil.h>
 #include <Common/LofarLogger.h>
 
@@ -51,8 +51,7 @@ namespace LOFAR {
   namespace DPPP {
 
     PreFlagger::PreFlagger (DPInput* input,
-                            const ParameterSet& parset,
-                            const string& prefix)
+                            const ParSet& parset, const string& prefix)
       : itsName        (prefix),
         itsInput       (input),
         itsMode        (SetFlag),
@@ -226,8 +225,7 @@ namespace LOFAR {
 
 
     PreFlagger::PSet::PSet (DPInput* input,
-                            const ParameterSet& parset,
-                            const string& prefix)
+                            const ParSet& parset, const string& prefix)
       : itsInput (input),
         itsName  (prefix),
         itsFlagOnUV    (false),
diff --git a/CEP/DP3/DPPP/src/StationAdder.cc b/CEP/DP3/DPPP/src/StationAdder.cc
index 1f6768bd5ac613488315620e3d7865763887c473..76356ad5669a275280464be413c126310cc1da23 100644
--- a/CEP/DP3/DPPP/src/StationAdder.cc
+++ b/CEP/DP3/DPPP/src/StationAdder.cc
@@ -25,8 +25,8 @@
 #include <DPPP/StationAdder.h>
 #include <DPPP/DPBuffer.h>
 #include <DPPP/DPInfo.h>
+#include <DPPP/ParSet.h>
 #include <DPPP/DPLogger.h>
-#include <Common/ParameterSet.h>
 #include <Common/ParameterRecord.h>
 
 #include <measures/Measures/MPosition.h>
@@ -48,8 +48,7 @@ namespace LOFAR {
   namespace DPPP {
 
     StationAdder::StationAdder (DPInput* input,
-                                const ParameterSet& parset,
-                                const string& prefix)
+                                const ParSet& parset, const string& prefix)
       : itsInput        (input),
         itsName         (prefix),
         itsStatRec      (parset.getRecord(prefix+"stations")),
diff --git a/CEP/DP3/DPPP/src/UVWFlagger.cc b/CEP/DP3/DPPP/src/UVWFlagger.cc
index c5a0a5fea741c030d12320dc53b16dcaf26a56dd..dd70fc6ad2dd0d2db5c416654312e456fd21c15d 100644
--- a/CEP/DP3/DPPP/src/UVWFlagger.cc
+++ b/CEP/DP3/DPPP/src/UVWFlagger.cc
@@ -25,7 +25,7 @@
 #include <DPPP/UVWFlagger.h>
 #include <DPPP/DPBuffer.h>
 #include <DPPP/DPInfo.h>
-#include <Common/ParameterSet.h>
+#include <DPPP/ParSet.h>
 #include <Common/StreamUtil.h>
 #include <Common/LofarLogger.h>
 #include <casa/Arrays/ArrayMath.h>
@@ -42,8 +42,7 @@ namespace LOFAR {
   namespace DPPP {
 
     UVWFlagger::UVWFlagger (DPInput* input,
-                            const ParameterSet& parset,
-                            const string& prefix)
+                            const ParSet& parset, const string& prefix)
       : itsInput       (input),
         itsName        (prefix),
         itsNTimes      (0),
@@ -243,7 +242,7 @@ namespace LOFAR {
       }
     }
 
-    vector<double> UVWFlagger::fillUVW (const ParameterSet& parset,
+    vector<double> UVWFlagger::fillUVW (const ParSet& parset,
                                         const string& prefix,
                                         const string& name,
                                         bool square)
diff --git a/CEP/DP3/DPPP/test/CMakeLists.txt b/CEP/DP3/DPPP/test/CMakeLists.txt
index 64f5d62d6a46acb026dc1fd8937272a8adb69fa9..b6bf34bbbfd74dbeeacefe887becddd05e649862 100644
--- a/CEP/DP3/DPPP/test/CMakeLists.txt
+++ b/CEP/DP3/DPPP/test/CMakeLists.txt
@@ -16,6 +16,7 @@ lofar_add_test(tFilter tFilter.cc)
 #lofar_add_test(tDemixer tDemixer.cc)
 lofar_add_test(tNDPPP tNDPPP.cc)
 lofar_add_test(tparse tparse.cc)
+lofar_add_test(tParSet tParSet.cc)
 lofar_add_test(tBaselineSelection tBaselineSelection.cc)
 # lofar_add_test(tExpr tExpr.cc)
 # lofar_add_test(tmeqarray tmeqarray.cc)
diff --git a/CEP/DP3/DPPP/test/tAORFlagger.cc b/CEP/DP3/DPPP/test/tAORFlagger.cc
index 386a7f482f0c44462123565a24fadc936afd18cf..ae2c060ad83c42eb052dc9751169cc6f409a9620 100644
--- a/CEP/DP3/DPPP/test/tAORFlagger.cc
+++ b/CEP/DP3/DPPP/test/tAORFlagger.cc
@@ -26,7 +26,7 @@
 #include <DPPP/DPInput.h>
 #include <DPPP/DPBuffer.h>
 #include <DPPP/DPInfo.h>
-#include <Common/ParameterSet.h>
+#include <DPPP/ParSet.h>
 #include <Common/StringUtil.h>
 #include <casa/Arrays/ArrayMath.h>
 #include <casa/Arrays/ArrayLogical.h>
diff --git a/CEP/DP3/DPPP/test/tAverager.cc b/CEP/DP3/DPPP/test/tAverager.cc
index 80f7b2cee5d2fdd8d1a7d0eb9162ec4e6cb9d5cd..d6c4b9b4af5e25a7af10dfd00a0a2e161a11fc9c 100644
--- a/CEP/DP3/DPPP/test/tAverager.cc
+++ b/CEP/DP3/DPPP/test/tAverager.cc
@@ -25,7 +25,7 @@
 #include <DPPP/Averager.h>
 #include <DPPP/DPBuffer.h>
 #include <DPPP/DPInfo.h>
-#include <Common/ParameterSet.h>
+#include <DPPP/ParSet.h>
 #include <Common/StringUtil.h>
 #include <casa/Arrays/ArrayMath.h>
 #include <casa/Arrays/ArrayLogical.h>
diff --git a/CEP/DP3/DPPP/test/tBaselineSelection.cc b/CEP/DP3/DPPP/test/tBaselineSelection.cc
index af1ba2f32b9668fed4852fc9f95fe8f10d07f69f..fc125a99b6046db3d4073fcc517cb04341cf012f 100644
--- a/CEP/DP3/DPPP/test/tBaselineSelection.cc
+++ b/CEP/DP3/DPPP/test/tBaselineSelection.cc
@@ -24,7 +24,7 @@
 #include <lofar_config.h>
 #include <DPPP/BaselineSelection.h>
 #include <DPPP/DPInfo.h>
-#include <Common/ParameterSet.h>
+#include <DPPP/ParSet.h>
 #include <Common/LofarLogger.h>
 #include <Common/StreamUtil.h>
 #include <casa/Arrays/ArrayLogical.h>
diff --git a/CEP/DP3/DPPP/test/tDemixer.cc b/CEP/DP3/DPPP/test/tDemixer.cc
index 97540f1524cb3aa9a15cbd2b45e2e34aec5e487d..fec79fc9913705b1cefd410b2206718fc87f5d60 100644
--- a/CEP/DP3/DPPP/test/tDemixer.cc
+++ b/CEP/DP3/DPPP/test/tDemixer.cc
@@ -25,7 +25,7 @@
 #include <DPPP/Demixer.h>
 #include <DPPP/DPBuffer.h>
 #include <DPPP/DPInfo.h>
-#include <Common/ParameterSet.h>
+#include <DPPP/ParSet.h>
 #include <Common/StringUtil.h>
 #include <casa/Arrays/ArrayMath.h>
 #include <casa/Arrays/ArrayLogical.h>
diff --git a/CEP/DP3/DPPP/test/tFilter.cc b/CEP/DP3/DPPP/test/tFilter.cc
index 9559d6b355fc9ba9c73098cc37dc0bb1c83d8116..758eb6633fb84583d32ef0231ce536503587ca88 100644
--- a/CEP/DP3/DPPP/test/tFilter.cc
+++ b/CEP/DP3/DPPP/test/tFilter.cc
@@ -25,7 +25,7 @@
 #include <DPPP/Filter.h>
 #include <DPPP/DPBuffer.h>
 #include <DPPP/DPInfo.h>
-#include <Common/ParameterSet.h>
+#include <DPPP/ParSet.h>
 #include <Common/StringUtil.h>
 #include <casa/Arrays/ArrayMath.h>
 #include <casa/Arrays/ArrayLogical.h>
diff --git a/CEP/DP3/DPPP/test/tMedFlagger.cc b/CEP/DP3/DPPP/test/tMedFlagger.cc
index fc3f883ad7fb458f4a249669d9ea5442d87c105d..767c478e564767cbe8b213c3efd694e6e1dae4e7 100644
--- a/CEP/DP3/DPPP/test/tMedFlagger.cc
+++ b/CEP/DP3/DPPP/test/tMedFlagger.cc
@@ -26,7 +26,7 @@
 #include <DPPP/DPInput.h>
 #include <DPPP/DPBuffer.h>
 #include <DPPP/DPInfo.h>
-#include <Common/ParameterSet.h>
+#include <DPPP/ParSet.h>
 #include <Common/StringUtil.h>
 #include <casa/Arrays/ArrayMath.h>
 #include <casa/Arrays/ArrayLogical.h>
diff --git a/CEP/DP3/DPPP/test/tPSet.cc b/CEP/DP3/DPPP/test/tPSet.cc
index 6ac6264d9db38b9c006d944e5ed7c292ddcbeff4..f1b6a8204b4e8ccd85c3fcff12dcd5098caae539 100644
--- a/CEP/DP3/DPPP/test/tPSet.cc
+++ b/CEP/DP3/DPPP/test/tPSet.cc
@@ -24,7 +24,7 @@
 #include <lofar_config.h>
 #include <DPPP/PreFlagger.h>
 #include <DPPP/DPInfo.h>
-#include <Common/ParameterSet.h>
+#include <DPPP/ParSet.h>
 #include <Common/LofarLogger.h>
 #include <casa/Arrays/ArrayIO.h>
 #include <casa/Quanta/MVTime.h>
diff --git a/CEP/DP3/DPPP/test/tParSet.cc b/CEP/DP3/DPPP/test/tParSet.cc
new file mode 100644
index 0000000000000000000000000000000000000000..37ea477cfc72fec6013461f64293596cc86af38d
--- /dev/null
+++ b/CEP/DP3/DPPP/test/tParSet.cc
@@ -0,0 +1,57 @@
+//# tParSet.cc: Test for class ParSet
+//# Copyright (C) 2010
+//# ASTRON (Netherlands Institute for Radio Astronomy)
+//# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+//#
+//# This file is part of the LOFAR software suite.
+//# The LOFAR software suite 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 3 of the License, or
+//# (at your option) any later version.
+//#
+//# The LOFAR software suite 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 the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
+//#
+//# $Id$
+//#
+//# @author Ger van Diepen
+
+#include <lofar_config.h>
+#include <DPPP/ParSet.h>
+#include <Common/LofarLogger.h>
+
+using namespace LOFAR;
+using namespace LOFAR::DPPP;
+
+void doTest()
+{
+  ParameterSet parset;
+  parset.add ("key1", "abc");
+  parset.add ("key2", "def");
+  parset.add ("key3", "g");
+  ParSet pset(parset);
+  ASSERT (pset.unusedKeys().size() == 3);
+  ASSERT (pset.getString("key1") == "abc");
+  ASSERT (pset.getString("key1", "") == "abc");
+  ASSERT (pset.getString("key1a", "12") == "12");
+  ASSERT (pset.getString("key3") == "g");
+  vector<string> unused = pset.unusedKeys();
+  ASSERT (unused.size() == 1);
+  ASSERT (unused[0] == "key2");
+}
+
+int main()
+{
+  try {
+    doTest();
+  } catch (std::exception& x) {
+    cout << "Unexpected exception: " << x.what() << endl;
+    return 1;
+  }
+  return 0;
+}
diff --git a/CEP/DP3/DPPP/test/tPhaseShift.cc b/CEP/DP3/DPPP/test/tPhaseShift.cc
index 24a6d6440a5ebd70a75ab1c852414af8fc06a274..8ce174dc4d7b38283a7437b93a148028a5dcb435 100644
--- a/CEP/DP3/DPPP/test/tPhaseShift.cc
+++ b/CEP/DP3/DPPP/test/tPhaseShift.cc
@@ -25,7 +25,7 @@
 #include <DPPP/PhaseShift.h>
 #include <DPPP/DPBuffer.h>
 #include <DPPP/DPInfo.h>
-#include <Common/ParameterSet.h>
+#include <DPPP/ParSet.h>
 #include <Common/StringUtil.h>
 #include <casa/Arrays/ArrayMath.h>
 #include <casa/Arrays/ArrayLogical.h>
diff --git a/CEP/DP3/DPPP/test/tPreFlagger.cc b/CEP/DP3/DPPP/test/tPreFlagger.cc
index e3ebcddf3e91dc6b73d61aada1ca573a5cfea0c5..af24d6dd9c0fc2e44351d925acf2581472c139aa 100644
--- a/CEP/DP3/DPPP/test/tPreFlagger.cc
+++ b/CEP/DP3/DPPP/test/tPreFlagger.cc
@@ -27,7 +27,7 @@
 #include <DPPP/DPInput.h>
 #include <DPPP/DPBuffer.h>
 #include <DPPP/DPInfo.h>
-#include <Common/ParameterSet.h>
+#include <DPPP/ParSet.h>
 #include <Common/StringUtil.h>
 #include <casa/Arrays/ArrayMath.h>
 #include <casa/Arrays/ArrayLogical.h>
diff --git a/CEP/DP3/DPPP/test/tStationAdder.cc b/CEP/DP3/DPPP/test/tStationAdder.cc
index 5b21004c8541b6ef0d3fb5b999cb2971d8481bc2..a666a8d6fd0977a7846e94ec45a8ff9ab7d5f060 100644
--- a/CEP/DP3/DPPP/test/tStationAdder.cc
+++ b/CEP/DP3/DPPP/test/tStationAdder.cc
@@ -26,7 +26,7 @@
 #include <DPPP/DPInput.h>
 #include <DPPP/DPBuffer.h>
 #include <DPPP/DPInfo.h>
-#include <Common/ParameterSet.h>
+#include <DPPP/ParSet.h>
 #include <Common/StringUtil.h>
 #include <Common/StreamUtil.h>
 #include <casa/Arrays/ArrayMath.h>
diff --git a/CEP/DP3/DPPP/test/tUVWFlagger.cc b/CEP/DP3/DPPP/test/tUVWFlagger.cc
index 76dd46ba7ef073e68bf28efa5a227e76b659b58a..a91b59753368a57971173158cbb6cd9b4427cce2 100644
--- a/CEP/DP3/DPPP/test/tUVWFlagger.cc
+++ b/CEP/DP3/DPPP/test/tUVWFlagger.cc
@@ -26,7 +26,7 @@
 #include <DPPP/DPInput.h>
 #include <DPPP/DPBuffer.h>
 #include <DPPP/DPInfo.h>
-#include <Common/ParameterSet.h>
+#include <DPPP/ParSet.h>
 #include <Common/StringUtil.h>
 #include <casa/Arrays/ArrayMath.h>
 #include <casa/Arrays/ArrayLogical.h>
diff --git a/CEP/Pipeline/framework/lofarpipe/support/utilities.py b/CEP/Pipeline/framework/lofarpipe/support/utilities.py
index 931cb014932f5d69c0a0fdb7958adeb2ef68cb79..32a827d0baa3bb2a9a6f0eed0419a7755ba3fd93 100644
--- a/CEP/Pipeline/framework/lofarpipe/support/utilities.py
+++ b/CEP/Pipeline/framework/lofarpipe/support/utilities.py
@@ -9,6 +9,7 @@
 
 from __future__ import with_statement
 
+from subprocess import Popen, CalledProcessError, PIPE
 from itertools import islice, repeat, chain, izip
 from contextlib import closing, contextmanager
 from time import sleep
@@ -18,14 +19,7 @@ import warnings
 import os
 import errno
 import shutil
-import sys
-
-try:
-    import subprocess27 as subprocess
-    print >> sys.stderr, __file__, ": Using Python 2.7 subprocess module!"
-except ImportError:
-    import subprocess
-    print >> sys.stderr, __file__, ": Using default subprocess module!"
+import subprocess
 
 from lofarpipe.support.pipelinelogging import log_process_output
 
@@ -92,7 +86,7 @@ def disk_usage(*paths):
     Return the disk usage in bytes by the file(s) in ``paths``.
     """
     cmd = ['du', '-s', '-b']
-    proc = subprocess.Popen(cmd + list(paths), stdout = subprocess.PIPE)
+    proc = Popen(cmd + list(paths), stdout = PIPE)
     sout = proc.communicate()[0]
     if sout:
         return sum([int(s.split('\t')[0]) for s in sout.strip().split('\n')])
@@ -230,8 +224,8 @@ def spawn_process(cmd, logger, cwd = None, env = None, max_tries = 2, max_timeou
         logger.debug(
             "Spawning subprocess: cmd=%s, cwd=%s, env=%s" % (cmd, cwd, env))
         try:
-            process = subprocess.Popen(
-                cmd, cwd = cwd, env = env, stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE
+            process = Popen(
+                cmd, cwd = cwd, env = env, stdin = PIPE, stdout = PIPE, stderr = PIPE
             )
         except OSError, e:
             logger.warn(
@@ -273,10 +267,10 @@ def catch_segfaults(cmd, cwd, env, logger, max = 1, cleanup = lambda: None):
             tries += 1
             continue
         else:
-            raise subprocess.CalledProcessError(
+            raise CalledProcessError(
                 process.returncode, cmd[0]
             )
     if tries > max:
         logger.error("Too many segfaults from %s; aborted" % (cmd[0]))
-        raise subprocess.CalledProcessError(process.returncode, cmd[0])
+        raise CalledProcessError(process.returncode, cmd[0])
     return process
diff --git a/CEP/Pipeline/recipes/sip/master/vdsmaker.py b/CEP/Pipeline/recipes/sip/master/vdsmaker.py
index 95af2e33541150cf34edfca5565f7997fab76fd5..077cd0d1436b24d423b36225cc64ae4d6c504bf7 100644
--- a/CEP/Pipeline/recipes/sip/master/vdsmaker.py
+++ b/CEP/Pipeline/recipes/sip/master/vdsmaker.py
@@ -107,9 +107,6 @@ class vdsmaker(BaseRecipe, RemoteCommandRecipeMixIn):
             vds for vds, job in zip(vdsnames, jobs) 
             if job.results['returncode'] == 0
         ]
-        if not vdsnames:
-            self.logger.error("All makevds processes failed. Bailing out!")
-            return 1
 
         # *********************************************************************
         # 3. Combine VDS files to produce GDS
diff --git a/LCS/ACC/ALC/src/ApplControlClient.cc b/LCS/ACC/ALC/src/ApplControlClient.cc
index 7e5ba75a1f6aed8e882d1d9050d0240159cb308c..3c1304ca7c8ac5dbdd7e27436122abdea071b66f 100644
--- a/LCS/ACC/ALC/src/ApplControlClient.cc
+++ b/LCS/ACC/ALC/src/ApplControlClient.cc
@@ -80,8 +80,8 @@ ApplControlClient::ApplControlClient(const string&	aUniqUserName,
 	LOG_DEBUG(formatString("Private ACserver is at %s:%d, trying to connect", 
 														host.c_str(), port));
 
-	LOG_DEBUG("Waiting 5 second before starting up the ApplController");
-	sleep (5);
+	LOG_DEBUG("Waiting 3 second before starting up the ApplController");
+	sleep (3);
 
 	itsCommChan = new ApplControlComm(host, toString(port), syncClient);
 	ASSERTSTR(itsCommChan, "Unable to allocate a communication channel");
diff --git a/MAC/APL/APLCommon/src/ChildControl.cc b/MAC/APL/APLCommon/src/ChildControl.cc
index 9a0ef06279cf9b271df429b5dde57598d7c86c2c..2f24adf0f0ca3940f057557e3f363db790848c2d 100644
--- a/MAC/APL/APLCommon/src/ChildControl.cc
+++ b/MAC/APL/APLCommon/src/ChildControl.cc
@@ -65,7 +65,7 @@ ChildControl::ChildControl() :
 	itsTimerPort			(*this, "childControlTimer"),
 	itsStartDaemonMap		(),
 	itsStartupRetryInterval	(10),
-	itsMaxStartupRetries	(2),
+	itsMaxStartupRetries	(5),
 	itsCntlrList	 		(0),
 	itsActionList	 		(),
 	itsActionTimer			(0),
@@ -1053,8 +1053,9 @@ void ChildControl::_doGarbageCollection()
 				LOG_DEBUG_STR ("Controller " << iter->cntlrName << " is still unreachable, informing main task");
 				_setEstablishedState(iter->cntlrName, CTState::QUITED, time(0), CT_RESULT_LOST_CONNECTION);
 				iter->port = (GCFPortInterface*) -1;
+				restartTimer = true;
 			}
-			restartTimer = true;
+
 			iter++;
 		} else if (iter->port == (GCFPortInterface*)-1) {
 			LOG_DEBUG_STR ("Removing controller " << iter->cntlrName << " from the controller list");
diff --git a/MAC/APL/APLCommon/src/swlevel b/MAC/APL/APLCommon/src/swlevel
index c0b6cf8fab8a4db80941b8b8558f66360f3d480b..8168875889a4b4a9ba8d4bc8313d607ccedd4b78 100644
--- a/MAC/APL/APLCommon/src/swlevel
+++ b/MAC/APL/APLCommon/src/swlevel
@@ -124,7 +124,6 @@ start_prog()
 	# Check if program is already running
 	/sbin/pidof ${prog} 1>/dev/null 2>&1
 	if [ $? -ne 0 ]; then
-                curdate=`date +%Y%m%dT%H%M%S`
 		# PVSS needs special treatment
 		if [ "$prog" = "PVSS00pmon" ]; then 
 		    echo Starting $prog
@@ -137,7 +136,7 @@ start_prog()
 		    if [ "$user" = "lofarsys" ]; then
 			echo Starting $prog
 			rm -f $LOGDIR/$prog.log*.? 1>/dev/null 2>&1
-			$BINDIR/$prog 1>>$LOGDIR//$prog.stdout.${curdate} 2>&1 &
+			$BINDIR/$prog 1>>$LOGDIR//$prog.stdout 2>&1 &
                     else
                         echo "Local use, not starting $prog"
                     fi		    
@@ -147,14 +146,14 @@ start_prog()
 		       sudo rm -f $LOGDIR/$prog.log.? 1>/dev/null 2>&1
 		       if [ "$prog" = "RSPDriver" ]; then
 			   selectImage
-			   sudo -b $BINDIR/$prog 1>>$LOGDIR/$prog.stdout.${curdate} 2>&1
+			   sudo -b $BINDIR/$prog 1>>$LOGDIR/$prog.stdout 2>&1
 		       else
-		           sudo -b $BINDIR/$prog 1>>$LOGDIR/$prog.stdout.${curdate} 2>&1
+		           sudo -b $BINDIR/$prog 1>>$LOGDIR/$prog.stdout 2>&1
 		       fi
 		    else
 			echo Starting $prog
 			rm -f $LOGDIR/$prog.log*.? 1>/dev/null 2>&1
-			$BINDIR/$prog 1>>$LOGDIR/$prog.stdout.${curdate} 2>&1 &
+			$BINDIR/$prog 1>>$LOGDIR/$prog.stdout 2>&1 &
 		    fi
 		fi
 		usleep 250000
diff --git a/MAC/APL/CEPCU/src/OnlineControl/OnlineControl.cc b/MAC/APL/CEPCU/src/OnlineControl/OnlineControl.cc
index d729e40b1b1cae3a8594ce6ff05e025596df8753..6eaaed5618060f2f38d7b8d84b3e4794321de319 100644
--- a/MAC/APL/CEPCU/src/OnlineControl/OnlineControl.cc
+++ b/MAC/APL/CEPCU/src/OnlineControl/OnlineControl.cc
@@ -775,8 +775,8 @@ void OnlineControl::_doBoot()
 			remoteCopy(paramFileName,accHost,LOFAR_SHARE_LOCATION);
 
 			// Finally start ApplController on the right host
-			LOG_INFO_STR("Starting controller for " << applName << " in 5 seconds ");
-			sleep(5);			 // sometimes we are too quick, wait a second.
+			LOG_INFO_STR("Starting controller for " << applName << " in 3 seconds ");
+			sleep(3);			 // sometimes we are too quick, wait a second.
 			int32	expectedRuntime = time_duration(itsStopTime - itsStartTime).total_seconds();
 			uint32	obsID = globalParameterSet()->getUint32("Observation.ObsID");
 			CEPApplMgrPtr	accClient (new CEPApplMgr(*this, formatString("%s%d", applName.c_str(), obsID),
diff --git a/MAC/APL/CEPCU/src/PythonControl/PythonControl.cc b/MAC/APL/CEPCU/src/PythonControl/PythonControl.cc
index cbe2e55687c0717847ec6ff8274a995aac8077ff..60cdd0b0f9490d54a624a18df6ca438c0e1e1e7e 100644
--- a/MAC/APL/CEPCU/src/PythonControl/PythonControl.cc
+++ b/MAC/APL/CEPCU/src/PythonControl/PythonControl.cc
@@ -312,29 +312,28 @@ GCFEvent::TResult PythonControl::initial_state(GCFEvent& event, GCFPortInterface
 		string	pythonHost      (thePS->getString(myPrefix+"pythonHost",     "@pythonHost@"));
 		itsChildCanCommunicate = thePS->getBool  (myPrefix+"canCommunicate", true);
 		// START PYTHON
-		// QUICK FIX #3633: if-else nesting was different
-		if (itsChildCanCommunicate) {
-			bool startOK = _startPython(pythonProg, getObservationNr(getName()), realHostname(pythonHost), 
-										itsListener->makeServiceName());
-			if (!startOK) {
-				LOG_ERROR("Failed to start the Python environment.");
-				CONTROLConnectedEvent	answer;
-				answer.cntlrName = msg.cntlrName;
-				answer.result    = CONTROL_LOST_CONN_ERR;
-				port.send(answer);
-				TRAN(PythonControl::finishing_state);
-				break;
-			}
-			LOG_DEBUG ("Started Python environment, going to waitForConnection state");
-			TRAN(PythonControl::waitForConnection_state);
+		bool	startOK = _startPython(pythonProg, getObservationNr(getName()), realHostname(pythonHost), itsListener->makeServiceName());
+		if (!startOK) {
+			LOG_ERROR("Failed to start the Python environment.");
+			CONTROLConnectedEvent	answer;
+			answer.cntlrName = msg.cntlrName;
+			answer.result    = CONTROL_LOST_CONN_ERR;
+			port.send(answer);
+			TRAN(PythonControl::finishing_state);
 		}
 		else {
-			LOG_WARN ("Python environment CANNOT COMMUNICATE, FAKING RESPONSES!!!");
-			CONTROLConnectedEvent	answer;
-			answer.cntlrName = itsMyName;
-			answer.result = CT_RESULT_NO_ERROR;
-			itsParentPort->send(answer);
-			TRAN(PythonControl::operational_state);
+			if (itsChildCanCommunicate) {
+				LOG_DEBUG ("Started Python environment, going to waitForConnection state");
+				TRAN(PythonControl::waitForConnection_state);
+			}
+			else {
+				LOG_WARN ("Started Python environment, CHILD CANNOT COMMUNICATE, FAKING RESPONSES!!!");
+				CONTROLConnectedEvent	answer;
+				answer.cntlrName = itsMyName;
+				answer.result = CT_RESULT_NO_ERROR;
+				itsParentPort->send(answer);
+				TRAN(PythonControl::operational_state);
+			}
 		}
 	}
 	break;
@@ -571,25 +570,7 @@ GCFEvent::TResult PythonControl::operational_state(GCFEvent& event, GCFPortInter
 			itsPythonPort->send(msg);
 		}
 		else {
-			// QUICK FIX #3633
-			LOG_INFO("Trying to start the Python environment");
-			ParameterSet*   thePS  = globalParameterSet();      // shortcut to global PS.
-			string  myPrefix        (thePS->locateModule("PythonControl")+"PythonControl.");
-			string	pythonProg      (thePS->getString(myPrefix+"pythonProgram",  "@pythonProgram@"));
-			string	pythonHost      (thePS->getString(myPrefix+"pythonHost",     "@pythonHost@"));
-			bool startOK = _startPython(pythonProg, getObservationNr(getName()), realHostname(pythonHost), 
-										itsListener->makeServiceName());
-			if (!startOK) {
-				LOG_ERROR("Failed to start the Python environment, ABORTING.");
-				CONTROLConnectedEvent	answer;
-				answer.cntlrName = msg.cntlrName;
-				answer.result    = CONTROL_LOST_CONN_ERR;
-				port.send(answer);
-				TRAN(PythonControl::finishing_state);
-				break;
-			}
-			// QUICK FIX #3633 END
-			LOG_WARN("Start of Python environment looks OK, sending FAKE Resume response");
+			LOG_WARN("Sending FAKE Resume response");
 			sendControlResult(*itsParentPort, event.signal, itsMyName, CT_RESULT_NO_ERROR);
 		}
 		break;
diff --git a/MAC/APL/CEPCU/src/PythonControl/PythonControlMain.cc b/MAC/APL/CEPCU/src/PythonControl/PythonControlMain.cc
index a9ff9f09e88a9be79c372158d32099135c2e48e7..3ee05cbb8fdf0fc1c96ddf69190c729761d091c5 100644
--- a/MAC/APL/CEPCU/src/PythonControl/PythonControlMain.cc
+++ b/MAC/APL/CEPCU/src/PythonControl/PythonControlMain.cc
@@ -43,7 +43,7 @@ int main(int argc, char* argv[])
 	}
 
 	try {
-		GCFScheduler::instance()->init(argc, argv, argv[1]);
+		GCFScheduler::instance()->init(argc, argv, "PythonControl");
 
 		ParentControl*	pc = ParentControl::instance();
 		pc->start();	// make initial transition
diff --git a/MAC/APL/MainCU/src/ObservationControl/ObservationControl.cc b/MAC/APL/MainCU/src/ObservationControl/ObservationControl.cc
index 2437fee36e343aec57b82aeb7eb3b3d0ac219931..9cede9a2715854810a00ad25a68bc07a6624eaec 100644
--- a/MAC/APL/MainCU/src/ObservationControl/ObservationControl.cc
+++ b/MAC/APL/MainCU/src/ObservationControl/ObservationControl.cc
@@ -758,7 +758,7 @@ void  ObservationControl::doHeartBeatTask()
 		uint32	nrStations = itsChildControl->countChilds(0, CNTLRTYPE_STATIONCTRL);
 		time_t	now   = to_time_t(second_clock::universal_time());
 		time_t	stop  = to_time_t(itsStopTime);
-		if (!nrChilds || (now < stop && itsProcessType == "Observation" && !nrStations)) {
+		if (now < stop && itsProcessType == "Observation" && !nrStations) {
 			LOG_FATAL("Too less stations left, FORCING QUIT OF OBSERVATION");
 			if (itsState < CTState::RESUME) {
 				itsQuitReason = CT_RESULT_LOST_CONNECTION;
diff --git a/MAC/Deployment/data/OTDB/DPPP.comp b/MAC/Deployment/data/OTDB/DPPP.comp
index f11d13c47ff97da970cc377b7a15bb51c8d52dc1..c0d7fe4e234503c533f7d5491f1014af8910cc95 100644
--- a/MAC/Deployment/data/OTDB/DPPP.comp
+++ b/MAC/Deployment/data/OTDB/DPPP.comp
@@ -193,7 +193,7 @@ node   DPPP        	 4.0.0  development 'node constraint'  "DPPP"
 par	steps		I		vtext	-	10		0	["aoflagger","averager"]	-	"Names of the steps to perform."
 par	showprogress	I		bool	-	10		0	F					-	"Show a progress bar?"
 par	showtimings	I		bool	-	10		0	F					-	"At the end the percentage of elapsed time each step took can be shown"
-par	checkparset	I		int	-	10            0	0					-	"Check if all parameters in parset are used? -1=no, 0=warn, 1=fatal"
+par	checkparset	I		bool	-	10		0	F					-	"Check if all parameters in parset are used?"
 par	uselogger	I		bool	-	100		0	T					-	"Use logging framework for messages?"
 uses	msin        	4.0.0	development 1	"Input MeasurementSet"
 uses	msout       	4.0.0	development 1	"Output MeasurementSet"
diff --git a/RTCP/IONProc/src/Job.cc b/RTCP/IONProc/src/Job.cc
index 53b6d736996811ffa4a48b76b37d223544da87b0..8d111bc2cbc03192f1ccc3a9bc99eb605694d55a 100644
--- a/RTCP/IONProc/src/Job.cc
+++ b/RTCP/IONProc/src/Job.cc
@@ -326,7 +326,7 @@ void Job::StorageProcess::controlThread()
 
 void Job::forwardFinalMetaData()
 {
-  struct timespec deadline = { time(0) + 240, 0 };
+  struct timespec deadline = { time(0) + 60, 0 };
 
   Thread thread(this, &Job::finalMetaDataThread, itsLogPrefix + "[FinalMetaDataThread] ", 65536);
 
diff --git a/RTCP/Run/src/locations.sh.in b/RTCP/Run/src/locations.sh.in
index 12f8bf44944e8c9275e3c6b619200dd617d68bab..5d7d8c9ec54b1bb3b3178e282f131f6813f03f79 100644
--- a/RTCP/Run/src/locations.sh.in
+++ b/RTCP/Run/src/locations.sh.in
@@ -61,7 +61,7 @@ OLAP.Storage.HBADeltasDir = $STORAGE_HOME/production/lofar/etc/StaticMetaData
 OLAP.FinalMetaDataGatherer.host = lhn001
 OLAP.FinalMetaDataGatherer.userName = lofarsys
 OLAP.FinalMetaDataGatherer.sshIdentityFile = /root/.ssh/id_rsa.lofarsys
-OLAP.FinalMetaDataGatherer.executable = LD_LIBRARY_PATH= $FINALMETADATAGATHERER
+OLAP.FinalMetaDataGatherer.executable = $FINALMETADATAGATHERER
 
 OLAP.FinalMetaDataGatherer.database.host = $OTDB_HOST
 
diff --git a/RTCP/Run/src/multitail-olap.conf b/RTCP/Run/src/multitail-olap.conf
index d1d59a78339a1ff361d1b51bf31b688b7444c19a..6681df3d1945efdacca3021626515750a2f5e7be 100644
--- a/RTCP/Run/src/multitail-olap.conf
+++ b/RTCP/Run/src/multitail-olap.conf
@@ -12,9 +12,6 @@ mcsre:red:.* Signal:.*$
 mcsre:red:ERROR|FATAL|EXCEPTION|(Un)?[Cc]aught.*|Assertion.*failed.$
 mcsre:yellow:WARN
 
-# startBGL python error messages
-mcsre:red:^[A-Za-z.]+Error:
-
 # ----- messages by 'tail' (used by multitail)
 # examples:
 # tail: `/globalhome/lofarsystem/log/latest/run.CNProc.log' has appeared;  following end of new file
@@ -45,7 +42,7 @@ mcsre_s:green:(\[obs [^[]+\])
 
 # ----- define filters and rewrite rules to show only errors
 filterscheme:errors:Only show severe errors
-rule:em:ERROR|FATAL.*[Cc]aught|EXCEPTION|BE_MPI|FATAL \w+Error:|^mpirun noticed.*exited on signal|Assertion.*failed.$| Signal: |^MPI_.*|^Abort\(1\).*|^\[bgfen.* mca_oob_tcp_msg_recv:.*|Assertion `.*' failed.|^[A-Za-z.]+Error:
+rule:em:ERROR|FATAL.*[Cc]aught|EXCEPTION|BE_MPI|FATAL \w+Error:|^mpirun noticed.*exited on signal|Assertion.*failed.$| Signal: |^MPI_.*|^Abort\(1\).*|^\[bgfen.* mca_oob_tcp_msg_recv:.*|Assertion `.*' failed.
 
 filterscheme:flags:Only show >0% flagging
 rule:em:flags.*\([0-9.]{2,5}%\)
diff --git a/RTCP/Run/src/watchlogs.sh b/RTCP/Run/src/watchlogs.sh
index 458ffb305bf8ef32455de890b855f3f966158e29..37705ac27425500b551fa0cc5fbe64cdd4f66e56 100755
--- a/RTCP/Run/src/watchlogs.sh
+++ b/RTCP/Run/src/watchlogs.sh
@@ -21,6 +21,7 @@ then
   done 
 fi
 
+
 multitail --no-mark-change --follow-all --retry-all -m 10240 --basename -F $ETCDIR/multitail-olap.conf \
   $FLAGS -t "-- FLAGS --"  -fr flags -ks flags -i $IONPROC_LOG \
   $FLAGS -t "-- ERRORS --" -fr errors          -i $IONPROC_LOG \
diff --git a/RTCP/Storage/src/MSWriterCorrelated.cc b/RTCP/Storage/src/MSWriterCorrelated.cc
index f1809278a0bc914862421e09632b9169aec5aac5..ac774e676cdfe0ef631ecd5c7019ba9a0391f983 100644
--- a/RTCP/Storage/src/MSWriterCorrelated.cc
+++ b/RTCP/Storage/src/MSWriterCorrelated.cc
@@ -129,18 +129,11 @@ void MSWriterCorrelated::write(StreamableData *data)
 
   // Write sequence number
   if (itsSequenceNumbersFile != 0) {
-    // quick fix: always write to maintain integrity
-    unsigned seqnr = data->sequenceNumber(true);
-
-    itsSequenceNumbersFile->write(&seqnr, sizeof seqnr);
-
-#if 0
     // write the sequencenumber in correlator endianness, no byteswapping
     itsSequenceNumbers.push_back(data->sequenceNumber(true));
-   
+    
     if (itsSequenceNumbers.size() > 64)
       flushSequenceNumbers();
-#endif
   }
 
   itsNrBlocksWritten++;
diff --git a/RTCP/Storage/src/Storage_main.cc b/RTCP/Storage/src/Storage_main.cc
index 99427e44f68e470b4a78113a185bdbcb4c1ad220..f282b0db84567f72d5e003b01de293c0e9cbe468 100644
--- a/RTCP/Storage/src/Storage_main.cc
+++ b/RTCP/Storage/src/Storage_main.cc
@@ -23,6 +23,7 @@
 #include <Stream/PortBroker.h>
 #include <Storage/SubbandWriter.h>
 #include <Storage/IOPriority.h>
+#include <Storage/ExitOnClosedStdin.h>
 #include <Storage/Package__Version.h>
 
 #if defined HAVE_MPI
@@ -77,6 +78,7 @@ int main(int argc, char *argv[])
     if (argc != 4)
       throw StorageException(str(boost::format("usage: %s obsid rank is_bigendian") % argv[0]), THROW_ARGS);
 
+    ExitOnClosedStdin			  stdinWatcher;
     setvbuf(stdout, stdoutbuf, _IOLBF, sizeof stdoutbuf);
     setvbuf(stderr, stderrbuf, _IOLBF, sizeof stderrbuf);
 
diff --git a/SAS/OTB/OTB/dist-src/startClientOTB b/SAS/OTB/OTB/dist-src/startClientOTB
index 6ac8b87441cb53c0ae17e2ba8e06dd3a70b69b60..f4a6392c972e5913b271d19d6a139108437879e5 100755
--- a/SAS/OTB/OTB/dist-src/startClientOTB
+++ b/SAS/OTB/OTB/dist-src/startClientOTB
@@ -1,22 +1,13 @@
 #!/bin/sh
 
-# Check if portnumber is added to commandline; if yes, use it.
-if [ -z $1 ]; then
-  port1=12500
-else
-  port1=$1
-fi
-echo "Using port $port1 for this client"
-
 export OTB_DIR=/opt/sas/otb/client
 export JAVA_HOME=/usr/java/jdk1.7.0_02
 
 echo
 echo --- Starting OTB Client ---
 
-otbfile=`ls $OTB_DIR/OTB*.jar | grep -v javadoc | grep -v sources`
 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$OTB_DIR
-export OTB_APP=$OTB_DIR/`basename $otbfile`
+export OTB_APP=$OTB_DIR/`basename $OTB_DIR/OTB*.jar`
 export CLASSPATH=$OTB_APP
 
 for JAR_DEPENDENCY in $OTB_DIR/lib/*.jar
@@ -26,9 +17,4 @@ do
 done
 
 echo Starting up ...
-curdate=`date +%Y%m%dT%H%M%S`
-logfile="/localhome/log/OTBClient_${port1}_${curdate}.log"
-echo "Logging client logs to file $logfile"
-$JAVA_HOME/bin/java -cp $CLASSPATH nl.astron.lofar.sas.otb.Main -s sas001 -p $port1 -d LOFAR_4 -u busyman 2>&1 1>$logfile &
-clientpid=$!
-echo Started OTB client with PID: $clientpid
+$JAVA_HOME/bin/java -cp $CLASSPATH nl.astron.lofar.sas.otb.Main -s sas001 -p 12500 -d LOFAR_4 -u busyman
diff --git a/SAS/OTB/jOTDB3/dist-src/startServerOTB b/SAS/OTB/jOTDB3/dist-src/startServerOTB
index 318ea8b5b9a7616dbc9608dca0777a99b2500cd9..2a9ffb964ac4d96ec432b502d3818a1276a4ef89 100755
--- a/SAS/OTB/jOTDB3/dist-src/startServerOTB
+++ b/SAS/OTB/jOTDB3/dist-src/startServerOTB
@@ -1,24 +1,13 @@
 #!/bin/sh
 
-# Check if portnumber is added to commandline; if yes, use it.
-if [ -z $1 ]; then
-  port1=12500
-  port2=12501
-else
-  port1=$1
-  let port2=port1+1
-fi
-echo "Using port $port1 and $port2 for this server"
-
 export OTB_DIR=/opt/sas/otb/server
 export JAVA_HOME=/usr/java/jdk1.7.0_02
 
 echo
 echo --- Starting OTB Server ---
 
-jotdb3file=`ls $OTB_DIR/jOTDB3*.jar | grep -v javadoc | grep -v sources`
 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$OTB_DIR
-export OTB_APP=$OTB_DIR/`basename $jotdb3file`
+export OTB_APP=$OTB_DIR/`basename $OTB_DIR/jOTDB3*.jar`
 export CLASSPATH=$OTB_APP
 
 for JAR_DEPENDENCY in $OTB_DIR/lib/*.jar
@@ -29,15 +18,11 @@ done
 
 echo Starting up ...
 
-curdate=`date +%Y%m%dT%H%M%S`
-logfile="/localhome/log/OTBServer_${port1}_${curdate}.log"
-echo "Logging serverlogs to file $logfile"
 serverpid=0
-ps -ef | grep -v grep | grep java | grep $port1 2>&1 1>/dev/null
+ps -ef | grep -v grep | grep java | grep 12500 2>&1 1>/dev/null
 if [ $? -ne 0 ]; then
-    $JAVA_HOME/bin/java -cp $CLASSPATH nl.astron.lofar.sas.otb.jotdb3.jOTDBserver -s sas001 -d sas001 -p $port1 -o $port2 2>&1 1>&$logfile &
+    $JAVA_HOME/bin/java -cp $CLASSPATH nl.astron.lofar.sas.otb.jotdb3.jOTDBserver -s sas001 -d sas001 -p 12500 -o 12501 &
     serverpid=$!
-    echo Started server with PID: $serverpid
-else
-    echo "Server for port $port1 already running!"
 fi
+
+echo OTB Server stopped.
diff --git a/SAS/OTB/jOTDB3/src/nl/astron/lofar/sas/otb/jotdb3/jOTDBserver.java b/SAS/OTB/jOTDB3/src/nl/astron/lofar/sas/otb/jotdb3/jOTDBserver.java
index 4832d9facd8b53a38cb997abcdb7bb554c6e5ce5..f02325806b09ee5bfa215a8f8e9838b432cf91c9 100644
--- a/SAS/OTB/jOTDB3/src/nl/astron/lofar/sas/otb/jotdb3/jOTDBserver.java
+++ b/SAS/OTB/jOTDB3/src/nl/astron/lofar/sas/otb/jotdb3/jOTDBserver.java
@@ -23,7 +23,6 @@ package nl.astron.lofar.sas.otb.jotdb3;
 
 import com.darwinsys.lang.GetOpt;
 import com.darwinsys.lang.GetOptDesc;
-import java.io.File;
 import java.rmi.RemoteException;
 import java.rmi.registry.LocateRegistry;
 import java.rmi.registry.Registry;
@@ -68,30 +67,17 @@ public class jOTDBserver {
 
     public static void main(String[] argv)  {
 
-        String logConfig = "jOTDB3.log_prop";
-
         try {
-            File f = new File(logConfig);
-            if (f.exists()) {
-                PropertyConfigurator.configure(logConfig);
-            } else {
-                logConfig = File.separator+"opt"+File.separator+"sas"+File.separator+"otb"+File.separator+"etc"+File.separator+logConfig;
-                f = new File(logConfig);
-                if (f.exists()) {
-                    PropertyConfigurator.configure(logConfig);
-                } else {
-                    logger.error("jOTDB3.log_prop not found.");
-                }
-            }
-            logger.info("jOTDBServer started. LogPropFile: "+ logConfig);
-            logger.info("java.library.path:"+ System.getProperty("java.library.path"));
-            
+            String logConfig = "jOTDB3.log_prop";
             
+            PropertyConfigurator.configure(logConfig);
             try {
                 jInitCPPLogger aCPPLogger= new jInitCPPLogger(logConfig);
             } catch (Exception ex) {
                 System.out.println("Error: "+ ex);
             }
+            logger.info("jOTDBServer started. LogPropFile: "+ logConfig);
+            logger.info("java.library.path:"+ System.getProperty("java.library.path"));
 
 /*
 	    if (System.getSecurityManager () == null) {
diff --git a/SAS/OTDB/sql/addKVT_func.sql b/SAS/OTDB/sql/addKVT_func.sql
index bd6c5ac6727ba222ba2c961663b252124fc7fbac..986ca0378e7b9c47bc73335b6b1e4f115de1abe5 100644
--- a/SAS/OTDB/sql/addKVT_func.sql
+++ b/SAS/OTDB/sql/addKVT_func.sql
@@ -43,7 +43,6 @@ CREATE OR REPLACE FUNCTION addKVT (INT, VARCHAR(150), VARCHAR(150), VARCHAR(20))
 	DECLARE
 		vParRefID	PICparamref.paramID%TYPE;
 		vTime		timestamp := NULL;
-		vLastValue	TEXT;
 
 	BEGIN
 	  -- convert timestamp
@@ -64,19 +63,6 @@ CREATE OR REPLACE FUNCTION addKVT (INT, VARCHAR(150), VARCHAR(150), VARCHAR(20))
 
 	  IF FOUND THEN
 		-- its a PIC parameter
-		IF $3::integer <= 10 THEN	
-		  -- plain ON/OFF only register if last one was a serious problem
-		  vLastValue := 100;
-		  SELECT value
-		  INTO	 vLastValue
-		  FROM   PICkvt
-		  WHERE  paramID = vParRefID
-		  ORDER BY time DESC
-		  LIMIT 1;
-	      IF vLastValue::integer <= 10 THEN
-		  	RETURN FALSE;
-		  END IF;
-	    END IF;
 	    INSERT INTO PICkvt(paramID, value, time)
 		VALUES (vParRefID, $3, vTime);
 		RETURN TRUE;
diff --git a/SAS/OTDB/sql/create_PIC_tables.sql b/SAS/OTDB/sql/create_PIC_tables.sql
index d7bcb2ebe5239c84c3cb4132bf35ef217e52d97a..d64c733a8f51be82aa150beb8c858ab3b582b5e5 100644
--- a/SAS/OTDB/sql/create_PIC_tables.sql
+++ b/SAS/OTDB/sql/create_PIC_tables.sql
@@ -66,7 +66,8 @@ CREATE TABLE PICparamref (
 	pruning		INT2			DEFAULT 10,
 	description	TEXT,
 
-	CONSTRAINT	paramID_uniq		PRIMARY KEY(paramID),
+	CONSTRAINT      param_PK	 	PRIMARY KEY (paramID),
+	CONSTRAINT	paramID_uniq		UNIQUE(paramID),
 	CONSTRAINT	paramname_uniq		UNIQUE(PVSSname)
 ) WITHOUT OIDS;
 
@@ -89,11 +90,12 @@ CREATE TABLE PIChierarchy (
 	index		INT2			NOT NULL DEFAULT -1,
 	leaf		BOOLEAN			DEFAULT TRUE,
 
-	CONSTRAINT	param_uniq_in_tree	PRIMARY KEY(treeID, nodeID)
+	CONSTRAINT	param_uniq_in_tree	UNIQUE(treeID, nodeID)
 ) WITHOUT OIDS;
 
 -- Index: pichierarchy_treeid_nodeid_indx
---CREATE UNIQUE INDEX PIChierarchy_treeid_nodeid_indx ON PIChierarchy(treeid, nodeid);
+
+CREATE UNIQUE INDEX PIChierarchy_treeid_nodeid_indx ON PIChierarchy(treeid, nodeid);
 
 --
 -- PIC Key Values Time sets.
@@ -108,9 +110,12 @@ CREATE TABLE PICkvt (
 	value		TEXT			NOT NULL,
 	time		TIMESTAMP		DEFAULT now(),
 
-	CONSTRAINT	pickvt_uniq		PRIMARY KEY(paramID, time)
+	CONSTRAINT	pickvt_uniq		UNIQUE(paramID, time)
 ) WITHOUT OIDS;
 
 CREATE INDEX PIC_kvt_id   ON PICkvt(paramID);
 CREATE INDEX PIC_kvt_time ON PICkvt(time);
---CREATE UNIQUE INDEX PIC_kvt_id_time_indx ON pickvt(paramid, "time");
+CREATE UNIQUE INDEX PIC_kvt_id_time_indx ON pickvt(paramid, "time");
+
+
+
diff --git a/SAS/OTDB/sql/create_rules.sql b/SAS/OTDB/sql/create_rules.sql
index 75d6f474c7aff6926d854d5961ab743c00c1c1da..be51b38a6ad2ea43129bab690479b4b01f2c8444 100644
--- a/SAS/OTDB/sql/create_rules.sql
+++ b/SAS/OTDB/sql/create_rules.sql
@@ -26,8 +26,8 @@
 -- Creates a rule for updating the modificationDate of the OTDBtree table.
 --
 
-DROP RULE ruleUpdateVIC on vichierarchy;
-DROP RULE ruleUpdateTemplate on victemplate;
+DROP RULE ruleUpdateVIC;
+DROP RULE ruleUpdateTemplate;
 
 CREATE RULE ruleUpdateVIC AS ON UPDATE
 	TO vichierarchy WHERE NEW.value <> OLD.value