diff --git a/dumux/implicit/fluxvariablesvector.hh b/dumux/implicit/fluxvariablesvector.hh
new file mode 100644
index 0000000000000000000000000000000000000000..9745a5e1c4d4bfd867ecb2a28e1a8fc5b52aef43
--- /dev/null
+++ b/dumux/implicit/fluxvariablesvector.hh
@@ -0,0 +1,73 @@
+// -*- 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 Base class for the volume variables vector
+ */
+#ifndef DUMUX_IMPLICIT_FLUXVARSVECTOR_HH
+#define DUMUX_IMPLICIT_FLUXVARSVECTOR_HH
+
+#include <dumux/implicit/properties.hh>
+
+namespace Dumux
+{
+
+/*!
+ * \ingroup ImplicitModel
+ * \brief Base class for the flux variables vector, we always have darcy flux variables per face
+ */
+template<class TypeTag>
+class FluxVariablesVector
+{
+    using Problem = typename GET_PROP_TYPE(TypeTag, Problem);
+    using GridView = typename GET_PROP_TYPE(TypeTag, GridView);
+    using IndexType = typename GridView::IndexSet::IndexType;
+    using FluxVariables = typename GET_PROP_TYPE(TypeTag, FluxVariables);
+
+public:
+    void update(const Problem& problem)
+    {
+        fluxVars_.resize(problem.model().fvGeometries().numScvf());
+        for (const auto& element : elements(problem.gridView()))
+        {
+            for (auto&& scvf : problem.model().fvGeometries(element).scvfs())
+            {
+                (*this)[scvf.index()].update(problem, scvf);
+            }
+
+        }
+    }
+
+    const FluxVariables& operator [](IndexType scvfIdx) const
+    {
+        return fluxVars_[scvfIdx];
+    }
+
+    FluxVariables & operator [](IndexType scvfIdx)
+    {
+        return fluxVars_[scvfIdx];
+    }
+
+private:
+    std::vector<FluxVariables> fluxVars_;
+};
+
+} // end namespace
+
+#endif
diff --git a/dumux/implicit/volumevariablesvector.hh b/dumux/implicit/volumevariablesvector.hh
new file mode 100644
index 0000000000000000000000000000000000000000..fe4cdf443e864f1bdab667eaf5151d7dcc772689
--- /dev/null
+++ b/dumux/implicit/volumevariablesvector.hh
@@ -0,0 +1,65 @@
+// -*- 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 Base class for the volume variables vector
+ */
+#ifndef DUMUX_IMPLICIT_VOLVARSVECTOR_HH
+#define DUMUX_IMPLICIT_VOLVARSVECTOR_HH
+
+#include <dumux/implicit/properties.hh>
+
+namespace Dumux
+{
+
+/*!
+ * \ingroup ImplicitModel
+ * \brief Base class for the volume variables vector
+ */
+template<class TypeTag>
+class VolumeVariablesVector : public std::vector<typename GET_PROP_TYPE(TypeTag, VolumeVariables)>
+{
+    using Problem = typename GET_PROP_TYPE(TypeTag, Problem);
+    using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector);
+    using VolumeVariables = typename GET_PROP_TYPE(TypeTag, VolumeVariables);
+    using SubControlVolume = typename GET_PROP_TYPE(TypeTag, SubControlVolume);
+
+public:
+    void update(const Problem& problem, const SolutionVector& sol)
+    {
+        auto gridView = problem.gridView();
+
+        this->resize(gridView.size(0));
+        for (const auto& element : elements(gridView))
+        {
+            for (auto&& scv : problem.model().fvGeometries(element).scvs())
+            {
+                (*this)[scv.index()].update(sol[scv.dofIndex()],
+                                            problem,
+                                            element,
+                                            scv);
+            }
+
+        }
+    }
+};
+
+} // end namespace
+
+#endif