diff --git a/src/runner.c b/src/runner.c
index 518bac48743164d2f2ea10dd85cb4311735f62b0..fe9f0d91bcb6dcd6449443a4b4d9179d195e7c40 100644
--- a/src/runner.c
+++ b/src/runner.c
@@ -738,6 +738,8 @@ void runner_dokick1 ( struct runner *r , struct cell *c ) {
         /* Loop over the progeny. */
         for ( k = 0 ; k < 8 ; k++ )
             if ( c->progeny[k] != NULL ) {
+                if ( c->count < space_subsize )
+                    runner_dokick1( r , c->progeny[k] );
                 dt_min = fminf( dt_min , c->progeny[k]->dt_min );
                 dt_max = fmaxf( dt_max , c->progeny[k]->dt_max );
                 h_max = fmaxf( h_max , c->progeny[k]->h_max );
diff --git a/src/runner.h b/src/runner.h
index 58ecf128f5a0b867745a2b2dee5f2e50418c8f31..5ee1ee3a95c36b2e70e6c656cd2a95567c565f84 100644
--- a/src/runner.h
+++ b/src/runner.h
@@ -74,4 +74,6 @@ void runner_dopair_density ( struct runner *r , struct cell *ci , struct cell *c
 void runner_doself_density ( struct runner *r , struct cell *c );
 void runner_dosub_density ( struct runner *r , struct cell *ci , struct cell *cj , int flags );
 void runner_dosort ( struct runner *r , struct cell *c , int flag , int clock );
+void runner_dokick1 ( struct runner *r , struct cell *c );
+void runner_dokick2 ( struct runner *r , struct cell *c );
 void *runner_main ( void *data );
diff --git a/src/scheduler.c b/src/scheduler.c
index ced1dab562745199d264e0f49c7e75df0eb91e5a..80d9d744417d856e2af7bea3d9e00d44d3be0634 100644
--- a/src/scheduler.c
+++ b/src/scheduler.c
@@ -72,9 +72,11 @@ void scheduler_map_mkghosts ( struct cell *c , void *data ) {
         c->ghost = scheduler_addtask( s , task_type_ghost , task_subtype_none , 0 , 0 , c , NULL , 0 );
 
     /* Append a kick1 task and make sure the parent depends on it. */
-    c->kick1 = scheduler_addtask( s , task_type_kick1 , task_subtype_none , 0 , 0 , c , NULL , 0 );
-    if ( c->parent != NULL )
-        task_addunlock( c->kick1 , c->parent->kick1 );
+    if ( c->parent == NULL || c->parent->count >= space_subsize ) {
+        c->kick1 = scheduler_addtask( s , task_type_kick1 , task_subtype_none , 0 , 0 , c , NULL , 0 );
+        if ( c->parent != NULL )
+            task_addunlock( c->kick1 , c->parent->kick1 );
+        }
     
     /* Append a kick2 task if we are the active super cell. */
     if ( c->super == c && c->nr_tasks > 0 )