diff --git a/test/freeflow/shallowwater/dambreak/main.cc b/test/freeflow/shallowwater/dambreak/main.cc
index 42d6e95ddb6f4026ffda50cc7a29bac24eca4dbd..6873c39f7c34fb96cf9786ee8525636799b53e4f 100644
--- a/test/freeflow/shallowwater/dambreak/main.cc
+++ b/test/freeflow/shallowwater/dambreak/main.cc
@@ -126,7 +126,7 @@ int main(int argc, char** argv)
     // the linear solver
     using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>,
                                                LinearAlgebraTraitsFromAssembler<Assembler>>;
-    auto linearSolver = std::make_shared<LinearSolver>(leafGridView, gridGeometry->dofMapper());
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = Dumux::NewtonSolver<Assembler, LinearSolver>;
diff --git a/test/porenetwork/1p/noncreepingflow/nonisothermal/main.cc b/test/porenetwork/1p/noncreepingflow/nonisothermal/main.cc
index 7830fab6995dd00159c77ef99c84dade65c4d0f1..83bcff081765a36441b7412fb7eb3fa3549faa3d 100644
--- a/test/porenetwork/1p/noncreepingflow/nonisothermal/main.cc
+++ b/test/porenetwork/1p/noncreepingflow/nonisothermal/main.cc
@@ -35,7 +35,9 @@
 #include <dumux/common/properties.hh>
 #include <dumux/common/parameters.hh>
 #include <dumux/common/dumuxmessage.hh>
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
+#include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 #include <dumux/nonlinear/newtonsolver.hh>
 
 #include <dumux/porenetwork/common/pnmvtkoutputmodule.hh>
@@ -123,8 +125,8 @@ int main(int argc, char** argv)
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
-    using LinearSolver = ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = NewtonSolver<Assembler, LinearSolver>;
diff --git a/test/porenetwork/1p/nonisothermal/main.cc b/test/porenetwork/1p/nonisothermal/main.cc
index f229d985b754bd5ad3ced952a140c4f26eccc53e..155ee576996d08adf715fb3af0029189c9875d25 100644
--- a/test/porenetwork/1p/nonisothermal/main.cc
+++ b/test/porenetwork/1p/nonisothermal/main.cc
@@ -35,7 +35,9 @@
 #include <dumux/common/dumuxmessage.hh>
 #include <dumux/common/parameters.hh>
 #include <dumux/common/properties.hh>
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
+#include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 #include <dumux/nonlinear/newtonsolver.hh>
 
 #include <dumux/porenetwork/common/pnmvtkoutputmodule.hh>
@@ -128,8 +130,8 @@ int main(int argc, char** argv)
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
-    using LinearSolver = ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = NewtonSolver<Assembler, LinearSolver>;
diff --git a/test/porousmediumflow/1p/compressible/instationary/main.cc b/test/porousmediumflow/1p/compressible/instationary/main.cc
index 81eec275d7b095e234aed9f6f15067d1c856cd73..4a61da7c404fcb1b8a9dedc62d56c97afc6e23ba 100644
--- a/test/porousmediumflow/1p/compressible/instationary/main.cc
+++ b/test/porousmediumflow/1p/compressible/instationary/main.cc
@@ -39,7 +39,9 @@
 #include <dumux/common/dumuxmessage.hh>
 
 #include <dumux/nonlinear/newtonsolver.hh>
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
+#include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 
 #include <dumux/assembly/fvassembler.hh>
 
@@ -125,8 +127,8 @@ int main(int argc, char** argv)
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
-    using LinearSolver = ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = Dumux::NewtonSolver<Assembler, LinearSolver>;
diff --git a/test/porousmediumflow/1p/compressible/instationary/main_experimental.cc b/test/porousmediumflow/1p/compressible/instationary/main_experimental.cc
index 00b3e44221b916c97f622be7d4053348d2f298af..98019bca2ca1c38b915ebc6ca68330fb2d013f79 100644
--- a/test/porousmediumflow/1p/compressible/instationary/main_experimental.cc
+++ b/test/porousmediumflow/1p/compressible/instationary/main_experimental.cc
@@ -38,7 +38,9 @@
 #include <dumux/common/dumuxmessage.hh>
 
 #include <dumux/nonlinear/newtonsolver.hh>
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
+#include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 
 #include <dumux/assembly/fvassembler.hh>
 
