diff --git a/game/03-JavaScript/04-Pregnancy/pregnancy.js b/game/03-JavaScript/04-Pregnancy/pregnancy.js
index 1f7de3ca1dcab03c4c979b3a3ccca833aadece2a..f2bc1921530600fa12629043718d87cf5034713b 100644
--- a/game/03-JavaScript/04-Pregnancy/pregnancy.js
+++ b/game/03-JavaScript/04-Pregnancy/pregnancy.js
@@ -1053,7 +1053,6 @@ function washRecordedSperm(genital, target) {
 DefineMacro("washRecordedSperm", washRecordedSperm);
 
 function unsafeSexTracking(genital, mother, father) {
-	console.log("unsafeSexTracking", genital, mother, father);
 	if (mother === "pc" && !playerIsPregnant() && (V.player.vaginaExist || canBeMPregnant() || true)) {
 		if (V.NPCNameList.includes(father) || father === "pc") {
 			V.unsafeSexTimeStat[father] = Time.date.timeStamp;
diff --git a/game/base-system/overlays/options.twee b/game/base-system/overlays/options.twee
index 4ad9c4d96ca8f6b8db40c1df7f092d06423f1861..3dee8a03eab8bdb6eda97e779cf8f9ae4655031a 100644
--- a/game/base-system/overlays/options.twee
+++ b/game/base-system/overlays/options.twee
@@ -512,10 +512,10 @@ IMPORTANT:
 	<div class="description">Enables going back in history up to N-1 passages.</div>
 	<div class="settingsToggle">
 		States saved to memory:
-		<<numberslider "$options.maxStates" $options.maxStates 1 20 1 $ironmanmode>>
+		<<numberslider "$options.maxStates" `$options.maxStates gt 20 ? 20 : $options.maxStates` 1 20 1 $ironmanmode>>
 
 		States saved to session storage <mouse class="tooltip-small linkBlue">(?)<span>Bigger value = worse performance. Only useful for restoring the game state after F5 or session reload. Won't save more states than the slider above allows.</span></mouse>
-		<<numberslider "$options.maxSessionStates" $options.maxSessionStates 0 20 1 $ironmanmode>>
+		<<numberslider "$options.maxSessionStates" `$options.maxSessionStates gt 20 ? 20 : $options.maxSessionStates` 0 20 1 $ironmanmode>>
 
 		<label>
 			<<ind>><<checkbox "$options.historyControls" false true autocheck>> Display history controls in the sidebar
diff --git a/game/base-system/stat-changes.js b/game/base-system/stat-changes.js
index 9f6e4d9fbb7f7cff4df67133996bff8a17357326..77e9198d25fc6c672dcd16f356ec5dd42205e4ec 100644
--- a/game/base-system/stat-changes.js
+++ b/game/base-system/stat-changes.js
@@ -1,3 +1,4 @@
+/* eslint-disable no-undef */
 /* eslint-disable no-useless-escape */
 
 // eslint-disable-next-line no-var, no-unused-vars
@@ -239,6 +240,7 @@ var statChange = (() => {
 
 	function sensitivity(amount, key) {
 		if (isNaN(amount)) paramError("sensitivity", "amount", amount, "Expected a number.");
+		amount = Number(amount);
 		const sens = V[key + "sensitivity"];
 		if (!sens) paramError("sensitivity", "key", key + "sensitivity", "Expected an existing sensitivity.");
 
@@ -557,12 +559,10 @@ var statChange = (() => {
 		amount = Number(amount);
 		if (amount) {
 			V.wolfpackferocity = (V.wolfpackferocity || 0) + amount;
-			if (V.statdisable === "f") {
-				if (amount > 0) {
-					return '| <span class="blue">+ Ferocity</span>';
-				} else if (amount < 0) {
-					return '| <span class="purple">- Ferocity</span>';
-				}
+			if (amount > 0) {
+				return statDisplay.statChange("Ferocity", Math.clamp(amount, 1, 3), "blue");
+			} else if (amount < 0) {
+				return statDisplay.statChange("Ferocity", Math.clamp(amount, -3, -1), "purple");
 			}
 		}
 		return "";
@@ -575,12 +575,10 @@ var statChange = (() => {
 		amount = Number(amount);
 		if (amount) {
 			V.wolfpackharmony = (V.wolfpackharmony || 0) + amount;
-			if (V.statdisable === "f") {
-				if (amount > 0) {
-					return '| <span class="lblue">+ Harmony</span>';
-				} else if (amount < 0) {
-					return '| <span class="pink">- Harmony</span>';
-				}
+			if (amount > 0) {
+				return statDisplay.statChange("Harmony", Math.clamp(amount, 1, 3), "lblue");
+			} else if (amount < 0) {
+				return statDisplay.statChange("Harmony", Math.clamp(amount, -3, -1), "pink");
 			}
 		}
 		return "";
@@ -616,6 +614,7 @@ var statChange = (() => {
 	DefineMacro("sub_check", subCheck);
 
 	function gainPenisInsecurity(amount = 10) {
+		if (V.statFreeze) return "";
 		if (isNaN(amount)) paramError("gainPenisInsecurity", "amount", amount, "Expected a number.");
 		amount = Number(amount);
 		if (amount) {
@@ -633,6 +632,7 @@ var statChange = (() => {
 					return '<<ginsecurity "penis_tiny">>';
 			}
 		}
+		return "";
 	}
 	DefineMacroS("incgpenisinsecurity", amount => gainPenisInsecurity(amount));
 	DefineMacroS("incggpenisinsecurity", () => gainPenisInsecurity(20));
@@ -719,7 +719,7 @@ var statChange = (() => {
 	DefineMacro("acceptance", acceptance);
 
 	function gainPenisAcceptance(amount) {
-		if (V.statFreeze) return;
+		if (V.statFreeze) return "";
 		if (isNaN(amount)) paramError("gainPenisAcceptance", "amount", amount, "Expected a number.");
 		amount = Number(amount);
 		if (amount > 0) {
@@ -743,6 +743,7 @@ var statChange = (() => {
 				return "<<gacceptance>>";
 			}
 		}
+		return "";
 	}
 	DefineMacroS("gpenisacceptance", gainPenisAcceptance);
 
@@ -887,7 +888,7 @@ var statChange = (() => {
 		if (isNaN(amount)) paramError("prof", "amount", amount, "Expected a number.");
 		amount = Number(amount);
 		if (amount) {
-			V.prof[skill] = Math.clamp((V.prof[skill] || 0) + amount, 0, 1000);
+			V.prof[skill] = Math.clamp((V.prof[skill] || 0) + amount * 5, 0, 1000);
 		}
 	}
 	DefineMacro("prof", prof);
@@ -993,6 +994,7 @@ var statChange = (() => {
 		milkAmount,
 		lactationPressure,
 		stress,
+		sensitivity,
 		arousal,
 		tiredness,
 		pain,