diff --git a/src/cell.c b/src/cell.c
index 0b799138bff7081b7d1ab2e3de6a53d19d232379..95027b972ed209c1bc79b4861074739ad8a0f3e1 100644
--- a/src/cell.c
+++ b/src/cell.c
@@ -1329,12 +1329,16 @@ void cell_activate_drift_part(struct cell *c, struct scheduler *s) {
 
   /* Set the do_sub_drifts all the way up and activate the super drift
      if this has not yet been done. */
-  for (struct cell *parent = c->parent; parent != NULL && !parent->do_sub_drift;
-       parent = parent->parent) {
-    parent->do_sub_drift = 1;
-    if (parent == c->super) {
-      scheduler_activate(s, parent->drift_part);
-      break;
+  if (c == c->super) {
+    scheduler_activate(s, c->drift_part);
+  } else {
+    for (struct cell *parent = c->parent;
+         parent != NULL && !parent->do_sub_drift; parent = parent->parent) {
+      parent->do_sub_drift = 1;
+      if (parent == c->super) {
+        scheduler_activate(s, parent->drift_part);
+        break;
+      }
     }
   }
 }