@@ -125,8 +127,8 @@ int main(int argc, char** argv)
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
-    using LinearSolver = ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = Dumux::NewtonSolver<Assembler, LinearSolver>;
diff --git a/test/porousmediumflow/1p/compressible/stationary/main.cc b/test/porousmediumflow/1p/compressible/stationary/main.cc
index 97f16a78469cd51c05ad633a61a319cc6af069d5..9b4b4926a993a0683847dec0410644343168089d 100644
--- a/test/porousmediumflow/1p/compressible/stationary/main.cc
+++ b/test/porousmediumflow/1p/compressible/stationary/main.cc
@@ -40,7 +40,9 @@
 #include <dumux/common/dumuxmessage.hh>
 
 #include <dumux/nonlinear/newtonsolver.hh>
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
+#include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 
 #include <dumux/assembly/fvassembler.hh>
 
@@ -112,8 +114,8 @@ int main(int argc, char** argv)
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables);
 
     // the linear solver
-    using LinearSolver = ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = Dumux::NewtonSolver<Assembler, LinearSolver>;
diff --git a/test/porousmediumflow/1p/convergence/analyticsolution/main.cc b/test/porousmediumflow/1p/convergence/analyticsolution/main.cc
index 218adebeaa9fb21d54e6aae4c787623ec0ab98e2..80e53a1368ac6d9ca557f2af5e022955fe5581fc 100644
--- a/test/porousmediumflow/1p/convergence/analyticsolution/main.cc
+++ b/test/porousmediumflow/1p/convergence/analyticsolution/main.cc
@@ -28,7 +28,9 @@
 #include <dune/common/parallel/mpihelper.hh>
 
 #include <dumux/nonlinear/newtonsolver.hh>
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
+#include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 
 #include <dumux/common/initialize.hh>
 #include <dumux/common/properties.hh>
@@ -141,8 +143,8 @@ int main(int argc, char** argv)
     using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>;
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables);
 
-    using LinearSolver = ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = Dumux::NewtonSolver<Assembler, LinearSolver>;
diff --git a/test/porousmediumflow/1p/convergence/discretesolution/solver.hh b/test/porousmediumflow/1p/convergence/discretesolution/solver.hh
index cd9590dc42acae08e7b271d42e315bd6b2acd4b0..d7b8d599788ba20c4faa827e28b69203a3e4d1a7 100644
--- a/test/porousmediumflow/1p/convergence/discretesolution/solver.hh
+++ b/test/porousmediumflow/1p/convergence/discretesolution/solver.hh
@@ -30,7 +30,9 @@
 #include <dune/common/timer.hh>
 #include <dune/grid/io/file/vtk.hh>
 
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
+#include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 #include <dumux/linear/pdesolver.hh>
 
 #include <dumux/common/properties.hh>
@@ -107,8 +109,8 @@ SolutionStorage<TypeTag> solveRefinementLevel(int numCells)
     using Assembler = FVAssembler<TypeTag, DiffMethod::analytic>;
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables);
 
-    using LinearSolver = ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // solver the linear problem
     LinearPDESolver<Assembler, LinearSolver> solver(assembler,  linearSolver);
diff --git a/test/porousmediumflow/1p/nonisothermal/main.cc b/test/porousmediumflow/1p/nonisothermal/main.cc
index 5ade81cf49f3e85649b45e53f16d128e813c1970..1367cf79b8a483ba11747342d88429333a5645ab 100644
--- a/test/porousmediumflow/1p/nonisothermal/main.cc
+++ b/test/porousmediumflow/1p/nonisothermal/main.cc
@@ -38,8 +38,9 @@
 #include <dumux/common/parameters.hh>
 #include <dumux/common/dumuxmessage.hh>
 
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
 #include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 #include <dumux/nonlinear/newtonsolver.hh>
 
 #include <dumux/assembly/fvassembler.hh>
