diff --git a/src/cell.c b/src/cell.c
index b0e299999e9073cc14d92b769b3e157f50d64c8f..8184f6556061a9febd372a7a8cd5150bb2f0685d 100644
--- a/src/cell.c
+++ b/src/cell.c
@@ -605,6 +605,26 @@ void cell_init_parts(struct cell *c, void *data) {
   c->ti_end_max = 0;
 }
 
+/**
+ * @brief Initialises all g-particles to a valid state even if the ICs were
+ *stupid
+ *
+ * @param c Cell to act upon
+ * @param data Unused parameter
+ */
+void cell_init_gparts(struct cell *c, void *data) {
+
+  struct gpart *gp = c->gparts;
+  const int gcount = c->gcount;
+
+  for (int i = 0; i < gcount; ++i) {
+    gp[i].ti_begin = 0;
+    gp[i].ti_end = 0;
+  }
+  c->ti_end_min = 0;
+  c->ti_end_max = 0;
+}
+
 /**
  * @brief Converts hydro quantities to a valid state after the initial density
  *calculation
diff --git a/src/cell.h b/src/cell.h
index 05b870b144dd425ee9e72ee3b529122b6e721523..f0e99e8b45b0225764267f9cde5eb2d3a244136f 100644
--- a/src/cell.h
+++ b/src/cell.h
@@ -178,6 +178,7 @@ int cell_getsize(struct cell *c);
 int cell_link_parts(struct cell *c, struct part *parts);
 int cell_link_gparts(struct cell *c, struct gpart *gparts);
 void cell_init_parts(struct cell *c, void *data);
+void cell_init_gparts(struct cell *c, void *data);
 void cell_convert_hydro(struct cell *c, void *data);
 void cell_clean_links(struct cell *c, void *data);
 
diff --git a/src/engine.c b/src/engine.c
index 0b4a819e9d68ba62a6ed95a6d839c188f861e804..a358165cbd486b8e500bc327df1a62e9d1581ed3 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -1846,7 +1846,15 @@ void engine_init_particles(struct engine *e) {
 
   /* Make sure all particles are ready to go */
   /* i.e. clean-up any stupid state in the ICs */
-  space_map_cells_pre(s, 1, cell_init_parts, NULL);
+  if ((e->policy & engine_policy_hydro) == engine_policy_hydro) {
+    space_map_cells_pre(s, 1, cell_init_parts, NULL);
+  }
+  if (((e->policy & engine_policy_self_gravity) ==
+       engine_policy_self_gravity) ||
+      ((e->policy & engine_policy_external_gravity) ==
+       engine_policy_external_gravity)) {
+    space_map_cells_pre(s, 1, cell_init_gparts, NULL);
+  }
 
   engine_prepare(e);