diff --git a/dumux/assembly/staggeredfvassembler.hh b/dumux/assembly/staggeredfvassembler.hh
index d3dc3203c8e16ea360b8d7a99a2a19090d1853cf..1fa58bafeb7ac53de52f74d82436e91ba32e78dd 100644
--- a/dumux/assembly/staggeredfvassembler.hh
+++ b/dumux/assembly/staggeredfvassembler.hh
@@ -29,7 +29,6 @@
 #include <dune/istl/matrixindexset.hh>
 
 #include <dumux/common/timeloop.hh>
-#include <dumux/implicit/staggered/properties.hh>
 #include <dumux/implicit/staggered/localresidual.hh>
 #include <dumux/discretization/methods.hh>
 
diff --git a/dumux/assembly/staggeredlocalassembler.hh b/dumux/assembly/staggeredlocalassembler.hh
index f4d949ad7f1b2c85f060de0df190142ec12024ca..f7ab28422e68322dcb0215f3e9d7054f3db22d04 100644
--- a/dumux/assembly/staggeredlocalassembler.hh
+++ b/dumux/assembly/staggeredlocalassembler.hh
@@ -27,7 +27,7 @@
 #include <dune/istl/matrixindexset.hh>
 #include <dune/istl/bvector.hh>
 
-#include <dumux/implicit/properties.hh>
+#include <dumux/common/basicproperties.hh>
 #include <dumux/assembly/diffmethod.hh>
 
 #include <dumux/implicit/staggered/primaryvariables.hh>
diff --git a/dumux/common/staggeredfvproblem.hh b/dumux/common/staggeredfvproblem.hh
index 248c965b5061b6ffd89c8de7944364f344cd18e0..384bbcd3cc62d210a4c12ef3400a86185bc7d51d 100644
--- a/dumux/common/staggeredfvproblem.hh
+++ b/dumux/common/staggeredfvproblem.hh
@@ -23,7 +23,7 @@
 #ifndef DUMUX_STAGGERD_FV_PROBLEM_HH
 #define DUMUX_STAGGERD_FV_PROBLEM_HH
 
-#include <dumux/implicit/staggered/properties.hh>
+#include <dumux/discretization/staggered/properties.hh>
 #include <dumux/common/fvproblem.hh>
 
 namespace Dumux
diff --git a/dumux/discretization/staggered/connectivitymap.hh b/dumux/discretization/staggered/connectivitymap.hh
index 9863d8eb490effacdbea05df390e4e1ed7a4d214..c71587679a5aa483b30114db32352ed029a7cb98 100644
--- a/dumux/discretization/staggered/connectivitymap.hh
+++ b/dumux/discretization/staggered/connectivitymap.hh
@@ -26,7 +26,7 @@
 #define DUMUX_STAGGERED_CONNECTIVITY_MAP_HH
 
 #include <vector>
