From 357a508b28677ea717fa908273bf764fc3bac418 Mon Sep 17 00:00:00 2001
From: Roman Winter <rwinter@shrek.iws.uni-stuttgart.de>
Date: Tue, 1 Sep 2020 12:14:17 +0200
Subject: [PATCH] [cleanup] deprecation warnings and errors

---
 exercises/exercise-basic/2p2cmain.cc                      | 2 +-
 exercises/exercise-basic/2pmain.cc                        | 2 +-
 exercises/exercise-basic/injection2p2cproblem.hh          | 2 +-
 exercises/exercise-basic/injection2pproblem.hh            | 2 +-
 exercises/exercise-biomineralization/biominproblem.hh     | 2 +-
 .../exercise-biomineralization/fluidsystems/biomin.hh     | 8 +++++++-
 exercises/exercise-biomineralization/main.cc              | 2 +-
 .../interface/freeflowsubproblem.hh                       | 2 +-
 .../interface/porousmediumsubproblem.hh                   | 2 +-
 .../exercise-coupling-ff-pm/models/freeflowsubproblem.hh  | 2 +-
 exercises/exercise-coupling-ff-pm/models/main.cc          | 2 +-
 .../models/porousmediumsubproblem.hh                      | 2 +-
 .../turbulence/freeflowsubproblem.hh                      | 2 +-
 exercises/exercise-coupling-ff-pm/turbulence/main.cc      | 2 +-
 .../turbulence/porousmediumsubproblem.hh                  | 2 +-
 exercises/exercise-fluidsystem/2p2cproblem.hh             | 2 +-
 exercises/exercise-fluidsystem/2pproblem.hh               | 2 +-
 exercises/exercise-fluidsystem/main.cc                    | 2 +-
 exercises/exercise-fractures/fractureproblem.hh           | 2 +-
 exercises/exercise-fractures/main.cc                      | 2 +-
 exercises/exercise-fractures/matrixproblem.hh             | 2 +-
 exercises/exercise-grids/main.cc                          | 2 +-
 exercises/exercise-grids/problem.hh                       | 2 +-
 exercises/exercise-mainfile/1pproblem.hh                  | 2 +-
 exercises/exercise-mainfile/exercise1pcmain.cc            | 2 +-
 exercises/exercise-properties/main.cc                     | 2 +-
 exercises/exercise-properties/problem.hh                  | 2 +-
 exercises/exercise-runtimeparams/main.cc                  | 2 +-
 exercises/exercise-runtimeparams/problem.hh               | 2 +-
 exercises/solution/exercise-basic/2pnimain.cc             | 2 +-
 exercises/solution/exercise-basic/injection2pniproblem.hh | 2 +-
 .../solution/exercise-biomineralization/biominproblem.hh  | 2 +-
 .../exercise-biomineralization/fluidsystems/biomin.hh     | 8 +++++++-
 exercises/solution/exercise-biomineralization/main.cc     | 2 +-
 .../interface/freeflowsubproblem.hh                       | 2 +-
 .../interface/porousmediumsubproblem.hh                   | 2 +-
 .../exercise-coupling-ff-pm/models/freeflowsubproblem.hh  | 2 +-
 exercises/solution/exercise-coupling-ff-pm/models/main.cc | 2 +-
 .../models/porousmediumsubproblem.hh                      | 2 +-
 .../turbulence/freeflowsubproblem.hh                      | 2 +-
 .../solution/exercise-coupling-ff-pm/turbulence/main.cc   | 2 +-
 .../turbulence/porousmediumsubproblem.hh                  | 2 +-
 exercises/solution/exercise-fluidsystem/2p2cproblem.hh    | 2 +-
 exercises/solution/exercise-fluidsystem/2pproblem.hh      | 2 +-
 exercises/solution/exercise-fluidsystem/main.cc           | 2 +-
 exercises/solution/exercise-fractures/fractureproblem.hh  | 2 +-
 exercises/solution/exercise-fractures/main.cc             | 2 +-
 exercises/solution/exercise-fractures/matrixproblem.hh    | 2 +-
 exercises/solution/exercise-grids/main.cc                 | 2 +-
 exercises/solution/exercise-grids/problem.hh              | 2 +-
 exercises/solution/exercise-mainfile/1pproblem.hh         | 2 +-
 exercises/solution/exercise-properties/main.cc            | 2 +-
 exercises/solution/exercise-properties/problem.hh         | 2 +-
 exercises/solution/exercise-runtimeparams/main.cc         | 2 +-
 exercises/solution/exercise-runtimeparams/problem.hh      | 2 +-
 55 files changed, 67 insertions(+), 55 deletions(-)

diff --git a/exercises/exercise-basic/2p2cmain.cc b/exercises/exercise-basic/2p2cmain.cc
index b6e97d38..3fa25602 100644
--- a/exercises/exercise-basic/2p2cmain.cc
+++ b/exercises/exercise-basic/2p2cmain.cc
@@ -120,7 +120,7 @@ int main(int argc, char** argv) try
 
     // the assembler with time loop for instationary problem
     using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>;
-    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop);
+    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
     using LinearSolver = AMGBiCGSTABBackend<LinearSolverTraits<FVGridGeometry>>;
