diff --git a/src/endWeek/healthFunctions.js b/src/endWeek/healthFunctions.js
index 4d99ecf79cd7e1c7aaff04069cdfec39771dd7bc..aa2eff36c5009baf38434271619345eca503b7eb 100644
--- a/src/endWeek/healthFunctions.js
+++ b/src/endWeek/healthFunctions.js
@@ -140,13 +140,14 @@ window.nurseEffectiveness = function nurseEffectiveness(slave) {
 	const clinicUpgrade = 1; // Creating a purchasable upgrade to increase the amount of slaves the nurse can handle -- TODO
 	const clinicScreening = 1; // Assumes the clinic is set to screening all slaves to improve their chances of staying healthy. Turning it off would allow the nurse to focus on just her patients in the clinic -- TODO
 	if (V.Nurse !== 0) {
-		let nurseEffectiveness = Math.trunc((V.Nurse.skill.nurse * clinicUpgrade / Math.max((V.CliniciIDs.length * 10 + (V.slaves.length * 2) * clinicScreening), 1)) * 20);
+		const nurseSkill = setup.nurseCareers.includes(V.Nurse.career) ? 200 : V.Nurse.skill.nurse;
+		let nurseEffectiveness = Math.trunc((nurseSkill * clinicUpgrade / Math.max((V.CliniciIDs.length * 10 + (V.slaves.length * 2) * clinicScreening), 1)) * 20);
 		if (H.illness > 1 && slave.assignment === "get treatment in the clinic") {
 			if (nurseEffectiveness < 20) {
 				return nurseEffectiveness;
-			} else if (V.Nurse.skill.nurse > 80) {
+			} else if (nurseSkill > 80) {
 				return Math.min(nurseEffectiveness, 40);
-			} else if (V.Nurse.skill.nurse > 40) {
+			} else if (nurseSkill > 40) {
 				return Math.min(nurseEffectiveness, 30);
 			} else {
 				return 20;
diff --git a/src/facilities/clinic/clinicFramework.js b/src/facilities/clinic/clinicFramework.js
index 32be8848509ef63171fe4d6b8660663172d3c311..d62ddc09219d6fa049640cf12dd75234977c5d1a 100644
--- a/src/facilities/clinic/clinicFramework.js
+++ b/src/facilities/clinic/clinicFramework.js
@@ -41,7 +41,7 @@ App.Entity.Facilities.ClinicPatientJob = class extends App.Entity.Facilities.Fac
 	checkRequirements(slave) {
 		let r = super.checkRequirements(slave);
 
-		if ((slave.health.condition >= 20 && slave.health.illness < 2) &&
+		if ((slave.health.condition >= 20 && slave.health.illness < 2 && slave.health.shortDamage < 10) &&
 			(V.Nurse === 0 || ((slave.chem <= 15 || this.facility.upgrade("Filters") !== 1) &&
 				(V.bellyImplants !== 1 || slave.bellyImplant <= -1) &&
 				(slave.pregKnown !== 1 || (this.facility.option("SpeedGestation") <= 0 && slave.pregControl !== "speed up")) && (slave.pregAdaptation * 1000 >= slave.bellyPreg && slave.preg <= slave.pregData.normalBirth / 1.33)))) {
diff --git a/src/js/health.js b/src/js/health.js
index 54882fff772ede3d8a363a29e0dfa7b84d9b5d31..ee41adbf032d1a89ca94c9ce93b6315d6716554b 100644
--- a/src/js/health.js
+++ b/src/js/health.js
@@ -31,6 +31,20 @@ window.healthDamage = function healthDamage(slave, damage) {
 	H.health = H.condition - H.longDamage - H.shortDamage;
 };
 
+/**
+ * All things directly curing wounds on a slave go through this to update short term damage and slave health.
+ * Use sparingly and for direct medical treatment by qualified professionals only; improveCondition should be used instead for drugs, natural healing, etc.
+ * @param {App.Entity.SlaveState} slave
+ * @param {number} cure
+ * @returns {void}
+ */
+window.healthCure = function healthCure(slave, cure) {
+	const H = slave.health;
+	H.shortDamage -= Math.max(Math.trunc(cure), 0);
+	H.shortDamage = Math.max(H.shortDamage, 0);
+	H.health = H.condition - H.longDamage - H.shortDamage;
+};
+
 /**
  * Surgical procedures also depend on the PC's medicine skill
  * @param {App.Entity.SlaveState} slave
diff --git a/src/uncategorized/clinicReport.tw b/src/uncategorized/clinicReport.tw
index 58d248065e7bd615b262654103086b8e29654bb5..f2ef7fdba68e773759cd767df8c5cf2a11ff6c6c 100644
--- a/src/uncategorized/clinicReport.tw
+++ b/src/uncategorized/clinicReport.tw
@@ -65,7 +65,7 @@
 	<</if>>
 	<<if ($Nurse.muscles > 5)>>
 		$He's strong enough to gently but firmly restrain resistant slaves, allowing $him to be sparing with the inescapable but less healthy restraints.
-		<<set _idleBonus++>>
+		<<set _idleBonus++, _healthBonus++>>
 	<</if>>
 	<<if ($Nurse.intelligence+$Nurse.intelligenceImplant > 50)>>
 		The diagnostic equipment is state-of-the-art, but $he's smart and perceptive enough that on occasion, $he can add meaningfully to its medical scans.
@@ -75,7 +75,7 @@
 		Patients rarely object to seeing $his gorgeous face hovering over them.
 		<<set _idleBonus++, _devBonus++>>
 	<</if>>
-	<<if ($Nurse.muscles > 5) || ($slaves[_FLs].devotion >= 60)>>
+	<<if ($slaves[_FLs].devotion >= 60)>>
 		<<set _healthBonus++>>
 	<</if>>
 	<<for _dI = 0; _dI < _DL; _dI++>>
@@ -257,6 +257,16 @@
 		<<run improveCondition($slaves[$i], 3)>>
 	<</if>>
 
+	/* the clinic is a well-equipped medical facility and can allow the Nurse or player to
+	 * directly cure serious wounds caused by injury and surgery with minimal side effects */
+	<<if $slaves[$i].health.shortDamage >= 10>>
+		<<if ($Nurse != 0)>>
+			<<run healthCure($slaves[$i], 5 + _healthBonus)>>
+		<<else>>
+			<<run healthCure($slaves[$i], $PC.skill.medicine / 15)>> /* maximum of 6...even a bad full-time nurse will be better than a player doctor */
+		<</if>>
+	<</if>>
+
 	<<switch $clinicDecoration>>
 	<<case "Eugenics" "Gender Fundamentalist" "Gender Radicalist" "Hedonistic" "Intellectual Dependency" "Maturity Preferentialist" "Paternalist" "Petite Admiration" "Repopulation Focus" "Slimness Enthusiast" "Statuesque Glorification" "Youth Preferentialist">>
 		<<set $slaves[$i].rules.living = "luxurious">>
@@ -270,10 +280,10 @@
 		<<if ($clinicSpeedGestation == 1) && ($slaves[$i].pregKnown == 1)>>
 			<<set $slaves[$i].pregControl = "speed up">>
 		<</if>>
-		<<if ($slaves[$i].chem > 150) && ($clinicUpgradeFilters >= 1)>>
+		<<if ($slaves[$i].chem > 10) && ($clinicUpgradeFilters >= 1)>>
 			<<if $slaves[$i].health.health > -50 && ($clinicUpgradePurge > 0)>>
-				<<set $slaves[$i].chem -= 200 * $clinicUpgradePurge>>
-				<<run healthDamage($slaves[$i], 20)>>
+				<<set $slaves[$i].chem -= 100 * $clinicUpgradePurge>>
+				<<run healthDamage($slaves[$i], 15)>>
 			<</if>>
 			<<set $slaves[$i].chem = Math.max($slaves[$i].chem - 5, 0)>>
 		<</if>>
@@ -282,6 +292,7 @@
 		<</if>>
 	<</if>>
 	<<if ($slaves[$i].health.illness > 0)>>
+	<<elseif ($slaves[$i].health.shortDamage >= 10)>>
 	<<elseif ($Nurse != 0) && ($slaves[$i].chem > 15) && ($clinicUpgradeFilters == 1)>>
 	<<elseif ($Nurse != 0) && ($slaves[$i].pregKnown == 1) && ($clinicSpeedGestation > 0 || $slaves[$i].pregControl == "speed up")>>
 	<<elseif ($Nurse != 0) && ($slaves[$i].pregAdaptation*1000 < $slaves[$i].bellyPreg || $slaves[$i].preg > $slaves[$i].pregData.normalBirth/1.33)>>
diff --git a/src/uncategorized/slaveAssignmentsReport.tw b/src/uncategorized/slaveAssignmentsReport.tw
index 5d0a815b0536df2af970cc939e7d582c63be2f75..b030ad63aa5f1f06cd64aacaa903205ce65c9b45 100644
--- a/src/uncategorized/slaveAssignmentsReport.tw
+++ b/src/uncategorized/slaveAssignmentsReport.tw
@@ -14,7 +14,7 @@
 
 /** silent pass for any reassignments before generating reports as well as getting tired and illness calculations out of the way */
 <<for $i = 0; $i < _SL; $i++>>
-	<<run tired($slaves[$i], illness($slaves[$i]))>>
+	<<run tired($slaves[$i]), illness($slaves[$i])>>
 	<<if $slaves[$i].choosesOwnAssignment == 1>>
 		<<silently>>
 			<<include "SA chooses own job">>
diff --git a/src/uncategorized/spaReport.tw b/src/uncategorized/spaReport.tw
index c2aca66026bc2024445078eb7a35e46bfc360b26..795fe70a1ef1bbf4ba59df7abfe06d2fb9bd892a 100644
--- a/src/uncategorized/spaReport.tw
+++ b/src/uncategorized/spaReport.tw
@@ -261,7 +261,17 @@
 	<<set $i = $slaveIndices[$SpaiIDs[_dI]]>>
 	<<setLocalPronouns $slaves[$i]>>
 	<<set $slaves[$i].devotion += _devBonus, $slaves[$i].trust += _trustBonus>>
-	<<run improveCondition($slaves[$i], _healthBonus)>>
+	<<run improveCondition($slaves[$i], 5 + _healthBonus)>>
+	<<if ($slaves[$i].health.condition < -80)>>
+		<<run improveCondition($slaves[$i], 15)>>
+	<<elseif $slaves[$i].health.condition < -40>>
+		<<run improveCondition($slaves[$i], 10)>>
+	<<elseif $slaves[$i].health.condition < 0>>
+		<<run improveCondition($slaves[$i], 5)>>
+	<</if>>
+	<<if ($spaUpgrade == 1) && ($slaves[$i].health.condition < 100)>>
+		<<run improveCondition($slaves[$i], normalRandInt(8))>>
+	<</if>>
 	<<if ($slaves[$i].devotion < 60) && ($slaves[$i].trust < 60)>>
 		<<set $slaves[$i].devotion++, $slaves[$i].trust++>>
 	<<elseif ($slaves[$i].trust < 40)>>
@@ -269,9 +279,6 @@
 	<<elseif ($slaves[$i].devotion < 40)>>
 		<<set $slaves[$i].devotion += 10>>
 	<</if>>
-	<<if ($spaUpgrade == 1) && ($slaves[$i].health.condition < 100)>>
-		<<run improveCondition($slaves[$i], normalRandInt(10))>>
-	<</if>>
 	<<switch $spaDecoration>>
 	<<case "Chattel Religionist" "Chinese Revivalist">>
 		<<set $slaves[$i].rules.living = "normal">>