diff --git a/data/generated/events1.csv b/data/generated/events1.csv
new file mode 100644
index 0000000000000000000000000000000000000000..39ddcc413264bddc2f7ba692707a059b8650245a
--- /dev/null
+++ b/data/generated/events1.csv
@@ -0,0 +1,10 @@
+start,end,peakSlipRate,ruptureWidth
+26.75999999999787,26.784999999997865,0.027083990074991897,0.7066604616124774
+28.98999999999762,29.049999999997617,0.03226818570782891,0.7066460434893268
+31.56499999999734,31.614999999997334,0.042600764506162535,0.7065953907642707
+34.18999999999705,34.24499999999704,0.039804029857929246,0.7065001704582403
+36.69999999999678,36.75499999999677,0.04534969591160434,0.7063800319864028
+39.32999999999648,39.39499999999648,0.038848015455120025,0.7062439809396165
+42.71999999999611,42.7699999999961,0.04713727822866609,0.7063968867127027
+45.77499999999578,45.83999999999577,0.04896737991925046,0.7064612510276674
+48.69499999999545,48.75499999999545,0.04528040064825157,0.7062545440454634
diff --git a/data/tools/2d_event_writer.py b/data/tools/2d_event_writer.py
index f79edf660786f0443b772ec6cdbbd2a52262e533..6d4e34f6498094abb511042b4de594ebd211eb2f 100644
--- a/data/tools/2d_event_writer.py
+++ b/data/tools/2d_event_writer.py
@@ -4,6 +4,9 @@ import numpy as np
 import csv
 import h5py
 
+from support.io import read_h5file
+from support.io import read_params
+
 from support.maximum import maximum
 from support.norm import norm
 from support.find_quakes import find_quakes
@@ -11,20 +14,10 @@ from support.slip_beginnings import slip_beginnings
 from support.slip_endings import slip_endings
 from support.max_distance import max_distance
 
-
-NBODIES = 2
-FINAL_TIME = 1000  # s
-FINAL_VELOCITY = 1e-5  # m/s
-THRESHOLD_VELOCITY = 0.5*FINAL_VELOCITY  # 1000e-6 + FINAL_VELOCITY
-
-TANGENTIAL_COORDS = 1
-
-# read config ini
+# read outpath from config ini
 config = cp.ConfigParser()
-config_path = os.path.join('config.ini')
+config_path = os.path.join('tools/config.ini')
 config.read(config_path)
-sim_path = config.get('directories', 'simulation')
-exp_path = config.get('directories', 'experiment')
 out_path = config.get('directories', 'output')
 
 # create output directory
@@ -32,12 +25,27 @@ out_dir = os.path.join(out_path)
 if not os.path.exists(out_dir):
     os.mkdir(out_dir)
 
-h5path = os.path.join(sim_path)
-h5file = h5py.File(os.path.join(h5path, 'output.h5'), 'r')
+# read problem parameters
+params = read_params('strikeslip.cfg')
+
+TANGENTIAL_COORDS = 1
+FINAL_TIME = params['finalTime']
+NBODIES = params['bodyCount']
+THRESHOLD_VELOCITY = 1e-3 
+
+h5file = read_h5file()
+#print(list(h5file.keys()))
+
+interval = [0.5*FINAL_TIME, FINAL_TIME]
 
 # read time
-relative_time = np.array(h5file['relativeTime'])
-real_time = relative_time * FINAL_TIME
+time = np.array(h5file['relativeTime']) * FINAL_TIME
+time = np.delete(time, 0)
+if len(interval) == 0:
+    interval = [0, FINAL_TIME]
+t = [i for i in range(len(time)) if time[i]>=interval[0] and time[i]<=interval[1]]
+#t = t[::5]
+time = time[t]
 
 for body_ID in range(NBODIES):
     body = 'body' + str(body_ID)
@@ -48,14 +56,19 @@ for body_ID in range(NBODIES):
     # read data
     coordinates = np.array(h5file[body + '/coordinates'])
     displacement = np.array(h5file[body + '/displacement'])
+    
     velocity = np.array(h5file[body + '/velocity'])
+    #print(velocity[t,:,TANGENTIAL_COORDS:])
+    rate = np.linalg.norm(velocity[t,:,TANGENTIAL_COORDS:], axis=2)
+    #print(rate)
+    avg_rate = np.average(rate, axis=1)
+    max_rate = np.max(rate, axis=1)
+    print(avg_rate)
 
     num_vertices = displacement.shape[1]
-    velocity_norm = norm(velocity[:, :, TANGENTIAL_COORDS:])
-    maximum_velocity = maximum(velocity_norm)
 
-    [quake_starts, quake_ends] = find_quakes(THRESHOLD_VELOCITY,
-                                             maximum_velocity)
+    [quake_starts, quake_ends] = find_quakes(avg_rate, THRESHOLD_VELOCITY)
+    print("Number of quakes: " + str(len(quake_starts)))
 
     quakes = {}
     for quake_ID in range(len(quake_starts)):
@@ -63,23 +76,23 @@ for body_ID in range(NBODIES):
         quake_end = int(quake_ends[quake_ID])
 
         quake = {}
-        quake['start'] = real_time[quake_start]
-        quake['end'] = real_time[quake_end]
+        quake['start'] = time[quake_start]
+        quake['end'] = time[quake_end]
 
-        local_slipping_times = velocity_norm[quake_start:quake_end, :] \
+        local_slipping_times = rate[quake_start:quake_end, :] \
             > THRESHOLD_VELOCITY
         quake_displacement = displacement[quake_start:quake_end, :, :]
-        slip = np.zeros(num_vertices)
+        #slip = np.zeros(num_vertices)
 