diff --git a/exercises/exercise-basic/2pmain.cc b/exercises/exercise-basic/2pmain.cc
index be097705..666d3c16 100644
--- a/exercises/exercise-basic/2pmain.cc
+++ b/exercises/exercise-basic/2pmain.cc
@@ -125,7 +125,7 @@ int main(int argc, char** argv) try
 
     // the assembler with time loop for instationary problem
     using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>;
-    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop);
+    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
     using LinearSolver = AMGBiCGSTABBackend<LinearSolverTraits<FVGridGeometry>>;
diff --git a/exercises/exercise-basic/injection2p2cproblem.hh b/exercises/exercise-basic/injection2p2cproblem.hh
index 81a59398..47d165c1 100644
--- a/exercises/exercise-basic/injection2p2cproblem.hh
+++ b/exercises/exercise-basic/injection2p2cproblem.hh
@@ -60,7 +60,7 @@ class Injection2p2cProblem : public PorousMediumFlowProblem<TypeTag>
     using Scalar = GetPropType<TypeTag, Properties::Scalar>;
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
     using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView;
     using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
diff --git a/exercises/exercise-basic/injection2pproblem.hh b/exercises/exercise-basic/injection2pproblem.hh
index 0b375251..20845f75 100644
--- a/exercises/exercise-basic/injection2pproblem.hh
+++ b/exercises/exercise-basic/injection2pproblem.hh
@@ -59,7 +59,7 @@ class Injection2PProblem : public PorousMediumFlowProblem<TypeTag>
     using Scalar = GetPropType<TypeTag, Properties::Scalar>;
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
     using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView;
     using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
diff --git a/exercises/exercise-biomineralization/biominproblem.hh b/exercises/exercise-biomineralization/biominproblem.hh
index 63eadb0c..c63e6dc7 100644
--- a/exercises/exercise-biomineralization/biominproblem.hh
+++ b/exercises/exercise-biomineralization/biominproblem.hh
@@ -46,7 +46,7 @@ class BioMinProblem : public PorousMediumFlowProblem<TypeTag>
     using SolidSystem = GetPropType<TypeTag, Properties::SolidSystem>;
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using VolumeVariables = GetPropType<TypeTag, Properties::VolumeVariables>;
     using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
     using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView;
diff --git a/exercises/exercise-biomineralization/fluidsystems/biomin.hh b/exercises/exercise-biomineralization/fluidsystems/biomin.hh
index 0509032c..32330fc0 100644
--- a/exercises/exercise-biomineralization/fluidsystems/biomin.hh
+++ b/exercises/exercise-biomineralization/fluidsystems/biomin.hh
@@ -332,14 +332,20 @@ public:
 
         // assume brine with viscosity effect of Ca for the liquid phase.
         if (phaseIdx == liquidPhaseIdx)
-            return Brine::liquidViscosity(temperature, pressure);;
+        {
+            return Brine::liquidViscosity(temperature, pressure);
+        }
 
         // assume pure CO2 for the gas phase.
         else if (phaseIdx == gasPhaseIdx)
+        {
             return CO2::gasViscosity(temperature, pressure);
+        }
 
         else
+        {
             DUNE_THROW(Dune::InvalidStateException, "Invalid phase index " << phaseIdx);
+        }
 
     }
 
diff --git a/exercises/exercise-biomineralization/main.cc b/exercises/exercise-biomineralization/main.cc
index 95dc1a08..0e3bc0dc 100644
--- a/exercises/exercise-biomineralization/main.cc
+++ b/exercises/exercise-biomineralization/main.cc
@@ -130,7 +130,7 @@ int main(int argc, char** argv) try
 
     // the assembler with time loop for instationary problem
     using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>;
-    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop);
+    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
     using LinearSolver = AMGBiCGSTABBackend<LinearSolverTraits<FVGridGeometry>>;
diff --git a/exercises/exercise-coupling-ff-pm/interface/freeflowsubproblem.hh b/exercises/exercise-coupling-ff-pm/interface/freeflowsubproblem.hh
index 9d8d4e3d..47a243eb 100644
--- a/exercises/exercise-coupling-ff-pm/interface/freeflowsubproblem.hh
+++ b/exercises/exercise-coupling-ff-pm/interface/freeflowsubproblem.hh
@@ -41,7 +41,7 @@ class FreeFlowSubProblem : public NavierStokesProblem<TypeTag>
 
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
 
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::NavierStokesBoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
 
     using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
     using FVElementGeometry = typename FVGridGeometry::LocalView;
diff --git a/exercises/exercise-coupling-ff-pm/interface/porousmediumsubproblem.hh b/exercises/exercise-coupling-ff-pm/interface/porousmediumsubproblem.hh
index f7d7b2b1..689e9b61 100644
--- a/exercises/exercise-coupling-ff-pm/interface/porousmediumsubproblem.hh
+++ b/exercises/exercise-coupling-ff-pm/interface/porousmediumsubproblem.hh
@@ -40,7 +40,7 @@ class PorousMediumSubProblem : public PorousMediumFlowProblem<TypeTag>
     using Scalar = GetPropType<TypeTag, Properties::Scalar>;
     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
     using NumEqVector = GetPropType<TypeTag, Properties::NumEqVector>;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using VolumeVariables = GetPropType<TypeTag, Properties::VolumeVariables>;
     using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView;
     using SubControlVolume = typename FVElementGeometry::SubControlVolume;
