diff --git a/dumux/assembly/fvassembler.hh b/dumux/assembly/fvassembler.hh
index 87ae227d2cd5b045e9b23b6582a22a33d44d90dd..c60d14fff8cd37d56417d2574acf57b8daa5b87e 100644
--- a/dumux/assembly/fvassembler.hh
+++ b/dumux/assembly/fvassembler.hh
@@ -89,22 +89,6 @@ public:
         static_assert(isImplicit, "Explicit assembler for stationary problem doesn't make sense!");
     }
 
-    /*!
-     * \brief The constructor for instationary problems
-     * \note this constructor is deprecated (use the one receiving the previous solution instead)
-     */
-    [[deprecated("Please use constructor taking the previous solution instead. Will be removed after release 3.2!")]]
-    FVAssembler(std::shared_ptr<const Problem> problem,
-                std::shared_ptr<const GridGeometry> gridGeometry,
-                std::shared_ptr<GridVariables> gridVariables,
-                std::shared_ptr<const TimeLoop> timeLoop)
-    : problem_(problem)
-    , gridGeometry_(gridGeometry)
-    , gridVariables_(gridVariables)
-    , timeLoop_(timeLoop)
-    , isStationaryProblem_(!timeLoop)
-    {}
-
     /*!
      * \brief The constructor for instationary problems
      * \note the grid variables might be temporarily changed during assembly (if caching is enabled)
diff --git a/dumux/assembly/staggeredfvassembler.hh b/dumux/assembly/staggeredfvassembler.hh
index 21f7f8d52d713771424fb71cdc908d3a1ecbacb5..874988d0fb573f359e233a36a59ea1a7192a8923 100644
--- a/dumux/assembly/staggeredfvassembler.hh
+++ b/dumux/assembly/staggeredfvassembler.hh
@@ -83,22 +83,6 @@ public:
         this->couplingManager_->setSubProblems(std::make_tuple(problem, problem));
     }
 
-    //! The constructor for instationary problems
-    [[deprecated("Please use the constructor additionally taking the previous solution. Will be removed after 3.2 release!")]]
-    StaggeredFVAssembler(std::shared_ptr<const Problem> problem,
-                         std::shared_ptr<const GridGeometry> gridGeometry,
-                         std::shared_ptr<GridVariables> gridVariables,
-                         std::shared_ptr<const TimeLoop> timeLoop)
-    : ParentType(std::make_tuple(problem, problem),
-                 std::make_tuple(gridGeometry->faceFVGridGeometryPtr(), gridGeometry->cellCenterFVGridGeometryPtr()),
-                 std::make_tuple(gridVariables->faceGridVariablesPtr(), gridVariables->cellCenterGridVariablesPtr()),
-                 std::make_shared<CouplingManager>(),
-                 timeLoop)
-    {
-        static_assert(isImplicit, "Explicit assembler for stationary problem doesn't make sense!");
-        this->couplingManager_->setSubProblems(std::make_tuple(problem, problem));
-    }
-
     //! The constructor for instationary problems
     StaggeredFVAssembler(std::shared_ptr<const Problem> problem,
                          std::shared_ptr<const GridGeometry> gridGeometry,
diff --git a/examples/1ptracer/main.cc b/examples/1ptracer/main.cc
index c33269ab8da6ad9e0045cefca1ba9429f4304df3..0fdc320eaf32ef74063d1fe8f86a4a87c6db00c0 100644
--- a/examples/1ptracer/main.cc
+++ b/examples/1ptracer/main.cc
@@ -248,7 +248,7 @@ int main(int argc, char** argv) try
     // We create and initialize the assembler with a time loop for the transient problem.
     // Within the time loop, we will use this assembler in each time step to assemble the linear system.
     using TracerAssembler = FVAssembler<TracerTypeTag, DiffMethod::analytic, /*implicit=*/false>;
-    auto assembler = std::make_shared<TracerAssembler>(tracerProblem, gridGeometry, gridVariables, timeLoop);
+    auto assembler = std::make_shared<TracerAssembler>(tracerProblem, gridGeometry, gridVariables, timeLoop, xOld);
     assembler->setLinearSystem(A, r);
 
     // The following lines of code initialize the vtk output module, add the velocity output facility
