diff --git a/dune/vtk/datacollectors/yaspdatacollector.hh b/dune/vtk/datacollectors/yaspdatacollector.hh
index 6d562accd46a9f46d2e3db84259968f6e671ecac..7130dc52e482e8ca520de2c452de3630bae06015 100644
--- a/dune/vtk/datacollectors/yaspdatacollector.hh
+++ b/dune/vtk/datacollectors/yaspdatacollector.hh
@@ -23,7 +23,7 @@ public:
     , wholeExtent_(filledArray<6,int>(0))
     , origin_(0.0)
     , spacing_(0.0)
-    , level_(gridView.template begin<0,Interior_Partition>()->level())
+    , level_(gridView.template begin<0,All_Partition>()->level())
   {}
 
   std::array<int, 6> const& wholeExtentImpl () const
@@ -44,6 +44,7 @@ public:
   void updateImpl ()
   {
     Super::updateImpl();
+    localPieceCalled_ = false;
 
     for (int i = 0; i < dim; ++i) {
       wholeExtent_[2*i] = 0;
@@ -52,6 +53,20 @@ public:
 
     auto it = gridView_.grid().begin(level_);
     initGeometry(it->coords);
+
+#if HAVE_MPI
+    int rank = -1;
+    int num_ranks = -1;
+    MPI_Comm_rank(gridView_.comm(), &rank);
+    MPI_Comm_size(gridView_.comm(), &num_ranks);
+
+    if (rank == 0) {
+      extents_.resize(num_ranks);
+      requests_.resize(num_ranks);
+      for (int i = 1; i < num_ranks; ++i)
+        MPI_Irecv(extents_[i].data(), extents_[i].size(), MPI_INT, i, /*tag=*/6, gridView_.comm(), &requests_[i]);
+    }
+#endif
   }
 
   template <class Coords>
@@ -92,25 +107,38 @@ public:
       extent[2*i] = gc.min(i);
       extent[2*i+1] = gc.max(i)+1;
     }
+
+#if HAVE_MPI
+    if (!localPieceCalled_) {
+      int rank = -1;
+      MPI_Comm_rank(gridView_.comm(), &rank);
+      if (rank != 0) {
+        MPI_Isend(extent.data(), extent.size(), MPI_INT, 0, /*tag=*/6, gridView_.comm(), &sendRequest_);
+      } else {
+        extents_[0] = extent;
+      }
+      localPieceCalled_ = true;
+    }
+#endif
+
     writer(extent);
   }
 
   template <class Writer>
   void writePiecesImpl (Writer const& writer) const
   {
-    auto extent = filledArray<6,int>(0);
-    // for (auto const& part : gridView_.gridLevel().template partition<InteriorEntity>())
-    // {
-    //   for (int i = 0; i < dim; ++i) {
-    //     extent[2*i] = part.begin()[i];
-    //     extent[2*i+1] = part.end()[i]-1;
-    //   }
-
+    assert(localPieceCalled_);
+#if HAVE_MPI
     int num_ranks = -1;
-    MPI_Comm_size(MPI_COMM_WORLD, &num_ranks);
+    MPI_Comm_size(gridView_.comm(), &num_ranks);
+
+    std::vector<MPI_Status> status(num_ranks-1);
+    MPI_Waitall(num_ranks-1, requests_.data()+1, status.data());
+
     for (int p = 0; p < num_ranks; ++p) {
-      writer(p, extent, false);
+      writer(p, extents_[p], true);
     }
+#endif
   }
 
   template <class T>
@@ -142,6 +170,11 @@ private:
   FieldVector<ctype,3> origin_;
   std::vector<std::size_t> indexMap_;
   int level_;
+
+  mutable std::vector<std::array<int,6>> extents_;
+  mutable std::vector<MPI_Request> requests_;
+  mutable MPI_Request sendRequest_;
+  mutable bool localPieceCalled_ = false;
 };
 
 namespace Impl
diff --git a/dune/vtk/writers/vtkwriterinterface.impl.hh b/dune/vtk/writers/vtkwriterinterface.impl.hh
index 02a4d268b2875fc3822e84f4e116a73eeccc888d..dc16992960399f31da60ee4b696c94a2f63d23dd 100644
--- a/dune/vtk/writers/vtkwriterinterface.impl.hh
+++ b/dune/vtk/writers/vtkwriterinterface.impl.hh
@@ -51,12 +51,14 @@ void VtkWriterInterface<GV,DC>
   if (num_ranks > 1) {
     filename = p.string() + "_p" + std::to_string(rank) + "." + fileExtension();
 
+    writeSerialFile(filename);
     if (rank == 0) {
       writeParallelFile(p.string(), num_ranks);
     }
+  } else {
+    writeSerialFile(filename);
   }
 #endif
-  writeSerialFile(filename);
 }
 
 
diff --git a/src/test/mixed_element_test.cc b/src/test/mixed_element_test.cc
index 56e1104021367d230da06f41970a0a7fe18e679c..8293398ff4c542fb4efa7e2885c8fbfb348eb8e5 100644
--- a/src/test/mixed_element_test.cc
+++ b/src/test/mixed_element_test.cc
@@ -18,7 +18,7 @@
 #include <dune/grid/utility/structuredgridfactory.hh>
 
 #include <dune/vtk/vtkreader.hh>
-#include <dune/vtk/vtkunstructuredgridwriter.hh>
+#include <dune/vtk/writers/vtkunstructuredgridwriter.hh>
 
 using namespace Dune;
 using namespace Dune::experimental;
diff --git a/src/test/reader_writer_test.cc b/src/test/reader_writer_test.cc
index 3122a5d02c680533863b1b1fdc4b6ea8eb66847c..0bb509e2487ff363fff15193f200feda6ecb3bad 100644
--- a/src/test/reader_writer_test.cc
+++ b/src/test/reader_writer_test.cc
@@ -18,7 +18,7 @@
 #include <dune/grid/utility/structuredgridfactory.hh>
 
 #include <dune/vtk/vtkreader.hh>
-#include <dune/vtk/vtkunstructuredgridwriter.hh>
+#include <dune/vtk/writers/vtkunstructuredgridwriter.hh>
 
 using namespace Dune;
 using namespace Dune::experimental;