diff --git a/exercises/exercise-coupling-ff-pm/models/freeflowsubproblem.hh b/exercises/exercise-coupling-ff-pm/models/freeflowsubproblem.hh
index 08465b89..0a4f0b99 100644
--- a/exercises/exercise-coupling-ff-pm/models/freeflowsubproblem.hh
+++ b/exercises/exercise-coupling-ff-pm/models/freeflowsubproblem.hh
@@ -45,7 +45,7 @@ class FreeFlowSubProblem : public NavierStokesProblem<TypeTag>
     using Scalar = GetPropType<TypeTag, Properties::Scalar>;
     using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::NavierStokesBoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
 
     using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
     using FVElementGeometry = typename FVGridGeometry::LocalView;
diff --git a/exercises/exercise-coupling-ff-pm/models/main.cc b/exercises/exercise-coupling-ff-pm/models/main.cc
index 6326d83d..cc582f06 100644
--- a/exercises/exercise-coupling-ff-pm/models/main.cc
+++ b/exercises/exercise-coupling-ff-pm/models/main.cc
@@ -173,7 +173,7 @@ int main(int argc, char** argv) try
                                                                  stokesGridVariables->cellCenterGridVariablesPtr(),
                                                                  darcyGridVariables),
                                                  couplingManager,
-                                                 timeLoop);
+                                                 timeLoop, solOld);
 
     // the linear solver
     using LinearSolver = UMFPackBackend;
diff --git a/exercises/exercise-coupling-ff-pm/models/porousmediumsubproblem.hh b/exercises/exercise-coupling-ff-pm/models/porousmediumsubproblem.hh
index 4d3f7ebb..28ebbb51 100644
--- a/exercises/exercise-coupling-ff-pm/models/porousmediumsubproblem.hh
+++ b/exercises/exercise-coupling-ff-pm/models/porousmediumsubproblem.hh
@@ -44,7 +44,7 @@ class PorousMediumSubProblem : public PorousMediumFlowProblem<TypeTag>
     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
     using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
     using NumEqVector = GetPropType<TypeTag, Properties::NumEqVector>;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView;
     using SubControlVolume = typename FVElementGeometry::SubControlVolume;
     using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace;
diff --git a/exercises/exercise-coupling-ff-pm/turbulence/freeflowsubproblem.hh b/exercises/exercise-coupling-ff-pm/turbulence/freeflowsubproblem.hh
index 6367854e..109c9a11 100644
--- a/exercises/exercise-coupling-ff-pm/turbulence/freeflowsubproblem.hh
+++ b/exercises/exercise-coupling-ff-pm/turbulence/freeflowsubproblem.hh
@@ -46,7 +46,7 @@ class FreeFlowSubProblem : public NavierStokesProblem<TypeTag>
     using Scalar = GetPropType<TypeTag, Properties::Scalar>;
     using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::NavierStokesBoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
 
     using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
     using FVElementGeometry = typename FVGridGeometry::LocalView;
diff --git a/exercises/exercise-coupling-ff-pm/turbulence/main.cc b/exercises/exercise-coupling-ff-pm/turbulence/main.cc
index 72c7ebf0..7ac4b85b 100644
--- a/exercises/exercise-coupling-ff-pm/turbulence/main.cc
+++ b/exercises/exercise-coupling-ff-pm/turbulence/main.cc
@@ -178,7 +178,7 @@ int main(int argc, char** argv) try
                                                                  stokesGridVariables->cellCenterGridVariablesPtr(),
                                                                  darcyGridVariables),
                                                  couplingManager,
-                                                 timeLoop);
+                                                 timeLoop, solOld);
 
     // the linear solver
     using LinearSolver = UMFPackBackend;
diff --git a/exercises/exercise-coupling-ff-pm/turbulence/porousmediumsubproblem.hh b/exercises/exercise-coupling-ff-pm/turbulence/porousmediumsubproblem.hh
index f4ecbabf..3ec5c400 100644
--- a/exercises/exercise-coupling-ff-pm/turbulence/porousmediumsubproblem.hh
+++ b/exercises/exercise-coupling-ff-pm/turbulence/porousmediumsubproblem.hh
@@ -42,7 +42,7 @@ class PorousMediumSubProblem : public PorousMediumFlowProblem<TypeTag>
     using Scalar = GetPropType<TypeTag, Properties::Scalar>;
     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
     using NumEqVector = GetPropType<TypeTag, Properties::NumEqVector>;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using VolumeVariables = GetPropType<TypeTag, Properties::VolumeVariables>;
     using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView;
     using SubControlVolume = typename FVElementGeometry::SubControlVolume;
diff --git a/exercises/exercise-fluidsystem/2p2cproblem.hh b/exercises/exercise-fluidsystem/2p2cproblem.hh
index 76a5f58d..50933e81 100644
--- a/exercises/exercise-fluidsystem/2p2cproblem.hh
+++ b/exercises/exercise-fluidsystem/2p2cproblem.hh
@@ -52,7 +52,7 @@ class ExerciseFluidsystemProblemTwoPTwoC : public PorousMediumFlowProblem<TypeTa
     // Dumux specific types
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
     using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView;
     using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