@@ -277,9 +277,6 @@ int main(int argc, char** argv) try
     // [[codeblock]]
     timeLoop->start(); do
     {
-        // First we define the old solution as the solution of the previous time step for storage evaluations.
-        assembler->setPreviousSolution(xOld);
-
         // Then the linear system is assembled.
         Dune::Timer assembleTimer;
         assembler->assembleJacobianAndResidual(x);
diff --git a/examples/2pinfiltration/main.cc b/examples/2pinfiltration/main.cc
index 32b1fbbc18c472e27977bb5de14dd990f924bd85..1c8d0d0560459c48d68058de624b677f74535018 100644
--- a/examples/2pinfiltration/main.cc
+++ b/examples/2pinfiltration/main.cc
@@ -201,7 +201,7 @@ int main(int argc, char** argv) try
 
     //we set the assembler with the time loop because we have an instationary problem
     using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>;
-    auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop);
+    auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // we set the linear solver
     using LinearSolver = AMGBiCGSTABBackend<LinearSolverTraits<GridGeometry>>;
diff --git a/examples/shallowwaterfriction/main.cc b/examples/shallowwaterfriction/main.cc
index de91945bb9c23aa92dcb3118d2d53c95b05a6d5c..e3092b0eeccecb03cf1d6446e7f67db32063e61d 100644
--- a/examples/shallowwaterfriction/main.cc
+++ b/examples/shallowwaterfriction/main.cc
@@ -129,7 +129,7 @@ int main(int argc, char** argv) try
 
     //we set the assembler with the time loop because we have an instationary problem.
     using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>;
-    auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop);
+    auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // We set the linear solver.
     using LinearSolver = AMGBiCGSTABBackend<LinearSolverTraits<GridGeometry>>;
diff --git a/test/porousmediumflow/1pnc/implicit/1p3c/main.cc b/test/porousmediumflow/1pnc/implicit/1p3c/main.cc
index d39483e874960d2f8e5e7794cb8fa22e34fc8f58..1cee100c9ad7851eed75e520ca56bb420ebb1bab 100644
--- a/test/porousmediumflow/1pnc/implicit/1p3c/main.cc
+++ b/test/porousmediumflow/1pnc/implicit/1p3c/main.cc
@@ -124,7 +124,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, gridGeometry, gridVariables, timeLoop);
+    auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
     using LinearSolver = ILU0BiCGSTABBackend;
@@ -136,9 +136,6 @@ int main(int argc, char** argv) try
     // time loop
     timeLoop->start(); do
     {
-        // set previous solution for storage evaluations
-        assembler->setPreviousSolution(xOld);
-
         // solve the non-linear system with time step control
         nonLinearSolver.solve(x, *timeLoop);
 
diff --git a/test/porousmediumflow/2pncmin/implicit/nonisothermal/main.cc b/test/porousmediumflow/2pncmin/implicit/nonisothermal/main.cc
index e8602b480e01374d6f8836276151cf2659109537..901a83e646a42478f856e94439277012758e7ce0 100644
--- a/test/porousmediumflow/2pncmin/implicit/nonisothermal/main.cc
+++ b/test/porousmediumflow/2pncmin/implicit/nonisothermal/main.cc
@@ -163,7 +163,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, gridGeometry, gridVariables, timeLoop);
+    auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
 
     // the linear solver
     using LinearSolver = AMGBiCGSTABBackend<LinearSolverTraits<GridGeometry>>;
diff --git a/test/porousmediumflow/tracer/multiphase/main.cc b/test/porousmediumflow/tracer/multiphase/main.cc
index d95dbfd7d8b607f28f3d90583d590d92d9727cfd..bcc4a5d6843a1e12ceb57a5f591def7ab6f361ec 100644
--- a/test/porousmediumflow/tracer/multiphase/main.cc
+++ b/test/porousmediumflow/tracer/multiphase/main.cc
@@ -112,7 +112,7 @@ int main(int argc, char** argv) try
 
     //! the assembler with time loop for instationary problem
     using Assembler = FVAssembler<TypeTag, DiffMethod::numeric, /*implicit=*/false>;
-    auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop);
+    auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld);
     assembler->setPreviousSolution(xOld);
 
     //! the linear solver