diff --git a/dune/gfe/riemanniantrsolver.cc b/dune/gfe/riemanniantrsolver.cc
index 5003a786f7472b1cd44d7d4b73ced3284ab81cee..133193b361bb6a05a55fdb3991fb6ef14865227a 100644
--- a/dune/gfe/riemanniantrsolver.cc
+++ b/dune/gfe/riemanniantrsolver.cc
@@ -247,12 +247,25 @@ setup(const GridType& grid,
 
         // If we are on more than 1 processors, join all local transfer matrices on rank 0,
         // and construct a single global transfer operator there.
-        typedef Dune::GlobalIndexSet<typename GridType::LevelGridView, gridDim> LevelGUIndex;
-        LevelGUIndex fineGUIndex(grid_->levelGridView(i+1));
-        LevelGUIndex coarseGUIndex(grid_->levelGridView(i));
+        typedef Dune::GlobalIndexSet<typename GridType::LevelGridView> LevelGUIndex;
+        LevelGUIndex fineGUIndex(grid_->levelGridView(i+1), gridDim);
+        LevelGUIndex coarseGUIndex(grid_->levelGridView(i), gridDim);
+
+        typedef Dune::MultipleCodimMultipleGeomTypeMapper<typename GridType::LevelGridView, Dune::MCMGVertexLayout> LevelLocalMapper;
+        LevelLocalMapper fineLevelLocalMapper(grid_->levelGridView(i+1));
+        LevelLocalMapper coarseLevelLocalMapper(grid_->levelGridView(i));
 
         typedef typename TruncatedCompressedMGTransfer<CorrectionType>::TransferOperatorType TransferOperatorType;
-        MatrixCommunicator<LevelGUIndex, TransferOperatorType> matrixComm(fineGUIndex, coarseGUIndex, 0);
+        MatrixCommunicator<LevelGUIndex,
+                           typename GridType::LevelGridView,
+                           TransferOperatorType,
+                           LevelLocalMapper,
+                           LevelLocalMapper> matrixComm(fineGUIndex,
+                                                        coarseGUIndex,
+                                                        grid_->levelGridView(i),
+                                                        fineLevelLocalMapper,
+                                                        coarseLevelLocalMapper,
+                                                        0);
 
         mmgStep->mgTransfer_[i] = new TruncatedCompressedMGTransfer<CorrectionType>;
         Dune::shared_ptr<TransferOperatorType> transferOperatorMatrix = Dune::make_shared<TransferOperatorType>(matrixComm.reduceCopy(newTransferOp->getMatrix()));
diff --git a/dune/gfe/riemanniantrsolver.hh b/dune/gfe/riemanniantrsolver.hh
index 5f469c44b07ef0b98ae446a3094c074d1f441b9a..3319ea27e4eee1590fb298a0b5025a0cb39968fd 100644
--- a/dune/gfe/riemanniantrsolver.hh
+++ b/dune/gfe/riemanniantrsolver.hh
@@ -19,6 +19,7 @@
 
 #include "geodesicfeassembler.hh"
 #include <dune/grid/utility/globalindexset.hh>
+#include <dune/gfe/parallel/globalp1mapper.hh>
 #include <dune/gfe/parallel/globalp2mapper.hh>
 
 /** \brief Riemannian trust-region solver for geodesic finite-element problems */
@@ -44,7 +45,7 @@ class RiemannianTrustRegionSolver
 #elif defined SECOND_ORDER
     typedef Dune::GlobalP2Mapper<typename GridType::LeafGridView> GUIndex;
 #else
-    typedef GlobalUniqueIndex<typename GridType::LeafGridView, gridDim> GUIndex;
+    typedef Dune::GlobalP1Mapper<typename GridType::LeafGridView> GUIndex;
 #endif
 
 #ifdef THIRD_ORDER
@@ -54,7 +55,7 @@ class RiemannianTrustRegionSolver
     typedef P2BasisMapper<typename GridType::LeafGridView> LocalMapper;
 #else
     typedef P1NodalBasis<typename GridType::LeafGridView,double> BasisType;
-    typedef Dune::MultipleCodimMultipleGeomTypeMapper<typename GridType::LeafGridView, Dune::VertexLayout> LocalMapper;
+    typedef Dune::MultipleCodimMultipleGeomTypeMapper<typename GridType::LeafGridView, Dune::MCMGVertexLayout> LocalMapper;
 #endif
 
 public: