diff --git a/src/cell.c b/src/cell.c
index 1036110d0cc4a552f5df884004dd5ae87e4fe79d..5258180fa006bb1e6a07b050b125ccb1ecdc95f8 100644
--- a/src/cell.c
+++ b/src/cell.c
@@ -3265,7 +3265,7 @@ int cell_unskip_hydro_tasks(struct cell *c, struct scheduler *s) {
         if (cj_active) {
           scheduler_activate_recv(s, ci->mpi.recv, task_subtype_xv);
           if (ci_active) {
-            scheduler_activate(s, ci->mpi.hydro.recv_rho);
+            scheduler_activate_recv(s, ci->mpi.recv, task_subtype_rho);
 
 #ifdef EXTRA_HYDRO_LOOP
             scheduler_activate(s, ci->mpi.hydro.recv_gradient);
@@ -3315,7 +3315,7 @@ int cell_unskip_hydro_tasks(struct cell *c, struct scheduler *s) {
         if (ci_active) {
           scheduler_activate_recv(s, cj->mpi.recv, task_subtype_xv);
           if (cj_active) {
-            scheduler_activate(s, cj->mpi.hydro.recv_rho);
+            scheduler_activate_recv(s, cj->mpi.recv, task_subtype_rho);
 
 #ifdef EXTRA_HYDRO_LOOP
             scheduler_activate(s, cj->mpi.hydro.recv_gradient);
@@ -3663,7 +3663,7 @@ int cell_unskip_stars_tasks(struct cell *c, struct scheduler *s) {
 
         if (cj_active) {
           scheduler_activate_recv(s, ci->mpi.recv, task_subtype_xv);
-          scheduler_activate(s, ci->mpi.hydro.recv_rho);
+          scheduler_activate_recv(s, ci->mpi.recv, task_subtype_rho);
 
           /* If the local cell is active, more stuff will be needed. */
           scheduler_activate_send(s, cj->mpi.send, task_subtype_spart,
@@ -3695,7 +3695,7 @@ int cell_unskip_stars_tasks(struct cell *c, struct scheduler *s) {
         /* If the local cell is active, receive data from the foreign cell. */
         if (ci_active) {
           scheduler_activate_recv(s, cj->mpi.recv, task_subtype_xv);
-          scheduler_activate(s, cj->mpi.hydro.recv_rho);
+          scheduler_activate_recv(s, cj->mpi.recv, task_subtype_rho);
 
           /* If the local cell is active, more stuff will be needed. */
           scheduler_activate_send(s, ci->mpi.send, task_subtype_spart,
diff --git a/src/cell.h b/src/cell.h
index c1bc2d7ed18a584de842546883504b7eb16d0f9f..1c7c70c331f5e5f4fac6de1f6fe5661f7c15c533 100644
--- a/src/cell.h
+++ b/src/cell.h
@@ -581,9 +581,6 @@ struct cell {
     };
 
     struct {
-      /* Task receiving hydro data (density). */
-      struct task *recv_rho;
-
       /* Task receiving hydro data (gradient). */
       struct task *recv_gradient;
 
diff --git a/src/engine_maketasks.c b/src/engine_maketasks.c
index b1fb70fb941602c965a42faf2ba575bd878f15eb..2f447aafdde535895fc2bc1e145a71c50f41e3d0 100644
--- a/src/engine_maketasks.c
+++ b/src/engine_maketasks.c
@@ -329,7 +329,7 @@ void engine_addtasks_recv_hydro(struct engine *e, struct cell *c,
   }
 
   engine_addlink(e, &c->mpi.recv, t_xv);
-  c->mpi.hydro.recv_rho = t_rho;
+  engine_addlink(e, &c->mpi.recv, t_rho);
   c->mpi.hydro.recv_gradient = t_gradient;
   c->mpi.hydro.recv_ti = t_ti;
 
diff --git a/src/engine_marktasks.c b/src/engine_marktasks.c
index f6a70e992642a513535d7338275c8596f3c95a44..c2a73e699115374ffa7c55ffe94f1349803746b1 100644
--- a/src/engine_marktasks.c
+++ b/src/engine_marktasks.c
@@ -364,7 +364,7 @@ void engine_marktasks_mapper(void *map_data, int num_elements,
           if (cj_active_hydro) {
             scheduler_activate_recv(s, ci->mpi.recv, task_subtype_xv);
             if (ci_active_hydro) {
-              scheduler_activate(s, ci->mpi.hydro.recv_rho);
+              scheduler_activate_recv(s, ci->mpi.recv, task_subtype_rho);
 #ifdef EXTRA_HYDRO_LOOP
               scheduler_activate(s, ci->mpi.hydro.recv_gradient);
 #endif
@@ -408,7 +408,7 @@ void engine_marktasks_mapper(void *map_data, int num_elements,
 
             scheduler_activate_recv(s, cj->mpi.recv, task_subtype_xv);
             if (cj_active_hydro) {
-              scheduler_activate(s, cj->mpi.hydro.recv_rho);
+              scheduler_activate_recv(s, cj->mpi.recv, task_subtype_rho);
 #ifdef EXTRA_HYDRO_LOOP
               scheduler_activate(s, cj->mpi.hydro.recv_gradient);
 #endif
@@ -463,7 +463,7 @@ void engine_marktasks_mapper(void *map_data, int num_elements,
 
           if (cj_active_stars) {
             scheduler_activate_recv(s, ci->mpi.recv, task_subtype_xv);
-            scheduler_activate(s, ci->mpi.hydro.recv_rho);
+            scheduler_activate_recv(s, ci->mpi.recv, task_subtype_rho);
 
             /* If the local cell is active, more stuff will be needed. */
             scheduler_activate_send(s, cj->mpi.send, task_subtype_spart,
@@ -497,7 +497,7 @@ void engine_marktasks_mapper(void *map_data, int num_elements,
           /* If the local cell is active, receive data from the foreign cell. */
           if (ci_active_stars) {
             scheduler_activate_recv(s, cj->mpi.recv, task_subtype_xv);
-            scheduler_activate(s, cj->mpi.hydro.recv_rho);
+            scheduler_activate_recv(s, cj->mpi.recv, task_subtype_rho);
 
             /* If the local cell is active, more stuff will be needed. */
             scheduler_activate_send(s, ci->mpi.send, task_subtype_spart,
diff --git a/src/space.c b/src/space.c
index cb63e86bd0049dbbd696632db4581885447af39d..510d2cc7f40a306c1cafd9111a3855ebbc257c14 100644
--- a/src/space.c
+++ b/src/space.c
@@ -269,7 +269,6 @@ void space_rebuild_recycle_mapper(void *map_data, int num_elements,
     c->mpi.tag = -1;
 
     c->mpi.recv = NULL;
-    c->mpi.hydro.recv_rho = NULL;
     c->mpi.hydro.recv_gradient = NULL;
     c->mpi.hydro.recv_ti = NULL;
     c->mpi.grav.recv = NULL;
@@ -578,7 +577,6 @@ void space_regrid(struct space *s, int verbose) {
 #ifdef WITH_MPI
           c->mpi.tag = -1;
           c->mpi.recv = NULL;
-          c->mpi.hydro.recv_rho = NULL;
           c->mpi.hydro.recv_gradient = NULL;
           c->mpi.send = NULL;
 #endif  // WITH_MPI