diff --git a/src/space.c b/src/space.c
index 0522834631012085b337598485cf0259414e55a4..8fcdce0cf6a3ff54d4514b4b56ad9310d2fd2157 100644
--- a/src/space.c
+++ b/src/space.c
@@ -382,6 +382,12 @@ void space_rebuild(struct space *s, double cell_max, int verbose) {
       struct part tp = s->parts[k];
       s->parts[k] = s->parts[nr_parts];
       s->parts[nr_parts] = tp;
+      if (s->parts[k].gpart != NULL) {
+        s->parts[k].gpart->part = &s->parts[k];
+      }
+      if (s->parts[nr_parts].gpart != NULL) {
+        s->parts[nr_parts].gpart->part = &s->parts[nr_parts];
+      }
       struct xpart txp = s->xparts[k];
       s->xparts[k] = s->xparts[nr_parts];
       s->xparts[nr_parts] = txp;
@@ -398,6 +404,12 @@ void space_rebuild(struct space *s, double cell_max, int verbose) {
       struct gpart tp = s->gparts[k];
       s->gparts[k] = s->gparts[nr_gparts];
       s->gparts[nr_gparts] = tp;
+      if (s->gparts[k].id > 0) {
+        s->gparts[k].part->gpart = &s->gparts[k];
+      }
+      if (s->gparts[nr_gparts].id > 0) {
+        s->gparts[nr_gparts].part->gpart = &s->gparts[nr_gparts];
+      }
       int t = ind[k];
       ind[k] = ind[nr_gparts];
       ind[nr_gparts] = t;