diff --git a/dune/istl/paamg/hierarchy.hh b/dune/istl/paamg/hierarchy.hh
index 8e6a44108fa400b03dd60e217e17aff5c6bdb92a..dd9b972d4a926396cbf5b66cd14f3cfce4a48e00 100644
--- a/dune/istl/paamg/hierarchy.hh
+++ b/dune/istl/paamg/hierarchy.hh
@@ -128,7 +128,7 @@ namespace Dune
        */
       void addCoarser(Arguments& args);
 
-      void addRedistributedOnCoarsest(T* t);
+      void addRedistributedOnCoarsest(Arguments& args);
 
       /**
        * @brief Add an element on a finer level.
@@ -1112,7 +1112,7 @@ namespace Dune
       Iterator matrix = matrices_.finest(), coarsest = matrices_.coarsest();
       int level=0;
       if(redist->isSetup())
-        hierarchy.addRedistributedOnCoarsest(new BlockVector<V,TA>(matrix.getRedistributed().getmat().N()));
+        hierarchy.addRedistributedOnCoarsest(matrix.getRedistributed().getmat().N());
       Dune::dvverb<<"Level "<<level<<" has "<<matrices_.finest()->getmat().N()<<" unknowns!"<<std::endl;
 
       while(matrix != coarsest) {
@@ -1121,7 +1121,7 @@ namespace Dune
 
         hierarchy.addCoarser(matrix->getmat().N());
         if(redist->isSetup())
-          hierarchy.addRedistributedOnCoarsest(new BlockVector<V,TA>(matrix.getRedistributed().getmat().N()));
+          hierarchy.addRedistributedOnCoarsest(matrix.getRedistributed().getmat().N());
 
       }
 
@@ -1260,9 +1260,9 @@ namespace Dune
     }
 
     template<class T, class A>
-    void Hierarchy<T,A>::addRedistributedOnCoarsest(T* t)
+    void Hierarchy<T,A>::addRedistributedOnCoarsest(Arguments& args)
     {
-      coarsest_->redistributed_ = t;
+      coarsest_->redistributed_ = ConstructionTraits<MemberType>::construct(args);
     }
 
     template<class T, class A>