diff --git a/CEP/BB/ParmFacade/configure.in b/CEP/BB/ParmFacade/configure.in
index 92f85c87e5f641d9e1ef789d55629edf8eee10dc..8b0fc03aaaa9517b88da8b7fe8933d79cf2fe4ca 100644
--- a/CEP/BB/ParmFacade/configure.in
+++ b/CEP/BB/ParmFacade/configure.in
@@ -51,7 +51,7 @@ dnl
 dnl Check for LOFAR specific things
 dnl
 lofar_GENERAL
-lofar_INTERNAL(CEP/BB/BBS3,BBS3,,1,BBS3/MNS/MeqFunklet.h)
+lofar_INTERNAL(CEP/BB/BBS,BBS,,1,BBS/MNS/MeqParmFunklet.h)
 lofar_AIPSPP(1,"-ltables -lscimath -lscimath_f -lcasa")
 lofar_EXTERNAL(pq,,libpq-fe.h, pq, /usr/local/pgsql)
 lofar_EXTERNAL(pqxx,2.5.5,pqxx/pqxx, pqxx)
diff --git a/CEP/BB/ParmFacade/src/ParmFacade.cc b/CEP/BB/ParmFacade/src/ParmFacade.cc
index 4cf328bceabe300bfcd8a15df73925d64bd310bf..122c4f70b6393bb4dcfc8d7135a57e23cc80d20d 100644
--- a/CEP/BB/ParmFacade/src/ParmFacade.cc
+++ b/CEP/BB/ParmFacade/src/ParmFacade.cc
@@ -21,14 +21,20 @@
 //# $Id$
 
 #include <ParmFacade/ParmFacade.h>
-#include <BBS3/MNS/MeqRequest.h>
-#include <BBS3/MNS/MeqStoredParmPolc.h>
-#include <BBS3/MNS/MeqResult.h>
-#include <BBS3/MNS/MeqMatrix.h>
+#include <BBS/MNS/MeqRequest.h>
+#include <BBS/MNS/MeqParmFunklet.h>
+#include <BBS/MNS/MeqResult.h>
+#include <BBS/MNS/MeqMatrix.h>
 #include <Common/LofarLogger.h>
 
 using namespace std;
 
