diff --git a/data/tools/main.py b/data/tools/main.py
index 31aabba6a8716c47ef042cf2e834bc59ea7024b6..332d2747e5e047d77d2ed747209bb5a142c9153d 100644
--- a/data/tools/main.py
+++ b/data/tools/main.py
@@ -24,6 +24,8 @@ from support.iterations import iterations
 from support.friction_stats import friction_stats
 from support.slip_rates import slip_rates
 
+from support.find_quakes import find_quakes
+
 def build_patch(coords, percentage):
     x_coords = coords[:, 0]
     xmin = np.min(x_coords)
@@ -36,16 +38,17 @@ def build_patch(coords, percentage):
     return [i for i in range(len(x_coords)) if x_coords[i]>=xmin and x_coords[i]<=xmax]
 
 # read problem parameters
-params = read_params('multi-body-problem.cfg')
+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, FINAL_TIME] #[0.75*FINAL_TIME, FINAL_TIME]
+interval = [0.5*FINAL_TIME, FINAL_TIME]
 
 iterations(h5file, FINAL_TIME, interval)
 
@@ -58,9 +61,12 @@ for body_ID in range(NBODIES):
     coords = np.array(h5file[body + '/coordinates'])
     patch = build_patch(coords, 1.0)
 
+    print("patch length: " + str(len(patch)))
+
     friction_stats(h5file, body_ID, FINAL_TIME, patch, interval)
-    slip_rates(h5file, body_ID, FINAL_TIME, patch, interval, TANGENTIAL_COORDS)
+    #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)
 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 aa4653fd4384a89db8be9a258c882dc7583c1495..81e57ce259326255357f6b82cc35c02f83db661d 100644
--- a/data/tools/support/find_quakes.py
+++ b/data/tools/support/find_quakes.py
@@ -1,16 +1,62 @@
-from support.slip_beginnings import slip_beginnings
-from support.slip_endings import slip_endings
+import array as ar
+import numpy as np
 
+from .slip_beginnings import slip_beginnings
+from .slip_endings import slip_endings
 
-def find_quakes(threshold_velocity, maximum_velocities):
-    slipping_times = maximum_velocities > threshold_velocity
+def peak_slip(quake_start, quake_end, velocities):
+    quake_v = velocities[quake_start-1:quake_end]
+    max_v = np.max(quake_v, axis=1)
+    return [quake_start+np.argmax(max_v), np.max(max_v)]
+
+#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
 
     quake_starts = slip_beginnings(slipping_times)
     quake_ends = slip_endings(slipping_times)
 
+    #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))
+
+    peak_v = np.zeros(min_len)
+    quake_times = np.zeros(min_len)
+    for i in range(min_len):
+        [quake_times[i], peak_v[i]] = peak_slip(quake_starts[i], quake_ends[i], v_tx)
+    print("peak slip velocity: " + str(peak_v.mean()) + " +- " + str(peak_v.std()))
+
+    recurrence_time = np.zeros(min_len-1)
+    for i in range(min_len-1):
+        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]
diff --git a/data/tools/support/friction_stats.py b/data/tools/support/friction_stats.py
index 7f0a13c48a69df130df7731b3f20957d12fd914d..1bff3d341bc249b9581239a05713d9c8eee10e65 100644
--- a/data/tools/support/friction_stats.py
+++ b/data/tools/support/friction_stats.py
@@ -14,6 +14,7 @@ def friction_stats(h5file, body_ID, FINAL_TIME, patch=[], interval=[], TANGENTIA
     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]
 
     fig = plt.figure()
@@ -32,6 +33,7 @@ def friction_stats(h5file, body_ID, FINAL_TIME, patch=[], interval=[], TANGENTIA
     ax_slip.plot(time, avg_v, color='black', linestyle='-')
     #ax_slip.plot(time, max_v, color='gray', linestyle='--')
     ax_slip.set_ylabel('slip rate V [m/s]')
+    ax_slip.set_xlabel('time t [s]')
     ax_slip.set_yscale('log')
     #ax_slip.set_ylim([1e-6,1e-2])
     #-------------------------
diff --git a/data/tools/support/iterations.py b/data/tools/support/iterations.py
index adf0550ad00ab743cd3d0683bf72cc05531c4c87..4df9adc656778b3d12721071ae626eff5b55b5aa 100644
--- a/data/tools/support/iterations.py
+++ b/data/tools/support/iterations.py
@@ -19,6 +19,9 @@ def iterations(h5file, FINAL_TIME, interval = []):
     fpi_final = np.delete(fpi_final, 0)
     #fpi_total = np.array(h5file['iterations/fixedPoint/total'])
 
+    print("FPI average: " + str(np.average(fpi_final)))
+    print("FPI max: " + str(np.max(fpi_final)))
+
     # read multigrid iterations
     multigrid_final = np.array(h5file['iterations/multiGrid/final'])
     multigrid_final = np.delete(multigrid_final, 0)
@@ -38,9 +41,13 @@ def iterations(h5file, FINAL_TIME, interval = []):
     ax_mg.set_xlabel('time [s]')
     #-------------------------
 
+    tau_t = tau[t]
     ax_tau = fig.add_subplot(3, 1, 3)
-    ax_tau.plot(time, tau[t], color='black', linestyle='-')
+    ax_tau.plot(time, tau_t, color='black', linestyle='-')
     ax_tau.set_ylabel('tau')
+    ax_tau.set_yscale('log')
+
+    print("tau_max / tau_min: " + str(np.max(tau_t)/np.min(tau_t)))
     #-------------------------
 
     fig.canvas.draw()
\ No newline at end of file
diff --git a/data/tools/support/slip_beginnings.py b/data/tools/support/slip_beginnings.py
index 255adf44d900595def438864124830b7134306c9..dff7ae015a0093cde12ba450178321f22ac65a34 100644
--- a/data/tools/support/slip_beginnings.py
+++ b/data/tools/support/slip_beginnings.py
@@ -1,6 +1,5 @@
 import array as ar
 
-
 def slip_beginnings(x):
     # returns indicies i for which x[i-1]=0 and x[i]>0
     starts = ar.array('i', (0 for i in range(len(x))))
diff --git a/data/tools/support/slip_endings.py b/data/tools/support/slip_endings.py
index 9fdcaf88a6f8f7942a580489a33bf60f6ce1271a..fe42e5373b58e0f64272d277d44812530349f7c5 100644
--- a/data/tools/support/slip_endings.py
+++ b/data/tools/support/slip_endings.py
@@ -1,6 +1,5 @@
 import array as ar
 
-
 def slip_endings(x):
     # returns indicies i for which x[i-1]>0 and x[i]=0
     ends = ar.array('i', (0 for i in range(len(x))))
@@ -12,5 +11,4 @@ def slip_endings(x):
             ends[length] = i
             length += 1
         prev = x[i]
-
-    return ends[:length]
+    return ends[:length]
\ No newline at end of file