diff --git a/src/cell.c b/src/cell.c
index 95e323307ab602dd1eb4c8e8c78f662295409ee1..22feeca040750ac93e24a01a878cad3e334cc649 100644
--- a/src/cell.c
+++ b/src/cell.c
@@ -3574,20 +3574,31 @@ int cell_unskip_stars_tasks(struct cell *c, struct scheduler *s) {
     const int cj_nodeID = nodeID;
 #endif
 
-    /* We only want to activate the task if the cell is active and is
-       going to update some gas on the *local* node */
-    if ((ci_nodeID == nodeID && cj_nodeID == nodeID) &&
-        (ci_active || cj_active)) {
+    if (t->type == task_type_self && ci_active) {
+      scheduler_activate(s, t);
+    }
 
+    else if (t->type == task_type_sub_self && ci_active) {
       scheduler_activate(s, t);
+    }
 
-    } else if ((ci_nodeID == nodeID && cj_nodeID != nodeID) && (cj_active)) {
+    else if (t->type == task_type_pair || t->type == task_type_sub_pair) {
 
-      scheduler_activate(s, t);
+      /* We only want to activate the task if the cell is active and is
+         going to update some gas on the *local* node */
+      if ((ci_nodeID == nodeID && cj_nodeID == nodeID) &&
+          (ci_active || cj_active)) {
 
-    } else if ((ci_nodeID != nodeID && cj_nodeID == nodeID) && (ci_active)) {
+        scheduler_activate(s, t);
 
-      scheduler_activate(s, t);
+      } else if ((ci_nodeID == nodeID && cj_nodeID != nodeID) && (cj_active)) {
+
+        scheduler_activate(s, t);
+
+      } else if ((ci_nodeID != nodeID && cj_nodeID == nodeID) && (ci_active)) {
+
+        scheduler_activate(s, t);
+      }
     }
 
     /* Nothing more to do here, all drifts and sorts activated above */