diff --git a/dumux/linear/istlsolverfactorybackend.hh b/dumux/linear/istlsolverfactorybackend.hh
index 20adc78be6dfc01c35a0a1692644d743f9a57cdc..bcb18ace81c351aab665a4c3edaaab7d7c958b06 100644
--- a/dumux/linear/istlsolverfactorybackend.hh
+++ b/dumux/linear/istlsolverfactorybackend.hh
@@ -16,6 +16,7 @@
 
 #include <memory>
 
+#include <dune/common/version.hh>
 #include <dune/common/parallel/mpihelper.hh>
 #include <dune/common/parametertree.hh>
 
@@ -54,6 +55,7 @@ namespace {
 template<class LinearOperator>
 int initSolverFactoriesForMultiTypeBlockMatrix()
 {
+#if DUNE_VERSION_LT(DUNE_ISTL,2,11)
     using M  = typename LinearOperator::matrix_type;
     using X  = typename LinearOperator::range_type;
     using Y  = typename LinearOperator::domain_type;
@@ -65,6 +67,14 @@ int initSolverFactoriesForMultiTypeBlockMatrix()
     using TLS = Dune::TypeList<X,Y>;
     auto& isfac = Dune::IterativeSolverFactory<X,Y>::instance();
     return Dune::addRegistryToFactory<TLS>(isfac, Dune::IterativeSolverTag{});
+#else
+    using OpTraits = Dune::OperatorTraits<LinearOperator>;
+    auto& sfac = Dune::SolverFactory<LinearOperator>::instance();
+    auto& pfac = Dune::PreconditionerFactory<LinearOperator>::instance();
+    Dune::addRegistryToFactory<OpTraits>(sfac, Dumux::MultiTypeBlockMatrixDirectSolverTag{});
+    Dune::addRegistryToFactory<OpTraits>(pfac, Dumux::MultiTypeBlockMatrixPreconditionerTag{});
+    return Dune::addRegistryToFactory<OpTraits>(sfac, Dune::SolverTag{});
+#endif
 }
 } // end namespace