diff --git a/dune/solvers/common/arithmetic.hh b/dune/solvers/common/arithmetic.hh
index d36a90c9b863a1107af7fedf36738e787587bf6e..19b47860e25602d2df290d6ee50ca8ab69b10c14 100644
--- a/dune/solvers/common/arithmetic.hh
+++ b/dune/solvers/common/arithmetic.hh
@@ -3,226 +3,28 @@
 #ifndef ARITHMETIC_HH
 #define ARITHMETIC_HH
 
-#include <type_traits>
-
-#include <dune/common/fvector.hh>
-#include <dune/common/fmatrix.hh>
-#include <dune/common/diagonalmatrix.hh>
-#include <dune/common/unused.hh>
-#include <dune/istl/bcrsmatrix.hh>
-#include <dune/istl/matrixindexset.hh>
-#include <dune/istl/scaledidmatrix.hh>
+#warning arithmetic.hh is deprecated, please use dune-matrix-vector instead!
 
 #include <dune/matrix-vector/axpy.hh>
 #include <dune/matrix-vector/axy.hh>
 #include <dune/matrix-vector/crossproduct.hh>
+#include <dune/matrix-vector/matrixtraits.hh>
 #include <dune/matrix-vector/promote.hh>
+#include <dune/matrix-vector/scalartraits.hh>
 #include <dune/matrix-vector/transpose.hh>
 
