diff --git a/dumux/material/components/componenttraits.hh b/dumux/material/components/componenttraits.hh
new file mode 100644
index 0000000000000000000000000000000000000000..27cfa721b5dca13ecb5fb0b73fa6ac1a5291b6d8
--- /dev/null
+++ b/dumux/material/components/componenttraits.hh
@@ -0,0 +1,53 @@
+// -*- 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 2 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 Components
+ * \brief Component traits, i.e. information extracted from components
+ */
+#ifndef DUMUX_COMPONENT_TRAITS_HH
+#define DUMUX_COMPONENT_TRAITS_HH
+
+#include <type_traits>
+
+#include <dumux/material/components/solid.hh>
+#include <dumux/material/components/liquid.hh>
+#include <dumux/material/components/gas.hh>
+
+namespace Dumux {
+
+template<class Component>
+struct ComponentTraits
+{
+    using Scalar = typename Component::Scalar;
+
+    //! if the component implements a solid state
+    static constexpr bool hasSolidState = std::is_base_of<Components::Solid<Scalar, Component>, Component>::value;
+
+    //! if the component implements a liquid state
+    static constexpr bool hasLiquidState = std::is_base_of<Components::Liquid<Scalar, Component>, Component>::value;
+
+    //! if the component implements a gaseous state
+    static constexpr bool hasGasState = std::is_base_of<Components::Gas<Scalar, Component>, Component>::value;
+};
+
+} // end namespace Dumux
+
+#endif
diff --git a/test/material/components/CMakeLists.txt b/test/material/components/CMakeLists.txt
index ee9e5e00d3462825e572d72878a767f75681e1fa..80508e7a4db8a7d77543f9551e31b600239a6177 100644
--- a/test/material/components/CMakeLists.txt
+++ b/test/material/components/CMakeLists.txt
@@ -1,3 +1,5 @@
+dune_add_test(SOURCES test_componenttraits.cc)
+
 add_executable(plot_component plotproperties.cc)
 
 dune_add_test(NAME plot_air
diff --git a/test/material/components/test_componenttraits.cc b/test/material/components/test_componenttraits.cc
new file mode 100644
index 0000000000000000000000000000000000000000..af88dd2ec001808246d5bd5a2195f1349802d4ce
--- /dev/null
+++ b/test/material/components/test_componenttraits.cc
@@ -0,0 +1,40 @@
+// -*- 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 2 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
+ *
+ * \brief Test the compoent traits
+ */
+
+#include "config.h"
+
+#include <type_traits>
+
+#include <dumux/material/components/air.hh>
+#include <dumux/material/components/componenttraits.hh>
+
+int main(int argc, char *argv[])
+{
+    using namespace Dumux;
+
+    using Traits = ComponentTraits<Components::Air<double>>;
+    static_assert(Traits::hasGasState, "Air component is reported to have no gas state?!");
+    // static_assert(!Traits::hasSolidState, "Air component is reported to implement a solid state?!");
+    static_assert(std::is_same<double, Traits::Scalar>::value, "Scalar type not correctly reported!");
+}