diff --git a/ProcessLib/GroundwaterFlowProcess.h b/ProcessLib/GroundwaterFlowProcess.h
index c3de05908d864d59de47addd40984da4890d9720..c0387c5a90904d22d6943b44e42af3498581cc6a 100644
--- a/ProcessLib/GroundwaterFlowProcess.h
+++ b/ProcessLib/GroundwaterFlowProcess.h
@@ -243,7 +243,7 @@ public:
         }
     }
 
-    void solve()
+    bool solve(const double /*delta_t*/) override
     {
         DBUG("Solve GroundwaterFlowProcess.");
 
@@ -263,6 +263,8 @@ public:
 
         typename GlobalSetup::LinearSolver linearSolver(*_A);
         linearSolver.solve(*_rhs, *_x);
+
+        return true;
     }
 
     void post(std::string const& file_name)
@@ -295,6 +297,11 @@ public:
         vtu_interface.writeToFile(file_name);
     }
 
+    void postTimestep(std::string const& file_name, const unsigned /*timestep*/) override
+    {
+        post(file_name);
+    }
+
     ~GroundwaterFlowProcess()
     {
         for (auto p : _neumann_bcs)
diff --git a/ProcessLib/Process.h b/ProcessLib/Process.h
index 5d91b607ebe4a15ae88af3d9060e3e625b6bdb65..e96d46f74eeecc88bde7e4dd8551c72528547753 100644
--- a/ProcessLib/Process.h
+++ b/ProcessLib/Process.h
@@ -30,11 +30,12 @@ public:
     virtual ~Process() = default;
 
     virtual void initialize() = 0;
-    virtual void solve() = 0;
+    virtual bool solve(const double delta_t) = 0;
 
     /// Postprocessing after solve().
     /// The file_name is indicating the name of possible output file.
     virtual void post(std::string const& file_name) = 0;
+    virtual void postTimestep(std::string const& file_name, const unsigned timestep) = 0;
 
 protected:
     MeshLib::Mesh& _mesh;