diff --git a/LDDsimulation/LDDsimulation.py b/LDDsimulation/LDDsimulation.py
index fb412f3b872ee5114c3cc00d0ee82857fd6fb49c..850cfb5980ed89eb41911256631aa5d91d6af769 100644
--- a/LDDsimulation/LDDsimulation.py
+++ b/LDDsimulation/LDDsimulation.py
@@ -10,6 +10,12 @@ import mshr
 import domainPatch as dp
 import helpers as hlp
 import pandas as pd
+import sys
+# import errno
+import h5py
+from termcolor import colored
+
+
 
 
 class LDDsimulation(object):
@@ -147,7 +153,7 @@ class LDDsimulation(object):
             'absolute_tolerance': 1E-12,
             'relative_tolerance': 1E-10,
             'maximum_iterations': 1000,
-            'report': True
+            'report': False
         }
 
 
@@ -248,7 +254,32 @@ class LDDsimulation(object):
                   "Initialising simulation now ... ")
             self.initialise()
 
+        df.info(colored("Start time stepping","green"))
         # write initial values to file.
+        while self.t < self.T:
+            print(f"entering timestep t = self.t")
+            # check if the solver should beanalised or not.
+            if analyse_solver_at_times is not None and np.isin(self.t, analyse_solver_at_times):
+                self.LDDsolver(debug = False, analyse_timestep = True)
+            else:
+                self.LDDsolver(debug = False, analyse_timestep = False)
+
+            self.t += self.timestep_size
+            # write solutions to files.
+            for subdom_ind, subdomain in self.subdomain.items():
+                subdomain.write_solution_to_xdmf(#
+                    file = self.solution_file[subdom_ind], #
+                    time = self.t,#
+                    write_iter_for_fixed_time = False,
+                    )
+
+        df.info("Finished")
+        df.info("Elapsed time:"+str(timer.elapsed()[0]))
+        timer.stop()
+        # r_cons.close()
+        # energy.close()
+        df.list_timings(df.TimingClear.keep, [df.TimingType.wall, df.TimingType.system])
+        df.dump_timings_to_xml(self.output_dir+"timings.xml",df.TimingClear.keep)
 
 
     def LDDsolver(self, time: float = None, #
@@ -378,14 +409,13 @@ class LDDsimulation(object):
                     # write the newly calculated solution to the inteface dictionaries
                     # for communication
                     subdomain.write_pressure_to_interfaces()
+                    if analyse_timestep:
+                        subdomain.write_solution_to_xdmf(#
+                            file = solution_over_iteration_within_timestep[sd_index], #
+                            time = time,#
+                            write_iter_for_fixed_time = True,
+                            )#subsequent_errors = subsequent_errors_over_iteration[sd_index])
                     for phase in subdomain.has_phases:
-                        if analyse_timestep:
-                            subdomain.write_solution_to_xdmf(#
-                                file = solution_over_iteration_within_timestep[sd_index], #
-                                time = time,#
-                                write_iter_for_fixed_time = True,
-                                )#subsequent_errors = subsequent_errors_over_iteration[sd_index])
-
                         subdomain.pressure_prev_iter[phase].assign(
                             subdomain.pressure[phase]
                         )
@@ -720,7 +750,7 @@ class LDDsimulation(object):
                         lambda_param = self.lambda_param[subdom_num],#
                         relative_permeability = self.relative_permeability[subdom_num],#
                         saturation = self.saturation[subdom_num],#
-                        timestep_size = self.timestep_size[subdom_num],#
+                        timestep_size = self.timestep_size,#
                         tol = self.tol)
                     }
                 )
diff --git a/RR-2-patch-test-case/RR-2-patch-test.py b/RR-2-patch-test-case/RR-2-patch-test.py
index 4a4624ead2a738b6dfd30aa99b5bcd714e04a714..c61dff9c4b907843a6272aa7b9711271548d1675 100755
--- a/RR-2-patch-test-case/RR-2-patch-test.py
+++ b/RR-2-patch-test-case/RR-2-patch-test.py
@@ -84,15 +84,10 @@ isRichards = {
     2: True
     }
 