@@ -139,8 +140,8 @@ int main(int argc, char** argv)
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
-    using LinearSolver = ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = Dumux::NewtonSolver<Assembler, LinearSolver>;
diff --git a/test/porousmediumflow/1pnc/1p2c/isothermal/main.cc b/test/porousmediumflow/1pnc/1p2c/isothermal/main.cc
index f84c8ad365eaf12ae51b23e99fe8be7f415f6289..ba26030ec67db2fd1e22f5a4b8709b60918a7ed7 100644
--- a/test/porousmediumflow/1pnc/1p2c/isothermal/main.cc
+++ b/test/porousmediumflow/1pnc/1p2c/isothermal/main.cc
@@ -36,7 +36,9 @@
 #include <dumux/common/parameters.hh>
 #include <dumux/common/dumuxmessage.hh>
 
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
+#include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 #include <dumux/nonlinear/newtonsolver.hh>
 
 #include <dumux/assembly/fvassembler.hh>
@@ -123,8 +125,8 @@ int main(int argc, char** argv)
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
-    using LinearSolver = ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     NewtonSolver<Assembler, LinearSolver> nonLinearSolver(assembler, linearSolver);
diff --git a/test/porousmediumflow/1pnc/1p2c/isothermal/saltwaterintrusion/main.cc b/test/porousmediumflow/1pnc/1p2c/isothermal/saltwaterintrusion/main.cc
index 22f8bf68d856bb00f36265720ff3c03fbe2b7a6e..697e23a6d238419217c751519e42ec4c21ecc095 100644
--- a/test/porousmediumflow/1pnc/1p2c/isothermal/saltwaterintrusion/main.cc
+++ b/test/porousmediumflow/1pnc/1p2c/isothermal/saltwaterintrusion/main.cc
@@ -34,7 +34,9 @@
 #include <dumux/common/parameters.hh>
 #include <dumux/common/dumuxmessage.hh>
 
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
+#include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 #include <dumux/nonlinear/newtonsolver.hh>
 #include <dumux/assembly/fvassembler.hh>
 
@@ -132,8 +134,8 @@ int main(int argc, char** argv)
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
-    using LinearSolver = ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     NewtonSolver<Assembler, LinearSolver> nonLinearSolver(assembler, linearSolver);
diff --git a/test/porousmediumflow/1pnc/1p2c/nonisothermal/conduction/main.cc b/test/porousmediumflow/1pnc/1p2c/nonisothermal/conduction/main.cc
index 8b66628a4864145e38ce8a675351e65f71b642c1..9e406c1c4b277e4a42e1e2be99ca05598fbc17bf 100644
--- a/test/porousmediumflow/1pnc/1p2c/nonisothermal/conduction/main.cc
+++ b/test/porousmediumflow/1pnc/1p2c/nonisothermal/conduction/main.cc
@@ -129,8 +129,8 @@ int main(int argc, char** argv)
 
     // the linear solver
     //  using LinearSolver = UMFPackIstlSolver<SeqLinearSolverTraits, LinearAlgebraTraitsFromAssembler<Assembler>>;
-    using LinearSolver = ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = Dumux::NewtonSolver<Assembler, LinearSolver>;
diff --git a/test/porousmediumflow/1pnc/1p2c/nonisothermal/convection/main.cc b/test/porousmediumflow/1pnc/1p2c/nonisothermal/convection/main.cc
index 1acc6406542ce49e2802bec9eb2eb643cfbdb883..2baa9ecfd7d4d1b9714bf9a0ee40bddb79eac8a7 100644
--- a/test/porousmediumflow/1pnc/1p2c/nonisothermal/convection/main.cc
+++ b/test/porousmediumflow/1pnc/1p2c/nonisothermal/convection/main.cc
@@ -129,8 +129,8 @@ int main(int argc, char** argv)
 
     // the linear solver
     //  using LinearSolver = UMFPackIstlSolver<SeqLinearSolverTraits, LinearAlgebraTraitsFromAssembler<Assembler>>;
