diff --git a/dumux/implicit/1p/1pmodel.hh b/dumux/implicit/1p/1pmodel.hh
index 2c02cd2633bf95cd402631344e922fd49058c9b6..9e39844e4506477544551d0fd6239011fb1de19e 100644
--- a/dumux/implicit/1p/1pmodel.hh
+++ b/dumux/implicit/1p/1pmodel.hh
@@ -65,6 +65,7 @@ class OnePModel : public GET_PROP_TYPE(TypeTag, BaseModel)
     typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView;
     typedef typename GridView::template Codim<0>::Iterator ElementIterator;
     enum { dim = GridView::dimension };
+    enum { dimWorld = GridView::dimensionworld };
 
     enum { isBox = GET_PROP_VALUE(TypeTag, ImplicitIsBox) };
     enum { dofCodim = isBox ? dim : 0 };
@@ -81,13 +82,13 @@ public:
                             MultiWriter &writer)
     {
         typedef Dune::BlockVector<Dune::FieldVector<double, 1> > ScalarField;
-        typedef Dune::BlockVector<Dune::FieldVector<double, dim> > VectorField;
+        typedef Dune::BlockVector<Dune::FieldVector<double, dimWorld> > VectorField;
 
         // create the required scalar fields
         unsigned numDofs = this->numDofs();
         ScalarField *p = writer.allocateManagedBuffer(numDofs);
         ScalarField *K = writer.allocateManagedBuffer(numDofs);
-        VectorField *velocity = writer.template allocateManagedBuffer<double, dim>(numDofs);
+        VectorField *velocity = writer.template allocateManagedBuffer<double, dimWorld>(numDofs);
         ImplicitVelocityOutput<TypeTag> velocityOutput(this->problem_());
 
         if (velocityOutput.enableOutput())
diff --git a/dumux/implicit/1p2c/1p2cmodel.hh b/dumux/implicit/1p2c/1p2cmodel.hh
index 9d789053fcded0d4936b9dfb77bbe270883c382b..eb576c4fa73da0dec1494f38022b28b3cdef1448 100644
--- a/dumux/implicit/1p2c/1p2cmodel.hh
+++ b/dumux/implicit/1p2c/1p2cmodel.hh
@@ -81,9 +81,8 @@ class OnePTwoCModel : public GET_PROP_TYPE(TypeTag, BaseModel)
     typedef typename GET_PROP_TYPE(TypeTag, SolutionVector) SolutionVector;
 
     typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView;
-    enum {
-        dim = GridView::dimension
-    };
+    enum { dim = GridView::dimension };
+    enum { dimWorld = GridView::dimensionworld };
     typedef typename GridView::template Codim<0>::Iterator ElementIterator;
 
     typedef typename GET_PROP_TYPE(TypeTag, Indices) Indices;
@@ -106,7 +105,7 @@ public:
                             MultiWriter &writer)
     {
         typedef Dune::BlockVector<Dune::FieldVector<double, 1> > ScalarField;
-        typedef Dune::BlockVector<Dune::FieldVector<double, dim> > VectorField;
+        typedef Dune::BlockVector<Dune::FieldVector<double, dimWorld> > VectorField;
 
         // create the required scalar fields
         unsigned numDofs = this->numDofs();
@@ -118,7 +117,7 @@ public:
         ScalarField &massFraction1 = *writer.allocateManagedBuffer(numDofs);
         ScalarField &rho = *writer.allocateManagedBuffer(numDofs);
         ScalarField &mu = *writer.allocateManagedBuffer(numDofs);
-        VectorField *velocity = writer.template allocateManagedBuffer<double, dim>(numDofs);
+        VectorField *velocity = writer.template allocateManagedBuffer<double, dimWorld>(numDofs);
         ImplicitVelocityOutput<TypeTag> velocityOutput(this->problem_());
 
         if (velocityOutput.enableOutput())
diff --git a/dumux/implicit/2p/2pmodel.hh b/dumux/implicit/2p/2pmodel.hh
index ac902213f728916de9900a74599c606cb06ac37c..024f4c4ef5652460609fc6be194c3635d987efc3 100644
--- a/dumux/implicit/2p/2pmodel.hh
+++ b/dumux/implicit/2p/2pmodel.hh
@@ -85,9 +85,8 @@ class TwoPModel : public GET_PROP_TYPE(TypeTag, BaseModel)
 
     typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView;
     typedef typename GridView::template Codim<0>::Iterator ElementIterator;
-    enum {
-        dim = GridView::dimension
-    };
+    enum { dim = GridView::dimension };
+    enum { dimWorld = GridView::dimensionworld };
 
     typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
 
@@ -108,7 +107,7 @@ public:
                             MultiWriter &writer)
     {
         typedef Dune::BlockVector<Dune::FieldVector<double, 1> > ScalarField;
-        typedef Dune::BlockVector<Dune::FieldVector<double, dim> > VectorField;
+        typedef Dune::BlockVector<Dune::FieldVector<double, dimWorld> > VectorField;
 
         // get the number of degrees of freedom
         unsigned numDofs = this->numDofs();
@@ -125,8 +124,8 @@ public:
         ScalarField *mobN = writer.allocateManagedBuffer(numDofs);
         ScalarField *poro = writer.allocateManagedBuffer(numDofs);
         ScalarField *Te = writer.allocateManagedBuffer(numDofs);
-        VectorField *velocityN = writer.template allocateManagedBuffer<double, dim>(numDofs);
-        VectorField *velocityW = writer.template allocateManagedBuffer<double, dim>(numDofs);
+        VectorField *velocityN = writer.template allocateManagedBuffer<double, dimWorld>(numDofs);
+        VectorField *velocityW = writer.template allocateManagedBuffer<double, dimWorld>(numDofs);
         ImplicitVelocityOutput<TypeTag> velocityOutput(this->problem_());
 
         if (velocityOutput.enableOutput()) // check if velocity output is demanded
diff --git a/dumux/implicit/2p2c/2p2cmodel.hh b/dumux/implicit/2p2c/2p2cmodel.hh
index 71f8e11a31c33a4028598231dead29b8baca8632..d4c6b89f54882e9f38a6d7c2ca1748d6085ceb55 100644
--- a/dumux/implicit/2p2c/2p2cmodel.hh
+++ b/dumux/implicit/2p2c/2p2cmodel.hh
@@ -296,7 +296,7 @@ public:
                                 MultiWriter &writer)
     {
         typedef Dune::BlockVector<Dune::FieldVector<double, 1> > ScalarField;
-        typedef Dune::BlockVector<Dune::FieldVector<double, dim> > VectorField;
+        typedef Dune::BlockVector<Dune::FieldVector<double, dimWorld> > VectorField;
 
         // get the number of degrees of freedom
         unsigned numDofs = this->numDofs();
@@ -322,8 +322,8 @@ public:
                         moleFrac[phaseIdx][compIdx] = writer.allocateManagedBuffer(numDofs);
         ScalarField *temperature = writer.allocateManagedBuffer(numDofs);
         ScalarField *poro = writer.allocateManagedBuffer(numDofs);
-        VectorField *velocityN = writer.template allocateManagedBuffer<double, dim>(numDofs);
-        VectorField *velocityW = writer.template allocateManagedBuffer<double, dim>(numDofs);
+        VectorField *velocityN = writer.template allocateManagedBuffer<double, dimWorld>(numDofs);
+        VectorField *velocityW = writer.template allocateManagedBuffer<double, dimWorld>(numDofs);
         ImplicitVelocityOutput<TypeTag> velocityOutput(this->problem_());
 
         if (velocityOutput.enableOutput()) // check if velocity output is demanded
diff --git a/dumux/implicit/3p/3pmodel.hh b/dumux/implicit/3p/3pmodel.hh
index 574c61d6ec6108789a435e743f60f42e2e9aacfa..fd153d4bff2ac4a22db4d9f9fe85579b975a00b9 100644
--- a/dumux/implicit/3p/3pmodel.hh
+++ b/dumux/implicit/3p/3pmodel.hh
@@ -72,6 +72,7 @@ class ThreePModel: public GET_PROP_TYPE(TypeTag, BaseModel)
 
     enum {
         dim = GridView::dimension,
+        dimWorld = GridView::dimensionworld,
 
         numPhases = GET_PROP_VALUE(TypeTag, NumPhases),
 
@@ -100,7 +101,7 @@ public:
                             MultiWriter &writer)
     {
         typedef Dune::BlockVector<Dune::FieldVector<double, 1> > ScalarField;
-        typedef Dune::BlockVector<Dune::FieldVector<double, dim> > VectorField;
+        typedef Dune::BlockVector<Dune::FieldVector<double, dimWorld> > VectorField;
 
         // get the number of degrees of freedom
         unsigned numDofs = this->numDofs();
@@ -119,9 +120,9 @@ public:
         ScalarField *temperature = writer.allocateManagedBuffer (numDofs);
         ScalarField *poro = writer.allocateManagedBuffer(numDofs);
         ScalarField *perm = writer.allocateManagedBuffer(numDofs);
-        VectorField *velocityN = writer.template allocateManagedBuffer<double, dim>(numDofs);
-        VectorField *velocityW = writer.template allocateManagedBuffer<double, dim>(numDofs);
-        VectorField *velocityG = writer.template allocateManagedBuffer<double, dim>(numDofs);
+        VectorField *velocityN = writer.template allocateManagedBuffer<double, dimWorld>(numDofs);
+        VectorField *velocityW = writer.template allocateManagedBuffer<double, dimWorld>(numDofs);
+        VectorField *velocityG = writer.template allocateManagedBuffer<double, dimWorld>(numDofs);
         ImplicitVelocityOutput<TypeTag> velocityOutput(this->problem_());
 
         if (velocityOutput.enableOutput()) // check if velocity output is demanded
diff --git a/dumux/implicit/3p3c/3p3cmodel.hh b/dumux/implicit/3p3c/3p3cmodel.hh
index e39d0d09ed8398abf0e0b95a1b868f1eba49f8f9..87bbef18cb9fc890f2f4875eb6a25fd056cb0b9b 100644
--- a/dumux/implicit/3p3c/3p3cmodel.hh
+++ b/dumux/implicit/3p3c/3p3cmodel.hh
@@ -297,7 +297,7 @@ public:
                             MultiWriter &writer)
     {
         typedef Dune::BlockVector<Dune::FieldVector<double, 1> > ScalarField;
-        typedef Dune::BlockVector<Dune::FieldVector<double, dim> > VectorField;
+        typedef Dune::BlockVector<Dune::FieldVector<double, dimWorld> > VectorField;
 
         // get the number of degrees of freedom
         unsigned numDofs = this->numDofs();
@@ -320,9 +320,9 @@ public:
                 moleFraction[i][j] = writer.allocateManagedBuffer (numDofs);
         ScalarField *temperature = writer.allocateManagedBuffer (numDofs);
         ScalarField *poro = writer.allocateManagedBuffer(numDofs);
-        VectorField *velocityN = writer.template allocateManagedBuffer<double, dim>(numDofs);
-        VectorField *velocityW = writer.template allocateManagedBuffer<double, dim>(numDofs);
-        VectorField *velocityG = writer.template allocateManagedBuffer<double, dim>(numDofs);
+        VectorField *velocityN = writer.template allocateManagedBuffer<double, dimWorld>(numDofs);
+        VectorField *velocityW = writer.template allocateManagedBuffer<double, dimWorld>(numDofs);
+        VectorField *velocityG = writer.template allocateManagedBuffer<double, dimWorld>(numDofs);
         ImplicitVelocityOutput<TypeTag> velocityOutput(this->problem_());
 
         if (velocityOutput.enableOutput()) // check if velocity output is demanded
diff --git a/dumux/implicit/box/boxfvelementgeometry.hh b/dumux/implicit/box/boxfvelementgeometry.hh
index 1bd6fe57295bb007c131b6eeebdc335ba474fcb2..5ec152bed2bdeb71dbfaadea92eed641ab9e17db 100644
--- a/dumux/implicit/box/boxfvelementgeometry.hh
+++ b/dumux/implicit/box/boxfvelementgeometry.hh
@@ -92,10 +92,18 @@ public:
             eg.subContVol[2].volume = eg.elementVolume/3;
             break;
         case 4: // 2D, quadrilinear
-            eg.subContVol[0].volume = eg.quadrilateralArea(eg.subContVol[0].global, edgeCoord[2], eg.elementGlobal, edgeCoord[0]);
-            eg.subContVol[1].volume = eg.quadrilateralArea(eg.subContVol[1].global, edgeCoord[1], eg.elementGlobal, edgeCoord[2]);
-            eg.subContVol[2].volume = eg.quadrilateralArea(eg.subContVol[2].global, edgeCoord[0], eg.elementGlobal, edgeCoord[3]);
-            eg.subContVol[3].volume = eg.quadrilateralArea(eg.subContVol[3].global, edgeCoord[3], eg.elementGlobal, edgeCoord[1]);
+            if (GlobalPosition::dimension == dim) {
+                eg.subContVol[0].volume = eg.quadrilateralArea(eg.subContVol[0].global, edgeCoord[2], eg.elementGlobal, edgeCoord[0]);
+                eg.subContVol[1].volume = eg.quadrilateralArea(eg.subContVol[1].global, edgeCoord[1], eg.elementGlobal, edgeCoord[2]);
+                eg.subContVol[2].volume = eg.quadrilateralArea(eg.subContVol[2].global, edgeCoord[0], eg.elementGlobal, edgeCoord[3]);
+                eg.subContVol[3].volume = eg.quadrilateralArea(eg.subContVol[3].global, edgeCoord[3], eg.elementGlobal, edgeCoord[1]);
+            }
+            else {
+                eg.subContVol[0].volume = eg.quadrilateralArea3D(eg.subContVol[0].global, edgeCoord[2], eg.elementGlobal, edgeCoord[0]);
+                eg.subContVol[1].volume = eg.quadrilateralArea3D(eg.subContVol[1].global, edgeCoord[1], eg.elementGlobal, edgeCoord[2]);
+                eg.subContVol[2].volume = eg.quadrilateralArea3D(eg.subContVol[2].global, edgeCoord[0], eg.elementGlobal, edgeCoord[3]);
+                eg.subContVol[3].volume = eg.quadrilateralArea3D(eg.subContVol[3].global, edgeCoord[3], eg.elementGlobal, edgeCoord[1]);
+            }
             break;
         default:
             DUNE_THROW(Dune::NotImplemented, "_BoxFVElemGeomHelper::fillSubContVolData dim = " << dim << ", numVertices = " << numVertices);
@@ -655,17 +663,17 @@ public:
             // the compiler can optimize away all if
             // cases which don't apply.
             LocalPosition ipLocal;
-            GlobalPosition diffVec;
             if (dim==1) {
-                subContVolFace[k].ipLocal = 0.5;
-                subContVolFace[k].normal = 1.0;
-                ipLocal = subContVolFace[k].ipLocal;
+                ipLocal = 0.5;
+                subContVolFace[k].ipLocal = ipLocal;
+                subContVolFace[k].normal = subContVol[j].global - subContVol[i].global;
+                subContVolFace[k].normal /= subContVolFace[k].normal.two_norm();
             }
             else if (dim==2) {
                 ipLocal = referenceElement.position(k, dim-1) + elementLocal;
                 ipLocal *= 0.5;
                 subContVolFace[k].ipLocal = ipLocal;
-                diffVec = elementGlobal - edgeCoordinates[k];
+                GlobalPosition diffVec = elementGlobal - edgeCoordinates[k];
                 subContVolFace[k].normal[0] = diffVec[1];
                 subContVolFace[k].normal[1] = -diffVec[0];
 
diff --git a/dumux/implicit/common/implicitproblem.hh b/dumux/implicit/common/implicitproblem.hh
index b63f5128589db560a55b0ab736236ad1ffd8fbcf..31bc65bc0bf0b1f752470d8f3c23833dba1e45f9 100644
--- a/dumux/implicit/common/implicitproblem.hh
+++ b/dumux/implicit/common/implicitproblem.hh
@@ -103,7 +103,7 @@ public:
         VertexIterator vIt = gridView.template begin<dim>();
         const VertexIterator vEndIt = gridView.template end<dim>();
         for (; vIt!=vEndIt; ++vIt) {
-            for (int i=0; i<dim; i++) {
+            for (int i=0; i<dimWorld; i++) {
                 bBoxMin_[i] = std::min(bBoxMin_[i], vIt->geometry().corner(0)[i]);
                 bBoxMax_[i] = std::max(bBoxMax_[i], vIt->geometry().corner(0)[i]);
             }
@@ -111,7 +111,7 @@ public:
 
         // communicate to get the bounding box of the whole domain
         if (gridView.comm().size() > 1)
-            for (int i = 0; i < dim; ++i) {
+            for (int i = 0; i < dimWorld; ++i) {
                 bBoxMin_[i] = gridView.comm().min(bBoxMin_[i]);
                 bBoxMax_[i] = gridView.comm().max(bBoxMax_[i]);
             }
diff --git a/dumux/implicit/common/implicitvelocityoutput.hh b/dumux/implicit/common/implicitvelocityoutput.hh
index e991038dc694593156fd9c4b70c20009cdfa2442..df04d4277a16e4d1520b1b10597625aea3b3f74f 100644
--- a/dumux/implicit/common/implicitvelocityoutput.hh
+++ b/dumux/implicit/common/implicitvelocityoutput.hh
@@ -210,7 +210,7 @@ public:
                     int vIdxGlobal = problem_.vertexMapper().map(element, scvIdx, dofCodim);
 #endif
                     // calculate the subcontrolvolume velocity by the Piola transformation
-                    Dune::FieldVector<CoordScalar, dim> scvVelocity(0);
+                    Dune::FieldVector<CoordScalar, dimWorld> scvVelocity(0);
 
                     jacobianT2.mtv(scvVelocities[scvIdx], scvVelocity);
                     scvVelocity /= element.geometry().integrationElement(localPos)*cellNum_[vIdxGlobal];
diff --git a/dumux/implicit/mpnc/energy/mpncfluxvariablesenergykinetic.hh b/dumux/implicit/mpnc/energy/mpncfluxvariablesenergykinetic.hh
index b6526d0a0e89de5e24deecc2b8b95a4f99481f98..7e6b35db98efa3903fa22b55a1cef8222318eb34 100644
--- a/dumux/implicit/mpnc/energy/mpncfluxvariablesenergykinetic.hh
+++ b/dumux/implicit/mpnc/energy/mpncfluxvariablesenergykinetic.hh
@@ -138,12 +138,13 @@ class MPNCFluxVariablesEnergy<TypeTag, /*enableEnergy=*/true, /*numEnergyEquatio
     typedef typename GridView::template Codim<0>::Entity Element;
 
     enum {dim = GridView::dimension};
+    enum {dimWorld = GridView::dimensionworld};
     enum {numEnergyEqs          = Indices::numPrimaryEnergyVars};
     enum {wPhaseIdx             = FluidSystem::wPhaseIdx};
     enum {nPhaseIdx             = FluidSystem::nPhaseIdx};
 
 
-    typedef Dune::FieldVector<CoordScalar, dim>  GlobalPosition;
+    typedef Dune::FieldVector<CoordScalar, dimWorld>  GlobalPosition;
     typedef typename GET_PROP_TYPE(TypeTag, FVElementGeometry) FVElementGeometry;
     typedef typename FVElementGeometry::SubControlVolume SCV;
     typedef typename FVElementGeometry::SubControlVolumeFace SCVFace;
diff --git a/dumux/implicit/mpnc/energy/mpncvtkwriterenergykinetic.hh b/dumux/implicit/mpnc/energy/mpncvtkwriterenergykinetic.hh
index 866d61d08bb27599566b9f1a2deb0e57e2d300b4..f929f5430d18086d1ac051485a52155547761809 100644
--- a/dumux/implicit/mpnc/energy/mpncvtkwriterenergykinetic.hh
+++ b/dumux/implicit/mpnc/energy/mpncvtkwriterenergykinetic.hh
@@ -58,6 +58,7 @@ class MPNCVtkWriterEnergy<TypeTag, /*enableEnergy = */ true, /* numEnergyEquatio
     typedef typename GridView::template Codim<0>::Entity Element;
 
     enum { dim = GridView::dimension };
+    enum { dimWorld = GridView::dimensionworld };
     enum { numPhases = GET_PROP_VALUE(TypeTag, NumPhases) };
     enum { numEnergyEqs = Indices::numPrimaryEnergyVars};
     enum { velocityAveragingInModel = GET_PROP_VALUE(TypeTag, VelocityAveragingInModel) };
@@ -76,9 +77,9 @@ class MPNCVtkWriterEnergy<TypeTag, /*enableEnergy = */ true, /* numEnergyEquatio
     typedef typename ParentType::ComponentVector ComponentVector;
     typedef Dune::array<ScalarVector, numEnergyEqs> EnergyEqVector;
 
-    typedef Dune::FieldVector<Scalar, dim> DimVector;
-    typedef Dune::BlockVector<DimVector> DimField;
-    typedef Dune::array<DimField, numPhases> PhaseDimField;
+    typedef Dune::FieldVector<Scalar, dimWorld> DimWorldVector;
+    typedef Dune::BlockVector<DimWorldVector> DimWorldField;
+    typedef Dune::array<DimWorldField, numPhases> PhaseDimWorldField;
 
 
 public:
@@ -266,7 +267,7 @@ private:
     PhaseVector prandtlNumber_ ;
     PhaseVector nusseltNumber_ ;
 
-    PhaseDimField  velocity_;
+    PhaseDimWorldField  velocity_;
 
     ScalarVector awn_;
     ScalarVector aws_;
@@ -300,6 +301,7 @@ class MPNCVtkWriterEnergy<TypeTag, /*enableEnergy = */ true, /* numEnergyEquatio
     typedef typename GridView::template Codim<0>::Entity Element;
 
     enum { dim = GridView::dimension };
+    enum { dimWorld = GridView::dimensionworld };
     enum { numPhases = GET_PROP_VALUE(TypeTag, NumPhases) };
     enum { wPhaseIdx        = FluidSystem::wPhaseIdx};
 
@@ -320,9 +322,9 @@ class MPNCVtkWriterEnergy<TypeTag, /*enableEnergy = */ true, /* numEnergyEquatio
     typedef typename ParentType::ComponentVector ComponentVector;
     typedef Dune::array<ScalarVector, numEnergyEqs> EnergyEqVector;
 
-    typedef Dune::FieldVector<Scalar, dim> DimVector;
-    typedef Dune::BlockVector<DimVector> DimField;
-    typedef Dune::array<DimField, numPhases> PhaseDimField;
+    typedef Dune::FieldVector<Scalar, dimWorld> DimWorldVector;
+    typedef Dune::BlockVector<DimWorldVector> DimWorldField;
+    typedef Dune::array<DimWorldField, numPhases> PhaseDimWorldField;
 
 
 public:
@@ -508,7 +510,7 @@ private:
     PhaseVector nusseltNumber_ ;
     ScalarVector qBoil_ ;
     ScalarVector qsf_ ;
-    PhaseDimField  velocity_;
+    PhaseDimWorldField  velocity_;
 };
 
 
diff --git a/dumux/implicit/mpnc/mpncvtkwritercommon.hh b/dumux/implicit/mpnc/mpncvtkwritercommon.hh
index b51a9b402301fb2fbd4ad3837bd176f55e152517..898446bdfcbbfc6a7f26e377e27489a3c5608f48 100644
--- a/dumux/implicit/mpnc/mpncvtkwritercommon.hh
+++ b/dumux/implicit/mpnc/mpncvtkwritercommon.hh
@@ -56,13 +56,14 @@ class MPNCVtkWriterCommon : public MPNCVtkWriterModule<TypeTag>
     typedef typename ParentType::PhaseComponentMatrix PhaseComponentMatrix;
 
     enum { dim = GridView::dimension };
+    enum { dimWorld = GridView::dimensionworld };
     enum { numPhases = GET_PROP_VALUE(TypeTag, NumPhases) };
     enum { numComponents = GET_PROP_VALUE(TypeTag, NumComponents) };
     enum { numEq = GET_PROP_VALUE(TypeTag, NumEq) };
 
-    typedef Dune::FieldVector<Scalar, dim> DimVector;
-    typedef Dune::BlockVector<DimVector> DimField;
-    typedef Dune::array<DimField, numPhases> PhaseDimField;
+    typedef Dune::FieldVector<Scalar, dimWorld> DimWorldVector;
+    typedef Dune::BlockVector<DimWorldVector> DimWorldField;
+    typedef Dune::array<DimWorldField, numPhases> PhaseDimWorldField;
     enum { isBox = GET_PROP_VALUE(TypeTag, ImplicitIsBox) };
     enum { dofCodim = isBox ? dim : 0 };
 
@@ -239,7 +240,7 @@ private:
     PhaseVector mobility_;
     PhaseVector averageMolarMass_;
 
-    PhaseDimField velocity_;
+    PhaseDimWorldField velocity_;
 
     ScalarVector porosity_;
     ScalarVector permeability_;
diff --git a/dumux/implicit/richards/richardsmodel.hh b/dumux/implicit/richards/richardsmodel.hh
index 7550b292d3a476fd3df460141cde9d2a169d79d7..2f4ed78b235cb6405d9be7d49530a00d941b5234 100644
--- a/dumux/implicit/richards/richardsmodel.hh
+++ b/dumux/implicit/richards/richardsmodel.hh
@@ -121,6 +121,7 @@ class RichardsModel : public GET_PROP_TYPE(TypeTag, BaseModel)
     typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView;
     typedef typename GridView::template Codim<0>::Iterator ElementIterator;
     enum { dim = GridView::dimension };
+    enum { dimWorld = GridView::dimensionworld };
 
     enum { isBox = GET_PROP_VALUE(TypeTag, ImplicitIsBox) };
     enum { dofCodim = isBox ? dim : 0 };
@@ -137,7 +138,7 @@ public:
     void addOutputVtkFields(const SolutionVector &sol, MultiWriter &writer)
     {
         typedef Dune::BlockVector<Dune::FieldVector<double, 1> > ScalarField;
-        typedef Dune::BlockVector<Dune::FieldVector<double, dim> > VectorField;
+        typedef Dune::BlockVector<Dune::FieldVector<double, dimWorld> > VectorField;
 
         // get the number of degrees of freedom
         unsigned numDofs = this->numDofs();
@@ -154,7 +155,7 @@ public:
         ScalarField *mobN = writer.allocateManagedBuffer(numDofs);
         ScalarField *poro = writer.allocateManagedBuffer(numDofs);
         ScalarField *Te = writer.allocateManagedBuffer(numDofs);
-        VectorField *velocity = writer.template allocateManagedBuffer<double, dim>(numDofs);
+        VectorField *velocity = writer.template allocateManagedBuffer<double, dimWorld>(numDofs);
         ImplicitVelocityOutput<TypeTag> velocityOutput(this->problem_());
 
         if (velocityOutput.enableOutput())
diff --git a/test/implicit/1p/1ptestproblem.hh b/test/implicit/1p/1ptestproblem.hh
index 472bbeacc3a0eb58126abd74318229de7d8af5c8..68f356322437a2c98c9ae78ce4a1e2591e5b386b 100644
--- a/test/implicit/1p/1ptestproblem.hh
+++ b/test/implicit/1p/1ptestproblem.hh
@@ -87,6 +87,19 @@ NEW_TYPE_TAG(OnePTestCCProblemWithAMG, INHERITS_FROM(OnePTestCCProblem));
 SET_TYPE_PROP(OnePTestBoxProblemWithAMG, LinearSolver, Dumux::AMGBackend<TypeTag> );
 SET_TYPE_PROP(OnePTestCCProblemWithAMG, LinearSolver, Dumux::AMGBackend<TypeTag> );
 
+// if AlbertaGrid is available, test for dim < dimWorld
+#if HAVE_ALBERTA
+NEW_TYPE_TAG(OnePOneDThreeDTestProblem, INHERITS_FROM(OnePTestProblem));
+NEW_TYPE_TAG(OnePOneDThreeDTestBoxProblem, INHERITS_FROM(BoxModel, OnePOneDThreeDTestProblem));
+NEW_TYPE_TAG(OnePOneDThreeDTestCCProblem, INHERITS_FROM(CCModel, OnePOneDThreeDTestProblem));
+SET_TYPE_PROP(OnePOneDThreeDTestProblem, Grid, Dune::AlbertaGrid<1, 3>);
+
+NEW_TYPE_TAG(OnePTwoDThreeDTestProblem, INHERITS_FROM(OnePTestProblem));
+NEW_TYPE_TAG(OnePTwoDThreeDTestBoxProblem, INHERITS_FROM(BoxModel, OnePTwoDThreeDTestProblem));
+NEW_TYPE_TAG(OnePTwoDThreeDTestCCProblem, INHERITS_FROM(CCModel, OnePTwoDThreeDTestProblem));
+SET_TYPE_PROP(OnePTwoDThreeDTestProblem, Grid, Dune::AlbertaGrid<2, 3>);
+#endif
+
 // Enable gravity
 SET_BOOL_PROP(OnePTestProblem, ProblemEnableGravity, true);
 }
@@ -206,7 +219,7 @@ public:
             const GlobalPosition &globalPos) const
     {
         double eps = 1.0e-3;
-        if (globalPos[dim-1] < eps || globalPos[dim-1] > this->bBoxMax()[dim-1] - eps)
+        if (globalPos[dimWorld-1] < eps || globalPos[dimWorld-1] > this->bBoxMax()[dimWorld-1] - eps)
             values.setAllDirichlet();
         else
             values.setAllNeumann();
@@ -224,7 +237,7 @@ public:
     void dirichletAtPos(PrimaryVariables &values,
                         const GlobalPosition &globalPos) const
     {
-        values[pressureIdx] = 1.0e+5*(2.0 - globalPos[dim-1]);
+        values[pressureIdx] = 1.0e+5*(2.0 - globalPos[dimWorld-1]);
     }
 
     /*!
diff --git a/test/implicit/1p/1ptestspatialparams.hh b/test/implicit/1p/1ptestspatialparams.hh
index 7072a345dfd6c2694ed11df3503b2892c7e3c64f..f61a3259b38dfee0ce2f991c045bb2abde69a807 100644
--- a/test/implicit/1p/1ptestspatialparams.hh
+++ b/test/implicit/1p/1ptestspatialparams.hh
@@ -61,15 +61,15 @@ public:
         try
         {
             lensLowerLeft_[0] = GET_RUNTIME_PARAM(TypeTag, Scalar, SpatialParams.LensLowerLeftX);
-            if (dim > 1)
+            if (dimWorld > 1)
                 lensLowerLeft_[1] = GET_RUNTIME_PARAM(TypeTag, Scalar, SpatialParams.LensLowerLeftY);
-            if (dim > 2)
+            if (dimWorld > 2)
                 lensLowerLeft_[2] = GET_RUNTIME_PARAM(TypeTag, Scalar, SpatialParams.LensLowerLeftZ);
 
             lensUpperRight_[0] = GET_RUNTIME_PARAM(TypeTag, Scalar, SpatialParams.LensUpperRightX);
-            if (dim > 1)
+            if (dimWorld > 1)
                 lensUpperRight_[1] = GET_RUNTIME_PARAM(TypeTag, Scalar, SpatialParams.LensUpperRightY);
-            if (dim > 2)
+            if (dimWorld > 2)
                 lensUpperRight_[2] = GET_RUNTIME_PARAM(TypeTag, Scalar, SpatialParams.LensUpperRightZ);
 
             permeability_ = GET_RUNTIME_PARAM(TypeTag, Scalar, SpatialParams.Permeability);
@@ -119,7 +119,7 @@ public:
 private:
     bool isInLens_(const GlobalPosition &globalPos) const
     {
-        for (int i = 0; i < dim; ++i) {
+        for (int i = 0; i < dimWorld; ++i) {
             if (globalPos[i] < lensLowerLeft_[i] || globalPos[i] > lensUpperRight_[i])
                 return false;
         }
diff --git a/test/implicit/1p/CMakeLists.txt b/test/implicit/1p/CMakeLists.txt
index 4f2572bcecd037011f29741e310c491a3ecae453..29802643a2b2b9baef30dfb00f97b4936c94769e 100644
--- a/test/implicit/1p/CMakeLists.txt
+++ b/test/implicit/1p/CMakeLists.txt
@@ -55,3 +55,37 @@ add_dumux_test(test_cc1pniconvection test_cc1pniconvection test_cc1pniconvection
   ${CMAKE_SOURCE_DIR}/test/references/1pniccconvection-reference.vtu
   ${CMAKE_CURRENT_BINARY_DIR}/cc1pniconvection-00011.vtu
   ${CMAKE_CURRENT_BINARY_DIR}/test_cc1pniconvection)
+
+# dim < dimWorld tests
+add_dumux_test(test_box1p1d3d test_box1p1d3d test_box1p1d3d.cc
+  ${CMAKE_SOURCE_DIR}/bin/runTest.sh
+  ${CMAKE_SOURCE_DIR}/bin/fuzzycomparevtu.py
+  ${CMAKE_SOURCE_DIR}/test/references/1ptestbox1d3d-reference.vtu
+  ${CMAKE_CURRENT_BINARY_DIR}/1ptestbox1d3d-00002.vtu
+  ${CMAKE_CURRENT_BINARY_DIR}/test_box1p1d3d)
+add_dune_alberta_flags(test_box1p1d3d GRIDDIM 1 WORLDDIM 3)
+
+add_dumux_test(test_box1p2d3d test_box1p2d3d test_box1p2d3d.cc
+  ${CMAKE_SOURCE_DIR}/bin/runTest.sh
+  ${CMAKE_SOURCE_DIR}/bin/fuzzycomparevtu.py
+  ${CMAKE_SOURCE_DIR}/test/references/1ptestbox2d3d-reference.vtu
+  ${CMAKE_CURRENT_BINARY_DIR}/1ptestbox2d3d-00002.vtu
+  ${CMAKE_CURRENT_BINARY_DIR}/test_box1p2d3d)
+add_dune_alberta_flags(test_box1p2d3d GRIDDIM 2 WORLDDIM 3)
+
+add_dumux_test(test_cc1p1d3d test_cc1p1d3d test_cc1p1d3d.cc
+  ${CMAKE_SOURCE_DIR}/bin/runTest.sh
+  ${CMAKE_SOURCE_DIR}/bin/fuzzycomparevtu.py
+  ${CMAKE_SOURCE_DIR}/test/references/1ptestcc1d3d-reference.vtu
+  ${CMAKE_CURRENT_BINARY_DIR}/1ptestcc1d3d-00002.vtu
+  ${CMAKE_CURRENT_BINARY_DIR}/test_cc1p1d3d)
+add_dune_alberta_flags(test_cc1p1d3d GRIDDIM 1 WORLDDIM 3)
+
+add_dumux_test(test_cc1p2d3d test_cc1p2d3d test_cc1p2d3d.cc
+  ${CMAKE_SOURCE_DIR}/bin/runTest.sh
+  ${CMAKE_SOURCE_DIR}/bin/fuzzycomparevtu.py
+  ${CMAKE_SOURCE_DIR}/test/references/1ptestcc2d3d-reference.vtu
+  ${CMAKE_CURRENT_BINARY_DIR}/1ptestcc2d3d-00002.vtu
+  ${CMAKE_CURRENT_BINARY_DIR}/test_cc1p2d3d)
+add_dune_alberta_flags(test_cc1p2d3d GRIDDIM 2 WORLDDIM 3)
+
diff --git a/test/implicit/1p/Makefile.am b/test/implicit/1p/Makefile.am
index 48b8129fceb93be6f4e1ec153008b68e1eecc50b..530c604f657c5abb95425d5380ad6eeb7a0aad0d 100644
--- a/test/implicit/1p/Makefile.am
+++ b/test/implicit/1p/Makefile.am
@@ -1,22 +1,47 @@
 check_PROGRAMS = test_box1p \
+                 test_box1p1d3d \
+                 test_box1p2d3d \
                  test_box1pniconduction \
                  test_box1pniconvection \
                  test_box1pwithamg \
                  test_cc1p \
+                 test_cc1p1d3d \
+                 test_cc1p2d3d \
                  test_cc1pniconduction \
                  test_cc1pniconvection \
-                 test_cc1pwithamg 
+                 test_cc1pwithamg
 
 noinst_HEADERS := $(wildcard *.hh)
 EXTRA_DIST:=$(wildcard *.input) $(wildcard grids/*.dgf) CMakeLists.txt
 
 test_box1p_SOURCES = test_box1p.cc
+test_box1p1d3d_SOURCES = test_box1p1d3d.cc
+test_box1p2d3d_SOURCES = test_box1p2d3d.cc
 test_box1pniconduction_SOURCES = test_box1pniconduction.cc
 test_box1pniconvection_SOURCES = test_box1pniconvection.cc
 test_box1pwithamg_SOURCES = test_box1pwithamg.cc
 test_cc1p_SOURCES = test_cc1p.cc
+test_cc1p1d3d_SOURCES = test_cc1p1d3d.cc
+test_cc1p2d3d_SOURCES = test_cc1p2d3d.cc
 test_cc1pniconduction_SOURCES = test_cc1pniconduction.cc
 test_cc1pniconvection_SOURCES = test_cc1pniconvection.cc
 test_cc1pwithamg_SOURCES = test_cc1pwithamg.cc
 
+test_cc1p1d3d_LDADD = $(AM_LDFLAGS)  $(ALBERTA3D_LIBS)
+test_cc1p1d3d_LDFLAGS= $(AM_LDFLAGS) $(ALBERTA3D_LDFLAGS)
+test_cc1p1d3d_CPPFLAGS=$(AM_CPPFLAGS) $(ALBERTA3D_CPPFLAGS)
+
+test_box1p1d3d_LDADD = $(AM_LDFLAGS)  $(ALBERTA3D_LIBS)
+test_box1p1d3d_LDFLAGS= $(AM_LDFLAGS) $(ALBERTA3D_LDFLAGS)
+test_box1p1d3d_CPPFLAGS=$(AM_CPPFLAGS) $(ALBERTA3D_CPPFLAGS)
+
+test_cc1p2d3d_LDADD = $(AM_LDFLAGS)  $(ALBERTA3D_LIBS)
+test_cc1p2d3d_LDFLAGS= $(AM_LDFLAGS) $(ALBERTA3D_LDFLAGS)
+test_cc1p2d3d_CPPFLAGS=$(AM_CPPFLAGS) $(ALBERTA3D_CPPFLAGS)
+
+test_box1p2d3d_LDADD = $(AM_LDFLAGS)  $(ALBERTA3D_LIBS)
+test_box1p2d3d_LDFLAGS= $(AM_LDFLAGS) $(ALBERTA3D_LDFLAGS)
+test_box1p2d3d_CPPFLAGS=$(AM_CPPFLAGS) $(ALBERTA3D_CPPFLAGS)
+
+
 include $(top_srcdir)/am/global-rules
diff --git a/test/implicit/1p/grids/test_1p_1d3d.dgf b/test/implicit/1p/grids/test_1p_1d3d.dgf
new file mode 100644
index 0000000000000000000000000000000000000000..99cdba09090bf0cfead98e2a1978d28e24596877
--- /dev/null
+++ b/test/implicit/1p/grids/test_1p_1d3d.dgf
@@ -0,0 +1,18 @@
+DGF
+Vertex
+0 0 0
+0.25 0.25 0.25
+0.5 0.5 0.5
+0.75 0.75 0.75
+1 1 1
+#
+Simplex
+0 1
+1 2
+2 3
+3 4
+#
+Boundarydomain
+default 1    % all boundaries have id 1
+#
+# unitcube.dgf
diff --git a/test/implicit/1p/grids/test_1p_2d3d.dgf b/test/implicit/1p/grids/test_1p_2d3d.dgf
new file mode 100644
index 0000000000000000000000000000000000000000..1dfbbe4929a1f4e54361d713b82580110dcacd9c
--- /dev/null
+++ b/test/implicit/1p/grids/test_1p_2d3d.dgf
@@ -0,0 +1,26 @@
+DGF
+Vertex
+0 0 0
+0.5 0 0
+1 0 0
+0 0.5 0.5
+0.5 0.5 0.5
+1 0.5 0.5
+0 1 1
+0.5 1 1
+1 1 1
+#
+Simplex
+0 1 4
+0 4 3
+1 2 4
+2 5 4
+3 4 6
+4 7 6
+4 5 8
+4 8 7
+#
+Boundarydomain
+default 1    % all boundaries have id 1
+#
+# unitcube.dgf
diff --git a/test/implicit/1p/test_box1p1d3d.cc b/test/implicit/1p/test_box1p1d3d.cc
new file mode 100644
index 0000000000000000000000000000000000000000..79f3611b1f4b7a899ef1743ad85d107bf0c6eaea
--- /dev/null
+++ b/test/implicit/1p/test_box1p1d3d.cc
@@ -0,0 +1,69 @@
+// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+// vi: set et ts=4 sw=4 sts=4:
+/*****************************************************************************
+ *   See the file COPYING for full copying permissions.                      *
+ *                                                                           *
+ *   This program is free software: you can redistribute it and/or modify    *
+ *   it under the terms of the GNU General Public License as published by    *
+ *   the Free Software Foundation, either version 2 of the License, or       *
+ *   (at your option) any later version.                                     *
+ *                                                                           *
+ *   This program is distributed in the hope that it will be useful,         *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the            *
+ *   GNU General Public License for more details.                            *
+ *                                                                           *
+ *   You should have received a copy of the GNU General Public License       *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>.   *
+ *****************************************************************************/
+/*!
+ * \file
+ *
+ * \brief test for the one-phase CC model
+ */
+#include "config.h"
+#include "1ptestproblem.hh"
+#include <dumux/common/start.hh>
+
+/*!
+ * \brief Provides an interface for customizing error messages associated with
+ *        reading in parameters.
+ *
+ * \param progName  The name of the program, that was tried to be started.
+ * \param errorMsg  The error message that was issued by the start function.
+ *                  Comprises the thing that went wrong and a general help message.
+ */
+void usage(const char *progName, const std::string &errorMsg)
+{
+    if (errorMsg.size() > 0) {
+        std::string errorMessageOut = "\nUsage: ";
+                    errorMessageOut += progName;
+                    errorMessageOut += " [options]\n";
+                    errorMessageOut += errorMsg;
+                    errorMessageOut += "\n\nThe list of mandatory arguments for this program is:\n"
+                                        "\t-TimeManager.TEnd               End of the simulation [s] \n"
+                                        "\t-TimeManager.DtInitial          Initial timestep size [s] \n"
+                                        "\t-Grid.File                      Name of the file containing the grid \n"
+                                        "\t                                definition in DGF format\n"
+                                        "\t-SpatialParams.LensLowerLeftX   x-coordinate of the lower left corner of the lens [m] \n"
+                                        "\t-SpatialParams.LensLowerLeftY   y-coordinate of the lower left corner of the lens [m] \n"
+                                        "\t-SpatialParams.LensUpperRightX  x-coordinate of the upper right corner of the lens [m] \n"
+                                        "\t-SpatialParams.LensUpperRightY  y-coordinate of the upper right corner of the lens [m] \n"
+                                        "\t-SpatialParams.Permeability     Permeability of the domain [m^2] \n"
+                                        "\t-SpatialParams.PermeabilityLens Permeability of the lens [m^2] \n";
+
+        std::cout << errorMessageOut
+                  << "\n";
+    }
+}
+
+int main(int argc, char** argv)
+{
+#if HAVE_ALBERTA
+    typedef TTAG(OnePOneDThreeDTestBoxProblem) ProblemTypeTag;
+    return Dumux::start<ProblemTypeTag>(argc, argv, usage);
+#else
+    std::cout << "Test skipped, it needs Alberta!" << std::endl;
+    return 77;
+#endif
+}
diff --git a/test/implicit/1p/test_box1p1d3d.input b/test/implicit/1p/test_box1p1d3d.input
new file mode 100644
index 0000000000000000000000000000000000000000..7907d6434bb214068bd7bbcecc94b7fd86c7459e
--- /dev/null
+++ b/test/implicit/1p/test_box1p1d3d.input
@@ -0,0 +1,21 @@
+[TimeManager]
+DtInitial = 1 # [s]
+TEnd = 1 # [s]
+
+[Grid]
+File = ./grids/test_1p_1d3d.dgf
+
+[Problem]
+Name = 1ptestbox1d3d # name passed to the output routines
+
+[SpatialParams]
+LensLowerLeftX = 0.2 # [m]
+LensLowerLeftY = 0.2 # [m]
+LensLowerLeftZ = 0.2 # [m]
+LensUpperRightX = 0.8 # [m]
+LensUpperRightY = 0.8 # [m]
+LensUpperRightZ = 0.8 # [m]
+
+Permeability = 1e-10 # [m^2]
+PermeabilityLens = 1e-12 # [m^2]
+
diff --git a/test/implicit/1p/test_box1p2d3d.cc b/test/implicit/1p/test_box1p2d3d.cc
new file mode 100644
index 0000000000000000000000000000000000000000..b66d95cfdf73149e1bfbc1211977cc2575f800cf
--- /dev/null
+++ b/test/implicit/1p/test_box1p2d3d.cc
@@ -0,0 +1,69 @@
+// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+// vi: set et ts=4 sw=4 sts=4:
+/*****************************************************************************
+ *   See the file COPYING for full copying permissions.                      *
+ *                                                                           *
+ *   This program is free software: you can redistribute it and/or modify    *
+ *   it under the terms of the GNU General Public License as published by    *
+ *   the Free Software Foundation, either version 2 of the License, or       *
+ *   (at your option) any later version.                                     *
+ *                                                                           *
+ *   This program is distributed in the hope that it will be useful,         *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the            *
+ *   GNU General Public License for more details.                            *
+ *                                                                           *
+ *   You should have received a copy of the GNU General Public License       *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>.   *
+ *****************************************************************************/
+/*!
+ * \file
+ *
+ * \brief test for the one-phase CC model
+ */
+#include "config.h"
+#include "1ptestproblem.hh"
+#include <dumux/common/start.hh>
+
+/*!
+ * \brief Provides an interface for customizing error messages associated with
+ *        reading in parameters.
+ *
+ * \param progName  The name of the program, that was tried to be started.
+ * \param errorMsg  The error message that was issued by the start function.
+ *                  Comprises the thing that went wrong and a general help message.
+ */
+void usage(const char *progName, const std::string &errorMsg)
+{
+    if (errorMsg.size() > 0) {
+        std::string errorMessageOut = "\nUsage: ";
+                    errorMessageOut += progName;
+                    errorMessageOut += " [options]\n";
+                    errorMessageOut += errorMsg;
+                    errorMessageOut += "\n\nThe list of mandatory arguments for this program is:\n"
+                                        "\t-TimeManager.TEnd               End of the simulation [s] \n"
+                                        "\t-TimeManager.DtInitial          Initial timestep size [s] \n"
+                                        "\t-Grid.File                      Name of the file containing the grid \n"
+                                        "\t                                definition in DGF format\n"
+                                        "\t-SpatialParams.LensLowerLeftX   x-coordinate of the lower left corner of the lens [m] \n"
+                                        "\t-SpatialParams.LensLowerLeftY   y-coordinate of the lower left corner of the lens [m] \n"
+                                        "\t-SpatialParams.LensUpperRightX  x-coordinate of the upper right corner of the lens [m] \n"
+                                        "\t-SpatialParams.LensUpperRightY  y-coordinate of the upper right corner of the lens [m] \n"
+                                        "\t-SpatialParams.Permeability     Permeability of the domain [m^2] \n"
+                                        "\t-SpatialParams.PermeabilityLens Permeability of the lens [m^2] \n";
+
+        std::cout << errorMessageOut
+                  << "\n";
+    }
+}
+
+int main(int argc, char** argv)
+{
+#if HAVE_ALBERTA
+    typedef TTAG(OnePTwoDThreeDTestBoxProblem) ProblemTypeTag;
+    return Dumux::start<ProblemTypeTag>(argc, argv, usage);
+#else
+    std::cout << "Test skipped, it needs Alberta!" << std::endl;
+    return 77;
+#endif
+}
diff --git a/test/implicit/1p/test_box1p2d3d.input b/test/implicit/1p/test_box1p2d3d.input
new file mode 100644
index 0000000000000000000000000000000000000000..b5081bd65ec48a131c749209af55e96c388494f5
--- /dev/null
+++ b/test/implicit/1p/test_box1p2d3d.input
@@ -0,0 +1,21 @@
+[TimeManager]
+DtInitial = 1 # [s]
+TEnd = 1 # [s]
+
+[Grid]
+File = ./grids/test_1p_2d3d.dgf
+
+[Problem]
+Name = 1ptestbox2d3d # name passed to the output routines
+
+[SpatialParams]
+LensLowerLeftX = 0.2 # [m]
+LensLowerLeftY = 0.2 # [m]
+LensLowerLeftZ = 0.2 # [m]
+LensUpperRightX = 0.8 # [m]
+LensUpperRightY = 0.8 # [m]
+LensUpperRightZ = 0.8 # [m]
+
+Permeability = 1e-10 # [m^2]
+PermeabilityLens = 1e-12 # [m^2]
+
diff --git a/test/implicit/1p/test_cc1p1d3d.cc b/test/implicit/1p/test_cc1p1d3d.cc
new file mode 100644
index 0000000000000000000000000000000000000000..6502e9f9d05fd479094e54e474d2e53bae14b5db
--- /dev/null
+++ b/test/implicit/1p/test_cc1p1d3d.cc
@@ -0,0 +1,69 @@
+// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+// vi: set et ts=4 sw=4 sts=4:
+/*****************************************************************************
+ *   See the file COPYING for full copying permissions.                      *
+ *                                                                           *
+ *   This program is free software: you can redistribute it and/or modify    *
+ *   it under the terms of the GNU General Public License as published by    *
+ *   the Free Software Foundation, either version 2 of the License, or       *
+ *   (at your option) any later version.                                     *
+ *                                                                           *
+ *   This program is distributed in the hope that it will be useful,         *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the            *
+ *   GNU General Public License for more details.                            *
+ *                                                                           *
+ *   You should have received a copy of the GNU General Public License       *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>.   *
+ *****************************************************************************/
+/*!
+ * \file
+ *
+ * \brief test for the one-phase CC model
+ */
+#include "config.h"
+#include "1ptestproblem.hh"
+#include <dumux/common/start.hh>
+
+/*!
+ * \brief Provides an interface for customizing error messages associated with
+ *        reading in parameters.
+ *
+ * \param progName  The name of the program, that was tried to be started.
+ * \param errorMsg  The error message that was issued by the start function.
+ *                  Comprises the thing that went wrong and a general help message.
+ */
+void usage(const char *progName, const std::string &errorMsg)
+{
+    if (errorMsg.size() > 0) {
+        std::string errorMessageOut = "\nUsage: ";
+                    errorMessageOut += progName;
+                    errorMessageOut += " [options]\n";
+                    errorMessageOut += errorMsg;
+                    errorMessageOut += "\n\nThe list of mandatory arguments for this program is:\n"
+                                        "\t-TimeManager.TEnd               End of the simulation [s] \n"
+                                        "\t-TimeManager.DtInitial          Initial timestep size [s] \n"
+                                        "\t-Grid.File                      Name of the file containing the grid \n"
+                                        "\t                                definition in DGF format\n"
+                                        "\t-SpatialParams.LensLowerLeftX   x-coordinate of the lower left corner of the lens [m] \n"
+                                        "\t-SpatialParams.LensLowerLeftY   y-coordinate of the lower left corner of the lens [m] \n"
+                                        "\t-SpatialParams.LensUpperRightX  x-coordinate of the upper right corner of the lens [m] \n"
+                                        "\t-SpatialParams.LensUpperRightY  y-coordinate of the upper right corner of the lens [m] \n"
+                                        "\t-SpatialParams.Permeability     Permeability of the domain [m^2] \n"
+                                        "\t-SpatialParams.PermeabilityLens Permeability of the lens [m^2] \n";
+
+        std::cout << errorMessageOut
+                  << "\n";
+    }
+}
+
+int main(int argc, char** argv)
+{
+#if HAVE_ALBERTA
+    typedef TTAG(OnePOneDThreeDTestCCProblem) ProblemTypeTag;
+    return Dumux::start<ProblemTypeTag>(argc, argv, usage);
+#else
+    std::cout << "Test skipped, it needs Alberta!" << std::endl;
+    return 77;
+#endif
+}
diff --git a/test/implicit/1p/test_cc1p1d3d.input b/test/implicit/1p/test_cc1p1d3d.input
new file mode 100644
index 0000000000000000000000000000000000000000..c2929273ac3abf772192ee8f8136a3c0db6c5e7e
--- /dev/null
+++ b/test/implicit/1p/test_cc1p1d3d.input
@@ -0,0 +1,21 @@
+[TimeManager]
+DtInitial = 1 # [s]
+TEnd = 1 # [s]
+
+[Grid]
+File = ./grids/test_1p_1d3d.dgf
+
+[Problem]
+Name = 1ptestcc1d3d # name passed to the output routines
+
+[SpatialParams]
+LensLowerLeftX = 0.2 # [m]
+LensLowerLeftY = 0.2 # [m]
+LensLowerLeftZ = 0.2 # [m]
+LensUpperRightX = 0.8 # [m]
+LensUpperRightY = 0.8 # [m]
+LensUpperRightZ = 0.8 # [m]
+
+Permeability = 1e-10 # [m^2]
+PermeabilityLens = 1e-12 # [m^2]
+
diff --git a/test/implicit/1p/test_cc1p2d3d.cc b/test/implicit/1p/test_cc1p2d3d.cc
new file mode 100644
index 0000000000000000000000000000000000000000..9a3725b7e16d9ba1438850b5329af759629c943d
--- /dev/null
+++ b/test/implicit/1p/test_cc1p2d3d.cc
@@ -0,0 +1,69 @@
+// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+// vi: set et ts=4 sw=4 sts=4:
+/*****************************************************************************
+ *   See the file COPYING for full copying permissions.                      *
+ *                                                                           *
+ *   This program is free software: you can redistribute it and/or modify    *
+ *   it under the terms of the GNU General Public License as published by    *
+ *   the Free Software Foundation, either version 2 of the License, or       *
+ *   (at your option) any later version.                                     *
+ *                                                                           *
+ *   This program is distributed in the hope that it will be useful,         *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the            *
+ *   GNU General Public License for more details.                            *
+ *                                                                           *
+ *   You should have received a copy of the GNU General Public License       *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>.   *
+ *****************************************************************************/
+/*!
+ * \file
+ *
+ * \brief test for the one-phase CC model
+ */
+#include "config.h"
+#include "1ptestproblem.hh"
+#include <dumux/common/start.hh>
+
+/*!
+ * \brief Provides an interface for customizing error messages associated with
+ *        reading in parameters.
+ *
+ * \param progName  The name of the program, that was tried to be started.
+ * \param errorMsg  The error message that was issued by the start function.
+ *                  Comprises the thing that went wrong and a general help message.
+ */
+void usage(const char *progName, const std::string &errorMsg)
+{
+    if (errorMsg.size() > 0) {
+        std::string errorMessageOut = "\nUsage: ";
+                    errorMessageOut += progName;
+                    errorMessageOut += " [options]\n";
+                    errorMessageOut += errorMsg;
+                    errorMessageOut += "\n\nThe list of mandatory arguments for this program is:\n"
+                                        "\t-TimeManager.TEnd               End of the simulation [s] \n"
+                                        "\t-TimeManager.DtInitial          Initial timestep size [s] \n"
+                                        "\t-Grid.File                      Name of the file containing the grid \n"
+                                        "\t                                definition in DGF format\n"
+                                        "\t-SpatialParams.LensLowerLeftX   x-coordinate of the lower left corner of the lens [m] \n"
+                                        "\t-SpatialParams.LensLowerLeftY   y-coordinate of the lower left corner of the lens [m] \n"
+                                        "\t-SpatialParams.LensUpperRightX  x-coordinate of the upper right corner of the lens [m] \n"
+                                        "\t-SpatialParams.LensUpperRightY  y-coordinate of the upper right corner of the lens [m] \n"
+                                        "\t-SpatialParams.Permeability     Permeability of the domain [m^2] \n"
+                                        "\t-SpatialParams.PermeabilityLens Permeability of the lens [m^2] \n";
+
+        std::cout << errorMessageOut
+                  << "\n";
+    }
+}
+
+int main(int argc, char** argv)
+{
+#if HAVE_ALBERTA
+    typedef TTAG(OnePTwoDThreeDTestCCProblem) ProblemTypeTag;
+    return Dumux::start<ProblemTypeTag>(argc, argv, usage);
+#else
+    std::cout << "Test skipped, it needs Alberta!" << std::endl;
+    return 77;
+#endif
+}
diff --git a/test/implicit/1p/test_cc1p2d3d.input b/test/implicit/1p/test_cc1p2d3d.input
new file mode 100644
index 0000000000000000000000000000000000000000..639070c93adadaae343e6d39057a4e95df05bd2b
--- /dev/null
+++ b/test/implicit/1p/test_cc1p2d3d.input
@@ -0,0 +1,21 @@
+[TimeManager]
+DtInitial = 1 # [s]
+TEnd = 1 # [s]
+
+[Grid]
+File = ./grids/test_1p_2d3d.dgf
+
+[Problem]
+Name = 1ptestcc2d3d # name passed to the output routines
+
+[SpatialParams]
+LensLowerLeftX = 0.2 # [m]
+LensLowerLeftY = 0.2 # [m]
+LensLowerLeftZ = 0.2 # [m]
+LensUpperRightX = 0.8 # [m]
+LensUpperRightY = 0.8 # [m]
+LensUpperRightZ = 0.8 # [m]
+
+Permeability = 1e-10 # [m^2]
+PermeabilityLens = 1e-12 # [m^2]
+
diff --git a/test/implicit/2p/lensspatialparams.hh b/test/implicit/2p/lensspatialparams.hh
index c8dc33db3c083ec1f372d6912aadaf47198b38b4..b57d99c867ec789b552ec98b103262d324767b3a 100644
--- a/test/implicit/2p/lensspatialparams.hh
+++ b/test/implicit/2p/lensspatialparams.hh
@@ -183,7 +183,7 @@ public:
 private:
     bool isInLens_(const GlobalPosition &globalPos) const
     {
-        for (int i = 0; i < dim; ++i) {
+        for (int i = 0; i < dimWorld; ++i) {
             if (globalPos[i] < lensLowerLeft_[i] || globalPos[i] > lensUpperRight_[i])
                 return false;
         }
diff --git a/test/implicit/2p2c/injectionspatialparams.hh b/test/implicit/2p2c/injectionspatialparams.hh
index e8220bfe40d93dca6888f7906704733d70a706ea..1a4c8da8317a68138e14f98d08c120d01551df26 100644
--- a/test/implicit/2p2c/injectionspatialparams.hh
+++ b/test/implicit/2p2c/injectionspatialparams.hh
@@ -228,7 +228,7 @@ public:
 
 private:
     bool isFineMaterial_(const GlobalPosition &globalPos) const
-    { return globalPos[dim-1] > layerBottom_; }
+    { return globalPos[dimWorld-1] > layerBottom_; }
 
     Scalar fineK_;
     Scalar coarseK_;
diff --git a/test/implicit/2p2c/waterairspatialparams.hh b/test/implicit/2p2c/waterairspatialparams.hh
index e091f5da52c44ae24fdc1f9c27180579071983a5..61d9c1b0d2b01bf265cd32657c7e87b58fbba733 100644
--- a/test/implicit/2p2c/waterairspatialparams.hh
+++ b/test/implicit/2p2c/waterairspatialparams.hh
@@ -222,7 +222,7 @@ public:
 
 private:
     bool isFineMaterial_(const GlobalPosition &globalPos) const
-    { return globalPos[dim-1] > layerBottom_; }
+    { return globalPos[dimWorld-1] > layerBottom_; }
 
     Scalar fineK_;
     Scalar coarseK_;
diff --git a/test/implicit/co2/heterogeneousproblem.hh b/test/implicit/co2/heterogeneousproblem.hh
index 3711137b91e162a6748c724d2ee568bb5ae92cf2..e816c7f38f953e628f6339c48f59ecbb30099234 100644
--- a/test/implicit/co2/heterogeneousproblem.hh
+++ b/test/implicit/co2/heterogeneousproblem.hh
@@ -483,7 +483,7 @@ private:
         Scalar temp = temperature_(globalPos);
         Scalar densityW = FluidSystem::Brine::liquidDensity(temp, 1e7);
 
-        Scalar pl =  1e5 - densityW*this->gravity()[dim-1]*(depthBOR_ - globalPos[dim-1]);
+        Scalar pl =  1e5 - densityW*this->gravity()[dimWorld-1]*(depthBOR_ - globalPos[dimWorld-1]);
         Scalar moleFracLiquidCO2 = 0.00;
         Scalar moleFracLiquidBrine = 1.0 - moleFracLiquidCO2;
 
@@ -504,7 +504,7 @@ private:
 
     Scalar temperature_(const GlobalPosition globalPos) const
     {
-        Scalar T = 283.0 + (depthBOR_ - globalPos[dim-1])*0.03; 
+        Scalar T = 283.0 + (depthBOR_ - globalPos[dimWorld-1])*0.03; 
         return T;
     }
 
diff --git a/test/implicit/co2ni/heterogeneousproblemni.hh b/test/implicit/co2ni/heterogeneousproblemni.hh
index cc4c7af46def7e3e2f4766b74df207768dfd1eb9..548f2f647a3bb4c8024fdfcac6650b591258e2b0 100644
--- a/test/implicit/co2ni/heterogeneousproblemni.hh
+++ b/test/implicit/co2ni/heterogeneousproblemni.hh
@@ -507,7 +507,7 @@ private:
         Scalar temp = temperature_(globalPos);
         Scalar densityW = FluidSystem::Brine::liquidDensity(temp, 1e7);
 
-        Scalar pl =  1e5 - densityW*this->gravity()[dim-1]*(depthBOR_ - globalPos[dim-1]);
+        Scalar pl =  1e5 - densityW*this->gravity()[dimWorld-1]*(depthBOR_ - globalPos[dimWorld-1]);
         Scalar moleFracLiquidCO2 = 0.00;
         Scalar moleFracLiquidBrine = 1.0 - moleFracLiquidCO2;
 
@@ -528,7 +528,7 @@ private:
 
     Scalar temperature_(const GlobalPosition globalPos) const
     {
-        Scalar T = 283.0 + (depthBOR_ - globalPos[dim-1])*0.03; 
+        Scalar T = 283.0 + (depthBOR_ - globalPos[dimWorld-1])*0.03; 
         return T;
     }
 
diff --git a/test/implicit/mpnc/combustionproblem1c.hh b/test/implicit/mpnc/combustionproblem1c.hh
index 396a371ba26f868145ef9df1de332c58f068f621..c738e9f47d1baa41b9781781c5a08c8c2bbcca5b 100644
--- a/test/implicit/mpnc/combustionproblem1c.hh
+++ b/test/implicit/mpnc/combustionproblem1c.hh
@@ -240,7 +240,7 @@ class CombustionProblemOneComponent: public ImplicitPorousMediaProblem<TypeTag>
 
 	typedef std::vector<Dune::FieldVector<Scalar, 1> > ScalarBuffer;
 	typedef std::array<ScalarBuffer, numPhases> PhaseBuffer;
-	typedef Dune::FieldVector<Scalar, dim> VelocityVector;
+	typedef Dune::FieldVector<Scalar, dimWorld> VelocityVector;
 	typedef Dune::BlockVector<VelocityVector> VelocityField;
 	typedef std::array<VelocityField, numPhases> PhaseVelocityField;
 
@@ -745,13 +745,13 @@ private:
 	 * \brief Give back whether the tested position (input) is a specific region (down, (gravityDir)) in the domain
 	 */
 	bool onLowerBoundary_(const GlobalPosition & globalPos) const
-	{	return globalPos[dim-1] < this->bBoxMin()[dim-1] + eps_;}
+	{	return globalPos[dimWorld-1] < this->bBoxMin()[dimWorld-1] + eps_;}
 
 	/*!
 	 * \brief Give back whether the tested position (input) is a specific region (up, (gravityDir)) in the domain
 	 */
 	bool onUpperBoundary_(const GlobalPosition & globalPos) const
-	{	return globalPos[dim-1] > this->bBoxMax()[dim-1] - eps_;}
+	{	return globalPos[dimWorld-1] > this->bBoxMax()[dimWorld-1] - eps_;}
 
 private:
 	Scalar eps_;
diff --git a/test/implicit/mpnc/evaporationatmosphereproblem.hh b/test/implicit/mpnc/evaporationatmosphereproblem.hh
index 57fbc24e3299797e1736db67911428885419d0b3..cae13aa452572c4a14bc66bfacaf29820219a061 100644
--- a/test/implicit/mpnc/evaporationatmosphereproblem.hh
+++ b/test/implicit/mpnc/evaporationatmosphereproblem.hh
@@ -645,7 +645,7 @@ private:
         }
         else
             DUNE_THROW(Dune::InvalidStateException,
-                       "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dim-1]);
+                       "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dimWorld-1]);
 
         for (int i = 0; i < numPhases - 1; ++i)
             priVars[S0Idx + i] = S[i];
@@ -682,7 +682,7 @@ private:
             p[wPhaseIdx] = pnInitial_  ;
         }
         else
-            DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dim-1]);
+            DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dimWorld-1]);
         
         if(pressureFormulation == mostWettingFirst){
             // This means that the pressures are sorted from the most wetting to the least wetting-1 in the primary variables vector.
@@ -729,7 +729,7 @@ private:
                         priVars[conti00EqIdx + offset] = dryFluidState.moleFraction(phaseIdx,compIdx) ;
                     }
                     else
-                        DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dim-1]);
+                        DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dimWorld-1]);
                 }
             }
         }