-#include <dumux/implicit/properties.hh>
+#include <dumux/common/basicproperties.hh>
 
 namespace Dumux
 {
diff --git a/dumux/discretization/staggered/elementfluxvariablescache.hh b/dumux/discretization/staggered/elementfluxvariablescache.hh
index 5feb420cea47a244087e541603edce95dcf22c73..adf2e895cefcf40fee06d28c5d556ee3f1ca30c3 100644
--- a/dumux/discretization/staggered/elementfluxvariablescache.hh
+++ b/dumux/discretization/staggered/elementfluxvariablescache.hh
@@ -23,7 +23,7 @@
 #ifndef DUMUX_DISCRETIZATION_STAGGERED_ELEMENT_FLUXVARSCACHE_HH
 #define DUMUX_DISCRETIZATION_STAGGERED_ELEMENT_FLUXVARSCACHE_HH
 
-#include <dumux/implicit/properties.hh>
+#include <dumux/common/basicproperties.hh>
 
 namespace Dumux
 {
diff --git a/dumux/discretization/staggered/elementvolumevariables.hh b/dumux/discretization/staggered/elementvolumevariables.hh
index 0ada499689039043105ab4dbc8ba6542af3f6e9b..cdf0ff46bbfcf42aca36c8e9c80a77375b567fbb 100644
--- a/dumux/discretization/staggered/elementvolumevariables.hh
+++ b/dumux/discretization/staggered/elementvolumevariables.hh
@@ -23,7 +23,7 @@
 #ifndef DUMUX_DISCRETIZATION_STAGGERED_ELEMENT_VOLUMEVARIABLES_HH
 #define DUMUX_DISCRETIZATION_STAGGERED_ELEMENT_VOLUMEVARIABLES_HH
 
-#include <dumux/implicit/properties.hh>
+#include <dumux/common/basicproperties.hh>
 
 namespace Dumux
 {
diff --git a/dumux/discretization/staggered/freeflow/facevariables.hh b/dumux/discretization/staggered/freeflow/facevariables.hh
index f9591f5101453f9afe0099efc4b7e13a72187293..7f8a7b00227e81f9e6107c7ea738d8888fed121b 100644
--- a/dumux/discretization/staggered/freeflow/facevariables.hh
+++ b/dumux/discretization/staggered/freeflow/facevariables.hh
@@ -23,7 +23,7 @@
 #ifndef DUMUX_DISCRETIZATION_STAGGERED_FREEFLOW_FACEVARIABLES_HH
 #define DUMUX_DISCRETIZATION_STAGGERED_FREEFLOW_FACEVARIABLES_HH
 
-#include <dumux/implicit/properties.hh>
+#include <dumux/common/basicproperties.hh>
 
 namespace Dumux
 {
diff --git a/dumux/discretization/staggered/fvelementgeometry.hh b/dumux/discretization/staggered/fvelementgeometry.hh
index 8dca20b69ed6f23745c71095d75706d60956ab26..ef34bf41c2da24b92ad7bb0891fc67ad7db5afb5 100644
--- a/dumux/discretization/staggered/fvelementgeometry.hh
+++ b/dumux/discretization/staggered/fvelementgeometry.hh
@@ -28,7 +28,6 @@
 #include <dune/common/iteratorrange.hh>
 
 #include <dumux/discretization/scvandscvfiterators.hh>
-#include <dumux/implicit/staggered/properties.hh>
 
 namespace Dumux
 {
diff --git a/dumux/discretization/staggered/fvgridgeometry.hh b/dumux/discretization/staggered/fvgridgeometry.hh
index 31883f8f02b9f24d7ca625e1ab73b54307a9dc2d..8978074e8aba09b98528c09898c6e42e4ac61364 100644
--- a/dumux/discretization/staggered/fvgridgeometry.hh
+++ b/dumux/discretization/staggered/fvgridgeometry.hh
@@ -26,7 +26,6 @@
 #define DUMUX_DISCRETIZATION_STAGGERED_GLOBAL_FVGEOMETRY_HH
 
 #include <dumux/common/elementmap.hh>
-#include <dumux/implicit/staggered/properties.hh>
 #include <dumux/discretization/basefvgridgeometry.hh>
 #include <dumux/common/boundingboxtree.hh>
 #include <dumux/discretization/staggered/connectivitymap.hh>
diff --git a/dumux/discretization/staggered/globalfacevariables.hh b/dumux/discretization/staggered/globalfacevariables.hh
index 74c013decc19d8763669a7bedf29709a893fa704..7582a3bc260e61374e5b1fa6a71ab406785e203d 100644
--- a/dumux/discretization/staggered/globalfacevariables.hh
+++ b/dumux/discretization/staggered/globalfacevariables.hh
@@ -23,7 +23,7 @@
 #ifndef DUMUX_DISCRETIZATION_STAGGERED_GLOBAL_FACEVARIABLES_HH
 #define DUMUX_DISCRETIZATION_STAGGERED_GLOBAL_FACEVARIABLES_HH
 
-#include <dumux/implicit/properties.hh>
+#include <dumux/common/basicproperties.hh>
 
 namespace Dumux
 {
diff --git a/dumux/discretization/staggered/globalfluxvariablescache.hh b/dumux/discretization/staggered/globalfluxvariablescache.hh
index 9e9a194ba7742e1a8bf5c140a825764e3ca70d1e..432b148255209f516fe418e4dc5eca446a5dbffb 100644
--- a/dumux/discretization/staggered/globalfluxvariablescache.hh
+++ b/dumux/discretization/staggered/globalfluxvariablescache.hh
@@ -23,7 +23,7 @@
 #ifndef DUMUX_DISCRETIZATION_STAGGERED_GLOBAL_FLUXVARSCACHE_HH
 #define DUMUX_DISCRETIZATION_STAGGERED_GLOBAL_FLUXVARSCACHE_HH
 
-#include <dumux/implicit/properties.hh>
+#include <dumux/common/basicproperties.hh>
 #include <dumux/discretization/staggered/elementfluxvariablescache.hh>
 
 namespace Dumux
diff --git a/dumux/discretization/staggered/globalvolumevariables.hh b/dumux/discretization/staggered/globalvolumevariables.hh
index 003d8441096ccbf8972a8966d06a8704d420edd6..b9b0b3d89c226e014f653b06cf58a14643998c93 100644
--- a/dumux/discretization/staggered/globalvolumevariables.hh
+++ b/dumux/discretization/staggered/globalvolumevariables.hh
@@ -23,7 +23,7 @@
 #ifndef DUMUX_DISCRETIZATION_STAGGERED_GLOBAL_VOLUMEVARIABLES_HH
 #define DUMUX_DISCRETIZATION_STAGGERED_GLOBAL_VOLUMEVARIABLES_HH
 
-#include <dumux/implicit/properties.hh>
+#include <dumux/common/basicproperties.hh>
 #include <dumux/discretization/staggered/elementvolumevariables.hh>
 
 namespace Dumux
@@ -44,10 +44,6 @@ class StaggeredGlobalVolumeVariables<TypeTag, /*enableGlobalVolVarsCache*/true>
     // The local class needs to access and change volVars
     friend StaggeredElementVolumeVariables<TypeTag, true>;
 
-    // as does the primary variable switch
-    friend class PrimaryVariableSwitch<TypeTag>;
-    friend typename GET_PROP_TYPE(TypeTag, PrimaryVariableSwitch);
-
     using Problem = typename GET_PROP_TYPE(TypeTag, Problem);
     using GridView = typename GET_PROP_TYPE(TypeTag, GridView);
     using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector);
diff --git a/dumux/implicit/staggered/propertydefaults.hh b/dumux/discretization/staggered/properties.hh
similarity index 71%
rename from dumux/implicit/staggered/propertydefaults.hh
rename to dumux/discretization/staggered/properties.hh
index aa2fe95eab52cff8ef34ae129234803c06706a2c..c9a2d811b4e703caab7bae4ab0d2310849f7a55c 100644
--- a/dumux/implicit/staggered/propertydefaults.hh
+++ b/dumux/discretization/staggered/properties.hh
@@ -18,69 +18,63 @@
  *****************************************************************************/
 /*!
  * \ingroup Properties
- * \ingroup CCTpfaProperties
- * \ingroup StaggeredModel
  * \file
  *
- * \brief Default properties for cell centered models
+ * \brief Defines a type tag and some properties for models using the box scheme.
  */
-#ifndef DUMUX_STAGGERED_PROPERTY_DEFAULTS_HH
-#define DUMUX_STAGGERED_PROPERTY_DEFAULTS_HH
 
-#include <dumux/implicit/propertydefaults.hh>
-#include <dumux/discretization/staggered/fvgridgeometry.hh>
-#include <dumux/discretization/staggered/fvelementgeometry.hh>
-// #include <dumux/discretization/cellcentered/tpfa/fvelementgeometry.hh>
-#include <dumux/implicit/staggered/properties.hh>
+#ifndef DUMUX_STAGGERDs_PROPERTIES_HH
+#define DUMUX_STAGGERDs_PROPERTIES_HH
+
+#include <dumux/common/properties.hh>
+
 #include <dumux/discretization/methods.hh>
+#include <dumux/discretization/fvproperties.hh>
 
+#include <dumux/implicit/cellcentered/elementboundarytypes.hh>
+#include <dumux/implicit/staggered/localresidual.hh>
+#include <dumux/implicit/staggered/primaryvariables.hh>
+#include <dumux/implicit/staggered/gridvariables.hh>
+
+#include <dumux/discretization/cellcentered/subcontrolvolume.hh>
 #include <dumux/discretization/staggered/globalfluxvariablescache.hh>
 #include <dumux/discretization/staggered/elementfluxvariablescache.hh>
-
-#include <dumux/discretization/staggered/elementvolumevariables.hh>
 #include <dumux/discretization/staggered/globalvolumevariables.hh>
+#include <dumux/discretization/staggered/elementvolumevariables.hh>
+#include <dumux/discretization/staggered/fvgridgeometry.hh>
+#include <dumux/discretization/staggered/fvelementgeometry.hh>
 #include <dumux/discretization/staggered/globalfacevariables.hh>
 
-#include <dune/common/fvector.hh>
-#include <dune/common/fmatrix.hh>
-#include <dune/common/indices.hh>
-#include <dune/istl/bcrsmatrix.hh>
+#include <dumux/common/intersectionmapper.hh>
 #include <dune/istl/multitypeblockvector.hh>
 #include <dune/istl/multitypeblockmatrix.hh>
 
-#include <dumux/linear/seqsolverbackend.hh>
+namespace Dumux
+{
 
-#include <dumux/io/staggeredvtkoutputmodule.hh>
-#include <dumux/common/intersectionmapper.hh>
+// forward declarations
+template<class TypeTag> class CCElementBoundaryTypes;
 
-#include "localresidual.hh"
-#include "properties.hh"
-#include "newtoncontroller.hh"
-#include "newtonconvergencewriter.hh"
-#include "primaryvariables.hh"
-#include "gridvariables.hh"
+namespace Properties
+{
 
-namespace Dumux {
+NEW_PROP_TAG(CellCenterSolutionVector);
+NEW_PROP_TAG(FaceSolutionVector);
 
-// forward declarations
-template<class TypeTag> class CCElementBoundaryTypes;
+//! Type tag for the box scheme.
+NEW_TYPE_TAG(StaggeredModel, INHERITS_FROM(FiniteVolumeModel, NumericModel));
 
-namespace Properties {
 //! Set the corresponding discretization method property
 SET_PROP(StaggeredModel, DiscretizationMethod)
 {
     static const DiscretizationMethods value = DiscretizationMethods::Staggered;
 };
 
-
-//! Set the default for the global finite volume geometry
+//! Set the default for the FVElementGeometry vector
 SET_TYPE_PROP(StaggeredModel, FVGridGeometry, StaggeredFVGridGeometry<TypeTag, GET_PROP_VALUE(TypeTag, EnableFVGridGeometryCache)>);
 
-//! Set the default for the local finite volume geometry
+//! Set the default for the FVElementGeometry vector
 SET_TYPE_PROP(StaggeredModel, FVElementGeometry, StaggeredFVElementGeometry<TypeTag, GET_PROP_VALUE(TypeTag, EnableFVGridGeometryCache)>);
-// SET_TYPE_PROP(StaggeredModel, FVElementGeometry, Dumux::CCTpfaFVElementGeometry<TypeTag, GET_PROP_VALUE(TypeTag, EnableFVGridGeometryCache)>);
-//TODO: try to use CC
-SET_TYPE_PROP(StaggeredModel, GridVariables, StaggeredGridVariables<TypeTag>);
 
 //! The sub control volume
 SET_PROP(StaggeredModel, SubControlVolume)
@@ -93,47 +87,46 @@ public:
     typedef Dumux::CCSubControlVolume<ScvGeometry, IndexType> type;
 };
 
+// SET_PROP(StaggeredModel, SubControlVolumeFace)
+// {
+// private:
+//     using GridView = typename GET_PROP_TYPE(TypeTag, GridView);
+//     using Scalar = typename GridView::ctype;
+//     static const int dim = GridView::dimension;
+//     static const int dimWorld = GridView::dimensionworld;
+//     using ScvfGeometry = Dune::MultiLinearGeometry<Scalar, dim-1, dimWorld>;
+//     using IndexType = typename GridView::IndexSet::IndexType;
+// public:
+//     using type = BoxSubControlVolumeFace<ScvfGeometry, IndexType>;
+// };
+
 SET_TYPE_PROP(StaggeredModel, GlobalFaceVars, Dumux::StaggeredGlobalFaceVariables<TypeTag>);
 
 //! Set the default for the ElementBoundaryTypes
 SET_TYPE_PROP(StaggeredModel, ElementBoundaryTypes, Dumux::CCElementBoundaryTypes<TypeTag>);
 
-//! Mapper for the degrees of freedoms.
-SET_TYPE_PROP(StaggeredModel, DofMapper, typename GET_PROP_TYPE(TypeTag, ElementMapper));
+//! The global volume variables vector class
+SET_TYPE_PROP(StaggeredModel, GlobalVolumeVariables, StaggeredGlobalVolumeVariables<TypeTag, GET_PROP_VALUE(TypeTag, EnableGlobalVolumeVariablesCache)>);
 
-//! The global current volume variables vector class
-SET_TYPE_PROP(StaggeredModel, GlobalVolumeVariables, Dumux::StaggeredGlobalVolumeVariables<TypeTag, GET_PROP_VALUE(TypeTag, EnableGlobalVolumeVariablesCache)>);
+//! The element volume variables vector class
+SET_TYPE_PROP(StaggeredModel, ElementVolumeVariables, StaggeredElementVolumeVariables<TypeTag, GET_PROP_VALUE(TypeTag, EnableGlobalVolumeVariablesCache)>);
 
 //! The global flux variables cache vector class
-SET_TYPE_PROP(StaggeredModel, GlobalFluxVariablesCache, Dumux::StaggeredGlobalFluxVariablesCache<TypeTag, GET_PROP_VALUE(TypeTag, EnableGlobalFluxVariablesCache)>);
+SET_TYPE_PROP(StaggeredModel, GlobalFluxVariablesCache, StaggeredGlobalFluxVariablesCache<TypeTag, GET_PROP_VALUE(TypeTag, EnableGlobalFluxVariablesCache)>);
 
 //! The local flux variables cache vector class
-SET_TYPE_PROP(StaggeredModel, ElementFluxVariablesCache, Dumux::StaggeredElementFluxVariablesCache<TypeTag, GET_PROP_VALUE(TypeTag, EnableGlobalFluxVariablesCache)>);
-
-//! The global previous volume variables vector class
-SET_TYPE_PROP(StaggeredModel, ElementVolumeVariables, Dumux::StaggeredElementVolumeVariables<TypeTag, GET_PROP_VALUE(TypeTag, EnableGlobalVolumeVariablesCache)>);
+SET_TYPE_PROP(StaggeredModel, ElementFluxVariablesCache, StaggeredElementFluxVariablesCache<TypeTag, GET_PROP_VALUE(TypeTag, EnableGlobalFluxVariablesCache)>);
 
 //! Set the BaseLocalResidual to StaggeredLocalResidual
-SET_TYPE_PROP(StaggeredModel, BaseLocalResidual, Dumux::StaggeredLocalResidual<TypeTag>);
+SET_TYPE_PROP(StaggeredModel, BaseLocalResidual, StaggeredLocalResidual<TypeTag>);
 
-//! Set the BaseLocalResidual to StaggeredLocalResidual
 SET_TYPE_PROP(StaggeredModel, IntersectionMapper, Dumux::ConformingGridIntersectionMapper<TypeTag>);
 
-//! indicate that this is no box discretization
-SET_BOOL_PROP(StaggeredModel, ImplicitIsBox, false);
-
-SET_TYPE_PROP(StaggeredModel, NewtonController, StaggeredNewtonController<TypeTag>);
-
-SET_INT_PROP(StaggeredModel, NumEqCellCenter, 1);
-SET_INT_PROP(StaggeredModel, NumEqFace, 1);
-
-SET_PROP(StaggeredModel, NumEq)
+//! Definition of the indices for cell center and face dofs in the global solution vector
+SET_PROP(StaggeredModel, DofTypeIndices)
 {
-private:
-    static constexpr auto numEqCellCenter = GET_PROP_VALUE(TypeTag, NumEqCellCenter);
-    static constexpr auto numEqFace = GET_PROP_VALUE(TypeTag, NumEqFace);
-public:
-    static constexpr auto value = numEqCellCenter + numEqFace;
+    using CellCenterIdx = Dune::index_constant<0>;
+    using FaceIdx = Dune::index_constant<1>;
 };
 
 //! A vector of primary variables
@@ -201,19 +194,23 @@ public:
     using type = typename Dune::MultiTypeBlockMatrix<RowCellCenter, RowFace>;
 };
 
-//! Definition of the indices for cell center and face dofs in the global solution vector
-SET_PROP(StaggeredModel, DofTypeIndices)
+SET_PROP(StaggeredModel, NumEq)
 {
-    using CellCenterIdx = Dune::index_constant<0>;
-    using FaceIdx = Dune::index_constant<1>;
+private:
+    static constexpr auto numEqCellCenter = GET_PROP_VALUE(TypeTag, NumEqCellCenter);
+    static constexpr auto numEqFace = GET_PROP_VALUE(TypeTag, NumEqFace);
+public:
+    static constexpr auto value = numEqCellCenter + numEqFace;
 };
 
-//! set default solver
-// SET_TYPE_PROP(StaggeredModel, LinearSolver, Dumux::GSBiCGSTABBackend<TypeTag>);
-SET_TYPE_PROP(StaggeredModel, LinearSolver, Dumux::UMFPackBackend<TypeTag>);
+SET_PROP(StaggeredModel, LinearSolverBlockSize)
+{
+    // LinearSolverAcceptsMultiTypeMatrix<T>::value
+    // TODO: make somehow dependend? or only relevant for direct solvers?
+public:
+    static constexpr auto value = 1;
+};
 
-//! set the block level to 2, suitable for e.g. the Dune::MultiTypeBlockMatrix
-SET_INT_PROP(StaggeredModel, LinearSolverPreconditionerBlockLevel, 2);
 
 //! Boundary types at a single degree of freedom
 SET_PROP(StaggeredModel, BoundaryTypes)
@@ -236,17 +233,7 @@ public:
     using type = StaggeredPrimaryVariables<TypeTag, CellCenterPrimaryVariables, FacePrimaryVariables>;
 };
 
-//! use the plain newton convergence writer by default
-// SET_TYPE_PROP(StaggeredModel, NewtonConvergenceWriter, StaggeredNewtonConvergenceWriter<TypeTag>);
-
-//! Write separate vtp files for face variables by default
-SET_BOOL_PROP(StaggeredModel, VtkWriteFaceData, true);
-
-//! For compatibility
-SET_BOOL_PROP(StaggeredModel, EnableInteriorBoundaries, false);
-
-//! Set staggered vtk output module
-SET_TYPE_PROP(StaggeredModel, VtkOutputModule, StaggeredVtkOutputModule<TypeTag>);
+SET_TYPE_PROP(StaggeredModel, GridVariables, StaggeredGridVariables<TypeTag>);
 
 //! Set one or different base epsilons for the calculations of the localJacobian's derivatives
 SET_PROP(StaggeredModel, BaseEpsilon)
@@ -266,8 +253,9 @@ public:
     }
 };
 
-} // namespace Properties
 
+
+} // namespace Properties
 } // namespace Dumux
 
 #endif
diff --git a/dumux/freeflow/staggered/fluxvariables.hh b/dumux/freeflow/staggered/fluxvariables.hh
index b0c09bd413b038d16b29516ed395bb39aeec3689..b4d5878016e31ce9be89986caa86497ff56ccec6 100644
--- a/dumux/freeflow/staggered/fluxvariables.hh
+++ b/dumux/freeflow/staggered/fluxvariables.hh
@@ -23,7 +23,7 @@
 #ifndef DUMUX_FREELOW_IMPLICIT_FLUXVARIABLES_HH
 #define DUMUX_FREELOW_IMPLICIT_FLUXVARIABLES_HH
 
-#include <dumux/implicit/properties.hh>
+#include <dumux/common/basicproperties.hh>
 #include <dumux/discretization/fluxvariablesbase.hh>
 
 namespace Dumux
diff --git a/dumux/freeflow/staggered/fluxvariablescache.hh b/dumux/freeflow/staggered/fluxvariablescache.hh
index e84095a7f12495816c0d8cef5de0836362b87b4c..10a568425b87c1889ae6b5617eca65425824af3c 100644
--- a/dumux/freeflow/staggered/fluxvariablescache.hh
+++ b/dumux/freeflow/staggered/fluxvariablescache.hh
@@ -23,7 +23,7 @@
 #ifndef DUMUX_FREEFLOW_IMPLICIT_FLUXVARIABLESCACHE_HH
 #define DUMUX_FREEFLOW_IMPLICIT_FLUXVARIABLESCACHE_HH
 
-#include <dumux/implicit/properties.hh>
+#include <dumux/common/basicproperties.hh>
 #include <dune/localfunctions/lagrange/pqkfactory.hh>
 #include <dumux/discretization/methods.hh>
 
diff --git a/dumux/freeflow/staggered/problem.hh b/dumux/freeflow/staggered/problem.hh
index f954237503fe6234fe1e8258acf111392be0b7d9..75bcc68644c37482b592d938ce9139bcfb0fa74c 100644
--- a/dumux/freeflow/staggered/problem.hh
+++ b/dumux/freeflow/staggered/problem.hh
@@ -23,7 +23,7 @@
 #ifndef DUMUX_NAVIERSTOKES_PROBLEM_HH
 #define DUMUX_NAVIERSTOKES_PROBLEM_HH
 
-#include <dumux/implicit/properties.hh>
+#include <dumux/common/basicproperties.hh>
 #include "properties.hh"
 #include <dumux/common/staggeredfvproblem.hh>
 
diff --git a/dumux/freeflow/staggered/properties.hh b/dumux/freeflow/staggered/properties.hh
index 246bcc04d70650ea5e3aa111a6e78f5b7e49e1d8..a3cf7e352aec2102dc028de81f450f8492223bd8 100644
--- a/dumux/freeflow/staggered/properties.hh
+++ b/dumux/freeflow/staggered/properties.hh
@@ -27,9 +27,13 @@
 #ifndef DUMUX_NAVIERSTOKES_PROPERTIES_HH
 #define DUMUX_NAVIERSTOKES_PROPERTIES_HH
 
+
+#include <dumux/common/basicproperties.hh>
+#include <dumux/linear/linearsolverproperties.hh>
 #include <dumux/freeflow/staggeredni/properties.hh>
 
 
+
 namespace Dumux
 {
 // \{
@@ -43,7 +47,7 @@ namespace Properties {
 //////////////////////////////////////////////////////////////////
 
 //! The type tags for the implicit single-phase problems
-NEW_TYPE_TAG(NavierStokes);
+NEW_TYPE_TAG(NavierStokes, INHERITS_FROM(LinearSolverTypeTag));
 
 //! The type tags for the corresponding non-isothermal problems
 NEW_TYPE_TAG(NavierStokesNI, INHERITS_FROM(NavierStokes, NavierStokesNonIsothermal));
diff --git a/dumux/freeflow/staggered/propertydefaults.hh b/dumux/freeflow/staggered/propertydefaults.hh
index ce0b78f6452928fbac547aca3390dab8cee085ee..4653b05b4720cc41333faa3592ceb588f10e5919 100644
--- a/dumux/freeflow/staggered/propertydefaults.hh
+++ b/dumux/freeflow/staggered/propertydefaults.hh
@@ -52,6 +52,7 @@
 #include <dumux/discretization/staggered/freeflow/staggeredgeometryhelper.hh>
 #include <dumux/discretization/staggered/freeflow/subcontrolvolumeface.hh>
 #include <dumux/discretization/staggered/freeflow/facevariables.hh>
+#include <dumux/implicit/staggered/primaryvariables.hh>
 
 
 
@@ -191,6 +192,8 @@ SET_TYPE_PROP(NavierStokes, EnergyLocalResidual, FreeFlowEnergyLocalResidual<Typ
 
 SET_TYPE_PROP(NavierStokes, EnergyFluxVariables, FreeFlowEnergyFluxVariables<TypeTag>);
 
+SET_BOOL_PROP(NavierStokes, EnableEnergyBalance, false);
+
 //! average is used as default model to compute the effective thermal heat conductivity
 // SET_PROP(NavierStokesNI, ThermalConductivityModel)
 // { private :
diff --git a/dumux/freeflow/staggered/velocityoutput.hh b/dumux/freeflow/staggered/velocityoutput.hh
index 36951d7ef3923c592b7e20014f2c27caef325f96..d23742c85780f5222b0ef09fa3e093e45f9cb2bf 100644
--- a/dumux/freeflow/staggered/velocityoutput.hh
+++ b/dumux/freeflow/staggered/velocityoutput.hh
@@ -28,7 +28,7 @@
 #include <dune/istl/bvector.hh>
 #include <dune/geometry/referenceelements.hh>
 
-#include <dumux/implicit/properties.hh>
+#include <dumux/common/basicproperties.hh>
 #include <dumux/discretization/methods.hh>
 
 namespace Dumux
diff --git a/dumux/freeflow/staggered/vtkoutputfields.hh b/dumux/freeflow/staggered/vtkoutputfields.hh
index 5d142ea1acca34be679a944090837b12d25b0432..e990f49a23a1f8bad2aeb801b2506616b8466bdc 100644
--- a/dumux/freeflow/staggered/vtkoutputfields.hh
+++ b/dumux/freeflow/staggered/vtkoutputfields.hh
@@ -23,7 +23,7 @@
 #ifndef DUMUX_NAVIER_STOKES_VTK_OUTPUT_FIELDS_HH
 #define DUMUX_NAVIER_STOKES_VTK_OUTPUT_FIELDS_HH
 
-#include <dumux/implicit/properties.hh>
+#include <dumux/common/basicproperties.hh>
 
 namespace Dumux
 {
diff --git a/dumux/freeflow/staggeredni/fluxvariables.hh b/dumux/freeflow/staggeredni/fluxvariables.hh
index 34d8b7f6b49de94ec130adbb7d76310073871297..8fa221d1a522ff7e8f8e1931832d4c52c3c5785f 100644
--- a/dumux/freeflow/staggeredni/fluxvariables.hh
+++ b/dumux/freeflow/staggeredni/fluxvariables.hh
@@ -23,7 +23,7 @@
 #ifndef DUMUX_FREELOW_IMPLICIT_NI_FLUXVARIABLES_HH
 #define DUMUX_FREELOW_IMPLICIT_NI_FLUXVARIABLES_HH
 
-#include <dumux/implicit/properties.hh>
+#include <dumux/common/basicproperties.hh>
 
 namespace Dumux
 {
@@ -144,7 +144,7 @@ private:
         const auto& upstreamVolVars = insideIsUpstream ? insideVolVars : outsideVolVars;
         const auto& downstreamVolVars = insideIsUpstream ? outsideVolVars : insideVolVars;
 
-        const Scalar upWindWeight = GET_PROP_VALUE(TypeTag, ImplicitUpwindWeight);
+        static const Scalar upWindWeight = getParamFromGroup<Scalar>(GET_PROP_VALUE(TypeTag, ModelParameterGroup), "Implicit.UpwindWeight");
         const Scalar upstreamDensity = upstreamVolVars.density();
         const Scalar downstreamDensity = downstreamVolVars.density();
         const Scalar upstreamEnthalpy = upstreamVolVars.enthalpy();
diff --git a/dumux/freeflow/staggeredni/properties.hh b/dumux/freeflow/staggeredni/properties.hh
index b3bbc8f45fa067d509dcae2154ec2e22bcef22b3..ca3b7a15f135413c502772a60a8d277e87cf0e23 100644
--- a/dumux/freeflow/staggeredni/properties.hh
+++ b/dumux/freeflow/staggeredni/properties.hh
@@ -27,7 +27,7 @@
 #ifndef DUMUX_NAVIERSTOKES_NI_PROPERTIES_HH
 #define DUMUX_NAVIERSTOKES_NI_PROPERTIES_HH
 
-#include <dumux/implicit/properties.hh>
+#include <dumux/common/basicproperties.hh>
 
 namespace Dumux
 {
diff --git a/dumux/freeflow/staggeredni/propertydefaults.hh b/dumux/freeflow/staggeredni/propertydefaults.hh
index cd81fd2bbccb27f62b06e1ed69967d020de5c410..e9cc5cbc1dbcf79fac9cff907d26e2c7da5f435e 100644
--- a/dumux/freeflow/staggeredni/propertydefaults.hh
+++ b/dumux/freeflow/staggeredni/propertydefaults.hh
@@ -47,13 +47,11 @@ public:
     static constexpr auto value = isothermalNumEqCellCenter + 1;
 };
 
-SET_TYPE_PROP(NavierStokesNonIsothermal, Model, NavierStokesNonIsothermalModel<TypeTag>);
-
 SET_TYPE_PROP(NavierStokesNonIsothermal, Indices, NavierStokesNonIsothermalIndices<TypeTag>);
 
 SET_BOOL_PROP(NavierStokesNonIsothermal, EnableEnergyBalance, true);
 
-SET_TYPE_PROP(NavierStokesNonIsothermal, HeatConductionType, FouriersLaw<TypeTag>);
+// SET_TYPE_PROP(NavierStokesNonIsothermal, HeatConductionType, FouriersLaw<TypeTag>); TODO
 
 } // end namespace Properties
 
diff --git a/dumux/implicit/staggered/localresidual.hh b/dumux/implicit/staggered/localresidual.hh
index e2f3caf56bb3a04505e51c143fa75bf96ed513af..d6b5941e2b0f77d0c2d842b0bc99f1ae4ad7228e 100644
--- a/dumux/implicit/staggered/localresidual.hh
+++ b/dumux/implicit/staggered/localresidual.hh
@@ -28,8 +28,7 @@
 #include <dumux/common/valgrind.hh>
 #include <dumux/common/capabilities.hh>
 #include <dumux/common/timeloop.hh>
-
-#include "properties.hh"
+#include <dumux/discretization/staggered/properties.hh>
 
 namespace Dumux
 {
@@ -44,7 +43,6 @@ namespace Dumux
 template<class TypeTag>
 class StaggeredLocalResidual
 {
-    friend class ImplicitLocalResidual<TypeTag>;
     using GridView = typename GET_PROP_TYPE(TypeTag, GridView);
 
     enum { numEq = GET_PROP_VALUE(TypeTag, NumEq) };
diff --git a/dumux/implicit/staggered/newtoncontroller.hh b/dumux/implicit/staggered/newtoncontroller.hh
index 1ba774e0e612ade30124ef7a2fa394ba1878409c..fc00686af30ea1ac068088ecba08760a030b97d3 100644
--- a/dumux/implicit/staggered/newtoncontroller.hh
+++ b/dumux/implicit/staggered/newtoncontroller.hh
@@ -27,7 +27,8 @@
 #ifndef DUMUX_STAGGERED_NEWTON_CONTROLLER_HH
 #define DUMUX_STAGGERED_NEWTON_CONTROLLER_HH
 
-#include "properties.hh"
+#include <dumux/discretization/staggered/properties.hh>
+#include <dumux/common/properties.hh>
 
 #include <dumux/nonlinear/newtoncontroller.hh>
 #include <dumux/linear/linearsolveracceptsmultitypematrix.hh>
@@ -36,16 +37,16 @@
 
 namespace Dumux {
 
-namespace Properties
-{
-    SET_PROP(StaggeredModel, LinearSolverBlockSize)
-    {
-        // LinearSolverAcceptsMultiTypeMatrix<T>::value
-        // TODO: make somehow dependend? or only relevant for direct solvers?
-    public:
-        static constexpr auto value = 1;
-    };
-}
+// namespace Properties
+// {
+//     SET_PROP(StaggeredModel, LinearSolverBlockSize)
+//     {
+//         // LinearSolverAcceptsMultiTypeMatrix<T>::value
+//         // TODO: make somehow dependend? or only relevant for direct solvers?
+//     public:
+//         static constexpr auto value = 1;
+//     };
+// }TODO: why not possible here?
 /*!
  * \ingroup PNMModel
  * \brief A PNM specific controller for the newton solver.
diff --git a/dumux/implicit/staggered/primaryvariables.hh b/dumux/implicit/staggered/primaryvariables.hh
index e798becaa47c8627ac748a2c359277b45f01898c..06c1b66ecbf3aa9e6aa2f44a138098f9ede98934 100644
--- a/dumux/implicit/staggered/primaryvariables.hh
+++ b/dumux/implicit/staggered/primaryvariables.hh
@@ -23,7 +23,6 @@
 #ifndef DUMUX_STAGGERED_PRIMARYVARIABLES_HH
 #define DUMUX_STAGGERED_PRIMARYVARIABLES_HH
 
-#include "properties.hh"
 #include <dune/istl/multitypeblockvector.hh>
 #include <dumux/common/intrange.hh>
 
diff --git a/dumux/implicit/staggered/properties.hh b/dumux/implicit/staggered/properties.hh
deleted file mode 100644
index 03dbcd48effa518f8119753b8501dc05a0b9b460..0000000000000000000000000000000000000000
--- a/dumux/implicit/staggered/properties.hh
+++ /dev/null
@@ -1,75 +0,0 @@
-// -*- 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/>.   *
- *****************************************************************************/
-#ifndef DUMUX_STAGGERED_PROPERTIES_HH
-#define DUMUX_STAGGERED_PROPERTIES_HH
-
-#include <dumux/implicit/properties.hh>
-
-/*!
- * \ingroup Properties
- * \ingroup ImplicitProperties
- * \ingroup StaggeredModel
- * \file
- * \brief Specify the shape functions, operator assemblers, etc
- *        used for the StaggeredModel.
- */
-namespace Dumux
-{
-
-namespace Properties
-{
-// \{
-
-//////////////////////////////////////////////////////////////////
-// Type tags
-//////////////////////////////////////////////////////////////////
-
-//! The type tag for models based on staggered scheme
-NEW_TYPE_TAG(StaggeredModel, INHERITS_FROM(ImplicitBase));
-
-NEW_PROP_TAG(StaggeredGeometryHelper); //!< Helper class to ease the creation of stencils, etc.
-
-NEW_PROP_TAG(CellCenterPrimaryVariables); //!< A vector of primary variables for cell center dofs
-NEW_PROP_TAG(FacePrimaryVariables); //!< A vector of primary variables for face dofs
-NEW_PROP_TAG(CellCenterSolutionVector); //!< Vector containing all cell centered primary variables
-NEW_PROP_TAG(FaceSolutionVector); //!< Vector containing all face primary variables
-
-NEW_PROP_TAG(EnableInteriorBoundaries); //!< For compatibility
-
-NEW_PROP_TAG(BaseEpsilon); //!< Set one or different base epsilons for the calculations of the localJacobian's derivatives
-
-NEW_PROP_TAG(NumEqCellCenter); //!< Number of equations per cell center dof
-NEW_PROP_TAG(NumEqFace); //!< Number of equations per face dof
-NEW_PROP_TAG(DofTypeIndices); //!< Indices to choose between cell center and face dofs
-
-NEW_PROP_TAG(FaceVariables); //!< Variables associated to facets (equivalent to volVars)
-NEW_PROP_TAG(GlobalFaceVars); //!< Global vector of facet variables
-
-NEW_PROP_TAG(IntersectionMapper); //!< The intersection mapper
-
-NEW_PROP_TAG(VtkWriteFaceData); //!< Decide whether to write separate vtp files for face variables
-
-}
-}
-
-// \}
-
-#include <dumux/implicit/staggered/propertydefaults.hh>
-
-#endif
diff --git a/dumux/io/staggeredvtkoutputmodule.hh b/dumux/io/staggeredvtkoutputmodule.hh
deleted file mode 100644
index d0b40646c88a24c2b1062d25056e8776ad33dac9..0000000000000000000000000000000000000000
--- a/dumux/io/staggeredvtkoutputmodule.hh
+++ /dev/null
@@ -1,291 +0,0 @@
-// -*- 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 A VTK output module to simplify writing dumux simulation data to VTK format. Specialization for staggered grids with dofs on faces.
- */
-#ifndef STAGGERED_VTK_OUTPUT_MODULE_HH
-#define STAGGERED_VTK_OUTPUT_MODULE_HH
-
-#include <dune/common/fvector.hh>
-
-#include <dumux/io/vtkoutputmodule.hh>
-#include <dumux/io/pointcloudvtkwriter.hh>
-#include <dumux/io/vtksequencewriter.hh>
-
-namespace Properties
-{
-NEW_PROP_TAG(VtkAddVelocity);
-NEW_PROP_TAG(VtkAddProcessRank);
-}
-
-namespace Dumux
-{
-
-/*!
- * \ingroup InputOutput
- * \brief A VTK output module to simplify writing dumux simulation data to VTK format
- *        Specialization for staggered grids with dofs on faces.
- */
-template<typename TypeTag>
-class StaggeredVtkOutputModule : public VtkOutputModule<TypeTag>
-{
-    friend class VtkOutputModule<TypeTag>;
-    using ParentType = VtkOutputModule<TypeTag>;
-    using Implementation = typename GET_PROP_TYPE(TypeTag, VtkOutputModule);
-    using Problem = typename GET_PROP_TYPE(TypeTag, Problem);
-    using GridView = typename GET_PROP_TYPE(TypeTag, GridView);
-    using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar);
-
-    enum { dim = GridView::dimension };
-    enum { dimWorld = GridView::dimensionworld };
-
-    using GlobalPosition = Dune::FieldVector<Scalar, dimWorld>;
-
-    using DofTypeIndices = typename GET_PROP(TypeTag, DofTypeIndices);
-    typename DofTypeIndices::CellCenterIdx cellCenterIdx;
-    typename DofTypeIndices::FaceIdx faceIdx;
-
-    struct PriVarScalarDataInfo { unsigned int pvIdx; std::string name; };
-    struct PriVarVectorDataInfo { std::vector<unsigned int> pvIdx; std::string name; };
-
-    using Positions = std::vector<Scalar>;
-    using Data = std::vector<std::vector<Scalar>>;
-
-    using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry);
-    using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables);
-    using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector);
-
-public:
-
-    StaggeredVtkOutputModule(const Problem& problem,
-                             const FVGridGeometry& fvGridGeometry,
-                             const GridVariables& gridVariables,
-                             const SolutionVector& sol,
-                             const std::string& name,
-                             bool verbose = true,
-                             Dune::VTK::DataMode dm = Dune::VTK::conforming)
-    : ParentType(problem, fvGridGeometry, gridVariables, sol, name, verbose, dm)
-
-{}
-//     {
-//         writeFaceVars_ = GET_PARAM_FROM_GROUP(TypeTag, bool, Vtk, WriteFaceData);
-//         coordinatesInitialized_ = false;
-//     }
-//
-//     //////////////////////////////////////////////////////////////////////////////////////////////
-//     //! Methods to conveniently add primary and secondary variables upon problem initialization
-//     //! Do not call these methods after initialization
-//     //////////////////////////////////////////////////////////////////////////////////////////////
-//
-//
-//     //! Output a scalar field
-//     //! \param name The name of the vtk field
-//     //! \returns A reference to the resized scalar field to be filled with the actual data
-//     std::vector<Scalar>& createFaceScalarField(const std::string& name)
-//     {
-//         faceScalarFields_.emplace_back(std::make_pair(std::vector<Scalar>(this->problem().model().numFaceDofs()), name));
-//         return faceScalarFields_.back().first;
-//     }
-//
-//     //! Output a vector field
-//     //! \param name The name of the vtk field
-//     //! \returns A reference to the resized vector field to be filled with the actual data
-//     std::vector<GlobalPosition>& createFaceVectorField(const std::string& name)
-//     {
-//         faceVectorFields_.emplace_back(std::make_pair(std::vector<GlobalPosition>(this->problem().model().numFaceDofs()), name));
-//         return faceVectorFields_.back().first;
-//     }
-//
-//     //! Output a scalar primary variable
-//     //! \param name The name of the vtk field
-//     //! \param pvIdx The index in the primary variables vector
-//     void addFacePrimaryVariable(const std::string& name, unsigned int pvIdx)
-//     {
-//         priVarScalarDataInfo_.push_back(PriVarScalarDataInfo{pvIdx, name});
-//     }
-//
-//     //! Output a vector primary variable
-//     //! \param name The name of the vtk field
-//     //! \param pvIndices A vector of indices in the primary variables vector to group for vector visualization
-//     void addFacePrimaryVariable(const std::string& name, std::vector<unsigned int> pvIndices)
-//     {
-//         assert(pvIndices.size() < 4 && "Vtk doesn't support vector dimensions greater than 3!");
-//         priVarVectorDataInfo_.push_back(PriVarVectorDataInfo{pvIndices, name});
-//     }
-//
-//     void write(double time, Dune::VTK::OutputType type = Dune::VTK::ascii)
-//     {
-//         ParentType::write(time, type);
-//         if(writeFaceVars_)
-//             getFaceDataAndWrite_();
-//     }
-//
-// protected:
-//
-//      /*!
-//      * \brief Returns the number of cell center dofs
-//      */
-//     unsigned int numDofs_() const
-//     {
-//         return fvGridGeometry
-//     }
-//
-//      /*!
-//      * \brief Returns priVar data from dofs not on the face.
-//      *
-//      * \param dofIdxGlobal The global dof index
-//      * \param pvIdx The primary variable index
-//      */
-//     auto getPriVarData_(const std::size_t dofIdxGlobal, const std::size_t pvIdx)
-//     {
-//         return this->problem().model().curSol()[cellCenterIdx][dofIdxGlobal][pvIdx];
-//     }
-//
-//     std::vector<PriVarScalarDataInfo> priVarScalarDataInfo_;
-//     std::vector<PriVarVectorDataInfo> priVarVectorDataInfo_;
-//     std::vector<PriVarScalarDataInfo> secondVarScalarDataInfo_;
-//     std::vector<PriVarVectorDataInfo> secondVarVectorDataInfo_;
-//
-// private:
-//
-//     void updateCoordinates_()
-//     {
-//         std::cout << "updating coordinates" << std::endl;
-//         coordinates_.resize(this->problem().model().numFaceDofs());
-//         for(auto&& facet : facets(this->problem().gridView()))
-//         {
-//             const int dofIdxGlobal = this->problem().gridView().indexSet().index(facet);
-//             coordinates_[dofIdxGlobal] = facet.geometry().center();
-//         }
-//         coordinatesInitialized_ = true;
-//     }
-//
-//      /*!
-//      * \brief Gathers all face-related data and invokes the face vtk-writer using these data.
-//      */
-//     void getFaceDataAndWrite_()
-//     {
-//         const int numPoints = this->problem().model().numFaceDofs();
-//
-//         // make sure not to iterate over the same dofs twice
-//         std::vector<bool> dofVisited(numPoints, false);
-//
-//         // get fields for all primary coordinates and variables
-//         if(!coordinatesInitialized_)
-//             updateCoordinates_();
-//
-//         Data priVarScalarData(priVarScalarDataInfo_.size(), std::vector<Scalar>(numPoints));
-//
-//         Data priVarVectorData(priVarVectorDataInfo_.size());
-//         for (std::size_t i = 0; i < priVarVectorDataInfo_.size(); ++i)
-//             priVarVectorData[i].resize(numPoints*priVarVectorDataInfo_[i].pvIdx.size());
-//
-//         for(auto&& element : elements(this->problem().gridView()))
-//         {
-//             auto fvGeometry = localView(this->problem().model().fvGridGeometry());
-//             fvGeometry.bindElement(element);
-//             for(auto && scvf : scvfs(fvGeometry))
-//             {
-//                 if(dofVisited[scvf.dofIndex()])
-//                     continue;
-//
-//                 asImp_().getPrivarScalarData_(priVarScalarData, scvf);
-//                 asImp_().getPrivarVectorData_(priVarVectorData, scvf);
-//
-//                 dofVisited[scvf.dofIndex()] = true;
-//             }
-//         }
-//
-//         // transfer priVar scalar data to writer
-//         for(int i = 0; i < priVarScalarDataInfo_.size(); ++i)
-//             faceWriter_->addPointData(priVarScalarData[i], priVarScalarDataInfo_[i].name);
-//
-//         // transfer priVar vector data to writer
-//         for(int i = 0; i < priVarVectorDataInfo_.size(); ++i)
-//             faceWriter_->addPointData(priVarVectorData[i], priVarVectorDataInfo_[i].name, priVarVectorDataInfo_[i].pvIdx.size());
-//
-//         // transfer custom scalar data to writer
-//         for(auto&& scalarField : faceScalarFields_)
-//             faceWriter_->addPointData(scalarField.first, scalarField.second);
-//
-//         // transfer custom vector data to writer
-//         for(auto&& vectorField : faceVectorFields_)
-//             faceWriter_->addPointData(vectorField.first, vectorField.second, 3);
-//
-//         sequenceWriter_.write(this->problem().timeManager().time() + 1.0);
-//         faceScalarFields_.clear();
-//         faceVectorFields_.clear();
-//     }
-//
-//
-//      /*!
-//      * \brief Retrives scalar-valued data from the face.
-//      *
-//      * \param priVarScalarData Container to store the data
-//      * \param face The face
-//      */
-//     template<class Face>
-//     void getPrivarScalarData_(Data& priVarScalarData, const Face& face)
-//     {
-//         const int dofIdxGlobal = face.dofIndex();
-//         for(int pvIdx = 0; pvIdx < priVarScalarDataInfo_.size(); ++pvIdx)
-//             priVarScalarData[pvIdx][dofIdxGlobal] = this->problem().model().curSol()[faceIdx][dofIdxGlobal][pvIdx];
-//     }
-//
-//      /*!
-//      * \brief Retrives vector-valued data from the face.
-//      *
-//      * \param priVarVectorData Container to store the data
-//      * \param face The face
-//      */
-//     template<class Face>
-//     void getPrivarVectorData_(Data& priVarVectorData, const Face& face)
-//     {
-//         const int dofIdxGlobal = face.dofIndex();
-//         for (int i = 0; i < priVarVectorDataInfo_.size(); ++i)
-//             for (int j = 0; j < priVarVectorDataInfo_[i].pvIdx.size(); ++j)
-//                 priVarVectorData[i][dofIdxGlobal*priVarVectorDataInfo_[i].pvIdx.size() + j]
-//                     = this->problem().model().curSol()[faceIdx][dofIdxGlobal][priVarVectorDataInfo_[i].pvIdx[j]];
-//     }
-//
-//     std::shared_ptr<PointCloudVtkWriter<Scalar, dim>> faceWriter_;
-//
-//     VTKSequenceWriter<PointCloudVtkWriter<Scalar, dim>> sequenceWriter_;
-//
-//     bool writeFaceVars_;
-//
-//     std::vector<GlobalPosition> coordinates_;
-//     bool coordinatesInitialized_;
-//
-//     std::list<std::pair<std::vector<Scalar>, std::string>> faceScalarFields_;
-//     std::list<std::pair<std::vector<GlobalPosition>, std::string>> faceVectorFields_;
-//
-//     //! Returns the implementation of the problem (i.e. static polymorphism)
-//     Implementation &asImp_()
-//     { return *static_cast<Implementation *>(this); }
-//
-//     //! \copydoc asImp_()
-//     const Implementation &asImp_() const
-//     { return *static_cast<const Implementation *>(this); }
-};
-
-} // end namespace Dumux
-
-#endif
diff --git a/dumux/linear/matrixconverter.hh b/dumux/linear/matrixconverter.hh
index 0615754cd0968cd04a4b77018dec2f8e918e15bb..87adb0a09239b5f199bd50fb9a2e82451a7708bf 100644
--- a/dumux/linear/matrixconverter.hh
+++ b/dumux/linear/matrixconverter.hh
@@ -28,6 +28,7 @@
 #include <dune/common/hybridutilities.hh>
 #include <dune/istl/bvector.hh>
 #include <dune/istl/bcrsmatrix.hh>
+#include <dune/istl/matrixindexset.hh>
 #include <dune/istl/multitypeblockvector.hh>
 #include <dune/istl/multitypeblockmatrix.hh>
 
diff --git a/test/freeflow/staggered/doneatestproblem.hh b/test/freeflow/staggered/doneatestproblem.hh
index 019360ee5b13e16644c11345acc0122ea1980b2b..672dbba5f5fcf95c1b0a9d98425f7842171e6bbc 100644
--- a/test/freeflow/staggered/doneatestproblem.hh
+++ b/test/freeflow/staggered/doneatestproblem.hh
@@ -27,11 +27,12 @@
 #define DUMUX_DONEA_TEST_PROBLEM_HH
 
 #include <dumux/freeflow/staggered/problem.hh>
-#include <dumux/implicit/staggered/properties.hh>
+#include <dumux/discretization/staggered/properties.hh>
 #include <dumux/material/components/simpleh2o.hh>
 #include <dumux/material/fluidsystems/liquidphase.hh>
 #include <dumux/material/components/constant.hh>
 
+#include <dumux/discretization/staggered/properties.hh>
 #include <dumux/freeflow/staggered/propertydefaults.hh>
 
 
@@ -111,7 +112,6 @@ class DoneaTestProblem : public NavierStokesProblem<TypeTag>
     };
 
     using BoundaryTypes = typename GET_PROP_TYPE(TypeTag, BoundaryTypes);
-    using TimeManager = typename GET_PROP_TYPE(TypeTag, TimeManager);
 
     using Element = typename GridView::template Codim<0>::Entity;
     using Intersection = typename GridView::Intersection;
diff --git a/test/freeflow/staggered/test_donea.cc b/test/freeflow/staggered/test_donea.cc
index 1a2cf64e242bb8aaac2bc0848248e4ab51d97215..a7d7a850a1ff68ce0102a3dbb11b0dce06100831 100644
--- a/test/freeflow/staggered/test_donea.cc
+++ b/test/freeflow/staggered/test_donea.cc
@@ -48,6 +48,7 @@
 
 #include <dumux/assembly/staggeredfvassembler.hh>
 #include <dumux/assembly/diffmethod.hh>
+#include <dumux/implicit/staggered/newtoncontroller.hh>
 
 #include <dumux/discretization/methods.hh>
 
@@ -174,7 +175,7 @@ int main(int argc, char** argv)
     auto linearSolver = std::make_shared<LinearSolver>();
 
     // the non-linear solver
-    using NewtonController = typename GET_PROP_TYPE(TypeTag, NewtonController);
+    using NewtonController = StaggeredNewtonController<TypeTag>;
     using NewtonMethod = Dumux::NewtonMethod<TypeTag, NewtonController, Assembler, LinearSolver>;
     auto newtonController = std::make_shared<NewtonController>(leafGridView.comm(), timeLoop);
     NewtonMethod nonLinearSolver(newtonController, assembler, linearSolver);