diff --git a/src/fof.c b/src/fof.c
index 5d0b7e511a807c98c240c42c28478c184eec373b..5749f26c22a935c781f35e5263c61b092d901013 100644
--- a/src/fof.c
+++ b/src/fof.c
@@ -1161,6 +1161,14 @@ void fof_search_foreign_cells(struct space *s) {
     }
   }
 
+  /* Clean up memory. */
+  free(part_links);
+  free(interface_cells);
+  free(group_links);
+  free(global_group_links);
+  free(global_group_links_offset);
+  free(displ);
+
   message("Rank %d finished linking local roots to foreign roots.", engine_rank);
 
 #endif /* WITH_MPI */
@@ -1276,8 +1284,8 @@ void fof_search_tree(struct space *s) {
       group_size, group_id);
 
 #ifdef WITH_MPI
-  int *global_group_index, *global_group_size;
-  long long *global_group_id;
+  int *global_group_index = NULL, *global_group_size = NULL, *displ = NULL;
+  long long *global_group_id = NULL;
   int total_num_groups = 0;
   
   if (s->e->nr_nodes > 1) {
@@ -1297,7 +1305,7 @@ void fof_search_tree(struct space *s) {
     bzero(global_group_size, s->e->total_nr_gparts * sizeof(int));
     bzero(global_group_id, s->e->total_nr_gparts * sizeof(long long));
 
-    int *displ = NULL;
+
     if (posix_memalign((void**)&displ, SWIFT_STRUCT_ALIGNMENT,
           s->e->nr_nodes * sizeof(int)) != 0)
       error("Error while allocating memory for FOF MPI communication");
@@ -1451,6 +1459,7 @@ void fof_search_tree(struct space *s) {
   message("Biggest group size: %d with ID: %d", max_group_size, max_group_index);
   message("Biggest group by mass: %f with ID: %d", max_group_mass, max_group_mass_id);
 
+  /* Clean up memory. */
   free(group_size);
   free(group_mass);
 
@@ -1459,6 +1468,9 @@ void fof_search_tree(struct space *s) {
     if(engine_rank == 0) message("Total number of groups: %d", total_num_groups);
     free(global_nr_gparts);
     free(global_group_index);
+    free(global_group_size);
+    free(global_group_id);
+    free(displ);
   }
 #endif /* WITH_MPI */