diff --git a/dune/grid/io/file/test/subsamplingvtktest.cc b/dune/grid/io/file/test/subsamplingvtktest.cc
index f59add0a3d87c1ce5e9e9d96038f62efe24979db..4c913721ae8d3d47dc42ac21dd279eed845cc2b2 100644
--- a/dune/grid/io/file/test/subsamplingvtktest.cc
+++ b/dune/grid/io/file/test/subsamplingvtktest.cc
@@ -84,7 +84,7 @@ struct Acc
 };
 
 template< class GridView >
-int doWrite( const GridView &gridView, bool coerceToSimplex)
+int doWrite( Dune::VTKChecker& vtkChecker, const std::string& gridViewName, const GridView &gridView, bool coerceToSimplex)
 {
   enum { dim = GridView :: dimension };
 
@@ -104,21 +104,21 @@ int doWrite( const GridView &gridView, bool coerceToSimplex)
   int result = 0;
   std::string name;
   std::ostringstream prefix;
-  prefix << "subsamplingvtktest-" << dim << "D-"
+  prefix << "subsamplingvtktest-" << dim << "D-" << gridViewName << "-"
          << (coerceToSimplex ? "simplex" : "natural");
   int rank = gridView.comm().rank();
 
   name = vtk.write(prefix.str() + "-ascii");
-  if(rank == 0) acc(result, checkVTKFile(name));
+  if(rank == 0) vtkChecker.push(name);
 
   name = vtk.write(prefix.str() + "-appendedraw", Dune::VTK::appendedraw);
-  if(rank == 0) acc(result, checkVTKFile(name));
+  if(rank == 0) vtkChecker.push(name);
 
   return result;
 }
 
 template<int dim>