@@ -772,13 +772,13 @@ private:
      * \brief Give back whether the tested position (input) is a specific region (down, (gravityDir)) in the domain
      */
     bool onLowerBoundary_(const GlobalPosition & globalPos) const
-    {        return globalPos[dim-1] < this->bBoxMin()[dim-1] + eps_;    }
+    {        return globalPos[dimWorld-1] < this->bBoxMin()[dimWorld-1] + eps_;    }
 
     /*!
      * \brief Give back whether the tested position (input) is a specific region (up, (gravityDir)) in the domain
      */
     bool onUpperBoundary_(const GlobalPosition & globalPos) const
-    {        return globalPos[dim-1] > this->bBoxMax()[dim-1] - eps_;    }
+    {        return globalPos[dimWorld-1] > this->bBoxMax()[dimWorld-1] - eps_;    }
 
 private:
     Scalar eps_;
diff --git a/test/implicit/mpnc/evaporationatmospherespatialparams.hh b/test/implicit/mpnc/evaporationatmospherespatialparams.hh
index 8b704fdeaf37fdec61e1de511d00f6ab2f458221..66dd5b50210b93044e6ff3de11fe4cd52bcdcd7e 100644
--- a/test/implicit/mpnc/evaporationatmospherespatialparams.hh
+++ b/test/implicit/mpnc/evaporationatmospherespatialparams.hh
@@ -335,7 +335,7 @@ public:
         else if (inPM_(globalPos))
             return intrinsicPermeabilityPM_ ;
         else
