diff --git a/src/cats/debug/debug_vital_rates.h b/src/cats/debug/debug_vital_rates.h
index 442e19712f0d92a2fa61655e3ed38fd17f78df87..c5c1b4f05b1adf6964f106ae6897a23c68f943e4 100644
--- a/src/cats/debug/debug_vital_rates.h
+++ b/src/cats/debug/debug_vital_rates.h
@@ -27,6 +27,7 @@
 #include "configuration/configuration.h"
 
 void debug_vital_rates(struct cats_configuration *conf, const struct program_options *command_line_options);
-
+struct cats_environment *minimal_suitability_environment(void);
+struct cats_grid *minimal_grid(struct cats_configuration *conf, struct cats_environment *env);
 
 #endif //CATS_DEBUG_VITAL_RATES_H
diff --git a/src/cats/grids/dimensions.c b/src/cats/grids/dimensions.c
index 7445ed5b332af4edb6387723555a305ca7c579b0..b0d24ec853bcf363a7a72738e69c4c15cf61adba 100644
--- a/src/cats/grids/dimensions.c
+++ b/src/cats/grids/dimensions.c
@@ -1,4 +1,3 @@
-#include <assert.h>
 #include "dimensions.h"
 
 
@@ -9,17 +8,6 @@ void copy_dimensions_from_to(const struct cats_dimension *from, struct cats_dime
 }
 
 
-bool valid_coordinates(const struct cats_dimension *dim, cats_dt_coord row, cats_dt_coord col)
-{
-        assert(dim != NULL);
-        assert(row >= 0 && row < dim->rows);
-        assert(col >= 0 && col < dim->cols);
-        if (row < 0 || col < 0) return false;
-        if (row >= dim->rows || col >= dim->cols) return false;
-        return true;
-}
-
-
 bool dimensions_match(const struct cats_dimension *dim1, const struct cats_dimension *dim2)
 {
         if (dim1->rows == dim2->rows && dim1->cols == dim2->cols) {
diff --git a/src/cats/grids/dimensions.h b/src/cats/grids/dimensions.h
index b25912c1dc6f3416dd070d0f4a5e018df15a054b..064b644742842db90b7f50316bbc01081370778d 100644
--- a/src/cats/grids/dimensions.h
+++ b/src/cats/grids/dimensions.h
@@ -2,6 +2,19 @@
 #define CATS_DIMENSIONS_H
 
 #include "memory/arrays.h"
+#include "assert.h"
+
+
+static inline bool valid_coordinates(const struct cats_dimension *dim, cats_dt_coord row, cats_dt_coord col)
+{
+        assert(dim != NULL);
+        assert(row >= 0 && row < dim->rows);
+        assert(col >= 0 && col < dim->cols);
+        if (row < 0 || col < 0) return false;
+        if (row >= dim->rows || col >= dim->cols) return false;
+        return true;
+}
+
 
 void copy_dimensions_from_to(const struct cats_dimension *from, struct cats_dimension *to);
 
diff --git a/src/cats/inline.h b/src/cats/inline.h
index 2f3f406deb97c0f9e1ceaea9448ec70ef8392333..5c17dc4cb8e3ba439395e5c6baabec92972e5f3e 100644
--- a/src/cats/inline.h
+++ b/src/cats/inline.h
@@ -52,6 +52,15 @@ static inline bool valid_dispersed_seed_grid(const struct cats_grid *grid, cats_
         return true;
 }
 
+static inline bool valid_produced_seed_grid(const struct cats_grid *grid, cats_dt_coord row)
+{
+        if (grid == NULL) return false;
+        if (grid->seeds_produced == NULL) return false;
+        if (grid->seeds_produced[row] == NULL) return false;       // validator [valid_produced_seed_grid]
+        return true;
+}
+
+
 
 static inline cats_dt_environment
 get_suitability_from_env(const struct cats_environment *set, cats_dt_coord row, cats_dt_coord col)
@@ -70,6 +79,14 @@ get_dispersed_seeds(const struct cats_grid *grid, cats_dt_coord row, cats_dt_coo
         return grid->dispersed_seeds[row][col];  // get [get_dispersed_seeds]
 }
 
+static inline cats_dt_seeds
+get_produced_seeds(const struct cats_grid *grid, cats_dt_coord row, cats_dt_coord col)
+{
+        assert(valid_coordinates(&grid->dimension, row, col));
+        assert(valid_produced_seed_grid(grid, row));
+        return grid->seeds_produced[row][col];  // get [get_produced_seeds]
+}
+
 
 static inline void
 set_suitability(struct cats_grid *grid, cats_dt_coord row, cats_dt_coord col, cats_dt_environment value)
diff --git a/src/cats/inline_overlays.h b/src/cats/inline_overlays.h
index 5f7316745f96046be1532d6f322988b4bae7dc42..1de2612958c8c58229d7b91d7716316fa42b0b79 100644
--- a/src/cats/inline_overlays.h
+++ b/src/cats/inline_overlays.h
@@ -64,5 +64,17 @@ cell_excluded_by_overlay(const struct cats_configuration *config, cats_dt_coord
         exit_cats(EXIT_FAILURE);
 }
 
+static inline double get_overlay_habitat_cc_value(const struct cats_configuration *conf, cats_dt_coord row, cats_dt_coord col)
+{
+        assert(conf->overlays.overlay[OL_HABITAT_TYPE_CC].enabled);
+        return conf->overlays.habitat_cc->data[row][col]; // getter [get_overlay_habitat_cc_value]
+}
+
+static inline double get_overlay_resource_value(const struct cats_configuration *conf, cats_dt_coord row, cats_dt_coord col)
+{
+        assert(conf->overlays.overlay[OL_RESOURCE].enabled);
+        return conf->overlays.resources->data[row][col]; // getter [get_overlay_resource_value]
+}
+
 
 #endif //CATS_INLINE_OVERLAYS_H
diff --git a/src/cats/inline_population.h b/src/cats/inline_population.h
index 65f4c54706f5d753bb049c626b7d27a3b93aafb5..0a1c7d225d29c00f2760c70337131da90cad1255 100644
--- a/src/cats/inline_population.h
+++ b/src/cats/inline_population.h
@@ -44,6 +44,23 @@ static inline bool valid_population_grid(const struct cats_grid *grid, cats_dt_c
         return true;
 }
 
+static inline bool valid_juvenile_grid(const struct cats_grid *grid, cats_dt_coord row)
+{
+        if (grid == NULL) return false;
+        if (grid->juveniles == NULL) return false;
+        if (grid->juveniles[row] == NULL) return false;       // validator [valid_juvenile_grid]
+        return true;
+}
+
+
+static inline cats_dt_population get_juveniles(const struct cats_grid *grid, cats_dt_coord row, cats_dt_coord col, int year)
+{
+        assert(valid_juvenile_grid(grid, row));
+        assert(valid_coordinates(&grid->dimension, row, col));
+        if (grid->juveniles[row][col] == NULL) return 0;
+        return grid->juveniles[row][col][year];
+}
+
 
 static inline cats_dt_population
 get_adult_population(const struct cats_grid *grid, cats_dt_coord row, cats_dt_coord col)