diff --git a/exercises/exercise-fluidsystem/2pproblem.hh b/exercises/exercise-fluidsystem/2pproblem.hh
index dc542c84..c9f74c95 100644
--- a/exercises/exercise-fluidsystem/2pproblem.hh
+++ b/exercises/exercise-fluidsystem/2pproblem.hh
@@ -58,7 +58,7 @@ class ExerciseFluidsystemProblemTwoP : public PorousMediumFlowProblem<TypeTag>
     // Dumux specific types
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
     using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView;
     using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
diff --git a/exercises/exercise-fluidsystem/main.cc b/exercises/exercise-fluidsystem/main.cc
index 5266f7ef..c90b26a6 100644
--- a/exercises/exercise-fluidsystem/main.cc
+++ b/exercises/exercise-fluidsystem/main.cc
@@ -128,7 +128,7 @@ int main(int argc, char** argv) try
 
     // the assembler with time loop for instationary problem
     using Assembler = FVAssembler<TypeTag, DiffMethod::numeric, /*implicit?*/true>;
-    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop);
+    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
     using LinearSolver = AMGBiCGSTABBackend<LinearSolverTraits<FVGridGeometry>>;
diff --git a/exercises/exercise-fractures/fractureproblem.hh b/exercises/exercise-fractures/fractureproblem.hh
index 318d97c2..1a69ca69 100644
--- a/exercises/exercise-fractures/fractureproblem.hh
+++ b/exercises/exercise-fractures/fractureproblem.hh
@@ -43,7 +43,7 @@ class FractureSubProblem : public PorousMediumFlowProblem<TypeTag>
 {
     using ParentType = PorousMediumFlowProblem<TypeTag>;
 
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using CouplingManager = GetPropType<TypeTag, Properties::CouplingManager>;
     using NumEqVector = GetPropType<TypeTag, Properties::NumEqVector>;
     using GridVariables = GetPropType<TypeTag, Properties::GridVariables>;
diff --git a/exercises/exercise-fractures/main.cc b/exercises/exercise-fractures/main.cc
index c871fbee..9b4a75c1 100644
--- a/exercises/exercise-fractures/main.cc
+++ b/exercises/exercise-fractures/main.cc
@@ -220,7 +220,7 @@ int main(int argc, char** argv) try
                                                   std::make_tuple(matrixFvGridGeometry, fractureFvGridGeometry),
                                                   std::make_tuple(matrixGridVariables, fractureGridVariables),
                                                   couplingManager,
-                                                  timeLoop);
+                                                  timeLoop, xOld);
 
     // the linear solver
     using LinearSolver = ILU0BiCGSTABBackend;
diff --git a/exercises/exercise-fractures/matrixproblem.hh b/exercises/exercise-fractures/matrixproblem.hh
index d7a238c6..ae307676 100644
--- a/exercises/exercise-fractures/matrixproblem.hh
+++ b/exercises/exercise-fractures/matrixproblem.hh
@@ -47,7 +47,7 @@ class MatrixSubProblem : public PorousMediumFlowProblem<TypeTag>
 {
     using ParentType = PorousMediumFlowProblem<TypeTag>;
 
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using CouplingManager = GetPropType<TypeTag, Properties::CouplingManager>;
     using NumEqVector = GetPropType<TypeTag, Properties::NumEqVector>;
     using GridVariables = GetPropType<TypeTag, Properties::GridVariables>;
diff --git a/exercises/exercise-grids/main.cc b/exercises/exercise-grids/main.cc
index ee8c9388..8e3b203b 100644
--- a/exercises/exercise-grids/main.cc
+++ b/exercises/exercise-grids/main.cc
@@ -123,7 +123,7 @@ int main(int argc, char** argv) try
 
     // the assembler with time loop for instationary problem
     using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>;
-    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop);
+    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
     using LinearSolver = AMGBiCGSTABBackend<LinearSolverTraits<FVGridGeometry>>;
diff --git a/exercises/exercise-grids/problem.hh b/exercises/exercise-grids/problem.hh
index 759d2fa8..b61d5a71 100644
--- a/exercises/exercise-grids/problem.hh
+++ b/exercises/exercise-grids/problem.hh
@@ -59,7 +59,7 @@ class InjectionProblem2P : public PorousMediumFlowProblem<TypeTag>
     using Scalar = GetPropType<TypeTag, Properties::Scalar>;
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
     using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView;
     using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
diff --git a/exercises/exercise-mainfile/1pproblem.hh b/exercises/exercise-mainfile/1pproblem.hh
index 94410315..9f821fa1 100644
--- a/exercises/exercise-mainfile/1pproblem.hh
+++ b/exercises/exercise-mainfile/1pproblem.hh
@@ -45,7 +45,7 @@ class OnePTestProblem : public PorousMediumFlowProblem<TypeTag>
     using Scalar = GetPropType<TypeTag, Properties::Scalar>;
     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
     using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     static constexpr int dimWorld = GridView::dimensionworld;
     using GlobalPosition = typename Element::Geometry::GlobalCoordinate;
     using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