-            DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dim-1]);
+            DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dimWorld-1]);
     }
 
     /*! \brief Return the porosity \f$[-]\f$ of the soil
@@ -358,7 +358,7 @@ public:
         else if (inPM_(globalPos))
             return porosityPM_ ;
         else
-            DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dim-1]);
+            DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dimWorld-1]);
     }
 
     /*!
@@ -389,7 +389,7 @@ public:
             return materialParamsFF_ ;
         else if (inPM_(globalPos))
             return materialParamsPM_ ;
-        else             DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dim-1]);
+        else             DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dimWorld-1]);
     }
 
     /*!\brief Return a reference to the container object for the
@@ -409,7 +409,7 @@ public:
             return aWettingNonWettingSurfaceParamsFreeFlow_  ;
         else if (inPM_(globalPos))
             return aWettingNonWettingSurfaceParams_ ;
-        else             DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dim-1]);
+        else             DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dimWorld-1]);
      }
 
     /*!\brief Return a reference to the container object for the
@@ -429,7 +429,7 @@ public:
             return aNonWettingSolidSurfaceParamsFreeFlow_  ;
         else if (inPM_(globalPos))
             return aNonWettingSolidSurfaceParams_ ;
-        else             DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dim-1]);
+        else             DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dimWorld-1]);
      }
 
     /*!\brief Return the maximum capillary pressure for the given pc-Sw curve
@@ -469,7 +469,7 @@ public:
             return characteristicLengthFF_ ;
         else if (inPM_(globalPos))
             return characteristicLengthPM_ ;
-        else             DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dim-1]);
+        else             DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dimWorld-1]);
     }
 
     /*!\brief Return the pre factor the the energy transfer
@@ -492,7 +492,7 @@ public:
             return factorEnergyTransfer_ ;
         else if (inPM_(globalPos))
             return factorEnergyTransfer_ ;
-        else             DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dim-1]);
+        else             DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dimWorld-1]);
     }
 
     /*!\brief Return the pre factor for the mass transfer
@@ -515,7 +515,7 @@ public:
             return factorMassTransfer_ ;
         else if (inPM_(globalPos))
             return factorMassTransfer_ ;
-        else             DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dim-1]);
+        else             DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dimWorld-1]);
     }
 
 
@@ -558,7 +558,7 @@ public:
      * -> be careful with neumannAtPos
      */
     const bool inPM_(const GlobalPosition & globalPos) const
