diff --git a/src/modules/butterflies/butterflies_dispersal.c b/src/modules/butterflies/butterflies_dispersal.c
index d9b8b7b86c87d6762431b16567342c4ae9b2fa3d..ac46cce042a3dc17c82e74c976f52dcddd5d4eaa 100644
--- a/src/modules/butterflies/butterflies_dispersal.c
+++ b/src/modules/butterflies/butterflies_dispersal.c
@@ -120,10 +120,10 @@ butterflies_cell_dispersal(struct cats_grid *grid, struct cats_thread_info *ts,
         const cats_dt_population total_adults = get_adult_population(grid, row, col);
         if (total_adults == 0) return;
         ts->temp++;
-
+        struct conf_data_butterflies *module_conf = CATS_MODULE_DATA;
         // total females: how many of the total adults are female, as drawn from a binomial distribution with p = 0.5
         // can be safely cast, because gsl_ran_binomial will return a number <= total_adults
-        const cats_dt_population total_females = (cats_dt_population) gsl_ran_binomial(ts->rng, 0.5, total_adults);
+        const cats_dt_population total_females = (cats_dt_population) gsl_ran_binomial(ts->rng, (double) module_conf->female_fraction, total_adults);
         assert(total_females >= 0 && total_females <= total_adults);
 
         // total males: the rest
@@ -133,7 +133,7 @@ butterflies_cell_dispersal(struct cats_grid *grid, struct cats_thread_info *ts,
         if (total_females == 0 || total_males == 0) return;
 
         // here we calculate the number of eggs per female, so we can return early if the cell is unsuitable
-        struct conf_data_butterflies *module_conf = CATS_MODULE_DATA;
+
         cats_dt_rates eggs_per_f = calculate_rate(&module_conf->eggs_per_female, total_adults, &grid->param, grid, row,
                                                   col, NULL);
         int32_t eggs_per_female = (int32_t) ceill(eggs_per_f);
diff --git a/src/modules/butterflies/butterflies_main.c b/src/modules/butterflies/butterflies_main.c
index 08acb3026047afc1646de7f80fe7cb038a75a14d..a69fbaf606b8fbea2ead2175a1bbd3f29ba12c69 100644
--- a/src/modules/butterflies/butterflies_main.c
+++ b/src/modules/butterflies/butterflies_main.c
@@ -15,7 +15,8 @@ struct cats_global global;
 struct cats_debug_options cats_debug;
 
 
-void *butterfly_grid_init(__attribute__((unused)) struct cats_configuration *conf, struct cats_grid *grid, __attribute__((unused)) void *ignored)
+void *butterfly_grid_init(__attribute__((unused)) struct cats_configuration *conf, struct cats_grid *grid,
+                          __attribute__((unused)) void *ignored)
 {
         log_message(LOG_INFO, "%s: %s: grid init", module_name, __func__);
         printf("%d %d\n", grid->dimension.cols, grid->dimension.rows);
@@ -40,7 +41,8 @@ void *butterfly_grid_init(__attribute__((unused)) struct cats_configuration *con
 }
 
 
-void *butterfly_grid_cleanup(__attribute__((unused)) struct cats_configuration *conf, struct cats_grid *grid, void *data)
+void *
+butterfly_grid_cleanup(__attribute__((unused)) struct cats_configuration *conf, struct cats_grid *grid, void *data)
 {
         log_message(LOG_INFO, "%s: grid cleanup", module_name);
         assert(grid != NULL);
@@ -56,7 +58,6 @@ void *butterfly_grid_cleanup(__attribute__((unused)) struct cats_configuration *
 }
 
 
-
 void load_butterflies_species_params(struct cats_configuration *conf, struct cats_ini *ini, const char *section_name,
                                      struct cats_species_param *param)
 {
@@ -68,22 +69,39 @@ void load_butterflies_species_params(struct cats_configuration *conf, struct cat
 
         load_conf_vital_rate(&data->butterfly_egg_to_adult_survival, conf, ini, section_name, param);
 
-        load_conf_value(true, ini, section_name, "butterflies random walk steps maximum", &data->animal_dispersal_max_radius);
+        load_conf_value(true, ini, section_name, "butterflies random walk steps maximum",
+                        &data->animal_dispersal_max_radius);
         load_conf_value(true, ini, section_name, "butterflies egg fraction source", &data->egg_fraction_source);
         bool l = load_conf_value(false, ini, section_name, "butterflies egg fraction step", &data->egg_fraction_step);
 
-        if (! l) {
+        if (!l) {
                 data->egg_fraction_step = 0.5;
-                log_message(LOG_INFO, "using default value for butterflies egg fraction step: %Lf\n", data->egg_fraction_step);
+                log_message(LOG_INFO, "using default value for butterflies egg fraction step: %Lf\n",
+                            data->egg_fraction_step);
+        }
+
+        l = load_conf_value(false, ini, section_name, "butterflies female fraction", &data->female_fraction);
+
+        if (!l) {
+                data->female_fraction = 0.5;
+                log_message(LOG_INFO, "using default value for butterflies female fraction: %Lf\n",
+                            data->female_fraction);
         }
+        if (data->female_fraction <= 0.0 || data->female_fraction >= 1.0) {
+                log_message(LOG_ERROR, "butterflies female fraction must be in (0, 1), is %Lf", data->female_fraction);
+                exit_cats(EXIT_FAILURE);
+        }
+
 
         if (data->egg_fraction_step <= 0.0 || data->egg_fraction_step > 1.0) {
-                log_message(LOG_ERROR, "butterflies egg fraction step must be in (0, 1], is %Lf", data->egg_fraction_step);
+                log_message(LOG_ERROR, "butterflies egg fraction step must be in (0, 1], is %Lf",
+                            data->egg_fraction_step);
                 exit_cats(EXIT_FAILURE);
         }
 
         if (data->animal_dispersal_max_radius <= 0) {
-                log_message(LOG_ERROR, "butterflies random walk steps maximum must be > 0, is %d", data->animal_dispersal_max_radius);
+                log_message(LOG_ERROR, "butterflies random walk steps maximum must be > 0, is %d",
+                            data->animal_dispersal_max_radius);
                 exit_cats(EXIT_FAILURE);
         }
 
@@ -117,7 +135,7 @@ void load_butterflies_species_params(struct cats_configuration *conf, struct cat
         data->generations_min = (int32_t) ceill(data->butterfly_generations.min_rate);
         param->plant_dispersal_max_radius = data->animal_dispersal_max_radius;
 
-        if (! data->actions_added) {
+        if (!data->actions_added) {
                 bf_register_actions(conf);
                 bf_add_actions(conf);
                 data->actions_added = true;
@@ -128,7 +146,7 @@ void load_butterflies_species_params(struct cats_configuration *conf, struct cat
 
 void cats_module_init(struct cats_configuration *conf)
 {
-        struct conf_data_butterflies *data = calloc_or_die(1,sizeof(struct conf_data_butterflies));
+        struct conf_data_butterflies *data = calloc_or_die(1, sizeof(struct conf_data_butterflies));
         enum cats_module_flags flags = MODULE_ALTERNATE_DEMOGRAPHIC | MODULE_OVERRIDE_ACTIONS;
         int32_t id = register_module(conf, module_name, data, flags);
         register_cats_grid_init_function(conf, butterfly_grid_init, butterfly_grid_cleanup);
diff --git a/src/modules/butterflies/butterflies_main.h b/src/modules/butterflies/butterflies_main.h
index 66c3cc6e4af7c73503741987ffe89ed201038dda..8654e6779da3c08e7f22bc8cb1bfc70fe521e826 100644
--- a/src/modules/butterflies/butterflies_main.h
+++ b/src/modules/butterflies/butterflies_main.h
@@ -47,7 +47,7 @@ struct conf_data_butterflies {
     struct cats_vital_rate eggs_per_female;
     struct cats_vital_rate butterfly_egg_to_adult_survival;
     struct cats_vital_rate butterfly_generations;
-
+    cats_dt_rates female_fraction;
 
     bool actions_added;