-    using LinearSolver = ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = Dumux::NewtonSolver<Assembler, LinearSolver>;
diff --git a/test/porousmediumflow/1pnc/1p2c/nonisothermal/transientbc/main.cc b/test/porousmediumflow/1pnc/1p2c/nonisothermal/transientbc/main.cc
index e039b1fd44e88c745215c7bf1f1052c6dbe0030b..1667ebc6331bfd369cdd8e1beb49d74e1b5533c5 100644
--- a/test/porousmediumflow/1pnc/1p2c/nonisothermal/transientbc/main.cc
+++ b/test/porousmediumflow/1pnc/1p2c/nonisothermal/transientbc/main.cc
@@ -39,7 +39,9 @@
 #include <dumux/common/dumuxmessage.hh>
 
 #include <dumux/nonlinear/newtonsolver.hh>
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
+#include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 
 #include <dumux/assembly/fvassembler.hh>
 
@@ -125,8 +127,8 @@ int main(int argc, char** argv)
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
-    using LinearSolver = ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = Dumux::NewtonSolver<Assembler, LinearSolver>;
diff --git a/test/porousmediumflow/1pnc/1p3c/main.cc b/test/porousmediumflow/1pnc/1p3c/main.cc
index 40eb842857cbff50392cc96119768d4d4ceb3366..6b98e4fb8f20d5dc7f9a091defd754ae2bf957b7 100644
--- a/test/porousmediumflow/1pnc/1p3c/main.cc
+++ b/test/porousmediumflow/1pnc/1p3c/main.cc
@@ -36,7 +36,9 @@
 #include <dumux/common/parameters.hh>
 #include <dumux/common/dumuxmessage.hh>
 
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
+#include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 #include <dumux/nonlinear/newtonsolver.hh>
 
 #include <dumux/assembly/fvassembler.hh>
@@ -122,8 +124,8 @@ int main(int argc, char** argv)
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
-    using LinearSolver = ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     NewtonSolver<Assembler, LinearSolver> nonLinearSolver(assembler, linearSolver);
diff --git a/test/porousmediumflow/1pnc/dispersion/main.cc b/test/porousmediumflow/1pnc/dispersion/main.cc
index 68c9e97df6cf8eaf36c46cdd251e2bd1fdfc6114..263c66478e8d6248daaa5b36b8458b9521afc6c0 100644
--- a/test/porousmediumflow/1pnc/dispersion/main.cc
+++ b/test/porousmediumflow/1pnc/dispersion/main.cc
@@ -34,7 +34,9 @@
 #include <dumux/common/parameters.hh>
 #include <dumux/common/dumuxmessage.hh>
 
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
+#include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 #include <dumux/nonlinear/newtonsolver.hh>
 
 #include <dumux/assembly/fvassembler.hh>
@@ -120,8 +122,8 @@ int main(int argc, char** argv)
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
-    using LinearSolver = ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     NewtonSolver<Assembler, LinearSolver> nonLinearSolver(assembler, linearSolver);
diff --git a/test/porousmediumflow/1pnc/nonequilibrium/main.cc b/test/porousmediumflow/1pnc/nonequilibrium/main.cc
index 33a6a8b33aae8be88b6c9ddeb1fd82501fd473dc..1617fc90bcd9034e32e9baafd06b942697933cd7 100644
--- a/test/porousmediumflow/1pnc/nonequilibrium/main.cc
+++ b/test/porousmediumflow/1pnc/nonequilibrium/main.cc
@@ -127,8 +127,8 @@ int main(int argc, char** argv)
 
     // the linear solver
     //  using LinearSolver = UMFPackIstlSolver<SeqLinearSolverTraits, LinearAlgebraTraitsFromAssembler<Assembler>>;
-    using LinearSolver = ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = Dumux::NonEquilibriumNewtonSolver<Assembler, LinearSolver>;
diff --git a/test/porousmediumflow/1pncmin/nonisothermal/main.cc b/test/porousmediumflow/1pncmin/nonisothermal/main.cc
index ca506426a680367be74de8f4afc6bea969ce3373..cd8a7b8db7239f852126986c74eca20e013d581a 100644
--- a/test/porousmediumflow/1pncmin/nonisothermal/main.cc
+++ b/test/porousmediumflow/1pncmin/nonisothermal/main.cc
@@ -32,7 +32,9 @@
 #include <dumux/common/dumuxmessage.hh>
 
 #include <dumux/nonlinear/newtonsolver.hh>
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
+#include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 
 #include <dumux/assembly/fvassembler.hh>
 