diff --git a/exercises/exercise-mainfile/exercise1pcmain.cc b/exercises/exercise-mainfile/exercise1pcmain.cc
index 8f89de6e..f406996e 100644
--- a/exercises/exercise-mainfile/exercise1pcmain.cc
+++ b/exercises/exercise-mainfile/exercise1pcmain.cc
@@ -121,7 +121,7 @@ int main(int argc, char** argv) try
 
     // the assembler with time loop for instationary problem
     using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>;
-    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop);
+    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
     using LinearSolver = ILU0BiCGSTABBackend;
diff --git a/exercises/exercise-properties/main.cc b/exercises/exercise-properties/main.cc
index 4194de1a..be2a4f3f 100644
--- a/exercises/exercise-properties/main.cc
+++ b/exercises/exercise-properties/main.cc
@@ -151,7 +151,7 @@ int main(int argc, char** argv) try
 
     // the assembler with time loop for instationary problem
     using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>;
-    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop);
+    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
     using LinearSolver = AMGBiCGSTABBackend<LinearSolverTraits<FVGridGeometry>>;
diff --git a/exercises/exercise-properties/problem.hh b/exercises/exercise-properties/problem.hh
index 668e76aa..6e579c90 100644
--- a/exercises/exercise-properties/problem.hh
+++ b/exercises/exercise-properties/problem.hh
@@ -42,7 +42,7 @@ class TwoPTestProblem : public PorousMediumFlowProblem<TypeTag>
     using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
     using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using GlobalPosition = typename Element::Geometry::GlobalCoordinate;
     using NumEqVector = GetPropType<TypeTag, Properties::NumEqVector>;
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
diff --git a/exercises/exercise-runtimeparams/main.cc b/exercises/exercise-runtimeparams/main.cc
index 21cff5b3..63d6e8cf 100644
--- a/exercises/exercise-runtimeparams/main.cc
+++ b/exercises/exercise-runtimeparams/main.cc
@@ -123,7 +123,7 @@ int main(int argc, char** argv) try
 
     // the assembler with time loop for instationary problem
     using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>;
-    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop);
+    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
     using LinearSolver = AMGBiCGSTABBackend<LinearSolverTraits<FVGridGeometry>>;
diff --git a/exercises/exercise-runtimeparams/problem.hh b/exercises/exercise-runtimeparams/problem.hh
index 94089133..12c72a9e 100644
--- a/exercises/exercise-runtimeparams/problem.hh
+++ b/exercises/exercise-runtimeparams/problem.hh
@@ -59,7 +59,7 @@ class InjectionProblem2P : public PorousMediumFlowProblem<TypeTag>
     using Scalar = GetPropType<TypeTag, Properties::Scalar>;
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
     using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView;
     using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
diff --git a/exercises/solution/exercise-basic/2pnimain.cc b/exercises/solution/exercise-basic/2pnimain.cc
index 4a193965..477755cb 100644
--- a/exercises/solution/exercise-basic/2pnimain.cc
+++ b/exercises/solution/exercise-basic/2pnimain.cc
@@ -121,7 +121,7 @@ int main(int argc, char** argv) try
 
     // the assembler with time loop for instationary problem
     using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>;
-    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop);
+    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
     using LinearSolver = AMGBiCGSTABBackend<LinearSolverTraits<FVGridGeometry>>;
diff --git a/exercises/solution/exercise-basic/injection2pniproblem.hh b/exercises/solution/exercise-basic/injection2pniproblem.hh
index f022bcc6..282fc2f3 100644
--- a/exercises/solution/exercise-basic/injection2pniproblem.hh
+++ b/exercises/solution/exercise-basic/injection2pniproblem.hh
@@ -58,7 +58,7 @@ class Injection2PNIProblem : public PorousMediumFlowProblem<TypeTag>
     using Scalar = GetPropType<TypeTag, Properties::Scalar>;
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
     using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView;
     using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
diff --git a/exercises/solution/exercise-biomineralization/biominproblem.hh b/exercises/solution/exercise-biomineralization/biominproblem.hh
index 6450943d..6f8b64a9 100644
--- a/exercises/solution/exercise-biomineralization/biominproblem.hh
+++ b/exercises/solution/exercise-biomineralization/biominproblem.hh
@@ -48,7 +48,7 @@ class BioMinProblem : public PorousMediumFlowProblem<TypeTag>
     using SolidSystem = GetPropType<TypeTag, Properties::SolidSystem>;
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using VolumeVariables = GetPropType<TypeTag, Properties::VolumeVariables>;
     using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
     using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView;
diff --git a/exercises/solution/exercise-biomineralization/fluidsystems/biomin.hh b/exercises/solution/exercise-biomineralization/fluidsystems/biomin.hh
index 0509032c..32330fc0 100644
--- a/exercises/solution/exercise-biomineralization/fluidsystems/biomin.hh
+++ b/exercises/solution/exercise-biomineralization/fluidsystems/biomin.hh
@@ -332,14 +332,20 @@ public:
 
         // assume brine with viscosity effect of Ca for the liquid phase.
         if (phaseIdx == liquidPhaseIdx)
