diff --git a/dune/gfe/parallel/matrixcommunicator.hh b/dune/gfe/parallel/matrixcommunicator.hh
index aad79302abfadce6a0165225e9e926b9a4463f21..195dc93d42a2e532efd88e2367371111b3f726d9 100644
--- a/dune/gfe/parallel/matrixcommunicator.hh
+++ b/dune/gfe/parallel/matrixcommunicator.hh
@@ -38,10 +38,10 @@ class MatrixCommunicator {
       }
 
     // Get number of matrix entries on each process
-    std::vector<int> localMatrixEntriesSizes(MPIFunctions::shareSizes(guIndex1_.getGridView(), localMatrixEntries.size()));
+    std::vector<int> localMatrixEntriesSizes(MPIFunctions::shareSizes(guIndex1_.getGridView().comm(), localMatrixEntries.size()));
 
     // Get matrix entries from every process
-    globalMatrixEntries = MPIFunctions::gatherv(guIndex1_.getGridView(), localMatrixEntries, localMatrixEntriesSizes, root_rank);
+    globalMatrixEntries = MPIFunctions::gatherv(guIndex1_.getGridView().comm(), localMatrixEntries, localMatrixEntriesSizes, root_rank);
   }
 
 public:
diff --git a/dune/gfe/parallel/mpifunctions.hh b/dune/gfe/parallel/mpifunctions.hh
index d2030637d683e60afc3180b7dfd81aa883527780..74c29a642ef432ccbbf61d7ccbf2ed6b98f4cad3 100644
--- a/dune/gfe/parallel/mpifunctions.hh
+++ b/dune/gfe/parallel/mpifunctions.hh
@@ -14,52 +14,52 @@ struct MPIFunctions {
     return offsets;
   }
 
-  template<typename GridView>
-  static std::vector<int> shareSizes(const GridView& gridview, const int& shareRef) {
-    std::vector<int> sizesVector(gridview.comm().size());
+  template<typename Communicator>
+  static std::vector<int> shareSizes(const Communicator& communicator, const int& shareRef) {
+    std::vector<int> sizesVector(communicator.size());
 
     int share = shareRef;
-    gridview.comm().template allgather<int>(&share, 1, sizesVector.data());
+    communicator.template allgather<int>(&share, 1, sizesVector.data());
 
 
     return sizesVector;
   }
 
-  template<typename GridView, typename T>
-  static void scatterv(const GridView& gridview, std::vector<T>& localVec, std::vector<T>& globalVec, std::vector<int>& sizes, int root_rank) {
+  template<typename Communicator, typename T>
+  static void scatterv(const Communicator& communicator, std::vector<T>& localVec, std::vector<T>& globalVec, std::vector<int>& sizes, int root_rank) {
     int mysize = localVec.size();
 
     std::vector<int> offsets(offsetsFromSizes(sizes));
 
-    gridview.comm().template scatterv(globalVec.data(), sizes.data(), offsets.data(), localVec.data(), mysize, root_rank);
+    communicator.template scatterv(globalVec.data(), sizes.data(), offsets.data(), localVec.data(), mysize, root_rank);
   }
 
-  template<typename GridView, typename T>
-  static std::vector<T> gatherv(const GridView& gridview, std::vector<T>& localVec, std::vector<int>& sizes, int root_rank) {
+  template<typename Communicator, typename T>
+  static std::vector<T> gatherv(const Communicator& communicator, std::vector<T>& localVec, std::vector<int>& sizes, int root_rank) {
     int mysize = localVec.size();
 
     std::vector<T> globalVec;
 
-    if (gridview.comm().rank() == root_rank)
+    if (communicator.rank() == root_rank)
       globalVec.resize(std::accumulate(sizes.begin(), sizes.end(), 0));
 
     std::vector<int> offsets(offsetsFromSizes(sizes));
 
-    gridview.comm().template gatherv(localVec.data(), mysize, globalVec.data(), sizes.data(), offsets.data(), root_rank);
+    communicator.template gatherv(localVec.data(), mysize, globalVec.data(), sizes.data(), offsets.data(), root_rank);
 
 
     return globalVec;
   }
 
-  template<typename GridView, typename T>
-  static std::vector<T> allgatherv(const GridView& gridview, std::vector<T>& localVec, std::vector<int>& sizes) {
+  template<typename Communicator, typename T>
+  static std::vector<T> allgatherv(const Communicator& communicator, std::vector<T>& localVec, std::vector<int>& sizes) {
     int mysize = localVec.size();
 
     std::vector<T> globalVec(std::accumulate(sizes.begin(), sizes.end(), 0));
 
     std::vector<int> offsets(offsetsFromSizes(sizes));
 
-    gridview.comm().template allgatherv(localVec.data(), mysize, globalVec.data(), sizes.data(), offsets.data());
+    communicator.template allgatherv(localVec.data(), mysize, globalVec.data(), sizes.data(), offsets.data());
 
 
     return globalVec;
diff --git a/dune/gfe/parallel/vectorcommunicator.hh b/dune/gfe/parallel/vectorcommunicator.hh
index cb7de259aac15fc9a2600a9e922a81141a66fd5f..a89172341ce4be1d3fd459336d12a20b6b4bc7ca 100644
--- a/dune/gfe/parallel/vectorcommunicator.hh
+++ b/dune/gfe/parallel/vectorcommunicator.hh
@@ -32,10 +32,10 @@ private:
         localVectorEntries.push_back(TransferVectorTuple(guIndex.index(k), localVector[k]));
 
     // Get number of vector entries on each process
-    localVectorEntriesSizes = MPIFunctions::shareSizes(guIndex.getGridView(), localVectorEntries.size());
+    localVectorEntriesSizes = MPIFunctions::shareSizes(guIndex.getGridView().comm(), localVectorEntries.size());
 
     // Get vector entries from every process
-    globalVectorEntries = MPIFunctions::gatherv(guIndex.getGridView(), localVectorEntries, localVectorEntriesSizes, root_rank);
+    globalVectorEntries = MPIFunctions::gatherv(guIndex.getGridView().comm(), localVectorEntries, localVectorEntriesSizes, root_rank);
   }
 
 public:
@@ -43,7 +43,7 @@ public:
   : guIndex(gi), root_rank(root)
   {
     // Get number of vector entries on each process
-    localVectorEntriesSizes = MPIFunctions::shareSizes(guIndex.getGridView(), guIndex.nOwnedLocalEntity());
+    localVectorEntriesSizes = MPIFunctions::shareSizes(guIndex.getGridView().comm(), guIndex.nOwnedLocalEntity());
   }
 
   VectorType reduceAdd(const VectorType& localVector)
@@ -81,7 +81,7 @@ public:
     // Create vector for transfer data
     std::vector<TransferVectorTuple> localVectorEntries(localSize);
 
-    MPIFunctions::scatterv(guIndex.getGridView(), localVectorEntries, globalVectorEntries, localVectorEntriesSizes, root_rank);
+    MPIFunctions::scatterv(guIndex.getGridView().comm(), localVectorEntries, globalVectorEntries, localVectorEntriesSizes, root_rank);
 
     // Create vector for local solution
     VectorType x(localSize);