@@ -124,8 +126,8 @@ int main(int argc, char** argv)
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
-    using LinearSolver = ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = Dumux::NewtonSolver<Assembler, LinearSolver>;
diff --git a/test/porousmediumflow/2p/boxdfm/main.cc b/test/porousmediumflow/2p/boxdfm/main.cc
index 8911516de367b0ae89deb067edfd8022f3e5d25a..6a32123b0f57a5fb0cb5d3c72128769b78f9328e 100644
--- a/test/porousmediumflow/2p/boxdfm/main.cc
+++ b/test/porousmediumflow/2p/boxdfm/main.cc
@@ -33,7 +33,9 @@
 #include <dumux/common/parameters.hh>
 #include <dumux/common/dumuxmessage.hh>
 
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
+#include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 #include <dumux/nonlinear/newtonsolver.hh>
 
 #include <dumux/assembly/fvassembler.hh>
@@ -128,8 +130,8 @@ int main(int argc, char** argv)
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
-    using LinearSolver = ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = Dumux::NewtonSolver<Assembler, LinearSolver>;
diff --git a/test/porousmediumflow/2p/nonisothermal/main.cc b/test/porousmediumflow/2p/nonisothermal/main.cc
index 7175532bc27d4163d38c0941bb5b6c8e11bf8ac5..081a9c6a892893137bd4a76adaa03d87ee8a34c8 100644
--- a/test/porousmediumflow/2p/nonisothermal/main.cc
+++ b/test/porousmediumflow/2p/nonisothermal/main.cc
@@ -33,7 +33,9 @@
 #include <dumux/common/parameters.hh>
 #include <dumux/common/dumuxmessage.hh>
 
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
+#include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 #include <dumux/nonlinear/newtonsolver.hh>
 
 #include <dumux/assembly/fvassembler.hh>
@@ -117,8 +119,8 @@ int main(int argc, char** argv)
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
-    using LinearSolver = Dumux::ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = Dumux::ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = Dumux::NewtonSolver<Assembler, LinearSolver>;
diff --git a/test/porousmediumflow/2p1c/main.cc b/test/porousmediumflow/2p1c/main.cc
index e70f4b7c561a0f8d36c0acd5d463b5ea4292fc2c..c47de38511b17bc5ff019617c13579f996dbd7c8 100644
--- a/test/porousmediumflow/2p1c/main.cc
+++ b/test/porousmediumflow/2p1c/main.cc
@@ -34,7 +34,9 @@
 #include <dumux/common/parameters.hh>
 #include <dumux/common/dumuxmessage.hh>
 
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
+#include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 #include <dumux/nonlinear/newtonsolver.hh>
 
 #include <dumux/assembly/fvassembler.hh>
@@ -119,8 +121,8 @@ int main(int argc, char** argv)
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
-    using LinearSolver = ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = NewtonSolver<Assembler, LinearSolver>;
diff --git a/test/porousmediumflow/2p2c/injection/main.cc b/test/porousmediumflow/2p2c/injection/main.cc
index 3a5157a49bc0178223cf627a022aa68f693711a6..67f3870e64d87308364aba5ad45f1fd086378223 100644
--- a/test/porousmediumflow/2p2c/injection/main.cc
+++ b/test/porousmediumflow/2p2c/injection/main.cc
@@ -133,7 +133,7 @@ int main(int argc, char** argv)
     // the linear solver
     using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>,
                                                LinearAlgebraTraitsFromAssembler<Assembler>>;
