diff --git a/src/engine.c b/src/engine.c
index 535e84059dbd0a30f6be7cd225c877576fbdb4d4..fab8389a3b4da3024c973ce6bce1888eb5213268 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -1813,7 +1813,7 @@ void engine_step(struct engine *e) {
   if (e->step == 0 || !(e->policy & engine_policy_fixdt)) {
     TIMER_TIC
     engine_launch(e, (e->nr_threads > 8) ? 8 : e->nr_threads,
-                  (1 << task_type_kick1) | (1 << task_type_link));
+                  (1 << task_type_kick1));
     TIMER_TOC(timer_kick1);
   }
 
@@ -1844,8 +1844,7 @@ void engine_step(struct engine *e) {
                     (1 << task_type_ghost) | (1 << task_type_kick2) |
                     (1 << task_type_send) | (1 << task_type_recv) |
                     (1 << task_type_grav_pp) | (1 << task_type_grav_mm) |
-                    (1 << task_type_grav_up) | (1 << task_type_grav_down) |
-                    (1 << task_type_link));
+                    (1 << task_type_grav_up) | (1 << task_type_grav_down));
 
   TIMER_TOC(timer_runners);
 
diff --git a/src/scheduler.c b/src/scheduler.c
index 3e90b7b2f1d041ec9eeb05efdd55efb4ffdb6577..d1d10b85f146b1b44793385484761ee676788358 100644
--- a/src/scheduler.c
+++ b/src/scheduler.c
@@ -985,9 +985,6 @@ void scheduler_start(struct scheduler *s, unsigned int mask) {
   /* message("waiting tasks took %.3f ms.",
           (double)(getticks() - tic) / CPU_TPS * 1000); */
 
-  /* Don't enqueue link tasks directly. */
-  s->mask &= ~(1 << task_type_link);
-
   /* Loop over the tasks and enqueue whoever is ready. */
   // tic = getticks();
   for (int k = 0; k < s->nr_tasks; k++) {
@@ -1021,7 +1018,7 @@ void scheduler_enqueue(struct scheduler *s, struct task *t) {
   if (t->rid >= 0) error("Task has already been enqueued.");
 
   /* Ignore skipped tasks and tasks not in the mask. */
-  if (t->skip || ((1 << t->type) & ~(s->mask) && t->type != task_type_link)) {
+  if (t->skip || (1 << t->type) & ~(s->mask)) {
     return;
   }
 
diff --git a/src/task.c b/src/task.c
index 7077818c6f6b9ac50ba13385877e28f966fe551b..c32bf21e1410b6feca09841501df3419a8f59495 100644
--- a/src/task.c
+++ b/src/task.c
@@ -45,7 +45,7 @@
 const char *taskID_names[task_type_count] = {
     "none",  "sort",    "self",    "pair",    "sub",
     "ghost", "kick1",   "kick2",   "send",    "recv",
-    "link",  "grav_pp", "grav_mm", "grav_up", "grav_down",
+    "grav_pp", "grav_mm", "grav_up", "grav_down",
     "psort", "split_cell", "rewait"};
 
 /**
diff --git a/src/task.h b/src/task.h
index dc29d432f9787b3cb64f1c16a79ee32bc624397f..b2e6a903551ebc0f6dc51a7d6ac88826906d416c 100644
--- a/src/task.h
+++ b/src/task.h
@@ -39,7 +39,6 @@ enum task_types {
   task_type_kick2,
   task_type_send,
   task_type_recv,
-  task_type_link,
   task_type_grav_pp,
   task_type_grav_mm,
   task_type_grav_up,