diff --git a/examples/plot_tasks.py b/examples/plot_tasks.py
index c96d063e0bf1adf614a447f0dd524302a070e9dd..dadc3b1977e755267bb98d51aace46841ed22c9a 100755
--- a/examples/plot_tasks.py
+++ b/examples/plot_tasks.py
@@ -59,8 +59,8 @@ pl.rcParams.update(PLOT_PARAMS)
 
 #  Tasks and subtypes. Indexed as in tasks.h.
 TASKTYPES = ["none", "sort", "self", "pair", "sub", "init", "ghost", "drift",
-             "kick", "send", "recv", "grav_pp", "grav_mm", "grav_up",
-             "grav_down", "grav_external", "part_sort", "gpart_sort",
+             "kick", "kick_fixdt", "send", "recv", "grav_pp", "grav_mm",
+             "grav_up", "grav_down", "grav_external", "part_sort", "gpart_sort",
              "split_cell", "rewait", "count"]
 
 TASKCOLOURS = {"none": "black",
@@ -72,6 +72,7 @@ TASKCOLOURS = {"none": "black",
                "ghost": "cyan",
                "drift": "maroon",
                "kick": "green",
+               "kick_fixdt": "green",
                "send": "yellow",
                "recv": "magenta",
                "grav_pp": "mediumorchid",
diff --git a/examples/plot_tasks_MPI.py b/examples/plot_tasks_MPI.py
index ae84b0177bfa01d4bb4c2c9c3e44c088b8ae7776..99b2f3db9a7564f082949f0ad102abcdb6df31f4 100755
--- a/examples/plot_tasks_MPI.py
+++ b/examples/plot_tasks_MPI.py
@@ -65,8 +65,8 @@ pl.rcParams.update(PLOT_PARAMS)
 
 #  Tasks and subtypes. Indexed as in tasks.h.
 TASKTYPES = ["none", "sort", "self", "pair", "sub", "init", "ghost", "drift",
-             "kick", "send", "recv", "grav_pp", "grav_mm", "grav_up",
-             "grav_down", "grav_external", "part_sort", "gpart_sort",
+             "kick", "kick_fixdt", "send", "recv", "grav_pp", "grav_mm",
+             "grav_up", "grav_down", "grav_external", "part_sort", "gpart_sort",
              "split_cell", "rewait", "count"]
 
 TASKCOLOURS = {"none": "black",
@@ -78,6 +78,7 @@ TASKCOLOURS = {"none": "black",
                "ghost": "cyan",
                "drift": "maroon",
                "kick": "green",
+               "kick_fixdt": "green",
                "send": "yellow",
                "recv": "magenta",
                "grav_pp": "mediumorchid",
diff --git a/src/engine.c b/src/engine.c
index 76243b1e481191c095d223a6db973aaa82c227a0..799b5d40247b6f38482aa72bebe0f11f120a4469 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -112,6 +112,7 @@ void engine_make_hierarchical_tasks(struct engine *e, struct cell *c,
   const int is_with_external_gravity =
       (e->policy & engine_policy_external_gravity) ==
       engine_policy_external_gravity;
+  const int is_fixdt = (e->policy & engine_policy_fixdt) == engine_policy_fixdt;
 
   /* Am I the super-cell? */
   if (super == NULL && (c->count > 0 || c->gcount > 0)) {
@@ -130,9 +131,14 @@ void engine_make_hierarchical_tasks(struct engine *e, struct cell *c,
       c->drift = scheduler_addtask(s, task_type_drift, task_subtype_none, 0, 0,
                                    c, NULL, 0);
 
-      /* Add the kick task. */
-      c->kick = scheduler_addtask(s, task_type_kick, task_subtype_none, 0, 0, c,
-                                  NULL, 0);
+      /* Add the kick task that matches the policy. */
+      if (is_fixdt) {
+        c->kick = scheduler_addtask(s, task_type_kick_fixdt, task_subtype_none,
+                                    0, 0, c, NULL, 0);
+      } else {
+        c->kick = scheduler_addtask(s, task_type_kick, task_subtype_none, 0, 0,
+                                    c, NULL, 0);
+      }
 
       if (c->count > 0) {
 
@@ -2102,11 +2108,17 @@ void engine_step(struct engine *e) {
   /* Build the masks corresponding to the policy */
   unsigned int mask = 0, submask = 0;
 
-  /* We always have sort tasks and kick tasks */
+  /* We always have sort tasks and init tasks */
   mask |= 1 << task_type_sort;
-  mask |= 1 << task_type_kick;
   mask |= 1 << task_type_init;
 
+  /* Add the correct kick task */
+  if (e->policy & engine_policy_fixdt) {
+    mask |= 1 << task_type_kick_fixdt;
+  } else {
+    mask |= 1 << task_type_kick;
+  }
+
   /* Add the tasks corresponding to hydro operations to the masks */
   if (e->policy & engine_policy_hydro) {
 
diff --git a/src/runner.c b/src/runner.c
index 3349fa35138c717d0994d6cbcce16657641a5a27..7b9872bad3e4fcb9df67983164edb95e808523aa 100644
--- a/src/runner.c
+++ b/src/runner.c
@@ -1371,6 +1371,9 @@ void *runner_main(void *data) {
         case task_type_kick:
           runner_do_kick(r, ci, 1);
           break;
+        case task_type_kick_fixdt:
+          runner_do_kick(r, ci, 1);
+          break;
         case task_type_send:
           break;
         case task_type_recv:
diff --git a/src/task.c b/src/task.c
index 31c2bfcb3462b9f91547ebd631f645e190c07143..31e33ebcaccb0f1420033c416c4b7d3d43094403 100644
--- a/src/task.c
+++ b/src/task.c
@@ -47,10 +47,11 @@
 
 /* Task type names. */
 const char *taskID_names[task_type_count] = {
-    "none",          "sort",      "self",       "pair",       "sub",
-    "init",          "ghost",     "drift",      "kick",       "send",
-    "recv",          "grav_pp",   "grav_mm",    "grav_up",    "grav_down",
-    "grav_external", "part_sort", "gpart_sort", "split_cell", "rewait"};
+    "none",      "sort",          "self",      "pair",       "sub",
+    "init",      "ghost",         "drift",     "kick",       "kick_fixdt",
+    "send",      "recv",          "grav_pp",   "grav_mm",    "grav_up",
+    "grav_down", "grav_external", "part_sort", "gpart_sort", "split_cell",
+    "rewait"};
 
 const char *subtaskID_names[task_type_count] = {"none",  "density",
                                                 "force", "grav"};
diff --git a/src/task.h b/src/task.h
index 25cc886f4b38456a0431fb6c7d0b7b1864053dd9..c4632b48087c99bf6958960ed11d36718ac744d1 100644
--- a/src/task.h
+++ b/src/task.h
@@ -42,6 +42,7 @@ enum task_types {
   task_type_ghost,
   task_type_drift,
   task_type_kick,
+  task_type_kick_fixdt,
   task_type_send,
   task_type_recv,
   task_type_grav_pp,