diff --git a/src/engine.c b/src/engine.c
index 07f9ce870d4383d3ba3f1c6986a66e80b29a2e1e..af1d52c1f7664be5cd9fff7a5e57aae168c8c9ab 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -2072,7 +2072,7 @@ void engine_make_extra_hydroloop_tasks(struct engine *e) {
     struct task *t = &sched->tasks[ind];
 
     /* Sort tasks depend on the drift of the cell. */
-    if (t->type == task_type_sort) {
+    if (t->type == task_type_sort && t->ci->nodeID == engine_rank) {
       scheduler_addunlock(sched, t->ci->drift, t);
     }
 
@@ -2115,8 +2115,10 @@ void engine_make_extra_hydroloop_tasks(struct engine *e) {
     else if (t->type == task_type_pair && t->subtype == task_subtype_density) {
 
       /* Make all density tasks depend on the drift. */
-      scheduler_addunlock(sched, t->ci->drift, t);
-      scheduler_addunlock(sched, t->cj->drift, t);
+      if (t->ci->nodeID == engine_rank)
+        scheduler_addunlock(sched, t->ci->drift, t);
+      if (t->cj->nodeID == engine_rank)
+        scheduler_addunlock(sched, t->cj->drift, t);
 
 #ifdef EXTRA_HYDRO_LOOP
       /* Start by constructing the task for the second and third hydro loop */
@@ -2495,7 +2497,8 @@ void engine_marktasks_mapper(void *map_data, int num_elements,
             error("bad flags in sort task.");
 #endif
           scheduler_activate(s, ci->sorts);
-          scheduler_activate(s, ci->drift);
+          if (ci->nodeID == engine_rank)
+            scheduler_activate(s, ci->drift);
         }
         if (!(cj->sorted & (1 << t->flags))) {
 #ifdef SWIFT_DEBUG_CHECKS
@@ -2503,7 +2506,8 @@ void engine_marktasks_mapper(void *map_data, int num_elements,
             error("bad flags in sort task.");
 #endif
           scheduler_activate(s, cj->sorts);
-          scheduler_activate(s, cj->drift);
+          if (cj->nodeID == engine_rank)
+            scheduler_activate(s, cj->drift);
         }
       }
 
@@ -2526,12 +2530,10 @@ void engine_marktasks_mapper(void *map_data, int num_elements,
         if (l == NULL) error("Missing link to send_xv task.");
         scheduler_activate(s, l->t);
 
-        if (t->type == task_type_pair) {
-          if (cj->drift)
-            scheduler_activate(s, cj->drift);
-          else
-            error("Drift task missing !");
-        }
+        if (l->t->ci->drift)
+          scheduler_activate(s, l->t->ci->drift);
+        else
+          error("Drift task missing !");
 
         if (cell_is_active(cj, e)) {
           for (l = cj->send_rho; l != NULL && l->t->cj->nodeID != ci->nodeID;
@@ -2564,12 +2566,10 @@ void engine_marktasks_mapper(void *map_data, int num_elements,
         if (l == NULL) error("Missing link to send_xv task.");
         scheduler_activate(s, l->t);
 
-        if (t->type == task_type_pair) {
-          if (ci->drift)
-            scheduler_activate(s, ci->drift);
-          else
-            error("Drift task missing !");
-        }
+        if (l->t->ci->drift)
+          scheduler_activate(s, l->t->ci->drift);
+        else
+          error("Drift task missing !");
 
         if (cell_is_active(ci, e)) {
           for (l = ci->send_rho; l != NULL && l->t->cj->nodeID != cj->nodeID;