+// Create tParmFacade.in_mep with parmdb using:
+//   create tablename='tParmFacade.in_mep'
+//   add parm1 domain=[1,5,4,10],values=2
+//   add parm2 domain=[1,5,4,10],values=[2,0.1],nx=2
+//   add parm3 type='expression',expression='parm1*parm2'
+
 namespace LOFAR {
 namespace ParmDB {
 
@@ -61,7 +67,7 @@ namespace ParmDB {
     if (pp.empty()) {
       pp = "*";
     }
-    return itsPDB.getNames (pp);
+    return itsPDB.getAllNames (pp);
   }
 
   // Get the parameter values for the given parameters and domain.
@@ -70,35 +76,46 @@ namespace ParmDB {
 			  double startx, double endx, int nx,
 			  double starty, double endy, int ny)
   {
-    string pp = parmNamePattern;
-    if (pp.empty()) {
-      pp = "*";
-    }
+    // Get all parm names.
+    vector<string> names = getNames (parmNamePattern);
     // Get the parm values.
     map<string,ParmValueSet> parmValues;
-    itsPDB.getValues (parmValues, pp,
+    itsPDB.getValues (parmValues, names,
 		      ParmDomain(startx, endx, starty, endy));
-    // Make a request for the given grid.
-    MeqDomain domain(startx, endx, starty, endy);
-    MeqRequest req(domain, nx, ny);
     // The output is returned in a map.
     map<string,vector<double> > out;
     MeqParmGroup parmGroup;
+    map<string,MeqExpr> exprs;
     // Loop through all parameters.
-    for (map<string,ParmValueSet>::const_iterator iter=parmValues.begin();
-	 iter != parmValues.end();
+    for (vector<string>::const_iterator iter=names.begin();
+	 iter != names.end();
 	 iter++) {
+      // Create an expression object.
+      exprs.insert (std::make_pair (*iter,
+				    MeqParmFunklet::create (*iter,
+							    &parmGroup,
+							    &itsPDB)));
+    }
+    // Make a request object for the given grid.
+    MeqDomain domain(startx, endx, starty, endy);
+    MeqRequest req(domain, nx, ny);
+    // Initialize all parameters.
+    const vector<MeqParm*>& parmList = parmGroup.getParms();
+    for (vector<MeqParm*>::const_iterator iter = parmList.begin();
+	 iter != parmList.end();
+	 ++iter) {
+      (*iter)->fillFunklets (parmValues, domain);
+    }
+    // Evaluate all expressions and store the result in the output map.
+    for (map<string,MeqExpr>::iterator iter = exprs.begin();
+	 iter != exprs.end();
+	 ++iter) {
       // Add it to the output map and get a reference to the vector.
       out.insert (std::make_pair (iter->first, vector<double>()));
       map<string,vector<double> >::iterator outiter = out.find (iter->first);
       vector<double>& vec = outiter->second;
-      // Create a ParmFunklet object and fill it.
-      MeqStoredParmPolc* parmp = new MeqStoredParmPolc(iter->first,
-						       &parmGroup, &itsPDB);
-      parmp->fillPolcs (parmValues, domain);
-      MeqExpr expr(parmp);
-      // Evaluate it and get the value.
-      MeqResult resVal = expr.getResult (req);
+      // Get result and put in map.
+      MeqResult resVal = iter->second.getResult (req);
       const MeqMatrix& mat = resVal.getValue();
       const double* ptr = mat.doubleStorage();
       // Store the result in the vector.
diff --git a/CEP/BB/ParmFacade/test/tParmFacade.cc b/CEP/BB/ParmFacade/test/tParmFacade.cc
index f28b8f23efa12fc21b768c23ddb0c8f69d6c1a11..dfba79dacc325c2250a61af83235fdd1360cfe77 100644
--- a/CEP/BB/ParmFacade/test/tParmFacade.cc
+++ b/CEP/BB/ParmFacade/test/tParmFacade.cc
@@ -29,6 +29,13 @@ using namespace LOFAR;
 using namespace ParmDB;
 using namespace std;
 
+// Create tParmFacade.in_mep with parmdb using:
+//   create tablename='tParmFacade.in_mep'
+//   add parm1 domain=[1,5,4,10],values=2
+//   add parm2 domain=[1,5,4,10],values=[2,0.1],nx=2
+//   adddef parm3 type='parmexpr',expr='parm1*parm2'
+//   adddef parm4 type='parmexpr',expr='parm2*parm3'
+
 
 int main (int argc, const char* argv[])
 {
diff --git a/CEP/BB/ParmFacade/test/tParmFacade.stdout b/CEP/BB/ParmFacade/test/tParmFacade.stdout
index 79d26d4c97967571385962e5550dc31e17e941dd..5eb4e771a4979f9f7d195fb7f9976a188d18ea40 100644
--- a/CEP/BB/ParmFacade/test/tParmFacade.stdout
+++ b/CEP/BB/ParmFacade/test/tParmFacade.stdout
@@ -1,4 +1,6 @@
-Names: [parm1,parm2]
+Names: [parm1,parm2,parm3,parm4]
 Range: [1,5,4,10]
-parm1 [1,1,1,1,1,1,1,1]
+parm1 [2,2,2,2,2,2,2,2]
 parm2 [2.0125,2.0375,2.0625,2.0875,2.0125,2.0375,2.0625,2.0875]
+parm3 [4.025,4.075,4.125,4.175,4.025,4.075,4.125,4.175]
+parm4 [8.10031,8.30281,8.50781,8.71531,8.10031,8.30281,8.50781,8.71531]