-    auto linearSolver = std::make_shared<LinearSolver>(leafGridView, gridGeometry->dofMapper());
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = NewtonSolver<Assembler, LinearSolver>;
diff --git a/test/porousmediumflow/3p/conduction/main.cc b/test/porousmediumflow/3p/conduction/main.cc
index dd3b35c34af73ebfc6841aef7f291c7f80358d83..c5d5b562e8f751e56553a82222c08603d6fc2b3b 100644
--- a/test/porousmediumflow/3p/conduction/main.cc
+++ b/test/porousmediumflow/3p/conduction/main.cc
@@ -33,8 +33,9 @@
 #include <dumux/common/parameters.hh>
 #include <dumux/common/dumuxmessage.hh>
 
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
 #include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 #include <dumux/nonlinear/newtonsolver.hh>
 
 #include <dumux/assembly/fvassembler.hh>
@@ -121,8 +122,8 @@ int main(int argc, char** argv)
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
-    using LinearSolver = ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = Dumux::NewtonSolver<Assembler, LinearSolver>;
diff --git a/test/porousmediumflow/3p3c/columnxylol/main.cc b/test/porousmediumflow/3p3c/columnxylol/main.cc
index 4c266e9c8300cf4ebcba75b17a571edc40439ac3..62d48a17fc9379a040b584c92a4860874595f6b7 100644
--- a/test/porousmediumflow/3p3c/columnxylol/main.cc
+++ b/test/porousmediumflow/3p3c/columnxylol/main.cc
@@ -33,8 +33,9 @@
 #include <dumux/common/dumuxmessage.hh>
 #include <dumux/common/timeloop.hh>
 
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
 #include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 #include <dumux/nonlinear/newtonsolver.hh>
 
 #include <dumux/assembly/fvassembler.hh>
@@ -119,8 +120,8 @@ int main(int argc, char** argv)
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
-    using LinearSolver = ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = NewtonSolver<Assembler, LinearSolver>;
diff --git a/test/porousmediumflow/3pwateroil/main.cc b/test/porousmediumflow/3pwateroil/main.cc
index b8d71270b624addc5be60e59c02e97eaf9bb8a5c..440758a57a326f2e253e9aeed55b57344d3f2dd1 100644
--- a/test/porousmediumflow/3pwateroil/main.cc
+++ b/test/porousmediumflow/3pwateroil/main.cc
@@ -34,8 +34,9 @@
 #include <dumux/common/dumuxmessage.hh>
 #include <dumux/common/timeloop.hh>
 
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
 #include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 #include <dumux/nonlinear/newtonsolver.hh>
 
 #include <dumux/assembly/fvassembler.hh>
@@ -121,8 +122,8 @@ int main(int argc, char** argv)
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
-    using LinearSolver = ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = NewtonSolver<Assembler, LinearSolver>;
diff --git a/test/porousmediumflow/richards/analytical/main.cc b/test/porousmediumflow/richards/analytical/main.cc
index 4020bc7703ddb0bb4c9b95a667f88a8a99b46a41..3b37ebe8c48f69d41fd6eec7e531d4585e9ffd9a 100644
--- a/test/porousmediumflow/richards/analytical/main.cc
+++ b/test/porousmediumflow/richards/analytical/main.cc
@@ -34,7 +34,9 @@
 #include <dumux/common/parameters.hh>
 #include <dumux/common/dumuxmessage.hh>
 
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
+#include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 #include <dumux/porousmediumflow/richards/newtonsolver.hh>
 
 #include <dumux/assembly/fvassembler.hh>
@@ -118,8 +120,8 @@ int main(int argc, char** argv)
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
-    using LinearSolver = Dumux::ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = Dumux::ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = Dumux::RichardsNewtonSolver<Assembler, LinearSolver>;
diff --git a/test/porousmediumflow/richards/annulus/main.cc b/test/porousmediumflow/richards/annulus/main.cc
index 4ca5cc906b77ec47759ee94fbf105f602fba9bd1..c6185c8da3b8c1bdb7aa95881ab122a2ffbf7dd4 100644
--- a/test/porousmediumflow/richards/annulus/main.cc
+++ b/test/porousmediumflow/richards/annulus/main.cc
@@ -29,7 +29,9 @@
 #include <dumux/common/parameters.hh>
 #include <dumux/common/integrate.hh>
 
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
+#include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 #include <dumux/nonlinear/newtonsolver.hh>
 #include <dumux/assembly/fvassembler.hh>
 #include <dumux/assembly/diffmethod.hh>