-    {       return ( (globalPos[dim-1] > 0. - 1e-6) and (globalPos[dim-1] < (heightPM_ + 1e-6 ) ) );   }
+    {       return ( (globalPos[dimWorld-1] > 0. - 1e-6) and (globalPos[dimWorld-1] < (heightPM_ + 1e-6 ) ) );   }
 
     /*!
      * \brief Give back whether the tested position (input) is a specific region (above PM / "free flow") in the domain
@@ -572,7 +572,7 @@ public:
      * -> be careful with neumannAtPos
      */
     const bool inFF_(const GlobalPosition & globalPos) const
-    {       return ( (globalPos[dim-1] < heightDomain_ + 1e-6) and (globalPos[dim-1] > (heightPM_ + 1e-6) ) );   }
+    {       return ( (globalPos[dimWorld-1] < heightDomain_ + 1e-6) and (globalPos[dimWorld-1] > (heightPM_ + 1e-6) ) );   }
 
     /*!
      * \brief Give back whether the tested position (input) is a specific region (above PM / "free flow") in the domain
@@ -586,7 +586,7 @@ public:
      * -> be careful with neumannAtPos
      */
     const bool inInjection_(const GlobalPosition & globalPos) const
-    {       return ( (globalPos[dim-1] < heightDomain_ - 0.25*heightDomain_  + 1e-6) and (globalPos[dim-1] > (heightPM_ + 1e-6) ) );   }
+    {       return ( (globalPos[dimWorld-1] < heightDomain_ - 0.25*heightDomain_  + 1e-6) and (globalPos[dimWorld-1] > (heightPM_ + 1e-6) ) );   }
 
     /*! \brief access function for the depth / height of the porous medium */
     const Scalar heightPM() const
