diff --git a/src/engine.c b/src/engine.c
index 8ef958827f76ced9fc8b65e04e356b3b123be40e..d60367aa8f948646f9387373a1db337fc557a8d6 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -3962,6 +3962,7 @@ void engine_rebuild(struct engine *e, int clean_smoothing_length_values) {
 
   /* Clear the forcerebuild flag, whatever it was. */
   e->forcerebuild = 0;
+  e->restarting = 0;
 
   /* Re-build the space. */
   space_rebuild(e->s, e->verbose);
@@ -4038,7 +4039,7 @@ void engine_prepare(struct engine *e) {
   const ticks tic = getticks();
 
   /* Unskip active tasks and check for rebuild */
-  if (!e->forcerepart) engine_unskip(e);
+  if (!e->forcerepart && !e->restarting) engine_unskip(e);
 
 #ifdef WITH_MPI
   MPI_Allreduce(MPI_IN_PLACE, &e->forcerebuild, 1, MPI_INT, MPI_MAX,
@@ -4052,7 +4053,7 @@ void engine_prepare(struct engine *e) {
   if (e->forcerebuild) {
 
     /* Let's start by drifting everybody to the current time */
-    engine_drift_all(e);
+    if (!e->restarting) engine_drift_all(e);
 
     /* And rebuild */
     engine_rebuild(e, 0);
@@ -5825,6 +5826,7 @@ void engine_config(int restart, struct engine *e, struct swift_params *params,
   e->nr_proxies = 0;
   e->forcerebuild = 1;
   e->forcerepart = 0;
+  e->restarting = restart;
   e->step_props = engine_step_prop_none;
   e->links = NULL;
   e->nr_links = 0;
diff --git a/src/engine.h b/src/engine.h
index d5de93c8c1950321581b0961db7039f158083859..ae430d9f796d6cf9bd4a1973f15b3a4e986b9997 100644
--- a/src/engine.h
+++ b/src/engine.h
@@ -264,6 +264,9 @@ struct engine {
   /* Wallclock time of the last time-step */
   float wallclock_time;
 
+  /* Are we in the process of restaring a simulation? */
+  int restarting;
+
   /* Force the engine to rebuild? */
   int forcerebuild;