-            return Brine::liquidViscosity(temperature, pressure);;
+        {
+            return Brine::liquidViscosity(temperature, pressure);
+        }
 
         // assume pure CO2 for the gas phase.
         else if (phaseIdx == gasPhaseIdx)
+        {
             return CO2::gasViscosity(temperature, pressure);
+        }
 
         else
+        {
             DUNE_THROW(Dune::InvalidStateException, "Invalid phase index " << phaseIdx);
+        }
 
     }
 
diff --git a/exercises/solution/exercise-biomineralization/main.cc b/exercises/solution/exercise-biomineralization/main.cc
index 95dc1a08..0e3bc0dc 100644
--- a/exercises/solution/exercise-biomineralization/main.cc
+++ b/exercises/solution/exercise-biomineralization/main.cc
@@ -130,7 +130,7 @@ int main(int argc, char** argv) try
 
     // the assembler with time loop for instationary problem
     using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>;
-    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop);
+    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
     using LinearSolver = AMGBiCGSTABBackend<LinearSolverTraits<FVGridGeometry>>;
diff --git a/exercises/solution/exercise-coupling-ff-pm/interface/freeflowsubproblem.hh b/exercises/solution/exercise-coupling-ff-pm/interface/freeflowsubproblem.hh
index 48c8929e..311643c4 100644
--- a/exercises/solution/exercise-coupling-ff-pm/interface/freeflowsubproblem.hh
+++ b/exercises/solution/exercise-coupling-ff-pm/interface/freeflowsubproblem.hh
@@ -42,7 +42,7 @@ class FreeFlowSubProblem : public NavierStokesProblem<TypeTag>
 
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
 
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::NavierStokesBoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
 
     using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
     using FVElementGeometry = typename FVGridGeometry::LocalView;
diff --git a/exercises/solution/exercise-coupling-ff-pm/interface/porousmediumsubproblem.hh b/exercises/solution/exercise-coupling-ff-pm/interface/porousmediumsubproblem.hh
index 1637f00b..57d55d0b 100644
--- a/exercises/solution/exercise-coupling-ff-pm/interface/porousmediumsubproblem.hh
+++ b/exercises/solution/exercise-coupling-ff-pm/interface/porousmediumsubproblem.hh
@@ -40,7 +40,7 @@ class PorousMediumSubProblem : public PorousMediumFlowProblem<TypeTag>
     using Scalar = GetPropType<TypeTag, Properties::Scalar>;
     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
     using NumEqVector = GetPropType<TypeTag, Properties::NumEqVector>;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using VolumeVariables = GetPropType<TypeTag, Properties::VolumeVariables>;
     using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView;
     using SubControlVolume = typename FVElementGeometry::SubControlVolume;
diff --git a/exercises/solution/exercise-coupling-ff-pm/models/freeflowsubproblem.hh b/exercises/solution/exercise-coupling-ff-pm/models/freeflowsubproblem.hh
index 70ca05e3..39b3304b 100644
--- a/exercises/solution/exercise-coupling-ff-pm/models/freeflowsubproblem.hh
+++ b/exercises/solution/exercise-coupling-ff-pm/models/freeflowsubproblem.hh
@@ -45,7 +45,7 @@ class FreeFlowSubProblem : public NavierStokesProblem<TypeTag>
     using Scalar = GetPropType<TypeTag, Properties::Scalar>;
     using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::NavierStokesBoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
 
     using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
     using FVElementGeometry = typename FVGridGeometry::LocalView;
diff --git a/exercises/solution/exercise-coupling-ff-pm/models/main.cc b/exercises/solution/exercise-coupling-ff-pm/models/main.cc
index 8b5a6eca..142edc87 100644
--- a/exercises/solution/exercise-coupling-ff-pm/models/main.cc
+++ b/exercises/solution/exercise-coupling-ff-pm/models/main.cc
@@ -179,7 +179,7 @@ int main(int argc, char** argv) try
                                                                  stokesGridVariables->cellCenterGridVariablesPtr(),
                                                                  darcyGridVariables),
                                                  couplingManager,
-                                                 timeLoop);
+                                                 timeLoop, solOld);
 
     // the linear solver
     using LinearSolver = UMFPackBackend;
diff --git a/exercises/solution/exercise-coupling-ff-pm/models/porousmediumsubproblem.hh b/exercises/solution/exercise-coupling-ff-pm/models/porousmediumsubproblem.hh
index 537126e0..4c47a9ac 100644
--- a/exercises/solution/exercise-coupling-ff-pm/models/porousmediumsubproblem.hh
+++ b/exercises/solution/exercise-coupling-ff-pm/models/porousmediumsubproblem.hh
@@ -43,7 +43,7 @@ class PorousMediumSubProblem : public PorousMediumFlowProblem<TypeTag>
     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
     using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
     using NumEqVector = GetPropType<TypeTag, Properties::NumEqVector>;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView;
     using SubControlVolume = typename FVElementGeometry::SubControlVolume;
     using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace;
