diff --git a/dune/istl/multitypeblockmatrix.hh b/dune/istl/multitypeblockmatrix.hh
index daad8e8591d82c4e52e8d59cf90ffc029583c84e..a514c076959ffd885f6f47a3dd9adf2e86d59143 100644
--- a/dune/istl/multitypeblockmatrix.hh
+++ b/dune/istl/multitypeblockmatrix.hh
@@ -8,8 +8,6 @@
 
 #include "istlexception.hh"
 
-#include "gsetc.hh"
-
 #ifdef HAVE_BOOST_FUSION
 
 #include <boost/fusion/sequence.hpp>
@@ -18,11 +16,23 @@
 #include <boost/typeof/typeof.hpp>
 #include <boost/fusion/algorithm.hpp>
 
-#include "multitypeblockmatrix.hh"
-
 namespace mpl=boost::mpl;
 namespace fusion=boost::fusion;
 
+// forward decl
+namespace Dune
+{
+  template<typename T1, typename T2=fusion::void_, typename T3=fusion::void_, typename T4=fusion::void_,
+      typename T5=fusion::void_, typename T6=fusion::void_, typename T7=fusion::void_,
+      typename T8=fusion::void_, typename T9=fusion::void_>
+  class MultiTypeBlockMatrix;
+
+  template<int I, int crow, int remain_row>
+  class MultiTypeBlockMatrix_Solver;
+}
+
+#include "gsetc.hh"
+
 namespace Dune {
 
   /**
@@ -198,8 +208,8 @@ namespace Dune {
 
       This matrix class combines MultiTypeBlockVector elements as rows.
    */
-  template<typename T1, typename T2=fusion::void_, typename T3=fusion::void_, typename T4=fusion::void_,
-      typename T5=fusion::void_, typename T6=fusion::void_, typename T7=fusion::void_, typename T8=fusion::void_, typename T9=fusion::void_>
+  template<typename T1, typename T2, typename T3, typename T4,
+      typename T5, typename T6, typename T7, typename T8, typename T9>
   class MultiTypeBlockMatrix : public fusion::vector<T1, T2, T3, T4, T5, T6, T7, T8, T9> {
 
   public: