diff --git a/dumux/linear/linearalgebratraits.hh b/dumux/linear/linearalgebratraits.hh
new file mode 100644
index 0000000000000000000000000000000000000000..cef77f5d3821e89eb606c2d6b32e64c1d1d5707a
--- /dev/null
+++ b/dumux/linear/linearalgebratraits.hh
@@ -0,0 +1,82 @@
+// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+// vi: set et ts=4 sw=4 sts=4:
+/*****************************************************************************
+ *   See the file COPYING for full copying permissions.                      *
+ *                                                                           *
+ *   This program is free software: you can redistribute it and/or modify    *
+ *   it under the terms of the GNU General Public License as published by    *
+ *   the Free Software Foundation, either version 3 of the License, or       *
+ *   (at your option) any later version.                                     *
+ *                                                                           *
+ *   This program is distributed in the hope that it will be useful,         *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the            *
+ *   GNU General Public License for more details.                            *
+ *                                                                           *
+ *   You should have received a copy of the GNU General Public License       *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>.   *
+ *****************************************************************************/
+/*!
+ * \file
+ * \ingroup Linear
+ * \brief Define traits for linear algebra backends
+ */
+#ifndef DUMUX_LINEAR_ALGEBRA_TRAITS_HH
+#define DUMUX_LINEAR_ALGEBRA_TRAITS_HH
+
+#include <utility>
+#include <type_traits>
+
+#include <dumux/common/typetraits/vector.hh>
+#include <dumux/linear/matrixconverter.hh>
+
+namespace Dumux::Detail::LATraits {
+
+template<class Assembler, bool isMultiType = false>
+struct LATraitsFromAssemblerImpl
+{
+    using Vector = typename Assembler::ResidualType;
+    using Matrix = typename Assembler::JacobianMatrix;
+    using SingleTypeVector = Vector;
+    using SingleTypeMatrix = Matrix;
+};
+
+template<class Assembler>
+struct LATraitsFromAssemblerImpl<Assembler, true>
+{
+    using Vector = typename Assembler::ResidualType;
+    using Matrix = typename Assembler::JacobianMatrix;
+    using SingleTypeVector = decltype(VectorConverter<Vector>::multiTypeToBlockVector(std::declval<Vector>()));
+    using SingleTypeMatrix = decltype(MatrixConverter<Matrix>::multiTypeToBCRSMatrix(std::declval<Matrix>()));
+};
+
+} // end namespace Dumux::Detail::LATraits
+
+namespace Dumux {
+
+/*
+ * \ingroup Linear
+ * \brief Traits providing linear algebra types (vector, matrix)
+ */
+template<class M, class V, class STM = M, class STV = V>
+struct LinearAlgebraTraits
+{
+    using Matrix = M;
+    using Vector = V;
+    using SingleTypeMatrix = STM;
+    using SingleTypeVector = STV;
+};
+
+/*
+ * \ingroup Linear
+ * \brief Helper to extract linear algebra types from an assembler
+ */
+template<class Assembler>
+using LinearAlgebraTraitsFromAssembler =
+    Detail::LATraits::LATraitsFromAssemblerImpl<
+        Assembler, isMultiTypeBlockVector<typename Assembler::ResidualType>::value
+    >;
+
+} // end namespace Dumux
+
+#endif