diff --git a/test/implicit/mpnc/forchheimer1pproblem.hh b/test/implicit/mpnc/forchheimer1pproblem.hh
index 138d29774934b072744ab1393bf44cd8612cdb31..04ba9a5f3b2be780f8aa77a060dff8d5bd3eb9ae 100644
--- a/test/implicit/mpnc/forchheimer1pproblem.hh
+++ b/test/implicit/mpnc/forchheimer1pproblem.hh
@@ -468,13 +468,13 @@ private:
      * \brief Give back whether the testes position (input) is a specific region (down, (gravityDir)) in the domain
      */
     bool onLowerBoundary_(const GlobalPosition &globalPos) const
-    {        return globalPos[dim-1] < this->bBoxMin()[dim-1] + eps_;    }
+    {        return globalPos[dimWorld-1] < this->bBoxMin()[dimWorld-1] + eps_;    }
 
     /*!
      * \brief Give back whether the testes position (input) is a specific region (up, (gravityDir)) in the domain
      */
     bool onUpperBoundary_(const GlobalPosition &globalPos) const
-    {        return globalPos[dim-1] > this->bBoxMax()[dim-1] - eps_;    }
+    {        return globalPos[dimWorld-1] > this->bBoxMax()[dimWorld-1] - eps_;    }
 
     Scalar temperature_;
     Scalar eps_;
