diff --git a/src/cell.c b/src/cell.c
index d7b2381f034d22b28c69799f38695f8a1735984f..12e4b299c08bfe44ea09b2baa920e3f70539fe2a 100644
--- a/src/cell.c
+++ b/src/cell.c
@@ -2159,6 +2159,8 @@ int cell_unskip_tasks(struct cell *c, struct scheduler *s) {
     if (c->ghost_out != NULL) scheduler_activate(s, c->ghost_out);
     if (c->ghost != NULL) scheduler_activate(s, c->ghost);
     if (c->init_grav != NULL) scheduler_activate(s, c->init_grav);
+    if (c->grav_ghost_in != NULL) scheduler_activate(s, c->grav_ghost_in);
+    if (c->grav_ghost_out != NULL) scheduler_activate(s, c->grav_ghost_out);
     if (c->kick1 != NULL) scheduler_activate(s, c->kick1);
     if (c->kick2 != NULL) scheduler_activate(s, c->kick2);
     if (c->timestep != NULL) scheduler_activate(s, c->timestep);
diff --git a/src/engine.c b/src/engine.c
index eb395e0a2d25b821e5d19f32d1c4d5a5ac367c0e..ee38e6005a19ca831a259a7ae76f46e61dee2b62 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -244,10 +244,10 @@ void engine_make_hierarchical_tasks(struct engine *e, struct cell *c) {
 
         /* Generate the ghost tasks. */
         c->ghost_in =
-            scheduler_addtask(s, task_type_ghost, task_subtype_none, 0,
+            scheduler_addtask(s, task_type_ghost_in, task_subtype_none, 0,
                               /* implicit = */ 1, c, NULL);
         c->ghost_out =
-            scheduler_addtask(s, task_type_ghost, task_subtype_none, 0,
+            scheduler_addtask(s, task_type_ghost_out, task_subtype_none, 0,
                               /* implicit = */ 1, c, NULL);
         engine_add_ghosts(e, c, c->ghost_in, c->ghost_out);
 
@@ -3274,7 +3274,8 @@ void engine_marktasks_mapper(void *map_data, int num_elements,
     }
 
     /* Hydro ghost tasks ? */
-    else if (t->type == task_type_ghost || t->type == task_type_extra_ghost) {
+    else if (t->type == task_type_ghost || t->type == task_type_extra_ghost ||
+	     t->type == task_type_ghost_in || t->type == task_type_ghost_out) {
       if (cell_is_active(t->ci, e)) scheduler_activate(s, t);
     }
 
@@ -3285,7 +3286,9 @@ void engine_marktasks_mapper(void *map_data, int num_elements,
     }
 
     /* Periodic gravity stuff (Note this is not linked to a cell) ? */
-    else if (t->type == task_type_grav_top_level) {
+    else if (t->type == task_type_grav_top_level ||
+	     t->type == task_type_grav_ghost_in || 
+	     t->type == task_type_grav_ghost_out) {
       scheduler_activate(s, t);
     }
 
diff --git a/src/task.c b/src/task.c
index a00693467c1e7646cc7f6698feece9b8ceac6706..e7acb7a4d4a5e1143dfcd6279c010658c54aa10b 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_grav",  "ghost",          "extra_ghost",
+    "init_grav",  "ghost_in", "ghost", "ghost_out",          "extra_ghost",
     "drift_part", "drift_gpart",    "kick1",
     "kick2",      "timestep",       "send",
     "recv",       "grav_top_level", "grav_long_range",
diff --git a/src/task.h b/src/task.h
index 644ccdd74f4225a04dfda68c046676404e6f6bc1..1b42058f52085053f82a3d875b694a396156635e 100644
--- a/src/task.h
+++ b/src/task.h
@@ -46,7 +46,9 @@ enum task_types {
   task_type_sub_self,
   task_type_sub_pair,
   task_type_init_grav,
+  task_type_ghost_in,
   task_type_ghost,
+  task_type_ghost_out,
   task_type_extra_ghost,
   task_type_drift_part,
   task_type_drift_gpart,