diff --git a/test/porousmediumflow/1p/sequential/test_diffusion.cc b/test/porousmediumflow/1p/sequential/test_diffusion.cc
index 6682b64e968121bc38c7c5aad05a176466f529f9..91b1fc0d379afabeae9ee50959fa0f40784d9b88 100644
--- a/test/porousmediumflow/1p/sequential/test_diffusion.cc
+++ b/test/porousmediumflow/1p/sequential/test_diffusion.cc
@@ -27,7 +27,6 @@
 
 #include <dune/common/exceptions.hh>
 #include <dune/common/parallel/mpihelper.hh>
-#include <dune/grid/utility/structuredgridfactory.hh>
 
 #include "test_diffusionproblem.hh"
 #include "resultevaluation.hh"
@@ -35,6 +34,7 @@
 ////////////////////////
 // the main function
 ////////////////////////
+
 void usage(const char *progname)
 {
     std::cout << "usage: " << progname << " #refine [delta]\n";
@@ -45,10 +45,6 @@ int main(int argc, char** argv)
 {
     try {
         typedef TTAG(FVVelocity2PTestProblem) TypeTag;
-        typedef GET_PROP_TYPE(TypeTag, Scalar) Scalar;
-        typedef GET_PROP_TYPE(TypeTag, Grid) Grid;
-        static const int dim = Grid::dimension;
-        typedef Dune::FieldVector<Scalar, dim> GlobalPosition;
 
         // initialize MPI, finalize is done automatically on exit
         Dune::MPIHelper::instance(argc, argv);
@@ -69,15 +65,10 @@ int main(int argc, char** argv)
         ////////////////////////////////////////////////////////////
         // create the grid
         ////////////////////////////////////////////////////////////
-        std::array<unsigned int, dim> cellRes;
-        cellRes.fill(1);
-        GlobalPosition lowerLeft(0.0);
-        GlobalPosition upperRight(1.0);
-        static std::shared_ptr<Grid> grid
-            = Dune::StructuredGridFactory<Grid>::createCubeGrid(lowerLeft,
-                                                                upperRight,
-                                                                cellRes);
-        grid->globalRefine(numRefine);
+        using GridCreator = GET_PROP_TYPE(TypeTag, GridCreator);
+        GridCreator::createGrid();
+        auto& grid = GridCreator::grid();
+        grid.globalRefine(numRefine);
 
         ////////////////////////////////////////////////////////////
         // instantiate and run the concrete problem
@@ -86,7 +77,7 @@ int main(int argc, char** argv)
         bool consecutiveNumbering = true;
 
         typedef GET_PROP_TYPE(TTAG(FVVelocity2PTestProblem), Problem) FVProblem;
-        FVProblem fvProblem(grid->leafGridView(), delta);
+        FVProblem fvProblem(grid.leafGridView(), delta);
         fvProblem.setName("fvdiffusion");
         timer.reset();
         fvProblem.init();
@@ -94,27 +85,27 @@ int main(int argc, char** argv)
         double fvTime = timer.elapsed();
         fvProblem.writeOutput();
         Dumux::ResultEvaluation fvResult;
-        fvResult.evaluate(grid->leafGridView(), fvProblem, consecutiveNumbering);
+        fvResult.evaluate(grid.leafGridView(), fvProblem, consecutiveNumbering);
 
         typedef GET_PROP_TYPE(TTAG(FVMPFAOVelocity2PTestProblem), Problem) MPFAOProblem;
-        MPFAOProblem mpfaProblem(grid->leafGridView(), delta);
+        MPFAOProblem mpfaProblem(grid.leafGridView(), delta);
         mpfaProblem.setName("fvmpfaodiffusion");
         timer.reset();
         mpfaProblem.init();
         double mpfaTime = timer.elapsed();
         mpfaProblem.writeOutput();
         Dumux::ResultEvaluation mpfaResult;
-        mpfaResult.evaluate(grid->leafGridView(), mpfaProblem, consecutiveNumbering);
+        mpfaResult.evaluate(grid.leafGridView(), mpfaProblem, consecutiveNumbering);
 
         typedef GET_PROP_TYPE(TTAG(MimeticPressure2PTestProblem), Problem) MimeticProblem;
-        MimeticProblem mimeticProblem(grid->leafGridView(), delta);
+        MimeticProblem mimeticProblem(grid.leafGridView(), delta);
         mimeticProblem.setName("mimeticdiffusion");
         timer.reset();
         mimeticProblem.init();
         double mimeticTime = timer.elapsed();
         mimeticProblem.writeOutput();
         Dumux::ResultEvaluation mimeticResult;
-        mimeticResult.evaluate(grid->leafGridView(), mimeticProblem, consecutiveNumbering);
+        mimeticResult.evaluate(grid.leafGridView(), mimeticProblem, consecutiveNumbering);
 
         std::cout.setf(std::ios_base::scientific, std::ios_base::floatfield);
         std::cout.precision(2);
diff --git a/test/porousmediumflow/1p/sequential/test_diffusionproblem.hh b/test/porousmediumflow/1p/sequential/test_diffusionproblem.hh
index abb04a49e18e9d158fdecbb46c08fcb6ac2270c2..8164b9a80badc3c8183435100acd81d97a1851f5 100644
--- a/test/porousmediumflow/1p/sequential/test_diffusionproblem.hh
+++ b/test/porousmediumflow/1p/sequential/test_diffusionproblem.hh
@@ -25,6 +25,7 @@
 #define DUMUX_TEST_2P_PROBLEM_HH
 
 #include <dune/grid/yaspgrid.hh>
+#include <dune/grid/utility/structuredgridfactory.hh>
 
 #include <dumux/material/components/unit.hh>
 
@@ -38,6 +39,34 @@
 
 namespace Dumux
 {
+
+// A simple unit sqare grid creator
+template <class Grid>
+class UnitCubeGridCreator
+{
+public:
+    static Grid& grid()
+    {
+        return *gridPtr();
+    }
+
+    static void createGrid()
+    {
+        std::array<unsigned int, Grid::dimension> cellRes;
+        cellRes.fill(1);
+        using GlobalPosition = Dune::FieldVector<typename Grid::ctype, Grid::dimension>;
+        GlobalPosition lowerLeft(0.0);
+        GlobalPosition upperRight(1.0);
+        gridPtr() = Dune::StructuredGridFactory<Grid>::createCubeGrid(lowerLeft, upperRight, cellRes);
+    }
+private:
+    static std::shared_ptr<Grid> &gridPtr()
+    {
+        static std::shared_ptr<Grid> gridPtr_;
+        return gridPtr_;
+    }
+};
+
 /*!
  * \ingroup IMPETtests
  */
@@ -56,6 +85,9 @@ SET_TYPE_PROP(FVVelocity2PTestProblem, Problem, Dumux::TestDiffusionProblem<Type
 // Set the grid type
 SET_TYPE_PROP(FVVelocity2PTestProblem, Grid, Dune::YaspGrid<2>);
 
+SET_TYPE_PROP(FVVelocity2PTestProblem, GridCreator,
+    Dumux::UnitCubeGridCreator<typename GET_PROP_TYPE(TypeTag, Grid)>);
+
 // Set the wetting phase
 SET_PROP(FVVelocity2PTestProblem, WettingPhase)
 {
@@ -87,6 +119,9 @@ SET_TYPE_PROP(FVMPFAOVelocity2PTestProblem, Problem, Dumux::TestDiffusionProblem
 // Set the grid type
 SET_TYPE_PROP(FVMPFAOVelocity2PTestProblem, Grid, Dune::YaspGrid<2>);
 
+SET_TYPE_PROP(FVMPFAOVelocity2PTestProblem, GridCreator,
+    Dumux::UnitCubeGridCreator<typename GET_PROP_TYPE(TypeTag, Grid)>);
+
 // Set the wetting phase
 SET_PROP(FVMPFAOVelocity2PTestProblem, WettingPhase)
 {
@@ -115,6 +150,10 @@ SET_TYPE_PROP(MimeticPressure2PTestProblem, Problem, Dumux::TestDiffusionProblem
 // Set the grid type
 SET_TYPE_PROP(MimeticPressure2PTestProblem, Grid, Dune::YaspGrid<2>);
 
+SET_TYPE_PROP(MimeticPressure2PTestProblem, GridCreator,
+    Dumux::UnitCubeGridCreator<typename GET_PROP_TYPE(TypeTag, Grid)>);
+
+
 // Set the wetting phase
 SET_PROP(MimeticPressure2PTestProblem, WettingPhase)
 {