diff --git a/dune/istl/bvector.hh b/dune/istl/bvector.hh
index 6b2faeee151464ace9262f757d3ec6774af4dd7b..a8999c2d6c6916a4e0255e81f0098d9c4df995e0 100644
--- a/dune/istl/bvector.hh
+++ b/dune/istl/bvector.hh
@@ -164,49 +164,49 @@ namespace Dune {
     //===== norms
 
     //! one norm (sum over absolute values of entries)
-    double one_norm () const
+    typename FieldTraits<value_type>::real_type one_norm () const
     {
-      double sum=0;
+      typename FieldTraits<value_type>::real_type sum=0;
       for (size_type i=0; i<this->n; ++i) sum += (*this)[i].one_norm();
       return sum;
     }
 
     //! simplified one norm (uses Manhattan norm for complex values)
-    double one_norm_real () const
+    typename FieldTraits<value_type>::real_type one_norm_real () const
     {
-      double sum=0;
+      typename FieldTraits<value_type>::real_type sum=0;
       for (size_type i=0; i<this->n; ++i) sum += (*this)[i].one_norm_real();
       return sum;
     }
 
     //! two norm sqrt(sum over squared values of entries)
-    double two_norm () const
+    typename FieldTraits<value_type>::real_type two_norm () const
     {
-      double sum=0;
+      typename FieldTraits<value_type>::real_type sum=0;
       for (size_type i=0; i<this->n; ++i) sum += (*this)[i].two_norm2();
       return sqrt(sum);
     }
 
     //! sqare of two norm (sum over squared values of entries), need for block recursion
-    double two_norm2 () const
+    typename FieldTraits<value_type>::real_type two_norm2 () const
     {
-      double sum=0;
+      typename FieldTraits<value_type>::real_type sum=0;
       for (size_type i=0; i<this->n; ++i) sum += (*this)[i].two_norm2();
       return sum;
     }
 
     //! infinity norm (maximum of absolute values of entries)
-    double infinity_norm () const
+    typename FieldTraits<value_type>::real_type infinity_norm () const
     {
-      double max=0;
+      typename FieldTraits<value_type>::real_type max=0;
       for (size_type i=0; i<this->n; ++i) max = std::max(max,(*this)[i].infinity_norm());
       return max;
     }
 
     //! simplified infinity norm (uses Manhattan norm for complex values)
-    double infinity_norm_real () const
+    typename FieldTraits<value_type>::real_type infinity_norm_real () const
     {
-      double max=0;
+      typename FieldTraits<value_type>::real_type max=0;
       for (size_type i=0; i<this->n; ++i) max = std::max(max,(*this)[i].infinity_norm_real());
       return max;
     }
@@ -809,49 +809,49 @@ namespace Dune {
     //===== norms
 
     //! one norm (sum over absolute values of entries)
-    double one_norm () const
+    typename FieldTraits<field_type>::real_type one_norm () const
     {
-      double sum=0;
+      typename FieldTraits<field_type>::real_type sum=0;
       for (size_type i=0; i<this->n; ++i) sum += (this->p)[i].one_norm();
       return sum;
     }
 
     //! simplified one norm (uses Manhattan norm for complex values)
-    double one_norm_real () const
+    typename FieldTraits<field_type>::real_type one_norm_real () const
     {
-      double sum=0;
+      typename FieldTraits<field_type>::real_type sum=0;
       for (size_type i=0; i<this->n; ++i) sum += (this->p)[i].one_norm_real();
       return sum;
     }
 
     //! two norm sqrt(sum over squared values of entries)
-    double two_norm () const
+    typename FieldTraits<field_type>::real_type two_norm () const
     {
-      double sum=0;
+      typename FieldTraits<field_type>::real_type sum=0;
       for (size_type i=0; i<this->n; ++i) sum += (this->p)[i].two_norm2();
       return sqrt(sum);
     }
 
     //! sqare of two norm (sum over squared values of entries), need for block recursion
-    double two_norm2 () const
+    typename FieldTraits<field_type>::real_type two_norm2 () const
     {
-      double sum=0;
+      typename FieldTraits<field_type>::real_type sum=0;
       for (size_type i=0; i<this->n; ++i) sum += (this->p)[i].two_norm2();
       return sum;
     }
 
     //! infinity norm (maximum of absolute values of entries)
-    double infinity_norm () const
+    typename FieldTraits<field_type>::real_type infinity_norm () const
     {
-      double max=0;
+      typename FieldTraits<field_type>::real_type max=0;
       for (size_type i=0; i<this->n; ++i) max = std::max(max,(this->p)[i].infinity_norm());
       return max;
     }
 
     //! simplified infinity norm (uses Manhattan norm for complex values)
-    double infinity_norm_real () const
+    typename FieldTraits<field_type>::real_type infinity_norm_real () const
     {
-      double max=0;
+      typename FieldTraits<field_type>::real_type max=0;
       for (size_type i=0; i<this->n; ++i) max = std::max(max,(this->p)[i].infinity_norm_real());
       return max;
     }
diff --git a/dune/istl/paamg/smoother.hh b/dune/istl/paamg/smoother.hh
index e117014ea8ce04110ca58222404e4d9f445fc285..27d0828086a9d3e107a1f7377ba3016e747745cf 100644
--- a/dune/istl/paamg/smoother.hh
+++ b/dune/istl/paamg/smoother.hh
@@ -458,7 +458,7 @@ namespace Dune
   template<class M, class X, class MO, class MS, class A>
   class SeqOverlappingSchwarz;
 
-  class MultiplicativeSchwarzMode;
+  struct MultiplicativeSchwarzMode;
 
   namespace Amg
   {
diff --git a/dune/istl/solver.hh b/dune/istl/solver.hh
index 8ace9496b486558c489567bdfbbf8af0e844c7f0..f3b80784d7366f53ca45608e12278151fc50079b 100644
--- a/dune/istl/solver.hh
+++ b/dune/istl/solver.hh
@@ -1,8 +1,8 @@
 // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 // vi: set et ts=4 sw=2 sts=2:
 
-#ifndef DUNE_SOLVER_HH
-#define DUNE_SOLVER_HH
+#ifndef DUNE_ISTL_SOLVER_HH
+#define DUNE_ISTL_SOLVER_HH
 
 #include <iomanip>
 #include <ostream>
diff --git a/dune/istl/test/.gitignore b/dune/istl/test/.gitignore
index c298506d1c5fa9a10254dfa6771c21d7ec9a24ac..3db90901f83eafae13c170db8542170e323a16c8 100644
--- a/dune/istl/test/.gitignore
+++ b/dune/istl/test/.gitignore
@@ -19,6 +19,7 @@ superlztest
 mmtest
 mv
 iotest
+inverseoperator2prectest
 scaledidmatrixtest
 basearraytest
 vbvectortest