diff --git a/dune/elasticity/common/trustregionsolver.cc b/dune/elasticity/common/trustregionsolver.cc
index 0f88e6d546e36f3fb4eba7091c9740c868f6a1fa..f68e64c077cafd4faca1729e7a88753c1e1b90bf 100644
--- a/dune/elasticity/common/trustregionsolver.cc
+++ b/dune/elasticity/common/trustregionsolver.cc
@@ -90,7 +90,7 @@ setup(const typename BasisType::GridView::Grid& grid,
     std::conditional_t< // do we have a dune-functions basis?
       Dune::models<Dune::Functions::Concept::GlobalBasis<GridView>, BasisType>(),
         BasisType,
-        DuneFunctionsBasis<BasisType> > basis(grid.leafGridView());
+        DuneFunctionsBasis<BasisType> > basis(assembler_->basis_);
     // ////////////////////////////////
     //   Create a multigrid solver
     // ////////////////////////////////
@@ -361,14 +361,11 @@ void TrustRegionSolver<BasisType,VectorType>::solve()
         mgStep = dynamic_cast<MonotoneMGStep<MatrixType,CorrectionType>*>(&iterationStep);
 
     }
-
-    BasisType basis(grid_->leafGridView());
 #else
-    BasisType basis(grid_->levelGridView(grid_->maxLevel()));
     BasisType coarseBasis(grid_->levelGridView(0));
     std::vector<BoxConstraint<typename VectorType::field_type, blocksize>> coarseTrustRegionObstacles(coarseBasis.size());
 #endif
-    MaxNormTrustRegion<blocksize> trustRegion(basis.size(), initialTrustRegionRadius_);
+    MaxNormTrustRegion<blocksize> trustRegion(assembler_->basis_.size(), initialTrustRegionRadius_);
 
     std::vector<BoxConstraint<field_type,blocksize> > trustRegionObstacles;