diff --git a/tools/analyse_runtime.py b/tools/analyse_runtime.py
index 08f6e515143929138cf361e866b7698c6a9011b0..a2c3dd0f201fc47518d6bb0a6a918627db2f3e96 100755
--- a/tools/analyse_runtime.py
+++ b/tools/analyse_runtime.py
@@ -53,100 +53,52 @@ threshold = 0.008
 num_files = len(sys.argv) - 1
 
 labels = [
-    "Gpart assignment",
-    "Mesh comunication",
-    "Forward Fourier transform",
-    "Green function",
-    "Backwards Fourier transform",
-    "engine_recompute_displacement_constraint:",
-    "engine_exchange_top_multipoles:",
-    "updating particle counts",
-    "engine_estimate_nr_tasks:",
-    "Making gravity tasks",
-    "Making hydro tasks",
-    "Splitting tasks",
-    "Counting and linking tasks",
-    "Setting super-pointers",
-    "Making extra hydroloop tasks",
-    "Making extra starsloop tasks",
-    "Linking gravity tasks",
-    "Creating send tasks",
-    "Exchanging cell tags",
-    "Creating recv tasks",
-    "Counting number of foreign particles",
-    "Recursively linking foreign arrays",
-    "Setting unlocks",
-    "Ranking the tasks",
-    "scheduler_reweight:",
-    "space_list_useful_top_level_cells:",
-    "space_rebuild:",
-    "engine_drift_all:",
-    "engine_unskip:",
-    "engine_collect_end_of_step:",
-    "engine_launch:",
-    "writing particle properties",
-    "engine_repartition:",
-    "engine_exchange_cells:",
-    "Dumping restart files",
-    "engine_print_stats:",
-    "engine_marktasks:",
-    "Reading initial conditions",
-    "engine_print_task_counts:",
-    "engine_drift_top_multipoles:",
-    "Communicating rebuild flag",
-    "engine_split:",
-    "space_init",
-    "engine_init",
-    "engine_repartition_trigger:",
-    "velociraptor_invoke:"
-]
-is_rebuild = [
-    1,
-    1,
-    1,
-    1,
-    1,
-    1,
-    1,
-    1,
-    1,
-    1,
-    1,
-    1,
-    1,
-    1,
-    1,
-    1,
-    1,
-    1,
-    1,
-    1,
-    1,
-    1,
-    1,
-    1,
-    1,
-    1,
-    1,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    1,
-    0,
-    0,
-    1,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0
+    ["Gpart assignment", 1],
+    ["Mesh comunication", 1],
+    ["Forward Fourier transform", 1],
+    ["Green function", 1],
+    ["Backwards Fourier transform", 1],
+    ["engine_recompute_displacement_constraint:", 1],
+    ["engine_exchange_top_multipoles:", 1],
+    ["updating particle counts", 1],
+    ["engine_estimate_nr_tasks:", 1],
+    ["Making gravity tasks", 1],
+    ["Making hydro tasks", 1],
+    ["Splitting tasks", 1],
+    ["Counting and linking tasks", 1],
+    ["Setting super-pointers", 1],
+    ["Making extra hydroloop tasks", 1],
+    ["Making extra starsloop tasks", 1],
+    ["Linking gravity tasks", 1],
+    ["Creating send tasks", 1],
+    ["Exchanging cell tags", 1],
+    ["Creating recv tasks", 1],
+    ["Counting number of foreign particles", 1],
+    ["Recursively linking foreign arrays", 1],
+    ["Setting unlocks", 1],
+    ["Ranking the tasks", 1],
+    ["scheduler_reweight:", 1],
+    ["space_list_useful_top_level_cells:", 1],
+    ["space_rebuild:", 1],
+    ["engine_drift_all:", 0],
+    ["engine_unskip:", 0],
+    ["engine_collect_end_of_step:", 0],
+    ["engine_launch:", 0],
+    ["writing particle properties", 0],
+    ["engine_repartition:", 0],
+    ["engine_exchange_cells:", 1],
+    ["Dumping restart files", 0],
+    ["engine_print_stats:", 0],
+    ["engine_marktasks:", 1],
+    ["Reading initial conditions", 0],
+    ["engine_print_task_counts:", 0],
+    ["engine_drift_top_multipoles:", 0],
+    ["Communicating rebuild flag", 0],
+    ["engine_split:", 0],
+    ["space_init", 0],
+    ["engine_init", 0],
+    ["engine_repartition_trigger:", 0],
+    ["velociraptor_invoke:", 0]
 ]
 times = np.zeros(len(labels))
 counts = np.zeros(len(labels))
@@ -186,7 +138,7 @@ for i in range(num_files):
         for i in range(len(labels)):
 
             # Extract the different blocks
-            if re.search("%s took" % labels[i], line):
+            if re.search("%s took" % labels[i][0], line):
                 counts[i] += 1.0
                 times[i] += float(
                     re.findall(r"[+-]?((\d+\.?\d*)|(\.\d+))", line)[-1][0]
@@ -215,35 +167,33 @@ time_ratios = times / total_time
 
 # Better looking labels
 for i in range(len(labels)):
-    labels[i] = labels[i].replace("_", " ")
-    labels[i] = labels[i].replace(":", "")
-    labels[i] = labels[i].title()
+    labels[i][0] = labels[i][0].replace("_", " ")
+    labels[i][0] = labels[i][0].replace(":", "")
+    labels[i][0] = labels[i][0].title()
 
 times = np.array(times)
 time_ratios = np.array(time_ratios)
-is_rebuild = np.array(is_rebuild)
 
 # Sort in order of importance
 order = np.argsort(-times)
 times = times[order]
 counts = counts[order]
 time_ratios = time_ratios[order]
-is_rebuild = is_rebuild[order]
-labels = np.take(labels, order)
+labels = [labels[i] for i in order]
 
 # Keep only the important components
 important_times = [0.0]
 important_ratios = [0.0]
-important_labels = ["Others (all below %.1f\%%)" % (threshold * 100)]
 important_is_rebuild = [0]
+important_labels = ["Others (all below %.1f\%%)" % (threshold * 100)]
 need_print = True
 print("Time spent in the different code sections:")
 for i in range(len(labels)):
     if time_ratios[i] > threshold:
         important_times.append(times[i])
         important_ratios.append(time_ratios[i])
-        important_labels.append(labels[i])
-        important_is_rebuild.append(is_rebuild[i])
+        important_is_rebuild.append(labels[i][1])
+        important_labels.append(labels[i][0])
     else:
         if need_print:
             print("Elements in 'Other' category (<%.1f%%):" % (threshold * 100))
@@ -251,7 +201,7 @@ for i in range(len(labels)):
         important_times[0] += times[i]
         important_ratios[0] += time_ratios[i]
 
-    print(" - '%-40s' (%5d calls, time: %.4fs): %.4f%%" % (labels[i], counts[i], times[i], time_ratios[i] * 100))
+    print(" - '%-40s' (%5d calls, time: %.4fs): %.4f%%" % (labels[i][0], counts[i], times[i], time_ratios[i] * 100))
 
 # Anything unaccounted for?
 print(
@@ -262,8 +212,8 @@ print(
 important_ratios = np.array(important_ratios)
 important_is_rebuild = np.array(important_is_rebuild)
 
-figure()
 
+figure()
 
 def func(pct):
     return "$%4.2f\\%%$" % pct