diff --git a/devTools/FC.ts b/devTools/FC.ts
index 82253b74720e3fe501b5873ffae1b933b0fbc6e1..bc57a198c381445359368d34525d4c41a1bab91a 100644
--- a/devTools/FC.ts
+++ b/devTools/FC.ts
@@ -379,7 +379,7 @@ declare namespace FC {
 
 	interface ArcologyState {
 		name: string;
-		direction: number;
+		direction: string | NoObject;
 		government: string;
 		leaderID: number;
 		honeymoon: number;
@@ -389,9 +389,9 @@ declare namespace FC {
 		PCminority: number;
 		demandFactor: number;
 		FSSupremacist: FSPolicy;
-		FSSupremacistRace: FSPolicy;
+		FSSupremacistRace: string | NoObject;
 		FSSubjugationist: FSPolicy;
-		FSSubjugationistRace: FSPolicy;
+		FSSubjugationistRace: string | NoObject;
 		FSGenderRadicalist: FSPolicy;
 		FSGenderFundamentalist: FSPolicy;
 		FSPaternalist: FSPolicy;
diff --git a/js/artInfrastructure.js b/js/artInfrastructure.js
index b9d973164398cf69a43072c40f6f23ff6eb50a37..c709c72c0349619ae38fe5af057bf1af9e8c43b4 100644
--- a/js/artInfrastructure.js
+++ b/js/artInfrastructure.js
@@ -60,6 +60,10 @@ App.Art.SvgQueue = class {
 	add(id) {
 		const res = this._cache.get(id);
 		let clones = [];
+		if (!res) {
+			console.error(`Missing art resource: ${id}`);
+			return;
+		}
 		for (const srcNode of res.children) {
 			/** @type {Element} */
 			const node = srcNode.cloneNode(true);
diff --git a/js/utils.js b/js/utils.js
index 5d07c92d81f95f54b76fe5c56c5e40156eaccc71..686924dddbc990327c758782b4328180e6df96da 100644
--- a/js/utils.js
+++ b/js/utils.js
@@ -93,6 +93,20 @@ function hashPush(object, ...rest) {
 	});
 }
 
+/**
+ * @param {{}} obj
+ * @param {{}} other
+ */
+function hashMerge(obj, other) {
+	Object.keys(other).forEach((key) => {
+		if (obj[key] === undefined) {
+			obj[key] = other[key];
+		} else {
+			obj[key] += other[key];
+		}
+	});
+}
+
 /**
  * @param {any[]} array
  * @returns {{}}
diff --git a/src/events/intro/initNationalities.js b/src/events/intro/initNationalities.js
new file mode 100644
index 0000000000000000000000000000000000000000..827b8516cf931af0b6017f2f8b559169731c47d7
--- /dev/null
+++ b/src/events/intro/initNationalities.js
@@ -0,0 +1,514 @@
+App.Intro.initNationalities = function() {
+	function initSecExp() {
+		/* base vars */
+		V.SecExp = SecExpBase();
+		App.SecExp.Check.general();
+		V.secUpgrades = {
+			nanoCams: 0,
+			cyberBots: 0,
+			eyeScan: 0,
+			cryptoAnalyzer: 0,
+			coldstorage: 0
+		};
+		V.crimeUpgrades = {
+			autoTrial: 0,
+			autoArchive: 0,
+			worldProfiler: 0,
+			advForensic: 0
+		};
+		V.intelUpgrades = {
+			sensors: 0,
+			radar: 0,
+			signalIntercept: 0
+		};
+		V.readinessUpgrades = {
+			earlyWarn: 0,
+			rapidPlatforms: 0,
+			pathways: 0,
+			rapidVehicles: 0
+		};
+		V.riotCenter = 0;
+		V.riotUpgrades = {
+			freeMedia: 0,
+			rapidUnit: 0,
+			rapidUnitSpeed: 0
+		};
+		V.fort = {
+			reactor: 0,
+			waterway: 0,
+			assistant:0
+		};
+		V.currentUpgrade = {
+			name: " ",
+			unit: 0,
+			type: 0,
+			time: 0
+		};
+		V.droneUpgrades = {
+			attack: 0,
+			defense: 0,
+			hp:0
+		};
+		V.humanUpgrade = {
+			attack: 0,
+			defense: 0,
+			hp:0,
+			morale: 0
+		};
+		V.sellTo = {
+			citizen: 1,
+			raiders: 1,
+			oldWorld: 1,
+			FC: 1
+		};
+		V.garrison = {
+			penthouse: 0,
+			reactor: 0,
+			assistant: 0,
+			waterway: 0,
+			reactorTime: 0,
+			assistantTime: 0,
+			waterwayTime: 0
+		};
+		if (V.wasToggledBefore === 0) {
+			if (V.mercenaries === 1) {
+				V.mercFreeManpower = jsRandom(5, 20);
+			} else if (V.mercenaries > 1) {
+				V.mercFreeManpower = jsRandom(10, 30);
+			}
+		}
+
+		/* battle relevant variables */
+		V.secBots = {
+			active: 0,
+			ID: -1,
+			isDeployed: 0,
+			troops: 0,
+			maxTroops: 0,
+			equip: 0
+		};
+	}
+
+	function applyPCQualities() {
+		resetEyeColor(V.PC);
+		generatePlayerPronouns(V.PC);
+
+		if (V.PC.career === "wealth") {
+			V.trinkets.push("a collection of diplomas from expensive schools");
+			cashX(10000, "personalBusiness");
+		} else if (V.PC.career === "capitalist") {
+			V.trinkets.push("a framed low denomination piece of paper money from your native country");
+		} else if (V.PC.career === "mercenary") {
+			V.trinkets.push("a battered old assault rifle");
+		} else if (V.PC.career === "slaver") {
+			V.trinkets.push("a framed picture of a slave with her sale price scrawled across the bottom");
+		} else if (V.PC.career === "engineer") {
+			V.trinkets.push("an artist's impression of an early arcology design");
+			V.arcologyUpgrade.drones = 1;
+			V.arcologyUpgrade.hydro = 1;
+			if (V.secExpEnabled > 0) {
+				V.secBots.active = 1;
+				V.secBots.troops = 30;
+				V.secBots.maxTroops = 30;
+			}
+		} else if (V.PC.career === "medicine") {
+			V.trinkets.push("a framed postsurgical x-ray");
+			V.surgeryCost = Math.trunc(V.surgeryCost/2);
+		} else if (V.PC.career === "celebrity") {
+			V.trinkets.push("a framed copy of the first news story featuring yourself");
+			repX(4000, "event");
+		} else if (V.PC.career === "arcology owner") {
+			V.trinkets.push("a miniature model of your first arcology");
+			repX(2000, "event");
+		} else if (V.PC.career === "escort") {
+			V.trinkets.push("a copy of the first porno you starred in");
+		} else if (V.PC.career === "servant") {
+			V.trinkets.push("a framed picture of your late Master");
+		} else if (V.PC.career === "gang") {
+			V.trinkets.push("your favorite handgun, whose sight has instilled fear in many");
+		} else if (V.PC.career === "BlackHat") {
+			V.trinkets.push("a news clipping of your first successful live hack");
+		}
+
+		if (V.PC.rumor === "wealth") {
+			cashX(10000, "personalBusiness");
+		} else if (V.PC.rumor === "social engineering") {
+			V.FSAnnounced = 1;
+			V.FSCredits = 1;
+			V.FSGotRepCredits = 1;
+		} else if (V.PC.rumor === "luck") {
+			repX(4000, "event");
+		}
+
+		if (V.PC.visualAge >= 50) {
+			repX(2000, "event");
+		} else if (V.PC.visualAge < 35) {
+			if (V.rep >= 2000) {
+				repX(-2000, "event");
+			} else {
+				/* set rep to zero */
+				repX(forceNeg(Math.abs(V.rep)), "event");
+			}
+		}
+	}
+
+	function initArcologies() {
+		const seed = ["east", "north", "northeast", "northwest", "south", "southeast", "southwest", "west"];
+		const govtypes = ["a committee", "a corporation", "an individual", "an oligarchy", "direct democracy", "elected officials"];
+
+		V.neighboringArcologies = variableAsNumber(V.neighboringArcologies, 0, 8, 3);
+		for (let i = 0; i <= V.neighboringArcologies; i++) {
+			/** @type {FC.ArcologyState} */
+			const newArcology = {name: "", direction: "north", government: "an individual", leaderID: 0, honeymoon: 0, prosperity: 50, ownership: 50, minority: 20, PCminority: 0, demandFactor: 0, FSSupremacist: "unset", FSSupremacistRace: 0, FSSubjugationist: "unset", FSSubjugationistRace: 0, FSGenderRadicalist: "unset", FSGenderFundamentalist: "unset", FSPaternalist: "unset", FSDegradationist: "unset", FSBodyPurist: "unset", FSTransformationFetishist: "unset", FSYouthPreferentialist: "unset", FSMaturityPreferentialist: "unset", FSSlimnessEnthusiast: "unset", FSAssetExpansionist: "unset", FSPastoralist: "unset", FSPhysicalIdealist: "unset", FSChattelReligionist: "unset", FSRomanRevivalist: "unset", FSAztecRevivalist: "unset", FSEgyptianRevivalist: "unset", FSEdoRevivalist: "unset", FSArabianRevivalist: "unset", FSChineseRevivalist: "unset", FSNull: "unset", embargo: 1, embargoTarget: -1, influenceTarget: -1, influenceBonus: 0, CyberEconomic: 1, CyberEconomicTarget: -1, CyberReputation: 1, CyberReputationTarget: -1, rival: 0, FSRestart: "unset", FSRepopulationFocus: "unset", FSHedonisticDecadence: "unset", FSIntellectualDependency: "unset", FSSlaveProfessionalism: "unset", FSPetiteAdmiration: "unset", FSStatuesqueGlorification: "unset", FSCummunism: "unset", FSIncestFetishist: "unset", FSGenderRadicalistResearch: 0, FSGenderFundamentalistResearch: 0, FSPaternalistResearch: 0, FSDegradationistResearch: 0, FSBodyPuristResearch: 0, FSTransformationFetishistResearch: 0, FSYouthPreferentialistResearch: 0, FSMaturityPreferentialistResearch: 0, FSSlimnessEnthusiastResearch: 0, FSAssetExpansionistResearch: 0, FSPastoralistResearch: 0, FSPhysicalIdealistResearch: 0, FSRepopulationFocusResearch: 0, FSRestartResearch: 0, FSHedonisticDecadenceResearch: 0, FSHedonisticDecadenceDietResearch: 0, FSIntellectualDependencyResearch: 0, FSSlaveProfessionalismResearch: 0, FSPetiteAdmirationResearch: 0, FSStatuesqueGlorificationResearch: 0, FSCummunismResearch: 0, FSIncestFetishistResearch: 0};
+			if (i === 0) {
+				newArcology.direction = 0;
+				newArcology.name = "Arcology X-4";
+				newArcology.FSSupremacistDecoration = 20, newArcology.FSSubjugationistDecoration = 20, newArcology.FSGenderRadicalistDecoration = 20, newArcology.FSGenderFundamentalistDecoration = 20, newArcology.FSPaternalistDecoration = 20, newArcology.FSDegradationistDecoration = 20, newArcology.FSBodyPuristDecoration = 20, newArcology.FSTransformationFetishistDecoration = 20, newArcology.FSYouthPreferentialistDecoration = 20, newArcology.FSMaturityPreferentialistDecoration = 20, newArcology.FSSlimnessEnthusiastDecoration = 20, newArcology.FSAssetExpansionistDecoration = 20, newArcology.FSPastoralistDecoration = 20, newArcology.FSPhysicalIdealistDecoration = 20, newArcology.FSChattelReligionistDecoration = 20, newArcology.FSRomanRevivalistDecoration = 20, newArcology.FSAztecRevivalistDecoration = 20, newArcology.FSEgyptianRevivalistDecoration = 20, newArcology.FSEdoRevivalistDecoration = 20, newArcology.FSArabianRevivalistDecoration = 20, newArcology.FSChineseRevivalistDecoration = 20, newArcology.FSRepopulationFocusDecoration = 20, newArcology.FSRestartDecoration = 20, newArcology.FSHedonisticDecadenceDecoration = 20, newArcology.FSIntellectualDependencyDecoration = 20, newArcology.FSSlaveProfessionalismDecoration = 20, newArcology.FSPetiteAdmirationDecoration = 20, newArcology.FSStatuesqueGlorificationDecoration = 20, newArcology.FSCummunismDecoration = 20, newArcology.FSIncestFetishistDecoration = 20;
+				if (V.targetArcology.fs !== "New") {
+					V.FSAnnounced = 1;
+					V.FSGotRepCredits = 1;
+					newArcology.name = V.targetArcology.name;
+					newArcology.prosperity = V.targetArcology.prosperity;
+					V.ACitizens += V.targetArcology.citizens*500;
+					const decoration = V.targetArcology.FSProgress + 10;
+					switch (V.targetArcology.fs) {
+						case "Supremacist":
+							newArcology.FSSupremacist = V.targetArcology.FSProgress;
+							newArcology.FSSupremacistDecoration = decoration;
+							newArcology.FSSupremacistRace = V.targetArcology.race;
+							break;
+						case "Subjugationist":
+							newArcology.FSSubjugationist = V.targetArcology.FSProgress;
+							newArcology.FSSubjugationistDecoration = decoration;
+							newArcology.FSSubjugationistRace = V.targetArcology.race;
+							break;
+						case "GenderRadicalist":
+							newArcology.FSGenderRadicalist = V.targetArcology.FSProgress;
+							newArcology.FSGenderRadicalistDecoration = decoration;
+							break;
+						case "GenderFundamentalist":
+							newArcology.FSGenderFundamentalist = V.targetArcology.FSProgress;
+							newArcology.FSGenderFundamentalistDecoration = decoration;
+							break;
+						case "Paternalist":
+							newArcology.FSPaternalist = V.targetArcology.FSProgress;
+							newArcology.FSPaternalistDecoration = decoration;
+							break;
+						case "Degradationist":
+							newArcology.FSDegradationist = V.targetArcology.FSProgress;
+							newArcology.FSDegradationistDecoration = decoration;
+							break;
+						case "AssetExpansionist":
+							newArcology.FSAssetExpansionist = V.targetArcology.FSProgress;
+							newArcology.FSAssetExpansionistDecoration = decoration;
+							break;
+						case "SlimnessEnthusiast":
+							newArcology.FSSlimnessEnthusiast = V.targetArcology.FSProgress;
+							newArcology.FSSlimnessEnthusiastDecoration = decoration;
+							break;
+						case "TransformationFetishist":
+							newArcology.FSTransformationFetishist = V.targetArcology.FSProgress;
+							newArcology.FSTransformationFetishistDecoration = decoration;
+							break;
+						case "BodyPurist":
+							newArcology.FSBodyPurist = V.targetArcology.FSProgress;
+							newArcology.FSBodyPuristDecoration = decoration;
+							break;
+						case "MaturityPreferentialist":
+							newArcology.FSMaturityPreferentialist = V.targetArcology.FSProgress;
+							newArcology.FSMaturityPreferentialistDecoration = decoration;
+							break;
+						case "YouthPreferentialist":
+							newArcology.FSYouthPreferentialist = V.targetArcology.FSProgress;
+							newArcology.FSYouthPreferentialistDecoration = decoration;
+							break;
+						case "Pastoralist":
+							newArcology.FSPastoralist = V.targetArcology.FSProgress;
+							newArcology.FSPastoralistDecoration = decoration;
+							break;
+						case "PhysicalIdealist":
+							newArcology.FSPhysicalIdealist = V.targetArcology.FSProgress;
+							newArcology.FSPhysicalIdealistDecoration = decoration;
+							break;
+						case "ChattelReligionist":
+							newArcology.FSChattelReligionist = V.targetArcology.FSProgress;
+							newArcology.FSChattelReligionistDecoration = decoration;
+							break;
+						case "RomanRevivalist":
+							newArcology.FSRomanRevivalist = V.targetArcology.FSProgress;
+							newArcology.FSRomanRevivalistDecoration = decoration;
+							break;
+						case "AztecRevivalist":
+							newArcology.FSAztecRevivalist = V.targetArcology.FSProgress;
+							newArcology.FSAztecRevivalistDecoration = decoration;
+							break;
+						case "EgyptianRevivalist":
+							newArcology.FSEgyptianRevivalist = V.targetArcology.FSProgress;
+							newArcology.FSEgyptianRevivalistDecoration = decoration;
+							break;
+						case "EdoRevivalist":
+							newArcology.FSEdoRevivalist = V.targetArcology.FSProgress;
+							newArcology.FSEdoRevivalistDecoration = decoration;
+							break;
+						case "ArabianRevivalist":
+							newArcology.FSArabianRevivalist = V.targetArcology.FSProgress;
+							newArcology.FSArabianRevivalistDecoration = decoration;
+							break;
+						case "ChineseRevivalist":
+							newArcology.FSChineseRevivalist = V.targetArcology.FSProgress;
+							newArcology.FSChineseRevivalistDecoration = decoration;
+							break;
+						case "Eugenics":
+							newArcology.FSRestart = V.targetArcology.FSProgress;
+							newArcology.FSRestartDecoration = decoration;
+							break;
+						case "Repopulationist":
+							newArcology.FSRepopulationFocus = V.targetArcology.FSProgress;
+							newArcology.FSRepopulationFocusDecoration = decoration;
+							break;
+						case "HedonisticDecadence":
+							newArcology.FSHedonisticDecadence = V.targetArcology.FSProgress;
+							newArcology.FSHedonisticDecadenceDecoration = decoration;
+							break;
+						case "IntellectualDependency":
+							newArcology.FSIntellectualDependency = V.targetArcology.FSProgress;
+							newArcology.FSIntellectualDependencyDecoration = decoration;
+							break;
+						case "SlaveProfessionalism":
+							newArcology.FSSlaveProfessionalism = V.targetArcology.FSProgress;
+							newArcology.FSSlaveProfessionalismDecoration = decoration;
+							break;
+						case "PetiteAdmiration":
+							newArcology.FSPetiteAdmiration = V.targetArcology.FSProgress;
+							newArcology.FSPetiteAdmirationDecoration = decoration;
+							break;
+						case "StatuesqueGlorification":
+							newArcology.FSStatuesqueGlorification = V.targetArcology.FSProgress;
+							newArcology.FSStatuesqueGlorificationDecoration = decoration;
+							break;
+						default:
+							newArcology.FSNull = 20;
+					}
+					if (V.PC.rumor === "social engineering") {
+						V.FSGotRepCredits += 1;
+					}
+				} else {
+					newArcology.honeymoon = 20;
+				}
+			} else {
+				if (i < 4) {
+					/* X-4 is reserved for player's arcology, so X-1 is available */
+					newArcology.name = `Arcology X-${i}`;
+				} else {
+					newArcology.name = `Arcology X-${i+1}`;
+				}
+				newArcology.direction = seed.pluck();
+				newArcology.government = govtypes.random();
+				newArcology.prosperity += jsRandom(-20, 20);
+				newArcology.ownership += jsRandom(-10, 0);
+				newArcology.minority += jsRandom(-5, 5);
+			}
+			V.arcologies.push(newArcology);
+		}
+
+		V.arcologies[0].FSSupremacistLawME = 0;
+		V.arcologies[0].FSSupremacistSMR = 0;
+		V.arcologies[0].FSSubjugationistLawME = 0;
+		V.arcologies[0].FSSubjugationistSMR = 0;
+		V.arcologies[0].FSGenderRadicalistLawFuta = 0;
+		V.arcologies[0].FSGenderRadicalistLawBeauty = 0;
+		V.arcologies[0].FSGenderFundamentalistLawBimbo = 0;
+		V.arcologies[0].FSGenderFundamentalistSMR = 0;
+		V.arcologies[0].FSGenderFundamentalistLawBeauty = 0;
+		V.arcologies[0].FSPaternalistLaw = 0;
+		V.arcologies[0].FSPaternalistSMR = 0;
+		V.arcologies[0].FSDegradationistLaw = 0;
+		V.arcologies[0].FSDegradationistSMR = 0;
+		V.arcologies[0].FSBodyPuristLaw = 0;
+		V.arcologies[0].FSBodyPuristSMR = 0;
+		V.arcologies[0].FSTransformationFetishistSMR = 0;
+		V.arcologies[0].FSYouthPreferentialistLaw = 0;
+		V.arcologies[0].FSYouthPreferentialistSMR = 0;
+		V.arcologies[0].FSMaturityPreferentialistLaw = 0;
+		V.arcologies[0].FSMaturityPreferentialistSMR = 0;
+		V.arcologies[0].FSSlimnessEnthusiastSMR = 0;
+		V.arcologies[0].FSSlimnessEnthusiastLaw = 0;
+		V.arcologies[0].FSAssetExpansionistSMR = 0;
+		V.arcologies[0].FSPastoralistLaw = 0;
+		V.arcologies[0].FSPastoralistSMR = 0;
+		V.arcologies[0].FSPhysicalIdealistSMR = 0;
+		V.arcologies[0].FSPhysicalIdealistLaw = 0;
+		V.arcologies[0].FSPhysicalIdealistStrongFat = 0;
+		V.arcologies[0].FSChattelReligionistLaw = 0;
+		V.arcologies[0].FSChattelReligionistSMR = 0;
+		V.arcologies[0].FSChattelReligionistCreed = 0;
+		V.arcologies[0].FSRomanRevivalistLaw = 0;
+		V.arcologies[0].FSRomanRevivalistSMR = 0;
+		V.arcologies[0].FSAztecRevivalistLaw = 0;
+		V.arcologies[0].FSAztecRevivalistSMR = 0;
+		V.arcologies[0].FSEgyptianRevivalistLaw = 0;
+		V.arcologies[0].FSEgyptianRevivalistSMR = 0;
+		V.arcologies[0].FSEdoRevivalistLaw = 0;
+		V.arcologies[0].FSEdoRevivalistSMR = 0;
+		V.arcologies[0].FSArabianRevivalistLaw = 0;
+		V.arcologies[0].FSArabianRevivalistSMR = 0;
+		V.arcologies[0].FSChineseRevivalistLaw = 0;
+		V.arcologies[0].FSChineseRevivalistSMR = 0;
+		V.arcologies[0].FSRepopulationFocusLaw = 0;
+		V.arcologies[0].FSRepopulationFocusSMR = 0;
+		V.arcologies[0].FSRestartLaw = 0;
+		V.arcologies[0].FSRestartSMR = 0;
+		V.arcologies[0].FSHedonisticDecadenceLaw = 0;
+		V.arcologies[0].FSHedonisticDecadenceLaw2 = 0;
+		V.arcologies[0].FSHedonisticDecadenceStrongFat = 0;
+		V.arcologies[0].FSHedonisticDecadenceSMR = 0;
+		V.arcologies[0].FSIntellectualDependencyLaw = 0;
+		V.arcologies[0].FSIntellectualDependencyLawBeauty = 0;
+		V.arcologies[0].FSIntellectualDependencySMR = 0;
+		V.arcologies[0].FSSlaveProfessionalismLaw = 0;
+		V.arcologies[0].FSSlaveProfessionalismSMR = 0;
+		V.arcologies[0].FSPetiteAdmirationLaw = 0;
+		V.arcologies[0].FSPetiteAdmirationLaw2 = 0;
+		V.arcologies[0].FSPetiteAdmirationSMR = 0;
+		V.arcologies[0].FSStatuesqueGlorificationLaw = 0;
+		V.arcologies[0].FSStatuesqueGlorificationLaw2 = 0;
+		V.arcologies[0].FSStatuesqueGlorificationSMR = 0;
+
+		V.arcologies[0].FSGenderRadicalistResearch = 0;
+		V.arcologies[0].FSGenderFundamentalistResearch = 0;
+		V.arcologies[0].FSPaternalistResearch = 0;
+		V.arcologies[0].FSDegradationistResearch = 0;
+		V.arcologies[0].FSBodyPuristResearch = 0;
+		V.arcologies[0].FSTransformationFetishistResearch = 0;
+		V.arcologies[0].FSYouthPreferentialistResearch = 0;
+		V.arcologies[0].FSMaturityPreferentialistResearch = 0;
+		V.arcologies[0].FSSlimnessEnthusiastResearch = 0;
+		V.arcologies[0].FSAssetExpansionistResearch = 0;
+		V.arcologies[0].FSPastoralistResearch = 0;
+		V.arcologies[0].FSPhysicalIdealistResearch = 0;
+		V.arcologies[0].FSRepopulationFocusResearch = 0;
+		V.arcologies[0].FSRestartResearch = 0;
+		V.arcologies[0].FSRestartResearchPassed = 0;
+		V.arcologies[0].FSHedonisticDecadenceResearch = 0;
+		V.arcologies[0].FSHedonisticDecadenceDietResearch = 0;
+		V.arcologies[0].FSCummunismResearch = 0;
+		V.arcologies[0].FSIncestFetishistResearch = 0;
+		V.arcologies[0].FSIntellectualDependencyResearch = 0;
+		V.arcologies[0].FSSlaveProfessionalismResearch = 0;
+		V.arcologies[0].FSPetiteAdmirationResearch = 0;
+		V.arcologies[0].FSStatuesqueGlorificationResearch = 0;
+
+		V.arcologies[0].FSEgyptianRevivalistIncestPolicy = 0;
+		V.arcologies[0].FSEgyptianRevivalistInterest = 0;
+		V.arcologies[0].FSRepopulationFocusPregPolicy = 0;
+		V.arcologies[0].FSRepopulationFocusMilfPolicy = 0;
+		V.arcologies[0].FSRepopulationFocusInterest = 0;
+		V.arcologies[0].FSEugenicsChastityPolicy = 0;
+		V.arcologies[0].FSEugenicsSterilizationPolicy = 0;
+		V.arcologies[0].FSEugenicsInterest = 0;
+
+		V.arcologies[0].childhoodFertilityInducedNCSResearch = 0;
+	}
+
+	if (V.targetArcology.fs !== "New") {
+		V.building = V.targetArcology.building;
+		delete V.targetArcology.building;
+	} else {
+		V.building = App.Arcology.defaultBuilding(V.terrain);
+	}
+	const sellable = V.building.findCells(cell => cell.canBeSold());
+	const random12 = jsRandomMany(sellable, 12);
+	random12.forEach(cell => { cell.owner = 0; });
+
+	if (V.secExpEnabled > 0) {
+		initSecExp();
+	}
+
+	if (V.experimental.food === 1) {
+		if (V.localEcon > 100) {
+			V.farmyardFoodCost = Math.max(5 / (1 + (Math.trunc(1000-100000/V.localEcon)/10)/100), 3.125);
+		} else if (V.localEcon === 100) {
+			V.farmyardFoodCost = 5;
+		} else {
+			V.farmyardFoodCost = Math.min(5 * (1 + 1.5 * Math.sqrt(Math.trunc(100000/V.localEcon-1000)/10)/100), 6.5);
+		}
+	}
+
+	V.minimumSlaveAge = variableAsNumber(V.minimumSlaveAge, 3, 18, 18);
+	V.retirementAge = variableAsNumber(V.retirementAge, 25, 120, 45);
+	V.fertilityAge = variableAsNumber(V.fertilityAge, 3, 18, 13);
+	V.potencyAge = variableAsNumber(V.potencyAge, 3, 18, 13);
+
+	applyPCQualities();
+
+	/* SET STARTING CONDITIONS */
+
+	V.enduringRep = V.rep;
+
+	initArcologies();
+
+	V.HackingSkillMultiplier = upgradeMultiplier('hacking');
+	V.upgradeMultiplierArcology = upgradeMultiplier('engineering');
+	V.upgradeMultiplierMedicine = upgradeMultiplier('medicine');
+	V.upgradeMultiplierTrade = upgradeMultiplier('trading');
+
+	/* Nationalities Setup */
+
+	delete V.nationalitiescheck; /* Removes unique nationalities array to avoid var bloat */
+
+	if (!V.customVariety) {
+		/* If non-custom variety, empties or defines $nationalities */
+		V.nationalities = {};
+	}
+	const needLocalNationalities = !V.customVariety && !V.internationalTrade;
+	if (V.terrain === "oceanic") {
+		if (V.targetArcology.fs !== "Supremacist") {
+			V.arcologies[0].FSSupremacistRace = "white";
+		}
+		if (V.targetArcology.fs !== "Subjugationist") {
+			V.arcologies[0].FSSubjugationistRace = "middle eastern";
+		}
+		if (needLocalNationalities) {
+			// FIXME: equal distributions? probably should use weighted variety instead
+			V.nationalities = arr2obj(setup.baseNationalities);
+		}
+	} else {
+		const continentalDefaults = new Map([
+			["North America",	{supr: "white", subj: "black", preset: "Vanilla North America"}],
+			["South America",	{supr: "latina", subj: "black", preset: "Vanilla South America"}],
+			["Brazil",			{supr: "white", subj: "black", preset: "Vanilla Brazil"}],
+			["the Middle East",	{supr: "middle eastern", subj: "asian", preset: "Vanilla Middle East"}],
+			["Africa",			{supr: "black", subj: "white", preset: "Vanilla Africa"}],
+			["Asia",			{supr: "asian", subj: "indo-aryan", preset: "Vanilla Asia"}],
+			["Europe",			{supr: "white", subj: "middle eastern", preset: "Vanilla Europe"}],
+			["Australia",		{supr: "white", subj: "asian", preset: "Vanilla Australia"}],
+			["Japan",			{supr: "asian", subj: "asian", preset: null}]
+		]);
+
+		const defaults = continentalDefaults.get(V.continent);
+		if (!defaults) {
+			throw `Missing defaults for continent: ${V.continent}`;
+		}
+		if (V.targetArcology.fs !== "Supremacist") {
+			V.arcologies[0].FSSupremacistRace = defaults.supr;
+		}
+		if (V.targetArcology.fs !== "Subjugationist") {
+			V.arcologies[0].FSSubjugationistRace = defaults.subj;
+		}
+		if (needLocalNationalities) {
+			if (V.continent === "Japan") { // special case, no preset for Japan
+				hashPush(V.nationalities, "Japanese", "Japanese", "Japanese");
+			} else {
+				hashMerge(V.nationalities, App.Data.NationalityPresets.Vanilla.get(defaults.preset));
+			}
+		}
+	}
+
+	if (!V.customVariety && V.internationalTrade) {
+		if (V.internationalVariety === 0) { // weighted
+			hashMerge(V.nationalities, App.Data.NationalityPresets.Vanilla.get("Vanilla Global"));
+		} else { // normalized
+			V.nationalities = arr2obj(setup.baseNationalities);
+		}
+	}
+};
diff --git a/src/events/intro/initNationalities.tw b/src/events/intro/initNationalities.tw
deleted file mode 100644
index c60f9a6317264dd2e5f8df6c63f45813fe500c0c..0000000000000000000000000000000000000000
--- a/src/events/intro/initNationalities.tw
+++ /dev/null
@@ -1,915 +0,0 @@
-:: init Nationalities [silently]
-
-<<if $targetArcology.fs !== "New">>
-	<<set $building = $targetArcology.building, delete $targetArcology.building>>
-<<else>>
-	<<set $building = App.Arcology.defaultBuilding($terrain)>>
-<</if>>
-<<set _sellable = $building.findCells(cell => cell.canBeSold())>>
-<<set _random12 = jsRandomMany(_sellable, 12)>>
-<<run _random12.forEach(cell => {cell.owner = 0})>>
-
-<<if $secExpEnabled > 0>>
-	/* base vars */
-	<<set $SecExp = SecExpBase()>>
-	<<run App.SecExp.Check.general()>>
-	<<set $secExp = SecExpBase()>>
-	<<set $secUpgrades = {
-		nanoCams: 0,
-		cyberBots: 0,
-		eyeScan: 0,
-		cryptoAnalyzer: 0,
-		coldstorage: 0}>>
-	<<set $crimeUpgrades = {
-		autoTrial: 0,
-		autoArchive: 0,
-		worldProfiler: 0,
-		advForensic: 0}>>
-	<<set $intelUpgrades = {
-		sensors: 0,
-		radar: 0,
-		signalIntercept: 0}>>
-	<<set $readinessUpgrades = {
-		earlyWarn: 0,
-		rapidPlatforms: 0,
-		pathways: 0,
-		rapidVehicles: 0}>>
-	<<set $riotCenter = 0>>
-	<<set $riotUpgrades = {
-		freeMedia: 0,
-		rapidUnit: 0,
-		rapidUnitSpeed: 0}>>
-	<<set $fort = {
-		reactor: 0,
-		waterway: 0,
-		assistant:0}>>
-	<<set $currentUpgrade = {
-		name: " ",
-		unit: 0,
-		type: 0,
-		time: 0}>>
-	<<set $droneUpgrades = {
-		attack: 0,
-		defense: 0,
-		hp:0}>>
-	<<set $humanUpgrade = {
-		attack: 0,
-		defense: 0,
-		hp:0,
-		morale: 0}>>
-	<<set $sellTo = {
-		citizen: 1,
-		raiders: 1,
-		oldWorld: 1,
-		FC: 1}>>
-	<<set $garrison = {
-		penthouse: 0,
-		reactor: 0,
-		assistant: 0,
-		waterway: 0,
-		reactorTime: 0,
-		assistantTime: 0,
-		waterwayTime: 0 }>>
-	<<if $wasToggledBefore == 0>>
-		<<if $mercenaries == 1>>
-			<<set $mercFreeManpower = random(5,20)>>
-		<<elseif $mercenaries > 1>>
-			<<set $mercFreeManpower = random(10,30)>>
-		<</if>>
-	<</if>>
-
-	/* battle relevant variables */
-	<<set $secBots = {
-		active: 0,
-		ID: -1,
-		isDeployed: 0,
-		troops: 0,
-		maxTroops: 0,
-		equip: 0} >>
-<</if>>
-<<if $experimental.food == 1>>
-	<<if $localEcon > 100>>
-		<<set $farmyardFoodCost = Math.max(5 / (1 + (Math.trunc(1000-100000/$localEcon)/10)/100), 3.125)>>
-	<<elseif $localEcon == 100>>
-		<<set $farmyardFoodCost = 5 >>
-	<<else>>
-		<<set $farmyardFoodCost = Math.min(5 * (1 + 1.5 * Math.sqrt(Math.trunc(100000/$localEcon-1000)/10)/100), 6.5)>>
-	<</if>>
-<</if>>
-
-<<set $minimumSlaveAge = variableAsNumber($minimumSlaveAge, 3, 18, 18)>>
-<<set $retirementAge = variableAsNumber($retirementAge, 25, 120, 45)>>
-<<set $fertilityAge = variableAsNumber($fertilityAge, 3, 18, 13)>>
-<<set $potencyAge = variableAsNumber($potencyAge, 3, 18, 13)>>
-
-/*PC qualities application*/
-
-<<run generatePlayerPronouns($PC)>>
-
-<<if $PC.career == "wealth">>
-	<<set $trinkets.push("a collection of diplomas from expensive schools")>>
-	<<run cashX(10000, "personalBusiness")>>
-<<elseif $PC.career == "capitalist">>
-	<<set $trinkets.push("a framed low denomination piece of paper money from your native country")>>
-<<elseif $PC.career == "mercenary">>
-	<<set $trinkets.push("a battered old assault rifle")>>
-<<elseif $PC.career == "slaver">>
-	<<set $trinkets.push("a framed picture of a slave with her sale price scrawled across the bottom")>>
-<<elseif $PC.career == "engineer">>
-	<<set $trinkets.push("an artist's impression of an early arcology design")>>
-	<<set $arcologyUpgrade.drones = 1, $arcologyUpgrade.hydro = 1>>
-	<<if $secExpEnabled > 0>>
-		<<set $secBots.active = 1, $secBots.troops = 30, $secBots.maxTroops = 30>>
-	<</if>>
-<<elseif $PC.career == "medicine">>
-	<<set $trinkets.push("a framed postsurgical x-ray")>>
-	<<set $surgeryCost = Math.trunc($surgeryCost/2)>>
-<<elseif $PC.career == "celebrity">>
-	<<set $trinkets.push("a framed copy of the first news story featuring yourself")>>
-	<<run repX(4000, "event")>>
-<<elseif $PC.career == "arcology owner">>
-	<<set $trinkets.push("a miniature model of your first arcology")>>
-	<<run repX(2000, "event")>>
-<<elseif $PC.career == "escort">>
-	<<set $trinkets.push("a copy of the first porno you starred in")>>
-<<elseif $PC.career == "servant">>
-	<<set $trinkets.push("a framed picture of your late Master")>>
-<<elseif $PC.career == "gang">>
-	<<set $trinkets.push("your favorite handgun, whose sight has instilled fear in many")>>
-<<elseif $PC.career == "BlackHat">>
-	<<set $trinkets.push("a news clipping of your first successful live hack")>>
-<</if>>
-
-<<if $PC.rumor == "wealth">>
-	<<run cashX(10000, "personalBusiness")>>
-<<elseif $PC.rumor == "social engineering">>
-	<<set $FSAnnounced = 1>>
-	<<set $FSCredits = 1>>
-	<<set $FSGotRepCredits = 1>>
-<<elseif $PC.rumor == "luck">>
-	<<run repX(4000, "event")>>
-<</if>>
-
-<<if $PC.visualAge >= 50>>
-	<<run repX(2000, "event")>>
-<<elseif $PC.visualAge < 35>>
-	<<if $rep >= 2000>>
-		<<run repX(-2000, "event")>>
-	<<else>>
-		<<run repX(forceNeg(Math.abs($rep)), "event")>> /*set rep to zero */
-	<</if>>
-<</if>>
-
-/* SET STARTING CONDITIONS */
-
-<<set $enduringRep = $rep>>
-
-<<set _seed = ["east", "north", "northeast", "northwest", "south", "southeast", "southwest", "west"]>>
-<<set _govtypes = ["a committee", "a corporation", "an individual", "an oligarchy", "direct democracy", "elected officials"]>>
-
-<<set $neighboringArcologies = variableAsNumber($neighboringArcologies, 0, 8, 3)>>
-<<for $i = 0; $i <= $neighboringArcologies; $i++>>
-	<<set _newArcology = {name: "Arcology X-", direction: "north", government: "an individual", leaderID: 0, honeymoon: 0, prosperity: 50, ownership: 50, minority: 20, PCminority: 0, demandFactor: 0, FSSupremacist: "unset", FSSupremacistRace: 0, FSSubjugationist: "unset", FSSubjugationistRace: 0, FSGenderRadicalist: "unset", FSGenderFundamentalist: "unset", FSPaternalist: "unset", FSDegradationist: "unset", FSBodyPurist: "unset", FSTransformationFetishist: "unset", FSYouthPreferentialist: "unset", FSMaturityPreferentialist: "unset", FSSlimnessEnthusiast: "unset", FSAssetExpansionist: "unset", FSPastoralist: "unset", FSPhysicalIdealist: "unset", FSChattelReligionist: "unset", FSRomanRevivalist: "unset", FSAztecRevivalist: "unset", FSEgyptianRevivalist: "unset", FSEdoRevivalist: "unset", FSArabianRevivalist: "unset", FSChineseRevivalist: "unset", FSNull: "unset", embargo: 1, embargoTarget: -1, influenceTarget: -1, influenceBonus: 0, CyberEconomic: 1, CyberEconomicTarget: -1, CyberReputation: 1, CyberReputationTarget: -1, rival: 0, FSRestart: "unset", FSRepopulationFocus: "unset", FSHedonisticDecadence: "unset", FSIntellectualDependency: "unset", FSSlaveProfessionalism: "unset", FSPetiteAdmiration: "unset", FSStatuesqueGlorification: "unset", FSCummunism: "unset", FSIncestFetishist: "unset", FSGenderRadicalistResearch: 0, FSGenderFundamentalistResearch: 0, FSPaternalistResearch: 0, FSDegradationistResearch: 0, FSBodyPuristResearch: 0, FSTransformationFetishistResearch: 0, FSYouthPreferentialistResearch: 0, FSMaturityPreferentialistResearch: 0, FSSlimnessEnthusiastResearch: 0, FSAssetExpansionistResearch: 0, FSPastoralistResearch: 0, FSPhysicalIdealistResearch: 0, FSRepopulationFocusResearch: 0, FSRestartResearch: 0, FSHedonisticDecadenceResearch: 0, FSHedonisticDecadenceDietResearch: 0, FSIntellectualDependencyResearch: 0, FSSlaveProfessionalismResearch: 0, FSPetiteAdmirationResearch: 0, FSStatuesqueGlorificationResearch: 0, FSCummunismResearch: 0, FSIncestFetishistResearch: 0}>>
-	<<if $i == 0>>
-		<<set _newArcology.direction = 0>>
-		<<set _newArcology.name = "Arcology X-4">>
-		<<set _newArcology.FSSupremacistDecoration = 20, _newArcology.FSSubjugationistDecoration = 20, _newArcology.FSGenderRadicalistDecoration = 20, _newArcology.FSGenderFundamentalistDecoration = 20, _newArcology.FSPaternalistDecoration = 20, _newArcology.FSDegradationistDecoration = 20, _newArcology.FSBodyPuristDecoration = 20, _newArcology.FSTransformationFetishistDecoration = 20, _newArcology.FSYouthPreferentialistDecoration = 20, _newArcology.FSMaturityPreferentialistDecoration = 20, _newArcology.FSSlimnessEnthusiastDecoration = 20, _newArcology.FSAssetExpansionistDecoration = 20, _newArcology.FSPastoralistDecoration = 20, _newArcology.FSPhysicalIdealistDecoration = 20, _newArcology.FSChattelReligionistDecoration = 20, _newArcology.FSRomanRevivalistDecoration = 20, _newArcology.FSAztecRevivalistDecoration = 20, _newArcology.FSEgyptianRevivalistDecoration = 20, _newArcology.FSEdoRevivalistDecoration = 20, _newArcology.FSArabianRevivalistDecoration = 20, _newArcology.FSChineseRevivalistDecoration = 20, _newArcology.FSRepopulationFocusDecoration = 20, _newArcology.FSRestartDecoration = 20, _newArcology.FSHedonisticDecadenceDecoration = 20, _newArcology.FSIntellectualDependencyDecoration = 20, _newArcology.FSSlaveProfessionalismDecoration = 20, _newArcology.FSPetiteAdmirationDecoration = 20, _newArcology.FSStatuesqueGlorificationDecoration = 20, _newArcology.FSCummunismDecoration = 20, _newArcology.FSIncestFetishistDecoration = 20>>
-		<<if $targetArcology.fs != "New">>
-			<<set $FSAnnounced = 1>>
-			<<set $FSGotRepCredits = 1>>
-			<<set _newArcology.name = $targetArcology.name, _newArcology.prosperity = $targetArcology.prosperity, $ACitizens += $targetArcology.citizens*500>>
-			<<set _decoration = $targetArcology.FSProgress + 10>>
-			<<switch $targetArcology.fs>>
-			<<case "Supremacist">>
-				<<set _newArcology.FSSupremacist = $targetArcology.FSProgress, _newArcology.FSSupremacistDecoration = _decoration, _newArcology.FSSupremacistRace = $targetArcology.race>>
-			<<case "Subjugationist">>
-				<<set _newArcology.FSSubjugationist = $targetArcology.FSProgress, _newArcology.FSSubjugationistDecoration = _decoration, _newArcology.FSSubjugationistRace = $targetArcology.race>>
-			<<case "GenderRadicalist">>
-				<<set _newArcology.FSGenderRadicalist = $targetArcology.FSProgress, _newArcology.FSGenderRadicalistDecoration = _decoration>>
-			<<case "GenderFundamentalist">>
-				<<set _newArcology.FSGenderFundamentalist = $targetArcology.FSProgress, _newArcology.FSGenderFundamentalistDecoration = _decoration>>
-			<<case "Paternalist">>
-				<<set _newArcology.FSPaternalist = $targetArcology.FSProgress, _newArcology.FSPaternalistDecoration = _decoration>>
-			<<case "Degradationist">>
-				<<set _newArcology.FSDegradationist = $targetArcology.FSProgress, _newArcology.FSDegradationistDecoration = _decoration>>
-			<<case "AssetExpansionist">>
-				<<set _newArcology.FSAssetExpansionist = $targetArcology.FSProgress, _newArcology.FSAssetExpansionistDecoration = _decoration>>
-			<<case "SlimnessEnthusiast">>
-				<<set _newArcology.FSSlimnessEnthusiast = $targetArcology.FSProgress, _newArcology.FSSlimnessEnthusiastDecoration = _decoration>>
-			<<case "TransformationFetishist">>
-				<<set _newArcology.FSTransformationFetishist = $targetArcology.FSProgress, _newArcology.FSTransformationFetishistDecoration = _decoration>>
-			<<case "BodyPurist">>
-				<<set _newArcology.FSBodyPurist = $targetArcology.FSProgress, _newArcology.FSBodyPuristDecoration = _decoration>>
-			<<case "MaturityPreferentialist">>
-				<<set _newArcology.FSMaturityPreferentialist = $targetArcology.FSProgress, _newArcology.FSMaturityPreferentialistDecoration = _decoration>>
-			<<case "YouthPreferentialist">>
-				<<set _newArcology.FSYouthPreferentialist = $targetArcology.FSProgress, _newArcology.FSYouthPreferentialistDecoration = _decoration>>
-			<<case "Pastoralist">>
-				<<set _newArcology.FSPastoralist = $targetArcology.FSProgress, _newArcology.FSPastoralistDecoration = _decoration>>
-			<<case "PhysicalIdealist">>
-				<<set _newArcology.FSPhysicalIdealist = $targetArcology.FSProgress, _newArcology.FSPhysicalIdealistDecoration = _decoration>>
-			<<case "ChattelReligionist">>
-				<<set _newArcology.FSChattelReligionist = $targetArcology.FSProgress, _newArcology.FSChattelReligionistDecoration = _decoration>>
-			<<case "RomanRevivalist">>
-				<<set _newArcology.FSRomanRevivalist = $targetArcology.FSProgress, _newArcology.FSRomanRevivalistDecoration = _decoration>>
-			<<case "AztecRevivalist">>
-				<<set _newArcology.FSAztecRevivalist = $targetArcology.FSProgress, _newArcology.FSAztecRevivalistDecoration = _decoration>>
-			<<case "EgyptianRevivalist">>
-				<<set _newArcology.FSEgyptianRevivalist = $targetArcology.FSProgress, _newArcology.FSEgyptianRevivalistDecoration = _decoration>>
-			<<case "EdoRevivalist">>
-				<<set _newArcology.FSEdoRevivalist = $targetArcology.FSProgress, _newArcology.FSEdoRevivalistDecoration = _decoration>>
-			<<case "ArabianRevivalist">>
-				<<set _newArcology.FSArabianRevivalist = $targetArcology.FSProgress, _newArcology.FSArabianRevivalistDecoration = _decoration>>
-			<<case "ChineseRevivalist">>
-				<<set _newArcology.FSChineseRevivalist = $targetArcology.FSProgress, _newArcology.FSChineseRevivalistDecoration = _decoration>>
-			<<case "Eugenics">>
-				<<set _newArcology.FSRestart = $targetArcology.FSProgress, _newArcology.FSRestartDecoration = _decoration>>
-			<<case "Repopulationist">>
-				<<set _newArcology.FSRepopulationFocus = $targetArcology.FSProgress, _newArcology.FSRepopulationFocusDecoration = _decoration>>
-			<<case "HedonisticDecadence">>
-				<<set _newArcology.FSHedonisticDecadence = $targetArcology.FSProgress, _newArcology.FSHedonisticDecadenceDecoration = _decoration>>
-			<<case "IntellectualDependency">>
-				<<set _newArcology.FSIntellectualDependency = $targetArcology.FSProgress, _newArcology.FSIntellectualDependencyDecoration = _decoration>>
-			<<case "SlaveProfessionalism">>
-				<<set _newArcology.FSSlaveProfessionalism = $targetArcology.FSProgress, _newArcology.FSSlaveProfessionalismDecoration = _decoration>>
-			<<case "PetiteAdmiration">>
-				<<set _newArcology.FSPetiteAdmiration = $targetArcology.FSProgress, _newArcology.FSPetiteAdmirationDecoration = _decoration>>
-			<<case "StatuesqueGlorification">>
-				<<set _newArcology.FSStatuesqueGlorification = $targetArcology.FSProgress, _newArcology.FSStatuesqueGlorificationDecoration = _decoration>>
-			<<default>>
-				<<set _newArcology.FSNull = 20>>
-			<</switch>>
-			<<if $PC.rumor == "social engineering">>
-				<<set $FSGotRepCredits += 1>>
-			<</if>>
-		<<else>>
-			<<set _newArcology.honeymoon = 20>>
-		<</if>>
-	<<else>>
-		<<if $i < 4>> /* X-4 is reserved for player's arcology, so X-1 is available */
-			<<set _newArcology.name = _newArcology.name+($i)>>
-		<<else>>
-			<<set _newArcology.name = _newArcology.name+($i+1)>>
-		<</if>>
-		<<set _newArcology.direction = _seed.pluck()>>
-		<<set _newArcology.government = _govtypes.random()>>
-		<<set _newArcology.prosperity += random(-20,20)>>
-		<<set _newArcology.ownership += random(-10,0)>>
-		<<set _newArcology.minority += random(-5,5)>>
-	<</if>>
-	<<set $arcologies.push(_newArcology)>>
-<</for>>
-
-<<set $arcologies[0].FSSupremacistLawME = 0>>
-<<set $arcologies[0].FSSupremacistSMR = 0>>
-<<set $arcologies[0].FSSubjugationistLawME = 0>>
-<<set $arcologies[0].FSSubjugationistSMR = 0>>
-<<set $arcologies[0].FSGenderRadicalistLawFuta = 0>>
-<<set $arcologies[0].FSGenderRadicalistLawBeauty = 0>>
-<<set $arcologies[0].FSGenderFundamentalistLawBimbo = 0>>
-<<set $arcologies[0].FSGenderFundamentalistSMR = 0>>
-<<set $arcologies[0].FSGenderFundamentalistLawBeauty = 0>>
-<<set $arcologies[0].FSPaternalistLaw = 0>>
-<<set $arcologies[0].FSPaternalistSMR = 0>>
-<<set $arcologies[0].FSDegradationistLaw = 0>>
-<<set $arcologies[0].FSDegradationistSMR = 0>>
-<<set $arcologies[0].FSBodyPuristLaw = 0>>
-<<set $arcologies[0].FSBodyPuristSMR = 0>>
-<<set $arcologies[0].FSTransformationFetishistSMR = 0>>
-<<set $arcologies[0].FSYouthPreferentialistLaw = 0>>
-<<set $arcologies[0].FSYouthPreferentialistSMR = 0>>
-<<set $arcologies[0].FSMaturityPreferentialistLaw = 0>>
-<<set $arcologies[0].FSMaturityPreferentialistSMR = 0>>
-<<set $arcologies[0].FSSlimnessEnthusiastSMR = 0>>
-<<set $arcologies[0].FSSlimnessEnthusiastLaw = 0>>
-<<set $arcologies[0].FSAssetExpansionistSMR = 0>>
-<<set $arcologies[0].FSPastoralistLaw = 0>>
-<<set $arcologies[0].FSPastoralistSMR = 0>>
-<<set $arcologies[0].FSPhysicalIdealistSMR = 0>>
-<<set $arcologies[0].FSPhysicalIdealistLaw = 0>>
-<<set $arcologies[0].FSPhysicalIdealistStrongFat = 0>>
-<<set $arcologies[0].FSChattelReligionistLaw = 0>>
-<<set $arcologies[0].FSChattelReligionistSMR = 0>>
-<<set $arcologies[0].FSChattelReligionistCreed = 0>>
-<<set $arcologies[0].FSRomanRevivalistLaw = 0>>
-<<set $arcologies[0].FSRomanRevivalistSMR = 0>>
-<<set $arcologies[0].FSAztecRevivalistLaw = 0>>
-<<set $arcologies[0].FSAztecRevivalistSMR = 0>>
-<<set $arcologies[0].FSEgyptianRevivalistLaw = 0>>
-<<set $arcologies[0].FSEgyptianRevivalistSMR = 0>>
-<<set $arcologies[0].FSEdoRevivalistLaw = 0>>
-<<set $arcologies[0].FSEdoRevivalistSMR = 0>>
-<<set $arcologies[0].FSArabianRevivalistLaw = 0>>
-<<set $arcologies[0].FSArabianRevivalistSMR = 0>>
-<<set $arcologies[0].FSChineseRevivalistLaw = 0>>
-<<set $arcologies[0].FSChineseRevivalistSMR = 0>>
-<<set $arcologies[0].FSRepopulationFocusLaw = 0>>
-<<set $arcologies[0].FSRepopulationFocusSMR = 0>>
-<<set $arcologies[0].FSRestartLaw = 0>>
-<<set $arcologies[0].FSRestartSMR = 0>>
-<<set $arcologies[0].FSHedonisticDecadenceLaw = 0>>
-<<set $arcologies[0].FSHedonisticDecadenceLaw2 = 0>>
-<<set $arcologies[0].FSHedonisticDecadenceStrongFat = 0>>
-<<set $arcologies[0].FSHedonisticDecadenceSMR = 0>>
-<<set $arcologies[0].FSIntellectualDependencyLaw = 0>>
-<<set $arcologies[0].FSIntellectualDependencyLawBeauty = 0>>
-<<set $arcologies[0].FSIntellectualDependencySMR = 0>>
-<<set $arcologies[0].FSSlaveProfessionalismLaw = 0>>
-<<set $arcologies[0].FSSlaveProfessionalismSMR = 0>>
-<<set $arcologies[0].FSPetiteAdmirationLaw = 0>>
-<<set $arcologies[0].FSPetiteAdmirationLaw2 = 0>>
-<<set $arcologies[0].FSPetiteAdmirationSMR = 0>>
-<<set $arcologies[0].FSStatuesqueGlorificationLaw = 0>>
-<<set $arcologies[0].FSStatuesqueGlorificationLaw2 = 0>>
-<<set $arcologies[0].FSStatuesqueGlorificationSMR = 0>>
-
-<<set $arcologies[0].FSGenderRadicalistResearch = 0>>
-<<set $arcologies[0].FSGenderFundamentalistResearch = 0>>
-<<set $arcologies[0].FSPaternalistResearch = 0>>
-<<set $arcologies[0].FSDegradationistResearch = 0>>
-<<set $arcologies[0].FSBodyPuristResearch = 0>>
-<<set $arcologies[0].FSTransformationFetishistResearch = 0>>
-<<set $arcologies[0].FSYouthPreferentialistResearch = 0>>
-<<set $arcologies[0].FSMaturityPreferentialistResearch = 0>>
-<<set $arcologies[0].FSSlimnessEnthusiastResearch = 0>>
-<<set $arcologies[0].FSAssetExpansionistResearch = 0>>
-<<set $arcologies[0].FSPastoralistResearch = 0>>
-<<set $arcologies[0].FSPhysicalIdealistResearch = 0>>
-<<set $arcologies[0].FSRepopulationFocusResearch = 0>>
-<<set $arcologies[0].FSRestartResearch = 0>>
-<<set $arcologies[0].FSRestartResearchPassed = 0>>
-<<set $arcologies[0].FSHedonisticDecadenceResearch = 0>>
-<<set $arcologies[0].FSHedonisticDecadenceDietResearch = 0>>
-<<set $arcologies[0].FSCummunismResearch = 0>>
-<<set $arcologies[0].FSIncestFetishistResearch = 0>>
-<<set $arcologies[0].FSIntellectualDependencyResearch = 0>>
-<<set $arcologies[0].FSSlaveProfessionalismResearch = 0>>
-<<set $arcologies[0].FSPetiteAdmirationResearch = 0>>
-<<set $arcologies[0].FSStatuesqueGlorificationResearch = 0>>
-
-<<set $arcologies[0].FSEgyptianRevivalistIncestPolicy = 0>>
-<<set $arcologies[0].FSEgyptianRevivalistInterest = 0>>
-<<set $arcologies[0].FSRepopulationFocusPregPolicy = 0>>
-<<set $arcologies[0].FSRepopulationFocusMilfPolicy = 0>>
-<<set $arcologies[0].FSRepopulationFocusInterest = 0>>
-<<set $arcologies[0].FSEugenicsChastityPolicy = 0>>
-<<set $arcologies[0].FSEugenicsSterilizationPolicy = 0>>
-<<set $arcologies[0].FSEugenicsInterest = 0>>
-
-<<set $arcologies[0].childhoodFertilityInducedNCSResearch = 0>>
-
-<<set $HackingSkillMultiplier = upgradeMultiplier('hacking')>>
-<<set $upgradeMultiplierArcology = upgradeMultiplier('engineering')>>
-<<set $upgradeMultiplierMedicine = upgradeMultiplier('medicine')>>
-<<set $upgradeMultiplierTrade = upgradeMultiplier('trading')>>
-
-/*Nationalities Setup*/
-
-<<unset $nationalitiescheck>> /* Removes unique nationalities array to avoid var bloat */
-
-<<if ndef $customVariety>> /* If non-custom variety, empties or defines $nationalities */
-	<<set $nationalities = {}>>
-<</if>>
-<<if $terrain == "oceanic">>
-	<<if ndef $customVariety>>
-		<<set $nationalities = arr2obj(setup.baseNationalities)>>
-	<</if>>
-	<<if $targetArcology.fs != "Supremacist">>
-		<<set $arcologies[0].FSSupremacistRace = "white">>
-	<</if>>
-	<<if $targetArcology.fs != "Subjugationist">>
-		<<set $arcologies[0].FSSubjugationistRace = "middle eastern">>
-	<</if>>
-<<else>>
-	<<switch $continent>>
-	<<case "North America">>
-		<<if $targetArcology.fs != "Supremacist">>
-			<<set $arcologies[0].FSSupremacistRace = "white">>
-		<</if>>
-		<<if $targetArcology.fs != "Subjugationist">>
-			<<set $arcologies[0].FSSubjugationistRace = "black">>
-		<</if>>
-		<<if ndef $customVariety>> /* If non-custom variety, adds regional $nationalities */
-			<<set hashPush($nationalities, "American", "American", "American", "American", "American", "American")>>
-			<<set hashPush($nationalities, "Antiguan")>>
-			<<set hashPush($nationalities, "Aruban")>>
-			<<set hashPush($nationalities, "Bahamian")>>
-			<<set hashPush($nationalities, "Barbadian")>>
-			<<set hashPush($nationalities, "Belizean")>>
-			<<set hashPush($nationalities, "Bermudian")>>
-			<<set hashPush($nationalities, "Canadian", "Canadian")>>
-			<<set hashPush($nationalities, "Costa Rican")>>
-			<<set hashPush($nationalities, "Cuban", "Cuban")>>
-			<<set hashPush($nationalities, "Curaçaoan")>>
-			<<set hashPush($nationalities, "Dominican", "Dominican")>>
-			<<set hashPush($nationalities, "Dominiquais")>>
-			<<set hashPush($nationalities, "Greenlandic")>>
-			<<set hashPush($nationalities, "Grenadian")>>
-			<<set hashPush($nationalities, "Guatemalan")>>
-			<<set hashPush($nationalities, "Haitian", "Haitian")>>
-			<<set hashPush($nationalities, "Honduran")>>
-			<<set hashPush($nationalities, "Jamaican")>>
-			<<set hashPush($nationalities, "Kittitian")>>
-			<<set hashPush($nationalities, "Mexican", "Mexican", "Mexican", "Mexican")>>
-			<<set hashPush($nationalities, "Nicaraguan", "Nicaraguan")>>
-			<<set hashPush($nationalities, "Panamanian")>>
-			<<set hashPush($nationalities, "Puerto Rican")>>
-			<<set hashPush($nationalities, "Saint Lucian")>>
-			<<set hashPush($nationalities, "Salvadoran", "Salvadoran")>>
-			<<set hashPush($nationalities, "Trinidadian")>>
-			<<set hashPush($nationalities, "Vincentian")>>
-		<</if>>
-	<<case "South America">>
-		<<if $targetArcology.fs != "Supremacist">>
-			<<set $arcologies[0].FSSupremacistRace = "latina">>
-		<</if>>
-		<<if $targetArcology.fs != "Subjugationist">>
-			<<set $arcologies[0].FSSubjugationistRace = "black">>
-		<</if>>
-		<<if ndef $customVariety>>
-			<<set hashPush($nationalities, "Argentinian", "Argentinian", "Argentinian")>>
-			<<set hashPush($nationalities, "Bolivian", "Bolivian")>>
-			<<set hashPush($nationalities, "Brazilian", "Brazilian", "Brazilian", "Brazilian")>>
-			<<set hashPush($nationalities, "Chilean", "Chilean")>>
-			<<set hashPush($nationalities, "Colombian", "Colombian", "Colombian")>>
-			<<set hashPush($nationalities, "Ecuadorian")>>
-			<<set hashPush($nationalities, "French Guianan")>>
-			<<set hashPush($nationalities, "Guyanese")>>
-			<<set hashPush($nationalities, "Paraguayan")>>
-			<<set hashPush($nationalities, "Peruvian", "Peruvian")>>
-			<<set hashPush($nationalities, "Surinamese")>>
-			<<set hashPush($nationalities, "Uruguayan")>>
-			<<set hashPush($nationalities, "Venezuelan", "Venezuelan", "Venezuelan")>>
-		<</if>>
-	<<case "Brazil">>
-		<<if $targetArcology.fs != "Supremacist">>
-			<<set $arcologies[0].FSSupremacistRace = "white">>
-		<</if>>
-		<<if $targetArcology.fs != "Subjugationist">>
-			<<set $arcologies[0].FSSubjugationistRace = "black">>
-		<</if>>
-		<<if ndef $customVariety>>
-			<<set hashPush($nationalities, "Argentinian", "Argentinian", "Argentinian", "Argentinian")>>
-			<<set hashPush($nationalities, "Bolivian", "Bolivian")>>
-			<<set hashPush($nationalities, "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian", "Brazilian")>>
-			<<set hashPush($nationalities, "Chilean", "Chilean")>>
-			<<set hashPush($nationalities, "Colombian", "Colombian", "Colombian")>>
-			<<set hashPush($nationalities, "Ecuadorian")>>
-			<<set hashPush($nationalities, "French Guianan")>>
-			<<set hashPush($nationalities, "Guyanese")>>
-			<<set hashPush($nationalities, "Paraguayan")>>
-			<<set hashPush($nationalities, "Peruvian", "Peruvian")>>
-			<<set hashPush($nationalities, "Surinamese")>>
-			<<set hashPush($nationalities, "Uruguayan", "Uruguayan")>>
-			<<set hashPush($nationalities, "Venezuelan", "Venezuelan", "Venezuelan")>>
-		<</if>>
-	<<case "the Middle East">>
-		<<if $targetArcology.fs != "Supremacist">>
-			<<set $arcologies[0].FSSupremacistRace = "middle eastern">>
-		<</if>>
-		<<if $targetArcology.fs != "Subjugationist">>
-			<<set $arcologies[0].FSSubjugationistRace = "asian">>
-		<</if>>
-		<<if ndef $customVariety>>
-			<<set hashPush($nationalities, "Afghan", "Afghan")>>
-			<<set hashPush($nationalities, "Armenian", "Armenian")>>
-			<<set hashPush($nationalities, "Azerbaijani")>>
-			<<set hashPush($nationalities, "Bahraini")>>
-			<<set hashPush($nationalities, "Cypriot")>>
-			<<set hashPush($nationalities, "Egyptian", "Egyptian", "Egyptian")>>
-			<<set hashPush($nationalities, "Emirati", "Emirati")>>
-			<<set hashPush($nationalities, "Georgian")>>
-			<<set hashPush($nationalities, "Iranian", "Iranian", "Iranian")>>
-			<<set hashPush($nationalities, "Iraqi", "Iraqi")>>
-			<<set hashPush($nationalities, "Israeli", "Israeli")>>
-			<<set hashPush($nationalities, "Jordanian", "Jordanian")>>
-			<<set hashPush($nationalities, "Kurdish")>>
-			<<set hashPush($nationalities, "Kuwaiti")>>
-			<<set hashPush($nationalities, "Lebanese", "Lebanese")>>
-			<<set hashPush($nationalities, "Omani", "Omani")>>
-			<<set hashPush($nationalities, "Palestinian")>>
-			<<set hashPush($nationalities, "Qatari")>>
-			<<set hashPush($nationalities, "Saudi", "Saudi")>>
-			<<set hashPush($nationalities, "Syrian")>>
-			<<set hashPush($nationalities, "Turkish", "Turkish", "Turkish")>>
-			<<set hashPush($nationalities, "Yemeni", "Yemeni")>>
-		<</if>>
-	<<case "Africa">>
-		<<if $targetArcology.fs != "Supremacist">>
-			<<set $arcologies[0].FSSupremacistRace = "black">>
-		<</if>>
-		<<if $targetArcology.fs != "Subjugationist">>
-			<<set $arcologies[0].FSSubjugationistRace = "white">>
-		<</if>>
-		<<if ndef $customVariety>>
-			<<set hashPush($nationalities, "Algerian", "Algerian", "Algerian")>>
-			<<set hashPush($nationalities, "Angolan")>>
-			<<set hashPush($nationalities, "Beninese")>>
-			<<set hashPush($nationalities, "Bissau-Guinean")>>
-			<<set hashPush($nationalities, "Burkinabé")>>
-			<<set hashPush($nationalities, "Burundian")>>
-			<<set hashPush($nationalities, "Cameroonian")>>
-			<<set hashPush($nationalities, "Cape Verdean")>>
-			<<set hashPush($nationalities, "Central African")>>
-			<<set hashPush($nationalities, "Chadian")>>
-			<<set hashPush($nationalities, "Comorian")>>
-			<<set hashPush($nationalities, "Congolese")>>
-			<<set hashPush($nationalities, "Djiboutian")>>
-			<<set hashPush($nationalities, "Equatoguinean")>>
-			<<set hashPush($nationalities, "Eritrean")>>
-			<<set hashPush($nationalities, "Ethiopian", "Ethiopian", "Ethiopian")>>
-			<<set hashPush($nationalities, "Gabonese")>>
-			<<set hashPush($nationalities, "Gambian")>>
-			<<set hashPush($nationalities, "Ghanan", "Ghanan")>>
-			<<set hashPush($nationalities, "Guinean")>>
-			<<set hashPush($nationalities, "Ivorian")>>
-			<<set hashPush($nationalities, "Kenyan", "Kenyan", "Kenyan")>>
-			<<set hashPush($nationalities, "Liberian")>>
-			<<set hashPush($nationalities, "Libyan", "Libyan")>>
-			<<set hashPush($nationalities, "Malagasy")>>
-			<<set hashPush($nationalities, "Malawian")>>
-			<<set hashPush($nationalities, "Malian", "Malian")>>
-			<<set hashPush($nationalities, "Mauritanian")>>
-			<<set hashPush($nationalities, "Mauritian")>>
-			<<set hashPush($nationalities, "Moroccan", "Moroccan")>>
-			<<set hashPush($nationalities, "Mosotho")>>
-			<<set hashPush($nationalities, "Motswana")>>
-			<<set hashPush($nationalities, "Mozambican")>>
-			<<set hashPush($nationalities, "Namibian")>>
-			<<set hashPush($nationalities, "Nigerian", "Nigerian", "Nigerian", "Nigerian")>>
-			<<set hashPush($nationalities, "Nigerien", "Nigerien")>>
-			<<set hashPush($nationalities, "Rwandan")>>
-			<<set hashPush($nationalities, "Sahrawi")>>
-			<<set hashPush($nationalities, "São Toméan")>>
-			<<set hashPush($nationalities, "Senegalese")>>
-			<<set hashPush($nationalities, "Seychellois")>>
-			<<set hashPush($nationalities, "Sierra Leonean")>>
-			<<set hashPush($nationalities, "Somali")>>
-			<<set hashPush($nationalities, "South African", "South African", "South African", "South African")>>
-			<<set hashPush($nationalities, "South Sudanese")>>
-			<<set hashPush($nationalities, "Sudanese", "Sudanese", "Sudanese")>>
-			<<set hashPush($nationalities, "Swazi")>>
-			<<set hashPush($nationalities, "Tanzanian", "Tanzanian")>>
-			<<set hashPush($nationalities, "Togolese")>>
-			<<set hashPush($nationalities, "Tunisian", "Tunisian")>>
-			<<set hashPush($nationalities, "Ugandan", "Ugandan")>>
-			<<set hashPush($nationalities, "Zairian", "Zairian", "Zairian")>>
-			<<set hashPush($nationalities, "Zambian")>>
-			<<set hashPush($nationalities, "Zimbabwean", "Zimbabwean")>>
-		<</if>>
-	<<case "Asia">>
-		<<if $targetArcology.fs != "Supremacist">>
-			<<set $arcologies[0].FSSupremacistRace = "asian">>
-		<</if>>
-		<<if $targetArcology.fs != "Subjugationist">>
-			<<set $arcologies[0].FSSubjugationistRace = "indo-aryan">>
-		<</if>>
-		<<if ndef $customVariety>>
-			<<set hashPush($nationalities, "Bangladeshi", "Bangladeshi", "Bangladeshi", "Bangladeshi")>>
-			<<set hashPush($nationalities, "Bhutanese")>>
-			<<set hashPush($nationalities, "Bruneian")>>
-			<<set hashPush($nationalities, "Burmese", "Burmese")>>
-			<<set hashPush($nationalities, "Cambodian")>>
-			<<set hashPush($nationalities, "Chinese", "Chinese", "Chinese", "Chinese", "Chinese", "Chinese", "Chinese", "Chinese", "Chinese", "Chinese", "Chinese", "Chinese", "Chinese", "Chinese", "Chinese")>>
-			<<set hashPush($nationalities, "East Timorese")>>
-			<<set hashPush($nationalities, "Filipina", "Filipina", "Filipina")>>
-			<<set hashPush($nationalities, "Indian", "Indian", "Indian", "Indian", "Indian", "Indian", "Indian", "Indian", "Indian", "Indian", "Indian")>>
-			<<set hashPush($nationalities, "Indonesian", "Indonesian", "Indonesian", "Indonesian", "Indonesian")>>
-			<<set hashPush($nationalities, "Japanese", "Japanese", "Japanese")>>
-			<<set hashPush($nationalities, "Kazakh", "Kazakh")>>
-			<<set hashPush($nationalities, "Korean", "Korean")>>
-			<<set hashPush($nationalities, "Kyrgyz")>>
-			<<set hashPush($nationalities, "Laotian")>>
-			<<set hashPush($nationalities, "Malaysian", "Malaysian", "Malaysian")>>
-			<<set hashPush($nationalities, "Maldivian")>>
-			<<set hashPush($nationalities, "Mongolian")>>
-			<<set hashPush($nationalities, "Nepalese", "Nepalese")>>
-			<<set hashPush($nationalities, "Pakistani", "Pakistani", "Pakistani")>>
-			<<set hashPush($nationalities, "Singaporean")>>
-			<<set hashPush($nationalities, "Sri Lankan")>>
-			<<set hashPush($nationalities, "Taiwanese")>>
-			<<set hashPush($nationalities, "Tajik")>>
-			<<set hashPush($nationalities, "Thai", "Thai", "Thai")>>
-			<<set hashPush($nationalities, "Tibetan")>>
-			<<set hashPush($nationalities, "Turkmen")>>
-			<<set hashPush($nationalities, "Uzbek", "Uzbek")>>
-			<<set hashPush($nationalities, "Vietnamese", "Vietnamese", "Vietnamese")>>
-		<</if>>
-	<<case "Europe">>
-		<<if $targetArcology.fs != "Supremacist">>
-			<<set $arcologies[0].FSSupremacistRace = "white">>
-		<</if>>
-		<<if $targetArcology.fs != "Subjugationist">>
-			<<set $arcologies[0].FSSubjugationistRace = "middle eastern">>
-		<</if>>
-		<<if ndef $customVariety>>
-			<<set hashPush($nationalities, "Albanian")>>
-			<<set hashPush($nationalities, "Andorran")>>
-			<<set hashPush($nationalities, "Austrian", "Austrian")>>
-			<<set hashPush($nationalities, "Belarusian", "Belarusian")>>
-			<<set hashPush($nationalities, "Belgian", "Belgian")>>
-			<<set hashPush($nationalities, "Bosnian")>>
-			<<set hashPush($nationalities, "British", "British", "British")>>
-			<<set hashPush($nationalities, "Bulgarian", "Bulgarian")>>
-			<<set hashPush($nationalities, "Catalan")>>
-			<<set hashPush($nationalities, "Croatian")>>
-			<<set hashPush($nationalities, "Czech", "Czech")>>
-			<<set hashPush($nationalities, "Danish", "Danish")>>
-			<<set hashPush($nationalities, "Dutch", "Dutch")>>
-			<<set hashPush($nationalities, "Estonian", "Estonian")>>
-			<<set hashPush($nationalities, "Finnish", "Finnish")>>
-			<<set hashPush($nationalities, "French", "French", "French")>>
-			<<set hashPush($nationalities, "German", "German", "German")>>
-			<<set hashPush($nationalities, "Greek", "Greek")>>
-			<<set hashPush($nationalities, "Hungarian", "Hungarian")>>
-			<<set hashPush($nationalities, "Icelandic", "Icelandic")>>
-			<<set hashPush($nationalities, "Irish", "Irish")>>
-			<<set hashPush($nationalities, "Italian", "Italian", "Italian")>>
-			<<set hashPush($nationalities, "Kosovan")>>
-			<<set hashPush($nationalities, "Latvian")>>
-			<<set hashPush($nationalities, "a Liechtensteiner")>>
-			<<set hashPush($nationalities, "Lithuanian", "Lithuanian")>>
-			<<set hashPush($nationalities, "Luxembourgian")>>
-			<<set hashPush($nationalities, "Macedonian")>>
-			<<set hashPush($nationalities, "Maltese")>>
-			<<set hashPush($nationalities, "Moldovan")>>
-			<<set hashPush($nationalities, "Monégasque")>>
-			<<set hashPush($nationalities, "Montenegrin")>>
-			<<set hashPush($nationalities, "Norwegian", "Norwegian")>>
-			<<set hashPush($nationalities, "Polish", "Polish", "Polish")>>
-			<<set hashPush($nationalities, "Portuguese", "Portuguese")>>
-			<<set hashPush($nationalities, "Romanian", "Romanian")>>
-			<<set hashPush($nationalities, "Russian", "Russian", "Russian", "Russian")>>
-			<<set hashPush($nationalities, "Sammarinese")>>
-			<<set hashPush($nationalities, "Scottish")>>
-			<<set hashPush($nationalities, "Serbian", "Serbian")>>
-			<<set hashPush($nationalities, "Slovak", "Slovak")>>
-			<<set hashPush($nationalities, "Slovene")>>
-			<<set hashPush($nationalities, "Spanish", "Spanish", "Spanish")>>
-			<<set hashPush($nationalities, "Swedish", "Swedish")>>
-			<<set hashPush($nationalities, "Swiss", "Swiss")>>
-			<<set hashPush($nationalities, "Ukrainian", "Ukrainian", "Ukrainian")>>
-			<<set hashPush($nationalities, "Vatican")>>
-		<</if>>
-	<<case "Australia">>
-		<<if $targetArcology.fs != "Supremacist">>
-			<<set $arcologies[0].FSSupremacistRace = "white">>
-		<</if>>
-		<<if $targetArcology.fs != "Subjugationist">>
-			<<set $arcologies[0].FSSubjugationistRace = "asian">>
-		<</if>>
-		<<if ndef $customVariety>>
-			<<set hashPush($nationalities, "Australian", "Australian", "Australian")>>
-			<<set hashPush($nationalities, "a Cook Islander")>>
-			<<set hashPush($nationalities, "Fijian")>>
-			<<set hashPush($nationalities, "French Polynesian")>>
-			<<set hashPush($nationalities, "Guamanian")>>
-			<<set hashPush($nationalities, "I-Kiribati")>>
-			<<set hashPush($nationalities, "Marshallese")>>
-			<<set hashPush($nationalities, "Micronesian")>>
-			<<set hashPush($nationalities, "Nauruan")>>
-			<<set hashPush($nationalities, "New Caledonian")>>
-			<<set hashPush($nationalities, "a New Zealander", "a New Zealander")>>
-			<<set hashPush($nationalities, "Ni-Vanuatu")>>
-			<<set hashPush($nationalities, "Niuean")>>
-			<<set hashPush($nationalities, "Palauan")>>
-			<<set hashPush($nationalities, "Papua New Guinean")>>
-			<<set hashPush($nationalities, "Samoan")>>
-			<<set hashPush($nationalities, "a Solomon Islander")>>
-			<<set hashPush($nationalities, "Tongan")>>
-			<<set hashPush($nationalities, "Tuvaluan")>>
-		<</if>>
-	<<case "Japan">>
-		<<if $targetArcology.fs != "Supremacist">>
-			<<set $arcologies[0].FSSupremacistRace = "asian">>
-		<</if>>
-		<<if $targetArcology.fs != "Subjugationist">>
-			<<set $arcologies[0].FSSubjugationistRace = "asian">>
-		<</if>>
-		<<if ndef $customVariety>>
-			<<set hashPush($nationalities, "Japanese", "Japanese", "Japanese")>>
-		<</if>>
-	<</switch>>
-<</if>>
-
-<<if ndef $customVariety>> /* If non-custom variety, runs international trade restrictions script */
-	<<if $internationalTrade != 0>>
-		<<set $nationalities = arr2obj(setup.baseNationalities)>>
-		<<if $internationalVariety == 0>>
-			<<set hashPush($nationalities, "Afghan", "Afghan")>>
-			<<set hashPush($nationalities, "Albanian")>>
-			<<set hashPush($nationalities, "Algerian", "Algerian", "Algerian")>>
-			<<set hashPush($nationalities, "American", "American", "American", "American", "American", "American")>>
-			<<set hashPush($nationalities, "Andorran")>>
-			<<set hashPush($nationalities, "Angolan")>>
-			<<set hashPush($nationalities, "Antiguan")>>
-			<<set hashPush($nationalities, "Argentinian", "Argentinian", "Argentinian")>>
-			<<set hashPush($nationalities, "Armenian", "Armenian")>>
-			<<set hashPush($nationalities, "Aruban")>>
-			<<set hashPush($nationalities, "Australian", "Australian", "Australian")>>
-			<<set hashPush($nationalities, "Austrian", "Austrian")>>
-			<<set hashPush($nationalities, "Azerbaijani")>>
-			<<set hashPush($nationalities, "Bahamian")>>
-			<<set hashPush($nationalities, "Bahraini")>>
-			<<set hashPush($nationalities, "Bangladeshi", "Bangladeshi", "Bangladeshi", "Bangladeshi")>>
-			<<set hashPush($nationalities, "Barbadian")>>
-			<<set hashPush($nationalities, "Belarusian", "Belarusian")>>
-			<<set hashPush($nationalities, "Belgian", "Belgian")>>
-			<<set hashPush($nationalities, "Belizean")>>
-			<<set hashPush($nationalities, "Beninese")>>
-			<<set hashPush($nationalities, "Bermudian")>>
-			<<set hashPush($nationalities, "Bhutanese")>>
-			<<set hashPush($nationalities, "Bissau-Guinean")>>
-			<<set hashPush($nationalities, "Bolivian", "Bolivian")>>
-			<<set hashPush($nationalities, "Bosnian")>>
-			<<set hashPush($nationalities, "Brazilian", "Brazilian", "Brazilian", "Brazilian")>>
-			<<set hashPush($nationalities, "British", "British", "British")>>
-			<<set hashPush($nationalities, "Bruneian")>>
-			<<set hashPush($nationalities, "Bulgarian", "Bulgarian")>>
-			<<set hashPush($nationalities, "Burkinabé")>>
-			<<set hashPush($nationalities, "Burmese", "Burmese")>>
-			<<set hashPush($nationalities, "Burundian")>>
-			<<set hashPush($nationalities, "Cambodian")>>
-			<<set hashPush($nationalities, "Cameroonian")>>
-			<<set hashPush($nationalities, "Canadian", "Canadian")>>
-			<<set hashPush($nationalities, "Cape Verdean")>>
-			<<set hashPush($nationalities, "Catalan")>>
-			<<set hashPush($nationalities, "Central African")>>
-			<<set hashPush($nationalities, "Chadian")>>
-			<<set hashPush($nationalities, "Chilean", "Chilean")>>
-			<<set hashPush($nationalities, "Chinese", "Chinese", "Chinese", "Chinese", "Chinese", "Chinese", "Chinese", "Chinese", "Chinese", "Chinese", "Chinese", "Chinese", "Chinese", "Chinese", "Chinese")>>
-			<<set hashPush($nationalities, "Colombian", "Colombian", "Colombian")>>
-			<<set hashPush($nationalities, "Comorian")>>
-			<<set hashPush($nationalities, "Congolese")>>
-			<<set hashPush($nationalities, "a Cook Islander")>>
-			<<set hashPush($nationalities, "Costa Rican")>>
-			<<set hashPush($nationalities, "Croatian")>>
-			<<set hashPush($nationalities, "Cuban", "Cuban")>>
-			<<set hashPush($nationalities, "Curaçaoan")>>
-			<<set hashPush($nationalities, "Cypriot")>>
-			<<set hashPush($nationalities, "Czech", "Czech")>>
-			<<set hashPush($nationalities, "Danish", "Danish")>>
-			<<set hashPush($nationalities, "Djiboutian")>>
-			<<set hashPush($nationalities, "Dominican", "Dominican")>>
-			<<set hashPush($nationalities, "Dominiquais")>>
-			<<set hashPush($nationalities, "Dutch", "Dutch")>>
-			<<set hashPush($nationalities, "East Timorese")>>
-			<<set hashPush($nationalities, "Ecuadorian")>>
-			<<set hashPush($nationalities, "Egyptian", "Egyptian", "Egyptian")>>
-			<<set hashPush($nationalities, "Emirati", "Emirati")>>
-			<<set hashPush($nationalities, "Equatoguinean")>>
-			<<set hashPush($nationalities, "Eritrean")>>
-			<<set hashPush($nationalities, "Estonian", "Estonian")>>
-			<<set hashPush($nationalities, "Ethiopian", "Ethiopian", "Ethiopian")>>
-			<<set hashPush($nationalities, "Fijian")>>
-			<<set hashPush($nationalities, "Filipina", "Filipina", "Filipina")>>
-			<<set hashPush($nationalities, "Finnish", "Finnish")>>
-			<<set hashPush($nationalities, "French Guianan")>>
-			<<set hashPush($nationalities, "French Polynesian")>>
-			<<set hashPush($nationalities, "French", "French", "French")>>
-			<<set hashPush($nationalities, "Gabonese")>>
-			<<set hashPush($nationalities, "Gambian")>>
-			<<set hashPush($nationalities, "Georgian")>>
-			<<set hashPush($nationalities, "German", "German", "German")>>
-			<<set hashPush($nationalities, "Ghanan", "Ghanan")>>
-			<<set hashPush($nationalities, "Greek", "Greek")>>
-			<<set hashPush($nationalities, "Greenlandic")>>
-			<<set hashPush($nationalities, "Grenadian")>>
-			<<set hashPush($nationalities, "Guamanian")>>
-			<<set hashPush($nationalities, "Guatemalan")>>
-			<<set hashPush($nationalities, "Guinean")>>
-			<<set hashPush($nationalities, "Guyanese")>>
-			<<set hashPush($nationalities, "Haitian", "Haitian")>>
-			<<set hashPush($nationalities, "Honduran")>>
-			<<set hashPush($nationalities, "Hungarian", "Hungarian")>>
-			<<set hashPush($nationalities, "I-Kiribati")>>
-			<<set hashPush($nationalities, "Icelandic", "Icelandic")>>
-			<<set hashPush($nationalities, "Indian", "Indian", "Indian", "Indian", "Indian", "Indian", "Indian", "Indian", "Indian", "Indian", "Indian")>>
-			<<set hashPush($nationalities, "Indonesian", "Indonesian", "Indonesian", "Indonesian", "Indonesian")>>
-			<<set hashPush($nationalities, "Iranian", "Iranian", "Iranian")>>
-			<<set hashPush($nationalities, "Iraqi", "Iraqi")>>
-			<<set hashPush($nationalities, "Irish", "Irish")>>
-			<<set hashPush($nationalities, "Israeli", "Israeli")>>
-			<<set hashPush($nationalities, "Italian", "Italian", "Italian")>>
-			<<set hashPush($nationalities, "Ivorian")>>
-			<<set hashPush($nationalities, "Jamaican")>>
-			<<set hashPush($nationalities, "Japanese", "Japanese", "Japanese")>>
-			<<set hashPush($nationalities, "Jordanian", "Jordanian")>>
-			<<set hashPush($nationalities, "Kazakh", "Kazakh")>>
-			<<set hashPush($nationalities, "Kenyan", "Kenyan", "Kenyan")>>
-			<<set hashPush($nationalities, "Kittitian")>>
-			<<set hashPush($nationalities, "Korean", "Korean")>>
-			<<set hashPush($nationalities, "Kosovan")>>
-			<<set hashPush($nationalities, "Kurdish")>>
-			<<set hashPush($nationalities, "Kuwaiti")>>
-			<<set hashPush($nationalities, "Kyrgyz")>>
-			<<set hashPush($nationalities, "Laotian")>>
-			<<set hashPush($nationalities, "Latvian")>>
-			<<set hashPush($nationalities, "Lebanese", "Lebanese")>>
-			<<set hashPush($nationalities, "Liberian")>>
-			<<set hashPush($nationalities, "Libyan", "Libyan")>>
-			<<set hashPush($nationalities, "a Liechtensteiner")>>
-			<<set hashPush($nationalities, "Lithuanian", "Lithuanian")>>
-			<<set hashPush($nationalities, "Luxembourgian")>>
-			<<set hashPush($nationalities, "Macedonian")>>
-			<<set hashPush($nationalities, "Malagasy")>>
-			<<set hashPush($nationalities, "Malawian")>>
-			<<set hashPush($nationalities, "Malaysian", "Malaysian", "Malaysian")>>
-			<<set hashPush($nationalities, "Maldivian")>>
-			<<set hashPush($nationalities, "Malian", "Malian")>>
-			<<set hashPush($nationalities, "Maltese")>>
-			<<set hashPush($nationalities, "Marshallese")>>
-			<<set hashPush($nationalities, "Mauritanian")>>
-			<<set hashPush($nationalities, "Mauritian")>>
-			<<set hashPush($nationalities, "Mexican", "Mexican", "Mexican", "Mexican")>>
-			<<set hashPush($nationalities, "Micronesian")>>
-			<<set hashPush($nationalities, "Moldovan")>>
-			<<set hashPush($nationalities, "Monégasque")>>
-			<<set hashPush($nationalities, "Mongolian")>>
-			<<set hashPush($nationalities, "Montenegrin")>>
-			<<set hashPush($nationalities, "Moroccan", "Moroccan")>>
-			<<set hashPush($nationalities, "Mosotho")>>
-			<<set hashPush($nationalities, "Motswana")>>
-			<<set hashPush($nationalities, "Mozambican")>>
-			<<set hashPush($nationalities, "Namibian")>>
-			<<set hashPush($nationalities, "Nauruan")>>
-			<<set hashPush($nationalities, "Nepalese", "Nepalese")>>
-			<<set hashPush($nationalities, "New Caledonian")>>
-			<<set hashPush($nationalities, "a New Zealander", "a New Zealander")>>
-			<<set hashPush($nationalities, "Ni-Vanuatu")>>
-			<<set hashPush($nationalities, "Nicaraguan", "Nicaraguan")>>
-			<<set hashPush($nationalities, "Nigerian", "Nigerian", "Nigerian", "Nigerian")>>
-			<<set hashPush($nationalities, "Nigerien", "Nigerien")>>
-			<<set hashPush($nationalities, "Niuean")>>
-			<<set hashPush($nationalities, "Norwegian", "Norwegian")>>
-			<<set hashPush($nationalities, "Omani", "Omani")>>
-			<<set hashPush($nationalities, "Pakistani", "Pakistani", "Pakistani")>>
-			<<set hashPush($nationalities, "Palauan")>>
-			<<set hashPush($nationalities, "Palestinian")>>
-			<<set hashPush($nationalities, "Panamanian")>>
-			<<set hashPush($nationalities, "Papua New Guinean")>>
-			<<set hashPush($nationalities, "Paraguayan")>>
-			<<set hashPush($nationalities, "Peruvian", "Peruvian")>>
-			<<set hashPush($nationalities, "Polish", "Polish", "Polish")>>
-			<<set hashPush($nationalities, "Portuguese", "Portuguese")>>
-			<<set hashPush($nationalities, "Puerto Rican")>>
-			<<set hashPush($nationalities, "Qatari")>>
-			<<set hashPush($nationalities, "Romanian", "Romanian")>>
-			<<set hashPush($nationalities, "Russian", "Russian", "Russian", "Russian")>>
-			<<set hashPush($nationalities, "Rwandan")>>
-			<<set hashPush($nationalities, "Sahrawi")>>
-			<<set hashPush($nationalities, "Saint Lucian")>>
-			<<set hashPush($nationalities, "Salvadoran", "Salvadoran")>>
-			<<set hashPush($nationalities, "Sammarinese")>>
-			<<set hashPush($nationalities, "Samoan")>>
-			<<set hashPush($nationalities, "São Toméan")>>
-			<<set hashPush($nationalities, "Saudi", "Saudi")>>
-			<<set hashPush($nationalities, "Scottish")>>
-			<<set hashPush($nationalities, "Senegalese")>>
-			<<set hashPush($nationalities, "Serbian", "Serbian")>>
-			<<set hashPush($nationalities, "Seychellois")>>
-			<<set hashPush($nationalities, "Sierra Leonean")>>
-			<<set hashPush($nationalities, "Singaporean")>>
-			<<set hashPush($nationalities, "Slovak", "Slovak")>>
-			<<set hashPush($nationalities, "Slovene")>>
-			<<set hashPush($nationalities, "a Solomon Islander")>>
-			<<set hashPush($nationalities, "Somali")>>
-			<<set hashPush($nationalities, "South African", "South African", "South African", "South African")>>
-			<<set hashPush($nationalities, "South Sudanese")>>
-			<<set hashPush($nationalities, "Spanish", "Spanish", "Spanish")>>
-			<<set hashPush($nationalities, "Sri Lankan")>>
-			<<set hashPush($nationalities, "Sudanese", "Sudanese", "Sudanese")>>
-			<<set hashPush($nationalities, "Surinamese")>>
-			<<set hashPush($nationalities, "Swazi")>>
-			<<set hashPush($nationalities, "Swedish", "Swedish")>>
-			<<set hashPush($nationalities, "Swiss", "Swiss")>>
-			<<set hashPush($nationalities, "Syrian")>>
-			<<set hashPush($nationalities, "Taiwanese")>>
-			<<set hashPush($nationalities, "Tajik")>>
-			<<set hashPush($nationalities, "Tanzanian", "Tanzanian")>>
-			<<set hashPush($nationalities, "Thai", "Thai", "Thai")>>
-			<<set hashPush($nationalities, "Tibetan")>>
-			<<set hashPush($nationalities, "Togolese")>>
-			<<set hashPush($nationalities, "Tongan")>>
-			<<set hashPush($nationalities, "Trinidadian")>>
-			<<set hashPush($nationalities, "Tunisian", "Tunisian")>>
-			<<set hashPush($nationalities, "Turkish", "Turkish", "Turkish")>>
-			<<set hashPush($nationalities, "Turkmen")>>
-			<<set hashPush($nationalities, "Tuvaluan")>>
-			<<set hashPush($nationalities, "Ugandan", "Ugandan")>>
-			<<set hashPush($nationalities, "Ukrainian", "Ukrainian", "Ukrainian")>>
-			<<set hashPush($nationalities, "Uruguayan")>>
-			<<set hashPush($nationalities, "Uzbek", "Uzbek")>>
-			<<set hashPush($nationalities, "Vatican")>>
-			<<set hashPush($nationalities, "Venezuelan", "Venezuelan", "Venezuelan")>>
-			<<set hashPush($nationalities, "Vietnamese", "Vietnamese", "Vietnamese")>>
-			<<set hashPush($nationalities, "Vincentian")>>
-			<<set hashPush($nationalities, "Yemeni", "Yemeni")>>
-			<<set hashPush($nationalities, "Zairian", "Zairian", "Zairian")>>
-			<<set hashPush($nationalities, "Zambian")>>
-			<<set hashPush($nationalities, "Zimbabwean", "Zimbabwean")>>
-		<</if>>
-	<</if>>
-<</if>>
-
-<<goto "Starting Girls">>
diff --git a/src/events/intro/introSummary.tw b/src/events/intro/introSummary.tw
index 142c14b470a89e5c55b3dd39308eb7ebeeae5ea1..00b11b111c8b2ad6a1175b5526d358d174d0b9e2 100644
--- a/src/events/intro/introSummary.tw
+++ b/src/events/intro/introSummary.tw
@@ -12,7 +12,7 @@
 <<set $PC.birthWeek = variableAsNumber($PC.birthWeek, 0, 51, 0)>>
 
 You may review your settings before clicking "Continue" to begin.<br>
-<<link "Continue" "init Nationalities">>
+<<link "Continue" "Starting Girls">>
 	<<if $freshPC == 1 || $saveImported == 0>>
 		<<switch $PC.career>>
 		<<case "wealth">>
@@ -73,12 +73,12 @@ You may review your settings before clicking "Continue" to begin.<br>
 	<<if $secExpEnabled > 0>>
 		<<set $wasToggledBefore = 1>>
 	<</if>>
-	<<run resetEyeColor($PC)>>
+	<<run App.Intro.initNationalities()>>
 <</link>>
 <<if ($economy != 100) || ($seeDicks != 25) || ($continent != "North America") || ($internationalTrade != 1) || ($internationalVariety != 1) || ($seeRace != 1) || ($seeNationality != 1) || ($seeExtreme != 0) || ($seeCircumcision != 1) || ($seeAge != 1) || ($plot != 1)>>
 	| [[restore defaults|Intro Summary][$seeDicks = 25, $economy = 100, $continent = "North America", $internationalTrade = 1, $internationalVariety = 1, $seeRace = 1, $seeNationality = 1, $seeExtreme = 0, $seeCircumcision = 1, $seeAge = 1, $plot = 1]]
 <</if>>
-	| [[Cheat Start|init Nationalities][cashX(1000000, "cheating"), $PC.rules.living = "luxurious",repX(20000, "cheating"), $dojo += 1, $cheatMode = 1, $seeDesk = 0, $seeFCNN = 0, $sortSlavesBy = "devotion", $sortSlavesOrder = "descending", $sortSlavesMain = 0, $rulesAssistantMain = 1, $UI.slaveSummary.abbreviation = {devotion: 1, rules: 1, clothes: 2, health: 1, diet: 1, drugs: 1, race: 1, nationality: 1, genitalia: 1, physicals: 1, skills: 1, mental: 2}, $PC.skill.trading = 100, $PC.skill.warfare = 100, $PC.skill.slaving = 100, $PC.skill.engineering = 100, $PC.skill.medicine = 100, $PC.skill.hacking = 100, resetEyeColor($PC)]] //Intended for debugging: may have unexpected effects//
+	| [[Cheat Start|Starting Girls][cashX(1000000, "cheating"), $PC.rules.living = "luxurious",repX(20000, "cheating"), $dojo += 1, $cheatMode = 1, $seeDesk = 0, $seeFCNN = 0, $sortSlavesBy = "devotion", $sortSlavesOrder = "descending", $sortSlavesMain = 0, $rulesAssistantMain = 1, $UI.slaveSummary.abbreviation = {devotion: 1, rules: 1, clothes: 2, health: 1, diet: 1, drugs: 1, race: 1, nationality: 1, genitalia: 1, physicals: 1, skills: 1, mental: 2}, $PC.skill.trading = 100, $PC.skill.warfare = 100, $PC.skill.slaving = 100, $PC.skill.engineering = 100, $PC.skill.medicine = 100, $PC.skill.hacking = 100, App.Intro.initNationalities()]] //Intended for debugging: may have unexpected effects//
 
 <<set $minimumSlaveAge = variableAsNumber($minimumSlaveAge, 3, 18, 18)>>
 <<set $retirementAge = variableAsNumber($retirementAge, 25, 120, 45)>>
diff --git a/src/gui/quicklinks.js b/src/gui/quicklinks.js
index 403740eb7320d895652ce361f835730d8044a7d0..e9f4d4f7b597ab16239f8d51448585ea0ecd576b 100644
--- a/src/gui/quicklinks.js
+++ b/src/gui/quicklinks.js
@@ -177,7 +177,7 @@ App.UI.quickMenu = (function() {
 	});
 
 	// setup hotkeys list, upper/lower case is important!
-	// Due to limitation to the key capture library keys can not be used when they are already used in
+	// Due to limitation to the key capture library keys cannot be used when they are already used in
 	// src/002-config/mousetrapConfig.js
 	const hotkeys = cleanPassageMapping({
 		"BG Select": "b",
diff --git a/src/js/economyJS.js b/src/js/economyJS.js
index 316e19d54520109881e8ea10431ef68844003dd2..09e0f79da7a87162d5d3880c1a2780b224941b82 100644
--- a/src/js/economyJS.js
+++ b/src/js/economyJS.js
@@ -2355,7 +2355,7 @@ globalThis.repX = function(rep, what, who) {
 		}
 
 		// record the action
-		if (what === "cheating" || passage() === "init" || passage() === "init Nationalities") {
+		if (what === "cheating" || passage() === "init" || passage() === "Intro Summary") {
 			/* we don't want to curve startup or cheating.*/
 			V.lastWeeksRepIncome[what] += rep;
 		} else if (typeof V.lastWeeksRepIncome[what] !== 'undefined') {
diff --git a/src/js/eventSelectionJS.js b/src/js/eventSelectionJS.js
index d78a79f5bb789ec126f89799655b89b154e601d3..8c18f1bc8ee9a5fbb036407101b42c135e6e4625 100644
--- a/src/js/eventSelectionJS.js
+++ b/src/js/eventSelectionJS.js
@@ -338,8 +338,10 @@ globalThis.generateRandomEventPoolStandard = function(eventSlave) {
 				if (eventSlave.dick > 0) {
 					if (eventSlave.anus > 0) {
 						if (eventSlave.devotion >= 10) {
-							if (V.REFeminizationCheckinIDs.includes(eventSlave.ID)) {
-								V.RECIevent.push("feminization");
+							if (eventSlave.genes === "XY") {
+								if (V.REFeminizationCheckinIDs.includes(eventSlave.ID)) {
+									V.RECIevent.push("feminization");
+								}
 							}
 							if (eventSlave.trust >= 10) {
 								if (canAchieveErection(eventSlave)) {
diff --git a/src/js/rulesAutosurgery.js b/src/js/rulesAutosurgery.js
index d9ea3a45d75dc0272b96f57422091ab3cd668e14..5f145b80d1fee004ebe2c38075d66bc1a5d9aee3 100644
--- a/src/js/rulesAutosurgery.js
+++ b/src/js/rulesAutosurgery.js
@@ -13,7 +13,7 @@ globalThis.rulesAutosurgery = (function() {
 		r = "";
 		const surgeries = [];
 		const thisSurgery = ProcessHGTastes(slave);
-		if (slave.health.health > 20) {
+		if (slave.health.health >= -20) {
 			CommitSurgery(slave, thisSurgery, surgeries);
 		}
 		if (surgeries.length > 0) {
@@ -199,260 +199,245 @@ globalThis.rulesAutosurgery = (function() {
 		// NOTE: App.RA.shallShrink() and App.RA.shallGrow() return 'false' when target is 'null'
 		// Hence they have to be first conditions in the '&&' chains to avoid type errors
 		// (reading properties of the 'null' object)
-		if (slave.health.health > 20 && surgeries.length < 3) {
-			if (thisSurgery.eyes === 1 && anyVisionEquals(slave, 1)) {
-				// possibly two surgeries at once, in turn health cost is halved
-				if (getLeftEyeVision(slave) === 1) {
-					commitProcedure(`surgery to correct ${his} left vision`, s => { eyeSurgery(s, "left", "fix"); }, 5);
-				}
-				if (getRightEyeVision(slave) === 1) {
-					commitProcedure(`surgery to correct ${his} right vision`, s => { eyeSurgery(s, "right", "fix"); }, 5);
-				}
-			} else if (thisSurgery.eyes === -1 && anyVisionEquals(slave, 2)) {
-				// possibly two surgeries at once, in turn health cost is halved
-				if (getLeftEyeVision(slave) === 2) {
-					commitProcedure(`surgery to blur ${his} left vision`, s => { eyeSurgery(s, "left", "blur"); }, 5);
-				}
-				if (getRightEyeVision(slave) === 2) {
-					commitProcedure(`surgery to blur ${his} right vision`, s => { eyeSurgery(s, "right", "blur"); }, 5);
-				}
-			} else if (slave.hears === -1 && thisSurgery.hears === 0) {
-				commitProcedure(`surgery to correct ${his} hearing`, s => { s.hears = 0; });
-			} else if (slave.hears === 0 && thisSurgery.hears === -1) {
-				commitProcedure(`surgery to muffle ${his} hearing`, s => { s.hears = -1; });
-			} else if (slave.smells === -1 && thisSurgery.smells === 0) {
-				commitProcedure(`surgery to correct ${his} sense of smell`, s => { s.smells = 0; });
-			} else if (slave.smells === 0 && thisSurgery.smells === -1) {
-				commitProcedure(`surgery to muffle ${his} sense of smell`, s => { s.smells = -1; });
-			} else if (slave.tastes === -1 && thisSurgery.tastes === 0) {
-				commitProcedure(`surgery to correct ${his} sense of taste`, s => { s.tastes = 0; });
-			} else if (slave.tastes === 0 && thisSurgery.tastes === -1) {
-				commitProcedure(`surgery to muffle ${his} sense of taste`, s => { s.tastes = -1; });
-			}
+		if (slave.health.health < -20 && surgeries.length >= 3) {
+			return `<span class='red'>Either this slave is extremely unwell or they are assigned to have more than two surgeries.</span>`;
 		}
-		if (slave.health.health > 20 && surgeries.length < 3) {
-			if (slave.lactation === 2 && thisSurgery.lactation === 0) {
-				commitProcedure(`surgery to remove ${his} lactation implants`, s => { s.lactation = 0; });
-			} else if (slave.lactation !== 2 && (thisSurgery.lactation === 1)) {
-				commitProcedure("lactation inducing implanted drugs", s => { s.lactation = 2; });
-			} else if ((slave.boobShape === "saggy" || slave.boobShape === "downward-facing") && thisSurgery.cosmetic > 0 && slave.breastMesh !== 1) {
-				commitProcedure("a breast lift", s => { s.boobShape = "normal"; });
-			} else if ((slave.boobShape === "normal" || slave.boobShape === "wide-set") && thisSurgery.cosmetic > 0 && slave.breastMesh !== 1) {
-				commitProcedure("more interestingly shaped breasts", slave => {
-					if (slave.boobs > 800) {
-						slave.boobShape = "torpedo-shaped";
-					} else {
-						slave.boobShape = "perky";
-					}
-				});
-			} else if (thisSurgery.boobs) {
-				bodyPartSizing("boobs", thisSurgery.boobs);
+
+		if (thisSurgery.eyes === 1 && anyVisionEquals(slave, 1)) {
+			// possibly two surgeries at once, in turn health cost is halved
+			if (getLeftEyeVision(slave) === 1) {
+				commitProcedure(`surgery to correct ${his} left vision`, s => { eyeSurgery(s, "left", "fix"); }, 5);
 			}
+			if (getRightEyeVision(slave) === 1) {
+				commitProcedure(`surgery to correct ${his} right vision`, s => { eyeSurgery(s, "right", "fix"); }, 5);
+			}
+		} else if (thisSurgery.eyes === -1 && anyVisionEquals(slave, 2)) {
+			// possibly two surgeries at once, in turn health cost is halved
+			if (getLeftEyeVision(slave) === 2) {
+				commitProcedure(`surgery to blur ${his} left vision`, s => { eyeSurgery(s, "left", "blur"); }, 5);
+			}
+			if (getRightEyeVision(slave) === 2) {
+				commitProcedure(`surgery to blur ${his} right vision`, s => { eyeSurgery(s, "right", "blur"); }, 5);
+			}
+		} else if (slave.hears === -1 && thisSurgery.hears === 0) {
+			commitProcedure(`surgery to correct ${his} hearing`, s => { s.hears = 0; });
+		} else if (slave.hears === 0 && thisSurgery.hears === -1) {
+			commitProcedure(`surgery to muffle ${his} hearing`, s => { s.hears = -1; });
+		} else if (slave.smells === -1 && thisSurgery.smells === 0) {
+			commitProcedure(`surgery to correct ${his} sense of smell`, s => { s.smells = 0; });
+		} else if (slave.smells === 0 && thisSurgery.smells === -1) {
+			commitProcedure(`surgery to muffle ${his} sense of smell`, s => { s.smells = -1; });
+		} else if (slave.tastes === -1 && thisSurgery.tastes === 0) {
+			commitProcedure(`surgery to correct ${his} sense of taste`, s => { s.tastes = 0; });
+		} else if (slave.tastes === 0 && thisSurgery.tastes === -1) {
+			commitProcedure(`surgery to muffle ${his} sense of taste`, s => { s.tastes = -1; });
+		}
+
+		if (slave.lactation === 2 && thisSurgery.lactation === 0) {
+			commitProcedure(`surgery to remove ${his} lactation implants`, s => { s.lactation = 0; });
+		} else if (slave.lactation !== 2 && (thisSurgery.lactation === 1)) {
+			commitProcedure("lactation inducing implanted drugs", s => { s.lactation = 2; });
+		} else if ((slave.boobShape === "saggy" || slave.boobShape === "downward-facing") && thisSurgery.cosmetic > 0 && slave.breastMesh !== 1) {
+			commitProcedure("a breast lift", s => { s.boobShape = "normal"; });
+		} else if ((slave.boobShape === "normal" || slave.boobShape === "wide-set") && thisSurgery.cosmetic > 0 && slave.breastMesh !== 1) {
+			commitProcedure("more interestingly shaped breasts", slave => {
+				if (slave.boobs > 800) {
+					slave.boobShape = "torpedo-shaped";
+				} else {
+					slave.boobShape = "perky";
+				}
+			});
+		} else if (thisSurgery.boobs) {
+			bodyPartSizing("boobs", thisSurgery.boobs);
 		}
-		if (thisSurgery.butt !== null && slave.health.health > 20 && surgeries.length < 3) {
+
+		if (thisSurgery.butt !== null) {
 			bodyPartSizing("butt", thisSurgery.butt);
 		}
-		if (slave.health.health > 20 && surgeries.length < 3) {
-			if (slave.anus > 3 && thisSurgery.cosmetic > 0) {
-				commitProcedure("a restored anus", slave => {
-					slave.anus = 3;
-					if (slave.skill.anal > 10) {
-						slave.skill.anal -= 10;
-					}
-				});
-			} else if (slave.vagina > 3 && thisSurgery.cosmetic > 0) {
-				commitProcedure("a restored pussy", slave => {
-					slave.vagina = 3;
-					if (slave.skill.vaginal > 10) {
-						slave.skill.vaginal -= 10;
-					}
-				});
-			} else if (slave.anus > 0 && V.surgeryUpgrade === 1 && thisSurgery.holes === 2) {
-				commitProcedure("a virgin anus", slave => {
-					slave.anus = 0;
-					if (slave.skill.anal > 10) {
-						slave.skill.anal -= 10;
-					}
-				});
-			} else if (slave.vagina > 0 && V.surgeryUpgrade === 1 && thisSurgery.holes === 2) {
-				commitProcedure("a virgin pussy", slave => {
-					slave.vagina = 0;
-					if (slave.skill.vaginal > 10) {
-						slave.skill.vaginal -= 10;
-					}
-				});
-			} else if (slave.anus > 1 && thisSurgery.holes === 1) {
-				commitProcedure("a tighter anus", slave => {
-					slave.anus = 1;
-					if (slave.skill.anal > 10) {
-						slave.skill.anal -= 10;
-					}
-				});
-			} else if (slave.vagina > 1 && thisSurgery.holes === 1) {
-				commitProcedure("a tighter pussy", slave => {
-					slave.vagina = 1;
-					if (slave.skill.vaginal > 10) {
-						slave.skill.vaginal -= 10;
-					}
-				});
-			}
+
+		if (slave.anus > 3 && thisSurgery.cosmetic > 0) {
+			commitProcedure("a restored anus", slave => {
+				slave.anus = 3;
+				if (slave.skill.anal > 10) {
+					slave.skill.anal -= 10;
+				}
+			});
+		} else if (slave.vagina > 3 && thisSurgery.cosmetic > 0) {
+			commitProcedure("a restored pussy", slave => {
+				slave.vagina = 3;
+				if (slave.skill.vaginal > 10) {
+					slave.skill.vaginal -= 10;
+				}
+			});
+		} else if (slave.anus > 0 && V.surgeryUpgrade === 1 && thisSurgery.holes === 2) {
+			commitProcedure("a virgin anus", slave => {
+				slave.anus = 0;
+				if (slave.skill.anal > 10) {
+					slave.skill.anal -= 10;
+				}
+			});
+		} else if (slave.vagina > 0 && V.surgeryUpgrade === 1 && thisSurgery.holes === 2) {
+			commitProcedure("a virgin pussy", slave => {
+				slave.vagina = 0;
+				if (slave.skill.vaginal > 10) {
+					slave.skill.vaginal -= 10;
+				}
+			});
+		} else if (slave.anus > 1 && thisSurgery.holes === 1) {
+			commitProcedure("a tighter anus", slave => {
+				slave.anus = 1;
+				if (slave.skill.anal > 10) {
+					slave.skill.anal -= 10;
+				}
+			});
+		} else if (slave.vagina > 1 && thisSurgery.holes === 1) {
+			commitProcedure("a tighter pussy", slave => {
+				slave.vagina = 1;
+				if (slave.skill.vaginal > 10) {
+					slave.skill.vaginal -= 10;
+				}
+			});
 		}
-		if (slave.health.health > 20 && surgeries.length < 3) {
-			if (slave.prostate === 2 && thisSurgery.prostate === 0) {
-				commitProcedure(`surgery to remove ${his} prostate implant`, s => { s.prostate = 0; });
-			} else if (slave.prostate === 1 && thisSurgery.prostate === 1) {
-				commitProcedure("a precum production enhancing drug implant", s => { s.prostate = 2; });
-			} else if (slave.balls > 0 && slave.vasectomy === 0 && thisSurgery.vasectomy === true) {
-				commitProcedure("vasectomy", s => { s.vasectomy = 1; });
-				V.surgeryType = "vasectomy";
-			} else if (slave.balls > 0 && slave.vasectomy === 1 && thisSurgery.vasectomy === false) {
-				commitProcedure("undo vasectomy", s => { s.vasectomy = 0; });
-				V.surgeryType = "vasectomy undo";
-			}
+
+		if (slave.prostate === 2 && thisSurgery.prostate === 0) {
+			commitProcedure(`surgery to remove ${his} prostate implant`, s => { s.prostate = 0; });
+		} else if (slave.prostate === 1 && thisSurgery.prostate === 1) {
+			commitProcedure("a precum production enhancing drug implant", s => { s.prostate = 2; });
+		} else if (slave.balls > 0 && slave.vasectomy === 0 && thisSurgery.vasectomy === true) {
+			commitProcedure("vasectomy", s => { s.vasectomy = 1; });
+			V.surgeryType = "vasectomy";
+		} else if (slave.balls > 0 && slave.vasectomy === 1 && thisSurgery.vasectomy === false) {
+			commitProcedure("undo vasectomy", s => { s.vasectomy = 0; });
+			V.surgeryType = "vasectomy undo";
 		}
-		if (slave.health.health > 20 && surgeries.length < 3) {
-			if (slave.faceImplant <= 15 && slave.face <= 95 && thisSurgery.cosmetic > 0) {
-				commitProcedure("a nicer face", slave => {
-					if (slave.faceShape === "masculine") { slave.faceShape = "androgynous"; }
-					slave.faceImplant += 25 - 5 * Math.trunc(V.PC.skill.medicine / 50) - 5 * V.surgeryUpgrade;
-					slave.face = Math.clamp(slave.face + 20, -100, 100);
-				});
-			} else if (slave.faceImplant <= 15 && slave.ageImplant !== 1 && slave.visualAge >= 25 && thisSurgery.cosmetic > 0) {
-				commitProcedure("an age lift", slave => {
-					slave.faceImplant += 25 - 5 * Math.trunc(V.PC.skill.medicine / 50) - 5 * V.surgeryUpgrade;
-					applyAgeImplant(slave);
-				});
-			} else if (((slave.underArmHStyle !== "bald" && slave.underArmHStyle !== "hairless") || (slave.pubicHStyle !== "bald" && slave.pubicHStyle !== "hairless")) && thisSurgery.bodyhair === 2) {
-				commitProcedure("body hair removal", slave => {
-					if (slave.underArmHStyle !== "hairless") { slave.underArmHStyle = "bald"; }
-					if (slave.pubicHStyle !== "hairless") { slave.pubicHStyle = "bald"; }
-				}, 0);
-			} else if ((slave.bald === 0 || slave.hStyle !== "bald" || slave.eyebrowHStyle !== "bald") && thisSurgery.hair === 2) {
-				commitProcedure("hair removal", slave => {
-					slave.eyebrowHStyle = "bald";
-					slave.hStyle = "bald";
-					slave.bald = 1;
-				}, 0);
-			} else if (slave.weight >= 10 && thisSurgery.cosmetic > 0) {
-				commitProcedure("liposuction", s => { s.weight -= 50; });
-			} else if ((slave.bellySagPreg > 0 || slave.bellySag > 0) && (thisSurgery.cosmetic > 0 || thisSurgery.tummy > 0 )) {
-				commitProcedure("a tummy tuck", slave => {
-					slave.bellySag = 0;
-					slave.bellySagPreg = 0;
-				}, 20);
-			} else if (slave.voice === 1 && slave.voiceImplant === 0 && thisSurgery.cosmetic > 0) {
-				commitProcedure("a feminine voice", slave => {
-					slave.voice += 1;
-					slave.voiceImplant += 1;
-				});
-			} else if (App.RA.shallShrink(slave.lipsImplant, thisSurgery.lips) && thisSurgery.lips.val === 0) {
-				commitProcedure(`surgery to remove ${his} lip implants`, slave => {
-					slave.lips -= slave.lipsImplant;
-					slave.lipsImplant = 0;
-					if (slave.skill.oral > 10) {
-						slave.skill.oral -= 10;
-					}
-				});
-			} else if (App.RA.shallGrow(slave.lipsImplant, thisSurgery.lips, 10) && slave.lips <= 95) {
-				commitProcedure("bigger lips", slave => {
-					slave.lipsImplant += 10;
-					slave.lips += 10;
-					if (slave.skill.oral > 10) {
-						slave.skill.oral -= 10;
-					}
-				});
-			} else if (slave.scar.hasOwnProperty("belly") && slave.scar.belly["c-section"] > 0 && thisSurgery.cosmetic > 0) {
-				commitProcedure("surgery to remove a c-section scar", s => { App.Medicine.Modification.removeScar(s, "belly", "c-section"); });
-			} else if (slave.faceImplant <= 45 && slave.face <= 95 && thisSurgery.cosmetic === 2) {
-				commitProcedure("a nicer face", slave => {
-					if (slave.faceShape === "masculine") { slave.faceShape = "androgynous"; }
-					slave.faceImplant += 25 - 5 * Math.trunc(V.PC.skill.medicine / 50) - 5 * V.surgeryUpgrade;
-					slave.face = Math.clamp(slave.face + 20, -100, 100);
-				});
-			} else if (slave.faceImplant <= 45 && slave.ageImplant !== 1 && slave.visualAge >= 25 && thisSurgery.cosmetic === 2) {
-				commitProcedure("an age lift", slave => {
-					applyAgeImplant(slave);
-					slave.faceImplant += 25 - 5 * Math.trunc(V.PC.skill.medicine / 50) - 5 * V.surgeryUpgrade;
-				});
-			} else if (slave.voice < 3 && slave.voiceImplant === 0 && thisSurgery.cosmetic === 2) {
-				commitProcedure("a bimbo's voice", slave => {
-					slave.voice += 1;
-					slave.voiceImplant += 1;
-				});
-			}
+
+		if (slave.faceImplant <= 15 && slave.face <= 95 && thisSurgery.cosmetic > 0) {
+			commitProcedure("a nicer face", slave => {
+				if (slave.faceShape === "masculine") { slave.faceShape = "androgynous"; }
+				slave.faceImplant += 25 - 5 * Math.trunc(V.PC.skill.medicine / 50) - 5 * V.surgeryUpgrade;
+				slave.face = Math.clamp(slave.face + 20, -100, 100);
+			});
+		} else if (slave.faceImplant <= 15 && slave.ageImplant !== 1 && slave.visualAge >= 25 && thisSurgery.cosmetic > 0) {
+			commitProcedure("an age lift", slave => {
+				slave.faceImplant += 25 - 5 * Math.trunc(V.PC.skill.medicine / 50) - 5 * V.surgeryUpgrade;
+				applyAgeImplant(slave);
+			});
+		} else if (((slave.underArmHStyle !== "bald" && slave.underArmHStyle !== "hairless") || (slave.pubicHStyle !== "bald" && slave.pubicHStyle !== "hairless")) && thisSurgery.bodyhair === 2) {
+			commitProcedure("body hair removal", slave => {
+				if (slave.underArmHStyle !== "hairless") { slave.underArmHStyle = "bald"; }
+				if (slave.pubicHStyle !== "hairless") { slave.pubicHStyle = "bald"; }
+			}, 0);
+		} else if ((slave.bald === 0 || slave.hStyle !== "bald" || slave.eyebrowHStyle !== "bald") && thisSurgery.hair === 2) {
+			commitProcedure("hair removal", slave => {
+				slave.eyebrowHStyle = "bald";
+				slave.hStyle = "bald";
+				slave.bald = 1;
+			}, 0);
+		} else if (slave.weight >= 10 && thisSurgery.cosmetic > 0) {
+			commitProcedure("liposuction", s => { s.weight -= 50; });
+		} else if ((slave.bellySagPreg > 0 || slave.bellySag > 0) && (thisSurgery.cosmetic > 0 || thisSurgery.tummy > 0 )) {
+			commitProcedure("a tummy tuck", slave => {
+				slave.bellySag = 0;
+				slave.bellySagPreg = 0;
+			}, 20);
+		} else if (slave.voice === 1 && slave.voiceImplant === 0 && thisSurgery.cosmetic > 0) {
+			commitProcedure("a feminine voice", slave => {
+				slave.voice += 1;
+				slave.voiceImplant += 1;
+			});
+		} else if (App.RA.shallShrink(slave.lipsImplant, thisSurgery.lips) && thisSurgery.lips.val === 0) {
+			commitProcedure(`surgery to remove ${his} lip implants`, slave => {
+				slave.lips -= slave.lipsImplant;
+				slave.lipsImplant = 0;
+				if (slave.skill.oral > 10) {
+					slave.skill.oral -= 10;
+				}
+			});
+		} else if (App.RA.shallGrow(slave.lipsImplant, thisSurgery.lips, 10) && slave.lips <= 95) {
+			commitProcedure("bigger lips", slave => {
+				slave.lipsImplant += 10;
+				slave.lips += 10;
+				if (slave.skill.oral > 10) {
+					slave.skill.oral -= 10;
+				}
+			});
+		} else if (slave.scar.hasOwnProperty("belly") && slave.scar.belly["c-section"] > 0 && thisSurgery.cosmetic > 0) {
+			commitProcedure("surgery to remove a c-section scar", s => { App.Medicine.Modification.removeScar(s, "belly", "c-section"); });
+		} else if (slave.faceImplant <= 45 && slave.face <= 95 && thisSurgery.cosmetic === 2) {
+			commitProcedure("a nicer face", slave => {
+				if (slave.faceShape === "masculine") { slave.faceShape = "androgynous"; }
+				slave.faceImplant += 25 - 5 * Math.trunc(V.PC.skill.medicine / 50) - 5 * V.surgeryUpgrade;
+				slave.face = Math.clamp(slave.face + 20, -100, 100);
+			});
+		} else if (slave.faceImplant <= 45 && slave.ageImplant !== 1 && slave.visualAge >= 25 && thisSurgery.cosmetic === 2) {
+			commitProcedure("an age lift", slave => {
+				applyAgeImplant(slave);
+				slave.faceImplant += 25 - 5 * Math.trunc(V.PC.skill.medicine / 50) - 5 * V.surgeryUpgrade;
+			});
+		} else if (slave.voice < 3 && slave.voiceImplant === 0 && thisSurgery.cosmetic === 2) {
+			commitProcedure("a bimbo's voice", slave => {
+				slave.voice += 1;
+				slave.voiceImplant += 1;
+			});
 		}
-		if (slave.health.health > 20 && surgeries.length < 3) {
-			if (slave.waist >= -10 && thisSurgery.cosmetic > 0) {
-				commitProcedure("a narrower waist", s => { s.waist -= 20; });
-			} else if (thisSurgery.hips !== null && slave.hips < 1 && V.surgeryUpgrade === 1 && (slave.hips < thisSurgery.hips)) {
-				commitProcedure("wider hips", slave => {
-					slave.hips++;
-					slave.hipsImplant++;
-				});
-			} else if (slave.waist >= -95 && V.seeExtreme === 1 && thisSurgery.cosmetic === 2) {
-				commitProcedure("a narrower waist", s => { s.waist = Math.clamp(s.waist - 20, -100, 100); });
-			} else if (thisSurgery.hips !== null && slave.hips < 2 && V.surgeryUpgrade === 1 && (slave.hips < thisSurgery.hips)) {
-				commitProcedure("wider hips", slave => {
-					slave.hips++; // FIXME: repeats branch above
-					slave.hipsImplant++;
-				});
-			} else if (thisSurgery.hips !== null && slave.hips < 3 && V.surgeryUpgrade === 1 && (slave.hips < thisSurgery.hips)) {
-				commitProcedure("wider hips", slave => {
-					slave.hips++; // FIXME: repeats branch above
-					slave.hipsImplant++;
-				});
-			}
+
+		if (slave.waist >= -10 && thisSurgery.cosmetic > 0) {
+			commitProcedure("a narrower waist", s => { s.waist -= 20; });
+		} else if (slave.waist >= -95 && V.seeExtreme === 1 && thisSurgery.cosmetic === 2) {
+			commitProcedure("a narrower waist", s => { s.waist = Math.clamp(s.waist - 20, -100, 100); });
+		} else if (thisSurgery.hips !== null && slave.hips < 3 && V.surgeryUpgrade === 1 && (slave.hips < thisSurgery.hips)) {
+			commitProcedure("wider hips", slave => {
+				slave.hips++;
+				slave.hipsImplant++;
+			});
 		}
-		if (slave.health.health > 20 && surgeries.length < 3) {
-			if (slave.bellyImplant < 0 && V.bellyImplants > 0 && thisSurgery.bellyImplant === "install" && slave.womb.length === 0 && slave.broodmother === 0) {
-				const proc = slave => {
-					slave.bellyImplant = 100;
-					slave.preg = -2;
-				};
-				if (slave.ovaries === 1 || slave.mpreg === 1) {
-					V.surgeryType = "bellyIn";
-					commitProcedure("belly implant", proc, 10);
-				} else {
-					V.surgeryType = "bellyInMale";
-					commitProcedure("male belly implant", proc, 50);
-				}
-				bellyIn(slave);
-			} else if (slave.bellyImplant >= 0 && thisSurgery.bellyImplant === "remove") {
-				commitProcedure("belly implant removal", slave => {
-					slave.preg = 0;
-					slave.bellyImplant = -1;
-					slave.cervixImplant = 0;
-				});
-				V.surgeryType = "bellyOut";
+
+		if (slave.bellyImplant < 0 && V.bellyImplants > 0 && thisSurgery.bellyImplant === "install" && slave.womb.length === 0 && slave.broodmother === 0) {
+			const proc = slave => {
+				slave.bellyImplant = 100;
+				slave.preg = -2;
+			};
+			if (slave.ovaries === 1 || slave.mpreg === 1) {
+				V.surgeryType = "bellyIn";
+				commitProcedure("belly implant", proc, 10);
+			} else {
+				V.surgeryType = "bellyInMale";
+				commitProcedure("male belly implant", proc, 50);
 			}
+			bellyIn(slave);
+		} else if (slave.bellyImplant >= 0 && thisSurgery.bellyImplant === "remove") {
+			commitProcedure("belly implant removal", slave => {
+				slave.preg = 0;
+				slave.bellyImplant = -1;
+				slave.cervixImplant = 0;
+			});
+			V.surgeryType = "bellyOut";
 		}
-		if (slave.health.health > 20 && surgeries.length < 3) {
-			if (slave.horn !== "none" && thisSurgery.horn === 1) {
-				commitProcedure(`surgery to remove ${his} implanted horns`, s => { s.horn = "none"; });
-			} else if (slave.horn !== "curved succubus horns" && thisSurgery.horn === 2) {
-				commitProcedure(`surgery to implant ${him} with curved succubus horns`, s => { s.horn = "curved succubus horns"; s.hornColor = "white"; });
-			} else if (slave.horn !== "backswept horns" && thisSurgery.horn === 3) {
-				commitProcedure(`surgery to implant ${him} with backswept horns`, s => { s.horn = "backswept horns"; s.hornColor = "white"; });
-			} else if (slave.horn !== "cow horns" && thisSurgery.horn === 4) {
-				commitProcedure(`surgery to implant ${him} with cow horns`, s => { s.horn = "cow horns"; s.hornColor = "white"; });
-			} else if (slave.horn !== "one long oni horn" && thisSurgery.horn === 5) {
-				commitProcedure(`surgery to implant ${him} with one long oni horn`, s => { s.horn = "one long oni horn"; s.hornColor = "white"; });
-			} else if (slave.horn !== "two long oni horns" && thisSurgery.horn === 6) {
-				commitProcedure(`surgery to implant ${him} with two long oni horns`, s => { s.horn = "two long oni horns"; s.hornColor = "white"; });
-			} else if (slave.horn !== "small horns" && thisSurgery.horn === 7) {
-				commitProcedure(`surgery to implant ${him} with small horns`, s => { s.horn = "small horns"; s.hornColor = "white"; });
-			}
+
+		if (slave.horn !== "none" && thisSurgery.horn === 1) {
+			commitProcedure(`surgery to remove ${his} implanted horns`, s => { s.horn = "none"; });
+		} else if (slave.horn !== "curved succubus horns" && thisSurgery.horn === 2) {
+			commitProcedure(`surgery to implant ${him} with curved succubus horns`, s => { s.horn = "curved succubus horns"; s.hornColor = "white"; });
+		} else if (slave.horn !== "backswept horns" && thisSurgery.horn === 3) {
+			commitProcedure(`surgery to implant ${him} with backswept horns`, s => { s.horn = "backswept horns"; s.hornColor = "white"; });
+		} else if (slave.horn !== "cow horns" && thisSurgery.horn === 4) {
+			commitProcedure(`surgery to implant ${him} with cow horns`, s => { s.horn = "cow horns"; s.hornColor = "white"; });
+		} else if (slave.horn !== "one long oni horn" && thisSurgery.horn === 5) {
+			commitProcedure(`surgery to implant ${him} with one long oni horn`, s => { s.horn = "one long oni horn"; s.hornColor = "white"; });
+		} else if (slave.horn !== "two long oni horns" && thisSurgery.horn === 6) {
+			commitProcedure(`surgery to implant ${him} with two long oni horns`, s => { s.horn = "two long oni horns"; s.hornColor = "white"; });
+		} else if (slave.horn !== "small horns" && thisSurgery.horn === 7) {
+			commitProcedure(`surgery to implant ${him} with small horns`, s => { s.horn = "small horns"; s.hornColor = "white"; });
 		}
-		if (slave.health.health > 20 && surgeries.length < 3) {
-			if (slave.earShape !== "normal" && thisSurgery.earShape === 1) {
-				commitProcedure(`surgery to restore ${his} modified ears`, s => { s.earShape = "normal"; });
-			} else if (slave.earShape !== "pointy" && thisSurgery.earShape === 2) {
-				commitProcedure(`surgery to modify ${his} ears into a pair of small pointy ears`, s => { s.earShape = "pointy"; });
-			} else if (slave.earShape !== "elven" && thisSurgery.earShape === 3) {
-				commitProcedure(`surgery to modify ${his} ears into a pair of elven ears`, s => { s.earShape = "elven"; });
-			} else if (slave.earShape !== "ushi" && thisSurgery.earShape === 4) {
-				commitProcedure(`surgery to modify ${his} ears into a pair of bovine-like ears`, s => { s.earShape = "ushi"; });
-			}
+
+		if (slave.earShape !== "normal" && thisSurgery.earShape === 1) {
+			commitProcedure(`surgery to restore ${his} modified ears`, s => { s.earShape = "normal"; });
+		} else if (slave.earShape !== "pointy" && thisSurgery.earShape === 2) {
+			commitProcedure(`surgery to modify ${his} ears into a pair of small pointy ears`, s => { s.earShape = "pointy"; });
+		} else if (slave.earShape !== "elven" && thisSurgery.earShape === 3) {
+			commitProcedure(`surgery to modify ${his} ears into a pair of elven ears`, s => { s.earShape = "elven"; });
+		} else if (slave.earShape !== "ushi" && thisSurgery.earShape === 4) {
+			commitProcedure(`surgery to modify ${his} ears into a pair of bovine-like ears`, s => { s.earShape = "ushi"; });
 		}
 	}
 
@@ -469,7 +454,7 @@ globalThis.rulesAutosurgery = (function() {
 			surgeriesDisplay = surgeries.slice(0, surgeries.length - 1).join(", ");
 			surgeriesDisplay += `, and ${surgeries[surgeries.length - 1]}`;
 		}
-		r += `${capFirstChar(V.assistant.name)}, ordered to apply surgery, gives ${slave.slaveName} <span class="lime">${surgeriesDisplay}.</span>`;
+		r += `${capFirstChar(V.assistant.name)}, ordered to apply surgery, gives ${slave.slaveName} ${numberWithPlural(surgeries.length, 'a single operation', `${surgeries.length} surgeries`)}: <span class="lime">${surgeriesDisplay}.</span>`;
 	}
 
 	/**
diff --git a/src/js/slaveSummaryHelpers.js b/src/js/slaveSummaryHelpers.js
index 9cf5433d3d6e0da4564cba348d6ac72c80528d86..eb8067abc0754dcbd8525c979eb2f035ee14f6af 100644
--- a/src/js/slaveSummaryHelpers.js
+++ b/src/js/slaveSummaryHelpers.js
@@ -490,7 +490,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 */
 		function long_face(slave, c) {
 			const r = helpers.getNumericRating(data.long.body.face, slave.face + 100);
-			makeSpan(c, `${r.desc} ${slave.faceShape} face`, r.style, true, slave.face);
+			makeSpan(c, ` ${r.desc} ${slave.faceShape} face`, r.style, true, slave.face);
 		}
 
 		/**
diff --git a/src/npc/acquisition.tw b/src/npc/acquisition.tw
index 82433127ed2e342cb12c5086aefde2a13c287887..ebb7ec3198702510af01eb6f78bb89c73570b508 100644
--- a/src/npc/acquisition.tw
+++ b/src/npc/acquisition.tw
@@ -616,7 +616,7 @@ The previous owner seems to have left in something of a hurry.
 			<<set $activeSlave.accent = 0>>
 			<<run SoftenBehavioralFlaw($activeSlave)>>
 			<<run SoftenSexualFlaw($activeSlave)>>
-			<<set $activeSlave.clothes = "a maid outfit", $activeSlave.collar = "pretty jewelry">>
+			<<set $activeSlave.clothes = "a nice maid outfit", $activeSlave.collar = "pretty jewelry">>
 			<<set $activeSlave.assignment = "be your Head Girl", $HeadGirl = $activeSlave>>
 		<<case "PetiteAdmiration">>
 			<<set $activeSlaveOneTimeMinAge = 14>>
diff --git a/src/player/electiveSurgery.tw b/src/player/electiveSurgery.tw
index 57616755ec33c642828353b14c52f1599d8bbc4a..92030963c776635b85ffe303f16d1bf29fc8ab6d 100644
--- a/src/player/electiveSurgery.tw
+++ b/src/player/electiveSurgery.tw
@@ -65,7 +65,7 @@ You're @@.orange;$PC.actualAge years old.@@
 		You've had surgery to make yourself @@.lime;look younger.@@
 		<br>[[Undo Facial surgery|PC Surgery Degradation][$PC.faceImplant = 0, $PC.visualAge = $PC.physicalAge, cashX(forceNeg(5000), "PCmedical"), $surgeryType = "restoreFace"]]
 	<<else>>
-		You could undergo facial surgery to make yourself look older, though you could also make yourself look even younger.
+		You could undergo facial surgery to make yourself look older<<if $PC.visualAge >= 25>>, though you could also make yourself look even younger<</if>>.
 		<br>
 		<<if $PC.visualAge >= 25>>
 			[[Remodel your face to appear younger|PC Surgery Degradation][$PC.faceImplant = 1, cashX(forceNeg(5000), "PCmedical"), $surgeryType = "ageDown"]] |
diff --git a/src/uncategorized/neighborsDevelopment.tw b/src/uncategorized/neighborsDevelopment.tw
index 2bd868154ebf5a215c6cdb158e79b5afa6c94c40..615e7cd7d0e58636430e7d75d5ec1489528ab276 100644
--- a/src/uncategorized/neighborsDevelopment.tw
+++ b/src/uncategorized/neighborsDevelopment.tw
@@ -255,7 +255,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 						Its leadership sells off some of its ownership to stay afloat.
 						<<set $arcologies[$i].ownership -= 1>>
 						<<set $arcologies[$i].prosperity += 5>>
-						This leaves its government in control of approximately @@.orange;<<print Math.trunc($arcologies[$i].ownership*_economicUncertainty)>>%@@ of the arcology<<if $arcologies[$i].minority > 0>>, against its most prominent competition, with a @@.tan;<<print Math.trunc($arcologies[$i].minority*_economicUncertainty>>%@@ share<</if>>.
+						This leaves its government in control of approximately @@.orange;<<print Math.trunc($arcologies[$i].ownership*_economicUncertainty)>>%@@ of the arcology<<if $arcologies[$i].minority > 0>>, against its most prominent competition, with a @@.tan;<<print Math.trunc($arcologies[$i].minority*_economicUncertainty)>>%@@ share<</if>>.
 					<</if>>
 				<</if>>
 			<</if>>
diff --git a/src/uncategorized/ptWorkaround.tw b/src/uncategorized/ptWorkaround.tw
index c9d2e9aa5befc3703be90337079daab6b60f312c..55af71abe5cf0626d6856129c0a434b210b5d95d 100644
--- a/src/uncategorized/ptWorkaround.tw
+++ b/src/uncategorized/ptWorkaround.tw
@@ -503,7 +503,7 @@
 
 <<case "break her will">>
 	<<set $activeSlave.devotion -= 4>>
-	<<if ($activeSlave.trust > 2)>>
+	<<if ($activeSlave.trust > 20)>>
 		<<set $activeSlave.trust -= 15>>
 	<<else>>
 		<<set $activeSlave.trust -= 10>>
@@ -576,10 +576,14 @@
 		<<set $activeSlave.minorInjury = either("black eye", "bruise", "split lip")>>
 		$activeSlave.slaveName's nipples beg for punishment. Whenever $he falls short in the smallest way, you bind $him in such a way that breasts dangle, $his nipples are free and at your mercy, and $he can only move enough to cause $his boobs to sway erotically when $he flinches with pain. You then indulge your inventiveness, applying clips, weights, and simple abuse to $his nipples, while beating the rest of $him thoroughly. $He is subjected to @@.mediumorchid;immense mental pressure@@ @@.gold;in favor of obedience,@@ but the beatings @@.red;affect $his health, leaving $him with a $activeSlave.minorInjury.@@
 	<<elseif ($activeSlave.anus > 0) && canDoAnal($activeSlave)>>
-		You bind $activeSlave.slaveName with the head of an uncomfortably large dildo just inside $his anus. The setup offers $him a choice: $he can either stand and have only tip up $his butt, or $he can take $his weight off $his legs, and take a massive phallus up the ass. You keep $him like this for hours on end. At the start $he tries to stand all the time. Then, $he tries to rest on it for short periods, but realizes that this up and down motion really just leads to $him assraping $himself. Finally, $he becomes so tired and apathetic that $he accepts having a dildo up the ass, and sits down. $He is subjected to @@.mediumorchid;immense mental pressure@@ @@.gold;in favor of obedience,@@ but the extreme stress @@.red;affects $his health.@@
+		You bind $activeSlave.slaveName with the head of an uncomfortably large dildo just inside $his anus. The setup offers $him a choice: $he can either stand and have only tip up $his butt, or $he can take $his weight off $his legs, and take a massive phallus up the ass. You keep $him like this for hours on end. At the start $he tries to stand all the time. Then, $he tries to rest on it for short periods, but realizes that this up and down motion really just leads to $him assraping $himself. Finally, $he becomes so @@.red;tired and apathetic@@ that $he accepts having a dildo up the ass, and sits down. $He is subjected to @@.mediumorchid;immense mental pressure@@ @@.gold;in favor of obedience,@@ but the extreme stress @@.red;affects $his health.@@
+		<<set $activeSlave.health.tired = Math.clamp($activeSlave.health.tired+20, 0, 1000)>>
 	<<else>>
 		<<set $activeSlave.minorInjury = either("black eye", "bruise", "split lip")>>
-		The first time you force $activeSlave.slaveName to please you this week, $he could be forgiven for thinking sexual abuse is to be $his sentence. By the end of the week $he remembers only fearing rape as a pleasant dream. This change is due to your program of roughly using $him whenever $he shows any sign of sleeping. You reward $him with a short doze now and then, but $he is slowly reduced to a nearly insensible state of agonizing fatigue. $He is subjected to @@.mediumorchid;immense mental pressure@@ @@.gold;in favor of obedience,@@ but the extreme stress and rough treatment @@.red;affect $his health and leave $him with a $activeSlave.minorInjury.@@
+		The first time you force $activeSlave.slaveName to please you this week, $he could be forgiven for thinking sexual abuse is to be $his sentence. By the end of the week $he remembers only fearing rape as a pleasant dream. This change is due to your program of roughly using $him whenever $he shows any sign of sleeping. You reward $him with a short doze now and then, but $he is slowly reduced to a nearly insensible state of @@.red;agonizing fatigue.@@ $He is subjected to @@.mediumorchid;immense mental pressure@@ @@.gold;in favor of obedience,@@ but the extreme stress and rough treatment @@.red;affect $his health and leave $him with a $activeSlave.minorInjury.@@
+		<<if $activeSlave.health.tired < 120>>
+			<<set $activeSlave.health.tired = 120>>
+		<</if>>
 	<</if>>
 	<<if ($activeSlave.fetish != "mindbroken")>>
 		<<set _seed = random(1,100)>>
diff --git a/src/utility/birthWidgets.tw b/src/utility/birthWidgets.tw
index 84029a4857225775fff5959924a99289ceb67169..780e49081c67ccab87e0aa0d91da8e9db09a8102 100644
--- a/src/utility/birthWidgets.tw
+++ b/src/utility/birthWidgets.tw
@@ -142,7 +142,7 @@
 	<<if $slaves[$i].fetish == "mindbroken">>
 		<<if $farmyardShows && $seeBestiality>>
 			<<set _roll = random(0, _animals.length)>>
-			$He shows no interest in $his coming birth as $he continues being rutted by a <<print _animals[_roll].species>>, so <<if _S.Farmer>> 0>>_S.Farmer.slaveName<<else>>another slave<</if>> has to pull the animal off of $him and drag $him into the nearest birthing stall. $He also shows almost no reaction when $his child<<if $slaves[$i].pregType > 1>>ren<</if>> begin<<if $slaves[$i].pregType <= 1>>s<</if>> to come out, or when $he is subsequently hosed off before being led back to $farmyardName.
+			$He shows no interest in $his coming birth as $he continues being rutted by a <<print _animals[_roll].species>>, so <<if _S.Farmer > 0>>_S.Farmer.slaveName<<else>>another slave<</if>> has to pull the animal off of $him and drag $him into the nearest birthing stall. $He also shows almost no reaction when $his child<<if $slaves[$i].pregType > 1>>ren<</if>> begin<<if $slaves[$i].pregType <= 1>>s<</if>> to come out, or when $he is subsequently hosed off before being led back to $farmyardName.
 		<<else>>
 			$He shows no interest in $his coming birth as $he continues <<print either("loading hay bales", "milking a cow", "pulling weeds")>>, until $his contractions become so strong that $he collapses to $his knees. <<if $Farmer > 0>>$Farmer.name<<else>>Another slave<</if>> is at $his side in an instant, pulling $him to $his feet and into a birthing stall. $He also shows almost no reaction when $his child<<if $slaves[$i].pregType > 1>>ren<</if>> begin<<if $slaves[$i].pregType <= 1>>s<</if>> to come out, or when $he is subsequently hosed off before being led back to $farmyardName.
 		<</if>>
@@ -357,7 +357,7 @@
 	$He returns to $his bed and strips before slipping into it. $He makes $himself comfortable and begins working on birthing $his bab<<if $slaves[$i].pregType > 1>>ies<<else>>y<</if>>. $He is quite experienced in delivering $his cows' children, but $he finds it much more difficult to apply $his knowledge to $himself. $His child<<if $slaves[$i].pregType > 1>>ren are<<else>> is<</if>> promptly taken and, after a short rest, $he returns to caring for your cows.
 
 <<case "be the Farmer">>
-	$He heads to $his private room before stripping and calling in a couple of nearby slaves to aid $him. Though $he has delivered more than a few of $his livestocks' offspring, delivering $his own proves to be a slightly more difficult ordeal. $He manages, though, and after $his child<<if $slaves[$i].pregType > 1>>ren<</if>>ren are<</else>> is<</if>> taken from $him and $he's had a shower and a short rest, $he returns to looking after $farmyardName.
+	$He heads to $his private room before stripping and calling in a couple of nearby slaves to aid $him. Though $he has delivered more than a few of $his livestocks' offspring, delivering $his own proves to be a slightly more difficult ordeal. $He manages, though, and after $his child<<if $slaves[$i].pregType > 1>>ren are<</else>> is<</if>> taken from $him and $he's had a shower and a short rest, $he returns to looking after $farmyardName.
 
 <<case "be the Wardeness">>
 	<<if $slaves[$i].fetish == "mindbroken">>	/* FIXME: can Wardens be mindbroken? */
@@ -1017,6 +1017,7 @@
 		<</if>>
 	<</if>>
 
+<<case "work as a nanny">>
 	In the middle of <<if $nurseryBabies>>changing a baby's diaper<<else>>cleaning $nurseryName<</if>>, $slaves[$i].slaveName's water breaks. $He hurries into a changing room and assumes a birthing position.
 	<<ClothingBirth>>
 	Several of the other slaves present help $him with $his newborn<<if $slaves[$i].pregType > 1>>s<</if>>. <<if _S.Matron>>_S.Matron.slaveName, lured in by the commotion, shoos the other slaves out and helps the new mother to a private room to unwind<<else>>Soon a servant arrives to take $his child<<if $slaves[$i].pregType > 1>>ren<</if>> away, and $he is ushered into a shower to clean up and relax<</if>>.