diff --git a/exercises/exercise-basic/exercise_basic_2p2c.cc b/exercises/exercise-basic/2p2cmain.cc
similarity index 100%
rename from exercises/exercise-basic/exercise_basic_2p2c.cc
rename to exercises/exercise-basic/2p2cmain.cc
diff --git a/exercises/exercise-basic/exercise_basic_2p.cc b/exercises/exercise-basic/2pmain.cc
similarity index 100%
rename from exercises/exercise-basic/exercise_basic_2p.cc
rename to exercises/exercise-basic/2pmain.cc
diff --git a/exercises/exercise-basic/CMakeLists.txt b/exercises/exercise-basic/CMakeLists.txt
index d304b9d4e522da7961877a8472ab7073faa4889e..9845ea5fe57bca7195eaf29ca06636b0a234c5fc 100644
--- a/exercises/exercise-basic/CMakeLists.txt
+++ b/exercises/exercise-basic/CMakeLists.txt
@@ -1,10 +1,10 @@
 # the immiscible two-phase simulation program
 dune_add_test(NAME exercise_basic_2p
-              SOURCES exercise_basic_2p.cc)
+              SOURCES 2pmain.cc)
 
 # the compositional two-phase two-component simulation program
 dune_add_test(NAME exercise_basic_2p2c
-              SOURCES exercise_basic_2p2c.cc)
+              SOURCES 2p2cmain.cc)
 
 # here, add the two-phase non-isothermal simulation program
 
diff --git a/exercises/exercise-basic/README.md b/exercises/exercise-basic/README.md
index 357e36068e2f0a1e0782c66f1d0a5efbac28eb51..c7d5417d2d35695148e167a38212ed84c4c2a4c7 100644
--- a/exercises/exercise-basic/README.md
+++ b/exercises/exercise-basic/README.md
@@ -18,8 +18,8 @@ This exercise deals with two problems: a two-phase immiscible problem (__2p__) a
 <hr>
 
 Locate all the files you will need for this exercise
-* The __main file__ for the __2p__ problem : `exercise_basic_2p.cc`
-* The __main file__ for the __2p2c__ problem : `exercise_basic_2p2c.cc`
+* The __main file__ for the __2p__ problem : `2pmain.cc`
+* The __main file__ for the __2p2c__ problem : `2p2cmain.cc`
 * The __problem file__ for the __2p__ problem: `injection2pproblem.hh`
 * The __problem file__ for the __2p2c__ problem: `injection2p2cproblem.hh`
 * The shared __spatial parameters file__: `injection2pspatialparams.hh`
@@ -58,15 +58,15 @@ paraview injection-2p2c.pvd
 ### Task 3: Setting up a new executable (for a non-isothermal simulation)
 <hr>
 
-* Copy the main file `exercise_basic_2p.cc` and rename it to `exercise_basic_2pni.cc`
-* In  `exercise_basic_2pni.cc`, include the header `injection2pniproblem.hh` instead of `injection2pproblem.hh`.
-* In  `exercise_basic_2pni.cc`, change `Injection2pCC` to `Injection2pNICC` in the line `using TypeTag = Properties::TTag::Injection2pNICC;`
+* Copy the main file `2pmain.cc` and rename it to `2pnimain.cc`
+* In  `2pnimain.cc`, include the header `injection2pniproblem.hh` instead of `injection2pproblem.hh`.
+* In  `2pnimain.cc`, change `Injection2pCC` to `Injection2pNICC` in the line `using TypeTag = Properties::TTag::Injection2pNICC;`
 * Add a new executable in `CMakeLists.txt` by adding the lines
 
 ```cmake
 # the two-phase non-isothermal simulation program
 dune_add_test(NAME exercise_basic_2pni
-              SOURCES exercise_basic_2pni.cc)
+              SOURCES 2pnimain.cc)
 ```
 
 * Test that everything compiles without error
diff --git a/exercises/exercise-basic/injection2p2cproblem.hh b/exercises/exercise-basic/injection2p2cproblem.hh
index d44a7c5950cde1e7a7956e391fe05708cdf48ad1..16fc3b2410c46203648b3d01568f0ab36697a290 100644
--- a/exercises/exercise-basic/injection2p2cproblem.hh
+++ b/exercises/exercise-basic/injection2p2cproblem.hh
@@ -31,7 +31,7 @@
 #include <dumux/porousmediumflow/problem.hh>
 #include <dumux/material/fluidsystems/h2on2.hh>
 
-#include "injection2pspatialparams.hh"
+#include "spatialparams.hh"
 
 namespace Dumux {
 
@@ -69,7 +69,7 @@ public:
 template<class TypeTag>
 struct FluidSystem<TypeTag, TTag::Injection2p2c> { using type = FluidSystems::H2ON2<GetPropType<TypeTag, Properties::Scalar>, FluidSystems::H2ON2DefaultPolicy</*fastButSimplifiedRelations=*/ true>>; };
 
-// Define whether mole(true) or mass (false) fractions are used
+// Define whether mole (true) or mass (false) fractions are used
 template<class TypeTag>
 struct UseMoles<TypeTag, TTag::Injection2p2c> { static constexpr bool value = true; };
 } // end namespace Properties
@@ -83,15 +83,15 @@ struct UseMoles<TypeTag, TTag::Injection2p2c> { static constexpr bool value = tr
  *
  * The domain is sized 60 m times 40 m.
  *
- * For the mass conservation equation neumann boundary conditions are used on
- * the top, on the bottom and on the right of the domain, while dirichlet conditions
+ * For the mass conservation equation Neumann boundary conditions are used on
+ * the top, on the bottom and on the right of the domain, while Dirichlet conditions
  * apply on the left boundary.
  *
  * Gas is injected at the right boundary from 7 m to 15 m at a rate of
- * 0.001 kg/(s m), the remaining neumann boundaries are no-flow
+ * 0.001 kg/(s m), the remaining Neumann boundaries are no-flow
  * boundaries.
  *
- * At the dirichlet boundaries a hydrostatic pressure and a gas saturation of zero a
+ * At the Dirichlet boundaries a hydrostatic pressure and a gas saturation of zero a
  *
  * This problem uses the \ref TwoPModel model.
  */
@@ -192,7 +192,7 @@ public:
     }
 
     /*!
-     * \brief Evaluate the boundary conditions for a neumann
+     * \brief Evaluate the boundary conditions for a Neumann
      *        boundary segment.
      *
      * \param globalPos The position of the integration point of the boundary segment.
diff --git a/exercises/exercise-basic/injection2pniproblem.hh b/exercises/exercise-basic/injection2pniproblem.hh
index 86fa90010dc1a4967511b6a42fe1b5da030e11df..f8b6ee1267ec397955a67bbef776e1eb5fc904d3 100644
--- a/exercises/exercise-basic/injection2pniproblem.hh
+++ b/exercises/exercise-basic/injection2pniproblem.hh
@@ -32,13 +32,13 @@
 #include <dumux/porousmediumflow/problem.hh>
 #include <dumux/material/fluidsystems/h2on2.hh>
 
-#include "injection2pspatialparams.hh"
+#include "spatialparams.hh"
 
 namespace Dumux {
 
 // forward declare problem
 template <class TypeTag>
-class InjectionProblem2PNI;
+class Injection2PNIProblem;
 
 namespace Properties
 {
@@ -58,7 +58,7 @@ struct Grid<TypeTag, TTag::Injection2pNITypeTag> { using type = Dune::YaspGrid<2
 
 // Set the problem property
 template<class TypeTag>
-struct Problem<TypeTag, TTag::Injection2pNITypeTag> { using type = InjectionProblem2PNI<TypeTag>; };
+struct Problem<TypeTag, TTag::Injection2pNITypeTag> { using type = Injection2PNIProblem<TypeTag>; };
 
 // Set the spatial parameters
 template<class TypeTag>
@@ -89,20 +89,20 @@ struct FluidSystem<TypeTag, TTag::Injection2pNITypeTag>
  *
  * The domain is sized 60 m times 40 m.
  *
- * For the mass conservation equation neumann boundary conditions are used on
- * the top, on the bottom and on the right of the domain, while dirichlet conditions
+ * For the mass conservation equation Neumann boundary conditions are used on
+ * the top, on the bottom and on the right of the domain, while Dirichlet conditions
  * apply on the left boundary.
  *
  * Gas is injected at the right boundary from 7 m to 15 m at a rate of
- * 0.001 kg/(s m), the remaining neumann boundaries are no-flow
+ * 0.001 kg/(s m), the remaining Neumann boundaries are no-flow
  * boundaries.
  *
- * At the dirichlet boundaries a hydrostatic pressure and a gas saturation of zero a
+ * At the Dirichlet boundaries a hydrostatic pressure and a gas saturation of zero a
  *
  * This problem uses the \ref TwoPModel model.
  */
 template<class TypeTag>
-class InjectionProblem2PNI : public PorousMediumFlowProblem<TypeTag>
+class Injection2PNIProblem : public PorousMediumFlowProblem<TypeTag>
 {
     using ParentType = PorousMediumFlowProblem<TypeTag>;
     using GridView = GetPropType<TypeTag, Properties::GridView>;
@@ -120,7 +120,7 @@ class InjectionProblem2PNI : public PorousMediumFlowProblem<TypeTag>
     using GlobalPosition = typename Element::Geometry::GlobalCoordinate;
 
 public:
-    InjectionProblem2PNI(std::shared_ptr<const FVGridGeometry> fvGridGeometry)
+    Injection2PNIProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry)
     : ParentType(fvGridGeometry)
     {
         // initialize the tables of the fluid system
@@ -190,7 +190,7 @@ public:
     }
 
     /*!
-     * \brief Evaluate the boundary conditions for a neumann
+     * \brief Evaluate the boundary conditions for a Neumann
      *        boundary segment.
      *
      * \param globalPos The position of the integration point of the boundary segment.
diff --git a/exercises/exercise-basic/injection2pproblem.hh b/exercises/exercise-basic/injection2pproblem.hh
index d550902c784c3ac31cf0507ed936f55fb1fdb29b..e20e85c8ce34689d2f88d9db145af99b50d33949 100644
--- a/exercises/exercise-basic/injection2pproblem.hh
+++ b/exercises/exercise-basic/injection2pproblem.hh
@@ -32,13 +32,13 @@
 #include <dumux/porousmediumflow/problem.hh>
 #include <dumux/material/fluidsystems/h2on2.hh>
 
-#include "injection2pspatialparams.hh"
+#include "spatialparams.hh"
 
 namespace Dumux {
 
 // forward declare problem
 template <class TypeTag>
-class InjectionProblem2P;
+class Injection2PProblem;
 
 namespace Properties {
 // define the TypeTag for this problem with a cell-centered two-point flux approximation spatial discretization.
@@ -54,7 +54,7 @@ struct Grid<TypeTag, TTag::Injection2p> { using type = Dune::YaspGrid<2>; };
 
 // Set the problem property
 template<class TypeTag>
-struct Problem<TypeTag, TTag::Injection2p> { using type = InjectionProblem2P<TypeTag>; };
+struct Problem<TypeTag, TTag::Injection2p> { using type = Injection2PProblem<TypeTag>; };
 
 // Set the spatial parameters
 template<class TypeTag>
@@ -94,7 +94,7 @@ struct FluidSystem<TypeTag, TTag::Injection2p> { using type = FluidSystems::H2ON
  * This problem uses the \ref TwoPModel model.
  */
 template<class TypeTag>
