diff --git a/src/modules/butterflies/butterflies_action_helpers.c b/src/modules/butterflies/butterflies_action_helpers.c
index 9699b49dc5e400022c5beb85b8e6f66674dc1b03..7b5cfa9c63fd87ef58d7a705e31f4797689377a5 100644
--- a/src/modules/butterflies/butterflies_action_helpers.c
+++ b/src/modules/butterflies/butterflies_action_helpers.c
@@ -39,6 +39,7 @@ void bf_register_actions(struct cats_configuration *conf)
 
         register_action_function(conf, bf_action_dispersal, "butterfly_action_dispersal", "egg dispersal");
         register_action_function(conf, bf_action_save_grid, "bf_action_save_grid", "output");
+        register_action_function(conf, bf_action_save_eggs_grid, "bf_action_save_egg_grid", "egg output");
         register_action_function(conf, bf_action_stats_gather, "bf_action_stats_gather", "gather stats");
         register_action_function(conf, bf_action_stats_reset, "bf_action_stats_reset", "reset stats");
         register_action_function(conf, bf_action_stats_write, "bf_action_stats_write", "write stats");
@@ -69,6 +70,7 @@ void bf_add_actions(struct cats_configuration *conf)
                 bf_add_generation_action(conf, bf_action_save_grid, "output", generation);
                 bf_add_generation_action(conf, bf_action_stats_gather, "gather stats", generation);
                 bf_add_generation_action(conf, bf_action_dispersal, "dispersal", generation);
+                bf_add_generation_action(conf, bf_action_save_eggs_grid, "output eggs", generation);
                 bf_add_generation_action(conf, bf_action_generation_finish, "finish generation", generation);
                 bf_add_generation_action(conf, bf_action_stats_write, "write stats", generation);
         }
diff --git a/src/modules/butterflies/butterflies_actions.c b/src/modules/butterflies/butterflies_actions.c
index d9e9da1f83ae1f8f6c293793c4b588829266d563..50e91b048f924ddb17dfd5b08e5fc6068b83ccd0 100644
--- a/src/modules/butterflies/butterflies_actions.c
+++ b/src/modules/butterflies/butterflies_actions.c
@@ -73,6 +73,8 @@ void butterflies_area_dispersal(struct cats_grid *grid, struct cats_thread_info
                 }
         }
         if (ts->temp)   printf("thread %d: %ld random walks (%ld cells) avg %f\n", ts->id, ts->temp, ts->temp1, (float) ts->temp / (float) ts->temp1);
+
+
 }
 
 
@@ -95,6 +97,18 @@ enum action_status bf_action_save_grid(struct cats_grid *grid, struct cats_confi
 }
 
 
+enum action_status bf_action_save_eggs_grid(struct cats_grid *grid, struct cats_configuration *conf)
+{
+        int32_t id = grid->id;
+        int module_id = CATS_MODULE_ID;
+        struct grid_data_butterflies *module_data = grid->grid_modules[module_id].module_data;
+        char *filename = bf_population_eggs_filename(conf, grid);
+        struct grid_wrapper data = gridwrapper(module_data->eggs, grid->dimension);
+        save_grid_to_gdal(&data, GDT_Int32, conf, filename, conf->param[id].species_name);
+        free(filename);
+        return ACTION_RUN;
+}
+
 
 
 enum action_status bf_action_dispersal(struct cats_grid *grid, struct cats_configuration *conf)
diff --git a/src/modules/butterflies/butterflies_actions.h b/src/modules/butterflies/butterflies_actions.h
index 69a0c17268dd9a89412e1c155f663d8311b21955..29b87ac289463f85aee4feed8f677ce0ca2fefe3 100644
--- a/src/modules/butterflies/butterflies_actions.h
+++ b/src/modules/butterflies/butterflies_actions.h
@@ -23,4 +23,5 @@ enum action_status bf_action_generation_start(struct cats_grid *grid, __attribut
 
 enum action_status bf_action_generation_update(struct cats_grid *grid, struct cats_configuration *conf);
 
+enum action_status bf_action_save_eggs_grid(struct cats_grid *grid, struct cats_configuration *conf);
 #endif //CATS_BUTTERFLIES_ACTIONS_H
diff --git a/src/modules/butterflies/butterflies_filenames.c b/src/modules/butterflies/butterflies_filenames.c
index dd83ebde1d321fb0e64260d17e3a0858144a2b71..3af222a0be6a33e02ca1ae13bf5acf0cd715e10a 100644
--- a/src/modules/butterflies/butterflies_filenames.c
+++ b/src/modules/butterflies/butterflies_filenames.c
@@ -37,6 +37,32 @@ char *bf_population_filename(struct cats_configuration *conf, struct cats_grid *
         return filename;
 }
 
+char *bf_population_eggs_filename(struct cats_configuration *conf, struct cats_grid *grid)
+{
+        assert(grid != NULL);
+        assert(conf != NULL);
+        assert(conf->grid_count == 1);
+        struct conf_data_butterflies *module_conf = CATS_MODULE_DATA;
+        int32_t max_generation = module_conf->generations_max;
+        int module_id = CATS_MODULE_ID;
+        struct grid_data_butterflies *data = grid->grid_modules[module_id].module_data;
+
+
+        struct string_array *path = get_output_directory(conf, "butterfly-eggs"); // FIXME MAKE DIRECTORY
+
+        char *extension = get_extension(conf, "eggs");
+        struct string_array *name = standard_output_file_name(conf, NULL, NULL, NULL);
+        string_array_add_int(name, max_generation - data->generation_current, "g%03d");
+
+        char *filename = assemble_filename(path, name, "_", extension);
+
+        free_string_array(&path);
+        free_string_array(&name);
+        free(extension);
+
+        return filename;
+}
+
 char *bf_stats_filename(struct cats_configuration *conf, struct cats_grid *grid)
 {
         struct string_array *path = get_output_directory(conf, "stats");
diff --git a/src/modules/butterflies/butterflies_filenames.h b/src/modules/butterflies/butterflies_filenames.h
index 92a3cd36a34b2082ab82d6b4f2e756903dc5f5b5..047328143596bbe422b5083760e8086fc154f7c4 100644
--- a/src/modules/butterflies/butterflies_filenames.h
+++ b/src/modules/butterflies/butterflies_filenames.h
@@ -2,7 +2,7 @@
 #define CATS_BUTTERFLIES_FILENAMES_H
 
 #include "configuration/configuration.h"
-
+char *bf_population_eggs_filename(struct cats_configuration *conf, struct cats_grid *grid);
 char *bf_population_filename(struct cats_configuration *conf, struct cats_grid *grid);
 char *bf_stats_filename(struct cats_configuration *conf, struct cats_grid *grid);
 #endif //CATS_BUTTERFLIES_FILENAMES_H