@@ -110,8 +112,8 @@ int main(int argc, char** argv)
     using Assembler = FVAssembler<TypeTag, DiffMethod::analytic>;
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables);
 
-    using LinearSolver = ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
     NewtonSolver<Assembler, LinearSolver> solver(assembler, linearSolver);
 
     // Solution of the problem and error computation
diff --git a/test/porousmediumflow/richards/annulus/main_instationary.cc b/test/porousmediumflow/richards/annulus/main_instationary.cc
index d319b11a7349a9029748e185b84e9dcf2b354013..414044a5907208432f46c21a927432fb352e2447 100644
--- a/test/porousmediumflow/richards/annulus/main_instationary.cc
+++ b/test/porousmediumflow/richards/annulus/main_instationary.cc
@@ -30,7 +30,9 @@
 #include <dumux/common/integrate.hh>
 #include <dumux/common/timeloop.hh>
 
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
+#include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 #include <dumux/nonlinear/newtonsolver.hh>
 #include <dumux/assembly/fvassembler.hh>
 #include <dumux/assembly/diffmethod.hh>
@@ -134,8 +136,8 @@ int main(int argc, char** argv)
     using Assembler = FVAssembler<TypeTag, DiffMethod::analytic>;
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, pOld);
 
-    using LinearSolver = ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
     NewtonSolver<Assembler, LinearSolver> nonLinearSolver(assembler, linearSolver);
 
     // time loop
diff --git a/test/porousmediumflow/richards/benchmarks/main.cc b/test/porousmediumflow/richards/benchmarks/main.cc
index 96f791553f3215ebbdb29086e1abd75d24845fa4..fdce5413fee4dbd8c40f9f8c20bd9eb38bd1e478 100644
--- a/test/porousmediumflow/richards/benchmarks/main.cc
+++ b/test/porousmediumflow/richards/benchmarks/main.cc
@@ -39,7 +39,6 @@
 #include <dumux/common/parameters.hh>
 #include <dumux/common/math.hh>
 
-#include <dumux/linear/linearsolvertraits.hh>
 #include <dumux/linear/istlsolvers.hh>
 #include <dumux/linear/linearsolvertraits.hh>
 #include <dumux/linear/linearalgebratraits.hh>
@@ -98,11 +97,6 @@ int main(int argc, char** argv)
     vtkWriter->addVolumeVariable([](const auto& volVars){ return volVars.saturation(0); }, "saturation");
     vtkWriter->addVolumeVariable([](const auto& volVars){ return volVars.pressure(0); }, "pressure");
 
-    using LinearSolver = UMFPackIstlSolver<SeqLinearSolverTraits, LinearAlgebraTraitsFromAssembler<Assembler>>;
-    auto linearSolver = std::make_shared<LinearSolver>();
-
-    using Assembler = FVAssembler<TypeTag, DiffMethod::analytic>;
-
     const auto dt = getParam<double>("TimeLoop.DtInitial");
     const auto checkPoints = getParam<std::vector<double>>("TimeLoop.TEnd");
     const auto tEnd = checkPoints.back();
@@ -113,7 +107,10 @@ int main(int argc, char** argv)
     timeLoop->setCheckPoint(checkPoints);
     int checkPointCounter = 0;
 
+    using Assembler = FVAssembler<TypeTag, DiffMethod::analytic>;
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
+    using LinearSolver = UMFPackIstlSolver<SeqLinearSolverTraits, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>();
     using Newton = RichardsNewtonSolver<Assembler, LinearSolver>;
     Newton nonLinearSolver(assembler, linearSolver);
 
