diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js
index 5abaac8fa431b68ea620571a259d3ac4b842808f..e5d470751a22fcfa29484deffe7c6a38d4929b9e 100644
--- a/js/003-data/gameVariableData.js
+++ b/js/003-data/gameVariableData.js
@@ -447,8 +447,6 @@ App.Data.resetOnNGPlus = {
 	smilingManProgress: 0,
 	investedFunds: 0,
 	relationshipLM: 0,
-	captureRoute: 0,
-	collaborationRoute: 0,
 	smilingManWeek: 0,
 	globalCrisisWeeks: 0,
 	smilingManFate: 4,
@@ -461,12 +459,8 @@ App.Data.resetOnNGPlus = {
 	citizenRebellionEventFires: 0,
 	slaveRebellion: 0,
 	citizenRebellion: 0,
-	rebellingUnits: [],
 	engageRule: 0,
 	irregulars: 0,
-	rebellingMilitia: 0,
-	rebellingSlaves: 0,
-	rebellingMercs: 0,
 	repairTime: 3,
 	arcRepairTime: 0,
 	garrison: {},
@@ -493,7 +487,6 @@ App.Data.resetOnNGPlus = {
 
 	/* battle relevant vars */
 	slaveVictories: [],
-	slaveIncreasedPrestige: 0,
 	totalKills: 0,
 	battlesCount: 0,
 	majorBattlesCount: 0,
@@ -510,16 +503,9 @@ App.Data.resetOnNGPlus = {
 	battleTurns: 0,
 	tacticsSuccessful: 0,
 	leaderWounded: 0,
-	/* 0=no wound, 1=mute, 2=blind, 3=amputee, 4=health */
 	gainedCombat: 0,
 	gainedWarfare: 0,
-	expectedEquip: 0,
-	estimatedMen: 0,
 	SFIntervention: 0,
-	carriableSoldiers: 0,
-	SFatk: 0,
-	SFdef: 0,
-	SFhp: 0,
 	rebellingID: [],
 	saveValid: 0,
 	lastSelection: [],
@@ -554,10 +540,6 @@ App.Data.resetOnNGPlus = {
 	PCvictories: 0,
 	PClosses: 0,
 
-	/* buildings */
-	woundType: 0,
-	/* 0:no wound, 1:mute, 2:blind, 3:amputee, 4<:health */
-
 	reminderEntry: "",
 	reminderWeek: "",
 	lastWeeksCashIncome: {},
diff --git a/src/Mods/SecExp/SecExpBackwardCompatibility.tw b/src/Mods/SecExp/SecExpBackwardCompatibility.tw
index 9629e43a9c7a95b6ad6f85a9859d2f632331cf8f..969ce8f11c87a486d9c69e9762075d730c1e3fcd 100644
--- a/src/Mods/SecExp/SecExpBackwardCompatibility.tw
+++ b/src/Mods/SecExp/SecExpBackwardCompatibility.tw
@@ -366,12 +366,6 @@
 <<if ndef $relationshipLM>>
 	<<set $relationshipLM = 0>>
 <</if>>
-<<if ndef $captureRoute>>
-	<<set $captureRoute = 0>>
-<</if>>
-<<if ndef $collaborationRoute>>
-	<<set $collaborationRoute = 0>>
-<</if>>
 <<if ndef $smilingManWeek>>
 	<<set $smilingManWeek = 0>>
 <</if>>
@@ -404,24 +398,12 @@
 <<if ndef $citizenRebellion>>
 	<<set $citizenRebellion = 0>>
 <</if>>
-<<if ndef $rebellingUnits>>
-	<<set $rebellingUnits = []>>
-<</if>>
 <<if ndef $engageRule>>
 	<<set $engageRule = 0>>
 <</if>>
 <<if ndef $irregulars>>
 	<<set $irregulars = 0>>
 <</if>>
-<<if ndef $rebellingMilitia>>
-	<<set $rebellingMilitia = 0>>
-<</if>>
-<<if ndef $rebellingSlaves>>
-	<<set $rebellingSlaves = 0>>
-<</if>>
-<<if ndef $rebellingMercs>>
-	<<set $rebellingMercs = 0>>
-<</if>>
 <<if ndef $repairTime>>
 	<<set $repairTime = 3>>
 <</if>>
@@ -527,9 +509,6 @@
 <<if ndef $slaveVictories>>
 	<<set $slaveVictories = []>>
 <</if>>
-<<if ndef $slaveIncreasedPrestige>>
-	<<set $slaveIncreasedPrestige = 0>>
-<</if>>
 <<if ndef $totalKills>>
 	<<set $totalKills = 0>>
 <</if>>
@@ -573,7 +552,7 @@
 	<<set $tacticsSuccessful = 0>>
 <</if>>
 <<if ndef $leaderWounded>>
-	<<set $leaderWounded = 0>>				/* 0=no wound, 1=mute, 2=blind, 3=amputee, 4=health */
+	<<set $leaderWounded = 0>>
 <</if>>
 <<if ndef $gainedCombat>>
 	<<set $gainedCombat = 0>>
@@ -581,27 +560,9 @@
 <<if ndef $gainedWarfare>>
 	<<set $gainedWarfare = 0>>
 <</if>>
-<<if ndef $expectedEquip>>
-	<<set $expectedEquip = 0>>
-<</if>>
-<<if ndef $estimatedMen>>
-	<<set $estimatedMen = 0>>
-<</if>>
 <<if ndef $SFIntervention>>
 	<<set $SFIntervention = 0>>
 <</if>>
-<<if ndef $carriableSoldiers>>
-	<<set $carriableSoldiers = 0>>
-<</if>>
-<<if ndef $SFatk>>
-	<<set $SFatk = 0>>
-<</if>>
-<<if ndef $SFdef>>
-	<<set $SFdef = 0>>
-<</if>>
-<<if ndef $SFhp>>
-	<<set $SFhp = 0>>
-<</if>>
 <<if ndef $rebellingID>>
 	<<set $rebellingID = []>>
 <</if>>
diff --git a/src/Mods/SecExp/attackGenerator.tw b/src/Mods/SecExp/attackGenerator.tw
index 0a3b0b7c65d205a947becb2c5f46256919fef510..9c9e19961b4a23ef23de86c3dd159cc95354e8bf 100644
--- a/src/Mods/SecExp/attackGenerator.tw
+++ b/src/Mods/SecExp/attackGenerator.tw
@@ -173,15 +173,4 @@
 			<</if>>
 		<</if>>
 	<</if>>
-
-	<<set $estimatedMen = Math.round($attackTroops * (1 + either(-1,1) * (random(3,4) - App.SecExp.battle.recon()) * 0.1))>>
-	<<if App.SecExp.battle.recon() == 3>>
-		<<set $expectedEquip = $attackEquip + random(-1,1)>>
-	<<elseif App.SecExp.battle.recon() == 2>>
-		<<set $expectedEquip = $attackEquip + random(-1,2)>>
-	<<elseif App.SecExp.battle.recon() == 1>>
-		<<set $expectedEquip = $attackEquip + random(-2,2)>>
-	<<else>>
-		<<set $expectedEquip = $attackEquip + random(-2,3)>>
-	<</if>>
 <</if>>
\ No newline at end of file
diff --git a/src/Mods/SecExp/attackHandler.tw b/src/Mods/SecExp/attackHandler.tw
index 10c846cb6b6d27b611d65ca7a78766ff5e444a4e..21134caec5f9fcd3225674bd20f1628b5d1295bc 100644
--- a/src/Mods/SecExp/attackHandler.tw
+++ b/src/Mods/SecExp/attackHandler.tw
@@ -314,23 +314,6 @@
 			<<set _mercMod -= 0.2>>
 			<<set _SFMod -= 0.2>>
 			<<set _enemyMod += 0.2>>
-			<<set $woundType = random(1,10)>>
-			<<set _i = $slaveIndices[$Bodyguard.ID]>>
-			<<if $woundType == 1>>
-				<<set $slaves[_i].voice = 0>>
-				<<run healthDamage($slaves[$i], 60)>>
-			<<elseif $woundType == 2>>
-				<<run eyeSurgery($slaves[_i], "both", "blind"), healthDamage($slaves[$i], 30)>>
-			<<elseif $woundType == 3>>
-				<<run removeLimbs($slaves[_i], "all")>>
-				<<run healthDamage($slaves[$i], 80)>>
-			<<elseif $woundType >= 4>>
-				<<if $slaves[_i].health.health >= -60>>
-					<<run healthDamage($slaves[$i], 30)>>
-				<<else>>
-					<<run healthDamage($slaves[$i], -90 - $slaves[$i].health.health)>>
-				<</if>>
-			<</if>>
 		<</if>>
 		/* 60% chance of getting combat skill if not already have it */
 		<<if $Bodyguard.skill.combat == 0 && random(1,100) <= 60>>
@@ -439,23 +422,6 @@
 			<<set _mercMod -= 0.2>>
 			<<set _SFMod -= 0.2>>
 			<<set _enemyMod += 0.2>>
-			<<set $woundType = random(1,10)>>
-			<<set _i = $slaveIndices[$HeadGirl.ID]>>
-			<<if $woundType == 1>>
-				<<set $slaves[_i].voice = 0>>
-				<<run healthDamage($slaves[$i], 60)>>
-			<<elseif $woundType == 2>>
-				<<set eyeSurgery($slaves[_i], "both", "blind"), healthDamage($slaves[$i], 30)>>
-			<<elseif $woundType == 3>>
-				<<run removeLimbs($slaves[_i], "all")>>
-				<<run healthDamage($slaves[$i], 80)>>
-			<<elseif $woundType >= 4>>
-				<<if $slaves[_i].health.health >= -60>>
-					<<run healthDamage($slaves[$i], 30)>>
-				<<else>>
-					<<run healthDamage($slaves[$i], -90 - $slaves[$i].health.health)>>
-				<</if>>
-			<</if>>
 		<</if>>
 		/* 60% chance of getting combat skill if not already have it */
 		<<if $HeadGirl.skill.combat == 0 && random(1,100) <= 60>>
@@ -903,13 +869,10 @@
 	<</for>>
 
 	<<if $SF.Toggle && $SF.Active >= 1 && $SFIntervention>>
-		<<set $SFatk = 0>>
-		<<set $SFdef = 0>>
-		<<set $SFhp = 0>>
-		<<run calcSFStatistics()>>
-		<<set _attack += $SFatk>>
-		<<set _defense += $SFdef>>
-		<<set _hp += $SFhp>>
+		<<set _unit = App.SecExp.getUnit("SF")>>
+		<<set _attack += _unit.attack>>
+		<<set _defense += _unit.defense>>
+		<<set _hp += _unit.hp>>
 	<</if>>
 
 	/* morale and baseHp calculation */
diff --git a/src/Mods/SecExp/attackOptions.tw b/src/Mods/SecExp/attackOptions.tw
index efee7d2cc43bd24fdf76f85be29c55b372aa2669..3f9cf5ba9d181e09cc5c1994fe24246e2a6be603 100644
--- a/src/Mods/SecExp/attackOptions.tw
+++ b/src/Mods/SecExp/attackOptions.tw
@@ -147,6 +147,8 @@
 <</if>>
 <br><br>
 __Recon__:
+<<set _estimatedMen = normalRandInt($attackTroops, $attackTroops * (4 - App.SecExp.battle.recon()) * 0.05)>>
+<<set _expectedEquip = normalRandInt($attackEquip, (4 - App.SecExp.battle.recon()) * 0.25)>>
 <br>
 It seems your troops and your adversary will fight
 <<if $battleTerrain == "rural">>
@@ -177,16 +179,16 @@ It seems your troops and your adversary will fight
 <<else>>
 	Your recon capabilities are almost non-existent. The information collected will be wild guesses at best:
 <</if>>
-approximately <strong><<print $estimatedMen>> men</strong> are coming, they seem to be
-<<if $expectedEquip <= 0>>
+approximately <strong><<print _estimatedMen>> men</strong> are coming, they seem to be
+<<if _expectedEquip <= 0>>
 	<strong>poorly armed</strong>. Old rusty small arms are the norm with just a few barely working civilian vehicles.
-<<elseif $expectedEquip == 1>>
+<<elseif _expectedEquip == 1>>
 	<strong>lightly armed</strong>, mostly with small arms and some repurposed civilian vehicles with scattered machine gun support. There's no sign of heavy vehicles, artillery or aircraft.
-<<elseif $expectedEquip == 2>>
+<<elseif _expectedEquip == 2>>
 	<strong>decently armed</strong> with good quality small arms, machine guns and a few mortars. There appear to be some heavy military vehicles coming as well.
-<<elseif $expectedEquip == 3>>
+<<elseif _expectedEquip == 3>>
 	<strong>well armed</strong> with high quality small arms, snipers, demolitions teams, heavy duty machine guns and mortars. Heavy military vehicles are numerous and a few artillery pieces are accompanying the detachment.
-<<elseif $expectedEquip >= 4>>
+<<elseif _expectedEquip >= 4>>
 	<strong>extremely well armed</strong> with excellent small arms and specialized teams with heavy duty infantry support weapons. Heavy presence of armored military vehicles, artillery pieces and even some attack helicopters.
 <</if>>
 
diff --git a/src/Mods/SecExp/attackReport.tw b/src/Mods/SecExp/attackReport.tw
index af5af2564a51488ed24bec6bc1949665d83eeb0d..65d8d802a2d4f0c708f50762fa4c6a281439adf2 100644
--- a/src/Mods/SecExp/attackReport.tw
+++ b/src/Mods/SecExp/attackReport.tw
@@ -14,65 +14,38 @@
 <<set _loot = 0>>
 
 /* result */
+<<set $battlesCount++>>
 <<if $majorBattle == 0>>
-	<<set $battlesCount++>>
 	<<set _majorBattleMod = 1>>
-	<<if $battleResult == 3>>
-		<strong>Victory!</strong>
-		<<set $PClossStreak = 0>>
-		<<set $PCvictoryStreak += 1>>
-		<<set $PCvictories++>>
-	<<elseif $battleResult == -3>>
-		<strong>Defeat!</strong>
-		<<set $PClossStreak += 1>>
-		<<set $PCvictoryStreak = 0>>
-		<<set $PClosses++>>
-	<<elseif $battleResult == 2>>
-		<strong>Partial victory!</strong>
-		<<set $PCvictories++>>
-	<<elseif $battleResult == -2>>
-		<strong>Partial defeat!</strong>
-		<<set $PClosses++>>
-	<<elseif $battleResult == -1>>
-		<strong>We surrendered</strong>
-		<<set $PClosses++>>
-	<<elseif $battleResult == 0>>
-		<strong>Failed bribery!</strong>
-		<<set $PClosses++>>
-	<<elseif $battleResult == 1>>
-		<strong>Successful bribery!</strong>
-		<<set $PCvictories++>>
-	<</if>>
 <<else>>
 	<<set _majorBattleMod = 2>>
-	<<set $battlesCount++>>
 	<<set $majorBattlesCount++>>
-	<<if $battleResult == 3>>
-		<strong>Major victory!</strong>
-		<<set $PClossStreak = 0>>
-		<<set $PCvictoryStreak += 1>>
-		<<set $PCvictories++>>
-	<<elseif $battleResult == -3>>
-		<strong>Major Defeat!</strong>
-		<<set $PClossStreak += 1>>
-		<<set $PCvictoryStreak = 0>>
-		<<set $PClosses++>>
-	<<elseif $battleResult == 2>>
-		<strong>Partial victory!</strong>
-		<<set $PCvictories++>>
-	<<elseif $battleResult == -2>>
-		<strong>Partial defeat!</strong>
-		<<set $PClosses++>>
-	<<elseif $battleResult == -1>>
-		<strong>We surrendered</strong>
-		<<set $PClosses++>>
-	<<elseif $battleResult == 0>>
-		<strong>Failed bribery!</strong>
-		<<set $PClosses++>>
-	<<elseif $battleResult == 1>>
-		<strong>Successful bribery!</strong>
-		<<set $PCvictories++>>
-	<</if>>
+<</if>>
+<<if $battleResult == 3>>
+	<strong>Victory!</strong>
+	<<set $PClossStreak = 0>>
+	<<set $PCvictoryStreak += 1>>
+	<<set $PCvictories++>>
+<<elseif $battleResult == -3>>
+	<strong>Defeat!</strong>
+	<<set $PClossStreak += 1>>
+	<<set $PCvictoryStreak = 0>>
+	<<set $PClosses++>>
+<<elseif $battleResult == 2>>
+	<strong>Partial victory!</strong>
+	<<set $PCvictories++>>
+<<elseif $battleResult == -2>>
+	<strong>Partial defeat!</strong>
+	<<set $PClosses++>>
+<<elseif $battleResult == -1>>
+	<strong>We surrendered</strong>
+	<<set $PClosses++>>
+<<elseif $battleResult == 0>>
+	<strong>Failed bribery!</strong>
+	<<set $PClosses++>>
+<<elseif $battleResult == 1>>
+	<strong>Successful bribery!</strong>
+	<<set $PCvictories++>>
 <</if>>
 <hr>
 
@@ -972,15 +945,18 @@
 		<<if $gainedCombat == 1>>
 			During the battle, $he had to fight for $his life, giving $him experience in modern combat. $He is now proficient with modern firearms and hand to hand combat.
 		<</if>>
-		<<if $woundType != 0>>
+		<<if $leaderWounded == 1>>
 			Unfortunately, @@.red;$he sustained major injuries.@@
-			<<if $woundType == 1>>
+			<<set _woundType = App.SecExp.inflictBattleWound(getSlave($Bodyguard.ID))>>
+			<<if _woundType == "voice">>
 				A stray bullet hit $his neck. While $he fortunately avoided fatal hemorrhaging, $his vocal cords were irreparably damaged.
-			<<elseif $woundType == 2>>
+			<<elseif _woundType == "eyes">>
 				Some shrapnel found $his eyes as their final target, blinding $him permanently.
-			<<elseif $woundType == 3>>
-				A grenade landed close to $him, rendering $him a quadruple amputee.
-			<<elseif $woundType >= 4>>
+			<<elseif _woundType == "legs">>
+				A grenade landed close to $him, and $his badly mangled legs had to be amputated.
+			<<elseif _woundType == "arm">>
+				A shrapnel blast mangled one of $his arms, which had to be amputated.
+			<<elseif _woundType == "flesh">>
 				While gravely wounded, it seems $he will be able to fully recover, given enough time.
 			<</if>>
 			Your troops were greatly affected by the loss of their leader.
@@ -1003,7 +979,7 @@
 								<<set $slaves[_j].prestigeDesc = "$He is known as a legendary commander all over the world.">>
 							<</if>>
 							<<set $slaveVictories[_i].victories = 0>>
-							<<set $slaveIncreasedPrestige = 1>>
+							$He brought your army to victory so many times that $his @@.green;prestige has increased.@@
 						<</if>>
 					<</if>>
 					<<break>>
@@ -1014,9 +990,6 @@
 				<<set $slaveVictories.push(_newSlave)>>
 			<</if>>
 		<</if>>
-		<<if $slaveIncreasedPrestige == 1>>
-			$He brought your army to victory so many times that $his @@.green;prestige has increased.@@
-		<</if>>
 	<<elseif $leadingTroops == "headGirl">>
 		<<setLocalPronouns $HeadGirl>>
 		<<if $auto == 1>>$assistant.name<<else>>You<</if>> decided it will be your Head Girl that leads the troops.
@@ -1109,15 +1082,18 @@
 		<<if $gainedCombat == 1>>
 			During the battle, $he had to fight for $his life, giving $him experience in modern combat. $He is now proficient with modern firearms and hand to hand combat.
 		<</if>>
-		<<if $woundType != 0>>
-			Unfortunately, @@.red;$he sustained severe injuries.@@
-			<<if $woundType == 1>>
+		<<if $leaderWounded == 1>>
+			Unfortunately, @@.red;$he sustained major injuries.@@
+			<<set _woundType = App.SecExp.inflictBattleWound(getSlave($Bodyguard.ID))>>
+			<<if _woundType == "voice">>
 				A stray bullet hit $his neck. While $he fortunately avoided fatal hemorrhaging, $his vocal cords were irreparably damaged.
-			<<elseif $woundType == 2>>
-				Some shrapnel found $his eyes as final their target, blinding $him permanently.
-			<<elseif $woundType == 3>>
-				A grenade landed close to $him, rendering $him a quadruple amputee.
-			<<elseif $woundType >= 4>>
+			<<elseif _woundType == "eyes">>
+				Some shrapnel found $his eyes as their final target, blinding $him permanently.
+			<<elseif _woundType == "legs">>
+				A grenade landed close to $him, and $his badly mangled legs had to be amputated.
+			<<elseif _woundType == "arm">>
+				A shrapnel blast mangled one of $his arms, which had to be amputated.
+			<<elseif _woundType == "flesh">>
 				While gravely wounded, it seems $he will be able to fully recover, given enough time.
 			<</if>>
 			Your troops were greatly affected by the loss of their leader.
@@ -1140,7 +1116,7 @@
 								<<set $slaves[_j].prestigeDesc = "$He is known as a legendary commander all over the world.">>
 							<</if>>
 							<<set $slaveVictories[_i].victories = 0>>
-							<<set $slaveIncreasedPrestige = 1>>
+							$He brought your army to victory so many times that $his @@.green;prestige has increased.@@
 						<</if>>
 					<</if>>
 					<<break>>
@@ -1151,9 +1127,6 @@
 				<<set $slaveVictories.push(_newSlave)>>
 			<</if>>
 		<</if>>
-		<<if $slaveIncreasedPrestige == 1>>
-			$He brought your army to victory so many times that $his @@.green;prestige has increased.@@
-		<</if>>
 	<<elseif $leadingTroops == "citizen">>
 		<<if $auto == 1>>$assistant.name<<else>>You<</if>> decided to appoint one of your volunteers as the commander.
 		<<if $arcologies[0].FSDegradationist == "unset" && $arcologies[0].FSPaternalist == "unset">>
@@ -1533,8 +1506,6 @@
 <<run delete $bribeCost>>
 <<set $leaderWounded = 0>>
 <<set $gainedWarfare = 0>>
-<<set $slaveIncreasedPrestige = 0>>
-<<set $woundType = 0>>
 <<set $tacticsSuccessful = 0>>
 <<set $attackType = "none">>
 <<set $chosenTactic = "none">>
diff --git a/src/Mods/SecExp/js/Unit.js b/src/Mods/SecExp/js/Unit.js
index cd6bdfa02dc88a5f712005ff65046108295eee0e..db2a025f91ae807fd2866e8c0530c9a38bba5dab 100644
--- a/src/Mods/SecExp/js/Unit.js
+++ b/src/Mods/SecExp/js/Unit.js
@@ -10,13 +10,15 @@ App.SecExp.generateUnitID = function() {
 };
 
 /** Player unit factory - get a unit based on its type and index
- * @param {string} type - "Bots", "Militia", "Slaves", or "Mercs"
+ * @param {string} type - "Bots", "Militia", "Slaves", "Mercs", or "SF"
  * @param {number} [index] - must be supplied if type is not "Bots"
  * @returns {App.SecExp.Unit}
  */
 App.SecExp.getUnit = function(type, index) {
 	if (type === "Bots") {
 		return new App.SecExp.DroneUnit(V.secBots, App.SecExp.BaseDroneUnit);
+	} else if (type === "SF") {
+		return new App.SecExp.SFUnit();
 	} else if (typeof index !== "number") {
 		throw `Bad index for unit type ${type}: ${index}`;
 	}
@@ -467,6 +469,40 @@ App.SecExp.HumanUnit = class SecExpHumanUnit extends App.SecExp.Unit {
 	}
 };
 
+App.SecExp.troopsFromSF = function() {
+	if (V.slaveRebellion !== 1 || V.citizenRebellion !== 1) {
+		// attack: how many troops can we actually carry?
+		const transportMax = Math.trunc(125 * (V.SF.Squad.GunS + ((V.SF.Squad.AV + V.SF.Squad.TV)/2)));
+		return Math.min(transportMax, V.SF.ArmySize);
+	} else {
+		// rebellion: transport capabilities are irrelevant
+		return V.SF.ArmySize;
+	}
+};
+
+App.SecExp.SFUnit = class SFUnit extends App.SecExp.Unit {
+	constructor() {
+		super(null, App.SecExp.BaseSpecialForcesUnit);
+		this._distancePenalty = (V.slaveRebellion !== 1 || V.citizenRebellion !== 1) ? 0.10 : 0.0;
+	}
+
+	get attack() {
+		// ignores base attack? weird.
+		const attackUpgrades = V.SF.Squad.Armoury + V.SF.Squad.Drugs + V.SF.Squad.AA + V.SF.Squad.AV;
+		return (0.75 - this._distancePenalty) * attackUpgrades;
+	}
+
+	get defense() {
+		// ignores base defense? weird.
+		const defenseUpgrades = V.SF.Squad.Armoury + V.SF.Squad.Drugs + (V.SF.Squad.AA + V.SF.Squad.TA) / 2 + (V.SF.Squad.AV + V.SF.Squad.TV) / 2;
+		return (0.5 - this._distancePenalty) * defenseUpgrades;
+	}
+
+	get hp() {
+		return this._baseUnit.hp * App.SecExp.troopsFromSF();
+	}
+};
+
 App.SecExp.EnemyUnit = class SecExpEnemyUnit extends App.SecExp.Unit {
 	/** @param {FC.SecExp.UnitData} data
 	 * @param {BaseUnit} baseUnit
diff --git a/src/Mods/SecExp/js/secExp.js b/src/Mods/SecExp/js/secExp.js
index 9469924406dcf9161a58a4093ec47c2ccea450ff..d58a4381715773d2f4a484239122ff0d97ba5c20 100644
--- a/src/Mods/SecExp/js/secExp.js
+++ b/src/Mods/SecExp/js/secExp.js
@@ -211,7 +211,7 @@ App.SecExp.conflict = (function() {
 			}
 			countHumanTroops((u) => u.isDeployed === 1);
 			if (V.SF.Toggle && V.SF.Active >= 1 && V.SFIntervention) {
-				troops += V.carriableSoldiers;
+				troops += App.SecExp.troopsFromSF();
 			}
 		} else {
 			if (V.irregulars > 0) {
@@ -222,7 +222,7 @@ App.SecExp.conflict = (function() {
 			}
 			countHumanTroops((u) => u.active === 1 && V.loyalID.includes(u.ID));
 			if (V.SF.Toggle && V.SF.Active >= 1) {
-				troops += V.carriableSoldiers;
+				troops += App.SecExp.troopsFromSF();
 			}
 		}
 		return troops;
@@ -904,3 +904,72 @@ App.SecExp.Manpower = {
 		return this.employedMerc + this.employedMilitia + this.employedSlave;
 	}
 };
+
+App.SecExp.inflictBattleWound = (function() {
+	/** @typedef {object} Wound
+	 * @property {number} weight
+	 * @property {function(App.Entity.SlaveState):boolean} allowed
+	 * @property {function(App.Entity.SlaveState):void} effects
+	 */
+	/** @type { Object<string, Wound> } */
+	const wounds = {
+		eyes: {
+			weight: 10,
+			allowed: (s) => canSee(s),
+			effects: (s) => { clampedDamage(s, 30); eyeSurgery(s, "both", "blind"); }
+		},
+		voice: {
+			weight: 10,
+			allowed: (s) => canTalk(s),
+			effects: (s) => { clampedDamage(s, 60); s.voice = 0; }
+		},
+		legs: {
+			weight: 5,
+			allowed: (s) => hasAnyNaturalLegs(s),
+			effects: (s) => { clampedDamage(s, 80); removeLimbs(s, "left leg"); removeLimbs(s, "right leg"); }
+		},
+		arm: {
+			weight: 5,
+			allowed: (s) => hasAnyNaturalArms(s),
+			effects: (s) => { clampedDamage(s, 60); removeLimbs(s, jsEither(["left arm", "right arm"])); }
+		},
+		flesh: {
+			weight: 70,
+			allowed: () => true,
+			effects: (s) => { clampedDamage(s, 30); }
+		}
+		// TODO: add more wound types? destroy prosthetics?
+	};
+
+	/** Inflicts a large amount of damage upon a slave without killing them (i.e. leaving their health total above -90)
+	 * @param {App.Entity.SlaveState} slave
+	 * @param {number} magnitude
+	 */
+	function clampedDamage(slave, magnitude) {
+		if ((slave.health.health - magnitude) > -90) {
+			healthDamage(slave, magnitude);
+		} else {
+			healthDamage(slave, 90 + slave.health.health);
+		}
+	}
+
+	/** Inflicts a wound upon a slave during a battle.  Returns the wound type from the wound table (see above) so it can be described.
+	 * @param {App.Entity.SlaveState} slave
+	 * @returns {string}
+	 */
+	function doWound(slave) {
+		let woundHash = {};
+		for (const w of Object.keys(wounds)) {
+			if (wounds[w].allowed(slave)) {
+				woundHash[w] = wounds[w].weight;
+			}
+		}
+		/** @type {string} */
+		// @ts-ignore - FIXME: hashChoice has bad JSDoc
+		const wound = hashChoice(woundHash);
+		wounds[wound].effects(slave);
+		return wound;
+	}
+
+	return doWound;
+})();
diff --git a/src/Mods/SecExp/rebellionGenerator.tw b/src/Mods/SecExp/rebellionGenerator.tw
index 715923a49dc7494746df9b45beb29d16df31b670..cb17b7b64985b00b84490a19aa7287f10395511f 100644
--- a/src/Mods/SecExp/rebellionGenerator.tw
+++ b/src/Mods/SecExp/rebellionGenerator.tw
@@ -306,8 +306,8 @@
 	<<set _repFactor = Math.clamp($rep / 20000,0.4,0.6)>>
 	<<set _rebelPercent = 0.3 * _authFactor>>
 	<<set _irregularPercent = 0.2 * _repFactor>>
-	<<set $attackTroops = Math.clamp(Math.trunc($ASlaves * _rebelPercent + random(-100,100)) * _weekMod,50,$ASlaves)>>
-	<<set $irregulars = Math.clamp(Math.trunc($ACitizens * _irregularPercent + random(-100,100)) * _weekMod,50,$ACitizens)>>
+	<<set $attackTroops = Math.clamp(Math.trunc($ASlaves * _rebelPercent * _weekMod) + random(-100,100),50,$ASlaves)>>
+	<<set $irregulars = Math.clamp(Math.trunc($ACitizens * _irregularPercent * _weekMod) + random(-100,100),50,$ACitizens)>>
 	/* calc if units rebel */
 	<<for _i = 0; _i < $slaveUnits.length; _i++>>
 		<<if $slaveUnits[_i].loyalty < 10>>
@@ -376,8 +376,8 @@
 	<<set _repFactor = Math.clamp($rep / 20000,0.4,0.6)>>
 	<<set _rebelPercent = 0.3 * _authFactor>>
 	<<set _irregularPercent = 0.2 * _repFactor>>
-	<<set $attackTroops = Math.clamp(Math.trunc($ACitizens * _rebelPercent + random(-100,100)) * _weekMod,50,$ACitizens)>>
-	<<set $irregulars = Math.clamp(Math.trunc($ACitizens * _irregularPercent + random(-100,100)) * _weekMod,50,$ACitizens)>>
+	<<set $attackTroops = Math.clamp(Math.trunc($ACitizens * _rebelPercent * _weekMod) + random(-100,100),50,$ACitizens)>>
+	<<set $irregulars = Math.clamp(Math.trunc($ACitizens * _irregularPercent * _weekMod) + random(-100,100),50,$ACitizens)>>
 	/* calc if units rebel */
 	<<for _i = 0; _i < $militiaUnits.length; _i++>>
 		<<if $militiaUnits[_i].loyalty < 10>>
diff --git a/src/Mods/SecExp/rebellionHandler.tw b/src/Mods/SecExp/rebellionHandler.tw
index 20e41d978aa6933661fa1c69426dd96b900bbc83..2682d53b923997f71f86cae2c302738f0a01d76b 100644
--- a/src/Mods/SecExp/rebellionHandler.tw
+++ b/src/Mods/SecExp/rebellionHandler.tw
@@ -84,13 +84,10 @@
 <</for>>
 
 <<if $SF.Toggle && $SF.Active >= 1>>
-	<<set $SFatk = 0>>
-	<<set $SFdef = 0>>
-	<<set $SFhp = 0>>
-	<<run calcSFStatistics()>>
-	<<set _attack += $SFatk>>
-	<<set _defense += $SFdef>>
-	<<set _hp += $SFhp>>
+	<<set _unit = App.SecExp.getUnit("SF")>>
+	<<set _attack += _unit.attack>>
+	<<set _defense += _unit.defense>>
+	<<set _hp += _unit.hp>>
 <</if>>
 
 <<set _attack *= _engageMod>>
@@ -140,11 +137,12 @@
 <</if>>
 <<set _armyMod = Math.trunc(_armyMod)>>
 
+<<set _rebellingSlaves = 0, _rebellingMilitia = 0, _rebellingMercs = 0>>
 <<if $slaveRebellion == 1>>
-	<<set $rebellingSlaves = 1>>
+	<<set _rebellingSlaves = 1>>
 	<<set _unit = App.SecExp.getIrregularUnit("Slaves", $attackTroops, $attackEquip)>>
 <<else>>
-	<<set $rebellingMilitia = 1>>
+	<<set _rebellingMilitia = 1>>
 	<<set _unit = App.SecExp.getIrregularUnit("Militia", $attackTroops, $attackEquip)>>
 <</if>>
 <<set _enemyAttack += _unit.attack * _armyMod>>
@@ -153,7 +151,7 @@
 
 <<for _i = 0; _i < $militiaUnits.length; _i++>>
 	<<if $militiaUnits[_i].active == 1 && $rebellingID.includes($militiaUnits[_i].ID)>>
-		<<set $rebellingMilitia = 1>>
+		<<set _rebellingMilitia = 1>>
 		<<set $attackTroops += $militiaUnits[_i].troops>>
 		<<set $militiaUnits[_i].loyalty = 0>>
 		<<set _unit = App.SecExp.getUnit("Militia", _i)>>
@@ -164,7 +162,7 @@
 <</for>>
 <<for _i = 0; _i < $slaveUnits.length; _i++>>
 	<<if $slaveUnits[_i].active == 1 && $rebellingID.includes($slaveUnits[_i].ID)>>
-		<<set $rebellingSlaves = 1>>
+		<<set _rebellingSlaves = 1>>
 		<<set $attackTroops += $slaveUnits[_i].troops>>
 		<<set $slaveUnits[_i].loyalty = 0>>
 		<<set _unit = App.SecExp.getUnit("Slaves", _i)>>
@@ -175,7 +173,7 @@
 <</for>>
 <<for _i = 0; _i < $mercUnits.length; _i++>>
 	<<if $mercUnits[_i].active == 1 && $rebellingID.includes($mercUnits[_i].ID)>>
-		<<set $rebellingMercs = 1>>
+		<<set _rebellingMercs = 1>>
 		<<set $attackTroops += $mercUnits[_i].troops>>
 		<<set $mercUnits[_i].loyalty = 0>>
 		<<set _unit = App.SecExp.getUnit("Mercs", _i)>>
@@ -187,9 +185,9 @@
 
 <<set _enemyMoraleTroopMod = Math.clamp($attackTroops / 100,1,10)>>
 
-<<set _enemyMorale = 1.5 * (App.SecExp.BaseMilitiaUnit.morale * $rebellingMilitia + App.SecExp.BaseSlaveUnit.morale * $rebellingSlaves + App.SecExp.BaseMercUnit.morale * $rebellingMercs) / ($rebellingMilitia + $rebellingSlaves + $rebellingMercs)>>
+<<set _enemyMorale = 1.5 * (App.SecExp.BaseMilitiaUnit.morale * _rebellingMilitia + App.SecExp.BaseSlaveUnit.morale * _rebellingSlaves + App.SecExp.BaseMercUnit.morale * _rebellingMercs) / (_rebellingMilitia + _rebellingSlaves + _rebellingMercs)>>
 <<set _enemyMorale *= _enemyMoraleTroopMod>>
-<<set _enemyBaseHp = (App.SecExp.BaseMilitiaUnit.hp * $rebellingMilitia + App.SecExp.BaseSlaveUnit.hp * $rebellingSlaves + App.SecExp.BaseMercUnit.hp * $rebellingMercs) / ($rebellingMilitia + $rebellingSlaves + $rebellingMercs)>>
+<<set _enemyBaseHp = (App.SecExp.BaseMilitiaUnit.hp * _rebellingMilitia + App.SecExp.BaseSlaveUnit.hp * _rebellingSlaves + App.SecExp.BaseMercUnit.hp * _rebellingMercs) / (_rebellingMilitia + _rebellingSlaves + _rebellingMercs)>>
 
 <<if isNaN(_attack)>>
 	<br>@@.red;Error: attack value reported NaN@@
diff --git a/src/Mods/SecExp/rebellionReport.tw b/src/Mods/SecExp/rebellionReport.tw
index 47661795c5aa89473c34174eeab5eba78da79bd0..d6977359a9802640750bdd68027c7636ee5d028a 100644
--- a/src/Mods/SecExp/rebellionReport.tw
+++ b/src/Mods/SecExp/rebellionReport.tw
@@ -603,26 +603,21 @@
 			<<set _woundChance *= random(2,4)>>
 			<<if random(1,100) <= _woundChance>>
 				Your Concubine was unfortunately caught in the crossfire and
-				<<set $woundType = random(1,10)>>
-				<<if $woundType == 1>>
+				<<set _woundType = App.SecExp.inflictBattleWound(getSlave($Concubine.ID))>>
+				<<if _woundType == "voice">>
 					a splinter pierced $his throat, severing $his vocal cords.
-					<<set $Concubine.voice = 0>>
-				<<elseif $woundType == 2>>
+				<<elseif _woundType == "eyes">>
 					a splinter hit $his face, severely damaging $his eyes.
-					<<run eyeSurgery($Concubine, "both", "blind")>>
-				<<elseif $woundType == 3>>
-					an explosion near $him caused the loss of all $his limbs.
-					<<run removeLimbs($Concubine, "all")>>
-				<<elseif $woundType >= 4>>
+				<<elseif _woundType == "legs">>
+					an explosion near $him caused the loss of both of $his legs.
+				<<elseif _woundType == "arm">>
+					an explosion near $him caused the loss of one of $his arms.
+				<<elseif _woundType == "flesh">>
 					a stray shot severely wounded $him.
-					<<if $Concubine.health.health >= -60>>
-						<<run healthDamage($Concubine, 30)>>
-					<<else>>
-						<<run healthDamage($Concubine, -90 - $Concubine.health.health)>>
-					<</if>>
 				<</if>>
 			<</if>>
 		<</if>>
+		<<setLocalPronouns $Bodyguard>>
 		<<set _woundChance = 0>>
 		<<if $Bodyguard.skill.combat == 1>>
 			<<set _woundChance -= 2>>
@@ -664,23 +659,17 @@
 		<<set _woundChance *= random(2,4)>>
 		<<if random(1,100) <= _woundChance>>
 			During one of the assaults your Bodyguard was hit.
-			<<set $woundType = random(1,10)>>
-			<<if $woundType == 1>>
-				A splinter pierced _his2 throat, severing _his2 vocal cords.
-				<<set $Bodyguard.voice = 0>>
-			<<elseif $woundType == 2>>
-				A splinter hit _his2 face, severely damaging _his2 eyes.
-				<<run eyeSurgery($Bodyguard, "both", "blind")>>
-			<<elseif $woundType == 3>>
-				An explosion near _him2 caused the loss of all _his2 limbs.
-				<<run removeLimbs($Bodyguard, "all")>>
-			<<elseif $woundType >= 4>>
-				A stray shot severely wounded _him2.
-				<<if $Bodyguard.health.health >= -60>>
-					<<run healthDamage($Bodyguard, 30)>>
-				<<else>>
-					<<run healthDamage($Bodyguard, $Bodyguard.health.health + 90)>>
-				<</if>>
+			<<set _woundType = App.SecExp.inflictBattleWound(getSlave($Bodyguard.ID))>>
+			<<if _woundType == "voice">>
+				A splinter pierced $his throat, severing $his vocal cords.
+			<<elseif _woundType == "eyes">>
+				A splinter hit $his face, severely damaging $his eyes.
+			<<elseif _woundType == "legs">>
+				An explosion near $him caused the loss of both of $his legs.
+			<<elseif _woundType == "arm">>
+				An explosion near $him caused the loss of one of $his arms.
+			<<elseif _woundType == "flesh">>
+				A stray shot severely wounded $him.
 			<</if>>
 		<</if>>
 		The damage to the structure will be @@.red;costly to repair.@@
@@ -772,23 +761,17 @@
 			<<set _woundChance *= random(2,4)>>
 			<<if random(1,100) <= _woundChance>>
 				Your Concubine was unfortunately caught in the crossfire and
-				<<set $woundType = random(1,10)>>
-				<<if $woundType == 1>>
+				<<set _woundType = App.SecExp.inflictBattleWound(getSlave($Concubine.ID))>>
+				<<if _woundType == "voice">>
 					a splinter pierced $his throat, severing $his vocal cords.
-					<<set $Concubine.voice = 0>>
-				<<elseif $woundType == 2>>
+				<<elseif _woundType == "eyes">>
 					a splinter hit $his face, severely damaging $his eyes.
-					<<run eyeSurgery($Concubine, "both", "blind")>>
-				<<elseif $woundType == 3>>
-					an explosion near $him caused the loss of all $his limbs.
-					<<run removeLimbs($Concubine, "all")>>
-				<<elseif $woundType >= 4>>
+				<<elseif _woundType == "legs">>
+					an explosion near $him caused the loss of both of $his legs.
+				<<elseif _woundType == "arm">>
+					an explosion near $him caused the loss of one of $his arms.
+				<<elseif _woundType == "flesh">>
 					a stray shot severely wounded $him.
-					<<if $Concubine.health.health >= -60>>
-						<<run healthDamage($Concubine, 30)>>
-					<<else>>
-						<<run healthDamage($Concubine, $Concubine.health.health + 90)>>
-					<</if>>
 				<</if>>
 			<</if>>
 		<</if>>
@@ -881,23 +864,17 @@
 			<<set _woundChance *= random(2,4)>>
 			<<if random(1,100) <= _woundChance>>
 				Your Concubine was unfortunately caught in the crossfire and
-				<<set $woundType = random(1,10)>>
-				<<if $woundType == 1>>
+				<<set _woundType = App.SecExp.inflictBattleWound(getSlave($Concubine.ID))>>
+				<<if _woundType == "voice">>
 					a splinter pierced $his throat, severing $his vocal cords.
-					<<set $Concubine.voice = 0>>
-				<<elseif $woundType == 2>>
+				<<elseif _woundType == "eyes">>
 					a splinter hit $his face, severely damaging $his eyes.
-					<<run eyeSurgery($Concubine, "both", "blind")>>
-				<<elseif $woundType == 3>>
-					an explosion near $him caused the loss of all $his limbs.
-					<<run removeLimbs($Concubine, "all")>>
-				<<elseif $woundType >= 4>>
+				<<elseif _woundType == "legs">>
+					an explosion near $him caused the loss of both of $his legs.
+				<<elseif _woundType == "arm">>
+					an explosion near $him caused the loss of one of $his arms.
+				<<elseif _woundType == "flesh">>
 					a stray shot severely wounded $him.
-					<<if $Concubine.health.health >= -60>>
-						<<run healthDamage($Concubine, 30)>>
-					<<else>>
-						<<run healthDamage($Concubine, -90 - $Concubine.health.health)>>
-					<</if>>
 				<</if>>
 			<</if>>
 		<</if>>
diff --git a/src/Mods/SecExp/unitsRebellionReport.tw b/src/Mods/SecExp/unitsRebellionReport.tw
index 4611aabeacb2a5a904ffb8e5baa808866fa27a30..0b897d8b3418b3def6d2825d614c6c78ee59dfad 100644
--- a/src/Mods/SecExp/unitsRebellionReport.tw
+++ b/src/Mods/SecExp/unitsRebellionReport.tw
@@ -46,200 +46,6 @@
 		<</for>>
 		participated in the battle without taking any casualties. They remained loyal until the end.
 	<</if>>
-	<<if $rebellingID.length > 0 && $battleResult != -1>>
-		<br>
-		<br>
-		/* militia */
-		<<set _militiaRebelledID = []>>
-		<<set _militiaManpower = 0>>
-		<<for _j = 0; _j < $militiaUnits.length; _j++>>
-			<<if $militiaUnits[_j].active == 1 && $rebellingID.includes($militiaUnits[_j].ID)>>
-				$militiaUnits[_j].platoonName,
-				<<set _militiaRebelledID.push($militiaUnits[_j].ID)>>
-				<<set _militiaManpower += Math.clamp($militiaUnits[_j].troops - random(_averageLosses),0,$militiaUnits[_j].troops)>>
-			<</if>>
-		<</for>>
-		<<if _militiaRebelledID.length > 0>>
-			had the gall to betray you and join your enemies.
-			<span id="militiaResult">
-				<br><<link "Dissolve the units">>
-					<<run removeUnits(_militiaRebelledID)>>
-					<<set $militiaFreeManpower += _militiaManpower>>
-					<<for _i = 0; _i < $militiaUnits.length; _i++>>
-						<<if $militiaUnits[_i].active == 1>>
-							<<set $militiaUnits[_i].loyalty = Math.clamp($militiaUnits[_i].loyalty - random(10,40),0,100)>>
-						<</if>>
-					<</for>>
-					<<replace "#militiaResult">>
-						<br>Units dissolved.
-					<</replace>>
-				<</link>>
-				<br>//Manpower will be refunded, but will negatively influence the loyalty of the other units//
-				<br><<link "Purge the dissidents and dissolve the units">>
-					<<run removeUnits(_militiaRebelledID)>>
-					<<set $militiaFreeManpower += _militiaManpower * 0.5>>
-					<<replace "#militiaResult">>
-						<br>Dissidents purged and units dissolved.
-					<</replace>>
-				<</link>>
-				<br>//Will not influence the loyalty of the other units, but only half the manpower will be refunded.//
-				<br><<link "Execute them all">>
-					<<run removeUnits(_militiaRebelledID)>>
-					<<for _i = 0; _i < $militiaUnits.length; _i++>>
-						<<if $militiaUnits[_i].active == 1>>
-							<<set $militiaUnits[_i].loyalty = Math.clamp($militiaUnits[_i].loyalty + random(10,40),0,100)>>
-						<</if>>
-					<</for>>
-					<<replace "#militiaResult">>
-						<br>Units executed. Dissent will not be tolerated.
-					<</replace>>
-				<</link>>
-				<br>//Will positively influence the loyalty of the other units, but no manpower will be refunded.//
-			</span>
-		<</if>>
-
-		/* slaves */
-		<<set _slaveRebelledID = []>>
-		<<set _slaveManpower = 0>>
-		<br><br>
-		<<for _j = 0; _j < $slaveUnits.length; _j++>>
-			<<if $slaveUnits[_j].active == 1 && $rebellingID.includes($slaveUnits[_j].ID)>>
-				$slaveUnits[_j].platoonName,
-				<<set _slaveRebelledID.push($slaveUnits[_j].ID)>>
-				<<set _slaveManpower += Math.clamp($slaveUnits[_j].troops - random(_averageLosses),0,$slaveUnits[_j].troops)>>
-			<</if>>
-		<</for>>
-		<<if _slaveRebelledID.length > 0>>
-			decided in their blind arrogance to betray you.
-			<span id="slaveResult">
-				<br><<link "Dissolve the units">>
-					<<run removeUnits(_slaveRebelledID)>>
-					<<set $menials += _slaveManpower>>
-					<<for _i = 0; _i < $slaveUnits.length; _i++>>
-						<<if $slaveUnits[_i].active == 1>>
-							<<set $slaveUnits[_i].loyalty = Math.clamp($slaveUnits[_i].loyalty - random(10,40),0,100)>>
-						<</if>>
-					<</for>>
-					<<replace "#slaveResult">>
-						<br>Units dissolved.
-					<</replace>>
-				<</link>>
-				<br>//Manpower will be refunded, but will negatively influence the loyalty of the other units//
-				<br><<link "Purge the dissidents and dissolve the units">>
-					<<run removeUnits(_slaveRebelledID)>>
-					<<set $menials += _slaveManpower * 0.5>>
-					<<replace "#slaveResult">>
-						<br>Dissidents purged and units dissolved.
-					<</replace>>
-				<</link>>
-				<br>//Will not influence the loyalty of the other units, but only half the manpower will be refunded.//
-				<br><<link "Execute them all">>
-					<<run removeUnits(_slaveRebelledID)>>
-					<<for _i = 0; _i < $slaveUnits.length; _i++>>
-						<<if $slaveUnits[_i].active == 1>>
-							<<set $slaveUnits[_i].loyalty = Math.clamp($slaveUnits[_i].loyalty + random(10,40),0,100)>>
-						<</if>>
-					<</for>>
-					<<replace "#slaveResult">>
-						<br>Units executed. Dissent will not be tolerated.
-					<</replace>>
-				<</link>>
-				<br>//Will positively influence the loyalty of the other units, but no manpower will be refunded.//
-			</span>
-		<</if>>
-
-		/* mercs */
-		<<set _mercRebelledID = []>>
-		<<set _mercManpower = 0>>
-		<br><br>
-		<<for _j = 0; _j < $mercUnits.length; _j++>>
-			<<if $mercUnits[_j].active == 1 && $rebellingID.includes($mercUnits[_j].ID)>>
-				$mercUnits[_j].platoonName,
-				<<set _mercRebelledID.push($mercUnits[_j].ID)>>
-				<<set _mercManpower += Math.clamp($mercUnits[_j].troops - random(_averageLosses),0,$mercUnits[_j].troops)>>
-			<</if>>
-		<</for>>
-		<<if _mercRebelledID.length > 0>>
-			made the grave mistake of betraying you.
-			<span id="mercResult">
-				<br><<link "Dissolve the units">>
-					<<run removeUnits(_mercRebelledID)>>
-					<<set $mercFreeManpower += _mercManpower>>
-					<<for _i = 0; _i < $mercUnits.length; _i++>>
-						<<if $mercUnits[_i].active == 1>>
-							<<set $mercUnits[_i].loyalty = Math.clamp($mercUnits[_i].loyalty - random(10,40),0,100)>>
-						<</if>>
-					<</for>>
-					<<replace "#mercResult">>
-						<br>Units dissolved.
-					<</replace>>
-				<</link>>
-				<br>//Manpower will be refunded, but will negatively influence the loyalty of the other units//
-				<br><<link "Purge the dissidents and dissolve the units">>
-					<<run removeUnits(_mercRebelledID)>>
-					<<set $mercFreeManpower += _mercManpower * 0.5>>
-					<<replace "#mercResult">>
-						<br>Dissidents purged and units dissolved.
-					<</replace>>
-				<</link>>
-				<br>//Will not influence the loyalty of the other units, but only half the manpower will be refunded.//
-				<br><<link "Execute them all">>
-					<<run removeUnits(_mercRebelledID)>>
-					<<for _i = 0; _i < $mercUnits.length; _i++>>
-						<<if $mercUnits[_i].active == 1>>
-							<<set $mercUnits[_i].loyalty = Math.clamp($mercUnits[_i].loyalty + random(10,40),0,100)>>
-						<</if>>
-					<</for>>
-					<<replace "#mercResult">>
-						<br>Units executed. Dissent will not be tolerated.
-					<</replace>>
-				<</link>>
-				<br>//Will positively influence the loyalty of the other units, but no manpower will be refunded.//
-			</span>
-		<</if>>
-	<<elseif $rebellingID.length > 0>>
-		<<set _militiaRebelledID = []>>
-		<<for _j = 0; _j < $militiaUnits.length; _j++>>
-			<<if $militiaUnits[_j].active == 1 && $rebellingID.includes($militiaUnits[_j].ID)>>
-				<<set _militiaRebelledID.push($militiaUnits[_j].ID)>>
-				$militiaUnits[_j].platoonName,
-			<</if>>
-		<</for>>
-		<<if _militiaRebelledID.length > 0>>
-			had the gall to betray you and join your enemies. They participated in the looting following the rebellion, then vanished in the wastes.
-		<</if>>
-		<<run cashX(forceNeg(1000 * _militiaRebelledID.length), "war")>>
-		<br>
-		<<run removeUnits(_militiaRebelledID)>>
-		<<set _slaveRebelledID = []>>
-		<<for _j = 0; _j < $slaveUnits.length; _j++>>
-			<<if $slaveUnits[_j].active == 1 && $rebellingID.includes($slaveUnits[_j].ID)>>
-				<<set _slaveRebelledID.push($slaveUnits[_j].ID)>>
-				$slaveUnits[_j].platoonName,
-			<</if>>
-		<</for>>
-		<<if _slaveRebelledID.length > 0>>
-			decided in their blind arrogance to betray you. They participated in the looting following the rebellion, then vanished in the wastes.
-		<</if>>
-		<<run cashX(forceNeg(1000 * _slaveRebelledID.length), "war")>>
-		<<run removeUnits(_slaveRebelledID)>>
-		<br>
-		<<set _mercRebelledID = []>>
-		<<set _count = 0>>
-		<<for _j = 0; _j < $mercUnits.length; _j++>>
-			<<if $mercUnits[_j].active == 1 && $rebellingID.includes($mercUnits[_j].ID)>>
-				<<set _mercRebelledID.push($mercUnits[_j].ID)>>
-				<<set _count++>>
-				$mercUnits[_j].platoonName,
-			<</if>>
-		<</for>>
-		<<if _mercRebelledID.length > 0>>
-			made the grave mistake of betraying you. They participated in the looting following the rebellion, then vanished in the wastes.
-		<</if>>
-		<<run cashX(forceNeg(1000 * _mercRebelledID.length), "war")>>
-		<<run removeUnits(_mercRebelledID)>>
-	<</if>>
-
 <<elseif $losses > 0>>
 	/* if the losses are more than zero */
 	/* generates a list of randomized losses, from which each unit picks one at random */
@@ -493,201 +299,202 @@
 			<</if>>
 		<</for>>
 	<</if>>
+<<else>>
+	<br>@@.red;Error: losses are a negative number or NaN@@
+<</if>>
+
+<<if $rebellingID.length > 0 && $battleResult >= 2>>
+	/* rebellion win */
 	<br><br>
-	<<if $rebellingID.length > 0 && $battleResult >= 2>>
-		/* win */
-		/* militia */
-		<<set _militiaRebelledID = []>>
-		<<set _militiaManpower = 0>>
-		<<for _j = 0; _j < $militiaUnits.length; _j++>>
-			<<if $militiaUnits[_j].active == 1 && $rebellingID.includes($militiaUnits[_j].ID)>>
-				$militiaUnits[_j].platoonName,
-				<<set _militiaRebelledID.push($militiaUnits[_j].ID)>>
-				<<set _militiaManpower += Math.clamp($militiaUnits[_j].troops - random(_averageLosses),0,$militiaUnits[_j].troops)>>
-			<</if>>
-		<</for>>
-		<<if _militiaRebelledID.length > 0>>
-			had the gall to betray you and join your enemies.
-			<span id="militiaResult">
-				<br><<link "Dissolve the units">>
-					<<run removeUnits(_militiaRebelledID)>>
-					<<set $militiaFreeManpower += _militiaManpower>>
-					<<for _i = 0; _i < $militiaUnits.length; _i++>>
-						<<if $militiaUnits[_i].active == 1>>
-							<<set $militiaUnits[_i].loyalty = Math.clamp($militiaUnits[_i].loyalty - random(10,40),0,100)>>
-						<</if>>
-					<</for>>
-					<<replace "#militiaResult">>
-						<br>Units dissolved.
-					<</replace>>
-				<</link>>
-				<br>//Manpower will be refunded, but will negatively influence the loyalty of the other units//
-				<br><<link "Purge the dissidents and dissolve the units">>
-					<<run removeUnits(_militiaRebelledID)>>
-					<<set $militiaFreeManpower += _militiaManpower * 0.5>>
-					<<replace "#militiaResult">>
-						<br>Dissidents purged and units dissolved.
-					<</replace>>
-				<</link>>
-				<br>//Will not influence the loyalty of the other units, but only half the manpower will be refunded.//
-				<br><<link "Execute them all">>
-					<<run removeUnits(_militiaRebelledID)>>
-					<<for _i = 0; _i < $militiaUnits.length; _i++>>
-						<<if $militiaUnits[_i].active == 1>>
-							<<set $militiaUnits[_i].loyalty = Math.clamp($militiaUnits[_i].loyalty + random(10,40),0,100)>>
-						<</if>>
-					<</for>>
-					<<replace "#militiaResult">>
-						<br>Units executed. Dissent will not be tolerated.
-					<</replace>>
-				<</link>>
-				<br>//Will positively influence the loyalty of the other units, but no manpower will be refunded.//
-			</span>
+	/* militia */
+	<<set _militiaRebelledID = []>>
+	<<set _militiaManpower = 0>>
+	<<for _j = 0; _j < $militiaUnits.length; _j++>>
+		<<if $militiaUnits[_j].active == 1 && $rebellingID.includes($militiaUnits[_j].ID)>>
+			$militiaUnits[_j].platoonName,
+			<<set _militiaRebelledID.push($militiaUnits[_j].ID)>>
+			<<set _militiaManpower += Math.clamp($militiaUnits[_j].troops - random(_averageLosses),0,$militiaUnits[_j].troops)>>
 		<</if>>
+	<</for>>
+	<<if _militiaRebelledID.length > 0>>
+		had the gall to betray you and join your enemies.
+		<span id="militiaResult">
+			<br><<link "Dissolve the units">>
+				<<run $militiaUnits.deleteWith((u) => _militiaRebelledID.includes(u.ID))>>
+				<<set $militiaFreeManpower += _militiaManpower>>
+				<<for _i = 0; _i < $militiaUnits.length; _i++>>
+					<<if $militiaUnits[_i].active == 1>>
+						<<set $militiaUnits[_i].loyalty = Math.clamp($militiaUnits[_i].loyalty - random(10,40),0,100)>>
+					<</if>>
+				<</for>>
+				<<replace "#militiaResult">>
+					<br>Units dissolved.
+				<</replace>>
+			<</link>>
+			<br>//Manpower will be refunded, but will negatively influence the loyalty of the other units//
+			<br><<link "Purge the dissidents and dissolve the units">>
+				<<run $militiaUnits.deleteWith((u) => _militiaRebelledID.includes(u.ID))>>
+				<<set $militiaFreeManpower += _militiaManpower * 0.5>>
+				<<replace "#militiaResult">>
+					<br>Dissidents purged and units dissolved.
+				<</replace>>
+			<</link>>
+			<br>//Will not influence the loyalty of the other units, but only half the manpower will be refunded.//
+			<br><<link "Execute them all">>
+				<<run $militiaUnits.deleteWith((u) => _militiaRebelledID.includes(u.ID))>>
+				<<for _i = 0; _i < $militiaUnits.length; _i++>>
+					<<if $militiaUnits[_i].active == 1>>
+						<<set $militiaUnits[_i].loyalty = Math.clamp($militiaUnits[_i].loyalty + random(10,40),0,100)>>
+					<</if>>
+				<</for>>
+				<<replace "#militiaResult">>
+					<br>Units executed. Dissent will not be tolerated.
+				<</replace>>
+			<</link>>
+			<br>//Will positively influence the loyalty of the other units, but no manpower will be refunded.//
+		</span>
+	<</if>>
 
-		/* slaves */
-		<<set _slaveRebelledID = []>>
-		<<set _slaveManpower = 0>>
-		<br>
-		<<for _j = 0; _j < $slaveUnits.length; _j++>>
-			<<if $slaveUnits[_j].active == 1 && $rebellingID.includes($slaveUnits[_j].ID)>>
-				$slaveUnits[_j].platoonName,
-				<<set _slaveRebelledID.push($slaveUnits[_j].ID)>>
-				<<set _slaveManpower += Math.clamp($slaveUnits[_j].troops - random(_averageLosses),0,$slaveUnits[_j].troops)>>
-			<</if>>
-		<</for>>
-		<<if _slaveRebelledID.length > 0>>
-			decided in their blind arrogance to betray you.
-			<span id="slaveResult">
-				<br><<link "Dissolve the units">>
-					<<run removeUnits(_slaveRebelledID)>>
-					<<set $menials += _slaveManpower>>
-					<<for _i = 0; _i < $militiaUnits.length; _i++>>
-						<<if $slaveUnits[_i].active == 1>>
-							<<set $slaveUnits[_i].loyalty = Math.clamp($slaveUnits[_i].loyalty - random(10,40),0,100)>>
-						<</if>>
-					<</for>>
-					<<replace "#slaveResult">>
-						<br>Units dissolved.
-					<</replace>>
-				<</link>>
-				<br>//Manpower will be refunded, but will negatively influence the loyalty of the other units//
-				<br><<link "Purge the dissidents and dissolve the units">>
-					<<run removeUnits(_slaveRebelledID)>>
-					<<set $menials += _slaveManpower * 0.5>>
-					<<replace "#slaveResult">>
-						<br>Dissidents purged and units dissolved.
-					<</replace>>
-				<</link>>
-				<br>//Will not influence the loyalty of the other units, but only half the manpower will be refunded.//
-				<br><<link "Execute them all">>
-					<<run removeUnits(_slaveRebelledID)>>
-					<<for _i = 0; _i < $slaveUnits.length; _i++>>
-						<<if $slaveUnits[_i].active == 1>>
-							<<set $slaveUnits[_i].loyalty = Math.clamp($slaveUnits[_i].loyalty + random(10,40),0,100)>>
-						<</if>>
-					<</for>>
-					<<replace "#slaveResult">>
-						<br>Units executed. Dissent will not be tolerated.
-					<</replace>>
-				<</link>>
-				<br>//Will positively influence the loyalty of the other units, but no manpower will be refunded.//
-			</span>
+	/* slaves */
+	<<set _slaveRebelledID = []>>
+	<<set _slaveManpower = 0>>
+	<br>
+	<<for _j = 0; _j < $slaveUnits.length; _j++>>
+		<<if $slaveUnits[_j].active == 1 && $rebellingID.includes($slaveUnits[_j].ID)>>
+			$slaveUnits[_j].platoonName,
+			<<set _slaveRebelledID.push($slaveUnits[_j].ID)>>
+			<<set _slaveManpower += Math.clamp($slaveUnits[_j].troops - random(_averageLosses),0,$slaveUnits[_j].troops)>>
 		<</if>>
+	<</for>>
+	<<if _slaveRebelledID.length > 0>>
+		decided in their blind arrogance to betray you.
+		<span id="slaveResult">
+			<br><<link "Dissolve the units">>
+				<<run $slaveUnits.deleteWith((u) => _slaveRebelledID.includes(u.ID))>>
+				<<set $menials += _slaveManpower>>
+				<<for _i = 0; _i < $militiaUnits.length; _i++>>
+					<<if $slaveUnits[_i].active == 1>>
+						<<set $slaveUnits[_i].loyalty = Math.clamp($slaveUnits[_i].loyalty - random(10,40),0,100)>>
+					<</if>>
+				<</for>>
+				<<replace "#slaveResult">>
+					<br>Units dissolved.
+				<</replace>>
+			<</link>>
+			<br>//Manpower will be refunded, but will negatively influence the loyalty of the other units//
+			<br><<link "Purge the dissidents and dissolve the units">>
+				<<run $slaveUnits.deleteWith((u) => _slaveRebelledID.includes(u.ID))>>
+				<<set $menials += _slaveManpower * 0.5>>
+				<<replace "#slaveResult">>
+					<br>Dissidents purged and units dissolved.
+				<</replace>>
+			<</link>>
+			<br>//Will not influence the loyalty of the other units, but only half the manpower will be refunded.//
+			<br><<link "Execute them all">>
+				<<run $slaveUnits.deleteWith((u) => _slaveRebelledID.includes(u.ID))>>
+				<<for _i = 0; _i < $slaveUnits.length; _i++>>
+					<<if $slaveUnits[_i].active == 1>>
+						<<set $slaveUnits[_i].loyalty = Math.clamp($slaveUnits[_i].loyalty + random(10,40),0,100)>>
+					<</if>>
+				<</for>>
+				<<replace "#slaveResult">>
+					<br>Units executed. Dissent will not be tolerated.
+				<</replace>>
+			<</link>>
+			<br>//Will positively influence the loyalty of the other units, but no manpower will be refunded.//
+		</span>
+	<</if>>
 
-		/* mercs */
-		<<set _mercRebelledID = []>>
-		<<set _mercManpower = 0>>
-		<br>
-		<<for _j = 0; _j < $mercUnits.length; _j++>>
-			<<if $mercUnits[_j].active == 1 && $rebellingID.includes($mercUnits[_j].ID)>>
-				$mercUnits[_j].platoonName,
-				<<set _mercRebelledID.push($mercUnits[_j].ID)>>
-				<<set _mercManpower += Math.clamp($mercUnits[_j].troops - random(_averageLosses),0,$mercUnits[_j].troops)>>
-			<</if>>
-		<</for>>
-		<<if _mercRebelledID.length > 0>>
-			made the grave mistake of betraying you.
-			<span id="mercResult">
-				<br><<link "Dissolve the units">>
-					<<run removeUnits(_mercRebelledID)>>
-					<<set $mercFreeManpower += _mercManpower>>
-					<<for _i = 0; _i < $militiaUnits.length; _i++>>
-						<<if $mercUnits[_i].active == 1>>
-							<<set $mercUnits[_i].loyalty = Math.clamp($mercUnits[_i].loyalty - random(10,40),0,100)>>
-						<</if>>
-					<</for>>
-					<<replace "#mercResult">>
-						<br>Units dissolved.
-					<</replace>>
-				<</link>>
-				<br>//Manpower will be refunded, but will negatively influence the loyalty of the other units//
-				<br><<link "Purge the dissidents and dissolve the units">>
-					<<run removeUnits(_mercRebelledID)>>
-					<<set $mercFreeManpower += _mercManpower * 0.5>>
-					<<replace "#mercResult">>
-						<br>Dissidents purged and units dissolved.
-					<</replace>>
-				<</link>>
-				<br>//Will not influence the loyalty of the other units, but only half the manpower will be refunded.//
-				<br><<link "Execute them all">>
-					<<run removeUnits(_mercRebelledID)>>
-					<<for _i = 0; _i < $mercUnits.length; _i++>>
-						<<if $mercUnits[_i].active == 1>>
-							<<set $mercUnits[_i].loyalty = Math.clamp($mercUnits[_i].loyalty + random(10,40),0,100)>>
-						<</if>>
-					<</for>>
-					<<replace "#mercResult">>
-						<br>Units executed. Dissent will not be tolerated.
-					<</replace>>
-				<</link>>
-				<br>//Will positively influence the loyalty of the other units, but no manpower will be refunded.//
-			</span>
+	/* mercs */
+	<<set _mercRebelledID = []>>
+	<<set _mercManpower = 0>>
+	<br>
+	<<for _j = 0; _j < $mercUnits.length; _j++>>
+		<<if $mercUnits[_j].active == 1 && $rebellingID.includes($mercUnits[_j].ID)>>
+			$mercUnits[_j].platoonName,
+			<<set _mercRebelledID.push($mercUnits[_j].ID)>>
+			<<set _mercManpower += Math.clamp($mercUnits[_j].troops - random(_averageLosses),0,$mercUnits[_j].troops)>>
 		<</if>>
-
-	/* loss */
-	<<elseif $rebellingID.length > 0>>
-		<<set _militiaRebelledID = []>>
-		<<for _j = 0; _j < $militiaUnits.length; _j++>>
-			<<if $militiaUnits[_j].active == 1 && $rebellingID.includes($militiaUnits[_j].ID)>>
-				<<set _militiaRebelledID.push($militiaUnits[_j].ID)>>
-				$militiaUnits[_j].platoonName,
-			<</if>>
-		<</for>>
-		<<if _militiaRebelledID.length > 0>>
-			had the gall to betray you and join your enemies. They participated in the looting following the battle, then vanished in the wastes.
+	<</for>>
+	<<if _mercRebelledID.length > 0>>
+		made the grave mistake of betraying you.
+		<span id="mercResult">
+			<br><<link "Dissolve the units">>
+				<<run $mercUnits.deleteWith((u) => _mercRebelledID.includes(u.ID))>>
+				<<set $mercFreeManpower += _mercManpower>>
+				<<for _i = 0; _i < $militiaUnits.length; _i++>>
+					<<if $mercUnits[_i].active == 1>>
+						<<set $mercUnits[_i].loyalty = Math.clamp($mercUnits[_i].loyalty - random(10,40),0,100)>>
+					<</if>>
+				<</for>>
+				<<replace "#mercResult">>
+					<br>Units dissolved.
+				<</replace>>
+			<</link>>
+			<br>//Manpower will be refunded, but will negatively influence the loyalty of the other units//
+			<br><<link "Purge the dissidents and dissolve the units">>
+				<<run $mercUnits.deleteWith((u) => _mercRebelledID.includes(u.ID))>>
+				<<set $mercFreeManpower += _mercManpower * 0.5>>
+				<<replace "#mercResult">>
+					<br>Dissidents purged and units dissolved.
+				<</replace>>
+			<</link>>
+			<br>//Will not influence the loyalty of the other units, but only half the manpower will be refunded.//
+			<br><<link "Execute them all">>
+				<<run $mercUnits.deleteWith((u) => _mercRebelledID.includes(u.ID))>>
+				<<for _i = 0; _i < $mercUnits.length; _i++>>
+					<<if $mercUnits[_i].active == 1>>
+						<<set $mercUnits[_i].loyalty = Math.clamp($mercUnits[_i].loyalty + random(10,40),0,100)>>
+					<</if>>
+				<</for>>
+				<<replace "#mercResult">>
+					<br>Units executed. Dissent will not be tolerated.
+				<</replace>>
+			<</link>>
+			<br>//Will positively influence the loyalty of the other units, but no manpower will be refunded.//
+		</span>
+	<</if>>
+<<elseif $rebellingID.length > 0>>
+	/* rebellion loss */
+	<br><br>
+	<<set _militiaRebelledID = []>>
+	<<for _j = 0; _j < $militiaUnits.length; _j++>>
+		<<if $militiaUnits[_j].active == 1 && $rebellingID.includes($militiaUnits[_j].ID)>>
+			<<set _militiaRebelledID.push($militiaUnits[_j].ID)>>
+			$militiaUnits[_j].platoonName,
 		<</if>>
-		<<run cashX(forceNeg(1000 * _militiaRebelledID.length), "war")>>
-		<br>
-		<<run removeUnits(_militiaRebelledID)>>
-		<<set _slaveRebelledID = []>>
-		<<for _j = 0; _j < $slaveUnits.length; _j++>>
-			<<if $slaveUnits[_j].active == 1 && $rebellingID.includes($slaveUnits[_j].ID)>>
-				<<set _slaveRebelledID.push($slaveUnits[_j].ID)>>
-				$slaveUnits[_j].platoonName,
-			<</if>>
-		<</for>>
-		<<if _slaveRebelledID.length > 0>>
-			decided in their blind arrogance to betray you. They participated in the looting following the battle, then vanished in the wastes.
+	<</for>>
+	<<if _militiaRebelledID.length > 0>>
+		had the gall to betray you and join your enemies. They participated in the looting following the battle, then vanished in the wastes.
+	<</if>>
+	<<run cashX(forceNeg(1000 * _militiaRebelledID.length), "war")>>
+	<<run $militiaUnits.deleteWith((u) => _militiaRebelledID.includes(u.ID))>>
+	<br>
+	<<set _slaveRebelledID = []>>
+	<<for _j = 0; _j < $slaveUnits.length; _j++>>
+		<<if $slaveUnits[_j].active == 1 && $rebellingID.includes($slaveUnits[_j].ID)>>
+			<<set _slaveRebelledID.push($slaveUnits[_j].ID)>>
+			$slaveUnits[_j].platoonName,
 		<</if>>
-		<<run cashX(forceNeg(1000 * _slaveRebelledID.length), "war")>>
-		<<run removeUnits(_slaveRebelledID)>>
-		<br>
-		<<set _mercRebelledID = []>>
-		<<set _count = 0>>
-		<<for _j = 0; _j < $mercUnits.length; _j++>>
-			<<if $mercUnits[_j].active == 1 && $rebellingID.includes($mercUnits[_j].ID)>>
-				<<set _mercRebelledID.push($mercUnits[_j].ID)>>
-				<<set _count++>>
-				$mercUnits[_j].platoonName,
-			<</if>>
-		<</for>>
-		<<if _mercRebelledID.length > 0>>
-			made the grave mistake of betraying you. They participated in the looting following the battle, then vanished in the wastes.
+	<</for>>
+	<<if _slaveRebelledID.length > 0>>
+		decided in their blind arrogance to betray you. They participated in the looting following the battle, then vanished in the wastes.
+	<</if>>
+	<<run cashX(forceNeg(1000 * _slaveRebelledID.length), "war")>>
+	<<run $slaveUnits.deleteWith((u) => _slaveRebelledID.includes(u.ID))>>
+	<br>
+	<<set _mercRebelledID = []>>
+	<<set _count = 0>>
+	<<for _j = 0; _j < $mercUnits.length; _j++>>
+		<<if $mercUnits[_j].active == 1 && $rebellingID.includes($mercUnits[_j].ID)>>
+			<<set _mercRebelledID.push($mercUnits[_j].ID)>>
+			<<set _count++>>
+			$mercUnits[_j].platoonName,
 		<</if>>
-		<<run cashX(forceNeg(1000 * _mercRebelledID.length), "war")>>
-		<<run removeUnits(_mercRebelledID)>>
+	<</for>>
+	<<if _mercRebelledID.length > 0>>
+		made the grave mistake of betraying you. They participated in the looting following the battle, then vanished in the wastes.
 	<</if>>
-<<else>>
-	<br>@@.red;Error: losses are a negative number or NaN@@
+	<<run cashX(forceNeg(1000 * _mercRebelledID.length), "war")>>
+	<<run $mercUnits.deleteWith((u) => _mercRebelledID.includes(u.ID))>>
 <</if>>
diff --git a/src/Mods/SecExp/widgets/battleWidgets.js b/src/Mods/SecExp/widgets/battleWidgets.js
deleted file mode 100644
index 22789549aab0d7dccf8a7f340393877d15cfb71a..0000000000000000000000000000000000000000
--- a/src/Mods/SecExp/widgets/battleWidgets.js
+++ /dev/null
@@ -1,38 +0,0 @@
-globalThis.calcSFStatistics = function() {
-	let upgradesSum = V.SF.Squad.Armoury + V.SF.Squad.Drugs + (V.SF.Squad.AA+V.SF.Squad.TA < 1) + (V.SF.Squad.AV+V.SF.Squad.TV);
-	if (!Number.isInteger(upgradesSum)) {
-		upgradesSum = jsRandom(10, 15);
-	}
-
-	if (V.slaveRebellion !== 1 || V.citizenRebellion !== 1) {
-		/* atk, def */
-		V.SFatk = Math.trunc(0.65 * upgradesSum);
-		V.SFdef = Math.trunc(0.40 * upgradesSum);
-		/* hp */
-		V.carriableSoldiers = 125 * (V.SF.Squad.GunS + ((V.SF.Squad.AV + V.SF.Squad.TV)/2));
-		if (!Number.isInteger(V.carriableSoldiers)) {
-			V.carriableSoldiers = V.SF.ArmySize / 10;
-		}
-		if (V.SF.ArmySize > V.carriableSoldiers) {
-			V.SFhp = V.carriableSoldiers * App.SecExp.BaseSpecialForcesUnit.hp;
-		} else {
-			V.carriableSoldiers = V.SF.ArmySize;
-			V.SFhp = V.carriableSoldiers * App.SecExp.BaseSpecialForcesUnit.hp;
-		}
-	} else {
-		/* atk, def */
-		V.SFatk = Math.trunc(0.75 * upgradesSum);
-		V.SFdef = Math.trunc(0.50 * upgradesSum);
-		/* hp */
-		V.SFhp = V.SF.ArmySize * App.SecExp.BaseSpecialForcesUnit.hp;
-	}
-};
-
-/**
- * @param {Array<number>} rebellionIDs Array of unit IDs to be removed.
- */
-globalThis.removeUnits = function(rebellionIDs) {
-	V.militiaUnits = V.militiaUnits.filter(unit => !rebellionIDs.includes(unit.ID));
-	V.slaveUnits = V.slaveUnits.filter(unit => !rebellionIDs.includes(unit.ID));
-	V.mercUnits = V.mercUnits.filter(unit => !rebellionIDs.includes(unit.ID));
-};
diff --git a/src/events/RESS/retchingCum.js b/src/events/RESS/retchingCum.js
new file mode 100644
index 0000000000000000000000000000000000000000..b91252c2016b36ca0767640e017cfdcf58ee2c84
--- /dev/null
+++ b/src/events/RESS/retchingCum.js
@@ -0,0 +1,132 @@
+App.Events.RESSRetchingCum = class RESSRetchingCum extends App.Events.BaseEvent {
+	eventPrerequisites() {
+		return [];
+	}
+
+	actorPrerequisites() {
+		return [
+			[
+				s => s.fetish !== "mindbroken",
+				s => s.assignment !== "work as a servant",
+				hasAnyArms,
+				hasAnyLegs,
+				s => s.dietCum > 0,
+				s => s.devotion <= 20,
+				s => (s.fetish !== "cumslut" && s.fetish !== "masochist" && s.fetishStrength < 60) || s.fetishKnown === 0,
+			]
+		];
+	}
+
+	execute(node) {
+		/** @type {Array<App.Entity.SlaveState>} */
+		let [eventSlave] = this.actors.map(a => getSlave(a));
+		const {
+			He, he, His, his, hers, him, himself, girl
+		} = getPronouns(eventSlave);
+
+		V.nextLink = "Next Week";
+
+		App.Events.drawEventArt(node, eventSlave, "no clothing");
+
+		let t = [];
+		t.push(`You are inspecting the slave feeding area early in the week, watching your slaves as they come and go to get their required nourishment for the morning.`);
+		t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave));
+		if (V.cockFeeder === 1) {
+			t.push(`You see as ${he} kneels in front of the feeder`);
+			t.push(canSee(eventSlave) ? `phallus, staring at it with disgust plainly written on ${his} face.` : `phallus with a look of disgust on ${his} face.`);
+		} else if (canSee(eventSlave)) {
+			t.push(`You see ${him} staring into ${his} cup of nutritional fluid with a look of disgust on ${his} face.`);
+		} else {
+			t.push(`You see ${him} grimacing at ${his} cup of nutritional fluid.`);
+		}
+		t.push(`You quickly check your records and ${V.assistant.name} confirms that ${eventSlave.slaveName} is required to ingest`);
+		t.push(eventSlave.dietCum === 2 ? `an extreme diet based almost entirely on human ejaculate.` : `a large amount of human ejaculate as part of ${his} diet.`);
+		App.Events.addParagraph(node, t);
+
+		t = [];
+		t.push(`You watch ${eventSlave.slaveName} as ${he} retches unpleasantly,`);
+		t.push(V.cockFeeder === 1 ? `stimulating the feeder phallus with ${his} mouth` : `tentatively drinking from ${his} cup`);
+		t.push(`and choking ${his} food down. ${He} knows that if ${he} doesn't eat it willingly, ${he}'ll will be forced to, and you can almost see ${his}`);
+		t.push(eventSlave.intelligence + eventSlave.intelligenceImplant > 15 ? `intelligent mind` : `stupid mind`);
+		t.push(`working through the reality of what ${his} life has become. ${He} is now a receptacle for`);
+		if (eventSlave.dietCum === 2) {
+			t.push(`concentrated`);
+		}
+		t.push(`human ejaculate, and for no other reason than the perverse amusement of ${his} owner. Almost as soon as ${he} swallows ${his} food, ${he} whimpers, burps, and then`);
+		t.push(eventSlave.belly >= 10000 ? `hastily waddles` : `quickly runs`);
+		t.push(`to a nearby bathroom to vomit it back up. This is a common reaction for unbroken slaves on cum diets,`);
+		t.push(eventSlave.weight > 0 ? `and can also be an effective, if unhealthy, way of forcing them to lose weight.` : `but it can also prevent slaves that are already too thin from gaining weight.`);
+
+		App.Events.addParagraph(node, t);
+		t = [];
+
+		App.Events.addResponses(node, [
+			new App.Events.Result(`Have mercy on the poor ${girl} and take ${him} off ${his} cum diet for now`, mercy),
+			(eventSlave.dietCum === 1)
+				? new App.Events.Result(`Force ${him} onto a heavy cum diet, and double up on ${his} ejaculate intake`, heavy)
+				: new App.Events.Result(),
+			(eventSlave.dietCum === 2)
+				? new App.Events.Result(`Give the poor ${girl} a break and reduce ${his} cum intake to a more modest level`, reduce)
+				: new App.Events.Result(),
+			new App.Events.Result(`Suppress ${his} gag reflex and double ${his} cum intake for a week`, double),
+			(V.arcade > 0)
+				? new App.Events.Result(`Sentence ${him} to a day in ${V.arcadeName} for cum injection therapy`, arcade)
+				: new App.Events.Result(),
+		]);
+
+		function mercy() {
+			eventSlave.devotion -= 5;
+			eventSlave.trust += 5;
+			eventSlave.dietCum = 0;
+			return [`You see how ${eventSlave.slaveName} is suffering and you decide to reconsider ${his} dietary prescription. You instruct ${V.assistant.name} to change ${eventSlave.slaveName}'s diet to exclude cum for now. Slaves who can't eat are unhealthy, and unhealthy slaves are unprofitable slaves. ${He} is now <span class="mediumorchid">more confident that ${he} can resist you and get ${his} way,</span> ${he} also <span class="mediumaquamarine">trusts you a little more</span> to look after ${his} well being.`];
+		}
+		function heavy() {
+			eventSlave.devotion -= 3;
+			eventSlave.trust -= 3;
+			eventSlave.dietCum = 2;
+			return [`You instruct ${V.assistant.name} to double down on ${eventSlave.slaveName}'s cum diet. Ungrateful little sluts who retch up their expensive food sometimes need tough love. Making ${his} cum-food thicker and more concentrated might help ${him} to learn that no matter how bad things seem, you can always make them worse. Initially ${his} new heavy cum diet makes no difference in ${his} ability to keep it down, but you tell ${him} to give it some time. Eventually ${he} will learn to appreciate cum as the primary ingredient in everything ${he} ingests. All of your future cumsluts do, sooner or later. ${His} pathetic tears reveal how <span class="gold">helpless ${he} feels,</span> but they don't hide the <span class="mediumorchid">streak of rebelliousness</span> that remains burning inside ${him}.`];
+		}
+
+		function reduce() {
+			eventSlave.devotion += 2;
+			eventSlave.trust += 2;
+			eventSlave.dietCum = 1;
+			return [`${eventSlave.slaveName} is on a very heavy cum diet, and it's possible you're forcing ${him} to take too much, too soon. You decide to give ${him} a break and instruct ${V.assistant.name} to reduce, but not eliminate the amount of cum in ${his} diet. Although it doesn't immediately make ${him} hate cum any less, <span class="hotpink">${he} appreciates your willingness</span> to make things a little less unpleasant for ${him}. <span class="mediumaquamarine">${He} is a little less afraid of you too,</span> although not as much as if you'd taken ${him} off ${his} cum diet altogether.`];
+		}
+
+		function double() {
+			t = [];
+			t.push(`${He} is already on a very heavy cum-based diet, and there's only so much ejaculate you can force a slut to ingest before it negatively affects ${his} health. However, as a temporary measure, you still have options. You instruct ${V.assistant.name} to re-double the amount of ejaculate in ${eventSlave.slaveName}'s diet for the week. You also have ${him} closely monitored and injected with anti-nausea drugs to help ${his} hold down ${his} food. Although the idea of being forced to eat large amounts of human reproductive fluid still disgusts ${him}, the week of having a super-concentrated cum-diet, along with the suppressed reflex to purge it has its effect. Knowing that you monitor and control every aspect of ${his} life <span class="hotpink">breaks down ${his} resistance to your will,</span> and by the end of the week, ${he} is grateful that you return ${him} to a more nutritionally viable regimen — even if its cum content is still overwhelmingly high.`);
+			if (eventSlave.fetishKnown === 1) {
+				t.push(`<span class="lightcoral">${His} brain has now begun to accept the sexual perversity of ${his} food as a turn on.</span>`);
+			} else {
+				t.push(`${He} is now able to eat and digest ${his} prescribed diet without pharmacological assistance.`);
+			}
+			eventSlave.devotion += 5;
+			eventSlave.fetish = "cumslut";
+			if (eventSlave.fetishKnown === 1) {
+				eventSlave.fetishStrength = 10;
+			}
+			return t;
+		}
+		function arcade() {
+			t = [];
+			t.push(`You have ${V.assistant.name} inform ${eventSlave.slaveName} of ${his} unacceptable behavior and sentence ${him} to a day in ${V.arcadeName}. ${He} cries and pleads for mercy, and even begs to be allowed to suck a cock, any cock, so ${he} can prove ${his} newfound enthusiasm for cum, but you are unmerciful as two other slaves drag ${him} off to serve ${his} sentence. ${He} is forced to wear`);
+			t.push(eventSlave.vagina !== -1 ? `a combined vaginal and` : `an`);
+			t.push(`anal chastity belt so that the only hole available is ${his} mouth, and is then confined in ${V.arcadeName} with ${his} mouth spread open by a ring gag and ${his} head sticking through the hole in the wall. A sign below ${his} mouth proclaims ${him} to be a "cum extraction tube" and ${he} is used that way for the duration of ${his} stay — a grueling, 18-hour marathon of relentless throat fucking.`);
+			if (eventSlave.sexualFlaw !== "hates oral") {
+				t.push(`${His} ordeal is so extreme that ${he} now <span class="red">hates oral sex</span>,`);
+			} else {
+				t.push(`${His} hatred of oral sex makes ${his} ordeal that much more horrific,`);
+			}
+			t.push(`but it <span class="hotpink">breaks down ${his} resistance.</span> ${He} now <span class="gold">better understands the terrifying power you have over ${him},</span> and the sheer amount of cum ${he} is forced to ingest <span class="red">negatively effects ${his} health.</span> Your other cum-fed slaves take note of what you do to those who can't hold down their assigned diet.`);
+			eventSlave.devotion += 5;
+			eventSlave.trust -= 5;
+			eventSlave.sexualFlaw = "hates oral";
+			eventSlave.fetish = "masochist";
+			seX(eventSlave, "oral", "public", "penetrative", 55);
+			healthDamage(eventSlave, 5);
+			return t;
+		}
+	}
+};
diff --git a/src/events/randomEvent.js b/src/events/randomEvent.js
index 1dac2d635a04143ca20224de1a6bd0db3705c78b..9638ea3f89f4a136063c4f83794b3b10fc75fbd6 100644
--- a/src/events/randomEvent.js
+++ b/src/events/randomEvent.js
@@ -17,6 +17,7 @@ App.Events.getIndividualEvents = function(slave) {
 		new App.Events.RESSMoistPussy(),
 		new App.Events.RESSWaistlineWoes(),
 		new App.Events.RESSAssFitting(),
+		new App.Events.RESSRetchingCum(),
 		new App.Events.RECIButthole(),
 		new App.Events.RECIFuta(),
 		new App.Events.RECIOrientation(),
diff --git a/src/facilities/statistics.js b/src/facilities/statistics.js
index 4343717cc4c14862f9368349b4da253ba61c1cda..4690d66e91ef59ebbc4d6f56cd9696a336838a46 100644
--- a/src/facilities/statistics.js
+++ b/src/facilities/statistics.js
@@ -207,7 +207,7 @@ App.Facilities.Brothel.Stats = (function() {
 		}
 
 		const b = V.facility.brothel;
-		for (const prop in assureList) {
+		for (const prop of assureList) {
 			b[prop] = b[prop] || 0;
 		}
 
@@ -307,7 +307,7 @@ App.Facilities.Club.Stats = (function() {
 		}
 
 		const b = V.facility.club;
-		for (const prop in assureList) {
+		for (const prop of assureList) {
 			b[prop] = b[prop] || 0;
 		}
 
@@ -388,7 +388,7 @@ App.Facilities.Arcade.Stats = (function() {
 		}
 
 		const b = V.facility.arcade;
-		for (const prop in assureList) {
+		for (const prop of assureList) {
 			b[prop] = b[prop] || 0;
 		}
 
@@ -454,7 +454,7 @@ App.Facilities.Dairy.Stats = (function() {
 		}
 
 		const b = V.facility.dairy;
-		for (const prop in assureList) {
+		for (const prop of assureList) {
 			b[prop] = b[prop] || 0;
 		}
 
@@ -519,7 +519,7 @@ App.Facilities.Farmyard.Stats = (function() {
 		}
 
 		const b = V.facility.farmyard;
-		for (const prop in assureList) {
+		for (const prop of assureList) {
 			b[prop] = b[prop] || 0;
 		}
 
diff --git a/src/js/SlaveState.js b/src/js/SlaveState.js
index 861d83d377ff43c9abf07ddc4d492a76b27fa10f..0313f4892c1647257af7136a5957860d5b24dfe2 100644
--- a/src/js/SlaveState.js
+++ b/src/js/SlaveState.js
@@ -2017,7 +2017,7 @@ App.Entity.SlaveState = class SlaveState {
 		/**
 		 * * "none"
 		 * * "arrogant": clings to her dignity, thinks slavery is beneath her
-		 * * "bitchy": can 't keep her opinions to herself
+		 * * "bitchy": can't keep her opinions to herself
 		 * * "odd": says and does odd things
 		 * * "hates men": hates men
 		 * * "hates women": hates women
diff --git a/src/js/eventSelectionJS.js b/src/js/eventSelectionJS.js
index 3f37fc6719b3560bc144754bd339dcd63ca8142a..5e49fe06d51835e3d85443db2093685565ebf45a 100644
--- a/src/js/eventSelectionJS.js
+++ b/src/js/eventSelectionJS.js
@@ -609,14 +609,6 @@ globalThis.generateRandomEventPoolStandard = function(eventSlave) {
 					}
 				}
 
-				if (eventSlave.dietCum > 0) {
-					if (eventSlave.devotion <= 20) {
-						if ((eventSlave.fetish !== "cumslut" && eventSlave.fetish !== "masochist" && eventSlave.fetishStrength < 60) || eventSlave.fetishKnown === 0) {
-							V.RESSevent.push("retching cum feeding");
-						}
-					}
-				}
-
 				if (V.arcologies[0].FSSubjugationist !== "unset") {
 					if (eventSlave.race !== V.arcologies[0].FSSubjugationistRace) {
 						if (V.week - eventSlave.weekAcquired > 1) {
diff --git a/src/uncategorized/RESS.tw b/src/uncategorized/RESS.tw
index 059afac606602f9d6558f6e67a7e529be232d395..ca8183cc968d6e5e5018d67ed5a280b5437fb53f 100644
--- a/src/uncategorized/RESS.tw
+++ b/src/uncategorized/RESS.tw
@@ -44,7 +44,7 @@
 <<set _clothesTemp = $activeSlave.clothes>>
 <<switch $RESSevent>>
 /*Some events start with the slave naked (any event that starts with the daily inspection, for example). Here we switch their clothing just for the image to load, then switch it back quickly so the player's choice is not messed up.*/
-<<case "age implant" "ara ara" "back stretch" "bad dream" "bed snuggle" "bondage gear" "bonded love" "breast expansion blues" "cockfeeder resistance" "confident tanning" "devoted educated slave" "devoted exhibition" "devoted lotion" "desperate null" "devoted nympho" "devoted shortstack" "devoted waist" "extreme aphrodisiacs" "fearful balls" "fucktoy tribbing" "gaped asshole" "happy dance" "heavy piercing" "huge naturals" "huge tits" "hugely pregnant" "ignorant horny" "im scared" "implant inspection" "kitchen molestation" "language lesson" "mindbroken morning" "modest clothes" "mods please" "obedient girlish" "obedient idiot" "old PC age difference" "orchiectomy please" "PA flirting" "penitent" "permitted masturbation" "plimb help" "rebellious arrogant" "resistant gelding" "resistant shower" "resting amp" "restricted profession" "restricted smart" "retching cum feeding" "sexy succubus" "shaped areolae" "shift masturbation" "shift sleep" "shower slip" "slave clit on slave" "slave dick huge" "slave dick on slave" "sleeping ambivalent" "sore shoulders" "spa boobs" "subjugation blues" "suppository resistance" "tendon fall" "terrified inspection" "tittymonster inspection" "torpedo squeeze" "transition anxiety" "trusting HG" "unhappy virgin" "used whore" "vocal disobedience" "young PC age difference">>
+<<case "age implant" "ara ara" "back stretch" "bad dream" "bed snuggle" "bondage gear" "bonded love" "breast expansion blues" "cockfeeder resistance" "confident tanning" "devoted educated slave" "devoted exhibition" "devoted lotion" "desperate null" "devoted nympho" "devoted shortstack" "devoted waist" "extreme aphrodisiacs" "fearful balls" "fucktoy tribbing" "gaped asshole" "happy dance" "heavy piercing" "huge naturals" "huge tits" "hugely pregnant" "ignorant horny" "im scared" "implant inspection" "kitchen molestation" "language lesson" "mindbroken morning" "modest clothes" "mods please" "obedient girlish" "obedient idiot" "old PC age difference" "orchiectomy please" "PA flirting" "penitent" "permitted masturbation" "plimb help" "rebellious arrogant" "resistant gelding" "resistant shower" "resting amp" "restricted profession" "restricted smart" "sexy succubus" "shaped areolae" "shift masturbation" "shift sleep" "shower slip" "slave clit on slave" "slave dick huge" "slave dick on slave" "sleeping ambivalent" "sore shoulders" "spa boobs" "subjugation blues" "suppository resistance" "tendon fall" "terrified inspection" "tittymonster inspection" "torpedo squeeze" "transition anxiety" "trusting HG" "unhappy virgin" "used whore" "vocal disobedience" "young PC age difference">>
 	<<set $activeSlave.clothes = "no clothing">>
 <<case "whore rebellious">>
 	/* this scene states they are wearing "thick, durable latex with temperature regulation and anchor points for restraint" no matter what they are assigned to wear. */
@@ -3386,12 +3386,6 @@ With $his
 <</if>>
 against the edge of the counter as $he leans forward a little to <<if $activeSlave.makeup != 0>>finish $his makeup<<else>>apply lotion to $his face<</if>>, $his $activeSlave.nipples nipples are <<if $activeSlave.boobs > 6000>>pressed against the mirror<<elseif $activeSlave.boobs > 4000>>almost brushing the mirror<<elseif $activeSlave.boobs > 2000>>halfway to the mirror<<else>>over the sink<</if>>. $He's concentrating on $his task, and every little motion of $his arm<<if hasBothArms($activeSlave)>>s<</if>> makes $his spectacularly pointed breasts sway a little.
 
-<<case "retching cum feeding">>
-
-You are inspecting the slave feeding area early in the week, watching your slaves as they come and go to get their required nourishment for the morning. You see <<= App.UI.slaveDescriptionDialog($activeSlave)>><<if $cockFeeder == 1>> as $he kneels in front of the feeder phallus with a look of disgust on $his face <<else>> as $he <<if canSee($activeSlave)>>stares into $his cup of nutritional fluid with a look of disgust on $his face<<else>>grimaces at $his cup of nutritional fluid<</if>>.<</if>> You quickly check your records and $assistant.name confirms that $activeSlave.slaveName is required to ingest<<if $activeSlave.dietCum == 2>> an extreme diet based almost entirely on human ejaculate.<<else>> a large amount of human ejaculate as part of $his diet.<</if>>
-<br><br>
-As you watch $activeSlave.slaveName unpleasantly retch as $he<<if $cockFeeder == 1>> stimulates the feeder phallus with $his mouth<<else>> tentatively drinks from $his cup<</if>> and chokes $his food down, knowing that if $he doesn't eat it willingly, $he will be forced to, you can almost see $his <<if $activeSlave.intelligence+$activeSlave.intelligenceImplant > 15>> intelligent mind <<else>> stupid mind<</if>> working through the reality of what $his life has become. $He is now a receptacle for <<if $activeSlave.dietCum == 2>> concentrated <</if>>human ejaculate, and for no other reason than the perverse amusement of $his owner. Almost as soon as $he swallows $his food, $he whimpers, burps, and then <<if $activeSlave.belly >= 10000>>hastily waddles<<else>>quickly runs<</if>> to a nearby bathroom to vomit it back up. This is a common reaction for unbroken slaves on cum diets,<<if $activeSlave.weight > 0>> and can also be an effective, if unhealthy, way of forcing them to lose weight.<<else>> but it can also prevent slaves that are already too thin from gaining weight.<</if>>
-
 <<case "subjugation blues">>
 
 It's been <<print $week-$activeSlave.weekAcquired>> week<<if $week-$activeSlave.weekAcquired > 1>>s<</if>> since you acquired <<= App.UI.slaveDescriptionDialog($activeSlave)>> as your slave. Since then $he has been nothing but trouble. $He has been ungrateful, rebellious and particularly hateful toward you since you acquired $him. $He often needs to be confined or forced to perform $his assignments, and has little regard for your power or authority. You bring $him in for inspection and $he whines and squirms in resistance as you feel up $his $activeSlave.nipples nipples<<if $activeSlave.belly >= 5000>>, rub $his _belly <<if $activeSlave.bellyPreg >= 3000>>pregnant <</if>>belly<<elseif $activeSlave.bellyPreg >= 150>>, feel the curve of $his new pregnancy<</if>>, and grope $his <<if $activeSlave.butt < 2>>narrow <<elseif $activeSlave.butt < 5>>average <<elseif $activeSlave.butt < 8>>plump <<else>>impressive <</if>>butt, coldly appraising $his potential worth as a sexual service provider. <<if $activeSlave.actualAge < 21>>$He is very young, only $activeSlave.actualAge years old, and is still very naïve. $His smooth, $activeSlave.skin skin has yet to experience the hard years of relentless sexual abuse that lie ahead of $him.<<else>>At $activeSlave.actualAge years old, $he should know by now how the world works, but some slaves are just too stubborn for their own good.<</if>> Eventually, of course, even the most headstrong <<print $girl>>s will bend to your will, but the unique social mores of your arcology and the wonders of modern surgical technology offer a prime opportunity to make a potent example of this <<if $activeSlave.actualAge < 21>>young <<else>>obstinate <</if>>slut. $He is $activeSlave.race, and therefore not considered racially inferior or subject to extreme inequities or neglect, but like most slave characteristics, that can change.
@@ -16932,48 +16926,6 @@ brought in to you. This time <<= App.UI.slaveDescriptionDialog($activeSlave)>> h
 	<</link>><<if (($activeSlave.vagina == 0) && canDoVaginal($activeSlave)) || (($activeSlave.anus == 0) && canDoAnal($activeSlave))>> //This option will take $his virginity//<</if>>
 <</if>>
 
-<<case "retching cum feeding">>
-
-<<link "Have mercy on the poor $girl and take $him off $his cum diet for now">>
-	<<replace "#result">>
-		You see how $activeSlave.slaveName is suffering and you decide to reconsider $his dietary prescription. You instruct $assistant.name to change <<print $activeSlave.slaveName>>'s diet to exclude cum for now. Slaves who can't eat are unhealthy, and unhealthy slaves are unprofitable slaves. $He is now @@.mediumorchid;more confident that $he can resist you and get $his way,@@ $he also @@.mediumaquamarine;trusts you a little more@@ to look after $his well being.
-		<<set $activeSlave.trust += 5, $activeSlave.devotion -= 5, $activeSlave.dietCum = 0>>
-	<</replace>>
-<</link>>
-<<if $activeSlave.dietCum == 1>>
-	<br><<link "Force $him onto a heavy cum diet, and double up on $his ejaculate intake">>
-		<<replace "#result">>
-			You instruct $assistant.name to double down on <<print $activeSlave.slaveName>>'s cum diet. Ungrateful little sluts who retch up their expensive food sometimes need tough love. Making $his cum-food thicker and more concentrated might help $him to learn that no matter how bad things seem, you can always make them worse. Initially $his new heavy cum diet makes no difference in $his ability to keep it down, but you tell $him to give it some time. Eventually $he will learn to appreciate cum as the primary ingredient in everything $he ingests. All of your future cumsluts do, sooner or later. $His pathetic tears reveal how @@.gold;helpless $he feels,@@ but they don't hide the @@.mediumorchid;streak of rebelliousness@@ that remains burning inside $him.
-			<<set $activeSlave.devotion -= 3, $activeSlave.trust -= 3, $activeSlave.dietCum = 2>>
-		<</replace>>
-	<</link>>
-<<elseif $activeSlave.dietCum == 2>>
-	<br><<link "Give the poor $girl a break and reduce $his cum intake to a more modest level">>
-		<<replace "#result">>
-			$activeSlave.slaveName is on a very heavy cum diet, and it's possible you're forcing $him to take too much, too soon. You decide to give $him a break and instruct $assistant.name to reduce, but not eliminate the amount of cum in $his diet. Although it doesn't immediately make $him hate cum any less, @@.hotpink;$he appreciates your willingness@@ to make things a little less unpleasant for $him. @@.mediumaquamarine;$He is a little less afraid of you too,@@ although not as much as if you'd taken $him off $his cum diet altogether.
-			<<set $activeSlave.devotion += 2, $activeSlave.trust += 2, $activeSlave.dietCum = 1>>
-		<</replace>>
-	<</link>>
-	<br><<link "Suppress $his gag reflex and double $his cum intake for a week">>
-		<<replace "#result">>
-			$He is already on a very heavy cum-based diet, and there's only so much ejaculate you can force a slut to ingest before it negatively affects $his health. However, as a temporary measure, you still have options. You instruct $assistant.name to re-double the amount of ejaculate in <<print $activeSlave.slaveName>>'s diet for the week. You also have $him closely monitored and injected with anti-nausea drugs to help $his hold down $his food. Although the idea of being forced to eat large amounts of human reproductive fluid still disgusts $him, the week of having a super-concentrated cum-diet, along with the suppressed reflex to purge it has its effect. Knowing that you monitor and control every aspect of $his life @@.hotpink;breaks down $his resistance to your will,@@ and by the end of the week, $he is grateful that you return $him to a more nutritionally viable regimen — even if its cum content is still overwhelmingly high. <<if $activeSlave.fetishKnown == 1>>@@.lightcoral;$His brain has now begun to accept the sexual perversity of $his food as a turn on.@@<<else>>$He is now able to eat and digest $his prescribed diet without pharmacological assistance.<</if>>
-			<<set $activeSlave.devotion += 5, $activeSlave.fetish = "cumslut">>
-			<<if $activeSlave.fetishKnown == 1>>
-				<<set $activeSlave.fetishStrength = 10>>
-			<</if>>
-		<</replace>>
-	<</link>>
-<</if>>
-<<if ($arcade > 0)>>
-	<br><<link "Sentence $him to a day in $arcadeName for cum injection therapy">>
-		<<replace "#result">>
-			You have $assistant.name inform $activeSlave.slaveName of $his unacceptable behavior and sentence $him to a day in $arcadeName. $He cries and pleads for mercy, and even begs to be allowed to suck a cock, any cock, so $he can prove $his newfound enthusiasm for cum, but you are unmerciful as two other slaves drag $him off to serve $his sentence. $He is forced to wear a<<if $activeSlave.vagina != -1>> combined vaginal and<<else>>n<</if>> anal chastity belt so that the only hole available is $his mouth, and is then confined in $arcadeName with $his mouth spread open by a ring gag and $his head sticking through the hole in the wall. A sign below $his mouth proclaims $him to be a "cum extraction tube" and $he is used that way for the duration of $his stay — a grueling, 18-hour marathon of relentless throat fucking. <<if $activeSlave.sexualFlaw != "hates oral">>$His ordeal is so extreme that $he now @@.red;hates oral sex@@<<else>>$His hatred of oral sex makes $his ordeal that much more horrific<</if>>, but it @@.hotpink;breaks down $his resistance.@@ $He now @@.gold;better understands the terrifying power you have over $him,@@ and the sheer amount of cum $he is forced to ingest @@.red;negatively effects $his health.@@ Your other cum-fed slaves take note of what you do to those who can't hold down their assigned diet.
-			<<set $activeSlave.devotion += 5, $activeSlave.trust -= 5, $activeSlave.sexualFlaw = "hates oral", $activeSlave.fetish = "masochist">>
-			<<run seX($activeSlave, "oral", "public", "penetrative", 55)>>
-			<<run healthDamage($activeSlave, 5)>>
-		<</replace>>
-	<</link>>
-<</if>>
 
 <<case "subjugation blues">>