diff --git a/dune/matrix-vector/CMakeLists.txt b/dune/matrix-vector/CMakeLists.txt
index 8d647905e97d99835ec1506bf9aa31c616ccb3f7..fa409c1b75be8dd60b45591710724c08515ef6c4 100644
--- a/dune/matrix-vector/CMakeLists.txt
+++ b/dune/matrix-vector/CMakeLists.txt
@@ -1,5 +1,6 @@
 #install headers
 install(FILES
+  addtodiagonal.hh
   axpy.hh
   componentwisematrixmap.hh
   genericvectortools.hh
diff --git a/dune/matrix-vector/addtodiagonal.hh b/dune/matrix-vector/addtodiagonal.hh
new file mode 100644
index 0000000000000000000000000000000000000000..90ad152bb9041c0941a5638051ecbd743418b192
--- /dev/null
+++ b/dune/matrix-vector/addtodiagonal.hh
@@ -0,0 +1,44 @@
+#ifndef DUNE_MATRIX_VECTOR_ADDTODIAGONAL_HH
+#define DUNE_MATRIX_VECTOR_ADDTODIAGONAL_HH
+
+#include <dune/istl/scaledidmatrix.hh>
+
+namespace Dune {
+namespace MatrixVector {
+  template <class Matrix>
+  static void addToDiagonal(Matrix& x, const typename Matrix::field_type a) {
+    for (int i = 0; i < Matrix::rows; ++i)
+      x[i][i] += a;
+  }
+
+  /*
+    the line
+
+    template <typename FieldType, int n> static void
+    addToDiagonal(Dune::ScaledIdentityMatrix<FieldType,n>& x, const
+    FieldType a)
+
+    should NOT be used as it may lead to ambiguities in which case the
+    general method above will be used. an example is the line taken
+    from massassembler.hh (line 83 at the time):
+
+    StaticMatrix::addToDiagonal(localMatrix[i][i], values[i] * zi);
+
+    where values[i] is of type FieldVector<FieldType,1> and zi is a
+    double. This call then does not exactly fit this specialization
+    (without the implicit cast of FV<FT,1>) and hence some wild
+    template voodoo decides which of the templates is to be taken - in
+    this case with a gcc 4.4.5 that was the one above leading to a
+    wrong factor n in the diagonal value
+  */
+
+  template <typename FieldType, int n>
+  static void addToDiagonal(
+      Dune::ScaledIdentityMatrix<FieldType, n>& x,
+      const typename Dune::ScaledIdentityMatrix<FieldType, n>::field_type a) {
+    x.scalar() += a;
+  }
+}
+}
+
+#endif