-class InjectionProblem2P : public PorousMediumFlowProblem<TypeTag>
+class Injection2PProblem : public PorousMediumFlowProblem<TypeTag>
 {
     using ParentType = PorousMediumFlowProblem<TypeTag>;
     using GridView = GetPropType<TypeTag, Properties::GridView>;
@@ -112,7 +112,7 @@ class InjectionProblem2P : public PorousMediumFlowProblem<TypeTag>
     using GlobalPosition = typename Element::Geometry::GlobalCoordinate;
 
 public:
-    InjectionProblem2P(std::shared_ptr<const FVGridGeometry> fvGridGeometry)
+    Injection2PProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry)
     : ParentType(fvGridGeometry)
     {
         // initialize the tables of the fluid system
diff --git a/exercises/exercise-basic/injection2pspatialparams.hh b/exercises/exercise-basic/spatialparams.hh
similarity index 100%
rename from exercises/exercise-basic/injection2pspatialparams.hh
rename to exercises/exercise-basic/spatialparams.hh
diff --git a/exercises/exercise-biomineralization/CMakeLists.txt b/exercises/exercise-biomineralization/CMakeLists.txt
index cc68a96fab0068a8af5f048dc37a830fac2455e0..67e8dc13e54ba9a6b78e29bc6e60a09515ce539d 100644
--- a/exercises/exercise-biomineralization/CMakeLists.txt
+++ b/exercises/exercise-biomineralization/CMakeLists.txt
@@ -1,10 +1,10 @@
 # executables for exercisebiomin
-dune_add_test(NAME exercisebiomin
-              SOURCES exercisebiomin.cc
+dune_add_test(NAME exercise_biomin
+              SOURCES main.cc
               CMD_ARGS -TimeLoop.TEnd 1e5)
 
 # add tutorial to the common target
-add_dependencies(test_exercises exercisebiomin)
+add_dependencies(test_exercises exercise_biomin)
 
 # add a symlink for each input file
 add_input_file_links()
diff --git a/exercises/exercise-biomineralization/README.md b/exercises/exercise-biomineralization/README.md
index 90a6886f036fbd47064be85056f27f441640b149..329fc5318d9d062e2e38889ae3858ace3ebb0d2e 100644
--- a/exercises/exercise-biomineralization/README.md
+++ b/exercises/exercise-biomineralization/README.md
@@ -19,8 +19,8 @@ Disclaimer: Please note, that this is not a realistic scenario. One does not wan
 ### 1. Getting familiar with the code
 
 Locate all the files you will need for this exercise
-* The __main file__ : `exercisebiomin.cc`
-* The __input file__: `exercisebiomin.input`
+* The __main file__ : `main.cc`
+* The __input file__: `params.input`
 * The __problem file__ : `biominproblem.hh`
 * The __spatial parameters file__: `biominspatialparams.hh`
 
@@ -37,7 +37,7 @@ There are two types of solid components. Reactive and inert. For each reactive c
 
 ### 2. Implement a chemical equation
 
-In the following the basic steps required to set the new chemical equation are outlined. Here, this is done in the __chemistry__ folder in the prepared file: `simplebiominreactions.hh` starting in line 96.
+In the following the basic steps required to set the new chemical equation are outlined. Here, this is done in the __chemistry__ folder in the prepared file: `simplebiominreactions.hh` within the function reactionSource().
 Please be aware, that the chemistry file already provides some convenience functions (e.g. ``moleFracToMolality()``).
 
 __Task__
@@ -64,15 +64,17 @@ which is:
 
 Calcium ion + Urea + 2 Water &rarr; 2 Ammonium ions + Calcite
 
+Note that since the chemistry is simplified for this dumux-course example, the component Ammonium is neglected and you thus cannot set its source term, even though it is produced in the real reaction.
+
 ### 3. Make use of your newly created chemical equation
 
-To enable your newly created chemical equation, the chemistry file has to be included in your problem file. This has to be done in line 35:
+To enable your newly created chemical equation, the chemistry file has to be included in your problem file.
 
 ```c++
 #include "chemistry/simplebiominreactions.hh"   // chemical reactions
 ```
 
-Additionally the TypeTag of your chemistry file needs to be set in the problem file (line 125):
+Additionally the TypeTag of your chemistry file needs to be set in the problem file, within the class ExerciseFourBioMinProblem:
 
 ```c++
 using Chemistry = typename Dumux::SimpleBiominReactions<NumEqVector, VolumeVariables>;
@@ -80,7 +82,7 @@ using Chemistry = typename Dumux::SimpleBiominReactions<NumEqVector, VolumeVaria
 
 __Task__
 
-Now the source/sink term can be updated in the problem file. You find it in line 343. You can access the newly created chemistry file and call the reactionSource()-function from it. Make sure to call the reactionSource()-function with the correct arguments. Return the updated source terms in the end.
+Now the source/sink term can be updated in the problem file in its function source(). You can access the newly created chemistry file and call the reactionSource()-function from it. Make sure to call the chemistry.reactionSource()-function with the correct arguments. Return the updated source terms in the end.
 The volume variables can be set using the element volume variables and the sub control volume:
 
 ```c++
@@ -97,7 +99,7 @@ and type
 
 ```bash
 make exercisebiomin
-./exercisebiomin exercisebiomin.input
+./exercise_biomin exercise_biomin.input
 ```
 
 ### 4. Seal leakage pathway in the aquitard
diff --git a/exercises/exercise-biomineralization/biominproblem.hh b/exercises/exercise-biomineralization/biominproblem.hh
index 20d0790b88d77a7958e45cbc185edcb8ba6230e7..7eed331b0b6ec1696a812a07a6e120ec641fca18 100644
--- a/exercises/exercise-biomineralization/biominproblem.hh
+++ b/exercises/exercise-biomineralization/biominproblem.hh
@@ -48,7 +48,7 @@ namespace Dumux {
 #include <dumux/material/components/co2tables.inc>
 
 template <class TypeTag>
-class ExerciseFourBioMinProblem;
+class BioMinProblem;
 
 namespace Properties {
 //! Create new type tag for the problem
@@ -60,7 +60,7 @@ struct ExerciseFourBioMinCCTpfa { using InheritsFrom = std::tuple<ExerciseFourBi
 
 //! Set the problem property
 template<class TypeTag>
-struct Problem<TypeTag, TTag::ExerciseFourBioMin> { using type = ExerciseFourBioMinProblem<TypeTag>; };
+struct Problem<TypeTag, TTag::ExerciseFourBioMin> { using type = BioMinProblem<TypeTag>; };
 
 //! Set grid and the grid creator to be used
 template<class TypeTag>
@@ -106,7 +106,7 @@ struct EnableGridFluxVariablesCache<TypeTag, TTag::ExerciseFourBioMin> { static
  * \brief Problem biomineralization (MICP) in an experimental setup.
  */
 template <class TypeTag>
-class ExerciseFourBioMinProblem : public PorousMediumFlowProblem<TypeTag>
+class BioMinProblem : public PorousMediumFlowProblem<TypeTag>
 {
     using ParentType = PorousMediumFlowProblem<TypeTag>;
 
@@ -166,7 +166,7 @@ class ExerciseFourBioMinProblem : public PorousMediumFlowProblem<TypeTag>
      * \param fvGridGeometry The finite volume grid geometry
      */
 public:
-    ExerciseFourBioMinProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry)
+    BioMinProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry)
     : ParentType(fvGridGeometry)
     {
         name_           = getParam<std::string>("Problem.Name");
@@ -281,7 +281,7 @@ public:
         // Set values for Ca + urea injection above aquitard.
         // Use negative values for injection.
         if(globalPos[0] < eps_
-           && globalPos[1] > 11.0 + eps_
+           && globalPos[1] > 11.0 - eps_
            && globalPos[1] < 12.0 + eps_
            && time_ < injBioTime_)
         {
diff --git a/exercises/exercise-biomineralization/exercisebiomin.cc b/exercises/exercise-biomineralization/main.cc
similarity index 100%
rename from exercises/exercise-biomineralization/exercisebiomin.cc
rename to exercises/exercise-biomineralization/main.cc
diff --git a/exercises/exercise-biomineralization/exercisebiomin.input b/exercises/exercise-biomineralization/params.input
similarity index 100%
rename from exercises/exercise-biomineralization/exercisebiomin.input
rename to exercises/exercise-biomineralization/params.input
diff --git a/exercises/exercise-coupling-ff-pm/README.md b/exercises/exercise-coupling-ff-pm/README.md
index e3150fb9d1ff6c07ac9a003ce755c3225aef78c2..f25fe088c5a2b35451699749b52e7d2871d9cc0f 100644
--- a/exercises/exercise-coupling-ff-pm/README.md
+++ b/exercises/exercise-coupling-ff-pm/README.md
@@ -15,10 +15,10 @@ Free flow is modeled in the upper subdomain, while the lower subdomain models a
 There are three sub folders: `interface` (Exercise 1), `models` (Exercise 2) and `turbulence` (Exercise 3).
 
 The problem-related files for this exercise are:
-* Three __main files__ for the three sub-tasks :`ex_interface_coupling_ff-pm.cc`, `ex_models_coupling_ff-pm.cc`, `ex_turbulence_coupling_ff-pm.cc`,
-* Three __free flow problem files__: `ex_interface_ffproblem.hh`, `ex_models_ffproblem.hh`, `ex_turbulence__ffproblem.hh`
-* Three __porous medium flow problem files__: `ex_interface_pmproblem.hh`, `ex_models_pmproblem.hh`, `ex_turbulence_pmproblem.hh`
-* The __input files__: `ex_interface_coupling_ff-pm.input`, `ex_models_coupling_ff-pm.input`, `ex_turbulence_coupling_ff-pm.input`,
+* Three __main files__ for the three sub-tasks :`interface/main.cc`, `models/main.cc`, `turbulence/main.cc`,
+* Three __free flow problem files__: `interface/freeflowsubproblem.hh`, `models/freeflowsubproblem.hh`, `turbulence/freeflowsubproblem.hh`
+* Three __porous medium flow problem files__: `interface/porousmediumsubproblem.hh`, `models/porousmediumsubproblem.hh`, `turbulence/porousmediumsubproblem.hh`
+* The __input files__: `interface/params.input`, `models/parmas.input`, `turbulence/params.input`,
 * The __spatial parameters files__: `1pspatialparams.hh`, `2pspatialparams.hh`
 
 
@@ -27,8 +27,8 @@ The same applies for types such as `GridManager`, `FVGridGeometry`, `Problem`, e
 Since we use a monolithic coupling scheme, there is only one `Assembler` and one `NewtonSolver`.
 
 The problem files very much look like "regular", uncoupled ones with the exception that they hold a pointer to the `CouplingManager` which allows to evaluate the coupling conditions and to exchange information between the coupled models.
-The coupling conditions are realized technically in terms of boundary condition. For instance, in lines 178 and 179
-in `ex_interface_ffproblem.hh`, `couplingNeumann` boundary conditions are set, which means that the free flow models evaluates the
+The coupling conditions are realized technically in terms of boundary condition. For instance,
+in `interface/freeflowsubproblem.hh`, `couplingNeumann` boundary conditions are set, which means that the free flow models evaluates the
 mass and momentum fluxes coming from the porous domain and uses these values as boundary conditions at the interface.
 
 Note the certain checks are performed when combining different models, e.g., the fluid system has to be the same for both domains
@@ -57,7 +57,7 @@ Currently, a velocity profile is set on the upper free flow boundary, which lead
 
 __Task A: Change the flow direction__
 
-Open the file `ex_interface_ffproblem.hh` and navigate to line 148, where the types of boundary condition are set.
+Open the file `interface/freeflowsubproblem.hh` and navigate to the part, where the types of boundary condition are set.
 Instead of applying a fixed velocity profile at the top of the domain, we want to use fixed pressure boundary conditions
 at the left and right side of the free flow domain, while the top represents an impermeable wall.
 
@@ -113,6 +113,7 @@ if (couplingManager().isCoupledEntity(CouplingManager::darcyIdx, scvf))
 ```
 
 This should make the flow go from left to right.
+You can also delete the initial vertical velocity from initialAtPos(), to be consistent with the new boundary conditions.
 
 __Task B: Include slip-condition__
 
@@ -133,10 +134,10 @@ with a Beavers-Joseph-Saffman (BJS) boundary condition for the respective moment
 values.setBJS(Indices::momentumXBalanceIdx);
 ```
 
-at the position where the coupling boundary conditions are set in `ex_interface_ffproblem.hh`.
+at the position where the coupling boundary conditions are set in `interface/freeflowsubproblem.hh`.
 
 To check if the simulation behaves as expected, we can compare the velocity profile $`v_x(y)`$ with the analytical solution provided by [Beavers and Joseph (1967)](https://doi.org/10.1017/S0022112067001375).
-For doing so, we uncomment line 212 in `ex_interface_coupling_ff-pm.cc`.
+For doing so, we uncomment line 212 in `exerciseinterfacecouplingffpm.cc`.
 ```cpp
 stokesVtkWriter.addField(stokesProblem->getAnalyticalVelocityX(), "analyticalV_x");
 ```
@@ -147,7 +148,7 @@ the analytical solution of $`v_x`$ on the free flow domain. Play around with the
 __Task C: Cange shape of interface__
 
 Now we want to include a non-flat interface between the two domains. We use `dune-subgrid` to construct
-two grids for the two domains from one common host grid. Comment out lines 96-106 in `ex_interface_coupling_ff-pm.cc` and comment lines 114-149 in the same file. This will instantiate a host grid and define two helper lambda functions that are used to choose elements from to host grid for the respective sub grid. In the given case,
+two grids for the two domains from one common host grid. Comment out lines 96-106 in `exerciseinterfacecouplingffpm.cc` and comment lines 114-149 in the same file. This will instantiate a host grid and define two helper lambda functions that are used to choose elements from to host grid for the respective sub grid. In the given case,
 the domain is split in two haves, separated by a sinusoidal interface.
 
 ```cpp
@@ -166,7 +167,7 @@ auto elementSelectorDarcy = [&](const auto& element)
 
 Make sure, that you have uncommented the lines including the grid managers in both problem files
 ```cpp
-#include <dumux/io/grid/subgridmanager.hh>
+#include <dumux/io/grid/gridmanager_sub.hh>
 ```
 
 and do the changes in the respective lines for the `Grid` property.
@@ -215,7 +216,7 @@ __Task A: Change the model__:
 
 In the first task, the porous-medium model will be changed from a 1p2c system to a 2p2c system.
 Although a 2p2c system is plugged in, we still want to simulate the same situation as before, i.e., air with water vapor in both domains.
-The following changes have to be made in the porous-medium model (`ex_models_pmproblem.hh`):
+The following changes have to be made in the porous-medium model (`models/porousmediumsubproblem.hh`):
 * Include the 2pnc model: include the respective headers and inherit from the new model `TwoPNC`
 * Exchange the spatial parameters for the 1-phase system by those for a 2-phase system (hint: two occurrences).
 * Since two phases are involved now, we do not need to use the OnePAdapter anymore. Change to property of the FluidSystem such that `H2OAir` is used directly.
@@ -241,7 +242,7 @@ However, if only the gas phase is present, the liquid saturation is always zero.
 In this case, the chosen formulation will set the given value as the mole fraction of water vapor in the gas phase.
 * To tell to program which phases are present in which parts of the domain at the beginning of the simulation,
   you have to call `values.setState(MY_PHASE_PRESENCE);` in `initialAtPos()`. Have a look at the `indices.hh`
-  in the `2p2c` model to figure out which is the correct value of `MY_PHASE_PRESENCE` for the presence of
+  in the `2pnc` model (as the 2p2c model is a special case of the 2pnc model) to figure out which is the correct value of `MY_PHASE_PRESENCE` for the presence of
   a gas-phase only (hint: the numbering of phase indices begins with 0, the numbering of the phase presence states begins
   with 1. Take a look at your formulation to find out which phase index to use for the gas phase.)
 
@@ -313,7 +314,7 @@ All the prepared files can be found in the subfolder `exercise-coupling-ff-pm/tu
 
 __Task A__:
 
-The file `ex_turbulence_ffproblem.hh` is your free flow problem file within this exercise.
+The file `freeflowsubproblem.hh` is your free flow problem file within this exercise.
 
 For using the compositional zero equation turbulence model, the following header files need to be included:
 ```
@@ -346,7 +347,7 @@ To get all these interactions, you have to call
  ```cpp
  stokesProblem->updateStaticWallProperties();
  ```
-in `ex_turbulence_coupling_ff-pm.cc`.
+in `main.cc`.
 However, there is also a solution-dependent component of these interactions, e.g. for a correct
 damping of the eddy viscosity toward the wall, the velocity gradient at the wall and inside the
 cells is needed.
diff --git a/exercises/exercise-coupling-ff-pm/interface/CMakeLists.txt b/exercises/exercise-coupling-ff-pm/interface/CMakeLists.txt
index 2865c75a9080be017fd7b8710401d3a8c07bea1d..64f70e3a2de52b537c6d0227c5750c88f14a7ef2 100644
--- a/exercises/exercise-coupling-ff-pm/interface/CMakeLists.txt
+++ b/exercises/exercise-coupling-ff-pm/interface/CMakeLists.txt
@@ -1,9 +1,9 @@
 # executables for ex_interface_coupling_ff-pm
-dune_add_test(NAME ex_interface_coupling_ff-pm
-              SOURCES ex_interface_coupling_ff-pm.cc)
+dune_add_test(NAME exercise_interface_coupling_ff-pm
+              SOURCES main.cc)
 
 # add tutorial to the common target
-add_dependencies(test_exercises ex_interface_coupling_ff-pm)
+add_dependencies(test_exercises exercise_interface_coupling_ff-pm)
 
 # add a symlink for each input file
 add_input_file_links()
diff --git a/exercises/exercise-coupling-ff-pm/interface/ex_interface_ffproblem.hh b/exercises/exercise-coupling-ff-pm/interface/freeflowsubproblem.hh
similarity index 96%
rename from exercises/exercise-coupling-ff-pm/interface/ex_interface_ffproblem.hh
rename to exercises/exercise-coupling-ff-pm/interface/freeflowsubproblem.hh
index b165bb8ec456246c8f4363c897914799a2b06092..58670a5fe4c4eb6856c23ac2371623617569ea92 100644
--- a/exercises/exercise-coupling-ff-pm/interface/ex_interface_ffproblem.hh
+++ b/exercises/exercise-coupling-ff-pm/interface/freeflowsubproblem.hh
@@ -25,6 +25,7 @@
 
 #include <dune/grid/yaspgrid.hh>
 
+// TODO: dumux-course-task
 //****** uncomment for the last exercise *****//
 // #include <dumux/io/grid/subgridmanager.hh>
 
@@ -38,7 +39,7 @@
 namespace Dumux
 {
 template <class TypeTag>
-class StokesSubProblem;
+class FreeFlowSubProblem;
 
 namespace Properties
 {
@@ -63,6 +64,7 @@ struct Grid<TypeTag, TTag::StokesOneP>
     using Scalar = GetPropType<TypeTag, Properties::Scalar>;
     using TensorGrid = Dune::YaspGrid<2, Dune::TensorProductCoordinates<Scalar, dim> >;
 
+// TODO: dumux-course-task
 //****** comment out for the last exercise *****//
     using type = TensorGrid;
 
@@ -73,7 +75,7 @@ struct Grid<TypeTag, TTag::StokesOneP>
 
 // Set the problem property
 template<class TypeTag>
-struct Problem<TypeTag, TTag::StokesOneP> { using type = Dumux::StokesSubProblem<TypeTag> ; };
+struct Problem<TypeTag, TTag::StokesOneP> { using type = Dumux::FreeFlowSubProblem<TypeTag> ; };
 
 template<class TypeTag>
 struct EnableFVGridGeometryCache<TypeTag, TTag::StokesOneP> { static constexpr bool value = true; };
@@ -87,7 +89,7 @@ struct EnableGridVolumeVariablesCache<TypeTag, TTag::StokesOneP> { static conste
  * \brief The free flow sub problem
  */
 template <class TypeTag>
-class StokesSubProblem : public NavierStokesProblem<TypeTag>
+class FreeFlowSubProblem : public NavierStokesProblem<TypeTag>
 {
     using ParentType = NavierStokesProblem<TypeTag>;
 
@@ -112,7 +114,7 @@ class StokesSubProblem : public NavierStokesProblem<TypeTag>
     using CouplingManager = GetPropType<TypeTag, Properties::CouplingManager>;
 
 public:
-    StokesSubProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry, std::shared_ptr<CouplingManager> couplingManager)
+    FreeFlowSubProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry, std::shared_ptr<CouplingManager> couplingManager)
     : ParentType(fvGridGeometry, "Stokes"), eps_(1e-6), couplingManager_(couplingManager)
     {
         deltaP_ = getParamFromGroup<Scalar>(this->paramGroup(), "Problem.PressureDifference");
@@ -159,6 +161,8 @@ public:
 
         const auto& globalPos = scvf.dofPosition();
 
+        // TODO: dumux-course-task
+        // change the boundary conditions here as described in the exercise
         if(onUpperBoundary_(globalPos))
         {
             values.setDirichlet(Indices::velocityXIdx);
diff --git a/exercises/exercise-coupling-ff-pm/interface/ex_interface_coupling_ff-pm.cc b/exercises/exercise-coupling-ff-pm/interface/main.cc
similarity index 85%
rename from exercises/exercise-coupling-ff-pm/interface/ex_interface_coupling_ff-pm.cc
rename to exercises/exercise-coupling-ff-pm/interface/main.cc
index 17829377ba1b02f83094e4676e499195c42e222a..d94b7a614d0e41becb7741b1e525dfefa1fd6b3f 100644
--- a/exercises/exercise-coupling-ff-pm/interface/ex_interface_coupling_ff-pm.cc
+++ b/exercises/exercise-coupling-ff-pm/interface/main.cc
@@ -46,8 +46,8 @@
 
 #include <dumux/multidomain/boundary/stokesdarcy/couplingmanager.hh>
 
-#include "ex_interface_pmproblem.hh"
-#include "ex_interface_ffproblem.hh"
+#include "porousmediumsubproblem.hh"
+#include "freeflowsubproblem.hh"
 
 namespace Dumux {
 namespace Properties {
@@ -89,7 +89,7 @@ int main(int argc, char** argv) try
 
 
 
-    // ******************** comment-out this section for the last exercise **************** //
+    // TODO: dumux-course-task: comment-out this section for the last exercise **************** //
 
     // create two individual grids (from the given grid file or the input file)
     // for both sub-domains
@@ -110,43 +110,48 @@ int main(int argc, char** argv) try
 
     // ******************** uncomment this section for the last exercise ****************** //
 
-    // // use dune-subgrid to create the individual grids
-    // static constexpr int dim = 2;
-    // using HostGrid = Dune::YaspGrid<2, Dune::TensorProductCoordinates<double, dim> >;
-    // using HostGridManager = Dumux::GridManager<HostGrid>;
-    // HostGridManager hostGridManager;
-    // hostGridManager.init();
-    // auto& hostGrid = hostGridManager.grid();
-    //
-    // struct Params
-    // {
-    //     double amplitude = getParam<double>("Grid.Amplitude");
-    //     double baseline = getParam<double>("Grid.Baseline");
-    //     double offset = getParam<double>("Grid.Offset");
-    //     double scaling = getParam<double>("Grid.Scaling");
-    // };
-    //
-    // Params params;
-    //
-    // auto elementSelectorStokes = [&](const auto& element)
-    // {
-    //     double interface = params.amplitude * std::sin(( element.geometry().center()[0] -params.offset) / params.scaling * 2.0 * M_PI) + params.baseline;
-    //     return element.geometry().center()[1] > interface;
-    // };
-    //
-    // auto elementSelectorDarcy = [&](const auto& element)
-    // {
-    //     double interface  =  params.amplitude * std::sin(( element.geometry().center()[0] - params.offset) / params.scaling * 2.0 * M_PI) + params.baseline;
-    //     return element.geometry().center()[1] < interface;
-    // };
-    //
-    // // subgrid Pointer
-    // auto stokesGridPtr = SubgridManager<HostGrid>::makeGrid(hostGrid, elementSelectorStokes, "Stokes");
-    // auto darcyGridPtr = SubgridManager<HostGrid>::makeGrid(hostGrid, elementSelectorDarcy, "Darcy");
-    //
-    // // we compute on the leaf grid view
-    // const auto& darcyGridView = darcyGridPtr->leafGridView();
-    // const auto& stokesGridView = stokesGridPtr->leafGridView();
+//        // use dune-subgrid to create the individual grids
+//     static constexpr int dim = 2;
+//     using HostGrid = Dune::YaspGrid<2, Dune::TensorProductCoordinates<double, dim> >;
+//     using HostGridManager = Dumux::GridManager<HostGrid>;
+//     HostGridManager hostGridManager;
+//     hostGridManager.init();
+//     auto& hostGrid = hostGridManager.grid();
+//
+//     struct Params
+//     {
+//         double amplitude = getParam<double>("Grid.Amplitude");
+//         double baseline = getParam<double>("Grid.Baseline");
+//         double offset = getParam<double>("Grid.Offset");
+//         double scaling = getParam<double>("Grid.Scaling");
+//     };
+//
+//     Params params;
+//
+//     auto elementSelectorStokes = [&](const auto& element)
+//     {
+//         double interface = params.amplitude * std::sin(( element.geometry().center()[0] -params.offset) / params.scaling * 2.0 * M_PI) + params.baseline;
+//         return element.geometry().center()[1] > interface;
+//     };
+//
+//     auto elementSelectorDarcy = [&](const auto& element)
+//     {
+//         double interface  =  params.amplitude * std::sin(( element.geometry().center()[0] - params.offset) / params.scaling * 2.0 * M_PI) + params.baseline;
+//         return element.geometry().center()[1] < interface;
+//     };
+//
+//     using SubGrid = Dune::SubGrid<dim, HostGrid>;
+//
+//     Dumux::GridManager<SubGrid> subGridManagerStokes;
+//     Dumux::GridManager<SubGrid> subGridManagerDarcy;
+//
+//     // initialize subgrids
+//     subGridManagerStokes.init(hostGrid, elementSelectorStokes, "Stokes");
+//     subGridManagerDarcy.init(hostGrid, elementSelectorDarcy, "Darcy");
+//
+//     // we compute on the leaf grid view
+//     const auto& darcyGridView = subGridManagerDarcy.grid().leafGridView();
+//     const auto& stokesGridView = subGridManagerStokes.grid().leafGridView();
 
     // ************************************************************************************ //
 
diff --git a/exercises/exercise-coupling-ff-pm/interface/ex_interface_coupling_ff-pm.input b/exercises/exercise-coupling-ff-pm/interface/params.input
similarity index 100%
rename from exercises/exercise-coupling-ff-pm/interface/ex_interface_coupling_ff-pm.input
rename to exercises/exercise-coupling-ff-pm/interface/params.input
diff --git a/exercises/exercise-coupling-ff-pm/interface/ex_interface_pmproblem.hh b/exercises/exercise-coupling-ff-pm/interface/porousmediumsubproblem.hh
similarity index 94%
rename from exercises/exercise-coupling-ff-pm/interface/ex_interface_pmproblem.hh
rename to exercises/exercise-coupling-ff-pm/interface/porousmediumsubproblem.hh
index 2062a675c89e34a137cef20e7a4b7205eb25ff49..8ef6d1827db8b382dddfc8d320055770f7052816 100644
--- a/exercises/exercise-coupling-ff-pm/interface/ex_interface_pmproblem.hh
+++ b/exercises/exercise-coupling-ff-pm/interface/porousmediumsubproblem.hh
@@ -26,6 +26,7 @@
 
 #include <dune/grid/yaspgrid.hh>
 
+// TODO: dumux-course-task
 //****** uncomment for the last exercise *****//
 // #include <dumux/io/grid/subgridmanager.hh>
 
@@ -42,7 +43,7 @@
 namespace Dumux
 {
 template <class TypeTag>
-class DarcySubProblem;
+class PorousMediumSubProblem;
 
 namespace Properties
 {
@@ -53,7 +54,7 @@ struct DarcyOneP { using InheritsFrom = std::tuple<OneP, CCTpfaModel>; };
 
 // Set the problem property
 template<class TypeTag>
-struct Problem<TypeTag, TTag::DarcyOneP> { using type = Dumux::DarcySubProblem<TypeTag>; };
+struct Problem<TypeTag, TTag::DarcyOneP> { using type = Dumux::PorousMediumSubProblem<TypeTag>; };
 
 // the fluid system
 template<class TypeTag>
@@ -90,7 +91,7 @@ struct SpatialParams<TypeTag, TTag::DarcyOneP> {
  * \brief The porous medium flow sub problem
  */
 template <class TypeTag>
-class DarcySubProblem : public PorousMediumFlowProblem<TypeTag>
+class PorousMediumSubProblem : public PorousMediumFlowProblem<TypeTag>
 {
     using ParentType = PorousMediumFlowProblem<TypeTag>;
     using GridView = GetPropType<TypeTag, Properties::GridView>;
@@ -103,6 +104,8 @@ class DarcySubProblem : public PorousMediumFlowProblem<TypeTag>
     using SubControlVolume = typename FVElementGeometry::SubControlVolume;
     using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace;
     using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>;
+    using GridVariables = GetPropType<TypeTag, Properties::GridVariables>;
+    using ElementFluxVariablesCache = typename GridVariables::GridFluxVariablesCache::LocalView;
 
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
 
@@ -112,7 +115,7 @@ class DarcySubProblem : public PorousMediumFlowProblem<TypeTag>
     using CouplingManager = GetPropType<TypeTag, Properties::CouplingManager>;
 
 public:
-    DarcySubProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry,
+    PorousMediumSubProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry,
                    std::shared_ptr<CouplingManager> couplingManager)
     : ParentType(fvGridGeometry, "Darcy"), eps_(1e-7), couplingManager_(couplingManager)
     {}
@@ -191,6 +194,7 @@ public:
     NumEqVector neumann(const Element& element,
                         const FVElementGeometry& fvGeometry,
                         const ElementVolumeVariables& elemVolVars,
+                        const ElementFluxVariablesCache& elemFluxVarsCache,
                         const SubControlVolumeFace& scvf) const
     {
         // no-flow everywhere ...
diff --git a/exercises/exercise-coupling-ff-pm/models/CMakeLists.txt b/exercises/exercise-coupling-ff-pm/models/CMakeLists.txt
index c0f7fdefdf5e1487b9390df4409c55795b05f4e7..63593311a4eb0d410b5db68563ca8886337b87b7 100644
--- a/exercises/exercise-coupling-ff-pm/models/CMakeLists.txt
+++ b/exercises/exercise-coupling-ff-pm/models/CMakeLists.txt
@@ -1,9 +1,9 @@
 # executables for ex_interface_coupling_ff-pm
-dune_add_test(NAME ex_models_coupling_ff-pm
-              SOURCES ex_models_coupling_ff-pm.cc)
+dune_add_test(NAME exercise_models_coupling_ff-pm
+              SOURCES main.cc)
 
 # add tutorial to the common target
-add_dependencies(test_exercises ex_models_coupling_ff-pm)
+add_dependencies(test_exercises exercise_models_coupling_ff-pm)
 
 # add a symlink for each input file
 add_input_file_links()
diff --git a/exercises/exercise-coupling-ff-pm/models/ex_models_ffproblem.hh b/exercises/exercise-coupling-ff-pm/models/freeflowsubproblem.hh
similarity index 97%
rename from exercises/exercise-coupling-ff-pm/models/ex_models_ffproblem.hh
rename to exercises/exercise-coupling-ff-pm/models/freeflowsubproblem.hh
index 853bc8678d4662a1f07598961ab69bb7049e931c..bf883a3377a9f78c658f79a38ce1851bf6d7eb65 100644
--- a/exercises/exercise-coupling-ff-pm/models/ex_models_ffproblem.hh
+++ b/exercises/exercise-coupling-ff-pm/models/freeflowsubproblem.hh
@@ -36,7 +36,7 @@
 namespace Dumux
 {
 template <class TypeTag>
-class StokesSubProblem;
+class FreeFlowSubProblem;
 
 namespace Properties
 {
@@ -67,7 +67,7 @@ struct UseMoles<TypeTag, TTag::StokesNC> { static constexpr bool value = true; }
 
 // Set the problem property
 template<class TypeTag>
-struct Problem<TypeTag, TTag::StokesNC> { using type = Dumux::StokesSubProblem<TypeTag> ; };
+struct Problem<TypeTag, TTag::StokesNC> { using type = Dumux::FreeFlowSubProblem<TypeTag> ; };
 
 template<class TypeTag>
 struct EnableFVGridGeometryCache<TypeTag, TTag::StokesNC> { static constexpr bool value = true; };
@@ -84,7 +84,7 @@ struct EnableGridVolumeVariablesCache<TypeTag, TTag::StokesNC> { static constexp
  * Horizontal flow from left to right with a parabolic velocity profile.
  */
 template <class TypeTag>
-class StokesSubProblem : public NavierStokesProblem<TypeTag>
+class FreeFlowSubProblem : public NavierStokesProblem<TypeTag>
 {
     using ParentType = NavierStokesProblem<TypeTag>;
 
@@ -113,7 +113,7 @@ class StokesSubProblem : public NavierStokesProblem<TypeTag>
     static constexpr bool useMoles = GetPropType<TypeTag, Properties::ModelTraits>::useMoles();
 
 public:
-    StokesSubProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry, std::shared_ptr<CouplingManager> couplingManager)
+    FreeFlowSubProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry, std::shared_ptr<CouplingManager> couplingManager)
     : ParentType(fvGridGeometry, "Stokes"), eps_(1e-6), couplingManager_(couplingManager)
     {
         velocity_ = getParamFromGroup<Scalar>(this->paramGroup(), "Problem.Velocity");
diff --git a/exercises/exercise-coupling-ff-pm/models/ex_models_coupling_ff-pm.cc b/exercises/exercise-coupling-ff-pm/models/main.cc
similarity index 99%
rename from exercises/exercise-coupling-ff-pm/models/ex_models_coupling_ff-pm.cc
rename to exercises/exercise-coupling-ff-pm/models/main.cc
index 6f48a6df2b77e1bfad221aec84ee52b5285d81d2..63aaf9b4d83eb694bc55fddd4f6a3328a77e7e9a 100644
--- a/exercises/exercise-coupling-ff-pm/models/ex_models_coupling_ff-pm.cc
+++ b/exercises/exercise-coupling-ff-pm/models/main.cc
@@ -49,8 +49,8 @@
 
 #include <dumux/multidomain/boundary/stokesdarcy/couplingmanager.hh>
 
-#include "ex_models_pmproblem.hh"
-#include "ex_models_ffproblem.hh"
+#include "porousmediumsubproblem.hh"
+#include "freeflowsubproblem.hh"
 
 namespace Dumux {
 namespace Properties {
diff --git a/exercises/exercise-coupling-ff-pm/models/ex_models_coupling_ff-pm.input b/exercises/exercise-coupling-ff-pm/models/params.input
similarity index 100%
rename from exercises/exercise-coupling-ff-pm/models/ex_models_coupling_ff-pm.input
rename to exercises/exercise-coupling-ff-pm/models/params.input
diff --git a/exercises/exercise-coupling-ff-pm/models/ex_models_pmproblem.hh b/exercises/exercise-coupling-ff-pm/models/porousmediumsubproblem.hh
similarity index 97%
rename from exercises/exercise-coupling-ff-pm/models/ex_models_pmproblem.hh
rename to exercises/exercise-coupling-ff-pm/models/porousmediumsubproblem.hh
index f25401bf6cb2125000950d50a1795e6e931468c4..6e35406425fa4c7408f57dbd2bdd0ad2c083595c 100644
--- a/exercises/exercise-coupling-ff-pm/models/ex_models_pmproblem.hh
+++ b/exercises/exercise-coupling-ff-pm/models/porousmediumsubproblem.hh
@@ -40,7 +40,7 @@
 namespace Dumux
 {
 template <class TypeTag>
-class DarcySubProblem;
+class PorousMediumSubProblem;
 
 namespace Properties
 {
@@ -51,7 +51,7 @@ struct DarcyOnePNC { using InheritsFrom = std::tuple<OnePNC, CCTpfaModel>; };
 
 // Set the problem property
 template<class TypeTag>
-struct Problem<TypeTag, TTag::DarcyOnePNC> { using type = Dumux::DarcySubProblem<TypeTag>; };
+struct Problem<TypeTag, TTag::DarcyOnePNC> { using type = Dumux::PorousMediumSubProblem<TypeTag>; };
 
 // The fluid system
 template<class TypeTag>
@@ -86,7 +86,7 @@ struct SpatialParams<TypeTag, TTag::DarcyOnePNC> {
 } // end namespace Properties
 
 template <class TypeTag>
-class DarcySubProblem : public PorousMediumFlowProblem<TypeTag>
+class PorousMediumSubProblem : public PorousMediumFlowProblem<TypeTag>
 {
     using ParentType = PorousMediumFlowProblem<TypeTag>;
     using GridView = GetPropType<TypeTag, Properties::GridView>;
@@ -99,6 +99,8 @@ class DarcySubProblem : public PorousMediumFlowProblem<TypeTag>
     using SubControlVolume = typename FVElementGeometry::SubControlVolume;
     using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace;
     using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>;
+    using GridVariables = GetPropType<TypeTag, Properties::GridVariables>;
+    using ElementFluxVariablesCache = typename GridVariables::GridFluxVariablesCache::LocalView;
 
     // copy some indices for convenience
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
@@ -121,7 +123,7 @@ class DarcySubProblem : public PorousMediumFlowProblem<TypeTag>
     using TimeLoopPtr = std::shared_ptr<TimeLoop<Scalar>>;
 
 public:
-    DarcySubProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry,
+    PorousMediumSubProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry,
                    std::shared_ptr<CouplingManager> couplingManager)
     : ParentType(fvGridGeometry, "Darcy"), eps_(1e-7), couplingManager_(couplingManager)
     {
@@ -305,6 +307,7 @@ public:
     NumEqVector neumann(const Element& element,
                         const FVElementGeometry& fvGeometry,
                         const ElementVolumeVariables& elemVolVars,
+                        const ElementFluxVariablesCache& elemFluxVarsCache,
                         const SubControlVolumeFace& scvf) const
     {
         NumEqVector values(0.0);
diff --git a/exercises/exercise-coupling-ff-pm/turbulence/CMakeLists.txt b/exercises/exercise-coupling-ff-pm/turbulence/CMakeLists.txt
index 3315f6a811bab474cb5598a409798ca4510c8339..a854868df4f6475307f63adfc36d85499e26bb7a 100644
--- a/exercises/exercise-coupling-ff-pm/turbulence/CMakeLists.txt
+++ b/exercises/exercise-coupling-ff-pm/turbulence/CMakeLists.txt
@@ -1,10 +1,10 @@
 # executables for ex_interface_coupling_ff-pm
-dune_add_test(NAME ex_turbulence_coupling_ff-pm
-              SOURCES ex_turbulence_coupling_ff-pm.cc)
+dune_add_test(NAME exercise_turbulence_coupling_ff-pm
+              SOURCES main.cc)
 
 
 # add a symlink for each input file
 add_input_file_links()
 
 # add tutorial to the common target
-add_dependencies(test_exercises ex_turbulence_coupling_ff-pm)
+add_dependencies(test_exercises exercise_turbulence_coupling_ff-pm)
diff --git a/exercises/exercise-coupling-ff-pm/turbulence/ex_turbulence_ffproblem.hh b/exercises/exercise-coupling-ff-pm/turbulence/freeflowsubproblem.hh
similarity index 100%
rename from exercises/exercise-coupling-ff-pm/turbulence/ex_turbulence_ffproblem.hh
rename to exercises/exercise-coupling-ff-pm/turbulence/freeflowsubproblem.hh
diff --git a/exercises/exercise-coupling-ff-pm/turbulence/ex_turbulence_coupling_ff-pm.cc b/exercises/exercise-coupling-ff-pm/turbulence/main.cc
similarity index 99%
rename from exercises/exercise-coupling-ff-pm/turbulence/ex_turbulence_coupling_ff-pm.cc
rename to exercises/exercise-coupling-ff-pm/turbulence/main.cc
index 69a4063a6937ba2b6f093e4e62bbc0131ee51528..555feebca9370f26c279b8a08548c150039274bb 100644
--- a/exercises/exercise-coupling-ff-pm/turbulence/ex_turbulence_coupling_ff-pm.cc
+++ b/exercises/exercise-coupling-ff-pm/turbulence/main.cc
@@ -49,8 +49,8 @@
 
 #include <dumux/multidomain/boundary/stokesdarcy/couplingmanager.hh>
 
-#include "ex_turbulence_pmproblem.hh"
-#include "ex_turbulence_ffproblem.hh"
+#include "porousmediumsubproblem.hh"
+#include "freeflowsubproblem.hh"
 
 namespace Dumux {
 namespace Properties {
diff --git a/exercises/exercise-coupling-ff-pm/turbulence/ex_turbulence_coupling_ff-pm.input b/exercises/exercise-coupling-ff-pm/turbulence/params.input
similarity index 100%
rename from exercises/exercise-coupling-ff-pm/turbulence/ex_turbulence_coupling_ff-pm.input
rename to exercises/exercise-coupling-ff-pm/turbulence/params.input
diff --git a/exercises/exercise-coupling-ff-pm/turbulence/ex_turbulence_pmproblem.hh b/exercises/exercise-coupling-ff-pm/turbulence/porousmediumsubproblem.hh
similarity index 96%
rename from exercises/exercise-coupling-ff-pm/turbulence/ex_turbulence_pmproblem.hh
rename to exercises/exercise-coupling-ff-pm/turbulence/porousmediumsubproblem.hh
index 38ddb50090d38f3f1fe9d10df273b74854aa2650..7b0ab9821c40d9f125e3ba1fc96e22d6d40fac75 100644
--- a/exercises/exercise-coupling-ff-pm/turbulence/ex_turbulence_pmproblem.hh
+++ b/exercises/exercise-coupling-ff-pm/turbulence/porousmediumsubproblem.hh
@@ -38,7 +38,7 @@
 namespace Dumux
 {
 template <class TypeTag>
-class DarcySubProblem;
+class PorousMediumSubProblem;
 
 namespace Properties
 {
@@ -49,7 +49,7 @@ struct DarcyTwoPTwoCNI { using InheritsFrom = std::tuple<TwoPTwoCNI, CCTpfaModel
 
 // Set the problem property
 template<class TypeTag>
-struct Problem<TypeTag, TTag::DarcyTwoPTwoCNI> { using type = Dumux::DarcySubProblem<TypeTag>; };
+struct Problem<TypeTag, TTag::DarcyTwoPTwoCNI> { using type = Dumux::PorousMediumSubProblem<TypeTag>; };
 
 // the fluid system
 template<class TypeTag>
@@ -82,7 +82,7 @@ struct SpatialParams<TypeTag, TTag::DarcyTwoPTwoCNI> {
  * \brief The porous medium sub problem
  */
 template <class TypeTag>
-class DarcySubProblem : public PorousMediumFlowProblem<TypeTag>
+class PorousMediumSubProblem : public PorousMediumFlowProblem<TypeTag>
 {
     using ParentType = PorousMediumFlowProblem<TypeTag>;
     using GridView = GetPropType<TypeTag, Properties::GridView>;
@@ -96,6 +96,8 @@ class DarcySubProblem : public PorousMediumFlowProblem<TypeTag>
     using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace;
     using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>;
     using ElementVolumeVariables = typename GetPropType<TypeTag, Properties::GridVolumeVariables>::LocalView;
+    using GridVariables = GetPropType<TypeTag, Properties::GridVariables>;
+    using ElementFluxVariablesCache = typename GridVariables::GridFluxVariablesCache::LocalView;
 
     using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
 
@@ -119,7 +121,7 @@ class DarcySubProblem : public PorousMediumFlowProblem<TypeTag>
     using DiffusionCoefficientAveragingType = typename StokesDarcyCouplingOptions::DiffusionCoefficientAveragingType;
 
 public:
-    DarcySubProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry,
+    PorousMediumSubProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry,
                    std::shared_ptr<CouplingManager> couplingManager)
     : ParentType(fvGridGeometry, "Darcy"), eps_(1e-7), couplingManager_(couplingManager)
     {
@@ -227,6 +229,7 @@ public:
     NumEqVector neumann(const Element& element,
                         const FVElementGeometry& fvGeometry,
                         const ElementVolumeVariables& elemVolVars,
+                        const ElementFluxVariablesCache& elemFluxVarsCache,
                         const SubControlVolumeFace& scvf) const
     {
         NumEqVector values(0.0);
diff --git a/exercises/exercise-fluidsystem/CMakeLists.txt b/exercises/exercise-fluidsystem/CMakeLists.txt
index 6eb70e089d75881de19e635399845a8797acceab..e4ed4f012ab0b328f8dab5c001a6b0d4edad76ea 100644
--- a/exercises/exercise-fluidsystem/CMakeLists.txt
+++ b/exercises/exercise-fluidsystem/CMakeLists.txt
@@ -1,18 +1,18 @@
 # executables for exercise part a & b
 #part a: 2pproblem
-dune_add_test(NAME exercise-fluidsystem_a
-              SOURCES exercise-fluidsystem.cc
+dune_add_test(NAME exercise_fluidsystem_a
+              SOURCES main.cc
               COMPILE_DEFINITIONS TYPETAG=ExerciseFluidsystemTwoP
               COMPILE_ONLY) # for testing purposes, ignore for the exercise
 
 #part b: 2p2cproblem
-dune_add_test(NAME exercise-fluidsystem_b
-              SOURCES exercise-fluidsystem.cc
+dune_add_test(NAME exercise_fluidsystem_b
+              SOURCES main.cc
               COMPILE_DEFINITIONS TYPETAG=ExerciseFluidsystemTwoPTwoC
               COMPILE_ONLY) # for testing purposes, ignore for the exercise
 
 # add exercises to the common target
-add_dependencies(test_exercises exercise-fluidsystem_a exercise-fluidsystem_b)
+add_dependencies(test_exercises exercise_fluidsystem_a exercise_fluidsystem_b)
 
 # add a symlink for each input file
 add_input_file_links()
diff --git a/exercises/exercise-fluidsystem/README.md b/exercises/exercise-fluidsystem/README.md
index 124002bb0337a047122c477cc096ae14791ad329..df8f82a0e684dad95bad420d57c675da6ee15e2e 100644
--- a/exercises/exercise-fluidsystem/README.md
+++ b/exercises/exercise-fluidsystem/README.md
@@ -1,7 +1,7 @@
 # Exercise Fluidsystem
 
 The aim of this exercise is to get familiar with the _DuMuX_ way of implementing new components (fluids) and fluid systems (mixtures). In the scope of this exercise, a new fictitious component is implemented
-(exercise-fluidsystem a) as well as its mixture with water (exercise-fluidsystem b).
+(exercise fluidsystem a) as well as its mixture with water (exercise fluidsystem b).
 
 ## Problem set-up
 
@@ -17,10 +17,10 @@ The domain has a size of 60 x 60 m and contains two low-permeable lenses. Initia
 ### 1. Getting familiar with the code
 
 Locate all the files you will need for this exercise
-* The shared __main file__ : `exercise-fluidsystem.cc`
-* The __input file__ for part a: `exercise-fluidsystem_a.input`
+* The shared __main file__ : `main.cc`
+* The __input file__ for part a: `aparams.input`
 * The __problem file__ for part a: `2pproblem.hh`
-* The __input file__ for part b: `exercise-fluidsystem_b.input`
+* The __input file__ for part b: `bparams.input`
 * The __problem file__ for part b: `2p2cproblem.hh`
 * The __spatial parameters file__: `spatialparams.hh`
 
@@ -119,7 +119,7 @@ public:
 
 ### 2.1. Incompressible component
 
-Open the file `myincompressiblecomponent.hh`. You can see in line 42 that a component should always derive from the _Base_ class (see `dumux/material/components/base.hh`), which defines the interface of a _DuMuX_ component with possibly required functions to be overloaded by the actual implementation. Additionally it is required for liquids to derive from the _Liquid_ class (see `dumux/material/components/liquid.hh`), for gases to derive from the _Gas_ class (see `dumux/material/components/gas.hh`) and for solids to derive from the _Solid_ class (see `dumux/material/components/solid.hh`), with functions specific to liquid, gas or solid.
+Open the file `myincompressiblecomponent.hh`.  A component should always derive from the _Base_ class - thus we include `dumux/material/components/base.hh`-, which defines the interface of a _DuMuX_ component with possibly required functions to be overloaded by the actual implementation. Additionally it is required for liquids to derive from the _Liquid_ class (see `dumux/material/components/liquid.hh`), for gases to derive from the _Gas_ class (see `dumux/material/components/gas.hh`) and for solids to derive from the _Solid_ class (see `dumux/material/components/solid.hh`), with functions specific to liquid, gas or solid.
 
 ```c++
 /*!
@@ -150,8 +150,8 @@ In order to execute the program, change to the build directory and compile and e
 
 ```bash
 cd build-cmake/exercises/exercise-fluidsystem
-make exercise-fluidsystem_a
-./exercise-fluidsystem_a exercise-fluidsystem_a.input
+make exercise_fluidsystem_a
+./exercise_fluidsystem_a aparams.input
 ```
 
 The saturation distribution of the nonwetting phase S$`_n`$ (the phase consisting of our fictitious incompressible component) at the final simulation time should look like this:
@@ -168,7 +168,7 @@ where $`p`$ is the pressure and $`\rho_{min} = 1440 `$, $`\rho_{max} = 1480 `$ a
 
 ![](../extradoc/exercise-fluidsystem_a_solution2.png)
 
-You can plot the density of the phase consisting of your compressible component by setting `PlotDensity` in `exercise-fluidsystem_a.input` to `true` and starting the simulation again.
+You can plot the density of the phase consisting of your compressible component by setting `PlotDensity` in `aparams.input` to `true` and starting the simulation again.
 Compare the gnuplot output to the following plot of the density function from above:
 
 ![](../extradoc/exercise-fluidsystem_a_densityfunction.png)
@@ -228,8 +228,8 @@ Implement this dependency in the `density()` method in the fluid system. In orde
 
 ```bash
 cd build-cmake/exercises/exercise-fluidsystem
-make exercise-fluidsystem_b
-./exercise-fluidsystem_b exercise-fluidsystem_b.input
+make exercise_fluidsystem_b
+./exercise_fluidsystem_b bparams.input
 ```
 
 You will observe an error message and an abortion of the program. This is due to the fact that in order for the constraint solver and other mechanisms in the two-phase two-component model to work, an additional functionality in the component has to be implemented: the model has to know the vapour pressure. As in the previous exercise, check the `dumux/material/components/base.hh` file for this function and implement it into `mycompressiblecomponent.hh`. For the vapour pressure, use a value of $`3900`$  Pa.
@@ -259,6 +259,6 @@ Change this function such that the the phase of our new component is the wetting
 
 ```bash
 cd build-cmake/exercises/exercise-fluidsystem
-make exercise-fluidsystem_b
-./exercise-fluidsystem_b exercise-fluidsystem_b.input
+make exercise_fluidsystem_b
+./exercise_fluidsystem_b exercise_fluidsystem_b.input
 ```
diff --git a/exercises/exercise-fluidsystem/exercise-fluidsystem_a.input b/exercises/exercise-fluidsystem/aparams.input
similarity index 100%
rename from exercises/exercise-fluidsystem/exercise-fluidsystem_a.input
rename to exercises/exercise-fluidsystem/aparams.input
diff --git a/exercises/exercise-fluidsystem/exercise-fluidsystem_b.input b/exercises/exercise-fluidsystem/bparams.input
similarity index 100%
rename from exercises/exercise-fluidsystem/exercise-fluidsystem_b.input
rename to exercises/exercise-fluidsystem/bparams.input
diff --git a/exercises/exercise-fluidsystem/exercise-fluidsystem.cc b/exercises/exercise-fluidsystem/main.cc
similarity index 100%
rename from exercises/exercise-fluidsystem/exercise-fluidsystem.cc
rename to exercises/exercise-fluidsystem/main.cc
diff --git a/exercises/exercise-fractures/CMakeLists.txt b/exercises/exercise-fractures/CMakeLists.txt
index 9f10ed083620cb2e843e488eadcaa0e8b1c3ebf0..8af1540b78298d636ceee0831025a59a3a96f274 100644
--- a/exercises/exercise-fractures/CMakeLists.txt
+++ b/exercises/exercise-fractures/CMakeLists.txt
@@ -1,6 +1,6 @@
 dune_add_test(NAME exercise_fractures
               CMAKE_GUARD "( dune-foamgrid_FOUND AND dune-alugrid_FOUND )"
-              SOURCES exercise_fractures.cc)
+              SOURCES main.cc)
 
 # add a symlink for each input file
 add_input_file_links()
@@ -9,7 +9,7 @@ dune_symlink_to_source_files(FILES grids)
 
 #install sources
 install(FILES
-exercise_fractures.cc
+exercisefractures.cc
 matrixproblem.hh
 fractureproblem.hh
 matrixspatialparams.hh
diff --git a/exercises/exercise-fractures/README.md b/exercises/exercise-fractures/README.md
index a31fe60b538ed997ac89b743bb685382777f3a76..8fb0703c86821555daddb311e873c746221ff527 100644
--- a/exercises/exercise-fractures/README.md
+++ b/exercises/exercise-fractures/README.md
@@ -14,8 +14,8 @@ In the initial setup of this exercise, we want to consider buoyancy-driven upwar
 
 Navigate to the directory `dumux/exercises/exercise-fractures` and familiarize yourself with the files necessary for this exercise:
 
-* The __main file__: `exercise_fractures.cc`
-* The __input file__: `exercise_fractures.input`
+* The __main file__: `main.cc`
+* The __input file__: `params.input`
 * The __problem file__ for the matrix domain: `matrixproblem.hh`
 * The __problem file__ for the fracture domain: `fractureproblem.hh`
 * The __spatial parameters file__ for the matrix domain: `matrixspatialparams.hh`
@@ -108,14 +108,14 @@ Head to the build directory, compile the exercise and execute the program by typ
 ```bash
 cd build-cmake/exercises/exercise-fractures
 make exercise_fractures
-./exercise_fractures exercise_fractures.input
+./exercise_fractures params.input
 ```
 
 Take a look at the results by opening the files `matrix.pvd` and `fractures.pvd` with _Paraview_. In order to increase the visibility of the fracture solution, you might want to apply the tube filter to it (e.g. with a tube radius of 0.2). The result should look like this:
 
 ![](../extradoc/exercisefractures_initsol.png)
 
-You can see how the fractures act as preferential flowpaths in the upwards movement of nitrogen due to their higher permeabilities. Additionally, you can observe comparatively high nitrogen saturations in the fracture tips as a result of the fractures acting as capillary traps due to the lower capillary pressures inside them. Consider turning them into capillary barriers, e.g. by setting __SpatialParams.VGAlpha = 1e-5__ in the __Fracture__ group in the input file (`exercise_fractures.input`). The nitrogen saturations in the fractures (especially in the fracture tips) should now be lower than in the surrounding matrix. Do not forget to reset __SpatialParams.VGAlpha = 1e-1__ in the input file after you are done.
+You can see how the fractures act as preferential flowpaths in the upwards movement of nitrogen due to their higher permeabilities. Additionally, you can observe comparatively high nitrogen saturations in the fracture tips as a result of the fractures acting as capillary traps due to the lower capillary pressures inside them. Consider turning them into capillary barriers, e.g. by setting __SpatialParams.VGAlpha = 1e-5__ in the __Fracture__ group in the input file (`params.input`). The nitrogen saturations in the fractures (especially in the fracture tips) should now be lower than in the surrounding matrix. Do not forget to reset __SpatialParams.VGAlpha = 1e-1__ in the input file after you are done.
 
 ## Task A: Change the boundary conditions and disable gravity
 
@@ -180,7 +180,7 @@ Physical Line(1) = {6,7,9,11,12,13,14,15,16,17,18,19,20,21,23,25};
 Physical Line(2) = {8,10,22,24,26};
 ```
 
-We now want to give all fracture elements that are tagged with domain marker 2 the properties for barriers and assign the parameters for open fractures to all other elements. The domain markers are read from the grid file and can be obtained from the `GridManager` subsequent to grid creation. The main file of this exercise has been implemented such that these markers are already passed to the spatial parameters of the sub-domains (see `exercise_fractures.cc`, lines 120-132). In the spatial parameters you will find a convenience function which allows you to obtain the domain marker for a given element (see `fracturespatialparams.hh`):
+We now want to give all fracture elements that are tagged with domain marker 2 the properties for barriers and assign the parameters for open fractures to all other elements. The domain markers are read from the grid file and can be obtained from the `GridManager` subsequent to grid creation. The main file of this exercise has been implemented such that these markers are already passed to the spatial parameters of the sub-domains (see `main.cc`, lines 120-132). In the spatial parameters you will find a convenience function which allows you to obtain the domain marker for a given element (see `fracturespatialparams.hh`):
 
 ```cpp
 //! returns the domain marker for an element
@@ -188,7 +188,7 @@ int getElementDomainMarker(const Element& element) const
 { return gridDataPtr_->getElementDomainMarker(element); }
 ```
 
-The domain markers are also already added to the output (see `exercise_fractures.cc`, lines 195-199). To visualize them, open any of your previously produced results with _Paraview_ and take a look at them by selecting __domainMarker__.
+The domain markers are also already added to the output (see `main.cc`, lines 195-199). To visualize them, open any of your previously produced results with _Paraview_ and take a look at them by selecting __domainMarker__.
 
 Adjust the functions for permeability, porosity and material law parameters in the `fracturespatialparams.hh` file such that they are selected depending on the domain marker of the elements. You will see in the results that the pressure jump across the first vertical fracture is now lower than before, because there are highly permeable fractures crossing it, allowing for a pressure release into the other parts of the domain.
 
diff --git a/exercises/exercise-fractures/exercise_fractures.cc b/exercises/exercise-fractures/main.cc
similarity index 100%
rename from exercises/exercise-fractures/exercise_fractures.cc
rename to exercises/exercise-fractures/main.cc
diff --git a/exercises/exercise-fractures/exercise_fractures.input b/exercises/exercise-fractures/params.input
similarity index 100%
rename from exercises/exercise-fractures/exercise_fractures.input
rename to exercises/exercise-fractures/params.input
diff --git a/exercises/exercise-grids/CMakeLists.txt b/exercises/exercise-grids/CMakeLists.txt
index f9028d809dd9b158821b0ff82762b4af9d92ec78..092f93db3b4e7f24fbdd4d8d913678a43f33b3e0 100644
--- a/exercises/exercise-grids/CMakeLists.txt
+++ b/exercises/exercise-grids/CMakeLists.txt
@@ -1,6 +1,6 @@
 # the grid exercise simulation program
 dune_add_test(NAME exercise_grids
-              SOURCES exercise_grids.cc)
+              SOURCES main.cc)
 
 # add tutorial to the common target
 add_dependencies(test_exercises exercise_grids)
diff --git a/exercises/exercise-grids/README.md b/exercises/exercise-grids/README.md
index 08b2a50893a4c5c099f93ee267616a1ebb543e03..4edb8961866e45c106c1ec333a580807640e5e66 100644
--- a/exercises/exercise-grids/README.md
+++ b/exercises/exercise-grids/README.md
@@ -9,8 +9,8 @@ Here we will expand on what we've covered in the basics exercise, and the proble
 * Navigate to the directory `dumux-course/exercises/exercise-grids/`
 
 We'll be editing the following files during this exercise:
-* The __input file__: `exercise_grids.input` ,
-* and the __problem file__: `injection2pproblem.hh`
+* The __input file__: `params.input` ,
+* and the __problem file__: `problem.hh`
 
 Currently our grid is defined using the following input parameters in the input file:
 
diff --git a/exercises/exercise-grids/exercise_grids.cc b/exercises/exercise-grids/main.cc
similarity index 99%
rename from exercises/exercise-grids/exercise_grids.cc
rename to exercises/exercise-grids/main.cc
index 8ffbc32502c704d003b6e939246ed9f1a03e399e..9e094d98dfd66b7a486d4c523c6dd29dbbf0d8b4 100644
--- a/exercises/exercise-grids/exercise_grids.cc
+++ b/exercises/exercise-grids/main.cc
@@ -47,7 +47,7 @@
 #include <dumux/io/grid/gridmanager.hh>
 
 // The problem file, where setup-specific boundary and initial conditions are defined.
-#include "injection2pproblem.hh"
+#include "problem.hh"
 
 ////////////////////////
 // the main function
diff --git a/exercises/exercise-grids/exercise_grids.input b/exercises/exercise-grids/params.input
similarity index 100%
rename from exercises/exercise-grids/exercise_grids.input
rename to exercises/exercise-grids/params.input
diff --git a/exercises/exercise-grids/injection2pproblem.hh b/exercises/exercise-grids/problem.hh
similarity index 97%
rename from exercises/exercise-grids/injection2pproblem.hh
rename to exercises/exercise-grids/problem.hh
index b38ca805e709b709cbc72fffd5a8d93472b8c214..680ea9ab8a6d0c2701f091f1381e5dda663a196f 100644
--- a/exercises/exercise-grids/injection2pproblem.hh
+++ b/exercises/exercise-grids/problem.hh
@@ -32,7 +32,7 @@
 #include <dumux/porousmediumflow/problem.hh>
 #include <dumux/material/fluidsystems/h2on2.hh>
 
-#include "injection2pspatialparams.hh"
+#include "spatialparams.hh"
 
 namespace Dumux {
 
@@ -84,15 +84,15 @@ struct FluidSystem<TypeTag, TTag::Injection2p> { using type = FluidSystems::H2ON
  *
  * The domain is sized 60 m times 40 m.
  *
- * For the mass conservation equation neumann boundary conditions are used on
- * the top, on the bottom and on the right of the domain, while dirichlet conditions
+ * For the mass conservation equation Neumann boundary conditions are used on
+ * the top, on the bottom and on the right of the domain, while Dirichlet conditions
  * apply on the left boundary.
  *
  * Gas is injected at the right boundary from 7 m to 15 m at a rate of
- * 0.001 kg/(s m), the remaining neumann boundaries are no-flow
+ * 0.001 kg/(s m), the remaining Neumann boundaries are no-flow
  * boundaries.
  *
- * At the dirichlet boundaries a hydrostatic pressure and a gas saturation of zero a
+ * At the Dirichlet boundaries a hydrostatic pressure and a gas saturation of zero a
  *
  * This problem uses the \ref TwoPModel model.
  */
diff --git a/exercises/exercise-grids/injection2pspatialparams.hh b/exercises/exercise-grids/spatialparams.hh
similarity index 100%
rename from exercises/exercise-grids/injection2pspatialparams.hh
rename to exercises/exercise-grids/spatialparams.hh
diff --git a/exercises/exercise-mainfile/CMakeLists.txt b/exercises/exercise-mainfile/CMakeLists.txt
index f98c9146c113d417016f813a934f87998f0066bb..89fdef2fb5fb07ba5ae5d43f82bbf66ab1a474fc 100644
--- a/exercises/exercise-mainfile/CMakeLists.txt
+++ b/exercises/exercise-mainfile/CMakeLists.txt
@@ -1,15 +1,15 @@
 # the one-phase simulation program
-dune_add_test(NAME exercise_1p_a
-              SOURCES exercise_1p_a.cc)
+dune_add_test(NAME exercise_mainfile_a
+              SOURCES exercise1pamain.cc)
 
-dune_add_test(NAME exercise_1p_b
-              SOURCES exercise_1p_b.cc)
+dune_add_test(NAME exercise_mainfile_b
+              SOURCES exercise1pbmain.cc)
 
-dune_add_test(NAME exercise_1p_c
-              SOURCES exercise_1p_c.cc)
+dune_add_test(NAME exercise_mainfile_c
+              SOURCES exercise1pcmain.cc)
 
 # add tutorial to the common target
-add_dependencies(test_exercises exercise_1p_a exercise_1p_b exercise_1p_c)
+add_dependencies(test_exercises exercise_mainfile_a exercise_mainfile_b exercise_mainfile_c)
 
 # add a symlink for each input file
 add_input_file_links()
diff --git a/exercises/exercise-mainfile/README.md b/exercises/exercise-mainfile/README.md
index 04d5aa5f4355601edded03b7d3511c6edb76cc80..1630d4d94aeba69ce163c09663f7bd6d2f10db57 100644
--- a/exercises/exercise-mainfile/README.md
+++ b/exercises/exercise-mainfile/README.md
@@ -9,9 +9,9 @@ In order to do so, there are three examples of one phase flow problems. Two exam
 The stationary examples differ in the fluidssystems they are using which means they differ in the fluid properties (e.g. density, thermal conductivity etc). The first problem (a) uses an incompressible fluid which means that the density does not change when pressure changes. This makes it possible to solve the system linearly. The second problem uses a compressible fluid, that means the density is a function of pressure and we need to use a nonlinear solver.
 
 To summarize the problems differ in:
-* exercise_1p_a: a one-phase incompressible, stationary problem
-* exercise_1p_b: a one-phase compressible, stationary problem
-* exercise_1p_c: a one-phase compressible, instationary problem
+* exercise mainfile a: a one-phase incompressible, stationary problem
+* exercise mainfile b: a one-phase compressible, stationary problem
+* exercise mainfile c: a one-phase compressible, instationary problem
 
 The problem set-up for all three examples is always the same: It is a two dimensional problem and the domain is $`1 m`$ by $`1 m`$. It is a heterogeneous set-up with a lens in the middle of the domain which has a lower permeability ($`1\cdot 10^{-12} m^2`$ compared to  $`1\cdot 10^{-10} m^2`$ in the rest of the domain).
 
@@ -28,14 +28,14 @@ In the beginning there is a uniform pressure of $`1\cdot 10^5 Pa`$ in the whole
 <hr>
 
 Locate all the files you will need for this exercise
-* The __main file__ for the __1p incompressible, stationary__ problem : `exercise_1p_a.cc`
-* The __main file__ for the __1p compressible, stationary__ problem : `exercise_1p_b.cc`
-* The __main file__ for the __1p compressible, instationary__ problem : `exercise_1p_c.cc`
+* The __main file__ for the __incompressible, stationary__ problem : `exercise1pamain.cc`
+* The __main file__ for the __compressible, stationary__ problem : `exercise1pbmain.cc`
+* The __main file__ for the __compressible, instationary__ problem : `exercise1pcmain.cc`
 * The shared __problem file__: `1pproblem.hh`
 * The shared __spatial parameters file__: `1pspatialparams.hh`
-* The __input file__ for the __1p incompressible, stationary__ problem: `exercise_1p_a.input`
-* The __input file__ for the __1p compressible, stationary__ problem: `exercise_1p_b.input`
-* The __input file__ for the __1p compressible, instationary__ problem: `exercise_1p_c.input`
+* The __input file__ for the __incompressible, stationary__ problem: `exercise_mainfile_a.input`
+* The __input file__ for the __compressible, stationary__ problem: `exercise_mainfile_b.input`
+* The __input file__ for the __compressible, instationary__ problem: `exercise_mainfile_c.input`
 
 Please pay special attention to the similarities and differences in the three main files. The first main file is solved linearly and does not need a newton solver or any other nonlinear solver method. The second problem is a nonlinear problem and uses newton's method to solve the system. The third problem is nonlinear and additionally instationary. Therefore a time loop needs to be included in the main file.
 
@@ -154,7 +154,7 @@ timeLoop->finalize(leafGridView.comm());
 cd ../../build-cmake/exercises/exercise-mainfile
 ```
 
-* Compile all three executables `exercise_1p_a` and `exercise_1p_b` and `exercise_1p_c`
+* Compile all three executables `exercise_mainfile_a` and `exercise_mainfile_b` and `exercise_mainfile_c`
 
 ```bash
 make exercise_1p_a exercise_1p_b exercise_1p_c
@@ -163,9 +163,9 @@ make exercise_1p_a exercise_1p_b exercise_1p_c
 * Execute the three problems and inspect the result
 
 ```bash
-./exercise_1p_a
-./exercise_1p_b
-./exercise_1p_c
+./exercise_mainfile_a
+./exercise_mainfile_b
+./exercise_mainfile_c
 ```
 
 * you can look at the results (e.g. for the first example) with paraview:
@@ -180,11 +180,11 @@ paraview 1p_incompressible_stationary.pvd
 
 In the input file `exercise_1p_a.input` you will see that there is a variable BaseEpsilon. This defines the base for the epsilon used in the numeric differentiation. If that value is too small, you will see that the solution of the numeric differentiation is not correct. Change that value to $`1 \cdot 10^{-15}`$ and have a look at the solution.
 
-For the incompressible one phase problem it is possible to also have an analytic solution method. Then the epsilon does not play a role anymore since the derivatives are calculated analytically. To implement that follow the directions in the `exercise_1p_a.cc` and the `1pproblem.hh` marked by:
+For the incompressible one phase problem it is possible to also have an analytic solution method. Then the epsilon does not play a role anymore since the derivatives are calculated analytically. To implement that follow the directions in the `exercise1pamain.cc` and the `1pproblem.hh` marked by:
 
 ```c++
 // TODO: dumux-course-task
 ```
 For the analytic solution of your immiscible problem you need analytic solutions for the derivatives of the jacobian. For that we have a special local residual, the `OnePIncompressibleLocalResidual` which provides that. You just need to include `incompressiblelocalresidual.hh` in your `1pproblem.hh` and use that instead of the `immisciblelocalresidual.hh` which is used as a standard for all immiscible models.
 
-Additionally you need to set the differentiation method in the main file `exercise_1p_a.cc` to analytic.
+Additionally you need to set the differentiation method in the main file `exercise1pamain.cc` to analytic.
diff --git a/exercises/exercise-mainfile/exercise_1p_a.cc b/exercises/exercise-mainfile/exercise1pamain.cc
similarity index 100%
rename from exercises/exercise-mainfile/exercise_1p_a.cc
rename to exercises/exercise-mainfile/exercise1pamain.cc
diff --git a/exercises/exercise-mainfile/exercise_1p_b.cc b/exercises/exercise-mainfile/exercise1pbmain.cc
similarity index 100%
rename from exercises/exercise-mainfile/exercise_1p_b.cc
rename to exercises/exercise-mainfile/exercise1pbmain.cc
diff --git a/exercises/exercise-mainfile/exercise_1p_c.cc b/exercises/exercise-mainfile/exercise1pcmain.cc
similarity index 100%
rename from exercises/exercise-mainfile/exercise_1p_c.cc
rename to exercises/exercise-mainfile/exercise1pcmain.cc
diff --git a/exercises/exercise-mainfile/exercise_1p_a.input b/exercises/exercise-mainfile/exercise_mainfile_a.input
similarity index 100%
rename from exercises/exercise-mainfile/exercise_1p_a.input
rename to exercises/exercise-mainfile/exercise_mainfile_a.input
diff --git a/exercises/exercise-mainfile/exercise_1p_b.input b/exercises/exercise-mainfile/exercise_mainfile_b.input
similarity index 100%
rename from exercises/exercise-mainfile/exercise_1p_b.input
rename to exercises/exercise-mainfile/exercise_mainfile_b.input
diff --git a/exercises/exercise-mainfile/exercise_1p_c.input b/exercises/exercise-mainfile/exercise_mainfile_c.input
similarity index 100%
rename from exercises/exercise-mainfile/exercise_1p_c.input
rename to exercises/exercise-mainfile/exercise_mainfile_c.input
diff --git a/exercises/exercise-properties/CMakeLists.txt b/exercises/exercise-properties/CMakeLists.txt
index 2b3f14f23a137dc9e247502b41a89bf791ff0a26..345a7a50612ef31da97f69961d27d3ef26d23711 100644
--- a/exercises/exercise-properties/CMakeLists.txt
+++ b/exercises/exercise-properties/CMakeLists.txt
@@ -1,6 +1,6 @@
 # the property exercise simulation program
 dune_add_test(NAME exercise_properties
-              SOURCES exercise_properties.cc)
+              SOURCES main.cc)
 
 # add tutorial to the common target
 add_dependencies(test_exercises exercise_properties)
diff --git a/exercises/exercise-properties/README.md b/exercises/exercise-properties/README.md
index 1e80194f43c50d4302de5948bb76d09068dfbca8..8419bf83630fdd23dfda70c22bf4e2370a11d17f 100644
--- a/exercises/exercise-properties/README.md
+++ b/exercises/exercise-properties/README.md
@@ -15,10 +15,10 @@ _Exercise Properties_ deals with a two-phase immiscible incompressible problem (
 <hr>
 
 Locate all the files you will need for this exercise
-* The __main file__: `exercise_properties.cc`
+* The __main file__: `main.cc`
 * The __problem file__: `problem.hh`
 * The __spatial parameters file__: `spatialparams.hh`
-* The __input file__: `exercise_properties.input`
+* The __input file__: `params.input`
 * One header file containing:
   * a custom __local residual__ in: `mylocalresidual.hh`
 
diff --git a/exercises/exercise-properties/exercise_properties.cc b/exercises/exercise-properties/main.cc
similarity index 100%
rename from exercises/exercise-properties/exercise_properties.cc
rename to exercises/exercise-properties/main.cc
diff --git a/exercises/exercise-properties/exercise_properties.input b/exercises/exercise-properties/params.input
similarity index 100%
rename from exercises/exercise-properties/exercise_properties.input
rename to exercises/exercise-properties/params.input
diff --git a/exercises/exercise-properties/problem.hh b/exercises/exercise-properties/problem.hh
index bc0cf9451316125f4f1bb0726d9edf3bb37fcdc2..b3391869c434efaf53dd816aa76538ac97276136 100644
--- a/exercises/exercise-properties/problem.hh
+++ b/exercises/exercise-properties/problem.hh
@@ -176,6 +176,7 @@ public:
      */
     NumEqVector neumannAtPos(const GlobalPosition &globalPos) const
     {
+// TODO: reformulate the neumann boundary condition's values in terms of volume instead of mass injected per meter and second
         NumEqVector values(0.0);
         if (onInlet_(globalPos))
             values[contiDNAPLEqIdx] = -0.04; // kg / (m * s)
diff --git a/exercises/exercise-runtimeparams/CMakeLists.txt b/exercises/exercise-runtimeparams/CMakeLists.txt
index 15c7e5834e5b773dc081daa9ac2cd4612f5e4944..c57ccdb6c52f74d50f5072c5b601b7bf492a537c 100644
--- a/exercises/exercise-runtimeparams/CMakeLists.txt
+++ b/exercises/exercise-runtimeparams/CMakeLists.txt
@@ -1,6 +1,6 @@
 # the runtime parameter exercise simulation program
 dune_add_test(NAME exercise_runtimeparams
-              SOURCES exercise_runtimeparams.cc)
+              SOURCES main.cc)
 
 # add tutorial to the common target
 add_dependencies(test_exercises exercise_runtimeparams)
diff --git a/exercises/exercise-runtimeparams/README.md b/exercises/exercise-runtimeparams/README.md
index 8dc6a8aa69069e99eb7a8f9e2145137d266083c0..78875fd5816874d7d5c4bb238e7dd276ffd66950 100644
--- a/exercises/exercise-runtimeparams/README.md
+++ b/exercises/exercise-runtimeparams/README.md
@@ -13,8 +13,8 @@ Here we will expand on what we've covered in the basics exercise, and the proble
 <hr>
 For this task we will edit the following files:
 
-* The shared __problem file__: `injection2pproblem.hh`
-* And the shared __input file__: `exercise_runtimeparams.input`
+* The shared __problem file__: `problem.hh`
+* And the shared __input file__: `params.input`
 
 Parameters can either be directly defined within your program, or specified
 via the input file.  Within every main file, (`*.cc`), the following function
@@ -26,18 +26,19 @@ Parameters::init(argc, argv);
 ```
 
 This input file should either be named the same as the executable file, with a
-trailing `*.input`, as is standard in our CMake system, or be explicitly written
+trailing `*.input`, or be named `prarams.input` as is standard in our CMake system.
+Alternatively, arbitrarily named input file names can be explicitly written
 as the first shell argument after the executable file is called.
 
 ```bash
 ./exercise_runtimeparams
-    (Calls a file (exercise_runtimeparams.input) as the default input file.)
+    (Calls the file params.input as the default input file.)
 ```
 ```bash
 ./exercise_runtimeparams exercise1.input
     (Calls the input file provided (exercise1.input) as the input file.)
 ```
-In the input file `exercise_runtimeparams.input` you can find the following section
+In the input file `params.input` you can find the following section
 
 ```ini
 [SpatialParams]
@@ -54,7 +55,7 @@ When a parameter is defined directly within your program, you'll need to recompi
 ### Task 2: Setting a variable to collect a runtime parameter
 <hr>
 
-Let's free one of the variables in this exercise. Within the class `injection2p2cproblem.hh`, in the first line of the neumann boundary condition definition function `neumannAtPos(...)`, the injection rate is defined as $`1.0 \cdot 10^{-4} kg s^{-1} m^{-2}`$.
+Let's free one of the variables in this exercise. Within the class `problem.hh`, in the first line of the Neumann boundary condition definition function `neumannAtPos(...)`, the injection rate is defined as $`1.0 \cdot 10^{-4} kg s^{-1} m^{-2}`$.
 
 ```c++
 // inject nitrogen. negative values mean injection
@@ -120,7 +121,7 @@ with a runtime variable.
 When your problem file and the input file are edited, compile and run the exercise.
 
 ```bash
-make exercise_runtimeparams && ./exercise_runtimeparams exercise_runtimeparams.input
+make exercise_runtimeparams && ./exercise_runtimeparams params.input
 ```
 <br><br>
 ### Task 3: Default Values for Runtime Parameters
diff --git a/exercises/exercise-runtimeparams/exercise_runtimeparams.cc b/exercises/exercise-runtimeparams/main.cc
similarity index 99%
rename from exercises/exercise-runtimeparams/exercise_runtimeparams.cc
rename to exercises/exercise-runtimeparams/main.cc
index 90ccf53e461b6685d3b51ebd278058fab1054032..e4221b46173dde8e7209826fe8dc0cd30600e891 100644
--- a/exercises/exercise-runtimeparams/exercise_runtimeparams.cc
+++ b/exercises/exercise-runtimeparams/main.cc
@@ -47,7 +47,7 @@
 #include <dumux/io/grid/gridmanager.hh>
 
 // The problem file, where setup-specific boundary and initial conditions are defined.
-#include "injection2pproblem.hh"
+#include "problem.hh"
 
 ////////////////////////
 // the main function
diff --git a/exercises/exercise-runtimeparams/exercise_runtimeparams.input b/exercises/exercise-runtimeparams/params.input
similarity index 100%
rename from exercises/exercise-runtimeparams/exercise_runtimeparams.input
rename to exercises/exercise-runtimeparams/params.input
diff --git a/exercises/exercise-runtimeparams/injection2pproblem.hh b/exercises/exercise-runtimeparams/problem.hh
similarity index 97%
rename from exercises/exercise-runtimeparams/injection2pproblem.hh
rename to exercises/exercise-runtimeparams/problem.hh
index b487055b51d27118de81fd94173382b8ff96e8e8..3ebd1a2a88c5b8c7196bd95f9dd5ffc6847a29b4 100644
--- a/exercises/exercise-runtimeparams/injection2pproblem.hh
+++ b/exercises/exercise-runtimeparams/problem.hh
@@ -32,7 +32,7 @@
 #include <dumux/porousmediumflow/problem.hh>
 #include <dumux/material/fluidsystems/h2on2.hh>
 
-#include "injection2pspatialparams.hh"
+#include "spatialparams.hh"
 
 namespace Dumux {
 
@@ -82,14 +82,14 @@ struct FluidSystem<TypeTag, TTag::Injection2p> { using type = FluidSystems::H2ON
  * The domain is sized 60 m times 40 m.
  *
  * For the mass conservation equation neumann boundary conditions are used on
- * the top, on the bottom and on the right of the domain, while dirichlet conditions
+ * the top, on the bottom and on the right of the domain, while Dirichlet conditions
  * apply on the left boundary.
  *
  * Gas is injected at the right boundary from 7 m to 15 m at a rate of
- * 0.001 kg/(s m), the remaining neumann boundaries are no-flow
+ * 0.001 kg/(s m), the remaining Neumann boundaries are no-flow
  * boundaries.
  *
- * At the dirichlet boundaries a hydrostatic pressure and a gas saturation of zero a
+ * At the Dirichlet boundaries a hydrostatic pressure and a gas saturation of zero a
  *
  * This problem uses the \ref TwoPModel model.
  */
@@ -195,7 +195,7 @@ public:
     }
 
     /*!
-     * \brief Evaluate the boundary conditions for a neumann
+     * \brief Evaluate the boundary conditions for a Neumann
      *        boundary segment.
      *
      * \param globalPos The position of the integration point of the boundary segment.
diff --git a/exercises/exercise-runtimeparams/injection2pspatialparams.hh b/exercises/exercise-runtimeparams/spatialparams.hh
similarity index 100%
rename from exercises/exercise-runtimeparams/injection2pspatialparams.hh
rename to exercises/exercise-runtimeparams/spatialparams.hh
diff --git a/exercises/solution/exercise-basic/exercise_basic_2pni.cc b/exercises/solution/exercise-basic/2pnimain.cc
similarity index 100%
rename from exercises/solution/exercise-basic/exercise_basic_2pni.cc
rename to exercises/solution/exercise-basic/2pnimain.cc
diff --git a/exercises/solution/exercise-basic/CMakeLists.txt b/exercises/solution/exercise-basic/CMakeLists.txt
index b845b89a8f62a36a018a6411e3241da45052f892..2ebe30e2a0da80efff0d6ffa9e4c9293d60556be 100644
--- a/exercises/solution/exercise-basic/CMakeLists.txt
+++ b/exercises/solution/exercise-basic/CMakeLists.txt
@@ -1,6 +1,6 @@
 # the two-phase non-isothermal simulation program
 dune_add_test(NAME exercise_basic_2pni_solution
-              SOURCES exercise_basic_2pni.cc)
+              SOURCES 2pnimain.cc)
 
 
 # add exercise to the common target
diff --git a/exercises/solution/exercise-basic/injection2pniproblem.hh b/exercises/solution/exercise-basic/injection2pniproblem.hh
index 1a43fcfaab89161843084687bcb97523e307950f..73f2fadc0874d70cdadd06a34785a821f850bc0c 100644
--- a/exercises/solution/exercise-basic/injection2pniproblem.hh
+++ b/exercises/solution/exercise-basic/injection2pniproblem.hh
@@ -32,13 +32,13 @@
 #include <dumux/porousmediumflow/problem.hh>
 #include <dumux/material/fluidsystems/h2on2.hh>
 
-#include "injection2pspatialparams.hh"
+#include "spatialparams.hh"
 
 namespace Dumux {
 
 // forward declare problem
 template <class TypeTag>
-class InjectionProblem2PNI;
+class Injection2PNIProblem;
 
 namespace Properties {
 // Create new type tags
@@ -53,7 +53,7 @@ struct Grid<TypeTag, TTag::Injection2pNITypeTag> { using type = Dune::YaspGrid<2
 
 // Set the problem property
 template<class TypeTag>
-struct Problem<TypeTag, TTag::Injection2pNITypeTag> { using type = InjectionProblem2PNI<TypeTag>; };
+struct Problem<TypeTag, TTag::Injection2pNITypeTag> { using type = Injection2PNIProblem<TypeTag>; };
 
 // Set the spatial parameters
 template<class TypeTag>
@@ -84,20 +84,20 @@ struct FluidSystem<TypeTag, TTag::Injection2pNITypeTag>
  *
  * The domain is sized 60 m times 40 m.
  *
- * For the mass conservation equation neumann boundary conditions are used on
- * the top, on the bottom and on the right of the domain, while dirichlet conditions
+ * For the mass conservation equation Neumann boundary conditions are used on
+ * the top, on the bottom and on the right of the domain, while Dirichlet conditions
  * apply on the left boundary.
  *
  * Gas is injected at the right boundary from 7 m to 15 m at a rate of
- * 0.001 kg/(s m), the remaining neumann boundaries are no-flow
+ * 0.001 kg/(s m), the remaining Neumann boundaries are no-flow
  * boundaries.
  *
- * At the dirichlet boundaries a hydrostatic pressure and a gas saturation of zero a
+ * At the Dirichlet boundaries a hydrostatic pressure and a gas saturation of zero a
  *
  * This problem uses the \ref TwoPModel model.
  */
 template<class TypeTag>
-class InjectionProblem2PNI : public PorousMediumFlowProblem<TypeTag>
+class Injection2PNIProblem : public PorousMediumFlowProblem<TypeTag>
 {
     using ParentType = PorousMediumFlowProblem<TypeTag>;
     using GridView = GetPropType<TypeTag, Properties::GridView>;
@@ -115,7 +115,7 @@ class InjectionProblem2PNI : public PorousMediumFlowProblem<TypeTag>
     using GlobalPosition = typename Element::Geometry::GlobalCoordinate;
 
 public:
-    InjectionProblem2PNI(std::shared_ptr<const FVGridGeometry> fvGridGeometry)
+    Injection2PNIProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry)
     : ParentType(fvGridGeometry)
     {
         // initialize the tables of the fluid system
@@ -185,7 +185,7 @@ public:
     }
 
     /*!
-     * \brief Evaluate the boundary conditions for a neumann
+     * \brief Evaluate the boundary conditions for a Neumann
      *        boundary segment.
      *
      * \param globalPos The position of the integration point of the boundary segment.
diff --git a/exercises/solution/exercise-basic/exercise_basic_2pni_solution.input b/exercises/solution/exercise-basic/params.input
similarity index 100%
rename from exercises/solution/exercise-basic/exercise_basic_2pni_solution.input
rename to exercises/solution/exercise-basic/params.input
diff --git a/exercises/solution/exercise-basic/injection2pspatialparams.hh b/exercises/solution/exercise-basic/spatialparams.hh
similarity index 100%
rename from exercises/solution/exercise-basic/injection2pspatialparams.hh
rename to exercises/solution/exercise-basic/spatialparams.hh
diff --git a/exercises/solution/exercise-biomineralization/CMakeLists.txt b/exercises/solution/exercise-biomineralization/CMakeLists.txt
index 8b7419911798eba22bb4007de2de2116016ab1cf..035fe93ddb8db1c0e90b41afee4385ebead46b0c 100644
--- a/exercises/solution/exercise-biomineralization/CMakeLists.txt
+++ b/exercises/solution/exercise-biomineralization/CMakeLists.txt
@@ -1,10 +1,10 @@
 # executables for exercisebiomin
-dune_add_test(NAME exercisebiomin_solution
-              SOURCES exercisebiomin.cc
+dune_add_test(NAME exercise_biomin_solution
+              SOURCES main.cc
               CMD_ARGS -TimeLoop.TEnd 1e5)
 
 # add tutorial to the common target
-add_dependencies(test_exercises exercisebiomin_solution)
+add_dependencies(test_exercises exercise_biomin_solution)
 
 # add a symlink for each input file
 add_input_file_links()
diff --git a/exercises/solution/exercise-biomineralization/biominproblem.hh b/exercises/solution/exercise-biomineralization/biominproblem.hh
index 756b7537a8113f4ea2b741ce50d3c901234f5290..94857d1de1f70d639fb1fc1013550ffeddd00236 100644
--- a/exercises/solution/exercise-biomineralization/biominproblem.hh
+++ b/exercises/solution/exercise-biomineralization/biominproblem.hh
@@ -49,7 +49,7 @@ namespace Dumux {
 #include <dumux/material/components/co2tables.inc>
 
 template <class TypeTag>
-class ExerciseFourBioMinProblem;
+class BioMinProblem;
 
 namespace Properties {
 //! Create new type tag for the problem
@@ -61,7 +61,7 @@ struct ExerciseFourBioMinCCTpfa { using InheritsFrom = std::tuple<ExerciseFourBi
 
 //! Set the problem property
 template<class TypeTag>
-struct Problem<TypeTag, TTag::ExerciseFourBioMin> { using type = ExerciseFourBioMinProblem<TypeTag>; };
+struct Problem<TypeTag, TTag::ExerciseFourBioMin> { using type = BioMinProblem<TypeTag>; };
 
 //! Set grid and the grid creator to be used
 template<class TypeTag>
@@ -108,7 +108,7 @@ struct EnableGridFluxVariablesCache<TypeTag, TTag::ExerciseFourBioMin> { static
  * \brief Problem biomineralization (MICP) in an experimental setup.
  */
 template <class TypeTag>
-class ExerciseFourBioMinProblem : public PorousMediumFlowProblem<TypeTag>
+class BioMinProblem : public PorousMediumFlowProblem<TypeTag>
 {
     using ParentType = PorousMediumFlowProblem<TypeTag>;
 
@@ -169,7 +169,7 @@ class ExerciseFourBioMinProblem : public PorousMediumFlowProblem<TypeTag>
      * \param fvGridGeometry The finite volume grid geometry
      */
 public:
-    ExerciseFourBioMinProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry)
+    BioMinProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry)
     : ParentType(fvGridGeometry)
     {
         name_           = getParam<std::string>("Problem.Name");
diff --git a/exercises/solution/exercise-biomineralization/exercisebiomin.cc b/exercises/solution/exercise-biomineralization/main.cc
similarity index 100%
rename from exercises/solution/exercise-biomineralization/exercisebiomin.cc
rename to exercises/solution/exercise-biomineralization/main.cc
diff --git a/exercises/solution/exercise-biomineralization/exercisebiomin_solution.input b/exercises/solution/exercise-biomineralization/params.input
similarity index 100%
rename from exercises/solution/exercise-biomineralization/exercisebiomin_solution.input
rename to exercises/solution/exercise-biomineralization/params.input
diff --git a/exercises/solution/exercise-coupling-ff-pm/interface/CMakeLists.txt b/exercises/solution/exercise-coupling-ff-pm/interface/CMakeLists.txt
index b0eb17985b0e1205452ad63ea84e8f9bb28c00ba..c3f901d316264690a176eb0bc389ca480e0f4ffb 100644
--- a/exercises/solution/exercise-coupling-ff-pm/interface/CMakeLists.txt
+++ b/exercises/solution/exercise-coupling-ff-pm/interface/CMakeLists.txt
@@ -1,22 +1,22 @@
-dune_add_test(NAME orig_ex_interface_coupling_ff-pm
-              SOURCES ex_interface_coupling_ff-pm.cc
+dune_add_test(NAME exercise_interface_coupling_ff-pm_original
+              SOURCES main.cc
               COMPILE_DEFINITIONS EXNUMBER=0)
 
-dune_add_test(NAME sol_a_ex_interface_coupling_ff-pm
-              SOURCES ex_interface_coupling_ff-pm.cc
+dune_add_test(NAME exercise_interface_coupling_ff-pm_a_solution
+              SOURCES main.cc
               COMPILE_DEFINITIONS EXNUMBER=1)
 
-dune_add_test(NAME sol_b_ex_interface_coupling_ff-pm
-              SOURCES ex_interface_coupling_ff-pm.cc
+dune_add_test(NAME exercise_interface_coupling_ff-pm_b_solution
+              SOURCES main.cc
               COMPILE_DEFINITIONS EXNUMBER=2)
 
-dune_add_test(NAME sol_c_ex_interface_coupling_ff-pm
-              SOURCES ex_interface_coupling_ff-pm.cc
+dune_add_test(NAME exercise_interface_coupling_ff-pm_c_solution
+              SOURCES main.cc
               COMPILE_DEFINITIONS EXNUMBER=3)
 
 
 # add exercise to the common target
-add_dependencies(test_exercises sol_a_ex_interface_coupling_ff-pm sol_b_ex_interface_coupling_ff-pm sol_b_ex_interface_coupling_ff-pm)
+add_dependencies(test_exercises exercise_interface_coupling_ff-pm_a_solution exercise_interface_coupling_ff-pm_b_solution exercise_interface_coupling_ff-pm_c_solution)
 
 # add a symlink for each input file
 add_input_file_links()
diff --git a/exercises/solution/exercise-coupling-ff-pm/interface/ex_interface_ffproblem.hh b/exercises/solution/exercise-coupling-ff-pm/interface/freeflowsubproblem.hh
similarity index 97%
rename from exercises/solution/exercise-coupling-ff-pm/interface/ex_interface_ffproblem.hh
rename to exercises/solution/exercise-coupling-ff-pm/interface/freeflowsubproblem.hh
index e119638ba0bacd9b062d8ec0d790aec2cba74b4d..8145015444c8c547b0b081c3894c02a7ec8de1b8 100644
--- a/exercises/solution/exercise-coupling-ff-pm/interface/ex_interface_ffproblem.hh
+++ b/exercises/solution/exercise-coupling-ff-pm/interface/freeflowsubproblem.hh
@@ -26,7 +26,7 @@
 #include <dune/grid/yaspgrid.hh>
 
 #if EXNUMBER >= 3
-#include <dumux/io/grid/subgridmanager.hh>
+#include <dumux/io/grid/gridmanager_sub.hh>
 #endif
 
 #include <dumux/material/fluidsystems/1pliquid.hh>
@@ -39,7 +39,7 @@
 namespace Dumux
 {
 template <class TypeTag>
-class StokesSubProblem;
+class FreeFlowSubProblem;
 
 namespace Properties
 {
@@ -74,7 +74,7 @@ struct Grid<TypeTag, TTag::StokesOneP>
 
 // Set the problem property
 template<class TypeTag>
-struct Problem<TypeTag, TTag::StokesOneP> { using type = Dumux::StokesSubProblem<TypeTag> ; };
+struct Problem<TypeTag, TTag::StokesOneP> { using type = Dumux::FreeFlowSubProblem<TypeTag> ; };
 
 template<class TypeTag>
 struct EnableFVGridGeometryCache<TypeTag, TTag::StokesOneP> { static constexpr bool value = true; };
@@ -88,7 +88,7 @@ struct EnableGridVolumeVariablesCache<TypeTag, TTag::StokesOneP> { static conste
  * \brief The free flow sub problem
  */
 template <class TypeTag>
-class StokesSubProblem : public NavierStokesProblem<TypeTag>
+class FreeFlowSubProblem : public NavierStokesProblem<TypeTag>
 {
     using ParentType = NavierStokesProblem<TypeTag>;
 
@@ -113,7 +113,7 @@ class StokesSubProblem : public NavierStokesProblem<TypeTag>
     using CouplingManager = GetPropType<TypeTag, Properties::CouplingManager>;
 
 public:
-    StokesSubProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry, std::shared_ptr<CouplingManager> couplingManager)
+    FreeFlowSubProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry, std::shared_ptr<CouplingManager> couplingManager)
     : ParentType(fvGridGeometry, "Stokes"), eps_(1e-6), couplingManager_(couplingManager)
     {
         deltaP_ = getParamFromGroup<Scalar>(this->paramGroup(), "Problem.PressureDifference");
diff --git a/exercises/solution/exercise-coupling-ff-pm/interface/ex_interface_coupling_ff-pm.cc b/exercises/solution/exercise-coupling-ff-pm/interface/main.cc
similarity index 95%
rename from exercises/solution/exercise-coupling-ff-pm/interface/ex_interface_coupling_ff-pm.cc
rename to exercises/solution/exercise-coupling-ff-pm/interface/main.cc
index 6f5b2e00e32cb42b6d18ba586645501de9164d7c..d23c04be1ee3b2cad3fb7defba01ac31e57d2040 100644
--- a/exercises/solution/exercise-coupling-ff-pm/interface/ex_interface_coupling_ff-pm.cc
+++ b/exercises/solution/exercise-coupling-ff-pm/interface/main.cc
@@ -47,8 +47,8 @@
 
 #include <dumux/multidomain/boundary/stokesdarcy/couplingmanager.hh>
 
-#include "ex_interface_pmproblem.hh"
-#include "ex_interface_ffproblem.hh"
+#include "porousmediumsubproblem.hh"
+#include "freeflowsubproblem.hh"
 
 namespace Dumux {
 namespace Properties {
@@ -133,13 +133,18 @@ int main(int argc, char** argv) try
         return element.geometry().center()[1] < interface;
     };
 
-    // subgrid Pointer
-    auto stokesGridPtr = SubgridManager<HostGrid>::makeGrid(hostGrid, elementSelectorStokes, "Stokes");
-    auto darcyGridPtr = SubgridManager<HostGrid>::makeGrid(hostGrid, elementSelectorDarcy, "Darcy");
+    using SubGrid = Dune::SubGrid<dim, HostGrid>;
+
+    Dumux::GridManager<SubGrid> subGridManagerStokes;
+    Dumux::GridManager<SubGrid> subGridManagerDarcy;
+
+    // initialize subgrids
+    subGridManagerStokes.init(hostGrid, elementSelectorStokes, "Stokes");
+    subGridManagerDarcy.init(hostGrid, elementSelectorDarcy, "Darcy");
 
     // we compute on the leaf grid view
-    const auto& darcyGridView = darcyGridPtr->leafGridView();
-    const auto& stokesGridView = stokesGridPtr->leafGridView();
+    const auto& darcyGridView = subGridManagerDarcy.grid().leafGridView();
+    const auto& stokesGridView = subGridManagerStokes.grid().leafGridView();
 
 #endif
 
diff --git a/exercises/solution/exercise-coupling-ff-pm/interface/ex_interface_pmproblem.hh b/exercises/solution/exercise-coupling-ff-pm/interface/porousmediumsubproblem.hh
similarity index 93%
rename from exercises/solution/exercise-coupling-ff-pm/interface/ex_interface_pmproblem.hh
rename to exercises/solution/exercise-coupling-ff-pm/interface/porousmediumsubproblem.hh
index aa1160b9acd0bb3d30b82b2a0e0b99b23525b14d..c472d68cea7340e450770a3d38f97f87e68cd2f0 100644
--- a/exercises/solution/exercise-coupling-ff-pm/interface/ex_interface_pmproblem.hh
+++ b/exercises/solution/exercise-coupling-ff-pm/interface/porousmediumsubproblem.hh
@@ -27,7 +27,7 @@
 #include <dune/grid/yaspgrid.hh>
 
 #if EXNUMBER >= 3
-#include <dumux/io/grid/subgridmanager.hh>
+#include <dumux/io/grid/gridmanager_sub.hh>
 #endif
 
 #include <dumux/discretization/cctpfa.hh>
@@ -43,7 +43,7 @@
 namespace Dumux
 {
 template <class TypeTag>
-class DarcySubProblem;
+class PorousMediumSubProblem;
 
 namespace Properties
 {
@@ -54,7 +54,7 @@ struct DarcyOneP { using InheritsFrom = std::tuple<OneP, CCTpfaModel>; };
 
 // Set the problem property
 template<class TypeTag>
-struct Problem<TypeTag, TTag::DarcyOneP> { using type = Dumux::DarcySubProblem<TypeTag>; };
+struct Problem<TypeTag, TTag::DarcyOneP> { using type = Dumux::PorousMediumSubProblem<TypeTag>; };
 
 // the fluid system
 template<class TypeTag>
@@ -90,7 +90,7 @@ struct SpatialParams<TypeTag, TTag::DarcyOneP> {
  * \brief The porous medium flow sub problem
  */
 template <class TypeTag>
-class DarcySubProblem : public PorousMediumFlowProblem<TypeTag>
+class PorousMediumSubProblem : public PorousMediumFlowProblem<TypeTag>
 {
     using ParentType = PorousMediumFlowProblem<TypeTag>;
     using GridView = GetPropType<TypeTag, Properties::GridView>;
@@ -103,6 +103,8 @@ class DarcySubProblem : public PorousMediumFlowProblem<TypeTag>
     using SubControlVolume = typename FVElementGeometry::SubControlVolume;
     using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace;
     using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>;
+    using GridVariables = GetPropType<TypeTag, Properties::GridVariables>;
+    using ElementFluxVariablesCache = typename GridVariables::GridFluxVariablesCache::LocalView;
 
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
 
@@ -112,7 +114,7 @@ class DarcySubProblem : public PorousMediumFlowProblem<TypeTag>
     using CouplingManager = GetPropType<TypeTag, Properties::CouplingManager>;
 
 public:
-    DarcySubProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry,
+    PorousMediumSubProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry,
                    std::shared_ptr<CouplingManager> couplingManager)
     : ParentType(fvGridGeometry, "Darcy"), eps_(1e-7), couplingManager_(couplingManager)
     {}
@@ -188,6 +190,7 @@ public:
     NumEqVector neumann(const Element& element,
                         const FVElementGeometry& fvGeometry,
                         const ElementVolumeVariables& elemVolVars,
+                        const ElementFluxVariablesCache& elemFluxVarsCache,
                         const SubControlVolumeFace& scvf) const
     {
         NumEqVector values(0.0);
diff --git a/exercises/solution/exercise-coupling-ff-pm/models/CMakeLists.txt b/exercises/solution/exercise-coupling-ff-pm/models/CMakeLists.txt
index dc982cb0b199273843c4034d14509aa2e8ac9f61..afc7c90dcbc55524a5a1d8b83a262b622aa85eea 100644
--- a/exercises/solution/exercise-coupling-ff-pm/models/CMakeLists.txt
+++ b/exercises/solution/exercise-coupling-ff-pm/models/CMakeLists.txt
@@ -1,21 +1,21 @@
-dune_add_test(NAME orig_ex_models_coupling_ff-pm
-              SOURCES ex_models_coupling_ff-pm.cc
+dune_add_test(NAME exercise_models_coupling_ff-pm_original
+              SOURCES main.cc
               COMPILE_DEFINITIONS EXNUMBER=0)
 
-dune_add_test(NAME sol_a_ex_models_coupling_ff-pm
-              SOURCES ex_models_coupling_ff-pm.cc
+dune_add_test(NAME exercise_models_coupling_ff-pm_a_solution
+              SOURCES main.cc
               COMPILE_DEFINITIONS EXNUMBER=1)
 
-dune_add_test(NAME sol_b_ex_models_coupling_ff-pm
-              SOURCES ex_models_coupling_ff-pm.cc
+dune_add_test(NAME exercise_models_coupling_ff-pm_b_solution
+              SOURCES main.cc
               COMPILE_DEFINITIONS EXNUMBER=2)
 
-dune_add_test(NAME sol_c_ex_models_coupling_ff-pm
-              SOURCES ex_models_coupling_ff-pm.cc
+dune_add_test(NAME exercise_models_coupling_ff-pm_c_solution
+              SOURCES main.cc
               COMPILE_DEFINITIONS EXNUMBER=3)
 
 # add exercise to the common target
-add_dependencies(test_exercises sol_a_ex_models_coupling_ff-pm sol_b_ex_models_coupling_ff-pm sol_b_ex_models_coupling_ff-pm)
+add_dependencies(test_exercises exercise_models_coupling_ff-pm_a_solution exercise_models_coupling_ff-pm_b_solution exercise_models_coupling_ff-pm_c_solution)
 
 # add a symlink for each input file
 add_input_file_links()
diff --git a/exercises/solution/exercise-coupling-ff-pm/models/ex_models_ffproblem.hh b/exercises/solution/exercise-coupling-ff-pm/models/freeflowsubproblem.hh
similarity index 97%
rename from exercises/solution/exercise-coupling-ff-pm/models/ex_models_ffproblem.hh
rename to exercises/solution/exercise-coupling-ff-pm/models/freeflowsubproblem.hh
index bc978d9138447f338094d395c2ef11997a5cd35c..8b421dd42a39a5df9f284b74461cffeaca3a8b3f 100644
--- a/exercises/solution/exercise-coupling-ff-pm/models/ex_models_ffproblem.hh
+++ b/exercises/solution/exercise-coupling-ff-pm/models/freeflowsubproblem.hh
@@ -36,7 +36,7 @@
 namespace Dumux
 {
 template <class TypeTag>
-class StokesSubProblem;
+class FreeFlowSubProblem;
 
 namespace Properties
 {
@@ -67,7 +67,7 @@ struct UseMoles<TypeTag, TTag::StokesNC> { static constexpr bool value = true; }
 
 // Set the problem property
 template<class TypeTag>
-struct Problem<TypeTag, TTag::StokesNC> { using type = Dumux::StokesSubProblem<TypeTag> ; };
+struct Problem<TypeTag, TTag::StokesNC> { using type = Dumux::FreeFlowSubProblem<TypeTag> ; };
 
 template<class TypeTag>
 struct EnableFVGridGeometryCache<TypeTag, TTag::StokesNC> { static constexpr bool value = true; };
@@ -84,7 +84,7 @@ struct EnableGridVolumeVariablesCache<TypeTag, TTag::StokesNC> { static constexp
  * Horizontal flow from left to right with a parabolic velocity profile.
  */
 template <class TypeTag>
-class StokesSubProblem : public NavierStokesProblem<TypeTag>
+class FreeFlowSubProblem : public NavierStokesProblem<TypeTag>
 {
     using ParentType = NavierStokesProblem<TypeTag>;
 
@@ -116,7 +116,7 @@ class StokesSubProblem : public NavierStokesProblem<TypeTag>
     static constexpr auto transportCompIdx = 1;
 
 public:
-    StokesSubProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry, std::shared_ptr<CouplingManager> couplingManager)
+    FreeFlowSubProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry, std::shared_ptr<CouplingManager> couplingManager)
     : ParentType(fvGridGeometry, "Stokes"), eps_(1e-6), couplingManager_(couplingManager)
     {
         velocity_ = getParamFromGroup<Scalar>(this->paramGroup(), "Problem.Velocity");
diff --git a/exercises/solution/exercise-coupling-ff-pm/models/ex_models_coupling_ff-pm.cc b/exercises/solution/exercise-coupling-ff-pm/models/main.cc
similarity index 99%
rename from exercises/solution/exercise-coupling-ff-pm/models/ex_models_coupling_ff-pm.cc
rename to exercises/solution/exercise-coupling-ff-pm/models/main.cc
index 11b707690b99eaba53f5755f8e47009cc990efd3..e08716c0bf97c35e34680b204b6042f7898e33b4 100644
--- a/exercises/solution/exercise-coupling-ff-pm/models/ex_models_coupling_ff-pm.cc
+++ b/exercises/solution/exercise-coupling-ff-pm/models/main.cc
@@ -49,8 +49,8 @@
 
 #include <dumux/multidomain/boundary/stokesdarcy/couplingmanager.hh>
 
-#include "ex_models_pmproblem.hh"
-#include "ex_models_ffproblem.hh"
+#include "porousmediumsubproblem.hh"
+#include "freeflowsubproblem.hh"
 
 namespace Dumux {
 namespace Properties {
diff --git a/exercises/solution/exercise-coupling-ff-pm/models/ex_models_pmproblem.hh b/exercises/solution/exercise-coupling-ff-pm/models/porousmediumsubproblem.hh
similarity index 97%
rename from exercises/solution/exercise-coupling-ff-pm/models/ex_models_pmproblem.hh
rename to exercises/solution/exercise-coupling-ff-pm/models/porousmediumsubproblem.hh
index 73771923b2a2c838df5399b70508df4d0ad5ffb6..c5717968952980abfca49a520bbffd4895bbbb00 100644
--- a/exercises/solution/exercise-coupling-ff-pm/models/ex_models_pmproblem.hh
+++ b/exercises/solution/exercise-coupling-ff-pm/models/porousmediumsubproblem.hh
@@ -45,7 +45,7 @@
 namespace Dumux
 {
 template <class TypeTag>
-class DarcySubProblem;
+class PorousMediumSubProblem;
 
 namespace Properties
 {
@@ -60,7 +60,7 @@ struct DarcyOnePNC { using InheritsFrom = std::tuple<OnePNC, CCTpfaModel>; };
 
 // Set the problem property
 template<class TypeTag>
-struct Problem<TypeTag, TTag::DarcyOnePNC> { using type = Dumux::DarcySubProblem<TypeTag>; };
+struct Problem<TypeTag, TTag::DarcyOnePNC> { using type = Dumux::PorousMediumSubProblem<TypeTag>; };
 
 // The fluid system
 template<class TypeTag>
@@ -113,7 +113,7 @@ struct SpatialParams<TypeTag, TTag::DarcyOnePNC> {
 } // end namespace Properties
 
 template <class TypeTag>
-class DarcySubProblem : public PorousMediumFlowProblem<TypeTag>
+class PorousMediumSubProblem : public PorousMediumFlowProblem<TypeTag>
 {
     using ParentType = PorousMediumFlowProblem<TypeTag>;
     using GridView = GetPropType<TypeTag, Properties::GridView>;
@@ -126,6 +126,8 @@ class DarcySubProblem : public PorousMediumFlowProblem<TypeTag>
     using SubControlVolume = typename FVElementGeometry::SubControlVolume;
     using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace;
     using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>;
+    using GridVariables = GetPropType<TypeTag, Properties::GridVariables>;
+    using ElementFluxVariablesCache = typename GridVariables::GridFluxVariablesCache::LocalView;
 
     // copy some indices for convenience
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
@@ -155,7 +157,7 @@ class DarcySubProblem : public PorousMediumFlowProblem<TypeTag>
     using TimeLoopPtr = std::shared_ptr<TimeLoop<Scalar>>;
 
 public:
-    DarcySubProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry,
+    PorousMediumSubProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry,
                    std::shared_ptr<CouplingManager> couplingManager)
     : ParentType(fvGridGeometry, "Darcy"), eps_(1e-7), couplingManager_(couplingManager)
     {
@@ -364,6 +366,7 @@ public:
     NumEqVector neumann(const Element& element,
                         const FVElementGeometry& fvGeometry,
                         const ElementVolumeVariables& elemVolVars,
+                        const ElementFluxVariablesCache& elemFluxVarsCache,
                         const SubControlVolumeFace& scvf) const
     {
         NumEqVector values(0.0);
diff --git a/exercises/solution/exercise-coupling-ff-pm/turbulence/CMakeLists.txt b/exercises/solution/exercise-coupling-ff-pm/turbulence/CMakeLists.txt
index f39c13f2c98fa71c041d219b0c35b7baebb5ef05..02a2ede13283262dbb271582ee0d78e06c385d5c 100644
--- a/exercises/solution/exercise-coupling-ff-pm/turbulence/CMakeLists.txt
+++ b/exercises/solution/exercise-coupling-ff-pm/turbulence/CMakeLists.txt
@@ -1,17 +1,17 @@
-dune_add_test(NAME orig_turbulence_coupling_ff-pm
-              SOURCES ex_turbulence_coupling_ff-pm.cc
+dune_add_test(NAME exercise_turbulence_coupling_ff-pm_original
+              SOURCES main.cc
               COMPILE_DEFINITIONS EXNUMBER=0)
 
-dune_add_test(NAME sol_a_ex_turbulence_coupling_ff-pm
-              SOURCES ex_turbulence_coupling_ff-pm.cc
+dune_add_test(NAME exercise_turbulence_coupling_ff-pm_a_solution
+              SOURCES main.cc
               COMPILE_DEFINITIONS EXNUMBER=1)
 
-dune_add_test(NAME sol_b_ex_turbulence_coupling_ff-pm
-              SOURCES ex_turbulence_coupling_ff-pm.cc
+dune_add_test(NAME exercise_turbulence_coupling_ff-pm_b_solution
+              SOURCES main.cc
               COMPILE_DEFINITIONS EXNUMBER=2)
 
 # add exercise to the common target
-add_dependencies(test_exercises sol_a_ex_turbulence_coupling_ff-pm sol_b_ex_turbulence_coupling_ff-pm sol_b_ex_turbulence_coupling_ff-pm)
+add_dependencies(test_exercises exercise_turbulence_coupling_ff-pm_a_solution exercise_turbulence_coupling_ff-pm_b_solution)
 
 # add a symlink for each input file
 add_input_file_links()
diff --git a/exercises/solution/exercise-coupling-ff-pm/turbulence/ex_turbulence_ffproblem.hh b/exercises/solution/exercise-coupling-ff-pm/turbulence/freeflowsubproblem.hh
similarity index 100%
rename from exercises/solution/exercise-coupling-ff-pm/turbulence/ex_turbulence_ffproblem.hh
rename to exercises/solution/exercise-coupling-ff-pm/turbulence/freeflowsubproblem.hh
diff --git a/exercises/solution/exercise-coupling-ff-pm/turbulence/ex_turbulence_coupling_ff-pm.cc b/exercises/solution/exercise-coupling-ff-pm/turbulence/main.cc
similarity index 99%
rename from exercises/solution/exercise-coupling-ff-pm/turbulence/ex_turbulence_coupling_ff-pm.cc
rename to exercises/solution/exercise-coupling-ff-pm/turbulence/main.cc
index 995a7604f615bf11d17059651917d21c898026ea..a8e1dd2d3d9c52c6c6efbeed90b5973d1b97efc3 100644
--- a/exercises/solution/exercise-coupling-ff-pm/turbulence/ex_turbulence_coupling_ff-pm.cc
+++ b/exercises/solution/exercise-coupling-ff-pm/turbulence/main.cc
@@ -49,8 +49,8 @@
 
 #include <dumux/multidomain/boundary/stokesdarcy/couplingmanager.hh>
 
-#include "ex_turbulence_pmproblem.hh"
-#include "ex_turbulence_ffproblem.hh"
+#include "porousmediumsubproblem.hh"
+#include "freeflowsubproblem.hh"
 
 namespace Dumux {
 namespace Properties {
diff --git a/exercises/solution/exercise-coupling-ff-pm/turbulence/ex_turbulence_pmproblem.hh b/exercises/solution/exercise-coupling-ff-pm/turbulence/porousmediumsubproblem.hh
similarity index 95%
rename from exercises/solution/exercise-coupling-ff-pm/turbulence/ex_turbulence_pmproblem.hh
rename to exercises/solution/exercise-coupling-ff-pm/turbulence/porousmediumsubproblem.hh
index 38ddb50090d38f3f1fe9d10df273b74854aa2650..a4adce2d6ab66394a29d02cfa2974390dab53656 100644
--- a/exercises/solution/exercise-coupling-ff-pm/turbulence/ex_turbulence_pmproblem.hh
+++ b/exercises/solution/exercise-coupling-ff-pm/turbulence/porousmediumsubproblem.hh
@@ -38,7 +38,7 @@
 namespace Dumux
 {
 template <class TypeTag>
-class DarcySubProblem;
+class PorousMediumSubProblem;
 
 namespace Properties
 {
@@ -49,7 +49,7 @@ struct DarcyTwoPTwoCNI { using InheritsFrom = std::tuple<TwoPTwoCNI, CCTpfaModel
 
 // Set the problem property
 template<class TypeTag>
-struct Problem<TypeTag, TTag::DarcyTwoPTwoCNI> { using type = Dumux::DarcySubProblem<TypeTag>; };
+struct Problem<TypeTag, TTag::DarcyTwoPTwoCNI> { using type = Dumux::PorousMediumSubProblem<TypeTag>; };
 
 // the fluid system
 template<class TypeTag>
@@ -82,7 +82,7 @@ struct SpatialParams<TypeTag, TTag::DarcyTwoPTwoCNI> {
  * \brief The porous medium sub problem
  */
 template <class TypeTag>
-class DarcySubProblem : public PorousMediumFlowProblem<TypeTag>
+class PorousMediumSubProblem : public PorousMediumFlowProblem<TypeTag>
 {
     using ParentType = PorousMediumFlowProblem<TypeTag>;
     using GridView = GetPropType<TypeTag, Properties::GridView>;
@@ -96,6 +96,8 @@ class DarcySubProblem : public PorousMediumFlowProblem<TypeTag>
     using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace;
     using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>;
     using ElementVolumeVariables = typename GetPropType<TypeTag, Properties::GridVolumeVariables>::LocalView;
+    using GridVariables = GetPropType<TypeTag, Properties::GridVariables>;
+    using ElementFluxVariablesCache = typename GridVariables::GridFluxVariablesCache::LocalView;
 
     using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
 
@@ -119,7 +121,7 @@ class DarcySubProblem : public PorousMediumFlowProblem<TypeTag>
     using DiffusionCoefficientAveragingType = typename StokesDarcyCouplingOptions::DiffusionCoefficientAveragingType;
 
 public:
-    DarcySubProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry,
+    PorousMediumSubProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry,
                    std::shared_ptr<CouplingManager> couplingManager)
     : ParentType(fvGridGeometry, "Darcy"), eps_(1e-7), couplingManager_(couplingManager)
     {
@@ -227,7 +229,8 @@ public:
     NumEqVector neumann(const Element& element,
                         const FVElementGeometry& fvGeometry,
                         const ElementVolumeVariables& elemVolVars,
-                        const SubControlVolumeFace& scvf) const
+                        const ElementFluxVariablesCache& elemFluxVarsCache,
+                        const SubControlVolumeFace& scvf)  const
     {
         NumEqVector values(0.0);
 
diff --git a/exercises/solution/exercise-fluidsystem/CMakeLists.txt b/exercises/solution/exercise-fluidsystem/CMakeLists.txt
index 4861d4876bdcf8c97d85923cb0e93add2b171d7b..c144abc7dece88ac6fa74dddbac1ff381ea0ab46 100644
--- a/exercises/solution/exercise-fluidsystem/CMakeLists.txt
+++ b/exercises/solution/exercise-fluidsystem/CMakeLists.txt
@@ -1,16 +1,18 @@
 # executables for exercise part a & b
 #part a: 2pproblem
-dune_add_test(NAME exercise-fluidsystem_a_solution
-              SOURCES exercise-fluidsystem.cc
+dune_add_test(NAME exercise_fluidsystem_a_solution
+              SOURCES main.cc
+              CMD_ARGS aparams.input
               COMPILE_DEFINITIONS TYPETAG=ExerciseFluidsystemTwoP)
 
 #part b: 2p2cproblem
-dune_add_test(NAME exercise-fluidsystem_b_solution
-              SOURCES exercise-fluidsystem.cc
+dune_add_test(NAME exercise_fluidsystem_b_solution
+              SOURCES main.cc
+              CMD_ARGS bparams.input
               COMPILE_DEFINITIONS TYPETAG=ExerciseFluidsystemTwoPTwoC)
 
 # add exercises to the common target
-add_dependencies(test_exercises exercise-fluidsystem_a exercise-fluidsystem_b)
+add_dependencies(test_exercises exercise_fluidsystem_a_solution exercise_fluidsystem_b_solution)
 
 # add a symlink for each input file
 add_input_file_links()
diff --git a/exercises/solution/exercise-fluidsystem/exercise-fluidsystem_a_solution.input b/exercises/solution/exercise-fluidsystem/aparams.input
similarity index 100%
rename from exercises/solution/exercise-fluidsystem/exercise-fluidsystem_a_solution.input
rename to exercises/solution/exercise-fluidsystem/aparams.input
diff --git a/exercises/solution/exercise-fluidsystem/exercise-fluidsystem_b_solution.input b/exercises/solution/exercise-fluidsystem/bparams.input
similarity index 100%
rename from exercises/solution/exercise-fluidsystem/exercise-fluidsystem_b_solution.input
rename to exercises/solution/exercise-fluidsystem/bparams.input
diff --git a/exercises/solution/exercise-fluidsystem/exercise-fluidsystem.cc b/exercises/solution/exercise-fluidsystem/main.cc
similarity index 100%
rename from exercises/solution/exercise-fluidsystem/exercise-fluidsystem.cc
rename to exercises/solution/exercise-fluidsystem/main.cc
diff --git a/exercises/solution/exercise-fractures/CMakeLists.txt b/exercises/solution/exercise-fractures/CMakeLists.txt
index 62a08e093596db4b8ae454210b99af1409fa2cfc..264303c4cc7a73cd707def07572e9a2e7a8a6540 100644
--- a/exercises/solution/exercise-fractures/CMakeLists.txt
+++ b/exercises/solution/exercise-fractures/CMakeLists.txt
@@ -1,22 +1,22 @@
 # executable for the exercise
-add_executable(exercise_fractures_solution EXCLUDE_FROM_ALL exercise_fractures.cc)
+add_executable(exercisefractures_solution EXCLUDE_FROM_ALL main.cc)
 
-dune_add_test(NAME exercise_fractures_solution_a
+dune_add_test(NAME exercisefractures_solution_a
               CMAKE_GUARD "( dune-foamgrid_FOUND AND dune-alugrid_FOUND )"
-              TARGET exercise_fractures_solution
-              COMMAND ./exercise_fractures_solution
+              TARGET exercisefractures_solution
+              COMMAND ./exercisefractures_solution
               CMD_ARGS exercise_fractures_solution_a.input)
 
-dune_add_test(NAME exercise_fractures_solution_b
+dune_add_test(NAME exercisefractures_solution_b
               CMAKE_GUARD "( dune-foamgrid_FOUND AND dune-alugrid_FOUND )"
-              TARGET exercise_fractures_solution
-              COMMAND ./exercise_fractures_solution
+              TARGET exercisefractures_solution
+              COMMAND ./exercisefractures_solution
               CMD_ARGS exercise_fractures_solution_b.input)
 
-dune_add_test(NAME exercise_fractures_solution_c
+dune_add_test(NAME exercisefractures_solution_c
               CMAKE_GUARD "( dune-foamgrid_FOUND AND dune-alugrid_FOUND )"
-              TARGET exercise_fractures_solution
-              COMMAND ./exercise_fractures_solution
+              TARGET exercisefractures_solution
+              COMMAND ./exercisefractures_solution
               CMD_ARGS exercise_fractures_solution_c.input)
 
 # add a symlink for each input file
@@ -26,9 +26,9 @@ dune_symlink_to_source_files(FILES grids)
 
 #install sources
 install(FILES
-exercise_fractures.cc
+main.cc
 matrixproblem.hh
 fractureproblem.hh
 matrixspatialparams.hh
 fracturespatialparams.hh
-DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/exercises/exercise-fractures)
+DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/exercises/solution/exercise-fractures)
diff --git a/exercises/solution/exercise-fractures/exercise_fractures.cc b/exercises/solution/exercise-fractures/main.cc
similarity index 100%
rename from exercises/solution/exercise-fractures/exercise_fractures.cc
rename to exercises/solution/exercise-fractures/main.cc
diff --git a/exercises/solution/exercise-fractures/exercise_fractures.input b/exercises/solution/exercise-fractures/params.input
similarity index 100%
rename from exercises/solution/exercise-fractures/exercise_fractures.input
rename to exercises/solution/exercise-fractures/params.input
diff --git a/exercises/solution/exercise-grids/CMakeLists.txt b/exercises/solution/exercise-grids/CMakeLists.txt
index ddbf143bfa36a6a462fae89d40f62ecdfcce7ac7..4598aa8ef7595048f272470fcf462160bcc2eef6 100644
--- a/exercises/solution/exercise-grids/CMakeLists.txt
+++ b/exercises/solution/exercise-grids/CMakeLists.txt
@@ -1,6 +1,6 @@
 # the grid exercise simulation program
 dune_add_test(NAME exercise_grids_solution
-              SOURCES exercise_grids_solution.cc)
+              SOURCES main.cc)
 
 # add tutorial to the common target
 add_dependencies(test_exercises exercise_grids_solution)
diff --git a/exercises/solution/exercise-grids/exercise_grids_solution.cc b/exercises/solution/exercise-grids/main.cc
similarity index 99%
rename from exercises/solution/exercise-grids/exercise_grids_solution.cc
rename to exercises/solution/exercise-grids/main.cc
index e69194dabf509deffa661997a8af38d0f055b310..ea52463b1f80bacc1506b8adef3511bc124145fd 100644
--- a/exercises/solution/exercise-grids/exercise_grids_solution.cc
+++ b/exercises/solution/exercise-grids/main.cc
@@ -47,7 +47,7 @@
 #include <dumux/io/grid/gridmanager.hh>
 
 // The problem file, where setup-specific boundary and initial conditions are defined.
-#include "injection2pproblem.hh"
+#include "problem.hh"
 
 ////////////////////////
 // the main function
diff --git a/exercises/solution/exercise-grids/exercise_grids_solution.input b/exercises/solution/exercise-grids/params.input
similarity index 100%
rename from exercises/solution/exercise-grids/exercise_grids_solution.input
rename to exercises/solution/exercise-grids/params.input
diff --git a/exercises/solution/exercise-grids/injection2pproblem.hh b/exercises/solution/exercise-grids/problem.hh
similarity index 97%
rename from exercises/solution/exercise-grids/injection2pproblem.hh
rename to exercises/solution/exercise-grids/problem.hh
index b51f4f8c88dd9453278c01878fedd1aa3da3bcba..3b4d250b3cac9829ef8cc32d1eec95b7374a87c0 100644
--- a/exercises/solution/exercise-grids/injection2pproblem.hh
+++ b/exercises/solution/exercise-grids/problem.hh
@@ -32,7 +32,7 @@
 #include <dumux/porousmediumflow/problem.hh>
 #include <dumux/material/fluidsystems/h2on2.hh>
 
-#include "injection2pspatialparams.hh"
+#include "spatialparams.hh"
 
 namespace Dumux {
 
@@ -92,15 +92,15 @@ struct FluidSystem<TypeTag, TTag::Injection2p> { using type = FluidSystems::H2ON
  *
  * The domain is sized 60 m times 40 m.
  *
- * For the mass conservation equation neumann boundary conditions are used on
- * the top, on the bottom and on the right of the domain, while dirichlet conditions
+ * For the mass conservation equation Neumann boundary conditions are used on
+ * the top, on the bottom and on the right of the domain, while Dirichlet conditions
  * apply on the left boundary.
  *
  * Gas is injected at the right boundary from 7 m to 15 m at a rate of
- * 0.001 kg/(s m), the remaining neumann boundaries are no-flow
+ * 0.001 kg/(s m), the remaining Neumann boundaries are no-flow
  * boundaries.
  *
- * At the dirichlet boundaries a hydrostatic pressure and a gas saturation of zero a
+ * At the Dirichlet boundaries a hydrostatic pressure and a gas saturation of zero a
  *
  * This problem uses the \ref TwoPModel model.
  */
@@ -203,7 +203,7 @@ public:
     }
 
     /*!
-     * \brief Evaluate the boundary conditions for a neumann
+     * \brief Evaluate the boundary conditions for a Neumann
      *        boundary segment.
      *
      * \param globalPos The position of the integration point of the boundary segment.
diff --git a/exercises/solution/exercise-grids/injection2pspatialparams.hh b/exercises/solution/exercise-grids/spatialparams.hh
similarity index 100%
rename from exercises/solution/exercise-grids/injection2pspatialparams.hh
rename to exercises/solution/exercise-grids/spatialparams.hh
diff --git a/exercises/solution/exercise-mainfile/CMakeLists.txt b/exercises/solution/exercise-mainfile/CMakeLists.txt
index 894df90df30e86581f0100e8a92802801ef00946..1a48732f620364735f0177ede2eab0d50058ca03 100644
--- a/exercises/solution/exercise-mainfile/CMakeLists.txt
+++ b/exercises/solution/exercise-mainfile/CMakeLists.txt
@@ -1,12 +1,12 @@
 # the one-phase simulation program
-dune_add_test(NAME exercise_1p_a_solution
-              SOURCES exercise_1p_a_solution.cc
+dune_add_test(NAME exercise_mainfile_a_solution
+              SOURCES exercise1pa_solution_main.cc
               COMPILE_DEFINITIONS TYPETAG=OnePIncompressible)
 
 # here, add the two-phase non-isothermal simulation program
 
 # add tutorial to the common target
-add_dependencies(test_exercises exercise_1p_a_solution)
+add_dependencies(test_exercises exercise_mainfile_a_solution)
 
 # add a symlink for each input file
 add_input_file_links()
diff --git a/exercises/solution/exercise-mainfile/exercise_1p_a_solution.cc b/exercises/solution/exercise-mainfile/exercise1pa_solution_main.cc
similarity index 100%
rename from exercises/solution/exercise-mainfile/exercise_1p_a_solution.cc
rename to exercises/solution/exercise-mainfile/exercise1pa_solution_main.cc
diff --git a/exercises/solution/exercise-mainfile/exercise_1p_a_solution.input b/exercises/solution/exercise-mainfile/exercise_mainfile_a_solution.input
similarity index 100%
rename from exercises/solution/exercise-mainfile/exercise_1p_a_solution.input
rename to exercises/solution/exercise-mainfile/exercise_mainfile_a_solution.input
diff --git a/exercises/solution/exercise-properties/CMakeLists.txt b/exercises/solution/exercise-properties/CMakeLists.txt
index 5ce66c9d255cdc7c173322f72708e9f4a5c9eb02..d2e0d4b22ca947b8a925713dc93b5118578aede1 100644
--- a/exercises/solution/exercise-properties/CMakeLists.txt
+++ b/exercises/solution/exercise-properties/CMakeLists.txt
@@ -1,6 +1,6 @@
 # the solution to the properties exercise
 dune_add_test(NAME exercise_properties_solution
-              SOURCES exercise_properties_solution.cc)
+              SOURCES main.cc)
 
 # add tutorial to the common target
 add_dependencies(test_exercises exercise_properties_solution)
diff --git a/exercises/solution/exercise-properties/exercise_properties_solution.cc b/exercises/solution/exercise-properties/main.cc
similarity index 100%
rename from exercises/solution/exercise-properties/exercise_properties_solution.cc
rename to exercises/solution/exercise-properties/main.cc
diff --git a/exercises/solution/exercise-properties/exercise_properties_solution.input b/exercises/solution/exercise-properties/params.input
similarity index 100%
rename from exercises/solution/exercise-properties/exercise_properties_solution.input
rename to exercises/solution/exercise-properties/params.input
diff --git a/exercises/solution/exercise-runtimeparams/CMakeLists.txt b/exercises/solution/exercise-runtimeparams/CMakeLists.txt
index 50048b9b5e25bcf6c565e8815986dee1675d87e5..01b5bf7bdf0e5ff0f57e1a2eedbf041175ce1fe4 100644
--- a/exercises/solution/exercise-runtimeparams/CMakeLists.txt
+++ b/exercises/solution/exercise-runtimeparams/CMakeLists.txt
@@ -1,6 +1,6 @@
 # the runtime parameter exercise simulation program
 dune_add_test(NAME exercise_runtimeparams_solution
-              SOURCES exercise_runtimeparams_solution.cc)
+              SOURCES main.cc)
 
 # add tutorial to the common target
 add_dependencies(test_exercises exercise_runtimeparams_solution)
diff --git a/exercises/solution/exercise-runtimeparams/exercise_runtimeparams_solution.cc b/exercises/solution/exercise-runtimeparams/main.cc
similarity index 99%
rename from exercises/solution/exercise-runtimeparams/exercise_runtimeparams_solution.cc
rename to exercises/solution/exercise-runtimeparams/main.cc
index 90ccf53e461b6685d3b51ebd278058fab1054032..e4221b46173dde8e7209826fe8dc0cd30600e891 100644
--- a/exercises/solution/exercise-runtimeparams/exercise_runtimeparams_solution.cc
+++ b/exercises/solution/exercise-runtimeparams/main.cc
@@ -47,7 +47,7 @@
 #include <dumux/io/grid/gridmanager.hh>
 
 // The problem file, where setup-specific boundary and initial conditions are defined.
-#include "injection2pproblem.hh"
+#include "problem.hh"
 
 ////////////////////////
 // the main function
diff --git a/exercises/solution/exercise-runtimeparams/exercise_runtimeparams_solution.input b/exercises/solution/exercise-runtimeparams/params.input
similarity index 100%
rename from exercises/solution/exercise-runtimeparams/exercise_runtimeparams_solution.input
rename to exercises/solution/exercise-runtimeparams/params.input
diff --git a/exercises/solution/exercise-runtimeparams/injection2pproblem.hh b/exercises/solution/exercise-runtimeparams/problem.hh
similarity index 97%
rename from exercises/solution/exercise-runtimeparams/injection2pproblem.hh
rename to exercises/solution/exercise-runtimeparams/problem.hh
index 30913a9023f7791c299337f665fb86a46ee4b2cd..b9729bcff8cd58de532d6ca2203994e7e7ae9d6f 100644
--- a/exercises/solution/exercise-runtimeparams/injection2pproblem.hh
+++ b/exercises/solution/exercise-runtimeparams/problem.hh
@@ -32,7 +32,7 @@
 #include <dumux/porousmediumflow/problem.hh>
 #include <dumux/material/fluidsystems/h2on2.hh>
 
-#include "injection2pspatialparams.hh"
+#include "spatialparams.hh"
 
 namespace Dumux {
 
@@ -81,15 +81,15 @@ struct FluidSystem<TypeTag, TTag::Injection2p> { using type = FluidSystems::H2ON
  *
  * The domain is sized 60 m times 40 m.
  *
- * For the mass conservation equation neumann boundary conditions are used on
- * the top, on the bottom and on the right of the domain, while dirichlet conditions
+ * For the mass conservation equation Neumann boundary conditions are used on
+ * the top, on the bottom and on the right of the domain, while Dirichlet conditions
  * apply on the left boundary.
  *
  * Gas is injected at the right boundary from 7 m to 15 m at a rate of
- * 0.001 kg/(s m), the remaining neumann boundaries are no-flow
+ * 0.001 kg/(s m), the remaining Neumann boundaries are no-flow
  * boundaries.
  *
- * At the dirichlet boundaries a hydrostatic pressure and a gas saturation of zero a
+ * At the Dirichlet boundaries a hydrostatic pressure and a gas saturation of zero a
  *
  * This problem uses the \ref TwoPModel model.
  */
@@ -201,7 +201,7 @@ public:
     }
 
     /*!
-     * \brief Evaluate the boundary conditions for a neumann
+     * \brief Evaluate the boundary conditions for a Neumann
      *        boundary segment.
      *
      * \param globalPos The position of the integration point of the boundary segment.
diff --git a/exercises/solution/exercise-runtimeparams/injection2pspatialparams.hh b/exercises/solution/exercise-runtimeparams/spatialparams.hh
similarity index 100%
rename from exercises/solution/exercise-runtimeparams/injection2pspatialparams.hh
rename to exercises/solution/exercise-runtimeparams/spatialparams.hh