diff --git a/src/fof.c b/src/fof.c
index 9707d3c32aae8291f296ac3dfc72bd56a36fe046..580de4ab3380dd3fc647d3d520d8a5e1cf331b98 100644
--- a/src/fof.c
+++ b/src/fof.c
@@ -723,12 +723,12 @@ void fof_search_tree_mapper(void *map_data, int num_elements,
   struct space *s = (struct space *)extra_data;
   int *local_cells = (int *)map_data;
 
-  const size_t nr_cells = s->nr_cells;
+  const size_t nr_local_cells = s->nr_local_cells;
   const double dim[3] = {s->dim[0], s->dim[1], s->dim[2]};
   const double search_r2 = s->l_x2;
  
-  /* Make a list of cell offsets into the top-level cell array. */
-  int *const offset = s->cell_index + (ptrdiff_t)(&s->cells_top[local_cells[0]] - s->cells_top);
+  /* Make a list of cell offsets into the local top-level cell array. */
+  int *const offset = s->cell_index + (ptrdiff_t)(local_cells - s->local_cells_top);
 
   /* Loop over cells and find which cells are in range of each other to perform
    * the FOF search. */
@@ -748,9 +748,9 @@ void fof_search_tree_mapper(void *map_data, int num_elements,
 
       /* Loop over all top-level cells skipping over the cells already searched.
       */
-      for (size_t cjd = offset[ind] + 1; cjd < nr_cells; cjd++) {
+      for (size_t cjd = offset[ind] + 1; cjd < nr_local_cells; cjd++) {
 
-        struct cell *restrict cj = &s->cells_top[cjd];
+        struct cell *restrict cj = &s->cells_top[s->local_cells_top[cjd]];
 
         /* Only perform FOF search on local cells. */
         if(cj->nodeID == engine_rank) {