diff --git a/src/modules/butterflies/butterflies_populations.c b/src/modules/butterflies/butterflies_populations.c
index c7fb0329fd170f6204c5c38e90c6b0de6baf29ee..07c3c6a1b099f7a7cba247ea7dad1c168e9790f8 100644
--- a/src/modules/butterflies/butterflies_populations.c
+++ b/src/modules/butterflies/butterflies_populations.c
@@ -63,6 +63,35 @@ bf_egg_to_adult_survival_rate(cats_dt_rates reproduction_rate, cats_dt_rates egg
         return reproduction_rate / eggs;
 }
 
+float get_fractional_generation(struct cats_grid *grid, cats_dt_coord row, cats_dt_coord col)
+{
+        struct conf_data_butterflies *module_conf = CATS_MODULE_DATA;
+        const int module_id = CATS_MODULE_ID;
+        struct grid_data_butterflies *data = grid->grid_modules[module_id].module_data;
+
+        float this_generation_fraction = 1.0f;
+
+        float local_generation = data->generations[row][col];
+        int32_t global_max_generation = module_conf->generations_max;
+        int32_t local_max_generation = (int32_t) ceilf(local_generation);
+        int32_t global_current_generation = data->generation_current;
+        float current_generation_float = (float) data->generation_current;
+
+        if (global_current_generation == global_max_generation) {
+                this_generation_fraction = 1.0f;
+        } else if (current_generation_float == local_generation
+                   || data->generation_current == module_conf->generations_min) {
+                this_generation_fraction = 1.0f;
+        } else if (data->generation_current == local_max_generation) {
+                this_generation_fraction = (float) local_max_generation - local_generation;
+        }
+
+        assert(this_generation_fraction > 0);
+        assert(this_generation_fraction <= 1.0);
+
+        return this_generation_fraction;
+}
+
 
 void bf_cell_maturation(struct cats_grid *grid, struct cats_thread_info *ts, cats_dt_coord row, cats_dt_coord col,
                         bool check_exclusion)
@@ -100,24 +129,10 @@ void bf_cell_maturation(struct cats_grid *grid, struct cats_thread_info *ts, cat
         // ...
         // at last all cells with have at least 1 generation are modelled
         struct conf_data_butterflies *module_conf = CATS_MODULE_DATA;
-        float this_generation_fraction = 1.0f;
-        float local_generation = data->generations[row][col];
-        int32_t global_max_generation = module_conf->generations_max;
-        int32_t local_max_generation = (int32_t) ceilf(local_generation);
-        int32_t global_current_generation = data->generation_current;
-        float current_generation_float = (float) data->generation_current;
 
-        if (global_current_generation == global_max_generation) {
-                this_generation_fraction = 1.0f;
-        } else if (current_generation_float == local_generation
-            || data->generation_current == module_conf->generations_min) {
-                this_generation_fraction = 1.0f;
-        } else if (data->generation_current == local_max_generation) {
-                this_generation_fraction = (float) local_max_generation - local_generation;
-        }
+        float this_generation_fraction = get_fractional_generation(grid, row, col);
+
 
-        assert(this_generation_fraction > 0);
-        assert(this_generation_fraction <= 1.0);
 
         //cats_dt_population max_cc = (cats_dt_population) grid->param.carrying_capacity.max_rate;
         const float eggs = this_generation_fraction * data->eggs[row][col];