diff --git a/src/runner.c b/src/runner.c
index 3d6572b13ff6e5f0629127aef74bbc26afd8fe29..1862cade11329127c423ad6ca4189bec1df1ad5e 100644
--- a/src/runner.c
+++ b/src/runner.c
@@ -850,8 +850,8 @@ void runner_dokick(struct runner *r, struct cell *c, int timer) {
   int k, count = 0, nr_parts = c->count, updated;
   float new_dt = 0.0f, new_dt_hydro = 0.0f, new_dt_grav = 0.0f,
         current_dt = 0.0f;
-  float t_start, t_end, t_current = r->e->time, dt, t_end_min = FLT_MAX,
-                        t_end_max = 0.;
+  float t_start, t_end, t_current = r->e->time, t_end_min = FLT_MAX,
+    t_end_max = 0., dt;
   float dt_max_timeline = r->e->timeEnd - r->e->timeBegin, dt_timeline;
   float dt_min = r->e->dt_min, dt_max = r->e->dt_max;
   float h_max, dx_max;
@@ -880,7 +880,7 @@ void runner_dokick(struct runner *r, struct cell *c, int timer) {
       x[0] = p->x[0], x[1] = p->x[1], x[2] = p->x[2];
 
       if (p->id == 0)
-        message("Kick ! dt=%f t_beg=%f t_end=%f t_cur=%f", dt, p->t_begin,
+        message("Kick ! t_beg=%f t_end=%f t_cur=%f", p->t_begin,
                 p->t_end, t_current);
 
       /* If particle needs to be kicked */
diff --git a/src/runner_doiact.h b/src/runner_doiact.h
index 017529cc94021ee9ea38ce543ac8a3c4dea2e1db..bc3f5fe0f8fdfb723a2264a3a34c1163c6338e1b 100644
--- a/src/runner_doiact.h
+++ b/src/runner_doiact.h
@@ -110,7 +110,7 @@ void DOPAIR_NAIVE(struct runner *r, struct cell *restrict ci,
   struct part *restrict pi, *restrict pj;
   double pix[3];
   float dx[3], hi, hig2, r2;
-  float dt_step = e->dt_step;
+  float t_current = e->time;
 #ifdef VECTORIZE
   int icount = 0;
   float r2q[VEC_SIZE] __attribute__((aligned(16)));
@@ -122,7 +122,7 @@ void DOPAIR_NAIVE(struct runner *r, struct cell *restrict ci,
   TIMER_TIC
 
   /* Anything to do here? */
-  if (ci->dt_min > dt_step && cj->dt_min > dt_step) return;
+  if (ci->t_end_min > t_current && cj->t_end_min > t_current) return;
 
   /* Get the relative distance between the pairs, wrapping. */
   for (k = 0; k < 3; k++) {
@@ -219,7 +219,7 @@ void DOSELF_NAIVE(struct runner *r, struct cell *restrict c) {
   struct part *restrict pi, *restrict pj;
   double pix[3] = {0.0, 0.0, 0.0};
   float dx[3], hi, hig2, r2;
-  float dt_step = r->e->dt_step;
+  float t_current = r->e->time;
 #ifdef VECTORIZE
   int icount = 0;
   float r2q[VEC_SIZE] __attribute__((aligned(16)));
@@ -231,7 +231,7 @@ void DOSELF_NAIVE(struct runner *r, struct cell *restrict c) {
   TIMER_TIC
 
   /* Anything to do here? */
-  if (c->dt_min > dt_step) return;
+  if (c->t_end_min > t_current) return;
 
   /* printf( "runner_dopair_naive: doing pair [ %g %g %g ]/[ %g %g %g ] with
   %i/%i parts and shift = [ %g %g %g ].\n" ,
@@ -769,7 +769,7 @@ void DOPAIR1(struct runner *r, struct cell *ci, struct cell *cj) {
   double hi_max, hj_max;
   double di_max, dj_min;
   int count_i, count_j;
-  float dt_step = e->dt_step;
+  float t_current = e->time;
 #ifdef VECTORIZE
   int icount = 0;
   float r2q[VEC_SIZE] __attribute__((aligned(16)));
@@ -781,7 +781,7 @@ void DOPAIR1(struct runner *r, struct cell *ci, struct cell *cj) {
   TIMER_TIC
 
   /* Anything to do here? */
-  if (ci->dt_min > dt_step && cj->dt_min > dt_step) return;
+  if (ci->t_end_min > t_current && cj->t_end_min > t_current) return;
 
   /* Get the sort ID. */
   sid = space_getsid(e->s, &ci, &cj, shift);
@@ -815,7 +815,7 @@ void DOPAIR1(struct runner *r, struct cell *ci, struct cell *cj) {
 
     /* Get a hold of the ith part in ci. */
     pi = &parts_i[sort_i[pid].i];
-    if (pi->dt > dt_step) continue;
+    if (pi->t_end > t_current) continue;
     hi = pi->h;
     di = sort_i[pid].d + hi * kernel_gamma + dx_max - rshift;
     if (di < dj_min) continue;
@@ -879,7 +879,7 @@ void DOPAIR1(struct runner *r, struct cell *ci, struct cell *cj) {
 
     /* Get a hold of the jth part in cj. */
     pj = &parts_j[sort_j[pjd].i];
-    if (pj->dt > dt_step) continue;
+    if (pj->t_end > t_current) continue;
     hj = pj->h;
     dj = sort_j[pjd].d - hj * kernel_gamma - dx_max - rshift;
     if (dj > di_max) continue;
@@ -966,7 +966,7 @@ void DOPAIR2(struct runner *r, struct cell *ci, struct cell *cj) {
   double hi_max, hj_max;
   double di_max, dj_min;
   int count_i, count_j;
-  float dt_step = e->dt_step;
+  float t_current = e->time;
 #ifdef VECTORIZE
   int icount1 = 0;
   float r2q1[VEC_SIZE] __attribute__((aligned(16)));
@@ -984,7 +984,7 @@ void DOPAIR2(struct runner *r, struct cell *ci, struct cell *cj) {
   TIMER_TIC
 
   /* Anything to do here? */
-  if (ci->dt_min > dt_step && cj->dt_min > dt_step) return;
+  if (ci->t_end_min > t_current && cj->t_end_min > t_current) return;
 
   /* Get the shift ID. */
   sid = space_getsid(e->s, &ci, &cj, shift);
@@ -1013,28 +1013,28 @@ void DOPAIR2(struct runner *r, struct cell *ci, struct cell *cj) {
   dx_max = (ci->dx_max + cj->dx_max);
 
   /* Collect the number of parts left and right below dt. */
-  if (ci->dt_max <= dt_step) {
+  if (ci->t_end_max <= t_current) {
     sortdt_i = sort_i;
     countdt_i = count_i;
-  } else if (ci->dt_min <= dt_step) {
+  } else if (ci->t_end_min <= t_current) {
     if ((sortdt_i = (struct entry *)alloca(sizeof(struct entry) * count_i)) ==
         NULL)
       error("Failed to allocate dt sortlists.");
     for (k = 0; k < count_i; k++)
-      if (parts_i[sort_i[k].i].dt <= dt_step) {
+      if (parts_i[sort_i[k].i].t_end <= t_current) {
         sortdt_i[countdt_i] = sort_i[k];
         countdt_i += 1;
       }
   }
-  if (cj->dt_max <= dt_step) {
+  if (cj->t_end_max <= t_current) {
     sortdt_j = sort_j;
     countdt_j = count_j;
-  } else if (cj->dt_min <= dt_step) {
+  } else if (cj->t_end_min <= t_current) {
     if ((sortdt_j = (struct entry *)alloca(sizeof(struct entry) * count_j)) ==
         NULL)
       error("Failed to allocate dt sortlists.");
     for (k = 0; k < count_j; k++)
-      if (parts_j[sort_j[k].i].dt <= dt_step) {
+      if (parts_j[sort_j[k].i].t_end <= t_current) {
         sortdt_j[countdt_j] = sort_j[k];
         countdt_j += 1;
       }
@@ -1054,7 +1054,7 @@ void DOPAIR2(struct runner *r, struct cell *ci, struct cell *cj) {
     for (k = 0; k < 3; k++) pix[k] = pi->x[k] - shift[k];
 
     /* Look at valid dt parts only? */
-    if (pi->dt > dt_step) {
+    if (pi->t_end > t_current) {
 
       /* Loop over the parts in cj within dt. */
       for (pjd = 0; pjd < countdt_j && sortdt_j[pjd].d < di; pjd++) {
@@ -1126,7 +1126,7 @@ void DOPAIR2(struct runner *r, struct cell *ci, struct cell *cj) {
 #ifndef VECTORIZE
 
           /* Does pj need to be updated too? */
-          if (pj->dt <= dt_step)
+          if (pj->t_end <= t_current)
             IACT(r2, dx, hi, hj, pi, pj);
           else
             IACT_NONSYM(r2, dx, hi, hj, pi, pj);
@@ -1134,7 +1134,7 @@ void DOPAIR2(struct runner *r, struct cell *ci, struct cell *cj) {
 #else
 
           /* Does pj need to be updated too? */
-          if (pj->dt <= dt_step) {
+          if (pj->t_end <= t_current) {
 
             /* Add this interaction to the symmetric queue. */
             r2q2[icount2] = r2;
@@ -1199,7 +1199,7 @@ void DOPAIR2(struct runner *r, struct cell *ci, struct cell *cj) {
     hjg2 = hj * hj * kernel_gamma2;
 
     /* Is this particle outside the dt? */
-    if (pj->dt > dt_step) {
+    if (pj->t_end > t_current) {
 
       /* Loop over the parts in ci. */
       for (pid = countdt_i - 1; pid >= 0 && sortdt_i[pid].d > dj; pid--) {
@@ -1270,7 +1270,7 @@ void DOPAIR2(struct runner *r, struct cell *ci, struct cell *cj) {
 #ifndef VECTORIZE
 
           /* Does pi need to be updated too? */
-          if (pi->dt <= dt_step)
+          if (pi->t_end <= t_current)
             IACT(r2, dx, hj, hi, pj, pi);
           else
             IACT_NONSYM(r2, dx, hj, hi, pj, pi);
@@ -1360,7 +1360,7 @@ void DOSELF1(struct runner *r, struct cell *restrict c) {
   double pix[3];
   float dx[3], hi, hj, hig2, r2;
   struct part *restrict parts = c->parts, *restrict pi, *restrict pj;
-  float dt_step = r->e->dt_step;
+  float t_current = r->e->time;
   int firstdt = 0, countdt = 0, *indt = NULL, doj;
 #ifdef VECTORIZE
   int icount1 = 0;
@@ -1379,13 +1379,13 @@ void DOSELF1(struct runner *r, struct cell *restrict c) {
   TIMER_TIC
 
   /* Set up indt if needed. */
-  if (c->dt_min > dt_step)
+  if (c->t_end_min > t_current)
     return;
-  else if (c->dt_max > dt_step) {
+  else if (c->t_end_max > t_current) {
     if ((indt = (int *)alloca(sizeof(int) * count)) == NULL)
       error("Failed to allocate indt.");
     for (k = 0; k < count; k++)
-      if (parts[k].dt <= dt_step) {
+      if (parts[k].t_end <= t_current) {
         indt[countdt] = k;
         countdt += 1;
       }
@@ -1403,7 +1403,7 @@ void DOSELF1(struct runner *r, struct cell *restrict c) {
     hig2 = hi * hi * kernel_gamma2;
 
     /* Is the ith particle inactive? */
-    if (pi->dt > dt_step) {
+    if (pi->t_end > t_current) {
 
       /* Loop over the other particles .*/
       for (pjd = firstdt; pjd < countdt; pjd++) {
@@ -1471,7 +1471,7 @@ void DOSELF1(struct runner *r, struct cell *restrict c) {
           dx[k] = pix[k] - pj->x[k];
           r2 += dx[k] * dx[k];
         }
-        doj = (pj->dt <= dt_step) && (r2 < hj * hj * kernel_gamma2);
+        doj = (pj->t_end <= t_current) && (r2 < hj * hj * kernel_gamma2);
 
         /* Hit or miss? */
         if (r2 < hig2 || doj) {
@@ -1583,7 +1583,7 @@ void DOSELF2(struct runner *r, struct cell *restrict c) {
   double pix[3];
   float dx[3], hi, hj, hig2, r2;
   struct part *restrict parts = c->parts, *restrict pi, *restrict pj;
-  float dt_step = r->e->dt_step;
+  float t_current = r->e->time;
   int firstdt = 0, countdt = 0, *indt = NULL;
 #ifdef VECTORIZE
   int icount1 = 0;
@@ -1602,13 +1602,13 @@ void DOSELF2(struct runner *r, struct cell *restrict c) {
   TIMER_TIC
 
   /* Set up indt if needed. */
-  if (c->dt_min > dt_step)
+  if (c->t_end_min > t_current)
     return;
-  else if (c->dt_max > dt_step) {
+  else if (c->t_end_max > t_current) {
     if ((indt = (int *)alloca(sizeof(int) * count)) == NULL)
       error("Failed to allocate indt.");
     for (k = 0; k < count; k++)
-      if (parts[k].dt <= dt_step) {
+      if (parts[k].t_end <= t_current) {
         indt[countdt] = k;
         countdt += 1;
       }
@@ -1626,7 +1626,7 @@ void DOSELF2(struct runner *r, struct cell *restrict c) {
     hig2 = hi * hi * kernel_gamma2;
 
     /* Is the ith particle not active? */
-    if (pi->dt > dt_step) {
+    if (pi->t_end > t_current) {
 
       /* Loop over the other particles .*/
       for (pjd = firstdt; pjd < countdt; pjd++) {
@@ -1701,7 +1701,7 @@ void DOSELF2(struct runner *r, struct cell *restrict c) {
 #ifndef VECTORIZE
 
           /* Does pj need to be updated too? */
-          if (pj->dt <= dt_step)
+          if (pj->t_end <= t_current)
             IACT(r2, dx, hi, hj, pi, pj);
           else
             IACT_NONSYM(r2, dx, hi, hj, pi, pj);
@@ -1709,7 +1709,7 @@ void DOSELF2(struct runner *r, struct cell *restrict c) {
 #else
 
           /* Does pj need to be updated too? */
-          if (pj->dt <= dt_step) {
+          if (pj->t_end <= t_current) {
 
             /* Add this interaction to the symmetric queue. */
             r2q2[icount2] = r2;
@@ -1794,7 +1794,7 @@ void DOSUB1(struct runner *r, struct cell *ci, struct cell *cj, int sid,
   double shift[3];
   float h;
   struct space *s = r->e->s;
-  float dt_step = r->e->dt_step;
+  float t_current = r->e->time;
 
   TIMER_TIC
 
@@ -1802,7 +1802,7 @@ void DOSUB1(struct runner *r, struct cell *ci, struct cell *cj, int sid,
   if (cj == NULL) {
 
     /* Should we even bother? */
-    if (ci->dt_min > dt_step) return;
+    if (ci->t_end_min > t_current) return;
 
     /* Recurse? */
     if (ci->split) {
@@ -1828,7 +1828,7 @@ void DOSUB1(struct runner *r, struct cell *ci, struct cell *cj, int sid,
   else {
 
     /* Should we even bother? */
-    if (ci->dt_min > dt_step && cj->dt_min > dt_step) return;
+    if (ci->t_end_min > t_current && cj->t_end_min > t_current) return;
 
     /* Get the cell dimensions. */
     h = fmin(ci->h[0], fmin(ci->h[1], ci->h[2]));
@@ -2041,7 +2041,7 @@ void DOSUB1(struct runner *r, struct cell *ci, struct cell *cj, int sid,
     }
 
     /* Otherwise, compute the pair directly. */
-    else if (ci->dt_min <= dt_step || cj->dt_min <= dt_step) {
+    else if (ci->t_end_min <= t_current || cj->t_end_min <= t_current) {
 
       /* Do any of the cells need to be sorted first? */
       if (!(ci->sorted & (1 << sid))) runner_dosort(r, ci, (1 << sid), 1);
@@ -2069,7 +2069,7 @@ void DOSUB2(struct runner *r, struct cell *ci, struct cell *cj, int sid,
   double shift[3];
   float h;
   struct space *s = r->e->s;
-  float dt_step = r->e->dt_step;
+  float t_current = r->e->time;
 
   TIMER_TIC
 
@@ -2077,7 +2077,7 @@ void DOSUB2(struct runner *r, struct cell *ci, struct cell *cj, int sid,
   if (cj == NULL) {
 
     /* Should we even bother? */
-    if (ci->dt_min > dt_step) return;
+    if (ci->t_end_min > t_current) return;
 
     /* Recurse? */
     if (ci->split) {
@@ -2103,7 +2103,7 @@ void DOSUB2(struct runner *r, struct cell *ci, struct cell *cj, int sid,
   else {
 
     /* Should we even bother? */
-    if (ci->dt_min > dt_step && cj->dt_min > dt_step) return;
+    if (ci->t_end_min > t_current && cj->t_end_min > t_current) return;
 
     /* Get the cell dimensions. */
     h = fmin(ci->h[0], fmin(ci->h[1], ci->h[2]));
@@ -2316,7 +2316,7 @@ void DOSUB2(struct runner *r, struct cell *ci, struct cell *cj, int sid,
     }
 
     /* Otherwise, compute the pair directly. */
-    else if (ci->dt_min <= dt_step || cj->dt_min <= dt_step) {
+    else if (ci->t_end_min <= t_current || cj->t_end_min <= t_current) {
 
       /* Do any of the cells need to be sorted first? */
       if (!(ci->sorted & (1 << sid))) runner_dosort(r, ci, (1 << sid), 1);
@@ -2345,7 +2345,7 @@ void DOSUB_SUBSET(struct runner *r, struct cell *ci, struct part *parts,
   float h;
   struct space *s = r->e->s;
   struct cell *sub = NULL;
-  float dt_step = r->e->dt_step;
+  float t_current = r->e->time;
 
   TIMER_TIC
 
@@ -2905,7 +2905,7 @@ void DOSUB_SUBSET(struct runner *r, struct cell *ci, struct part *parts,
     }
 
     /* Otherwise, compute the pair directly. */
-    else if (ci->dt_min <= dt_step || cj->dt_min <= dt_step) {
+    else if (ci->t_end_min <= t_current || cj->t_end_min <= t_current) {
 
       /* Get the relative distance between the pairs, wrapping. */
       for (k = 0; k < 3; k++) {