diff --git a/test/implicit/richards/richardslensspatialparams.hh b/test/implicit/richards/richardslensspatialparams.hh
index 4fec0bcfe827697686c7039e7b78207def304b60..a62b9fb776ae141b87a73def1adead659e5e651a 100644
--- a/test/implicit/richards/richardslensspatialparams.hh
+++ b/test/implicit/richards/richardslensspatialparams.hh
@@ -193,7 +193,7 @@ public:
 private:
     bool isInLens_(const GlobalPosition &globalPos) const
     {
-        for (int i = 0; i < dim; ++i) {
+        for (int i = 0; i < dimWorld; ++i) {
             if (globalPos[i] < lensLowerLeft_[i] || globalPos[i] > lensUpperRight_[i])
                 return false;
         }
diff --git a/test/references/1ptestbox1d3d-reference.vtp b/test/references/1ptestbox1d3d-reference.vtp
new file mode 100644
index 0000000000000000000000000000000000000000..7864527d13d7c4151edf28c7e9e4d5289e0656c3
--- /dev/null
+++ b/test/references/1ptestbox1d3d-reference.vtp
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<VTKFile type="PolyData" version="0.1" byte_order="LittleEndian">
+  <PolyData>
+    <Piece NumberOfLines="4" NumberOfPoints="5">
+      <PointData Scalars="p">
+        <DataArray type="Float32" Name="p" NumberOfComponents="1" format="ascii">
+          200000 182416 150000 117584 100000
+        </DataArray>
+        <DataArray type="Float32" Name="K" NumberOfComponents="1" format="ascii">
+          1e-10 1e-12 1e-12 1e-12 1e-10
+        </DataArray>
+      </PointData>
+      <CellData Scalars="process rank">
+        <DataArray type="Float32" Name="process rank" NumberOfComponents="1" format="ascii">
+          0 0 0 0
+        </DataArray>
+      </CellData>
+      <Points>
+        <DataArray type="Float32" Name="Coordinates" NumberOfComponents="3" format="ascii">
+          0 0 0 0.25 0.25 0.25 0.5 0.5 0.5 0.75 0.75 0.75
+          1 1 1
+        </DataArray>
+      </Points>
+      <Lines>
+        <DataArray type="Int32" Name="connectivity" NumberOfComponents="1" format="ascii">
+          0 1 1 2 2 3 3 4
+        </DataArray>
+        <DataArray type="Int32" Name="offsets" NumberOfComponents="1" format="ascii">
+          2 4 6 8
+        </DataArray>
+      </Lines>
+    </Piece>
+  </PolyData>
+</VTKFile>
diff --git a/test/references/1ptestbox2d3d-reference.vtu b/test/references/1ptestbox2d3d-reference.vtu
new file mode 100644
index 0000000000000000000000000000000000000000..bf40f01a939537865327e5291629972d5327afba
--- /dev/null
+++ b/test/references/1ptestbox2d3d-reference.vtu
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<VTKFile type="UnstructuredGrid" version="0.1" byte_order="LittleEndian">
+  <UnstructuredGrid>
+    <Piece NumberOfCells="8" NumberOfPoints="9">
+      <PointData Scalars="p">
+        <DataArray type="Float32" Name="p" NumberOfComponents="1" format="ascii">
+          200000 200000 150000 150000 200000 150000 100000 100000 100000
+        </DataArray>
+        <DataArray type="Float32" Name="K" NumberOfComponents="1" format="ascii">
+          1e-10 1e-10 1e-12 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10
+        </DataArray>
+      </PointData>
+      <CellData Scalars="process rank">
+        <DataArray type="Float32" Name="process rank" NumberOfComponents="1" format="ascii">
+          0 0 0 0 0 0 0 0
+        </DataArray>
+      </CellData>
+      <Points>
+        <DataArray type="Float32" Name="Coordinates" NumberOfComponents="3" format="ascii">
+          0 0 0 0.5 0 0 0.5 0.5 0.5 0 0.5 0.5
+          1 0 0 1 0.5 0.5 0 1 1 0.5 1 1
+          1 1 1
+        </DataArray>
+      </Points>
+      <Cells>
+        <DataArray type="Int32" Name="connectivity" NumberOfComponents="1" format="ascii">
+          0 1 2 0 2 3 1 4 2 4 5 2
+          3 2 6 2 7 6 2 5 8 2 8 7
+        </DataArray>
+        <DataArray type="Int32" Name="offsets" NumberOfComponents="1" format="ascii">
+          3 6 9 12 15 18 21 24
+        </DataArray>
+        <DataArray type="UInt8" Name="types" NumberOfComponents="1" format="ascii">
+          5 5 5 5 5 5 5 5
+        </DataArray>
+      </Cells>
+    </Piece>
+  </UnstructuredGrid>
+</VTKFile>
diff --git a/test/references/1ptestcc1d3d-reference.vtp b/test/references/1ptestcc1d3d-reference.vtp
new file mode 100644
index 0000000000000000000000000000000000000000..b4cfb0c08e7a109b813ea8b0db23b6cd2bdf4307
--- /dev/null
+++ b/test/references/1ptestcc1d3d-reference.vtp
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<VTKFile type="PolyData" version="0.1" byte_order="LittleEndian">
+  <PolyData>
+    <Piece NumberOfLines="4" NumberOfPoints="5">
+      <CellData Scalars="p">
+        <DataArray type="Float32" Name="p" NumberOfComponents="1" format="ascii">
+          198550 173550 126449 101449
+        </DataArray>
+        <DataArray type="Float32" Name="K" NumberOfComponents="1" format="ascii">
+          1e-10 1e-12 1e-12 1e-10
+        </DataArray>
+        <DataArray type="Float32" Name="process rank" NumberOfComponents="1" format="ascii">
+          0 0 0 0
+        </DataArray>
+      </CellData>
+      <Points>
+        <DataArray type="Float32" Name="Coordinates" NumberOfComponents="3" format="ascii">
+          0 0 0 0.25 0.25 0.25 0.5 0.5 0.5 0.75 0.75 0.75
+          1 1 1
+        </DataArray>
+      </Points>
+      <Lines>
+        <DataArray type="Int32" Name="connectivity" NumberOfComponents="1" format="ascii">
+          0 1 1 2 2 3 3 4
+        </DataArray>
+        <DataArray type="Int32" Name="offsets" NumberOfComponents="1" format="ascii">
+          2 4 6 8
+        </DataArray>
+      </Lines>
+    </Piece>
+  </PolyData>
+</VTKFile>
diff --git a/test/references/1ptestcc2d3d-reference.vtu b/test/references/1ptestcc2d3d-reference.vtu
new file mode 100644
index 0000000000000000000000000000000000000000..cd2f26c53c4d20faba5a5acac4c1e97bbc2cfb9f
--- /dev/null
+++ b/test/references/1ptestcc2d3d-reference.vtu
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<VTKFile type="UnstructuredGrid" version="0.1" byte_order="LittleEndian">
+  <UnstructuredGrid>
+    <Piece NumberOfCells="8" NumberOfPoints="9">
+      <CellData Scalars="p">
+        <DataArray type="Float32" Name="p" NumberOfComponents="1" format="ascii">
+          180435 167391 180435 167391 132609 119565 132609 119565
+        </DataArray>
+        <DataArray type="Float32" Name="K" NumberOfComponents="1" format="ascii">
+          1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10 1e-10
+        </DataArray>
+        <DataArray type="Float32" Name="process rank" NumberOfComponents="1" format="ascii">
+          0 0 0 0 0 0 0 0
+        </DataArray>
+      </CellData>
+      <Points>
+        <DataArray type="Float32" Name="Coordinates" NumberOfComponents="3" format="ascii">
+          0 0 0 0.5 0 0 0.5 0.5 0.5 0 0.5 0.5
+          1 0 0 1 0.5 0.5 0 1 1 0.5 1 1
+          1 1 1
+        </DataArray>
+      </Points>
+      <Cells>
+        <DataArray type="Int32" Name="connectivity" NumberOfComponents="1" format="ascii">
+          0 1 2 0 2 3 1 4 2 4 5 2
+          3 2 6 2 7 6 2 5 8 2 8 7
+        </DataArray>
+        <DataArray type="Int32" Name="offsets" NumberOfComponents="1" format="ascii">
+          3 6 9 12 15 18 21 24
+        </DataArray>
+        <DataArray type="UInt8" Name="types" NumberOfComponents="1" format="ascii">
+          5 5 5 5 5 5 5 5
+        </DataArray>
+      </Cells>
+    </Piece>
+  </UnstructuredGrid>
+</VTKFile>