diff --git a/src/multipole.h b/src/multipole.h
index 07bb844782d0a010acc81be112f0c56cd91f1a91..c7524f6dc4361cd4e305985e7d188822bfb3c815 100644
--- a/src/multipole.h
+++ b/src/multipole.h
@@ -385,6 +385,7 @@ INLINE static void gravity_L2P(const struct gravity_tensors *l,
                                struct gpart *gp) {
 
 #ifdef SWIFT_DEBUG_CHECKS
+  if (l->mass_interacted == 0.f) error("Interacting with empty field tensor");
   gp->mass_interacted += l->mass_interacted;
 #endif
 
diff --git a/src/runner.c b/src/runner.c
index 0eb47c8216a0c28ecacf6befd25e47dccf5d11c9..ff59ba407a9ad22bf283ffe80e0c60cef922c5b6 100644
--- a/src/runner.c
+++ b/src/runner.c
@@ -1829,7 +1829,7 @@ void *runner_main(void *data) {
           // runner_do_grav_mm(r, t->ci, 1);
           break;
         case task_type_grav_down:
-          runner_do_grav_down(r, t->ci);
+          runner_do_grav_down(r, t->ci, 1);
           break;
         case task_type_grav_top_level:
           // runner_do_grav_top_level(r);
diff --git a/src/runner_doiact_grav.h b/src/runner_doiact_grav.h
index c1788b3b18278fe659a15f4398a02fc2798c4ccb..d03fdaea71bff848682605ec8aaf14c80a412c5f 100644
--- a/src/runner_doiact_grav.h
+++ b/src/runner_doiact_grav.h
@@ -25,7 +25,9 @@
 #include "gravity.h"
 #include "part.h"
 
-void runner_do_grav_down(struct runner *r, struct cell *c) {
+void runner_do_grav_down(struct runner *r, struct cell *c, int timer) {
+
+  TIMER_TIC;
 
   if (c->split) {
 
@@ -38,6 +40,8 @@ void runner_do_grav_down(struct runner *r, struct cell *c) {
                     1);
 
         gravity_field_tensors_add(cp->multipole, &temp);
+
+        runner_do_grav_down(r, cp, 0);
       }
     }
 
@@ -53,6 +57,8 @@ void runner_do_grav_down(struct runner *r, struct cell *c) {
       if (gpart_is_active(gp, e)) gravity_L2P(c->multipole, gp);
     }
   }
+
+  if (timer) TIMER_TOC(timer_dograv_down);
 }
 
 /**
@@ -554,6 +560,8 @@ void runner_do_grav_long_range(struct runner *r, struct cell *ci, int timer) {
   }
 #endif
 
+  TIMER_TIC;
+
   /* Recover the list of top-level cells */
   const struct engine *e = r->e;
   struct cell *cells = e->s->cells_top;
@@ -583,6 +591,8 @@ void runner_do_grav_long_range(struct runner *r, struct cell *ci, int timer) {
 
     if (!cell_are_neighbours(ci, cj)) runner_dopair_grav_mm(r, ci, cj);
   }
+
+  if (timer) TIMER_TOC(timer_dograv_long_range);
 }
 
 #endif /* SWIFT_RUNNER_DOIACT_GRAV_H */
diff --git a/src/timers.h b/src/timers.h
index 4cb4d7e0ba60003ba4caefffe257c929c59a8d9e..39bcf30fba0ec36d9209ddcbf3c71035a5851dbb 100644
--- a/src/timers.h
+++ b/src/timers.h
@@ -49,6 +49,8 @@ enum {
   timer_dopair_grav_mm,
   timer_dopair_grav_pp,
   timer_dograv_external,
+  timer_dograv_down,
+  timer_dograv_long_range,
   timer_dosource,
   timer_dosub_self_density,
   timer_dosub_self_gradient,