diff --git a/src/engine.c b/src/engine.c
index 78d6422fe1809e42ceda7205b2fa68b3b79f0d4d..7cb08b7d6d86099b57232b7711dfb4b4472f9ab6 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -1750,12 +1750,6 @@ void engine_maketasks(struct engine *e) {
   /* Add the communication tasks if MPI is being used. */
   if (e->policy & engine_policy_mpi) {
 
-    /* Create root tasks for send/recv. */
-    e->send_root = scheduler_addtask(&e->sched, task_type_comm_root,
-                                     task_subtype_none, 0, 0, NULL, NULL, 0);
-    e->recv_root = scheduler_addtask(&e->sched, task_type_comm_root,
-                                     task_subtype_none, 0, 0, NULL, NULL, 0);
-
     /* Loop over the proxies. */
     for (int pid = 0; pid < e->nr_proxies; pid++) {
 
diff --git a/src/engine.h b/src/engine.h
index 7333bf3ac5597510c5380204012dfbeb1a3545f4..329f6b465e65cbbf841b29652b14a85b0ebd59c4 100644
--- a/src/engine.h
+++ b/src/engine.h
@@ -187,9 +187,6 @@ struct engine {
   struct link *links;
   int nr_links, size_links;
 
-  /* Root task for all send and recv tasks. */
-  struct task *send_root, *recv_root;
-
   /* Are we talkative ? */
   int verbose;
 
diff --git a/src/runner.c b/src/runner.c
index 761201d7ee875fdb5426ba7c65f7dc3f195c8f56..e6cc88ae5205960663c20f27d3576ba77fe6208a 100644
--- a/src/runner.c
+++ b/src/runner.c
@@ -1132,8 +1132,6 @@ void *runner_main(void *data) {
         case task_type_grav_external:
           runner_do_grav_external(r, t->ci, 1);
           break;
-        case task_type_comm_root:
-          break;
         default:
           error("Unknown task type.");
       }
diff --git a/src/scheduler.c b/src/scheduler.c
index e3bb0716031427e566de7b50019b7e16cbddc5c1..86dac98d00f5016f8375e29405326bce917b45ba 100644
--- a/src/scheduler.c
+++ b/src/scheduler.c
@@ -1029,7 +1029,7 @@ void scheduler_start(struct scheduler *s, unsigned int mask,
   // ticks tic = getticks();
 
   /* Store the masks */
-  s->mask = mask | (1 << task_type_comm_root);
+  s->mask = mask;
   s->submask = submask | (1 << task_subtype_none);
 
   /* Clear all the waits and rids. */
diff --git a/src/task.c b/src/task.c
index fb101e3025b332402dc6a9c0ba11d947cf12a7ab..3a1b14ccaa29532a435ed28e12be0998449b2dd8 100644
--- a/src/task.c
+++ b/src/task.c
@@ -50,7 +50,7 @@ const char *taskID_names[task_type_count] = {
     "none",      "sort",          "self",     "pair",    "sub_self",
     "sub_pair",  "init",          "ghost",    "kick",    "kick_fixdt",
     "send",      "recv",          "grav_pp",  "grav_mm", "grav_up",
-    "grav_down", "grav_external", "comm_root"};
+    "grav_down", "grav_external"};
 
 const char *subtaskID_names[task_type_count] = {"none", "density", "force",
                                                 "grav", "t_end"};
diff --git a/src/task.h b/src/task.h
index 01eb859e7740c3588bf1d7691f0f031ecfebe1cb..ca317160325a5f6bc47d51f460b75b3b3e316b36 100644
--- a/src/task.h
+++ b/src/task.h
@@ -50,7 +50,6 @@ enum task_types {
   task_type_grav_up,
   task_type_grav_down,
   task_type_grav_external,
-  task_type_comm_root,
   task_type_count
 };