diff --git a/src/space.c b/src/space.c
index a9958f6fbd7d85060db99a9682b0de10f507085d..9c163fede0635a272c28ac7b2645eabeffced047 100644
--- a/src/space.c
+++ b/src/space.c
@@ -1269,6 +1269,12 @@ void space_split_mapper(void *map_data, int num_elements, void *extra_data) {
       atomic_cas(&s->maxdepth, maxdepth, c->depth);
     }
 
+    /* If the depth is too large, we have a problem and should stop. */
+    if (s->maxdepth > space_cell_maxdepth) {
+      error("Exceeded maximum depth (%d) when splitting cells, aborting",
+            space_cell_maxdepth);
+    }
+
     /* Split or let it be? */
     if (count > space_splitsize || gcount > space_splitsize) {
 
diff --git a/src/space.h b/src/space.h
index 72b17405f13766ad2ccc9d53712068f28172067b..5332bc9fb5a7142f251d3ffd28dde6fac5211ea5 100644
--- a/src/space.h
+++ b/src/space.h
@@ -44,6 +44,9 @@
 #define space_stretch 1.10f
 #define space_maxreldx 0.25f
 
+/* Maximum allowed depth of cell splits. */
+#define space_cell_maxdepth 52
+
 /* Split size. */
 extern int space_splitsize;
 extern int space_maxsize;