-        for i in range(num_vertices):
-            if any(local_slipping_times[:, i]):
-                starts = slip_beginnings(local_slipping_times[:, i])
-                ends = slip_endings(local_slipping_times[:, i])
-                slip[i] = np.linalg.norm(quake_displacement[ends, i, :]
-                                         - quake_displacement[starts, i, :])
+        # for i in range(num_vertices):
+        #     if any(local_slipping_times[:, i]):
+        #         starts = slip_beginnings(local_slipping_times[:, i])
+        #         ends = slip_endings(local_slipping_times[:, i])
+        #         slip[i] = np.linalg.norm(quake_displacement[ends, i, :]
+        #                                  - quake_displacement[starts, i, :])
 
-        quake['peakSlip'] = max(slip)
-        quake['peakSlipRate'] = max(maximum_velocity[quake_start:quake_end])
+        # quake['peakSlip'] = max(slip)
+        quake['peakSlipRate'] = max(max_rate[quake_start:quake_end])
 
         max_rupture_width = 0
         for time_step in range(local_slipping_times.shape[0]):
diff --git a/data/tools/config.ini b/data/tools/config.ini
index 0d5e43204cf1209fe9eea0435f41b1e11a335396..053017c1bb8accdfe5279a84acde4dfb8eb5931e 100644
--- a/data/tools/config.ini
+++ b/data/tools/config.ini
@@ -4,6 +4,6 @@
  #/home/joscha/Downloads/
 
 [directories]
-simulation = /home/joscha/software/dune/build-release/dune-tectonic/src/multi-body-problem/output/newmark/
+simulation = /home/joscha/software/dune/build-release/dune-tectonic/src/strikeslip/output/newmark-uniform-1e4
 experiment = ~/group/publications/2016-RosenauCorbiDominguezRudolfRitterPipping
 output     = generated
diff --git a/data/tools/main.py b/data/tools/main.py
index 332d2747e5e047d77d2ed747209bb5a142c9153d..7bb3eef822c981c53c2c45b9afac320a350f6c08 100644
--- a/data/tools/main.py
+++ b/data/tools/main.py
@@ -43,7 +43,7 @@ params = read_params('strikeslip.cfg')
 TANGENTIAL_COORDS = 1
 FINAL_TIME = params['finalTime']
 NBODIES = params['bodyCount']
-THRESHOLD_VELOCITY = 1e-3 
+THRESHOLD_VELOCITY = 1e-2 
 
 h5file = read_h5file()
 print(list(h5file.keys()))
@@ -66,7 +66,7 @@ for body_ID in range(NBODIES):
     friction_stats(h5file, body_ID, FINAL_TIME, patch, interval)
     #slip_rates(h5file, body_ID, FINAL_TIME, patch, interval, TANGENTIAL_COORDS)
 
-    [quake_starts, quake_ends] = find_quakes(h5file, body_ID, FINAL_TIME, patch, interval, THRESHOLD_VELOCITY, TANGENTIAL_COORDS)
+    #[quake_starts, quake_ends] = find_quakes(h5file, body_ID, FINAL_TIME, patch, interval, THRESHOLD_VELOCITY, TANGENTIAL_COORDS)
 plt.show()
 
 h5file.close()
\ No newline at end of file
diff --git a/data/tools/support/find_quakes.py b/data/tools/support/find_quakes.py
index 81e57ce259326255357f6b82cc35c02f83db661d..380dd6821f1ae60d56d7fb91ff63320f6d537af8 100644
--- a/data/tools/support/find_quakes.py
+++ b/data/tools/support/find_quakes.py
@@ -11,42 +11,21 @@ def peak_slip(quake_start, quake_end, velocities):
 
 #def rupture_width
 
-def find_quakes(h5file, body_ID, FINAL_TIME, patch, interval, threshold_velocity, tangential_coords):
-    body = 'body' + str(body_ID)   # 'frictionalBoundary'     'body' + str(body_ID)
-
-    coords = np.array(h5file[body + '/coordinates'])
-    if len(patch) == 0:
-        patch = np.linspace(0, len(coords)-1, len(coords), endpoint=True, dtype='int8')
-
-    # read time
-    time = np.array(h5file['relativeTime']) * FINAL_TIME
-    time = np.delete(time, 0)
-    if len(interval) == 0:
-        interval = [0, FINAL_TIME]
-    t = [i for i in range(len(time)) if time[i]>=interval[0] and time[i]<=interval[1]]
-    #t = t[::5]
-    time = time[t]
-
-    # velocity data
-    v = abs(np.array(h5file[body + '/velocity']))
-    v_t = v[t,:,tangential_coords]
-    v_tx = v_t[:,patch]
-    avg_v = np.average(v_tx, axis=1)
-
-    slipping_times = avg_v > threshold_velocity
+def find_quakes(rate, threshold_rate):
+    slipping_times = rate > threshold_rate
 
     quake_starts = slip_beginnings(slipping_times)
     quake_ends = slip_endings(slipping_times)
 
-    #print(quake_starts)
-    #print(quake_ends)
+    print(quake_starts)
+    print(quake_ends)
 
     # remove incomplete quakes
     min_len = min(len(quake_starts), len(quake_ends))
     quake_ends = quake_ends[0:min_len]
     quake_starts = quake_starts[0:min_len]
 
-    print("Number of quakes: " + str(min_len))
+    return [quake_starts, quake_ends]
 
     peak_v = np.zeros(min_len)
     quake_times = np.zeros(min_len)
@@ -59,4 +38,4 @@ def find_quakes(h5file, body_ID, FINAL_TIME, patch, interval, threshold_velocity
         recurrence_time[i] = time[int(quake_times[i+1])] - time[int(quake_times[i])]
     print("recurrence time: " + str(recurrence_time.mean()) + " +- " + str(recurrence_time.std()))
 
-    return [quake_starts, quake_ends]
+