diff --git a/exercises/solution/exercise-coupling-ff-pm/turbulence/freeflowsubproblem.hh b/exercises/solution/exercise-coupling-ff-pm/turbulence/freeflowsubproblem.hh
index 4a0b9a11..891fb158 100644
--- a/exercises/solution/exercise-coupling-ff-pm/turbulence/freeflowsubproblem.hh
+++ b/exercises/solution/exercise-coupling-ff-pm/turbulence/freeflowsubproblem.hh
@@ -53,7 +53,7 @@ class FreeFlowSubProblem : public NavierStokesProblem<TypeTag>
     using Scalar = GetPropType<TypeTag, Properties::Scalar>;
     using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::NavierStokesBoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
 
     using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
     using FVElementGeometry = typename FVGridGeometry::LocalView;
diff --git a/exercises/solution/exercise-coupling-ff-pm/turbulence/main.cc b/exercises/solution/exercise-coupling-ff-pm/turbulence/main.cc
index 81cf3c55..a1f5cdef 100644
--- a/exercises/solution/exercise-coupling-ff-pm/turbulence/main.cc
+++ b/exercises/solution/exercise-coupling-ff-pm/turbulence/main.cc
@@ -178,7 +178,7 @@ int main(int argc, char** argv) try
                                                                  stokesGridVariables->cellCenterGridVariablesPtr(),
                                                                  darcyGridVariables),
                                                  couplingManager,
-                                                 timeLoop);
+                                                 timeLoop, solOld);
 
     // the linear solver
     using LinearSolver = UMFPackBackend;
diff --git a/exercises/solution/exercise-coupling-ff-pm/turbulence/porousmediumsubproblem.hh b/exercises/solution/exercise-coupling-ff-pm/turbulence/porousmediumsubproblem.hh
index 92c91a98..10f74908 100644
--- a/exercises/solution/exercise-coupling-ff-pm/turbulence/porousmediumsubproblem.hh
+++ b/exercises/solution/exercise-coupling-ff-pm/turbulence/porousmediumsubproblem.hh
@@ -42,7 +42,7 @@ class PorousMediumSubProblem : public PorousMediumFlowProblem<TypeTag>
     using Scalar = GetPropType<TypeTag, Properties::Scalar>;
     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
     using NumEqVector = GetPropType<TypeTag, Properties::NumEqVector>;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using VolumeVariables = GetPropType<TypeTag, Properties::VolumeVariables>;
     using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView;
     using SubControlVolume = typename FVElementGeometry::SubControlVolume;
diff --git a/exercises/solution/exercise-fluidsystem/2p2cproblem.hh b/exercises/solution/exercise-fluidsystem/2p2cproblem.hh
index 079beb3d..76f1fba5 100644
--- a/exercises/solution/exercise-fluidsystem/2p2cproblem.hh
+++ b/exercises/solution/exercise-fluidsystem/2p2cproblem.hh
@@ -52,7 +52,7 @@ class ExerciseFluidsystemProblemTwoPTwoC : public PorousMediumFlowProblem<TypeTa
     // Dumux specific types
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
     using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView;
     using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
diff --git a/exercises/solution/exercise-fluidsystem/2pproblem.hh b/exercises/solution/exercise-fluidsystem/2pproblem.hh
index f4608455..7eac67ff 100644
--- a/exercises/solution/exercise-fluidsystem/2pproblem.hh
+++ b/exercises/solution/exercise-fluidsystem/2pproblem.hh
@@ -58,7 +58,7 @@ class ExerciseFluidsystemProblemTwoP : public PorousMediumFlowProblem<TypeTag>
     // Dumux specific types
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
     using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView;
     using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
diff --git a/exercises/solution/exercise-fluidsystem/main.cc b/exercises/solution/exercise-fluidsystem/main.cc
index 9a9bafe6..e82d1822 100644
--- a/exercises/solution/exercise-fluidsystem/main.cc
+++ b/exercises/solution/exercise-fluidsystem/main.cc
@@ -125,7 +125,7 @@ int main(int argc, char** argv) try
 
     // the assembler with time loop for instationary problem
     using Assembler = FVAssembler<TypeTag, DiffMethod::numeric, /*implicit?*/true>;
-    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop);
+    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
     using LinearSolver = AMGBiCGSTABBackend<LinearSolverTraits<FVGridGeometry>>;
diff --git a/exercises/solution/exercise-fractures/fractureproblem.hh b/exercises/solution/exercise-fractures/fractureproblem.hh
index 9bfe4312..17740330 100644
--- a/exercises/solution/exercise-fractures/fractureproblem.hh
+++ b/exercises/solution/exercise-fractures/fractureproblem.hh
@@ -43,7 +43,7 @@ class FractureSubProblem : public PorousMediumFlowProblem<TypeTag>
 {
     using ParentType = PorousMediumFlowProblem<TypeTag>;
 
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using CouplingManager = GetPropType<TypeTag, Properties::CouplingManager>;
     using NumEqVector = GetPropType<TypeTag, Properties::NumEqVector>;
     using GridVariables = GetPropType<TypeTag, Properties::GridVariables>;
diff --git a/exercises/solution/exercise-fractures/main.cc b/exercises/solution/exercise-fractures/main.cc
index c871fbee..9b4a75c1 100644
--- a/exercises/solution/exercise-fractures/main.cc
+++ b/exercises/solution/exercise-fractures/main.cc
@@ -220,7 +220,7 @@ int main(int argc, char** argv) try
                                                   std::make_tuple(matrixFvGridGeometry, fractureFvGridGeometry),
                                                   std::make_tuple(matrixGridVariables, fractureGridVariables),
                                                   couplingManager,
-                                                  timeLoop);
+                                                  timeLoop, xOld);
 
     // the linear solver
     using LinearSolver = ILU0BiCGSTABBackend;