-/** \brief Namespace containing helper classes and functions for arithmetic operations
- *
- * Everything in this namespace is experimental and might change
- * in the near future. Especially the naming of namespace, structs,
- * and functions is not final.
- */
 namespace Arithmetic
 {
-
-    // type promotion (smallest matrix that can hold the sum of two matrices *******************
-    template<class MatrixA, class MatrixB>
-    struct Promote
-    {
-      typedef typename Dune::MatrixVector::Promote<MatrixA, MatrixB>::Type Type;
-    };
-
-    /** \brief Class to identify scalar types
-     *
-     * Specialize this class for all types that can be used
-     * like scalar quantities.
-     */
-    template<class T>
-    struct ScalarTraits
-    {
-        enum { isScalar=(std::is_scalar<T>::value and not std::is_pointer<T>::value)};
-    };
-
-    template<class T>
-    struct ScalarTraits<Dune::FieldVector<T,1> >
-    {
-        enum { isScalar=true };
-    };
-
-    template<class T>
-    struct ScalarTraits<Dune::FieldMatrix<T,1,1> >
-    {
-        enum { isScalar=true };
-    };
-
-    template<class T>
-    struct ScalarTraits<Dune::DiagonalMatrix<T,1> >
-    {
-        enum { isScalar=true };
-    };
-
-    template<class T>
-    struct ScalarTraits<Dune::ScaledIdentityMatrix<T,1> >
-    {
-        enum { isScalar=true };
-    };
-
-
-    /** \brief Class to identify matrix types and extract information
-     *
-     * Specialize this class for all types that can be used like a matrix.
-     */
-    template<class T>
-    struct MatrixTraits
-    {
-        enum { isMatrix=false };
-        enum { rows=-1};
-        enum { cols=-1};
-    };
-
-    template<class T, int n, int m>
-    struct MatrixTraits<Dune::FieldMatrix<T,n,m> >
-    {
-        enum { isMatrix=true };
-        enum { rows=n};
-        enum { cols=m};
-    };
-
-    template<class T, int n>
-    struct MatrixTraits<Dune::DiagonalMatrix<T,n> >
-    {
-        enum { isMatrix=true };
-        enum { rows=n};
-        enum { cols=n};
-    };
-
-    template<class T, int n>
-    struct MatrixTraits<Dune::ScaledIdentityMatrix<T,n> >
-    {
-        enum { isMatrix=true };
-        enum { rows=n};
-        enum { cols=n};
-    };
-
-    template<class T>
-    struct MatrixTraits<Dune::BCRSMatrix<T> >
-    {
-        enum { isMatrix=true };
-    };
-
-    template <bool Condition, typename Type=void>
-    using enable_if_t = typename std::enable_if<Condition, Type>::type;
-
-    template <class MatrixType>
-    using Transposed = typename Dune::MatrixVector::Transposed<MatrixType>;
-
-    /** \brief Add a product to some matrix or vector
-     *
-     * This function computes a+=b*c.
-     *
-     * This function should tolerate all meaningful
-     * combinations of scalars, vectors, and matrices.
-     *
-     * a,b,c could be matrices with appropriate
-     * dimensions. But b can also always be a scalar
-     * represented by a 1-dim vector or a 1 by 1 matrix.
-     */
-    template<class A, class B, class C>
-    void addProduct(A& a, const B& b, const C& c)
-    {
-      Dune::MatrixVector::addProduct(a,b,c);
-    }
-
-    /** \brief Subtract a product from some matrix or vector
-     *
-     * This function computes a-=b*c.
-     *
-     * This function should tolerate all meaningful
-     * combinations of scalars, vectors, and matrices.
-     *
-     * a,b,c could be matrices with appropriate
-     * dimensions. But b can also always be a scalar
-     * represented by a 1-dim vector or a 1 by 1 matrix.
-     */
-    template<class A, class B, class C>
-    void subtractProduct(A& a, const B& b, const C& c)
-    {
-      Dune::MatrixVector::subtractProduct(a,b,c);
-    }
-
-    //! Compute the cross product of two vectors. Only works for n==3
-    template<class T, int n>
-    Dune::FieldVector<T,n> crossProduct(const Dune::FieldVector<T,n>& a, const Dune::FieldVector<T,n>& b)
-    {
-      return Dune::MatrixVector::crossProduct(a,b);
-    }
-
-    //! Compute the transposed of a matrix
-    template <class A>
-    void transpose(const A& a, Transposed<A>& aT)
-    {
-      Dune::MatrixVector::transpose(a,aT);
-    }
-
-    /** \brief Add a scaled product to some matrix or vector
-     *
-     * This function computes a+=b*c*d.
-     *
-     * This function should tolerate all meaningful
-     * combinations of scalars, vectors, and matrices.
-     *
-     * a,c,d could be matrices with appropriate dimensions. But b must
-     * (currently) and c can also always be a scalar represented by a
-     * 1-dim vector or a 1 by 1 matrix.
-     */
-    template<class A, class B, class C, class D>
-    typename std::enable_if<ScalarTraits<B>::isScalar, void>::type
-    addProduct(A& a, const B& b, const C& c, const D& d)
-    {
-      Dune::MatrixVector::addProduct(a,b,c,d);
-    }
-
-    /** \brief Subtract a scaled product from some matrix or vector
-     *
-     * This function computes a-=b*c*d.
-     *
-     * This function should tolerate all meaningful
-     * combinations of scalars, vectors, and matrices.
-     *
-     * a,c,d could be matrices with appropriate dimensions. But b must
-     * (currently) and c can also always be a scalar represented by a
-     * 1-dim vector or a 1 by 1 matrix.
-     */
-    template<class A, class B, class C, class D>
-    typename std::enable_if<ScalarTraits<B>::isScalar, void>::type
-    subtractProduct(A& a, const B& b, const C& c, const D& d)
-    {
-      Dune::MatrixVector::subtractProduct(a,b,c,d);
-    }
-
-    //! Compute \f$(Ax,y)\f$
-    template <class OperatorType, class VectorType, class VectorType2>
-    typename VectorType::field_type
-    Axy(const OperatorType &A,
-        const VectorType &x,
-        const VectorType2 &y)
-    {
-        return Dune::MatrixVector::Axy(A, x, y);
-    }
-
-    //! Compute \f$(b-Ax,y)\f$
-    template <class OperatorType, class VectorType, class VectorType2>
-    typename VectorType::field_type
-    bmAxy(const OperatorType &A,
-          const VectorType2 &b,
-          const VectorType &x,
-          const VectorType2 &y)
-    {
-        return Dune::MatrixVector::bmAxy(A, b, x, y);
-    }
+    using Dune::MatrixVector::Promote;
+    using Dune::MatrixVector::ScalarTraits;
+    using Dune::MatrixVector::MatrixTraits;
+    using Dune::MatrixVector::Transposed;
+    using Dune::MatrixVector::addProduct;
+    using Dune::MatrixVector::subtractProduct;
+    using Dune::MatrixVector::crossProduct;
+    using Dune::MatrixVector::transpose;
+    using Dune::MatrixVector::Axy;
+    using Dune::MatrixVector::bmAxy;
 }
 
 #endif