-int vtkCheck(const std::array<int, dim>& elements,
+int vtkCheck(Dune::VTKChecker& vtkChecker, const std::array<int, dim>& elements,
               const Dune::FieldVector<double, dim>& upperRight)
 {
   Dune::YaspGrid<dim> g(upperRight, elements);
@@ -132,13 +132,13 @@ int vtkCheck(const std::array<int, dim>& elements,
 
   int result = 0;
 
-  acc(result, doWrite( g.leafGridView(), false));
-  acc(result, doWrite( g.levelGridView( 0 ), false));
-  acc(result, doWrite( g.levelGridView( g.maxLevel() ), false));
+  acc(result, doWrite( vtkChecker, "leafview", g.leafGridView(), false));
+  acc(result, doWrite( vtkChecker, "coarselevelview", g.levelGridView( 0 ), false));
+  acc(result, doWrite( vtkChecker, "finelevelview", g.levelGridView( g.maxLevel() ), false));
 
-  acc(result, doWrite( g.leafGridView(), true));
-  acc(result, doWrite( g.levelGridView( 0 ), true));
-  acc(result, doWrite( g.levelGridView( g.maxLevel() ), true));
+  acc(result, doWrite( vtkChecker, "leafview", g.leafGridView(), true));
+  acc(result, doWrite( vtkChecker, "coarselevelview", g.levelGridView( 0 ), true));
+  acc(result, doWrite( vtkChecker, "finelevelview", g.levelGridView( g.maxLevel() ), true));
 
   return result;
 }
@@ -156,9 +156,13 @@ int main(int argc, char **argv)
     int result = 0; // pass by default
     using Dune::make_array;
 
-    acc(result, vtkCheck<1>(make_array(5), {1.0}));
-    acc(result, vtkCheck<2>(make_array(5,5), {1.0, 2.0}));
-    acc(result, vtkCheck<3>(make_array(5,5,5), {1.0, 2.0, 3.0}));
+    Dune::VTKChecker vtkChecker;
+
+    acc(result, vtkCheck<1>(vtkChecker, make_array(5), {1.0}));
+    acc(result, vtkCheck<2>(vtkChecker, make_array(5,5), {1.0, 2.0}));
+    acc(result, vtkCheck<3>(vtkChecker, make_array(5,5,5), {1.0, 2.0, 3.0}));
+
+    acc(result, vtkChecker.check());
 
     mpiHelper.getCollectiveCommunication().allreduce<Acc>(&result, 1);
 
diff --git a/dune/grid/io/file/test/vtktest.cc b/dune/grid/io/file/test/vtktest.cc
index a5801feb1b47c6b3a83ea5fdb8e691bfadc17246..eb2f4c503ab3d87a383cfc906560d842d7deed7e 100644
--- a/dune/grid/io/file/test/vtktest.cc
+++ b/dune/grid/io/file/test/vtktest.cc
@@ -94,7 +94,7 @@ struct Acc
 };
 
 template< class GridView >
-int doWrite( const GridView &gridView, Dune :: VTK :: DataMode dm )
+int doWrite( Dune::VTKChecker& vtkChecker, const std::string& gridViewName, const GridView &gridView, Dune :: VTK :: DataMode dm )
 {
   enum { dim = GridView :: dimension };
 
@@ -113,27 +113,27 @@ int doWrite( const GridView &gridView, Dune :: VTK :: DataMode dm )
   int result = 0;
   std::string name;
   std::ostringstream prefix;
-  prefix << "vtktest-" << dim << "D-" << VTKDataMode(dm);
+  prefix << "vtktest-" << dim << "D-" << gridViewName << "-" << VTKDataMode(dm);
   int rank = gridView.comm().rank();
 
   name = vtk.write(prefix.str() + "-ascii");
-  if(rank == 0) acc(result, checkVTKFile(name));
+  if(rank == 0) vtkChecker.push(name);
 
   name = vtk.write(prefix.str() + "-base64", Dune::VTK::base64);
-  if(rank == 0) acc(result, checkVTKFile(name));
+  if(rank == 0) vtkChecker.push(name);
 
   name = vtk.write(prefix.str() + "-appendedraw", Dune::VTK::appendedraw);
-  if(rank == 0) acc(result, checkVTKFile(name));
+  if(rank == 0) vtkChecker.push(name);
 
   name = vtk.write(prefix.str() + "-appendedbase64",
                    Dune::VTK::appendedbase64);
-  if(rank == 0) acc(result, checkVTKFile(name));
+  if(rank == 0) vtkChecker.push(name);
 
   return result;
 }
 
 template<int dim>
-int vtkCheck(const std::array<int, dim>& elements,
+int vtkCheck(Dune::VTKChecker& vtkChecker, const std::array<int, dim>& elements,
               const Dune::FieldVector<double, dim>& upperRight)
 {
   Dune::YaspGrid<dim> g(upperRight, elements);
@@ -147,15 +147,15 @@ int vtkCheck(const std::array<int, dim>& elements,
 
   int result = 0;
 
-  acc(result, doWrite( g.leafGridView(), Dune::VTK::conforming ));
-  acc(result, doWrite( g.leafGridView(), Dune::VTK::nonconforming ));
-  acc(result, doWrite( g.levelGridView( 0 ),
+  acc(result, doWrite( vtkChecker, "leafview", g.leafGridView(), Dune::VTK::conforming ));
+  acc(result, doWrite( vtkChecker, "leafview", g.leafGridView(), Dune::VTK::nonconforming ));
+  acc(result, doWrite( vtkChecker, "coarselevelview", g.levelGridView( 0 ),
                        Dune::VTK::conforming ));
-  acc(result, doWrite( g.levelGridView( 0 ),
+  acc(result, doWrite( vtkChecker, "coarselevelview", g.levelGridView( 0 ),
                        Dune::VTK::nonconforming ));
-  acc(result, doWrite( g.levelGridView( g.maxLevel() ),
+  acc(result, doWrite( vtkChecker, "finelevelview", g.levelGridView( g.maxLevel() ),
                        Dune::VTK::conforming ));
-  acc(result, doWrite( g.levelGridView( g.maxLevel() ),
+  acc(result, doWrite( vtkChecker, "finelevelview", g.levelGridView( g.maxLevel() ),
                        Dune::VTK::nonconforming ));
 
   return result;
@@ -174,9 +174,13 @@ int main(int argc, char **argv)
     int result = 0; // pass by default
     using Dune::make_array;
 
-    acc(result, vtkCheck<1>(make_array(5), {1.0}));
-    acc(result, vtkCheck<2>(make_array(5,5), {1.0, 2.0}));
-    acc(result, vtkCheck<3>(make_array(5,5,5), {1.0, 2.0, 3.0}));
+    Dune::VTKChecker vtkChecker;
+
+    acc(result, vtkCheck<1>(vtkChecker, make_array(5), {1.0}));
+    acc(result, vtkCheck<2>(vtkChecker, make_array(5,5), {1.0, 2.0}));
+    acc(result, vtkCheck<3>(vtkChecker, make_array(5,5,5), {1.0, 2.0, 3.0}));
+
+    acc(result, vtkChecker.check());
 
     mpiHelper.getCollectiveCommunication().allreduce<Acc>(&result, 1);