diff --git a/src/fof.c b/src/fof.c
index 96d45e49da69537bc89cc87280fd7e8caeb52205..1cb0713eeb7d2c232d067e07cf0217e27c761ef2 100644
--- a/src/fof.c
+++ b/src/fof.c
@@ -37,6 +37,7 @@
 #include "threadpool.h"
 #include "engine.h"
 #include "proxy.h"
+#include "common_io.h"
 
 MPI_Datatype fof_mpi_type;
 FILE *fof_file;
@@ -725,7 +726,7 @@ void fof_search_tree_serial(struct space *s) {
   }
 
   fof_dump_group_data("fof_output_tree_serial.dat", nr_gparts, group_index,
-                      group_size, group_id, group_mass);
+                      group_size, group_id, group_mass, 1);
 
   int num_parts_in_groups = 0;
   int max_group_size = 0, max_group_index = 0, max_group_mass_id = 0;
@@ -1135,19 +1136,19 @@ void fof_search_foreign_cells(struct space *s) {
   for(int i=0; i<group_count; i++) global_group_index[i] = i;
 
   /* Save group links for each rank to a file. */
-  char fof_map_filename[200] = "group_map";
-  sprintf(fof_map_filename + strlen(fof_map_filename), "_%d.dat",
-      engine_rank);
-  
-  fof_file = fopen(fof_map_filename, "w");
-  fprintf(fof_file, "# %7s %7s %7s %7s\n", "Index", "Group ID", "Group Size", "Group Mass");
-  fprintf(fof_file, "#-------------------------------\n");
-
-  for(int i=0; i<group_count; i++) {
-    fprintf(fof_file, "  %7d %7d %7d %7e\n", global_group_index[i], global_group_id[i], global_group_size[i], global_group_mass[i]);
-  }
-  
-  fclose(fof_file);
+  //char fof_map_filename[200] = "group_map";
+  //sprintf(fof_map_filename + strlen(fof_map_filename), "_%d.dat",
+  //    engine_rank);
+  //
+  //fof_file = fopen(fof_map_filename, "w");
+  //fprintf(fof_file, "# %7s %7s %7s %7s\n", "Index", "Group ID", "Group Size", "Group Mass");
+  //fprintf(fof_file, "#-------------------------------\n");
+
+  //for(int i=0; i<group_count; i++) {
+  //  fprintf(fof_file, "  %7d %7d %7d %7e\n", global_group_index[i], global_group_id[i], global_group_size[i], global_group_mass[i]);
+  //}
+  //
+  //fclose(fof_file);
 
   /* Perform a union-find on the group links. */
   for(int i=0; i<global_group_link_count; i++) {
@@ -1237,8 +1238,8 @@ void fof_search_tree(struct space *s) {
   float max_group_mass = 0;
   ticks tic = getticks();
 
-  char output_file_name[128];
-  sprintf(output_file_name + strlen(output_file_name), s->fof_data.base_name);
+  char output_file_name[FILENAME_BUFFER_SIZE];
+  snprintf(output_file_name, FILENAME_BUFFER_SIZE, s->fof_data.base_name);
 
   message("Searching %zu gravity particles for links with l_x2: %lf", nr_gparts,
           s->l_x2);
@@ -1321,19 +1322,19 @@ void fof_search_tree(struct space *s) {
   }
 
 #ifdef WITH_MPI
-  sprintf(output_file_name + strlen(output_file_name), "_mpi_rank_%d.dat", engine_rank);
+  snprintf(output_file_name + strlen(output_file_name), FILENAME_BUFFER_SIZE, "_mpi_rank_%d.dat", engine_rank);
   
   if (s->e->nr_nodes > 1) {
     /* Search for group links across MPI domains. */
     fof_search_foreign_cells(s);
   }  
 #else
-  sprintf(output_file_name + strlen(output_file_name), ".dat");
+  snprintf(output_file_name + strlen(output_file_name), FILENAME_BUFFER_SIZE, ".dat");
 #endif
  
   /* Dump group data. */ 
   fof_dump_group_data(output_file_name, nr_gparts, group_index,
-      group_size, group_id, group_mass);
+      group_size, group_id, group_mass, min_group_size);
 
   int num_groups_local = 0, num_parts_in_groups_local = 0, max_group_size_local = 0;
   float max_group_mass_local = 0;
@@ -1383,15 +1384,17 @@ void fof_search_tree(struct space *s) {
 
 /* Dump FOF group data. */
 void fof_dump_group_data(char *out_file, const size_t nr_gparts, int *group_index,
-                         int *group_size, long long *group_id, float *group_mass) {
+                         int *group_size, long long *group_id, float *group_mass, const int min_group_size) {
 
   FILE *file = fopen(out_file, "w");
   fprintf(file, "# %7s %7s %7s %7s %7s\n", "ID", "Root ID", "Group Size", "Group Mass", "Group ID");
   fprintf(file, "#---------------------------------------\n");
 
   for (size_t i = 0; i < nr_gparts; i++) {
-    const int root = fof_find_global(i - node_offset, group_index);
-    fprintf(file, "  %7zu %7d %7d %7e    %10lld\n", i, root, group_size[i], group_mass[i], group_id[i]);
+    if(group_size[i] >= min_group_size) {
+      const int root = fof_find_global(i - node_offset, group_index);
+      fprintf(file, "  %7zu %7d %7d %7e    %10lld\n", i, root, group_size[i], group_mass[i], group_id[i]);
+    }
   }
 
   fclose(file);
diff --git a/src/fof.h b/src/fof.h
index 3d2c78e2db17773bb06c7923c14a93467b9eab38..89d19dc79ee5f4e07ed669966c430ac31822d1c7 100644
--- a/src/fof.h
+++ b/src/fof.h
@@ -52,7 +52,7 @@ void fof_search_pair_cells(struct space *s, struct cell *ci, struct cell *cj);
 void fof_search_pair_cells_foreign(struct space *s, struct cell *ci, struct cell *cj, size_t *link_count, struct fof_mpi *part_links);
 void fof_search_tree_serial(struct space *s);
 void fof_search_tree(struct space *s);
-void fof_dump_group_data(char *out_file, const size_t nr_gparts, int *group_index, int *num_in_groups, long long *group_id, float *group_mass);
+void fof_dump_group_data(char *out_file, const size_t nr_gparts, int *group_index, int *num_in_groups, long long *group_id, float *group_mass, const int min_group_size);
 
 #ifdef WITH_MPI
 /* MPI data type for the particle transfers */