diff --git a/dumux/common/start.hh b/dumux/common/start.hh
index f8583ec9256941c0b60695937810fcf2186e0369..815a937a3e1d8882f0a9466a1197d213d126ed01 100644
--- a/dumux/common/start.hh
+++ b/dumux/common/start.hh
@@ -108,7 +108,7 @@ int start_(int argc,
 
     // instantiate and run the problem
     TimeManager timeManager;
-    Problem problem(timeManager, GridCreator::grid().leafGridView());
+    Problem problem(timeManager, GridCreator::grid());
     timeManager.init(problem, restartTime, dt, tEnd, restart);
     timeManager.run();
 
diff --git a/dumux/porousmediumflow/1p/sequential/diffusion/problem.hh b/dumux/porousmediumflow/1p/sequential/diffusion/problem.hh
index 796dc316ec9fac7a72325778192a91cd8821386c..7ea150b65bcd991bfd1c07bb433515f953dc2680 100644
--- a/dumux/porousmediumflow/1p/sequential/diffusion/problem.hh
+++ b/dumux/porousmediumflow/1p/sequential/diffusion/problem.hh
@@ -72,10 +72,10 @@ public:
      * \param timeManager the time manager
      * \param gridView The grid view
      */
-    DiffusionProblem1P(TimeManager &timeManager, const GridView &gridView)
-    : ParentType(timeManager, gridView), gravity_(0)
+    DiffusionProblem1P(TimeManager& timeManager, Grid& grid)
+    : ParentType(timeManager, grid), gravity_(0)
     {
-        spatialParams_ = std::make_shared<SpatialParams>(gridView);
+        spatialParams_ = std::make_shared<SpatialParams>(grid.leafGridView());
         gravity_ = 0;
         if (getParam<bool>("Problem.EnableGravity"))
             gravity_[dim - 1] = -9.81;
@@ -88,8 +88,8 @@ public:
      * \param gridView The grid view
      * \param spatialParams SpatialParams instantiation
      */
-    DiffusionProblem1P(TimeManager &timeManager, const GridView &gridView, SpatialParams &spatialParams)
-    : ParentType(timeManager, gridView), gravity_(0)
+    DiffusionProblem1P(TimeManager& timeManager, Grid& grid, SpatialParams &spatialParams)
+    : ParentType(timeManager, grid), gravity_(0)
     {
         spatialParams_ = Dune::stackobject_to_shared_ptr<SpatialParams>(spatialParams);
         gravity_ = 0;
@@ -102,10 +102,10 @@ public:
      *
      * \param gridView The grid view
      */
-    DiffusionProblem1P(const GridView &gridView)
-    : ParentType(gridView, false), gravity_(0)
+    DiffusionProblem1P(Grid& grid)
+    : ParentType(grid, false), gravity_(0)
     {
-        spatialParams_ = std::make_shared<SpatialParams>(gridView);
+        spatialParams_ = std::make_shared<SpatialParams>(grid.leafGridView());
         gravity_ = 0;
         if (getParam<bool>("Problem.EnableGravity"))
             gravity_[dim - 1] = -9.81;
@@ -117,8 +117,8 @@ public:
      * \param gridView The grid view
      * \param spatialParams SpatialParams instantiation
      */
-    DiffusionProblem1P(const GridView &gridView, SpatialParams &spatialParams)
-    : ParentType(gridView, false), gravity_(0)
+    DiffusionProblem1P(Grid& grid, SpatialParams& spatialParams)
+    : ParentType(grid, false), gravity_(0)
     {
         spatialParams_ = Dune::stackobject_to_shared_ptr<SpatialParams>(spatialParams);
         gravity_ = 0;
diff --git a/dumux/porousmediumflow/2p/sequential/diffusion/problem.hh b/dumux/porousmediumflow/2p/sequential/diffusion/problem.hh
index 6a5de64cd41542d31daa81c0dc27f401649e005c..976afd0eeaf71bb60e5ec38a7772e074b6a69512 100644
--- a/dumux/porousmediumflow/2p/sequential/diffusion/problem.hh
+++ b/dumux/porousmediumflow/2p/sequential/diffusion/problem.hh
@@ -42,7 +42,8 @@ class DiffusionProblem2P: public OneModelProblem<TypeTag>
     using ParentType = OneModelProblem<TypeTag>;
 
     using GridView = typename GET_PROP_TYPE(TypeTag, GridView);
-    using Grid = typename GridView::Grid;using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar);
+    using Grid = typename GridView::Grid;
+    using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar);
 
     using TimeManager = typename GET_PROP_TYPE(TypeTag, TimeManager);
     using PressureModel = typename GET_PROP_TYPE(TypeTag, PressureModel);
@@ -70,10 +71,10 @@ public:
      * \param timeManager the time manager
      * \param gridView The grid view
      */
-    DiffusionProblem2P(TimeManager &timeManager, const GridView &gridView)
-    : ParentType(timeManager, gridView), gravity_(0)
+    DiffusionProblem2P(TimeManager& timeManager, Grid& grid)
+    : ParentType(timeManager, grid), gravity_(0)
     {
-        spatialParams_ = std::make_shared<SpatialParams>(gridView);
+        spatialParams_ = std::make_shared<SpatialParams>(grid.leafGridView());
         gravity_ = 0;
         if (getParam<bool>("Problem.EnableGravity"))
             gravity_[dim - 1] = -9.81;
@@ -87,8 +88,8 @@ public:
      * \param gridView The grid view
      * \param spatialParams SpatialParams instantiation
      */
-    DiffusionProblem2P(TimeManager &timeManager, const GridView &gridView, SpatialParams &spatialParams)
-    : ParentType(timeManager, gridView), gravity_(0)
+    DiffusionProblem2P(TimeManager& timeManager, Grid& grid, SpatialParams& spatialParams)
+    : ParentType(timeManager, grid), gravity_(0)
     {
         spatialParams_ = Dune::stackobject_to_shared_ptr<SpatialParams>(spatialParams);
         gravity_ = 0;
@@ -103,10 +104,10 @@ public:
      *
      * \param gridView The grid view
      */
-    DiffusionProblem2P(const GridView &gridView)
-    : ParentType(gridView, false), gravity_(0)
+    DiffusionProblem2P(Grid& grid)
+    : ParentType(grid, false), gravity_(0)
     {
-        spatialParams_ = std::make_shared<SpatialParams>(gridView);
+        spatialParams_ = std::make_shared<SpatialParams>(grid.leafGridView());
         gravity_ = 0;
         if (getParam<bool>("Problem.EnableGravity"))
             gravity_[dim - 1] = -9.81;
@@ -119,8 +120,8 @@ public:
      * \param gridView The grid view
      * \param spatialParams SpatialParams instantiation
      */
-    DiffusionProblem2P(const GridView &gridView, SpatialParams &spatialParams)
-    : ParentType(gridView, false), gravity_(0)
+    DiffusionProblem2P(Grid& grid, SpatialParams& spatialParams)
+    : ParentType(grid, false), gravity_(0)
     {
         spatialParams_ = Dune::stackobject_to_shared_ptr<SpatialParams>(spatialParams);
         gravity_ = 0;
diff --git a/dumux/porousmediumflow/2p/sequential/impes/problem.hh b/dumux/porousmediumflow/2p/sequential/impes/problem.hh
index b4dd8f660737cdbde08c5fac8a4b5fc73f9afd84..c818202444cefab8cbee63c7b7aea05c1f4d5ca1 100644
--- a/dumux/porousmediumflow/2p/sequential/impes/problem.hh
+++ b/dumux/porousmediumflow/2p/sequential/impes/problem.hh
@@ -73,11 +73,11 @@ public:
      * \param timeManager The time manager
      * \param gridView The grid view
      */
-    IMPESProblem2P(TimeManager &timeManager, const GridView &gridView)
-        : ParentType(timeManager, gridView),
+    IMPESProblem2P(TimeManager& timeManager, Grid& grid)
+        : ParentType(timeManager, grid),
         gravity_(0)
     {
-        spatialParams_ = std::make_shared<SpatialParams>(gridView);
+        spatialParams_ = std::make_shared<SpatialParams>(grid.leafGridView());
 
         gravity_ = 0;
         if (getParam<bool>("Problem.EnableGravity"))
@@ -90,8 +90,8 @@ public:
      * \param gridView The grid view
      * \param spatialParams SpatialParams instantiation
      */
-    IMPESProblem2P(TimeManager &timeManager, const GridView &gridView, SpatialParams &spatialParams)
-        : ParentType(timeManager, gridView),
+    IMPESProblem2P(TimeManager& timeManager, Grid& grid, SpatialParams& spatialParams)
+        : ParentType(timeManager, grid),
         gravity_(0)
     {
         spatialParams_ = Dune::stackobject_to_shared_ptr<SpatialParams>(spatialParams);
diff --git a/dumux/porousmediumflow/2p/sequential/transport/problem.hh b/dumux/porousmediumflow/2p/sequential/transport/problem.hh
index 884186c5ce27325a5b9c6c321b684b256cd2adcc..9976e09885479a19eb0654fef39722b00e788cbb 100644
--- a/dumux/porousmediumflow/2p/sequential/transport/problem.hh
+++ b/dumux/porousmediumflow/2p/sequential/transport/problem.hh
@@ -92,13 +92,13 @@ public:
      * \param timeManager The time manager
      * \param gridView The grid view
      */
-    TransportProblem2P(TimeManager& timeManager, const GridView &gridView)
-        : ParentType(timeManager, gridView),
+    TransportProblem2P(TimeManager& timeManager, Grid& grid)
+        : ParentType(timeManager, grid),
         gravity_(0)
     {
         cFLFactor_ = getParam<Scalar>("Impet.CFLFactor");
 
-        spatialParams_ = std::make_shared<SpatialParams>(gridView);
+        spatialParams_ = std::make_shared<SpatialParams>(grid.leafGridView());
 
         gravity_ = 0;
         if (getParam<bool>("Problem.EnableGravity"))
@@ -112,8 +112,8 @@ public:
      * \param gridView The grid view
      * \param spatialParams SpatialParams instantiation
      */
-    TransportProblem2P(TimeManager &timeManager, const GridView &gridView, SpatialParams &spatialParams)
-        : ParentType(timeManager, gridView),
+    TransportProblem2P(TimeManager& timeManager, Grid& grid, SpatialParams& spatialParams)
+        : ParentType(timeManager, grid),
         gravity_(0)
     {
         cFLFactor_ = getParam<Scalar>("Impet.CFLFactor");
diff --git a/dumux/porousmediumflow/2p2c/sequential/problem.hh b/dumux/porousmediumflow/2p2c/sequential/problem.hh
index 591480f7b0abf67af06f9764922ad09e5284d386..8d102b66dbcd12598a7e65139d65760de19b8b72 100644
--- a/dumux/porousmediumflow/2p2c/sequential/problem.hh
+++ b/dumux/porousmediumflow/2p2c/sequential/problem.hh
@@ -73,8 +73,8 @@ public:
      * \param timeManager The time manager
      * \param gridView The grid view
      */
-    IMPETProblem2P2C(TimeManager &timeManager, const GridView &gridView)
-        : ParentType(timeManager, gridView)
+    IMPETProblem2P2C(TimeManager &timeManager, Grid& grid)
+        : ParentType(timeManager, grid)
     { }
     /*!
      * \brief The constructor for given spatialParams
@@ -86,11 +86,8 @@ public:
      * \param gridView The grid view
      * \param spatialParams SpatialParams instantiation
      */
-    IMPETProblem2P2C(TimeManager &timeManager, const GridView &gridView, SpatialParams &spatialParams)
-        : ParentType(timeManager, gridView, spatialParams)
-    { }
-
-    virtual ~IMPETProblem2P2C()
+    IMPETProblem2P2C(TimeManager &timeManager, Grid& grid, SpatialParams &spatialParams)
+        : ParentType(timeManager, grid, spatialParams)
     { }
 
     /*!
diff --git a/dumux/porousmediumflow/sequential/impetproblem.hh b/dumux/porousmediumflow/sequential/impetproblem.hh
index a682b8283be3330e53dc62e9c8a0972e6f2094b9..62a2fea7c4064ccbe386cae44c324bfb517c7ce1 100644
--- a/dumux/porousmediumflow/sequential/impetproblem.hh
+++ b/dumux/porousmediumflow/sequential/impetproblem.hh
@@ -96,23 +96,23 @@ public:
      * \param timeManager The time manager
      * \param gridView gridview to the grid.
      */
-    IMPETProblem(TimeManager &timeManager, const GridView &gridView)
-        : gridView_(gridView),
+    IMPETProblem(TimeManager &timeManager, Grid& grid)
+        : gridView_(grid.leafGridView()),
           grid_(nullptr),
           bBoxMin_(std::numeric_limits<double>::max()),
           bBoxMax_(-std::numeric_limits<double>::max()),
           timeManager_(&timeManager),
-          variables_(gridView),
+          variables_(grid.leafGridView()),
           outputInterval_(1),
           outputTimeInterval_(0.0),
           vtkOutputLevel_(-1)
     {
-        setGrid(GridCreator::grid());
+        setGrid(grid);
 
         // calculate the bounding box of the grid view
         using std::min;
         using std::max;
-        for (const auto& vertex : vertices(gridView)) {
+        for (const auto& vertex : vertices(grid.leafGridView())) {
             for (int i=0; i<dim; i++) {
                 bBoxMin_[i] = min(bBoxMin_[i], vertex.geometry().center()[i]);
                 bBoxMax_[i] = max(bBoxMax_[i], vertex.geometry().center()[i]);
@@ -120,10 +120,10 @@ public:
         }
 
         // communicate to get the bounding box of the whole domain
-        if (gridView.comm().size() > 1)
+        if (grid.leafGridView().comm().size() > 1)
             for (int i = 0; i < dim; ++i) {
-                bBoxMin_[i] = gridView.comm().min(bBoxMin_[i]);
-                bBoxMax_[i] = gridView.comm().max(bBoxMax_[i]);
+                bBoxMin_[i] = grid.leafGridView().comm().min(bBoxMin_[i]);
+                bBoxMax_[i] = grid.leafGridView().comm().max(bBoxMax_[i]);
             }
 
         pressModel_ = std::make_shared<PressureModel>(asImp_());
diff --git a/dumux/porousmediumflow/sequential/onemodelproblem.hh b/dumux/porousmediumflow/sequential/onemodelproblem.hh
index ab1c4fcec4c888ea077e33514f9b57483958eda1..620d3e0b27eecbbe17724e7f74b489b76246a34b 100644
--- a/dumux/porousmediumflow/sequential/onemodelproblem.hh
+++ b/dumux/porousmediumflow/sequential/onemodelproblem.hh
@@ -45,6 +45,7 @@ class OneModelProblem
 private:
     using Implementation = typename GET_PROP_TYPE(TypeTag, Problem);
     using GridView = typename GET_PROP_TYPE(TypeTag, GridView);
+    using Grid = typename GridView::Grid;
 
     using TimeManager = typename GET_PROP_TYPE(TypeTag, TimeManager);
 
@@ -88,18 +89,18 @@ public:
      *  \tparam TypeTag The TypeTag
      *  \tparam verbose Output level for TimeManager
      */
-    OneModelProblem(const GridView &gridView, bool verbose = true)
-        : gridView_(gridView),
+    OneModelProblem(Grid& grid, bool verbose = true)
+        : gridView_(grid.leafGridView()),
           bBoxMin_(std::numeric_limits<double>::max()),
           bBoxMax_(-std::numeric_limits<double>::max()),
-          variables_(gridView),
+          variables_(grid.leafGridView()),
           outputInterval_(1),
           outputTimeInterval_(0)
     {
         // calculate the bounding box of the grid view
         using std::max;
         using std::min;
-        for (const auto& vertex : vertices(gridView)) {
+        for (const auto& vertex : vertices(grid.leafGridView())) {
             for (int i=0; i<dim; i++) {
                 bBoxMin_[i] = min(bBoxMin_[i], vertex.geometry().center()[i]);
                 bBoxMax_[i] = max(bBoxMax_[i], vertex.geometry().center()[i]);
@@ -117,18 +118,18 @@ public:
      *  \tparam TypeTag The TypeTag
      *  \tparam verbose Output level for TimeManager
      */
-    OneModelProblem(TimeManager &timeManager, const GridView &gridView)
-        : gridView_(gridView),
+    OneModelProblem(TimeManager& timeManager, Grid& grid)
+        : gridView_(grid.leafGridView()),
           bBoxMin_(std::numeric_limits<double>::max()),
           bBoxMax_(-std::numeric_limits<double>::max()),
-          variables_(gridView),
+          variables_(grid.leafGridView()),
           outputInterval_(1),
           outputTimeInterval_(0)
     {
         // calculate the bounding box of the grid view
         using std::max;
         using std::min;
-        for (const auto& vertex : vertices(gridView)) {
+        for (const auto& vertex : vertices(grid.leafGridView())) {
             for (int i=0; i<dim; i++) {
                 bBoxMin_[i] = min(bBoxMin_[i], vertex.geometry().center()[i]);
                 bBoxMax_[i] = max(bBoxMax_[i], vertex.geometry().center()[i]);
diff --git a/test/porousmediumflow/1p/sequential/test_1pproblem.hh b/test/porousmediumflow/1p/sequential/test_1pproblem.hh
index f09512ec768ce938e9923ee89afe213b14b944cf..49de281104e203350e9ff101682acb92c33e1333 100644
--- a/test/porousmediumflow/1p/sequential/test_1pproblem.hh
+++ b/test/porousmediumflow/1p/sequential/test_1pproblem.hh
@@ -75,6 +75,7 @@ class TestProblemOneP: public DiffusionProblem1P<TypeTag >
     using TimeManager = typename GET_PROP_TYPE(TypeTag, TimeManager);
 
     using GridView = typename GET_PROP_TYPE(TypeTag, GridView);
+    using Grid = typename GridView::Grid;
 
     using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem);
 
@@ -92,12 +93,11 @@ class TestProblemOneP: public DiffusionProblem1P<TypeTag >
     using Intersection = typename GridView::Intersection;
     using GlobalPosition = Dune::FieldVector<Scalar, dimWorld>;
     using LocalPosition = Dune::FieldVector<Scalar, dim>;
-    using GridCreator = typename GET_PROP_TYPE(TypeTag, GridCreator);
 
 
 public:
-    TestProblemOneP(TimeManager &timeManager, const GridView &gridView) :
-        ParentType(gridView), velocity_(*this)
+    TestProblemOneP(TimeManager& timeManager, Grid& grid) :
+        ParentType(grid), velocity_(*this)
     {
         delta_ = getParam<Scalar>("Problem.Delta", 1e-3);
 
diff --git a/test/porousmediumflow/1p/sequential/test_diffusion.cc b/test/porousmediumflow/1p/sequential/test_diffusion.cc
index 0a5ee3a48849096d7ea218c01e1de31661a64d4a..e8e5c19d98528a35eb7c2d09174436750d64e6df 100644
--- a/test/porousmediumflow/1p/sequential/test_diffusion.cc
+++ b/test/porousmediumflow/1p/sequential/test_diffusion.cc
@@ -73,7 +73,7 @@ int main(int argc, char** argv)
         bool consecutiveNumbering = true;
 
         using FVProblem = GET_PROP_TYPE(TTAG(FVVelocity2PTestTypeTag), Problem);
-        FVProblem fvProblem(grid.leafGridView());
+        FVProblem fvProblem(grid);
         fvProblem.setName("fvdiffusion");
         timer.reset();
         fvProblem.init();
@@ -84,7 +84,7 @@ int main(int argc, char** argv)
         fvResult.evaluate(grid.leafGridView(), fvProblem, consecutiveNumbering);
 
         using MPFAOProblem = GET_PROP_TYPE(TTAG(FVMPFAOVelocity2PTestTypeTag), Problem);
-        MPFAOProblem mpfaProblem(grid.leafGridView());
+        MPFAOProblem mpfaProblem(grid);
         mpfaProblem.setName("fvmpfaodiffusion");
         timer.reset();
         mpfaProblem.init();
@@ -94,7 +94,7 @@ int main(int argc, char** argv)
         mpfaResult.evaluate(grid.leafGridView(), mpfaProblem, consecutiveNumbering);
 
         using MimeticProblem = GET_PROP_TYPE(TTAG(MimeticPressure2PTestTypeTag), Problem);
-        MimeticProblem mimeticProblem(grid.leafGridView());
+        MimeticProblem mimeticProblem(grid);
         mimeticProblem.setName("mimeticdiffusion");
         timer.reset();
         mimeticProblem.init();
diff --git a/test/porousmediumflow/1p/sequential/test_diffusion3d.cc b/test/porousmediumflow/1p/sequential/test_diffusion3d.cc
index f898e771bac6732babb0a851f31d265ed6c4500b..def411851314dff7b96a726f208ee874605e392e 100644
--- a/test/porousmediumflow/1p/sequential/test_diffusion3d.cc
+++ b/test/porousmediumflow/1p/sequential/test_diffusion3d.cc
@@ -116,7 +116,7 @@ int start(int argc,
     auto fvDefaultParams = [] (Dune::ParameterTree& p) {GET_PROP(FVTypeTag, ModelDefaultParameters)::defaultParams(p);};
     Dumux::Parameters::init(argc, argv, fvDefaultParams, usage);
 
-    std::shared_ptr<FVProblem> fvProblem = std::make_shared<FVProblem>(grid.leafGridView());
+    std::shared_ptr<FVProblem> fvProblem = std::make_shared<FVProblem>(grid);
     // set output name
     std::string fvOutput = "test_diffusion3d_fv" + outputName;
     if (numRefine > 0)
@@ -144,7 +144,7 @@ int start(int argc,
     auto mpfalDefaultParams = [] (Dune::ParameterTree& p) {GET_PROP(MPFALTypeTag, ModelDefaultParameters)::defaultParams(p);};
     Dumux::Parameters::init(argc, argv, mpfalDefaultParams, usage);
 
-    std::shared_ptr<MPFALProblem> mpfaProblem = std::make_shared<MPFALProblem>(grid.leafGridView());
+    std::shared_ptr<MPFALProblem> mpfaProblem = std::make_shared<MPFALProblem>(grid);
     // set output name
     std::string fvmpfaOutput = "test_diffusion3d_fvmpfal" + outputName;
     if (numRefine > 0)
@@ -172,7 +172,7 @@ int start(int argc,
     auto mimeticDefaultParams = [] (Dune::ParameterTree& p) {GET_PROP(MimeticTypeTag, ModelDefaultParameters)::defaultParams(p);};
     Dumux::Parameters::init(argc, argv, mimeticDefaultParams, usage);
 
-    std::shared_ptr<MimeticProblem> mimeticProblem = std::make_shared<MimeticProblem>(grid.leafGridView());
+    std::shared_ptr<MimeticProblem> mimeticProblem = std::make_shared<MimeticProblem>(grid);
     // set output name
     std::string mimeticOutput = "test_diffusion3d_mimetic" + outputName;
     if (numRefine > 0)
diff --git a/test/porousmediumflow/1p/sequential/test_diffusionproblem.hh b/test/porousmediumflow/1p/sequential/test_diffusionproblem.hh
index 9345782c5b17ed8c2446bfaa1839803a8e7e956f..c7ab75b3b079874fc2524be2b29685304b36e03d 100644
--- a/test/porousmediumflow/1p/sequential/test_diffusionproblem.hh
+++ b/test/porousmediumflow/1p/sequential/test_diffusionproblem.hh
@@ -114,6 +114,7 @@ class TestDiffusionProblem: public DiffusionProblem2P<TypeTag>
 {
     using ParentType = DiffusionProblem2P<TypeTag>;
     using GridView = typename GET_PROP_TYPE(TypeTag, GridView);
+    using Grid = typename GridView::Grid;
 
     using Indices = typename GET_PROP_TYPE(TypeTag, Indices);
 
@@ -144,8 +145,8 @@ public:
     using PrimaryVariables = typename SolutionTypes::PrimaryVariables;
     using ScalarSolution = typename SolutionTypes::ScalarSolution;
 
-    TestDiffusionProblem(const GridView &gridView) :
-        ParentType(gridView), velocity_(*this)
+    TestDiffusionProblem(Grid& grid) :
+        ParentType(grid), velocity_(*this)
     {
         delta_ = getParam<Scalar>("Problem.Delta", 1e-3);
     }
diff --git a/test/porousmediumflow/1p/sequential/test_diffusionproblem3d.hh b/test/porousmediumflow/1p/sequential/test_diffusionproblem3d.hh
index e65a5a23b943d602be3cbca35b5511bdbdf4a2fc..3e8873b7e0ad718df54200d6dae6a1bcdf7575a9 100644
--- a/test/porousmediumflow/1p/sequential/test_diffusionproblem3d.hh
+++ b/test/porousmediumflow/1p/sequential/test_diffusionproblem3d.hh
@@ -98,6 +98,7 @@ class TestDiffusion3DProblem: public DiffusionProblem2P<TypeTag>
 {
     using ParentType = DiffusionProblem2P<TypeTag>;
     using GridView = typename GET_PROP_TYPE(TypeTag, GridView);
+    using Grid = typename GridView::Grid;
 
     using Indices = typename GET_PROP_TYPE(TypeTag, Indices);
 
@@ -131,8 +132,8 @@ public:
     using PrimaryVariables = typename SolutionTypes::PrimaryVariables;
     using ScalarSolution = typename SolutionTypes::ScalarSolution;
 
-    TestDiffusion3DProblem(const GridView &gridView) :
-        ParentType(gridView), velocity_(*this)
+    TestDiffusion3DProblem(Grid& grid) :
+        ParentType(grid), velocity_(*this)
     { }
 
     //!for this specific problem: initialize the saturation and afterwards the model
diff --git a/test/porousmediumflow/2p/sequential/test_3d2pproblem.hh b/test/porousmediumflow/2p/sequential/test_3d2pproblem.hh
index 2b8276defc8553112e3e87bc532f3b8dffb6b66d..5653132448b9c88e9adf41af0456dc8de9883087 100644
--- a/test/porousmediumflow/2p/sequential/test_3d2pproblem.hh
+++ b/test/porousmediumflow/2p/sequential/test_3d2pproblem.hh
@@ -123,6 +123,7 @@ class Test3D2PProblem: public IMPESProblem2P<TypeTag>
 using ThisType = Test3D2PProblem<TypeTag>;
 using ParentType = IMPESProblem2P<TypeTag>;
 using GridView = typename GET_PROP_TYPE(TypeTag, GridView);
+using Grid = typename GridView::Grid;
 
 using Indices = typename GET_PROP_TYPE(TypeTag, Indices);
 
@@ -162,21 +163,21 @@ using LocalPosition = Dune::FieldVector<Scalar, dim>;
 
 public:
 
-Test3D2PProblem(TimeManager &timeManager,const GridView &gridView) :
-ParentType(timeManager, gridView), inflowEdge_(0), outflowEdge_(0)
+Test3D2PProblem(TimeManager& timeManager, Grid& grid) :
+ParentType(timeManager, grid), inflowEdge_(0), outflowEdge_(0)
 {
     int refinementFactor = 0;
     if (haveParam("Grid.RefinementFactor") && !GET_PROP_VALUE(TypeTag, AdaptiveGrid))
     {
         refinementFactor = getParam<Scalar>("Grid.RefinementFactor");
-        this->grid().globalRefine(refinementFactor);
+        grid.globalRefine(refinementFactor);
     }
 
     Scalar minDist = this->bBoxMax().two_norm();
     Scalar maxDist = this->bBoxMin().two_norm();
 
     // calculate the bounding box of the grid view
-    for (const auto& vertex : vertices(gridView)) {
+    for (const auto& vertex : vertices(grid.leafGridView())) {
         GlobalPosition vertexCoord(vertex.geometry().center());
 
         Scalar dist = vertexCoord.two_norm();
diff --git a/test/porousmediumflow/2p/sequential/test_impesadaptiveproblem.hh b/test/porousmediumflow/2p/sequential/test_impesadaptiveproblem.hh
index f2164bdf2efaad66a3a8474f3599bd07eb3aba25..bbdee48a6d0ac7779409d3f45d1f1e029c341fa6 100644
--- a/test/porousmediumflow/2p/sequential/test_impesadaptiveproblem.hh
+++ b/test/porousmediumflow/2p/sequential/test_impesadaptiveproblem.hh
@@ -119,15 +119,15 @@ class TestIMPESAdaptiveProblem: public IMPESProblem2P<TypeTag>
     using GridCreator = typename GET_PROP_TYPE(TypeTag, GridCreator);
 
 public:
-    TestIMPESAdaptiveProblem(TimeManager &timeManager, const GridView &gridView) :
-            ParentType(timeManager, gridView)
+    TestIMPESAdaptiveProblem(TimeManager &timeManager, Grid& grid) :
+            ParentType(timeManager, grid)
     {
         name_ = getParam<std::string>("Problem.Name");
 
         // Refine the grid provided that no restart occurs. Otherwise, an
         // already refined grid will be read.
         if (!(haveParam("Restart") || haveParam("TimeManager.Restart")))
-            GridCreator::grid().globalRefine(getParam<int>("GridAdapt.MaxLevel"));
+            grid.globalRefine(getParam<int>("GridAdapt.MaxLevel"));
 
         this->setOutputInterval(10);
     }
diff --git a/test/porousmediumflow/2p/sequential/test_impesproblem.hh b/test/porousmediumflow/2p/sequential/test_impesproblem.hh
index 783c0fcd557bedc2d802479ff136215ed6511cae..db3619a784e1034db4a4ebc94e1d8ee3df99ef06 100644
--- a/test/porousmediumflow/2p/sequential/test_impesproblem.hh
+++ b/test/porousmediumflow/2p/sequential/test_impesproblem.hh
@@ -121,6 +121,7 @@ class IMPESTestProblem: public IMPESProblem2P<TypeTag>
 {
 using ParentType = IMPESProblem2P<TypeTag>;
 using GridView = typename GET_PROP_TYPE(TypeTag, GridView);
+using Grid = typename GridView::Grid;
 
 using Indices = typename GET_PROP_TYPE(TypeTag, Indices);
 
@@ -149,11 +150,11 @@ using GlobalPosition = Dune::FieldVector<Scalar, dimWorld>;
 
 using BoundaryTypes = typename GET_PROP_TYPE(TypeTag, BoundaryTypes);
 using SolutionTypes = typename GET_PROP(TypeTag, SolutionTypes);
-    using PrimaryVariables = typename SolutionTypes::PrimaryVariables;
+using PrimaryVariables = typename SolutionTypes::PrimaryVariables;
 
 public:
-IMPESTestProblem(TimeManager &timeManager, const GridView &gridView) :
-ParentType(timeManager, gridView)
+IMPESTestProblem(TimeManager &timeManager, Grid &grid) :
+ParentType(timeManager, grid)
 {
     name_ = getParam<std::string>("Problem.Name");
 }
diff --git a/test/porousmediumflow/2p/sequential/test_mpfa2pproblem.hh b/test/porousmediumflow/2p/sequential/test_mpfa2pproblem.hh
index 8d27847030e2f851dcb5f09ad789656d4f0b0de1..f55d541276d311f5bd540e88678cadb5e8de1ae2 100644
--- a/test/porousmediumflow/2p/sequential/test_mpfa2pproblem.hh
+++ b/test/porousmediumflow/2p/sequential/test_mpfa2pproblem.hh
@@ -125,6 +125,7 @@ class MPFATwoPTestProblem: public IMPESProblem2P<TypeTag>
 {
 using ParentType = IMPESProblem2P<TypeTag>;
 using GridView = typename GET_PROP_TYPE(TypeTag, GridView);
+using Grid = typename GridView::Grid;
 
 using Indices = typename GET_PROP_TYPE(TypeTag, Indices);
 
@@ -160,8 +161,8 @@ using Element = typename GridView::Traits::template Codim<0>::Entity;
 using GlobalPosition = Dune::FieldVector<Scalar, dimWorld>;
 
 public:
-MPFATwoPTestProblem(TimeManager &timeManager,const GridView &gridView) :
-ParentType(timeManager, gridView)
+MPFATwoPTestProblem(TimeManager &timeManager, Grid &grid) :
+ParentType(timeManager, grid)
 #if PROBLEM != 2
 , analyticSolution_(*this)
 #endif
diff --git a/test/porousmediumflow/2p/sequential/test_transportproblem.hh b/test/porousmediumflow/2p/sequential/test_transportproblem.hh
index 02906a30ed9b78d4002e19edcef4818c1379d3ae..6c992f29a3feef8f14a010344dbb340a6e09720e 100644
--- a/test/porousmediumflow/2p/sequential/test_transportproblem.hh
+++ b/test/porousmediumflow/2p/sequential/test_transportproblem.hh
@@ -89,6 +89,7 @@ class TestTransportProblem: public TransportProblem2P<TypeTag>
 {
     using ParentType = TransportProblem2P<TypeTag>;
     using GridView = typename GET_PROP_TYPE(TypeTag, GridView);
+    using Grid = typename GridView::Grid;
 
     using Indices = typename GET_PROP_TYPE(TypeTag, Indices);
 
@@ -114,8 +115,8 @@ class TestTransportProblem: public TransportProblem2P<TypeTag>
     using GlobalPosition = Dune::FieldVector<Scalar, dimWorld>;
 
 public:
-    TestTransportProblem(TimeManager &timeManager, const GridView &gridView) :
-        ParentType(timeManager, gridView)
+    TestTransportProblem(TimeManager& timeManager, Grid& grid) :
+        ParentType(timeManager, grid)
     {}
 
 
diff --git a/test/porousmediumflow/2p2c/sequential/test_adaptive2p2c2dproblem.hh b/test/porousmediumflow/2p2c/sequential/test_adaptive2p2c2dproblem.hh
index 92f3cdcc3f5c612bd30a2ae6c7928d207cef2e89..082b1c235cfb06adfac779320d56f9465ed216f9 100644
--- a/test/porousmediumflow/2p2c/sequential/test_adaptive2p2c2dproblem.hh
+++ b/test/porousmediumflow/2p2c/sequential/test_adaptive2p2c2dproblem.hh
@@ -127,9 +127,9 @@ using Intersection = typename GridView::Intersection;
 using GlobalPosition = Dune::FieldVector<Scalar, dimWorld>;
 
 public:
-Adaptive2p2c2d(TimeManager &timeManager, const GridView& gridView) :
-    ParentType(timeManager, gridView),
-            debugWriter_(gridView, "gridAfterAdapt")
+Adaptive2p2c2d(TimeManager& timeManager, Grid& grid)
+: ParentType(timeManager, grid)
+, debugWriter_(grid.leafGridView(), "gridAfterAdapt")
 {
     this->setName(getParam<std::string>("Problem.SimulationName"));
     this->setOutputInterval(getParam<int>("Problem.OutputInterval"));
diff --git a/test/porousmediumflow/2p2c/sequential/test_adaptive2p2c3dproblem.hh b/test/porousmediumflow/2p2c/sequential/test_adaptive2p2c3dproblem.hh
index 8b02ac4e1b466371028b8d36a389b2d97216da37..2eb98f8c913e10f06c5f186dfb7ad647c305d90d 100644
--- a/test/porousmediumflow/2p2c/sequential/test_adaptive2p2c3dproblem.hh
+++ b/test/porousmediumflow/2p2c/sequential/test_adaptive2p2c3dproblem.hh
@@ -102,7 +102,6 @@ class Adaptive2p2c3d: public IMPETProblem2P2C<TypeTag>
 using ParentType = IMPETProblem2P2C<TypeTag>;
 using GridView = typename GET_PROP_TYPE(TypeTag, GridView);
 using Grid = typename GET_PROP_TYPE(TypeTag, Grid);
-using GridCreator = typename GET_PROP_TYPE(TypeTag, GridCreator);
 using TimeManager = typename GET_PROP_TYPE(TypeTag, TimeManager);
 
 using Indices = typename GET_PROP_TYPE(TypeTag, Indices);
@@ -128,11 +127,11 @@ using Intersection = typename GridView::Intersection;
 using GlobalPosition = Dune::FieldVector<Scalar, dimWorld>;
 
 public:
-Adaptive2p2c3d(TimeManager &timeManager, const GridView& gridView) :
-    ParentType(timeManager, gridView),
-            debugWriter_(gridView, "gridAfterAdapt")
+Adaptive2p2c3d(TimeManager& timeManager, Grid& grid) :
+    ParentType(timeManager, grid),
+            debugWriter_(grid.leafGridView(), "gridAfterAdapt")
 {
-    GridCreator::grid().globalRefine(getParam<int>("GridAdapt.MaxLevel"));
+    grid.globalRefine(getParam<int>("GridAdapt.MaxLevel"));
 
     //Process parameter file
     //Simulation Control
diff --git a/test/porousmediumflow/2p2c/sequential/test_dec2p2cproblem.hh b/test/porousmediumflow/2p2c/sequential/test_dec2p2cproblem.hh
index 3d57ec0452717e6bbe0afede2416eb83f7afcd35..df5951d233acce4be591178092d057861aa6d998 100644
--- a/test/porousmediumflow/2p2c/sequential/test_dec2p2cproblem.hh
+++ b/test/porousmediumflow/2p2c/sequential/test_dec2p2cproblem.hh
@@ -89,6 +89,7 @@ class TestDecTwoPTwoCProblem: public IMPETProblem2P2C<TypeTag>
 {
 using ParentType = IMPETProblem2P2C<TypeTag>;
 using GridView = typename GET_PROP_TYPE(TypeTag, GridView);
+using Grid = typename GridView::Grid;
 using TimeManager = typename GET_PROP_TYPE(TypeTag, TimeManager);
 using Indices = typename GET_PROP_TYPE(TypeTag, Indices);
 
@@ -109,8 +110,8 @@ using Intersection = typename GridView::Intersection;
 using GlobalPosition = Dune::FieldVector<Scalar, dimWorld>;
 
 public:
-TestDecTwoPTwoCProblem(TimeManager &timeManager, const GridView &gridView) :
-ParentType(timeManager, gridView), depthBOR_(1000.0)
+TestDecTwoPTwoCProblem(TimeManager& timeManager, Grid& grid) :
+ParentType(timeManager, grid), depthBOR_(1000.0)
 {}
 
 /*!
diff --git a/test/porousmediumflow/2p2c/sequential/test_multiphysics2p2c.cc b/test/porousmediumflow/2p2c/sequential/test_multiphysics2p2c.cc
index 38c24d8338f743b8a66a1efcd2c6c93aa4a9a203..6c1c79d9afaa24044ee5990f42df7a9f70b57ad1 100644
--- a/test/porousmediumflow/2p2c/sequential/test_multiphysics2p2c.cc
+++ b/test/porousmediumflow/2p2c/sequential/test_multiphysics2p2c.cc
@@ -103,7 +103,7 @@ int main(int argc, char** argv)
         // instantiate and run the concrete problem
         ////////////////////////////////////////////////////////////
         TimeManager timeManager;
-        Problem problem(timeManager, grid.leafGridView(), H);
+        Problem problem(timeManager, grid, H);
 
         // initialize the simulation
         timeManager.init(problem, startTime, firstDt, tEnd, restart);
diff --git a/test/porousmediumflow/2p2c/sequential/test_multiphysics2p2cproblem.hh b/test/porousmediumflow/2p2c/sequential/test_multiphysics2p2cproblem.hh
index 6b9e093b22e2936d93f5de73800269ddfe7afc5c..aab374b187663f702ef152e51f4cc9d57d6b4cf6 100644
--- a/test/porousmediumflow/2p2c/sequential/test_multiphysics2p2cproblem.hh
+++ b/test/porousmediumflow/2p2c/sequential/test_multiphysics2p2cproblem.hh
@@ -96,6 +96,7 @@ class TestMultTwoPTwoCProblem: public IMPETProblem2P2C<TypeTag>
 {
 using ParentType = IMPETProblem2P2C<TypeTag>;
 using GridView = typename GET_PROP_TYPE(TypeTag, GridView);
+using Grid = typename GridView::Grid;
 using TimeManager = typename GET_PROP_TYPE(TypeTag, TimeManager);
 using Indices = typename GET_PROP_TYPE(TypeTag, Indices);
 
@@ -116,8 +117,8 @@ using Intersection = typename GridView::Intersection;
 using GlobalPosition = Dune::FieldVector<Scalar, dimWorld>;
 
 public:
-TestMultTwoPTwoCProblem(TimeManager &timeManager, const GridView &gridView, const GlobalPosition upperRight = 0) :
-ParentType(timeManager, gridView), lowerLeft_(0), upperRight_(upperRight), depthBOR_(1000.0)
+TestMultTwoPTwoCProblem(TimeManager &timeManager, Grid &grid, const GlobalPosition& upperRight = 0) :
+ParentType(timeManager, grid), lowerLeft_(0), upperRight_(upperRight), depthBOR_(1000.0)
 {}
 
 /*!