diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 3003c979d5dc5722c2b307b99a2016a55e88d179..373792ddb6765373c36941a89a150045c381666d 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -5,12 +5,13 @@ set(SOURCE_FILES
   enumparser.cc
   fixedpointiterator.cc
   friction_writer.cc
+  rate.cc
+  rate/rateupdater.cc
   sand-wedge.cc
   sand-wedge-data/mygeometry.cc
   sand-wedge-data/mygrid.cc
   solverfactory.cc
   state.cc
-  timestepping.cc
   vtk.cc
 )
 
diff --git a/src/adaptivetimestepper.hh b/src/adaptivetimestepper.hh
index 48634e3684ec8e556bf4cf7fdcd77bc374561285..a6864a7c31e24545af043edf759eb24a8966fba7 100644
--- a/src/adaptivetimestepper.hh
+++ b/src/adaptivetimestepper.hh
@@ -8,13 +8,13 @@ std::pair<T1, T2> clonePair(std::pair<T1, T2> in) {
 template <class Factory, class UpdaterPair, class ErrorNorm>
 class AdaptiveTimeStepper {
   using StateUpdater = typename UpdaterPair::first_type::element_type;
-  using VelocityUpdater = typename UpdaterPair::second_type::element_type;
+  using RateUpdater = typename UpdaterPair::second_type::element_type;
   using Vector = typename Factory::Vector;
   using ConvexProblem = typename Factory::ConvexProblem;
   using Nonlinearity = typename ConvexProblem::NonlinearityType;
 
   using MyCoupledTimeStepper =
-      CoupledTimeStepper<Factory, StateUpdater, VelocityUpdater, ErrorNorm>;
+      CoupledTimeStepper<Factory, StateUpdater, RateUpdater, ErrorNorm>;
 
 public:
   AdaptiveTimeStepper(
diff --git a/src/coupledtimestepper.cc b/src/coupledtimestepper.cc
index 49d454e474d326d3a945ec578d82b973ddebabc3..1c12c5c99c0e4269853a23fc9e23845c4eb4da73 100644
--- a/src/coupledtimestepper.cc
+++ b/src/coupledtimestepper.cc
@@ -4,14 +4,13 @@
 
 #include "coupledtimestepper.hh"
 
-template <class Factory, class StateUpdater, class VelocityUpdater,
-          class ErrorNorm>
-CoupledTimeStepper<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::
+template <class Factory, class StateUpdater, class RateUpdater, class ErrorNorm>
+CoupledTimeStepper<Factory, StateUpdater, RateUpdater, ErrorNorm>::
     CoupledTimeStepper(double finalTime, Factory &factory,
                        Dune::ParameterTree const &parset,
                        std::shared_ptr<Nonlinearity> globalFriction,
                        std::shared_ptr<StateUpdater> stateUpdater,
-                       std::shared_ptr<VelocityUpdater> velocityUpdater,
+                       std::shared_ptr<RateUpdater> velocityUpdater,
                        ErrorNorm const &errorNorm,
                        std::function<void(double, Vector &)> externalForces)
     : finalTime_(finalTime),
@@ -23,11 +22,10 @@ CoupledTimeStepper<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::
       externalForces_(externalForces),
       errorNorm_(errorNorm) {}
 
-template <class Factory, class StateUpdater, class VelocityUpdater,
-          class ErrorNorm>
-FixedPointIterationCounter
-CoupledTimeStepper<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::step(
-    double relativeTime, double relativeTau) {
+template <class Factory, class StateUpdater, class RateUpdater, class ErrorNorm>
+FixedPointIterationCounter CoupledTimeStepper<
+    Factory, StateUpdater, RateUpdater, ErrorNorm>::step(double relativeTime,
+                                                         double relativeTau) {
   stateUpdater_->nextTimeStep();
   velocityUpdater_->nextTimeStep();
 
@@ -43,7 +41,7 @@ CoupledTimeStepper<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::step(
   stateUpdater_->setup(tau);
   velocityUpdater_->setup(ell, tau, newRelativeTime, velocityRHS,
                           velocityIterate, velocityMatrix);
-  FixedPointIterator<Factory, StateUpdater, VelocityUpdater, ErrorNorm>
+  FixedPointIterator<Factory, StateUpdater, RateUpdater, ErrorNorm>
       fixedPointIterator(factory_, parset_, globalFriction_, errorNorm_);
   auto const iterations =
       fixedPointIterator.run(stateUpdater_, velocityUpdater_, velocityMatrix,
diff --git a/src/coupledtimestepper.hh b/src/coupledtimestepper.hh
index a039829932757ed6d7abcd91dc84fb309a459eb9..98c4b0e971ccb44084a6a12dbd4ac334c3f0fd7f 100644
--- a/src/coupledtimestepper.hh
+++ b/src/coupledtimestepper.hh
@@ -7,8 +7,7 @@
 #include <dune/common/parametertree.hh>
 #include "fixedpointiterator.hh"
 
-template <class Factory, class StateUpdater, class VelocityUpdater,
-          class ErrorNorm>
+template <class Factory, class StateUpdater, class RateUpdater, class ErrorNorm>
 class CoupledTimeStepper {
   using Vector = typename Factory::Vector;
   using Matrix = typename Factory::Matrix;
@@ -20,7 +19,7 @@ class CoupledTimeStepper {
                      Dune::ParameterTree const &parset,
                      std::shared_ptr<Nonlinearity> globalFriction,
                      std::shared_ptr<StateUpdater> stateUpdater,
-                     std::shared_ptr<VelocityUpdater> velocityUpdater,
+                     std::shared_ptr<RateUpdater> velocityUpdater,
                      ErrorNorm const &errorNorm,
                      std::function<void(double, Vector &)> externalForces);
 
@@ -32,7 +31,7 @@ class CoupledTimeStepper {
   Dune::ParameterTree const &parset_;
   std::shared_ptr<Nonlinearity> globalFriction_;
   std::shared_ptr<StateUpdater> stateUpdater_;
-  std::shared_ptr<VelocityUpdater> velocityUpdater_;
+  std::shared_ptr<RateUpdater> velocityUpdater_;
   std::function<void(double, Vector &)> externalForces_;
   ErrorNorm const &errorNorm_;
 };
diff --git a/src/coupledtimestepper_tmpl.cc b/src/coupledtimestepper_tmpl.cc
index 33f448bdac63ece19511b737d286908b8d229d0d..059922fd0f0208c4eb4f1b48da1703f5a6d9d5dd 100644
--- a/src/coupledtimestepper_tmpl.cc
+++ b/src/coupledtimestepper_tmpl.cc
@@ -13,9 +13,9 @@
 #include "explicitgrid.hh"
 #include "explicitvectors.hh"
 
+#include "rate/rateupdater.hh"
 #include "solverfactory.hh"
 #include "state/stateupdater.hh"
-#include "timestepping.hh"
 
 using Function = Dune::VirtualFunction<double, double>;
 using Factory = SolverFactory<
@@ -23,9 +23,9 @@ using Factory = SolverFactory<
     MyBlockProblem<ConvexProblem<GlobalFriction<Matrix, Vector>, Matrix>>,
     Grid>;
 using MyStateUpdater = StateUpdater<ScalarVector, Vector>;
-using MyVelocityUpdater = TimeSteppingScheme<Vector, Matrix, Function, MY_DIM>;
+using MyRateUpdater = RateUpdater<Vector, Matrix, Function, MY_DIM>;
 
 using ErrorNorm = EnergyNorm<ScalarMatrix, ScalarVector>;
 
-template class CoupledTimeStepper<Factory, MyStateUpdater, MyVelocityUpdater,
+template class CoupledTimeStepper<Factory, MyStateUpdater, MyRateUpdater,
                                   ErrorNorm>;
diff --git a/src/fixedpointiterator.cc b/src/fixedpointiterator.cc
index 295574802fee524025492d400cde0a7258b445c5..67caf40c3b6fc068ff29f05d0c29fcd05430391b 100644
--- a/src/fixedpointiterator.cc
+++ b/src/fixedpointiterator.cc
@@ -13,9 +13,8 @@
 
 #include "fixedpointiterator.hh"
 
-template <class Factory, class StateUpdater, class VelocityUpdater,
-          class ErrorNorm>
-FixedPointIterator<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::
+template <class Factory, class StateUpdater, class RateUpdater, class ErrorNorm>
+FixedPointIterator<Factory, StateUpdater, RateUpdater, ErrorNorm>::
     FixedPointIterator(Factory &factory, Dune::ParameterTree const &parset,
                        std::shared_ptr<Nonlinearity> globalFriction,
                        ErrorNorm const &errorNorm)
@@ -30,14 +29,12 @@ FixedPointIterator<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::
       verbosity_(parset.get<Solver::VerbosityMode>("v.solver.verbosity")),
       errorNorm_(errorNorm) {}
 
-template <class Factory, class StateUpdater, class VelocityUpdater,
-          class ErrorNorm>
+template <class Factory, class StateUpdater, class RateUpdater, class ErrorNorm>
 FixedPointIterationCounter
-FixedPointIterator<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::run(
+FixedPointIterator<Factory, StateUpdater, RateUpdater, ErrorNorm>::run(
     std::shared_ptr<StateUpdater> stateUpdater,
-    std::shared_ptr<VelocityUpdater> velocityUpdater,
-    Matrix const &velocityMatrix, Vector const &velocityRHS,
-    Vector &velocityIterate) {
+    std::shared_ptr<RateUpdater> velocityUpdater, Matrix const &velocityMatrix,
+    Vector const &velocityRHS, Vector &velocityIterate) {
   EnergyNorm<Matrix, Vector> energyNorm(velocityMatrix);
   LoopSolver<Vector> velocityProblemSolver(step_.get(), velocityMaxIterations_,
                                            velocityTolerance_, &energyNorm,
diff --git a/src/fixedpointiterator.hh b/src/fixedpointiterator.hh
index 56ba7f28bce2c5e1ef9dd09bd623de1a2f934e53..7543b12e27f52e9b25f7033d798e557862f5e07d 100644
--- a/src/fixedpointiterator.hh
+++ b/src/fixedpointiterator.hh
@@ -16,8 +16,7 @@ struct FixedPointIterationCounter {
 std::ostream &operator<<(std::ostream &stream,
                          FixedPointIterationCounter const &fpic);
 
-template <class Factory, class StateUpdater, class VelocityUpdater,
-          class ErrorNorm>
+template <class Factory, class StateUpdater, class RateUpdater, class ErrorNorm>
 class FixedPointIterator {
   using ScalarVector = typename StateUpdater::ScalarVector;
   using Vector = typename Factory::Vector;
@@ -31,11 +30,11 @@ class FixedPointIterator {
                      std::shared_ptr<Nonlinearity> globalFriction,
                      ErrorNorm const &errorNorm_);
 
-  FixedPointIterationCounter run(
-      std::shared_ptr<StateUpdater> stateUpdater,
-      std::shared_ptr<VelocityUpdater> velocityUpdater,
-      Matrix const &velocityMatrix, Vector const &velocityRHS,
-      Vector &velocityIterate);
+  FixedPointIterationCounter run(std::shared_ptr<StateUpdater> stateUpdater,
+                                 std::shared_ptr<RateUpdater> velocityUpdater,
+                                 Matrix const &velocityMatrix,
+                                 Vector const &velocityRHS,
+                                 Vector &velocityIterate);
 
 private:
   std::shared_ptr<typename Factory::Step> step_;
diff --git a/src/fixedpointiterator_tmpl.cc b/src/fixedpointiterator_tmpl.cc
index 5004029355128d59f91b677cb0574e22fdddf991..c39287d6a800a80e22da26f430af6b702b8a3536 100644
--- a/src/fixedpointiterator_tmpl.cc
+++ b/src/fixedpointiterator_tmpl.cc
@@ -13,9 +13,9 @@
 #include "explicitgrid.hh"
 #include "explicitvectors.hh"
 
+#include "rate/rateupdater.hh"
 #include "solverfactory.hh"
 #include "state/stateupdater.hh"
-#include "timestepping.hh"
 
 using Function = Dune::VirtualFunction<double, double>;
 using Factory = SolverFactory<
@@ -23,9 +23,9 @@ using Factory = SolverFactory<
     MyBlockProblem<ConvexProblem<GlobalFriction<Matrix, Vector>, Matrix>>,
     Grid>;
 using MyStateUpdater = StateUpdater<ScalarVector, Vector>;
-using MyVelocityUpdater = TimeSteppingScheme<Vector, Matrix, Function, MY_DIM>;
+using MyRateUpdater = RateUpdater<Vector, Matrix, Function, MY_DIM>;
 
 using ErrorNorm = EnergyNorm<ScalarMatrix, ScalarVector>;
 
-template class FixedPointIterator<Factory, MyStateUpdater, MyVelocityUpdater,
+template class FixedPointIterator<Factory, MyStateUpdater, MyRateUpdater,
                                   ErrorNorm>;
diff --git a/src/rate.cc b/src/rate.cc
new file mode 100644
index 0000000000000000000000000000000000000000..eaa69fb17645a8e48262867289fe138a375e9362
--- /dev/null
+++ b/src/rate.cc
@@ -0,0 +1,31 @@
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "rate.hh"
+#include "rate/newmark.cc"
+#include "rate/backward_euler.cc"
+
+template <class Vector, class Matrix, class Function, int dimension>
+std::shared_ptr<RateUpdater<Vector, Matrix, Function, dimension>>
+initRateUpdater(Config::scheme scheme,
+                Function const &velocityDirichletFunction,
+                Dune::BitSetVector<dimension> const &velocityDirichletNodes,
+                Matrices<Matrix> const &matrices, Vector const &u_initial,
+                Vector const &v_initial, Vector const &a_initial) {
+  switch (scheme) {
+    case Config::Newmark:
+      return std::make_shared<Newmark<Vector, Matrix, Function, dimension>>(
+          matrices, u_initial, v_initial, a_initial, velocityDirichletNodes,
+          velocityDirichletFunction);
+    case Config::BackwardEuler:
+      return std::make_shared<
+          BackwardEuler<Vector, Matrix, Function, dimension>>(
+          matrices, u_initial, v_initial, a_initial, velocityDirichletNodes,
+          velocityDirichletFunction);
+    default:
+      assert(false);
+  }
+}
+
+#include "rate_tmpl.cc"
diff --git a/src/rate.hh b/src/rate.hh
new file mode 100644
index 0000000000000000000000000000000000000000..b5fe8b3021548bd4baa0fa641167f558ff222826
--- /dev/null
+++ b/src/rate.hh
@@ -0,0 +1,16 @@
+#ifndef SRC_RATE_HH
+#define SRC_RATE_HH
+
+#include <memory>
+
+#include "enums.hh"
+#include "rate/rateupdater.hh"
+
+template <class Vector, class Matrix, class Function, int dimension>
+std::shared_ptr<RateUpdater<Vector, Matrix, Function, dimension>>
+initRateUpdater(Config::scheme scheme,
+                Function const &velocityDirichletFunction,
+                Dune::BitSetVector<dimension> const &velocityDirichletNodes,
+                Matrices<Matrix> const &matrices, Vector const &u_initial,
+                Vector const &v_initial, Vector const &a_initial);
+#endif
diff --git a/src/timestepping/backward_euler.cc b/src/rate/backward_euler.cc
similarity index 95%
rename from src/timestepping/backward_euler.cc
rename to src/rate/backward_euler.cc
index e9d672194cba6e4fd5b010e15cbcb4f7f5cceede..6664f02b7dd11f266c7729dc18a1fe952312701d 100644
--- a/src/timestepping/backward_euler.cc
+++ b/src/rate/backward_euler.cc
@@ -1,12 +1,14 @@
 #include <dune/solvers/common/arithmetic.hh>
 
+#include "backward_euler.hh"
+
 template <class Vector, class Matrix, class Function, size_t dim>
 BackwardEuler<Vector, Matrix, Function, dim>::BackwardEuler(
     Matrices<Matrix> const &_matrices, Vector const &_u_initial,
     Vector const &_v_initial, Vector const &_a_initial,
     Dune::BitSetVector<dim> const &_dirichletNodes,
     Function const &_dirichletFunction)
-    : TimeSteppingScheme<Vector, Matrix, Function, dim>(
+    : RateUpdater<Vector, Matrix, Function, dim>(
           _matrices, _u_initial, _v_initial, _a_initial, _dirichletNodes,
           _dirichletFunction) {}
 
@@ -84,7 +86,7 @@ void BackwardEuler<Vector, Matrix, Function, dim>::postProcess(
 }
 
 template <class Vector, class Matrix, class Function, size_t dim>
-std::shared_ptr<TimeSteppingScheme<Vector, Matrix, Function, dim>>
+std::shared_ptr<RateUpdater<Vector, Matrix, Function, dim>>
 BackwardEuler<Vector, Matrix, Function, dim>::clone() const {
   return std::make_shared<BackwardEuler<Vector, Matrix, Function, dim>>(*this);
 }
diff --git a/src/timestepping/backward_euler.hh b/src/rate/backward_euler.hh
similarity index 66%
rename from src/timestepping/backward_euler.hh
rename to src/rate/backward_euler.hh
index 09ec584d1307d2a5f4d98271616b44060e20a313..0955f89e19db0300cedcbd5c09895bffce835ff6 100644
--- a/src/timestepping/backward_euler.hh
+++ b/src/rate/backward_euler.hh
@@ -1,8 +1,8 @@
-#ifndef SRC_TIMESTEPPING_BACKWARD_EULER_HH
-#define SRC_TIMESTEPPING_BACKWARD_EULER_HH
+#ifndef SRC_RATE_BACKWARD_EULER_HH
+#define SRC_RATE_BACKWARD_EULER_HH
 
 template <class Vector, class Matrix, class Function, size_t dim>
-class BackwardEuler : public TimeSteppingScheme<Vector, Matrix, Function, dim> {
+class BackwardEuler : public RateUpdater<Vector, Matrix, Function, dim> {
 public:
   BackwardEuler(Matrices<Matrix> const &_matrices, Vector const &_u_initial,
                 Vector const &_v_initial, Vector const &_a_initial,
@@ -13,8 +13,7 @@ class BackwardEuler : public TimeSteppingScheme<Vector, Matrix, Function, dim> {
              Matrix &) override;
   void postProcess(Vector const &) override;
 
-  std::shared_ptr<TimeSteppingScheme<Vector, Matrix, Function, dim>> clone()
-      const;
+  std::shared_ptr<RateUpdater<Vector, Matrix, Function, dim>> clone() const;
 
 private:
 };
diff --git a/src/timestepping/newmark.cc b/src/rate/newmark.cc
similarity index 96%
rename from src/timestepping/newmark.cc
rename to src/rate/newmark.cc
index 227f8ba1e3eeb0dcec3be7ea810a9871b601ba9e..990768585c4f7162c87977704c9f0a5f59ecda55 100644
--- a/src/timestepping/newmark.cc
+++ b/src/rate/newmark.cc
@@ -1,12 +1,14 @@
 #include <dune/solvers/common/arithmetic.hh>
 
+#include "newmark.hh"
+
 template <class Vector, class Matrix, class Function, size_t dim>
 Newmark<Vector, Matrix, Function, dim>::Newmark(
     Matrices<Matrix> const &_matrices, Vector const &_u_initial,
     Vector const &_v_initial, Vector const &_a_initial,
     Dune::BitSetVector<dim> const &_dirichletNodes,
     Function const &_dirichletFunction)
-    : TimeSteppingScheme<Vector, Matrix, Function, dim>(
+    : RateUpdater<Vector, Matrix, Function, dim>(
           _matrices, _u_initial, _v_initial, _a_initial, _dirichletNodes,
           _dirichletFunction) {}
 
@@ -94,7 +96,7 @@ void Newmark<Vector, Matrix, Function, dim>::postProcess(
 }
 
 template <class Vector, class Matrix, class Function, size_t dim>
-std::shared_ptr<TimeSteppingScheme<Vector, Matrix, Function, dim>>
+std::shared_ptr<RateUpdater<Vector, Matrix, Function, dim>>
 Newmark<Vector, Matrix, Function, dim>::clone() const {
   return std::make_shared<Newmark<Vector, Matrix, Function, dim>>(*this);
 }
diff --git a/src/timestepping/newmark.hh b/src/rate/newmark.hh
similarity index 66%
rename from src/timestepping/newmark.hh
rename to src/rate/newmark.hh
index f2a5d566bc96b49f1fa7f45d4bfd4244affcf3b7..8c8658c434afa297e4dc9940d1b722f7ab1c714a 100644
--- a/src/timestepping/newmark.hh
+++ b/src/rate/newmark.hh
@@ -1,8 +1,8 @@
-#ifndef SRC_TIMESTEPPING_NEWMARK_HH
-#define SRC_TIMESTEPPING_NEWMARK_HH
+#ifndef SRC_RATE_NEWMARK_HH
+#define SRC_RATE_NEWMARK_HH
 
 template <class Vector, class Matrix, class Function, size_t dim>
-class Newmark : public TimeSteppingScheme<Vector, Matrix, Function, dim> {
+class Newmark : public RateUpdater<Vector, Matrix, Function, dim> {
 public:
   Newmark(Matrices<Matrix> const &_matrices, Vector const &_u_initial,
           Vector const &_v_initial, Vector const &_a_initial,
@@ -13,7 +13,6 @@ class Newmark : public TimeSteppingScheme<Vector, Matrix, Function, dim> {
              Matrix &) override;
   void postProcess(Vector const &) override;
 
-  std::shared_ptr<TimeSteppingScheme<Vector, Matrix, Function, dim>> clone()
-      const;
+  std::shared_ptr<RateUpdater<Vector, Matrix, Function, dim>> clone() const;
 };
 #endif
diff --git a/src/timestepping.cc b/src/rate/rateupdater.cc
similarity index 70%
rename from src/timestepping.cc
rename to src/rate/rateupdater.cc
index f5cd258d006398119ae94954f8c3e75cc71f79de..2de879b3744708d05425f3400b9a192633c03053 100644
--- a/src/timestepping.cc
+++ b/src/rate/rateupdater.cc
@@ -2,10 +2,10 @@
 #include "config.h"
 #endif
 
-#include "timestepping.hh"
+#include "rateupdater.hh"
 
 template <class Vector, class Matrix, class Function, size_t dim>
-TimeSteppingScheme<Vector, Matrix, Function, dim>::TimeSteppingScheme(
+RateUpdater<Vector, Matrix, Function, dim>::RateUpdater(
     Matrices<Matrix> const &_matrices, Vector const &_u_initial,
     Vector const &_v_initial, Vector const &_a_initial,
     Dune::BitSetVector<dim> const &_dirichletNodes,
@@ -18,7 +18,7 @@ TimeSteppingScheme<Vector, Matrix, Function, dim>::TimeSteppingScheme(
       dirichletFunction(_dirichletFunction) {}
 
 template <class Vector, class Matrix, class Function, size_t dim>
-void TimeSteppingScheme<Vector, Matrix, Function, dim>::nextTimeStep() {
+void RateUpdater<Vector, Matrix, Function, dim>::nextTimeStep() {
   u_o = u;
   v_o = v;
   a_o = a;
@@ -26,7 +26,7 @@ void TimeSteppingScheme<Vector, Matrix, Function, dim>::nextTimeStep() {
 }
 
 template <class Vector, class Matrix, class Function, size_t dim>
-void TimeSteppingScheme<Vector, Matrix, Function, dim>::extractDisplacement(
+void RateUpdater<Vector, Matrix, Function, dim>::extractDisplacement(
     Vector &displacement) const {
   if (!postProcessCalled)
     DUNE_THROW(Dune::Exception, "It seems you forgot to call postProcess!");
@@ -35,7 +35,7 @@ void TimeSteppingScheme<Vector, Matrix, Function, dim>::extractDisplacement(
 }
 
 template <class Vector, class Matrix, class Function, size_t dim>
-void TimeSteppingScheme<Vector, Matrix, Function, dim>::extractVelocity(
+void RateUpdater<Vector, Matrix, Function, dim>::extractVelocity(
     Vector &velocity) const {
   if (!postProcessCalled)
     DUNE_THROW(Dune::Exception, "It seems you forgot to call postProcess!");
@@ -44,12 +44,11 @@ void TimeSteppingScheme<Vector, Matrix, Function, dim>::extractVelocity(
 }
 
 template <class Vector, class Matrix, class Function, size_t dim>
-void TimeSteppingScheme<Vector, Matrix, Function, dim>::extractOldVelocity(
+void RateUpdater<Vector, Matrix, Function, dim>::extractOldVelocity(
     Vector &oldVelocity) const {
   oldVelocity = v_o;
 }
 
-#include "timestepping/backward_euler.cc"
-#include "timestepping/newmark.cc"
-
-#include "timestepping_tmpl.cc"
+#include "backward_euler.cc"
+#include "newmark.cc"
+#include "rateupdater_tmpl.cc"
diff --git a/src/rate/rateupdater.hh b/src/rate/rateupdater.hh
new file mode 100644
index 0000000000000000000000000000000000000000..7b382e2e533e26341fe8d257b7771f1df90310c7
--- /dev/null
+++ b/src/rate/rateupdater.hh
@@ -0,0 +1,43 @@
+#ifndef SRC_RATE_RATEUPDATER_HH
+#define SRC_RATE_RATEUPDATER_HH
+
+#include <memory>
+
+#include <dune/common/bitsetvector.hh>
+
+#include "../matrices.hh"
+
+template <class Vector, class Matrix, class Function, size_t dim>
+class RateUpdater {
+protected:
+  RateUpdater(Matrices<Matrix> const &_matrices, Vector const &_u_initial,
+              Vector const &_v_initial, Vector const &_a_initial,
+              Dune::BitSetVector<dim> const &_dirichletNodes,
+              Function const &_dirichletFunction);
+
+public:
+  void nextTimeStep();
+  void virtual setup(Vector const &ell, double _tau, double relativeTime,
+                     Vector &rhs, Vector &iterate, Matrix &AB) = 0;
+
+  void virtual postProcess(Vector const &iterate) = 0;
+  void extractDisplacement(Vector &displacement) const;
+  void extractVelocity(Vector &velocity) const;
+  void extractOldVelocity(Vector &velocity) const;
+
+  std::shared_ptr<RateUpdater<Vector, Matrix, Function, dim>> virtual clone()
+      const = 0;
+
+protected:
+  Matrices<Matrix> const &matrices;
+  Vector u, v, a;
+  Dune::BitSetVector<dim> const &dirichletNodes;
+  Function const &dirichletFunction;
+  double dirichletValue;
+
+  Vector u_o, v_o, a_o;
+  double tau;
+
+  bool postProcessCalled = true;
+};
+#endif
diff --git a/src/timestepping_tmpl.cc b/src/rate/rateupdater_tmpl.cc
similarity index 72%
rename from src/timestepping_tmpl.cc
rename to src/rate/rateupdater_tmpl.cc
index b9e86274e99137a41e9593f87dacdcbb0ae7484d..0537ce57bdf1f3e7cfd9d2590652cfc919a854fd 100644
--- a/src/timestepping_tmpl.cc
+++ b/src/rate/rateupdater_tmpl.cc
@@ -4,10 +4,10 @@
 
 #include <dune/common/function.hh>
 
-#include "explicitvectors.hh"
+#include "../explicitvectors.hh"
 
 using Function = Dune::VirtualFunction<double, double>;
 
-template class TimeSteppingScheme<Vector, Matrix, Function, MY_DIM>;
+template class RateUpdater<Vector, Matrix, Function, MY_DIM>;
 template class Newmark<Vector, Matrix, Function, MY_DIM>;
 template class BackwardEuler<Vector, Matrix, Function, MY_DIM>;
diff --git a/src/rate_tmpl.cc b/src/rate_tmpl.cc
new file mode 100644
index 0000000000000000000000000000000000000000..51788ed329971dcbf56e745f46fdee252be42db9
--- /dev/null
+++ b/src/rate_tmpl.cc
@@ -0,0 +1,12 @@
+#include <dune/common/function.hh>
+
+#include "explicitvectors.hh"
+
+using Function = Dune::VirtualFunction<double, double>;
+
+template std::shared_ptr<RateUpdater<Vector, Matrix, Function, MY_DIM>>
+initRateUpdater<Vector, Matrix, Function, MY_DIM>(
+    Config::scheme scheme, Function const &velocityDirichletFunction,
+    Dune::BitSetVector<MY_DIM> const &velocityDirichletNodes,
+    Matrices<Matrix> const &matrices, Vector const &u_initial,
+    Vector const &v_initial, Vector const &a_initial);
diff --git a/src/sand-wedge.cc b/src/sand-wedge.cc
index af0fe30b561556be77a833600d57787f28068c14..dab96e4fa0ba0208fffdaac61046e97307671121 100644
--- a/src/sand-wedge.cc
+++ b/src/sand-wedge.cc
@@ -60,6 +60,7 @@
 #include "friction_writer.hh"
 #include "gridselector.hh"
 #include "matrices.hh"
+#include "rate.hh"
 #include "sand-wedge-data/mybody.hh"
 #include "sand-wedge-data/mygeometry.hh"
 #include "sand-wedge-data/myglobalfrictiondata.hh"
@@ -68,7 +69,6 @@
 #include "sand-wedge-data/weakpatch.hh"
 #include "solverfactory.hh"
 #include "state.hh"
-#include "timestepping.hh"
 #include "vtk.hh"
 
 size_t const dims = MY_DIM;
@@ -346,16 +346,16 @@ int main(int argc, char *argv[]) {
         Grid>;
     NonlinearFactory factory(parset.sub("solver.tnnmg"), *grid, dirichletNodes);
 
-    using UpdaterPair = std::pair<
-        std::shared_ptr<StateUpdater<ScalarVector, Vector>>,
-        std::shared_ptr<TimeSteppingScheme<Vector, Matrix, Function, dims>>>;
+    using UpdaterPair =
+        std::pair<std::shared_ptr<StateUpdater<ScalarVector, Vector>>,
+                  std::shared_ptr<RateUpdater<Vector, Matrix, Function, dims>>>;
     UpdaterPair current(
         initStateUpdater<ScalarVector, Vector>(
             parset.get<Config::stateModel>("boundary.friction.stateModel"),
             alpha_initial, frictionalNodes,
             parset.get<double>("boundary.friction.L"),
             parset.get<double>("boundary.friction.V0")),
-        initTimeStepper(parset.get<Config::scheme>("timeSteps.scheme"),
+        initRateUpdater(parset.get<Config::scheme>("timeSteps.scheme"),
                         velocityDirichletFunction, dirichletNodes, matrices,
                         u_initial, v_initial, a_initial));
 
diff --git a/src/timestepping.hh b/src/timestepping.hh
deleted file mode 100644
index cd6fec8554d1940da3b38a6a83d1e94c601f0d6b..0000000000000000000000000000000000000000
--- a/src/timestepping.hh
+++ /dev/null
@@ -1,70 +0,0 @@
-#ifndef SRC_TIMESTEPPING_HH
-#define SRC_TIMESTEPPING_HH
-
-#include <memory>
-
-#include <dune/common/bitsetvector.hh>
-
-#include "enums.hh"
-#include "matrices.hh"
-
-template <class Vector, class Matrix, class Function, size_t dim>
-class TimeSteppingScheme {
-protected:
-  TimeSteppingScheme(Matrices<Matrix> const &_matrices,
-                     Vector const &_u_initial, Vector const &_v_initial,
-                     Vector const &_a_initial,
-                     Dune::BitSetVector<dim> const &_dirichletNodes,
-                     Function const &_dirichletFunction);
-
-public:
-  void nextTimeStep();
-  void virtual setup(Vector const &ell, double _tau, double relativeTime,
-                     Vector &rhs, Vector &iterate, Matrix &AB) = 0;
-
-  void virtual postProcess(Vector const &iterate) = 0;
-  void extractDisplacement(Vector &displacement) const;
-  void extractVelocity(Vector &velocity) const;
-  void extractOldVelocity(Vector &velocity) const;
-
-  std::shared_ptr<TimeSteppingScheme<Vector, Matrix, Function,
-                                     dim>> virtual clone() const = 0;
-
-protected:
-  Matrices<Matrix> const &matrices;
-  Vector u, v, a;
-  Dune::BitSetVector<dim> const &dirichletNodes;
-  Function const &dirichletFunction;
-  double dirichletValue;
-
-  Vector u_o, v_o, a_o;
-  double tau;
-
-  bool postProcessCalled = true;
-};
-
-#include "timestepping/newmark.hh"
-#include "timestepping/backward_euler.hh"
-
-template <class Vector, class Matrix, class Function, int dimension>
-std::shared_ptr<TimeSteppingScheme<Vector, Matrix, Function, dimension>>
-initTimeStepper(Config::scheme scheme,
-                Function const &velocityDirichletFunction,
-                Dune::BitSetVector<dimension> const &velocityDirichletNodes,
-                Matrices<Matrix> const &matrices, Vector const &u_initial,
-                Vector const &v_initial, Vector const &a_initial) {
-  switch (scheme) {
-    case Config::Newmark:
-      return std::make_shared<Newmark<Vector, Matrix, Function, dimension>>(
-          matrices, u_initial, v_initial, a_initial, velocityDirichletNodes,
-          velocityDirichletFunction);
-    case Config::BackwardEuler:
-      return std::make_shared<
-          BackwardEuler<Vector, Matrix, Function, dimension>>(
-          matrices, u_initial, v_initial, a_initial, velocityDirichletNodes,
-          velocityDirichletFunction);
-    default:
-      assert(false);
-  }
-}
-#endif