diff --git a/dune/solvers/iterationsteps/blockgssteps.hh b/dune/solvers/iterationsteps/blockgssteps.hh
index 01d17c64456b2362cf1e14a9b6e470bc3adde5d0..0c4b56fad2fed6444806c972217d35ee187cea9c 100644
--- a/dune/solvers/iterationsteps/blockgssteps.hh
+++ b/dune/solvers/iterationsteps/blockgssteps.hh
@@ -310,9 +310,10 @@ auto gs(double tol = LinearSolvers::defaultGsTol,
 template <class Matrix, class Vector, class BitVector, class LocalSolver>
 struct BlockGSStep : public LinearIterationStep<Matrix, Vector, BitVector> {
 
-  BlockGSStep(LocalSolver&& localSolver,
+  template<class LS>
+  BlockGSStep(LS&& localSolver,
               BlockGS::Direction direction = BlockGS::Direction::FORWARD)
-      : localSolver_(localSolver)
+      : localSolver_(std::forward<LS>(localSolver))
       , direction_(direction) {}
 
   void iterate() {