diff --git a/test/porousmediumflow/richards/nonisothermal/conduction/main.cc b/test/porousmediumflow/richards/nonisothermal/conduction/main.cc
index 9b90071bf15329fbcb34a5685636ce015ce2b870..56746ef1aca0092f4129f580e3a203b9fe2dc7be 100644
--- a/test/porousmediumflow/richards/nonisothermal/conduction/main.cc
+++ b/test/porousmediumflow/richards/nonisothermal/conduction/main.cc
@@ -34,7 +34,9 @@
 #include <dumux/common/parameters.hh>
 #include <dumux/common/dumuxmessage.hh>
 
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
+#include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 #include <dumux/porousmediumflow/richards/newtonsolver.hh>
 
 #include <dumux/assembly/fvassembler.hh>
@@ -119,8 +121,8 @@ int main(int argc, char** argv)
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
-    using LinearSolver = Dumux::ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = Dumux::ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = Dumux::RichardsNewtonSolver<Assembler, LinearSolver>;
diff --git a/test/porousmediumflow/richards/nonisothermal/convection/main.cc b/test/porousmediumflow/richards/nonisothermal/convection/main.cc
index 9b90071bf15329fbcb34a5685636ce015ce2b870..56746ef1aca0092f4129f580e3a203b9fe2dc7be 100644
--- a/test/porousmediumflow/richards/nonisothermal/convection/main.cc
+++ b/test/porousmediumflow/richards/nonisothermal/convection/main.cc
@@ -34,7 +34,9 @@
 #include <dumux/common/parameters.hh>
 #include <dumux/common/dumuxmessage.hh>
 
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
+#include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 #include <dumux/porousmediumflow/richards/newtonsolver.hh>
 
 #include <dumux/assembly/fvassembler.hh>
@@ -119,8 +121,8 @@ int main(int argc, char** argv)
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
-    using LinearSolver = Dumux::ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = Dumux::ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = Dumux::RichardsNewtonSolver<Assembler, LinearSolver>;
diff --git a/test/porousmediumflow/richards/nonisothermal/evaporation/main.cc b/test/porousmediumflow/richards/nonisothermal/evaporation/main.cc
index 46649d25edd3e9ef4750228480be2cee64c253cd..4486298c65a967da46f602b6c08798400ea596bc 100644
--- a/test/porousmediumflow/richards/nonisothermal/evaporation/main.cc
+++ b/test/porousmediumflow/richards/nonisothermal/evaporation/main.cc
@@ -36,7 +36,9 @@
 #include <dumux/common/parameters.hh>
 #include <dumux/common/dumuxmessage.hh>
 
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
+#include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 #include <dumux/porousmediumflow/richards/newtonsolver.hh>
 
 #include <dumux/assembly/fvassembler.hh>
@@ -118,8 +120,8 @@ int main(int argc, char** argv)
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
-    using LinearSolver = Dumux::ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = Dumux::ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = RichardsNewtonSolver<Assembler, LinearSolver>;
diff --git a/test/porousmediumflow/richardsnc/main.cc b/test/porousmediumflow/richardsnc/main.cc
index d37ac9f3bd52b55980cfbcd15aa5465c1d1db382..32019a8747f0fe8e3c685e708ea5a0545eadb240 100644
--- a/test/porousmediumflow/richardsnc/main.cc
+++ b/test/porousmediumflow/richardsnc/main.cc
@@ -34,7 +34,9 @@
 #include <dumux/common/parameters.hh>
 #include <dumux/common/dumuxmessage.hh>
 
-#include <dumux/linear/seqsolverbackend.hh>
+#include <dumux/linear/istlsolvers.hh>
+#include <dumux/linear/linearsolvertraits.hh>
+#include <dumux/linear/linearalgebratraits.hh>
 #include <dumux/porousmediumflow/richards/newtonsolver.hh>
 
 #include <dumux/assembly/fvassembler.hh>
@@ -119,8 +121,8 @@ int main(int argc, char** argv)
     auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
-    using LinearSolver = Dumux::ILU0BiCGSTABBackend;
-    auto linearSolver = std::make_shared<LinearSolver>();
+    using LinearSolver = Dumux::ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>;
+    auto linearSolver = std::make_shared<LinearSolver>(gridGeometry->gridView(), gridGeometry->dofMapper());
 
     // the non-linear solver
     using NewtonSolver = Dumux::RichardsNewtonSolver<Assembler, LinearSolver>;