diff --git a/src/engine.c b/src/engine.c
index deeb530a97b1e0b3060a12b2f51204be6d86e9a2..eb5176dc22639787322180a8754ba908caafbfae 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -292,14 +292,24 @@ void engine_redistribute(struct engine *e) {
 
 #ifdef SWIFT_DEBUG_CHECKS
   /* Verify that the part have been sorted correctly. */
-  for (size_t k = 1; k < s->nr_parts; k++) {
-    if (dest[k - 1] > dest[k]) {
-      error("Sort failed!");
-    } else if (dest[k] != cell_getid(s->cdim, parts[k].x[0] * iwidth[0],
-                                     parts[k].x[1] * iwidth[1],
-                                     parts[k].x[2] * iwidth[2])) {
-      error("Incorrect indices!");
-    }
+  for (size_t k = 0; k < s->nr_parts; k++) {
+    const struct part *p = &s->parts[k];
+
+    /* New cell index */
+    const int new_ind =
+        cell_getid(s->cdim, p->x[0] * s->iwidth[0], p->x[1] * s->iwidth[1],
+                   p->x[2] * s->iwidth[2]);
+
+    /* New cell of this part */
+    const struct cell *c = &s->cells_top[new_ind];
+
+    if (dest[k] != new_ind)
+      error("part's new cell index not matching sorted index.");
+
+    if (p->x[0] < c->loc[0] || p->x[0] > c->loc[0] + c->width[0] ||
+        p->x[1] < c->loc[1] || p->x[1] > c->loc[1] + c->width[1] ||
+        p->x[2] < c->loc[2] || p->x[2] > c->loc[2] + c->width[2])
+      error("part not sorted into the right top-level cell!");
   }
 #endif
 
@@ -361,14 +371,24 @@ void engine_redistribute(struct engine *e) {
 
 #ifdef SWIFT_DEBUG_CHECKS
   /* Verify that the spart have been sorted correctly. */
-  for (size_t k = 1; k < s->nr_sparts; k++) {
-    if (s_dest[k - 1] > s_dest[k]) {
-      error("Sort failed!");
-    } else if (s_dest[k] != cell_getid(s->cdim, sparts[k].x[0] * iwidth[0],
-                                       sparts[k].x[1] * iwidth[1],
-                                       sparts[k].x[2] * iwidth[2])) {
-      error("Incorrect indices!");
-    }
+  for (size_t k = 0; k < s->nr_sparts; k++) {
+    const struct spart *sp = &s->sparts[k];
+
+    /* New cell index */
+    const int new_sind =
+        cell_getid(s->cdim, sp->x[0] * s->iwidth[0], sp->x[1] * s->iwidth[1],
+                   sp->x[2] * s->iwidth[2]);
+
+    /* New cell of this spart */
+    const struct cell *c = &s->cells_top[new_sind];
+
+    if (s_dest[k] != new_sind)
+      error("spart's new cell index not matching sorted index.");
+
+    if (sp->x[0] < c->loc[0] || sp->x[0] > c->loc[0] + c->width[0] ||
+        sp->x[1] < c->loc[1] || sp->x[1] > c->loc[1] + c->width[1] ||
+        sp->x[2] < c->loc[2] || sp->x[2] > c->loc[2] + c->width[2])
+      error("spart not sorted into the right top-level cell!");
   }
 #endif
 
@@ -430,14 +450,24 @@ void engine_redistribute(struct engine *e) {
 
 #ifdef SWIFT_DEBUG_CHECKS
   /* Verify that the gpart have been sorted correctly. */
-  for (size_t k = 1; k < s->nr_gparts; k++) {
-    if (g_dest[k - 1] > g_dest[k]) {
-      error("Sort failed!");
-    } else if (g_dest[k] != cell_getid(s->cdim, gparts[k].x[0] * iwidth[0],
-                                       gparts[k].x[1] * iwidth[1],
-                                       gparts[k].x[2] * iwidth[2])) {
-      error("Incorrect indices!");
-    }
+  for (size_t k = 0; k < s->nr_gparts; k++) {
+    const struct gpart *gp = &s->gparts[k];
+
+    /* New cell index */
+    const int new_gind =
+        cell_getid(s->cdim, gp->x[0] * s->iwidth[0], gp->x[1] * s->iwidth[1],
+                   gp->x[2] * s->iwidth[2]);
+
+    /* New cell of this gpart */
+    const struct cell *c = &s->cells_top[new_gind];
+
+    if (g_dest[k] != new_gind)
+      error("gpart's new cell index not matching sorted index.");
+
+    if (gp->x[0] < c->loc[0] || gp->x[0] > c->loc[0] + c->width[0] ||
+        gp->x[1] < c->loc[1] || gp->x[1] > c->loc[1] + c->width[1] ||
+        gp->x[2] < c->loc[2] || gp->x[2] > c->loc[2] + c->width[2])
+      error("gpart not sorted into the right top-level cell!");
   }
 #endif
 
diff --git a/src/space.c b/src/space.c
index 79dd83ea921dd35729760549470357fa4f1d8a23..c607c0dee46855cae1a5c13a6003249ed9712a68 100644
--- a/src/space.c
+++ b/src/space.c
@@ -716,11 +716,23 @@ void space_rebuild(struct space *s, int verbose) {
 #ifdef SWIFT_DEBUG_CHECKS
   /* Verify that the part have been sorted correctly. */
   for (size_t k = 0; k < nr_parts; k++) {
-    if (ind[k] != cell_getid(s->cdim, s->parts[k].x[0] * s->iwidth[0],
-                             s->parts[k].x[1] * s->iwidth[1],
-                             s->parts[k].x[2] * s->iwidth[2])) {
+    const struct part *p = &s->parts[k];
+
+    /* New cell index */
+    const int new_ind =
+        cell_getid(s->cdim, p->x[0] * s->iwidth[0], p->x[1] * s->iwidth[1],
+                   p->x[2] * s->iwidth[2]);
+
+    /* New cell of this part */
+    const struct cell *c = &s->cells_top[new_ind];
+
+    if (ind[k] != new_ind)
+      error("part's new cell index not matching sorted index.");
+
+    if (p->x[0] < c->loc[0] || p->x[0] > c->loc[0] + c->width[0] ||
+        p->x[1] < c->loc[1] || p->x[1] > c->loc[1] + c->width[1] ||
+        p->x[2] < c->loc[2] || p->x[2] > c->loc[2] + c->width[2])
       error("part not sorted into the right top-level cell!");
-    }
   }
 #endif
 
@@ -731,11 +743,23 @@ void space_rebuild(struct space *s, int verbose) {
 #ifdef SWIFT_DEBUG_CHECKS
   /* Verify that the spart have been sorted correctly. */
   for (size_t k = 0; k < nr_sparts; k++) {
-    if (sind[k] != cell_getid(s->cdim, s->sparts[k].x[0] * s->iwidth[0],
-                              s->sparts[k].x[1] * s->iwidth[1],
-                              s->sparts[k].x[2] * s->iwidth[2])) {
+    const struct spart *sp = &s->sparts[k];
+
+    /* New cell index */
+    const int new_sind =
+        cell_getid(s->cdim, sp->x[0] * s->iwidth[0], sp->x[1] * s->iwidth[1],
+                   sp->x[2] * s->iwidth[2]);
+
+    /* New cell of this spart */
+    const struct cell *c = &s->cells_top[new_sind];
+
+    if (sind[k] != new_sind)
+      error("spart's new cell index not matching sorted index.");
+
+    if (sp->x[0] < c->loc[0] || sp->x[0] > c->loc[0] + c->width[0] ||
+        sp->x[1] < c->loc[1] || sp->x[1] > c->loc[1] + c->width[1] ||
+        sp->x[2] < c->loc[2] || sp->x[2] > c->loc[2] + c->width[2])
       error("spart not sorted into the right top-level cell!");
-    }
   }
 #endif
 
@@ -804,11 +828,23 @@ void space_rebuild(struct space *s, int verbose) {
 #ifdef SWIFT_DEBUG_CHECKS
   /* Verify that the gpart have been sorted correctly. */
   for (size_t k = 0; k < nr_gparts; k++) {
-    if (gind[k] != cell_getid(s->cdim, s->gparts[k].x[0] * s->iwidth[0],
-                              s->gparts[k].x[1] * s->iwidth[1],
-                              s->gparts[k].x[2] * s->iwidth[2])) {
+    const struct gpart *gp = &s->gparts[k];
+
+    /* New cell index */
+    const int new_gind =
+        cell_getid(s->cdim, gp->x[0] * s->iwidth[0], gp->x[1] * s->iwidth[1],
+                   gp->x[2] * s->iwidth[2]);
+
+    /* New cell of this gpart */
+    const struct cell *c = &s->cells_top[new_gind];
+
+    if (gind[k] != new_gind)
+      error("gpart's new cell index not matching sorted index.");
+
+    if (gp->x[0] < c->loc[0] || gp->x[0] > c->loc[0] + c->width[0] ||
+        gp->x[1] < c->loc[1] || gp->x[1] > c->loc[1] + c->width[1] ||
+        gp->x[2] < c->loc[2] || gp->x[2] > c->loc[2] + c->width[2])
       error("gpart not sorted into the right top-level cell!");
-    }
   }
 #endif