-Tmax = 2
-dt1 = 0.001
-dt2 = dt1
-# the timestep is taken as a dictionary to be able to run different timesteps on
-# different subdomains.
-timestep_size = {
-    1: dt1,
-    2: dt2
-}
+Tmax = 1
+timestep_size = 0.005
+
+time_interval = [0, Tmax]
 
 viscosity = {#
 # subdom_num : viscosity
@@ -114,8 +109,8 @@ L = {#
 
 lambda_param = {#
 # subdom_num : lambda parameter for the L-scheme
-    1 : {'wetting' :4},#
-    2 : {'wetting' :4}
+    1 : {'wetting' :100},#
+    2 : {'wetting' :100}
 }
 
 ## relative permeabilty functions on subdomain 1
@@ -171,8 +166,18 @@ exact_solution = {
 }
 
 # similary to the outer boundary dictionary, if a patch has no outer boundary
-# None should be written instead of an expression.
-dirichletBC = exact_solution
+# None should be written instead of an expression. This is a bit of a brainfuck:
+# dirichletBC[ind] gives a dictionary of the outer boundaries of subdomain ind.
+# Since a domain patch can have several disjoint outer boundary parts, the expressions
+# need to get an enumaration index which starts at 0. So dirichletBC[ind][j] is
+# the dictionary of outer dirichlet conditions of subdomain ind and boundary part j.
+# finally, dirichletBC[ind][j]['wetting'] and dirichletBC[ind][j]['nonwetting'] return
+# the actual expression needed for the dirichlet condition for both phases if present.
+dirichletBC = {
+#subdomain index: {outer boudary part index: {phase: expression}}
+    1: { 0: {'wetting': '1.0 - (1.0 + t*t)*(1.0 + x[0]*x[0] + x[1]*x[1])'}},
+    2: { 0: {'wetting': '1.0 - (1.0 + t*t)*(1.0 + x[1]*x[1])'}}
+}
 
 # def saturation(pressure, subdomain_index):
 #     # inverse capillary pressure-saturation-relationship
@@ -185,11 +190,11 @@ write_to_file = {
     'L_iterations': True
 }
 
-mesh_resolution = 100
+mesh_resolution = 30
 
 # initialise LDD simulation class
 simulation = ldd.LDDsimulation(tol = 1E-12)
-simulation.set_parameters(output_dir = "./",#
+simulation.set_parameters(output_dir = "./output/",#
     subdomain_def_points = subdomain_def_points,#
     isRichards = isRichards,#
     interface_def_points = interface_def_points,#
@@ -202,6 +207,7 @@ simulation.set_parameters(output_dir = "./",#
     lambda_param = lambda_param,#
     relative_permeability = relative_permeability,#
     saturation = sat_pressure_relationship,#
+    time_interval = time_interval,#
     timestep_size = timestep_size,#
     sources = source_expression,#
     initial_conditions = initial_condition,#
@@ -213,9 +219,9 @@ simulation.set_parameters(output_dir = "./",#
 simulation.initialise()
 # simulation._init_meshes_and_markers(subdomain_def_points, mesh_resolution=2)
 # subdomain marker functions
-output_dir = simulation.output_dir
-domain_marker = simulation.domain_marker
-mesh_subdomain = simulation.mesh_subdomain
+# output_dir = simulation.output_dir
+# domain_marker = simulation.domain_marker
+# mesh_subdomain = simulation.mesh_subdomain
 
 
 # mesh = mesh_subdomain[0]
@@ -229,17 +235,18 @@ mesh_subdomain = simulation.mesh_subdomain
 # interface.mark(interface_marker, 1)
 # simulation._init_interfaces(interface_def_points, adjacent_subdomains)
 
-interface = simulation.interface
-interface_marker = simulation.interface_marker
-
-subdoms = simulation.subdomain
+# interface = simulation.interface
+# interface_marker = simulation.interface_marker
+#
+# subdoms = simulation.subdomain
 
-df.File('./subdomain1_interface_marker.pvd') << simulation.subdomain[1].interface_marker
-df.File('./subdomain2_interface_marker.pvd') << simulation.subdomain[2].interface_marker
+# df.File('./subdomain1_interface_marker.pvd') << simulation.subdomain[1].interface_marker
+# df.File('./subdomain2_interface_marker.pvd') << simulation.subdomain[2].interface_marker
 # df.File('./test_subdomain1_boundary_marker.pvd') << boundary_marker1
 # df.File('./test_subdomain2_boundary_marker.pvd') << boundary_marker2
-
-simulation.LDDsolver(time = 0, debug = True)
+analyse_timesteps = [0, 100*timestep_size, 1, 2, 3]
+simulation.run(analyse_timesteps)
+# simulation.LDDsolver(time = 0, debug = True, analyse_timestep = True)
 # df.info(parameters, True)
 
 # for iterations in range(1):