diff --git a/src/cell.c b/src/cell.c
index 23e5e5781bdc07448684a037a4389630b84aad59..9bd2a104c90e3d6f7c7a7b71932e741677cd6f16 100644
--- a/src/cell.c
+++ b/src/cell.c
@@ -879,15 +879,9 @@ int cell_unskip_tasks(struct cell *c, struct scheduler *s) {
     }
 
     /* Activate the drift on both sides */
-    if (t->type == task_type_pair || t->type == task_type_sub_pair) {
-      if (ci->drift != NULL) scheduler_activate(s, ci->drift);
-      if (cj->drift != NULL) scheduler_activate(s, cj->drift);
-    }
+    if (ci == c && cj != NULL) scheduler_activate(s, cj->drift);
+    if (cj == c && ci != NULL) scheduler_activate(s, ci->drift);
 
-    if (t->type == task_type_self || t->type == task_type_sub_self) {
-      if (ci->drift != NULL) scheduler_activate(s, ci->drift);
-    }
-    
     /* Check whether there was too much particle motion */
     if (t->type == task_type_pair || t->type == task_type_sub_pair) {
       if (t->tight &&
diff --git a/src/engine.c b/src/engine.c
index 879fbc28bf7827501acf2116ff814fca6c3bb202..e892f674e5c4dabebff0acd41fd7bc94db820780 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -139,9 +139,6 @@ void engine_make_hierarchical_tasks(struct engine *e, struct cell *c) {
       c->init = scheduler_addtask(s, task_type_init, task_subtype_none, 0, 0, c,
                                   NULL, 0);
 
-      /* c->drift = scheduler_addtask(s, task_type_drift, task_subtype_none, 0, 0, */
-      /*                              c, NULL, 0); */
-
       c->kick = scheduler_addtask(s, task_type_kick, task_subtype_none, 0, 0, c,
                                   NULL, 0);
 
@@ -1993,9 +1990,9 @@ void engine_marktasks_mapper(void *map_data, int num_elements,
       const struct cell *ci = t->ci;
 
       /* Activate the drift */
-      if(ci->drift) scheduler_activate(s, ci->drift);
+      if (ci->drift) scheduler_activate(s, ci->drift);
     }
-    
+
     /* Pair? */
     else if (t->type == task_type_pair || t->type == task_type_sub_pair) {
 
@@ -2004,8 +2001,8 @@ void engine_marktasks_mapper(void *map_data, int num_elements,
       const struct cell *cj = t->cj;
 
       /* Activate the drift on both sides */
-      if(ci->drift) scheduler_activate(s, ci->drift);
-      if(cj->drift) scheduler_activate(s, cj->drift);
+      if (ci->drift) scheduler_activate(s, ci->drift);
+      if (cj->drift) scheduler_activate(s, cj->drift);
 
       /* Too much particle movement? */
       if (t->tight &&
diff --git a/src/runner.c b/src/runner.c
index a62fb87a8cf904331d894f1b98c9f5e71dd87641..c5975c12a9ddad061f3c9ec3f8069dd8f8a35235 100644
--- a/src/runner.c
+++ b/src/runner.c
@@ -1127,7 +1127,8 @@ void *runner_main(void *data) {
 /* Check that we haven't scheduled an inactive task */
 #ifdef SWIFT_DEBUG_CHECKS
       if (cj == NULL) { /* self */
-        if (!cell_is_active(ci, e) && t->type != task_type_sort && t->type != task_type_drift)
+        if (!cell_is_active(ci, e) && t->type != task_type_sort &&
+            t->type != task_type_drift)
           error(
               "Task (type='%s/%s') should have been skipped ti_current=%d "
               "c->ti_end_min=%d",
@@ -1143,10 +1144,11 @@ void *runner_main(void *data) {
               taskID_names[t->type], subtaskID_names[t->subtype], e->ti_current,
               ci->ti_end_min, t->flags);
 
-	/* Special treatement for drifts */
-	if (!cell_is_active(ci, e) && t->type == task_type_drift)
-	  {;}
-	
+        /* Special treatement for drifts */
+        if (!cell_is_active(ci, e) && t->type == task_type_drift) {
+          ;
+        }
+
       } else { /* pair */
         if (!cell_is_active(ci, e) && !cell_is_active(cj, e))
           error(
@@ -1237,7 +1239,7 @@ void *runner_main(void *data) {
           break;
 #endif
         case task_type_drift:
-          // runner_do_drift(r, ci, 1);
+          runner_do_drift(r, ci, 1);
           break;
         case task_type_kick:
           runner_do_kick(r, ci, 1);
diff --git a/src/scheduler.c b/src/scheduler.c
index 4574d4a1d91b8b88ee897ba2a202c007a2796234..55ec764e5153fdfe9b282d1a58f6fc2da20e157c 100644
--- a/src/scheduler.c
+++ b/src/scheduler.c
@@ -133,7 +133,7 @@ static void scheduler_splittask(struct task *t, struct scheduler *s) {
     /* Non-splittable task? */
     if ((t->ci == NULL || (t->type == task_type_pair && t->cj == NULL)) ||
         ((t->type == task_type_kick) && t->ci->nodeID != s->nodeID) ||
- 	((t->type == task_type_drift) && t->ci->nodeID != s->nodeID) ||
+        ((t->type == task_type_drift) && t->ci->nodeID != s->nodeID) ||
         ((t->type == task_type_init) && t->ci->nodeID != s->nodeID)) {
       t->type = task_type_none;
       t->skip = 1;
@@ -614,19 +614,17 @@ static void scheduler_splittask(struct task *t, struct scheduler *s) {
                                         1 << sid, 0, ci, NULL, 0);
         else
           ci->sorts->flags |= (1 << sid);
-	
-	scheduler_addunlock(s, ci->sorts, t);
 
-	/* Create the drift for ci. */
-	if (ci->drift == NULL) {
-	  ci->drift = scheduler_addtask(s, task_type_drift, task_subtype_none,
+        scheduler_addunlock(s, ci->sorts, t);
+
+        /* Create the drift for ci. */
+        if (ci->drift == NULL) {
+          ci->drift = scheduler_addtask(s, task_type_drift, task_subtype_none,
                                         0, 0, ci, NULL, 0);
-	  scheduler_addunlock(s, ci->drift, ci->sorts);
-	}
+          scheduler_addunlock(s, ci->drift, ci->sorts);
+        }
         lock_unlock_blind(&ci->lock);
 
-
-	
         /* Create the sort for cj. */
         lock_lock(&cj->lock);
         if (cj->sorts == NULL)
@@ -637,13 +635,13 @@ static void scheduler_splittask(struct task *t, struct scheduler *s) {
 
         scheduler_addunlock(s, cj->sorts, t);
 
-	/* Create the drift for cj. */
-	if (cj->drift == NULL) {
-	  cj->drift = scheduler_addtask(s, task_type_drift, task_subtype_none,
+        /* Create the drift for cj. */
+        if (cj->drift == NULL) {
+          cj->drift = scheduler_addtask(s, task_type_drift, task_subtype_none,
                                         0, 0, cj, NULL, 0);
-	  scheduler_addunlock(s, cj->drift, cj->sorts);
-	}
-	lock_unlock_blind(&cj->lock);
+          scheduler_addunlock(s, cj->drift, cj->sorts);
+        }
+        lock_unlock_blind(&cj->lock);
       }
 
     } /* pair interaction? */
@@ -802,8 +800,9 @@ void scheduler_set_unlocks(struct scheduler *s) {
       for (int j = i + 1; j < t->nr_unlock_tasks; j++) {
         if (t->unlock_tasks[i] == t->unlock_tasks[j])
           error("duplicate unlock! t->type=%s/%s unlocking type=%s/%s",
-		taskID_names[t->type], subtaskID_names[t->subtype],
-		taskID_names[t->unlock_tasks[i]->type], subtaskID_names[t->unlock_tasks[i]->subtype]);
+                taskID_names[t->type], subtaskID_names[t->subtype],
+                taskID_names[t->unlock_tasks[i]->type],
+                subtaskID_names[t->unlock_tasks[i]->subtype]);
       }
     }
   }
@@ -1102,10 +1101,11 @@ void scheduler_start(struct scheduler *s) {
               taskID_names[t->type], subtaskID_names[t->subtype], ti_current,
               ci->ti_end_min, t->flags);
 
-	/* Special treatement for drifts */
+        /* Special treatement for drifts */
         if (ci->ti_end_min == ti_current && t->skip &&
-            t->type == task_type_drift)
-	  {;}
+            t->type == task_type_drift) {
+          ;
+        }
 
       } else { /* pair */
 
@@ -1174,7 +1174,7 @@ void scheduler_enqueue(struct scheduler *s, struct task *t) {
       case task_type_sort:
       case task_type_ghost:
       case task_type_kick:
-    case task_type_drift:
+      case task_type_drift:
       case task_type_init:
         qid = t->ci->super->owner;
         break;
diff --git a/src/space.c b/src/space.c
index 935677a9ebed97acfde8341ec1545ef4f33a56c0..f3b19ab598d762f4c89fd8fc4ff937651d4bb87f 100644
--- a/src/space.c
+++ b/src/space.c
@@ -409,6 +409,7 @@ void space_regrid(struct space *s, int verbose) {
       s->cells_top[k].extra_ghost = NULL;
       s->cells_top[k].ghost = NULL;
       s->cells_top[k].kick = NULL;
+      s->cells_top[k].drift = NULL;
       s->cells_top[k].cooling = NULL;
       s->cells_top[k].sourceterms = NULL;
       s->cells_top[k].super = &s->cells_top[k];
diff --git a/src/task.c b/src/task.c
index 19a8959153761d53fbce2b87b7008c3ca1055590..ceea09126c4461135c53c5a5b70355398bb475e7 100644
--- a/src/task.c
+++ b/src/task.c
@@ -48,10 +48,10 @@
 
 /* Task type names. */
 const char *taskID_names[task_type_count] = {
-    "none",     "sort",    "self",          "pair",        "sub_self",
-    "sub_pair", "init",    "ghost",         "extra_ghost", "drift", "kick",
-    "send",     "recv",    "grav_gather_m", "grav_fft",    "grav_mm",
-    "grav_up",  "cooling", "sourceterms"};
+    "none",     "sort",    "self",    "pair",          "sub_self",
+    "sub_pair", "init",    "ghost",   "extra_ghost",   "drift",
+    "kick",     "send",    "recv",    "grav_gather_m", "grav_fft",
+    "grav_mm",  "grav_up", "cooling", "sourceterms"};
 
 const char *subtaskID_names[task_subtype_count] = {
     "none", "density", "gradient", "force", "grav", "external_grav", "tend"};