diff --git a/dumux/linear/seqsolverbackend.hh b/dumux/linear/seqsolverbackend.hh
index ffe04084fe074e2aa049c64d41eb944e6f41bb84..1a250839199ee2616ce3daa2ce9fe89d9ca6be81 100644
--- a/dumux/linear/seqsolverbackend.hh
+++ b/dumux/linear/seqsolverbackend.hh
@@ -183,10 +183,10 @@ class ILUnBiCGSTABBackend : public LinearSolver
 public:
     using LinearSolver::LinearSolver;
 
-    // precondBlockLevel: set this to more than one if the matrix to solve is nested multiple times
-    template<int precondBlockLevel = 1, class Matrix, class Vector>
+    template<int pBlDummy = 1, class Matrix, class Vector>
     bool solve(const Matrix& A, Vector& x, const Vector& b)
     {
+        constexpr auto precondBlockLevel = preconditionerBlockLevel<Matrix>();
         using Preconditioner = Dune::SeqILU<Matrix, Vector, Vector, precondBlockLevel>;
         using Solver = Dune::BiCGSTABSolver<Vector>;
 
@@ -221,10 +221,10 @@ class SORBiCGSTABBackend : public LinearSolver
 public:
     using LinearSolver::LinearSolver;
 
-    // precondBlockLevel: set this to more than one if the matrix to solve is nested multiple times
-    template<int precondBlockLevel = 1, class Matrix, class Vector>
+    template<int pBlDummy = 1, class Matrix, class Vector>
     bool solve(const Matrix& A, Vector& x, const Vector& b)
     {
+        constexpr auto precondBlockLevel = preconditionerBlockLevel<Matrix>();
         using Preconditioner = Dune::SeqSOR<Matrix, Vector, Vector, precondBlockLevel>;
         using Solver = Dune::BiCGSTABSolver<Vector>;
 
@@ -259,10 +259,10 @@ class SSORBiCGSTABBackend : public LinearSolver
 public:
     using LinearSolver::LinearSolver;
 
-    // precondBlockLevel: set this to more than one if the matrix to solve is nested multiple times
-    template<int precondBlockLevel = 1, class Matrix, class Vector>
+    template<int pBlDummy = 1, class Matrix, class Vector>
     bool solve(const Matrix& A, Vector& x, const Vector& b)
     {
+        constexpr auto precondBlockLevel = preconditionerBlockLevel<Matrix>();
         using Preconditioner = Dune::SeqSSOR<Matrix, Vector, Vector, precondBlockLevel>;
         using Solver = Dune::BiCGSTABSolver<Vector>;
 
@@ -297,10 +297,10 @@ class GSBiCGSTABBackend : public LinearSolver
 public:
     using LinearSolver::LinearSolver;
 
-    // precondBlockLevel: set this to more than one if the matrix to solve is nested multiple times
-    template<int precondBlockLevel = 1, class Matrix, class Vector>
+    template<int pBlDummy = 1, class Matrix, class Vector>
     bool solve(const Matrix& A, Vector& x, const Vector& b)
     {
+        constexpr auto precondBlockLevel = preconditionerBlockLevel<Matrix>();
         using Preconditioner = Dune::SeqGS<Matrix, Vector, Vector, precondBlockLevel>;
         using Solver = Dune::BiCGSTABSolver<Vector>;
 
@@ -334,10 +334,10 @@ class JacBiCGSTABBackend : public LinearSolver
 public:
     using LinearSolver::LinearSolver;
 
-    // precondBlockLevel: set this to more than one if the matrix to solve is nested multiple times
-    template<int precondBlockLevel = 1, class Matrix, class Vector>
+    template<int pBlDummy = 1, class Matrix, class Vector>
     bool solve(const Matrix& A, Vector& x, const Vector& b)
     {
+        constexpr auto precondBlockLevel = preconditionerBlockLevel<Matrix>();
         using Preconditioner = Dune::SeqJac<Matrix, Vector, Vector, precondBlockLevel>;
         using Solver = Dune::BiCGSTABSolver<Vector>;
 
@@ -371,10 +371,10 @@ class ILUnCGBackend : public LinearSolver
 public:
     using LinearSolver::LinearSolver;
 
-    // precondBlockLevel: set this to more than one if the matrix to solve is nested multiple times
-    template<int precondBlockLevel = 1, class Matrix, class Vector>
+    template<int pBlDummy = 1, class Matrix, class Vector>
     bool solve(const Matrix& A, Vector& x, const Vector& b)
     {
+        constexpr auto precondBlockLevel = preconditionerBlockLevel<Matrix>();
         using Preconditioner = Dune::SeqILU<Matrix, Vector, Vector, precondBlockLevel>;
         using Solver = Dune::CGSolver<Vector>;
 
@@ -408,10 +408,10 @@ class SORCGBackend : public LinearSolver
 public:
     using LinearSolver::LinearSolver;
 
-    // precondBlockLevel: set this to more than one if the matrix to solve is nested multiple times
-    template<int precondBlockLevel = 1, class Matrix, class Vector>
+    template<int pBlDummy = 1, class Matrix, class Vector>
     bool solve(const Matrix& A, Vector& x, const Vector& b)
     {
+        constexpr auto precondBlockLevel = preconditionerBlockLevel<Matrix>();
         using Preconditioner = Dune::SeqSOR<Matrix, Vector, Vector, precondBlockLevel>;
         using Solver = Dune::CGSolver<Vector>;
 
@@ -445,10 +445,10 @@ class SSORCGBackend : public LinearSolver
 public:
     using LinearSolver::LinearSolver;
 
-    // precondBlockLevel: set this to more than one if the matrix to solve is nested multiple times
-    template<int precondBlockLevel = 1, class Matrix, class Vector>
+    template<int pBlDummy = 1, class Matrix, class Vector>
     bool solve(const Matrix& A, Vector& x, const Vector& b)
     {
+        constexpr auto precondBlockLevel = preconditionerBlockLevel<Matrix>();
         using Preconditioner = Dune::SeqSSOR<Matrix, Vector, Vector, precondBlockLevel>;
         using Solver = Dune::CGSolver<Vector>;
 
@@ -482,10 +482,10 @@ class GSCGBackend : public LinearSolver
 public:
     using LinearSolver::LinearSolver;
 
-    // precondBlockLevel: set this to more than one if the matrix to solve is nested multiple times
-    template<int precondBlockLevel = 1, class Matrix, class Vector>
+    template<int pBlDummy = 1, class Matrix, class Vector>
     bool solve(const Matrix& A, Vector& x, const Vector& b)
     {
+        constexpr auto precondBlockLevel = preconditionerBlockLevel<Matrix>();
         using Preconditioner = Dune::SeqGS<Matrix, Vector, Vector, precondBlockLevel>;
         using Solver = Dune::CGSolver<Vector>;
 
@@ -518,10 +518,10 @@ class JacCGBackend : public LinearSolver
 public:
     using LinearSolver::LinearSolver;
 
-    // precondBlockLevel: set this to more than one if the matrix to solve is nested multiple times
-    template<int precondBlockLevel = 1, class Matrix, class Vector>
+    template<int pBlDummy = 1, class Matrix, class Vector>
     bool solve(const Matrix& A, Vector& x, const Vector& b)
     {
+        constexpr auto precondBlockLevel = preconditionerBlockLevel<Matrix>();
         using Preconditioner = Dune::SeqJac<Matrix, Vector, Vector, precondBlockLevel>;
         using Solver = Dune::CGSolver<Vector>;
 
@@ -556,10 +556,10 @@ class SSORRestartedGMResBackend : public LinearSolver
 public:
     using LinearSolver::LinearSolver;
 
-    // precondBlockLevel: set this to more than one if the matrix to solve is nested multiple times
-    template<int precondBlockLevel = 1, class Matrix, class Vector>
+    template<int pBlDummy = 1, class Matrix, class Vector>
     bool solve(const Matrix& A, Vector& x, const Vector& b)
     {
+        constexpr auto precondBlockLevel = preconditionerBlockLevel<Matrix>();
         using Preconditioner = Dune::SeqSSOR<Matrix, Vector, Vector, precondBlockLevel>;
         using Solver = Dune::RestartedGMResSolver<Vector>;
 
@@ -593,10 +593,10 @@ class ILU0BiCGSTABBackend : public LinearSolver
 public:
     using LinearSolver::LinearSolver;
 
-    // precondBlockLevel: set this to more than one if the matrix to solve is nested multiple times
-    template<int precondBlockLevel = 1, class Matrix, class Vector>
+    template<int pBlDummy = 1, class Matrix, class Vector>
     bool solve(const Matrix& A, Vector& x, const Vector& b)
     {
+        constexpr auto precondBlockLevel = preconditionerBlockLevel<Matrix>();
         using Preconditioner = Dune::SeqILU<Matrix, Vector, Vector, precondBlockLevel>;
         using Solver = Dune::BiCGSTABSolver<Vector>;
 
@@ -629,10 +629,10 @@ class ILU0CGBackend : public LinearSolver
 public:
     using LinearSolver::LinearSolver;
 
-    // precondBlockLevel: set this to more than one if the matrix to solve is nested multiple times
-    template<int precondBlockLevel = 1, class Matrix, class Vector>
+    template<int pBlDummy = 1, class Matrix, class Vector>
     bool solve(const Matrix& A, Vector& x, const Vector& b)
     {
+        constexpr auto precondBlockLevel = preconditionerBlockLevel<Matrix>();
         using Preconditioner = Dune::SeqILU<Matrix, Vector, Vector, precondBlockLevel>;
         using Solver = Dune::CGSolver<Vector>;
 
@@ -666,10 +666,10 @@ class ILU0RestartedGMResBackend : public LinearSolver
 public:
     using LinearSolver::LinearSolver;
 
-    // precondBlockLevel: set this to more than one if the matrix to solve is nested multiple times
-    template<int precondBlockLevel = 1, class Matrix, class Vector>
+    template<int pBlDummy = 1, class Matrix, class Vector>
     bool solve(const Matrix& A, Vector& x, const Vector& b)
     {
+        constexpr auto precondBlockLevel = preconditionerBlockLevel<Matrix>();
         using Preconditioner = Dune::SeqILU<Matrix, Vector, Vector, precondBlockLevel>;
         using Solver = Dune::RestartedGMResSolver<Vector>;
 
@@ -704,10 +704,10 @@ class ILUnRestartedGMResBackend : public LinearSolver
 public:
     using LinearSolver::LinearSolver;
 
-    // precondBlockLevel: set this to more than one if the matrix to solve is nested multiple times
-    template<int precondBlockLevel = 1, class Matrix, class Vector>
+    template<int pBlDummy = 1, class Matrix, class Vector>
     bool solve(const Matrix& A, Vector& x, const Vector& b)
     {
+        constexpr auto precondBlockLevel = preconditionerBlockLevel<Matrix>();
         using Preconditioner = Dune::SeqILU<Matrix, Vector, Vector, precondBlockLevel>;
         using Solver = Dune::RestartedGMResSolver<Vector>;
 
@@ -732,11 +732,11 @@ class ExplicitDiagonalSolver : public LinearSolver
 public:
     using LinearSolver::LinearSolver;
 
-    // precondBlockLevel: set this to more than one if the matrix to solve is nested multiple times
-    template<int precondBlockLevel = 1, class Matrix, class Vector>
+    template<int pBlDummy = 1, class Matrix, class Vector>
     bool solve(const Matrix& A, Vector& x, const Vector& b)
     {
         Vector rhs(b);
+        constexpr auto precondBlockLevel = preconditionerBlockLevel<Matrix>();
         Dune::SeqJac<Matrix, Vector, Vector, precondBlockLevel> jac(A, 1, 1.0);
         jac.pre(x, rhs);
         jac.apply(x, rhs);
@@ -764,8 +764,7 @@ class SuperLUBackend : public LinearSolver
 public:
     using LinearSolver::LinearSolver;
 
-    // precondBlockLevel is unused and just here for compatibility with iterative solvers
-    template<int precondBlockLevel = 1, class Matrix, class Vector>
+    template<int pBlDummy = 1, class Matrix, class Vector>
     bool solve(const Matrix& A, Vector& x, const Vector& b)
     {
         static_assert(isBCRSMatrix<Matrix>::value, "SuperLU only works with BCRS matrices!");
@@ -825,8 +824,7 @@ class UMFPackBackend : public LinearSolver
 public:
     using LinearSolver::LinearSolver;
 
-    // precondBlockLevel is unused and just here for compatibility with iterative solvers
-    template<int precondBlockLevel = 1, class Matrix, class Vector>
+    template<int pBlDummy = 1, class Matrix, class Vector>
     bool solve(const Matrix& A, Vector& x, const Vector& b)
     {
         static_assert(isBCRSMatrix<Matrix>::value, "UMFPack only works with BCRS matrices!");
@@ -966,7 +964,7 @@ public:
     using LinearSolver::LinearSolver;
 
     // Solve saddle-point problem using a Schur complement based preconditioner
-    template<int precondBlockLevel = 2, class Matrix, class Vector>
+    template<int pBlDummy = 2, class Matrix, class Vector>
     bool solve(const Matrix& M, Vector& x, const Vector& b)
     {
         BlockDiagILU0Preconditioner<Matrix, Vector, Vector> preconditioner(M);
@@ -1151,7 +1149,7 @@ public:
     using LinearSolver::LinearSolver;
 
     // Solve saddle-point problem using a Schur complement based preconditioner
-    template<int precondBlockLevel = 2, class Matrix, class Vector>
+    template<int pBlDummy = 2, class Matrix, class Vector>
     bool solve(const Matrix& m, Vector& x, const Vector& b)
     {
         //! \todo Check whether the default accumulation mode atOnceAccu is needed.