diff --git a/src/sand-wedge.cc b/src/sand-wedge.cc
index da973e581b769509697e3b9e6f3584a089522ae7..78ef4edeebd324738d9b67ec7594779a66414ad5 100644
--- a/src/sand-wedge.cc
+++ b/src/sand-wedge.cc
@@ -115,8 +115,6 @@ int main(int argc, char *argv[]) {
     refine(*grid, weakPatch,
            parset.get<double>("boundary.friction.smallestDiameter"));
 
-    auto const refinements = grid->maxLevel();
-
     double minDiameter = std::numeric_limits<double>::infinity();
     double maxDiameter = 0.0;
     for (auto it = grid->template leafbegin<0>();
@@ -227,7 +225,7 @@ int main(int argc, char *argv[]) {
           Grid>;
       ZeroNonlinearity<LocalVector, LocalMatrix> zeroNonlinearity;
       LinearFactory factory(parset.sub("solver.tnnmg"), // FIXME
-                            refinements, *grid, _dirichletNodes);
+                            *grid, _dirichletNodes);
 
       typename LinearFactory::ConvexProblem convexProblem(
           1.0, _matrix, zeroNonlinearity, _rhs, _x);
@@ -346,8 +344,7 @@ int main(int argc, char *argv[]) {
         dims,
         MyBlockProblem<ConvexProblem<GlobalFriction<Matrix, Vector>, Matrix>>,
         Grid>;
-    NonlinearFactory factory(parset.sub("solver.tnnmg"), refinements, *grid,
-                             dirichletNodes);
+    NonlinearFactory factory(parset.sub("solver.tnnmg"), *grid, dirichletNodes);
 
     using UpdaterPair = std::pair<
         std::shared_ptr<StateUpdater<ScalarVector, Vector>>,
diff --git a/src/solverfactory.cc b/src/solverfactory.cc
index 97a09f5e4a7f3f61b4f4d103aa868a0b3202f493..3242724ae9a55a360b091f103ae30cd9b8704f76 100644
--- a/src/solverfactory.cc
+++ b/src/solverfactory.cc
@@ -13,14 +13,14 @@
 
 template <size_t dim, class BlockProblem, class Grid>
 SolverFactory<dim, BlockProblem, Grid>::SolverFactory(
-    Dune::ParameterTree const &parset, size_t refinements, Grid const &grid,
+    Dune::ParameterTree const &parset, Grid const &grid,
     Dune::BitSetVector<dim> const &ignoreNodes)
     : baseEnergyNorm(linearBaseSolverStep),
       linearBaseSolver(&linearBaseSolverStep,
                        parset.get<size_t>("linear.maxiumumIterations"),
                        parset.get<double>("linear.tolerance"), &baseEnergyNorm,
                        Solver::QUIET),
-      transferOperators(refinements),
+      transferOperators(grid.maxLevel()),
       multigridStep(
           std::make_shared<Step>(linearIterationStep, nonlinearSmoother)) {
   // linear iteration step
diff --git a/src/solverfactory.hh b/src/solverfactory.hh
index 055401f455b79cc03abe8ebf87817a5216c52f7e..6badcd551c952184319aa545d9a24838d1f34c6e 100644
--- a/src/solverfactory.hh
+++ b/src/solverfactory.hh
@@ -31,8 +31,8 @@ class SolverFactory {
   using Step =
       TruncatedNonsmoothNewtonMultigrid<BlockProblem, NonlinearSmoother>;
 
-  SolverFactory(Dune::ParameterTree const &parset, size_t refinements,
-                Grid const &grid, Dune::BitSetVector<dim> const &ignoreNodes);
+  SolverFactory(Dune::ParameterTree const &parset, Grid const &grid,
+                Dune::BitSetVector<dim> const &ignoreNodes);
 
   ~SolverFactory();