diff --git a/js/003-data/gameVariableData.js b/js/003-data/gameVariableData.js
index ff132f1b933430dfe5d1d1be0313437b6fc2b3b5..3a3c7298a13b5739032c6b1cbc4ea35caf60fd33 100644
--- a/js/003-data/gameVariableData.js
+++ b/js/003-data/gameVariableData.js
@@ -251,7 +251,6 @@ App.Data.resetOnNGPlus = {
 	personalShares: 0,
 	publicShares: 0,
 	SF: {},
-	shelterGirlsIDs: [], // Only needed in endweek loop
 	recuriterOffice: 0,
 	focus: "social engineering",
 	thisWeeksFSWares: 0,
diff --git a/src/endWeek/endWeek.js b/src/endWeek/endWeek.js
new file mode 100644
index 0000000000000000000000000000000000000000..7ef4ccfc42363b602100d61ade5d346cd019449c
--- /dev/null
+++ b/src/endWeek/endWeek.js
@@ -0,0 +1,340 @@
+window.endWeek = (function() {
+	function doEndWeek() {
+		// purge SugarCube's expired state cache
+		State.expired.length = 0;
+
+		// report setup
+		setupLastWeeksCash();
+		setupLastWeeksRep();
+
+		// globals setup
+		resetSlaveMarkets();
+		resetSlaveCounters();
+		for (const s of V.slaves) {
+			slavePrep(s);
+		}
+		setUseWeights();
+		saveWeekTotals();
+
+		// pass time for objects that need it
+		organs();
+		prosthetics();
+		nursery();
+		food();
+		PC();
+
+		// week end is done, move on to gameover or SA reports
+		resetMiscGlobals();
+		advance();
+	}
+
+	function resetSlaveMarkets() {
+		V.gingering = 0;
+		delete V.slaveMarket;
+		for (const school of [ "TSS", "GRI", "SCP", "LDE", "TGA", "HA", "TFS", "TCR", "NUL" ]) {
+			V[school].schoolSale = 0;
+		}
+	}
+
+	function resetSlaveCounters() {
+		V.inflatedSlavesCum = 0;
+		V.inflatedSlavesMilk = 0;
+		V.subSlaves = 0;
+	}
+
+	function slavePrep(s) {
+		if (s.inflationMethod === 1 || s.inflationMethod === 2) {
+			if (s.inflationType === "milk") {
+				V.inflatedSlavesMilk++;
+			} else if (s.inflationType === "cum") {
+				V.inflatedSlavesCum++;
+			}
+		}
+		if (s.assignment === "be a subordinate slave" && s.subTarget === 0) {
+			V.subSlaves++;
+		}
+		s.lastWeeksCashIncome = 0;
+		s.lastWeeksRepIncome = 0;
+		s.lastWeeksRepExpenses = 0;
+	}
+
+	function setUseWeights() {
+		V.oralUseWeight = 5;
+		V.vaginalUseWeight = 5;
+		V.analUseWeight = 5;
+		V.mammaryUseWeight = 1;
+		V.penetrativeUseWeight = 1;
+
+		if (V.OralEncouragement === 1) {
+			V.oralUseWeight += 2;
+			V.vaginalUseWeight -= 1;
+			V.analUseWeight -= 1;
+		} else if (V.VaginalEncouragement === 1) {
+			V.oralUseWeight -= 1;
+			V.vaginalUseWeight += 2;
+			V.analUseWeight -= 1;
+		} else if (V.AnalEncouragement === 1) {
+			V.oralUseWeight -= 1;
+			V.vaginalUseWeight -= 1;
+			V.analUseWeight += 2;
+		}
+
+		if (V.OralDiscouragement === 1) {
+			V.oralUseWeight -= 2;
+			V.vaginalUseWeight += 1;
+			V.analUseWeight += 1;
+		}
+		if (V.VaginalDiscouragement === 1) {
+			V.oralUseWeight += 1;
+			V.vaginalUseWeight -= 2;
+			V.analUseWeight += 1;
+		}
+		if (V.AnalDiscouragement === 1) {
+			V.oralUseWeight += 1;
+			V.vaginalUseWeight += 1;
+			V.analUseWeight -= 2;
+		}
+
+		if (V.sexualOpeness === 1) {
+			V.penetrativeUseWeight += 1;
+		}
+	}
+
+	function saveWeekTotals() {
+		V.cashLastWeek = V.cash;
+		V.repLastWeek = V.rep;
+		V.foodLastWeek = V.food;
+	}
+
+	function organs() {
+		function advanceOrgan(o) {
+			if (o.weeksToCompletion > 0) {
+				if (V.organFarmUpgrade === 3) {
+					o.weeksToCompletion -= 4;
+				} else if (V.organFarmUpgrade === 2) {
+					o.weeksToCompletion -= 2;
+				} else {
+					o.weeksToCompletion--;
+				}
+			}
+		}
+
+		for (const organ of V.organs) {
+			advanceOrgan(organ);
+		}
+
+		// move completed non-incubator organs to V.completedOrgans
+		V.organs = V.organs.filter(function(o) {
+			if (o.weeksToCompletion <= 0) {
+				V.completedOrgans.push(o);
+				return false;
+			}
+			return true;
+		});
+
+		for (const organ of V.incubatorOrgans) {
+			advanceOrgan(organ);
+		}
+
+		// TODO: nurseryOrgans too, if those ever exist...
+	}
+
+	function prosthetics() {
+		for (const p of V.adjustProsthetics) {
+			if (p.workLeft > 0) {
+				if (V.prostheticsUpgrade === 3) {
+					p.workLeft -= 40;
+				} else if (V.prostheticsUpgrade === 2) {
+					p.workLeft -= 20;
+				} else {
+					p.workLeft -= 10;
+				}
+				if (p.workLeft <= 0){
+					V.adjustProstheticsCompleted++;
+				}
+			}
+		}
+	}
+
+	function nursery() {
+		for (const c of V.cribs) {
+			c.growTime--;
+			c.birthWeek++;
+			if (c.birthWeek >= 52) {
+				c.birthWeek = 0;
+				c.actualAge++;
+			}
+			if (c.actualAge >= 3) {
+				App.Facilities.Nursery.infantToChild(c);
+			}
+		}
+	}
+
+	function food() {
+		function foodConsumption(s) {
+			if (s.diet === "restricted") {
+				return 1.8;
+			} else if (s.diet === "slimming") {
+				return 1.9;
+			} else if (s.diet === "muscle building") {
+				return 2.1;
+			} else if (s.diet === "fattening") {
+				return 2.2;
+			} else {
+				return 2;
+			}
+		}
+
+		if (V.foodMarket > 0) {
+			V.foodConsumption = ((V.lowerClass*V.foodRate.lower) + (V.middleClass*V.foodRate.middle) + (V.upperClass*V.foodRate.upper) + (V.topClass*V.foodRate.top));
+			V.foodConsumption += V.slaves.reduce((acc, cur) => acc += foodConsumption(cur), 0);
+			V.food -= Math.max(V.foodConsumption, V.food);
+			V.foodConsumption = 0;
+		}
+	}
+
+	function PC() {
+		V.PC.sexualEnergy = 4;
+		if (V.PCSlutContacts === 2) {
+			V.PC.sexualEnergy -= 3;
+		}
+		if (V.personalAttention === "sex") {
+			V.PC.sexualEnergy += 2;
+		}
+		if (V.PC.physicalAge >= 80) {
+			V.PC.sexualEnergy -= 6;
+		} else if (V.PC.physicalAge >= 72) {
+			V.PC.sexualEnergy -= 5;
+		} else if (V.PC.physicalAge >= 65) {
+			V.PC.sexualEnergy -= 4;
+		} else if (V.PC.physicalAge >= 58) {
+			V.PC.sexualEnergy -= 3;
+		} else if (V.PC.physicalAge >= 50) {
+			V.PC.sexualEnergy -= 2;
+		} else if (V.PC.physicalAge >= 42) {
+			V.PC.sexualEnergy -= 1;
+		} else if (V.PC.physicalAge >= 35) {
+			V.PC.sexualEnergy += 0;
+		} else if (V.PC.physicalAge >= 31) {
+			V.PC.sexualEnergy += 1;
+		} else if (V.PC.physicalAge >= 28) {
+			V.PC.sexualEnergy += 2;
+		} else if (V.PC.physicalAge >= 21) {
+			V.PC.sexualEnergy += 3;
+		} else if (V.PC.physicalAge >= 13) {
+			V.PC.sexualEnergy += 4;
+		} else if (V.PC.physicalAge === 12) {
+			V.PC.sexualEnergy += 1;
+		} else if (V.PC.physicalAge === 11) {
+			V.PC.sexualEnergy -= 2;
+		} else if (V.PC.physicalAge >= 0) {
+			V.PC.sexualEnergy -= 6;
+		}
+		if (V.PC.balls >= 10) {
+			V.PC.sexualEnergy += 2;
+		} else if (V.PC.balls >= 5) {
+			V.PC.sexualEnergy++;
+		}
+		if (V.PC.preg > 20) {
+			if (V.PC.pregMood === 2) {
+				V.PC.sexualEnergy += 4;
+			} else {
+				V.PC.sexualEnergy -= 3;
+			}
+		} else if (V.PC.preg > 0) {
+			V.PC.sexualEnergy -= 1;
+		} else {
+			if (V.PC.fertDrugs === 1) {
+				V.PC.sexualEnergy++;
+			}
+			if (V.PC.forcedFertDrugs > 0) {
+				V.PC.sexualEnergy += 2;
+			}
+		}
+		if (V.PC.staminaPills > 0) {
+			V.PC.sexualEnergy += 2;
+		}
+		if (V.PC.preg > 0) {
+			WombProgress(V.PC, 1, 1);
+			WombNormalizePreg(V.PC);
+			V.PC.pregWeek = V.PC.preg;
+			let newBelly = WombGetVolume(V.PC);
+			if (newBelly >= V.PC.belly) {
+				V.PC.belly = newBelly;
+			} else if (V.PC.belly > 500) {
+				V.PC.belly *= .75;
+			}
+			V.PC.fertDrugs = 0;
+		} else if (V.PC.belly > 0) {
+			if (V.PC.belly < 100) {
+				V.PC.belly = 0;
+			} else {
+				V.PC.belly *= .75;
+			}
+		}
+		if (V.PC.pregWeek < 0) {
+			V.PC.pregWeek++;
+		}
+	}
+
+	function resetMiscGlobals() {
+		// if a global is going to be used by the end-of-week reports, it must be reset here instead of in Next Week
+		V.showEncyclopedia = 0;
+		V.expiree = 0;
+		V.retiree = 0;
+
+		V.HGEnergy = 0;
+		V.HGCum = 0;
+		V.HGSlaveSuccess = 0;
+		V.HeadGirl = 0;
+		V.Recruiter = 0;
+		V.Madam = 0;
+		V.unMadam = 0;
+		V.madamCashBonus = 0;
+		V.whorePriceAdjustment = {};
+		V.DJ = 0;
+		V.unDJ = 0;
+		V.DJRepBonus = 0;
+		V.Milkmaid = 0;
+		V.Farmer = 0;
+		V.Collectrix = 0;
+		V.Stewardess = 0;
+		V.Schoolteacher = 0;
+		V.Wardeness = 0;
+		V.Concubine = 0;
+		V.Attendant = 0;
+		V.Matron = 0;
+		V.Nurse = 0;
+		V.Bodyguard = 0;
+		V.Stud = 0;
+		V.StudCum = 0;
+		V.fuckSlaves = 0;
+		V.freeSexualEnergy = 0;
+		V.publicServants = 0;
+		V.cumSlaves = 0;
+		V.averageDick = 0;
+		V.slavesWithWorkingDicks = 0;
+		V.slaveJobValues = {};
+	}
+
+	function advance() {
+		if (V.slaves.length < 1) {
+			V.gameover = "no slaves";
+			Engine.play("Gameover");
+		} else if (V.arcologies[0].ownership < V.arcologies[0].minority) {
+			V.gameover = "ownership";
+			Engine.play("Gameover");
+		} else {
+			Engine.play("Slave Assignments Report");
+		}
+	}
+
+	function confirmEndWeek() {
+		if (!V.sideBarOptions.confirmWeekEnd || confirm("Are you sure you want to end the week?")) {
+			window.LoadLockID = LoadScreen.lock();
+			setTimeout(doEndWeek, 0); // execute immediately, but after the event loop runs, so the loading screen gets shown
+		}
+	}
+
+	return confirmEndWeek;
+})();
diff --git a/src/gui/storyCaptionWidgets.tw b/src/gui/storyCaptionWidgets.tw
index 899efabf70500af9cb4998577518c781e6ce5bf9..7e20114b35f6e1f0b7f361f1ed75cf47575d0522 100644
--- a/src/gui/storyCaptionWidgets.tw
+++ b/src/gui/storyCaptionWidgets.tw
@@ -7,7 +7,7 @@
 	<<if _Pass != "End Week">>
 		<<if _Pass == "Main">>
 			<strong>
-				<div id="endWeekButton"><<link "$nextButton">><</link>> @@.cyan;[Ent]@@</div>
+				<div id="endWeekButton"><<link "END WEEK">><<run endWeek()>><</link>> @@.cyan;[Ent]@@</div>
 			</strong>
 			<<if $rulesAssistantAuto == 1 && DefaultRulesError()>>
 				<div>@@.yellow;WARNING: Rules Assistant has rules with errors!@@</div>
@@ -26,15 +26,6 @@
 			</div></strong>
 		<</if>>
 	<</if>>
-	<<script>>
-		$(document).one(':passageend', () => {
-			$('#endWeekButton').click(() => {
-				if (!V.sideBarOptions.confirmWeekEnd || confirm("Are you sure you want to end the week?")) {
-					Engine.play(V.nextLink);
-				}
-			});
-		});
-	<</script>>
 <</widget>>
 
 <<widget "security">>
diff --git a/src/js/economyJS.js b/src/js/economyJS.js
index 7c2032e16c4a131449fa30acec9ee4daaed06d6b..5f3464847d262fcc6ff229a1ec46567f17a33e68 100644
--- a/src/js/economyJS.js
+++ b/src/js/economyJS.js
@@ -2637,6 +2637,7 @@ window.setupLastWeeksCash = function() {
 	V.lastWeeksCashIncome = new App.Data.Records.LastWeeksCash();
 	V.lastWeeksCashExpenses = new App.Data.Records.LastWeeksCash();
 	V.lastWeeksCashProfits = new App.Data.Records.LastWeeksCash();
+	V.lastWeeksCashErrors = "Errors: ";
 
 	// Here we reset our tracked totals on week end, and add the default categories to all objects
 	V.lastWeeksGatheredTotals = {};
@@ -2652,4 +2653,5 @@ window.setupLastWeeksRep = function() {
 	V.lastWeeksRepIncome = new App.Data.Records.LastWeeksRep();
 	V.lastWeeksRepExpenses = new App.Data.Records.LastWeeksRep();
 	V.lastWeeksRepProfits = new App.Data.Records.LastWeeksRep();
+	V.lastWeeksRepErrors = "Errors: ";
 };
diff --git a/src/uncategorized/endWeek.tw b/src/uncategorized/endWeek.tw
deleted file mode 100644
index 4375e86ecb7d94a4289f7c1d70c607c7965e74f4..0000000000000000000000000000000000000000
--- a/src/uncategorized/endWeek.tw
+++ /dev/null
@@ -1,268 +0,0 @@
-:: End Week [nobr]
-
-<<set State.expired.length = 0>>
-
-<<run setupLastWeeksCash()>>
-<<run setupLastWeeksRep()>>
-
-<<set $gingering = 0, $oralUseWeight = 5, $vaginalUseWeight = 5, $analUseWeight = 5, $mammaryUseWeight = 1, $penetrativeUseWeight = 1, $inflatedSlavesMilk = 0, $inflatedSlavesCum = 0, $subSlaves = 0>>
-<<unset $slaveMarket>>
-
-<<if $OralEncouragement == 1>>
-	<<set $oralUseWeight += 2, $vaginalUseWeight -= 1, $analUseWeight -= 1>>
-<<elseif $VaginalEncouragement == 1>>
-	<<set $oralUseWeight -= 1, $vaginalUseWeight += 2, $analUseWeight -= 1>>
-<<elseif $AnalEncouragement == 1>>
-	<<set $oralUseWeight -= 1, $vaginalUseWeight -= 1, $analUseWeight += 2>>
-<</if>>
-<<if $OralDiscouragement == 1>>
-	<<set $oralUseWeight -= 2, $vaginalUseWeight += 1, $analUseWeight += 1>>
-<</if>>
-<<if $VaginalDiscouragement == 1>>
-	<<set $oralUseWeight += 1, $vaginalUseWeight -= 2, $analUseWeight += 1>>
-<</if>>
-<<if $AnalDiscouragement == 1>>
-	<<set $oralUseWeight += 1, $vaginalUseWeight += 1, $analUseWeight -= 2>>
-<</if>>
-<<if $sexualOpeness == 1>>
-	<<set $penetrativeUseWeight++>>
-<</if>>
-
-<<run $slaves.forEach(function(s) {
-	if (s.inflationMethod == 1 || s.inflationMethod == 2) {
-		if (s.inflationType == "milk") {
-			$inflatedSlavesMilk++;
-		} else if (s.inflationType == "cum") {
-			$inflatedSlavesCum++;
-		}
-	}
-	if (s.assignment == "be a subordinate slave" && s.subTarget == 0) {
-		$subSlaves++;
-	}
-	s.lastWeeksCashIncome = 0;
-	s.lastWeeksRepIncome = 0;
-	s.lastWeeksRepExpenses = 0;
-})>>
-
-<<if $organs.length > 0>>
-	<<run $organs.forEach(function(o) {
-		if (o.weeksToCompletion > 0) {
-			if ($organFarmUpgrade == 3) {
-				o.weeksToCompletion -= 4;
-			} else if ($organFarmUpgrade == 2) {
-				o.weeksToCompletion -= 2;
-			} else {
-				o.weeksToCompletion--;
-			}
-		}
-	})>>
-	<<set $organs = $organs.filter(function(o) {
-		if (o.weeksToCompletion <= 0) {
-			$completedOrgans.push(o);
-			return false;
-		}
-		return true;
-	})>>
-<</if>>
-
-<<if $incubatorOrgans.length > 0>>
-	<<run $incubatorOrgans.forEach(function(io) {
-		if (io.weeksToCompletion > 0) {
-			if ($organFarmUpgrade == 3) {
-				io.weeksToCompletion -= 4;
-			} else if ($organFarmUpgrade == 2) {
-				io.weeksToCompletion -= 2;
-			} else {
-				io.weeksToCompletion--;
-			}
-		}
-	})>>
-<</if>>
-
-<<if $nurseryBabies > 0>>
-	<<run $cribs.forEach(function(c) {
-		c.growTime--;
-		c.birthWeek++;
-		if (c.birthWeek >= 52) {
-			c.birthWeek = 0;
-			c.actualAge++;
-		}
-		if (c.actualAge >= 3) {
-			App.Facilities.Nursery.infantToChild(c);
-		}
-	})>>
-<</if>>
-
-/* for potential future use
-<<if $nurseryOrgans.length > 0>>
-	<<run $nurseryOrgans.forEach(function(no) {
-		if (no.weeksToCompletion > 0) {
-			if ($organFarmUpgrade == 3) {
-				no.weeksToCompletion -= 4;
-			} else if ($organFarmUpgrade == 2) {
-				no.weeksToCompletion -= 2;
-			} else {
-				no.weeksToCompletion--;
-			}
-		}
-	})>>
-<</if>>
-*/
-
-<<if $adjustProsthetics.length > 0>>
-	<<run $adjustProsthetics.forEach(function(p) {
-		if (p.workLeft > 0) {
-			if ($prostheticsUpgrade == 3) {
-				p.workLeft -= 40;
-			} else if ($prostheticsUpgrade == 2) {
-				p.workLeft -= 20;
-			} else {
-				p.workLeft -= 10;
-			}
-			if (p.workLeft <= 0){
-				$adjustProstheticsCompleted++;
-			}
-		}
-	})>>
-<</if>>
-
-/% Begin section: ensure minimum age is set (game may have been loaded from a non-modded version). %/
-<<if $minimumSlaveAge <= 18 && $minimumSlaveAge > 0>>
-<<else>>
-	<<set $minimumSlaveAge = 18>>
-	<<set $pedo_mode = 0>>
-	<<if $fertilityAge <= 18 && $fertilityAge > 0>>
-	<<else>>
-		<<set $fertilityAge = 13>>
-	<</if>>
-	<<if $potencyAge <= 18 && $potencyAge > 0>>
-	<<else>>
-		<<set $potencyAge = 13>>
-	<</if>>
-<</if>>
-/% End section: ensure minimum age is set. %/
-
-<<set $TSS.schoolSale = 0, $GRI.schoolSale = 0, $SCP.schoolSale = 0, $LDE.schoolSale = 0, $TGA.schoolSale = 0, $HA.schoolSale = 0, $TFS.schoolSale = 0, $TCR.schoolSale = 0, $NUL.schoolSale = 0, $showEncyclopedia = 0, $shelterGirlsIDs = [], $cashLastWeek = $cash, $repLastWeek = $rep, $foodLastWeek = $food>>
-
-<<if $foodMarket > 0>>
-	<<set $foodConsumption = (($lowerClass*$foodRate.lower) + ($middleClass*$foodRate.middle) + ($upperClass*$foodRate.upper) + ($topClass*$foodRate.top))>>
-	<<run $slaves.forEach(function(s) {
-		if (s.diet == "restricted") {
-			V.foodConsumption += 1.8;
-		} else if (s.diet == "slimming") {
-			V.foodConsumption += 1.9;
-		} else if (s.diet == "muscle building") {
-			V.foodConsumption += 2.1;
-		} else if (s.diet == "fattening") {
-			V.foodConsumption += 2.2;
-		} else {
-			V.foodConsumption += 2;
-		}
-	})>>
-
-	<<set $food -= $foodConsumption>>
-	<<if $food < 0>>
-		<<set $food = 0>>
-	<</if>>
-	<<set $foodConsumption = 0>>
-<</if>>
-
-<<set $lastWeeksCashErrors = "Errors: ">>
-<<set $lastWeeksRepErrors = "Errors: ">>
-
-<<set $retiree = 0>>
-<<set $expiree = 0>>
-
-<<set $PC.sexualEnergy = 4>>
-<<if $PCSlutContacts == 2>>
-	<<set $PC.sexualEnergy -= 3>>
-<</if>>
-<<if $personalAttention == "sex">>
-	<<set $PC.sexualEnergy += 2>>
-<</if>>
-<<if $PC.physicalAge >= 80>>
-	<<set $PC.sexualEnergy -= 6>>
-<<elseif $PC.physicalAge >= 72>>
-	<<set $PC.sexualEnergy -= 5>>
-<<elseif $PC.physicalAge >= 65>>
-	<<set $PC.sexualEnergy -= 4>>
-<<elseif $PC.physicalAge >= 58>>
-	<<set $PC.sexualEnergy -= 3>>
-<<elseif $PC.physicalAge >= 50>>
-	<<set $PC.sexualEnergy -= 2>>
-<<elseif $PC.physicalAge >= 42>>
-	<<set $PC.sexualEnergy -= 1>>
-<<elseif $PC.physicalAge >= 35>>
-	<<set $PC.sexualEnergy += 0>>
-<<elseif $PC.physicalAge >= 31>>
-	<<set $PC.sexualEnergy += 1>>
-<<elseif $PC.physicalAge >= 28>>
-	<<set $PC.sexualEnergy += 2>>
-<<elseif $PC.physicalAge >= 21>>
-	<<set $PC.sexualEnergy += 3>>
-<<elseif $PC.physicalAge >= 13>>
-	<<set $PC.sexualEnergy += 4>>
-<<elseif $PC.physicalAge == 12>>
-	<<set $PC.sexualEnergy += 1>>
-<<elseif $PC.physicalAge == 11>>
-	<<set $PC.sexualEnergy -= 2>>
-<<elseif $PC.physicalAge >= 0>>
-	<<set $PC.sexualEnergy -= 6>>
-<</if>>
-<<if $PC.balls >= 10>>
-	<<set $PC.sexualEnergy += 2>>
-<<elseif $PC.balls >= 5>>
-	<<set $PC.sexualEnergy++>>
-<</if>>
-<<if $PC.preg > 20>>
-	<<if $PC.pregMood == 2>>
-		<<set $PC.sexualEnergy += 4>>
-	<<else>>
-		<<set $PC.sexualEnergy -= 3>>
-	<</if>>
-<<elseif $PC.preg > 0>>
-	<<set $PC.sexualEnergy -= 1>>
-<<else>>
-	<<if $PC.fertDrugs == 1>>
-		<<set $PC.sexualEnergy++>>
-	<</if>>
-	<<if $PC.forcedFertDrugs > 0>>
-		<<set $PC.sexualEnergy += 2>>
-	<</if>>
-<</if>>
-<<if $PC.staminaPills > 0>>
-	<<set $PC.sexualEnergy += 2>>
-<</if>>
-<<if $PC.preg > 0>>
-	<<set WombProgress($PC, 1, 1)>>
-	<<set WombNormalizePreg($PC), $PC.pregWeek = $PC.preg>>
-	<<set _newBelly = WombGetVolume($PC)>>
-	<<if _newBelly >= $PC.belly>>
-		<<set $PC.belly = _newBelly>>
-	<<elseif $PC.belly > 500>>
-		<<set $PC.belly *= .75>>
-	<</if>>
-	<<if $PC.fertDrugs != 0>>
-		<<set $PC.fertDrugs = 0>>
-	<</if>>
-<<elseif $PC.belly > 0>>
-	<<if $PC.belly < 100>>
-		<<set $PC.belly = 0>>
-	<<else>>
-		<<set $PC.belly *= .75>>
-	<</if>>
-<</if>>
-<<if $PC.pregWeek < 0>>
-	<<set $PC.pregWeek++>>
-<</if>>
-
-<<set $HGEnergy = 0, $HGCum = 0, $HGSlaveSuccess = 0, $HeadGirl = 0, $Recruiter = 0, $Madam = 0, $unMadam = 0, $madamCashBonus = 0, $whorePriceAdjustment = {}, $DJ = 0, $unDJ = 0, $DJRepBonus = 0, $Milkmaid = 0, $Farmer = 0, $Collectrix = 0, $Stewardess = 0, $Schoolteacher = 0, $Wardeness = 0, $Concubine = 0, $Attendant = 0, $Matron = 0, $Nurse = 0, $Bodyguard = 0, $Stud = 0, $StudCum = 0, $fuckSlaves = 0, $freeSexualEnergy = 0, $publicServants = 0, $cumSlaves = 0, $averageDick = 0, $slavesWithWorkingDicks = 0, $slaveJobValues = {}>>
-
-/* GAMEOVERS */
-<<if $slaves.length < 1>>
-	<<set $gameover = "no slaves">><<goto "Gameover">>
-<<elseif $arcologies[0].ownership < $arcologies[0].minority>>
-	<<set $gameover = "ownership">><<goto "Gameover">>
-<<else>>
-	<<goto "Slave Assignments Report">>
-<</if>>
diff --git a/src/uncategorized/main.tw b/src/uncategorized/main.tw
index d8b335a78de372ab5b163c0879eb2a9e27f5362f..8cc93cd68cea3bbb83789b630bf1b6d4284bc61c 100644
--- a/src/uncategorized/main.tw
+++ b/src/uncategorized/main.tw
@@ -15,7 +15,7 @@
 
 <<run penthouseCensus()>>
 
-<<set $nextButton = "END WEEK", $nextLink = "End Week", $showEncyclopedia = 1, $encyclopedia = "How to Play">>
+<<set $showEncyclopedia = 1, $encyclopedia = "How to Play">>
 <<set $costs = Math.trunc(calculateCosts.predict())>>
 
 <<set $currentRule = $defaultRules[0]>>
diff --git a/src/uncategorized/nextWeek.tw b/src/uncategorized/nextWeek.tw
index 428f88a704990be9813e9109bb650dfa881fc63c..8f67962e66065242f80c275874d8187ab218f970 100644
--- a/src/uncategorized/nextWeek.tw
+++ b/src/uncategorized/nextWeek.tw
@@ -332,7 +332,7 @@
 /% These are variables that either should be made into _temp vars or should be Zeroed out once done with them instead of here. This can also interfere with debugging or hide NaN's as zeroing things out would clear a NaN. Also could stop from NaN's getting worse? %/
 /% Integer and float variables. No real need to zero them out but doesn't hurt to have them in a known state, though this might mask variables NaN'ing out. Takes up the least amount of Memory besides a "" string. %/
 <<set $i = 0, $j = 0, $averageProsperity = 0, $motherSlave = -1, $daughterSlave = -1, $devMother = -1, $devDaughter = -1, $alphaTwin = -1, $betaTwin = -1, $youngerSister = -1, $olderSister = -1, $recruiterSlave = -1>>
-<<set $boobsID = -1, $boobsInterestTargetID = -1, $buttslutID = -1, $buttslutInterestTargetID = -1, $cumslutID = -1, $cumslutInterestTargetID = -1, $humiliationID = -1, $humiliationInterestTargetID = -1, $sadistID = -1, $sadistInterestTargetID = -1, $masochistID = -1, $masochistInterestTargetID = -1, $domID = -1, $dominantInterestTargetID = -1, $subID = -1, $submissiveInterestTargetID = -1>>
+<<set $boobsID = -1, $boobsInterestTargetID = -1, $buttslutID = -1, $buttslutInterestTargetID = -1, $cumslutID = -1, $cumslutInterestTargetID = -1, $humiliationID = -1, $humiliationInterestTargetID = -1, $sadistID = -1, $sadistInterestTargetID = -1, $masochistID = -1, $masochistInterestTargetID = -1, $domID = -1, $dominantInterestTargetID = -1, $subID = -1, $submissiveInterestTargetID = -1, $shelterGirlID = -1>>
 
 /% Other arrays %/
 <<set $events = [], $RESSevent = [], $RESSTRevent = [], $RETSevent = [], $RECIevent = [], $RecETSevent = [], $REFIevent = [], $REFSevent = [], $PESSevent = [], $PETSevent = [], $FSAcquisitionEvents = [], $FSNonconformistEvents = [], $REAnalCowgirlSubIDs = [], $REButtholeCheckinIDs = [], $recruit = [], $RETasteTestSubIDs = [], $rebelSlaves = [], $REBoobCollisionSubIDs = [], $REIfYouEnjoyItSubIDs = [], $RESadisticDescriptionSubIDs = [], $REShowerForceSubIDs = [], $RESimpleAssaultIDs = [], $RECockmilkInterceptionIDs = [], $REInterslaveBeggingIDs = [], $bedSlaves = [], $eligibleSlaves = []>>
diff --git a/src/uncategorized/randomNonindividualEvent.tw b/src/uncategorized/randomNonindividualEvent.tw
index 22bcbcd49499fe049522d10bb14e93dd2efcc83f..81b2cf1d8d66600f6ff4485465c19679af6d643a 100644
--- a/src/uncategorized/randomNonindividualEvent.tw
+++ b/src/uncategorized/randomNonindividualEvent.tw
@@ -75,7 +75,9 @@
 	<</if>>
 
 	<<if $shelterAbuse <= 5>>
-		<<if $shelterGirlsIDs.length > 0>>
+		<<set _shelterGirls = $slaves.filter(isShelterGirl)>>
+		<<if _shelterGirls.length > 0>>
+			<<set $shelterGirlID = _shelterGirls.random().ID>>
 			<<set $events.push("RE shelter inspection")>>
 		<</if>>
 	<</if>>
diff --git a/src/uncategorized/reShelterInspection.tw b/src/uncategorized/reShelterInspection.tw
index 4ee0a5eb8e59e76c80a160f16bc8928010405c0b..58cf6af091d2f7489f10cf4d6d90b720cd986b90 100644
--- a/src/uncategorized/reShelterInspection.tw
+++ b/src/uncategorized/reShelterInspection.tw
@@ -40,17 +40,8 @@
 <<set $activeSlave.sexualQuirk = either("apathetic", "idealistic")>>
 <<set $activeSlave.clothes = either("conservative clothing", "nice business attire")>>
 
-<<set _slave = $shelterGirlsIDs.random()>>
-<<set _Inspectee = getSlave(_slave)>>
-<<set _originSlave = $genePool.find(function(s) { return s.ID == _slave; })>>
-/*
-* this check is currently unnecessary but if in the future the shelter girl IDs list is changed to updated only when acquiring shelter girls, this should be enabled
-*
-<<if (ndef _Inspectee)>>
-	<<set $shelterGirlsIDs.delete(_slave)>>
-	<<goto "Random Nonindividual Event">>
-<</if>>
-*/
+<<set _Inspectee = getSlave($shelterGirlID)>>
+<<set _originSlave = $genePool.find(function(s) { return s.ID == $shelterGirlID; })>>
 
 <<setLocalPronouns _Inspectee>>
 <<setLocalPronouns $activeSlave 2>>
diff --git a/src/uncategorized/slaveAssignmentsReport.tw b/src/uncategorized/slaveAssignmentsReport.tw
index 98571c44315af9a6e00c75f8d055b2693798d321..dad68e96fb5fb912269ee2119f09b225f70de189 100644
--- a/src/uncategorized/slaveAssignmentsReport.tw
+++ b/src/uncategorized/slaveAssignmentsReport.tw
@@ -862,10 +862,6 @@ $sexDemandResult.topClass = Math.trunc((($NPCSexSupply.topClass + $slaveJobValue
 	<</if>>
 <</if>>
 
-<<if isShelterSlave($slaves[$i])>>
-	<<set $shelterGirlsIDs.push($slaves[$i].ID)>>
-<</if>>
-
 <<if $slaves[$i].bellyPain != 0>>
 	<<set $slaves[$i].bellyPain = 0>>
 <</if>>
@@ -1127,3 +1123,6 @@ $sexDemandResult.topClass = Math.trunc((($NPCSexSupply.topClass + $slaveJobValue
 <<if ($researchLab.level > 0)>>
 	<<include "Lab Report">><br><br>
 <</if>>
+
+/* release loading screen as soon as the event loop can run */
+<<run setTimeout(LoadScreen.unlock, 0, window.LoadLockID)>>