diff --git a/src/cats/vital_rates/hybrid_functions.c b/src/cats/vital_rates/hybrid_functions.c
index ceb19689ac699657cae013f008c535a2ebda5e56..10615bf1fdff5b248f779fef3cae31f489cf8ed5 100644
--- a/src/cats/vital_rates/hybrid_functions.c
+++ b/src/cats/vital_rates/hybrid_functions.c
@@ -143,7 +143,7 @@ sigmoid(const struct cats_vital_rate *rate_info,
                 K = K - K * rate_info->density_ts;
                 assert(N >= 0);
                 assert(K >= 0);
-
+                cats_dt_rates old_rate = rate;
                 switch (rate_info->density) {
 
                         case DENSITY_DEP_NEGATIVE:
@@ -152,10 +152,12 @@ sigmoid(const struct cats_vital_rate *rate_info,
                                 if (K == 0) return 0.0;
 
                                 rate = rate * density + (N / K) * rate_at_OT; // was: max_rate * scale;
+                                if (rate > old_rate) rate = old_rate;
                                 break;
                         case DENSITY_DEP_POSITIVE:
                                 if (K == 0) return 0.0;
                                 rate = rate * density + (1.0 - (N / K)) * rate_at_OT; // was: max_rate * scale;
+                                if (rate < old_rate) rate = old_rate;
                                 break;
                         case NO_DENSITY_DEP:
                                 break;