diff --git a/dumux/io/artgridcreator.hh b/dumux/io/artgridcreator.hh
index 68c71f193d3238e1dc914d7e5c1dc187d0350cb4..71394360215854798a61eeb9026f062bda3c2bcc 100644
--- a/dumux/io/artgridcreator.hh
+++ b/dumux/io/artgridcreator.hh
@@ -337,7 +337,7 @@ public:
             }
         }
 
-        grid_ = factory.createGrid();
+        gridPtr() = factory.createGrid();
     }
     
     static void outputARTtoScreen()
@@ -398,7 +398,16 @@ public:
      */
     static Grid &grid()
     {
-        return *grid_;
+        return *gridPtr();
+    }
+
+    /*!
+     * \brief Returns a reference to the shared pointer to the grid.
+     */
+    static GridPointer &gridPtr()
+    {
+        static GridPointer grid;
+        return grid;
     }
 
     /*!
@@ -407,7 +416,7 @@ public:
      */
     static void loadBalance()
     {
-        grid_->loadBalance();
+        gridPtr()->loadBalance();
     }
 
     static int vertexNumber()
@@ -448,11 +457,8 @@ private:
     static int edgeNumber_;
     static int faceNumber_; //in 2D
     static int elementNumber_; //in 3D
-    static GridPointer grid_;
 };
 
-template <class TypeTag>
-typename Dumux::ArtGridCreator<TypeTag>::GridPointer ArtGridCreator<TypeTag>::grid_;
 template <class TypeTag>
 typename Dumux::ArtGridCreator<TypeTag>::VerticesVector ArtGridCreator<TypeTag>::vertices_;
 template <class TypeTag>
diff --git a/dumux/io/cubegridcreator.hh b/dumux/io/cubegridcreator.hh
index 51a8fa6e4c051d1f21e4a6713888c9b53ac72eac..8991d59a0db796eb2c96c7ac178b37c6c2330ef6 100644
--- a/dumux/io/cubegridcreator.hh
+++ b/dumux/io/cubegridcreator.hh
@@ -80,7 +80,7 @@ public:
             cellRes[2] = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, int, Grid, NumberOfCellsZ);
         }
 
-        cubeGrid_ = Dune::StructuredGridFactory<Grid>::createCubeGrid(lowerLeft, upperRight, cellRes);
+        gridPtr() = Dune::StructuredGridFactory<Grid>::createCubeGrid(lowerLeft, upperRight, cellRes);
     }
 
     /*!
@@ -88,7 +88,7 @@ public:
      */
     static Grid &grid()
     {
-        return *cubeGrid_;
+        return *gridPtr();
     }
 
     /*!
@@ -97,16 +97,19 @@ public:
      */
     static void loadBalance()
     {
-        cubeGrid_->loadBalance();
+        gridPtr()->loadBalance();
     }
 
-protected:
-    static GridPointer cubeGrid_;
+    /*!
+     * \brief Returns a reference to the shared pointer to the grid.
+     */
+    static GridPointer &gridPtr()
+    {
+        static GridPointer cubeGrid;
+        return cubeGrid;
+    }
 };
 
-template <class TypeTag>
-typename Dumux::CubeGridCreator<TypeTag>::GridPointer CubeGridCreator<TypeTag>::cubeGrid_;
-
 }
 
 #endif
diff --git a/dumux/io/dgfgridcreator.hh b/dumux/io/dgfgridcreator.hh
index d2cf71f392fbd958553fef6b4f5a29725f9c2ada..ff501a351c649c62abc5cdde1d5a5858709a3f4e 100644
--- a/dumux/io/dgfgridcreator.hh
+++ b/dumux/io/dgfgridcreator.hh
@@ -51,8 +51,8 @@ public:
      */
     static void makeGrid(const std::string& dgfFileName)
     {
-        gridPtr_ = GridPointer(dgfFileName.c_str(), Dune::MPIHelper::getCommunicator());
-    };
+        gridPtr() = GridPointer(dgfFileName.c_str(), Dune::MPIHelper::getCommunicator());
+    }
 
     /*!
      * \brief Load the grid from the dgf file given in the input file.
@@ -68,16 +68,15 @@ public:
      */
     static Grid &grid()
     {
-        return *gridPtr_;
+        return *gridPtr();
     }
 
     /*!
      * \brief Returns a reference to the grid pointer.
-     *
-     * This method is specific to the DgfGridCreator!
      */
     static GridPointer &gridPtr()
     {
+        static GridPointer gridPtr_;
         return gridPtr_;
     }
 
@@ -86,16 +85,10 @@ public:
      */
     static void loadBalance()
     {
-        gridPtr_.loadBalance();
+        gridPtr().loadBalance();
     }
-
-private:
-    static GridPointer gridPtr_;
 };
 
-template <class TypeTag>
-typename DgfGridCreator<TypeTag>::GridPointer DgfGridCreator<TypeTag>::gridPtr_;
-
 } // namespace Dumux
 
 #endif
diff --git a/dumux/io/simplexgridcreator.hh b/dumux/io/simplexgridcreator.hh
index de895db0509ac8278aa5122361878cdca80792d7..c5babd54b2bfac3d8b4b5662b48e371c5f235f3f 100644
--- a/dumux/io/simplexgridcreator.hh
+++ b/dumux/io/simplexgridcreator.hh
@@ -78,7 +78,7 @@ public:
             cellRes[2] = GET_RUNTIME_PARAM_FROM_GROUP(TypeTag, int, Grid, NumberOfCellsZ);
         }
 
-        simplexGrid_ = Dune::StructuredGridFactory<Grid>::createSimplexGrid(lowerLeft, upperRight, cellRes);
+        gridPtr() = Dune::StructuredGridFactory<Grid>::createSimplexGrid(lowerLeft, upperRight, cellRes);
     }
 
     /*!
@@ -86,7 +86,7 @@ public:
      */
     static Grid &grid()
     {
-        return *simplexGrid_;
+        return *gridPtr();
     }
 
     /*!
@@ -95,16 +95,19 @@ public:
      */
     static void loadBalance()
     {
-        simplexGrid_->loadBalance();
+        gridPtr()->loadBalance();
     }
 
-private:
-    static GridPointer simplexGrid_;
+    /*!
+     * \brief Returns a reference to the shared pointer to the grid.
+     */
+    static GridPointer &gridPtr()
+    {
+        static GridPointer simplexGrid;
+        return simplexGrid;
+    }
 };
 
-template <class TypeTag>
-typename SimplexGridCreator<TypeTag>::GridPointer SimplexGridCreator<TypeTag>::simplexGrid_;
-
 }
 
 #endif