diff --git a/exercises/solution/exercise-fractures/matrixproblem.hh b/exercises/solution/exercise-fractures/matrixproblem.hh
index f6676262..1e5239d1 100644
--- a/exercises/solution/exercise-fractures/matrixproblem.hh
+++ b/exercises/solution/exercise-fractures/matrixproblem.hh
@@ -47,7 +47,7 @@ class MatrixSubProblem : public PorousMediumFlowProblem<TypeTag>
 {
     using ParentType = PorousMediumFlowProblem<TypeTag>;
 
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using CouplingManager = GetPropType<TypeTag, Properties::CouplingManager>;
     using NumEqVector = GetPropType<TypeTag, Properties::NumEqVector>;
     using GridVariables = GetPropType<TypeTag, Properties::GridVariables>;
diff --git a/exercises/solution/exercise-grids/main.cc b/exercises/solution/exercise-grids/main.cc
index ad6f8f83..5a935a7a 100644
--- a/exercises/solution/exercise-grids/main.cc
+++ b/exercises/solution/exercise-grids/main.cc
@@ -123,7 +123,7 @@ int main(int argc, char** argv) try
 
     // the assembler with time loop for instationary problem
     using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>;
-    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop);
+    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
     using LinearSolver = AMGBiCGSTABBackend<LinearSolverTraits<FVGridGeometry>>;
diff --git a/exercises/solution/exercise-grids/problem.hh b/exercises/solution/exercise-grids/problem.hh
index 3e0635ba..ffdac382 100644
--- a/exercises/solution/exercise-grids/problem.hh
+++ b/exercises/solution/exercise-grids/problem.hh
@@ -59,7 +59,7 @@ class InjectionProblem2P : public PorousMediumFlowProblem<TypeTag>
     using Scalar = GetPropType<TypeTag, Properties::Scalar>;
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
     using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView;
     using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
diff --git a/exercises/solution/exercise-mainfile/1pproblem.hh b/exercises/solution/exercise-mainfile/1pproblem.hh
index 41a45773..deb3f45a 100644
--- a/exercises/solution/exercise-mainfile/1pproblem.hh
+++ b/exercises/solution/exercise-mainfile/1pproblem.hh
@@ -45,7 +45,7 @@ class OnePTestProblem : public PorousMediumFlowProblem<TypeTag>
     using Scalar = GetPropType<TypeTag, Properties::Scalar>;
     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
     using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     static constexpr int dimWorld = GridView::dimensionworld;
     using GlobalPosition = typename Element::Geometry::GlobalCoordinate;
     using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
diff --git a/exercises/solution/exercise-properties/main.cc b/exercises/solution/exercise-properties/main.cc
index f20d3f06..0cedf1c7 100644
--- a/exercises/solution/exercise-properties/main.cc
+++ b/exercises/solution/exercise-properties/main.cc
@@ -152,7 +152,7 @@ int main(int argc, char** argv) try
 
     // the assembler with time loop for instationary problem
     using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>;
-    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop);
+    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
     using LinearSolver = AMGBiCGSTABBackend<LinearSolverTraits<FVGridGeometry>>;
diff --git a/exercises/solution/exercise-properties/problem.hh b/exercises/solution/exercise-properties/problem.hh
index b1c107ae..b870dd3c 100644
--- a/exercises/solution/exercise-properties/problem.hh
+++ b/exercises/solution/exercise-properties/problem.hh
@@ -43,7 +43,7 @@ class TwoPTestProblem : public PorousMediumFlowProblem<TypeTag>
     using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
     using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using GlobalPosition = typename Element::Geometry::GlobalCoordinate;
     using NumEqVector = GetPropType<TypeTag, Properties::NumEqVector>;
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
diff --git a/exercises/solution/exercise-runtimeparams/main.cc b/exercises/solution/exercise-runtimeparams/main.cc
index 21cff5b3..63d6e8cf 100644
--- a/exercises/solution/exercise-runtimeparams/main.cc
+++ b/exercises/solution/exercise-runtimeparams/main.cc
@@ -123,7 +123,7 @@ int main(int argc, char** argv) try
 
     // the assembler with time loop for instationary problem
     using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>;
-    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop);
+    auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
     using LinearSolver = AMGBiCGSTABBackend<LinearSolverTraits<FVGridGeometry>>;
diff --git a/exercises/solution/exercise-runtimeparams/problem.hh b/exercises/solution/exercise-runtimeparams/problem.hh
index ed97eb72..55f4e4b2 100644
--- a/exercises/solution/exercise-runtimeparams/problem.hh
+++ b/exercises/solution/exercise-runtimeparams/problem.hh
@@ -59,7 +59,7 @@ class InjectionProblem2P : public PorousMediumFlowProblem<TypeTag>
     using Scalar = GetPropType<TypeTag, Properties::Scalar>;
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
-    using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>;
+    using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using FVGridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
     using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView;
     using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
-- 
GitLab