diff --git a/devTools/types/FC/arcology.d.ts b/devTools/types/FC/arcology.d.ts
index a28aece4d3a46e0384a7c935acd8616053915d4c..75413f5f629bea4761baaa586d193a00185a45f4 100644
--- a/devTools/types/FC/arcology.d.ts
+++ b/devTools/types/FC/arcology.d.ts
@@ -1,42 +1,43 @@
 declare namespace FC {
 	interface FutureSocietyIdMap {
-		FSSupremacist: {noun: "Racial Supremacism", adj: "Supremacist"};
-		FSSubjugationist: {noun: "Racial Subjugationism", adj: "Subjugationist"};
-		FSGenderRadicalist: {noun: "Gender Radicalism", adj: "Gender Radicalist"};
-		FSGenderFundamentalist: {noun: "Gender Fundamentalism", adj: "Gender Fundamentalist"};
-		FSDegradationist: {noun: "Degradationism", adj: "Degradationist"};
-		FSPaternalist: {noun: "Paternalism", adj: "Paternalist"};
-		FSBodyPurist: {noun: "Body Purism", adj: "Body Purist"};
-		FSTransformationFetishist: {noun: "Transformation Fetishism", adj: "Transformation Fetishist"};
-		FSYouthPreferentialist: {noun: "Youth Preferentialism", adj: "Youth Preferentialist"};
-		FSMaturityPreferentialist: {noun: "Maturity Preferentialism", adj: "Maturity Preferentialist"};
-		FSSlimnessEnthusiast: {noun: "Slimness Enthusiasm", adj: "Slimness Enthusiast"};
-		FSAssetExpansionist: {noun: "Asset Expansionism", adj: "Asset Expansionist"};
-		FSPastoralist: {noun: "Pastoralism", adj: "Pastoralist"};
-		FSCummunism: {noun: "Cummunism", adj: "Cummunist"};
-		FSPhysicalIdealist: {noun: "Physical Idealism", adj: "Physical Idealist"};
-		FSHedonisticDecadence: {noun: "Decadent Hedonism", adj: "Decadent Hedonist"};
-		FSChattelReligionist: {noun: "Chattel Religionism", adj: "Chattel Religionist"};
-		FSNull: {noun: "Multiculturalism", adj: "Multiculturalist"};
-		FSIncestFetishist: {noun: "Incest Fetishism", adj: "Incest Fetishist"};
-		FSRomanRevivalist: {noun: "Roman Revivalism", adj: "Roman Revivalist"};
-		FSNeoImperialist: {noun: "Neo-Imperialism", adj: "Neo-Imperialist"};
-		FSEgyptianRevivalist: {noun: "Egyptian Revivalism", adj: "Egyptian Revivalist"};
-		FSEdoRevivalist: {noun: "Edo Revivalism", adj: "Edo Revivalist"};
-		FSArabianRevivalist: {noun: "Arabian Revivalism", adj: "Arabian Revivalist"};
-		FSChineseRevivalist: {noun: "Chinese Revivalism", adj: "Chinese Revivalist"};
-		FSAztecRevivalist: {noun: "Aztec Revivalism", adj: "Aztec Revivalist"};
-		FSRepopulationFocus: {noun: "Repopulation Focus", adj: "Repopulationist"};
-		FSRestart: {noun: "Eugenics", adj: "Eugenics"};
-		FSIntellectualDependency: {noun: "Intellectual Dependency", adj: "Intellectual Dependency"};
-		FSSlaveProfessionalism: {noun: "Slave Professionalism", adj: "Slave Professional"};
-		FSPetiteAdmiration: {noun: "Petite Admiration", adj: "Petite Admiration"};
-		FSStatuesqueGlorification: {noun: "Statuesque Glorification", adj: "Statuesque Glorification"};
+		FSSupremacist: {noun: "Racial Supremacism", adj: "Supremacist", deco: "Supremacist"};
+		FSSubjugationist: {noun: "Racial Subjugationism", adj: "Subjugationist", deco: "Subjugationist"};
+		FSGenderRadicalist: {noun: "Gender Radicalism", adj: "Gender Radicalist", deco: "Gender Radicalist"};
+		FSGenderFundamentalist: {noun: "Gender Fundamentalism", adj: "Gender Fundamentalist", deco: "Gender Fundamentalist"};
+		FSDegradationist: {noun: "Degradationism", adj: "Degradationist", deco: "Degradationist"};
+		FSPaternalist: {noun: "Paternalism", adj: "Paternalist", deco: "Paternalist"};
+		FSBodyPurist: {noun: "Body Purism", adj: "Body Purist", deco: "Body Purist"};
+		FSTransformationFetishist: {noun: "Transformation Fetishism", adj: "Transformation Fetishist", deco: "Transformation Fetishist"};
+		FSYouthPreferentialist: {noun: "Youth Preferentialism", adj: "Youth Preferentialist", deco: "Youth Preferentialist"};
+		FSMaturityPreferentialist: {noun: "Maturity Preferentialism", adj: "Maturity Preferentialist", deco: "Maturity Preferentialist"};
+		FSSlimnessEnthusiast: {noun: "Slimness Enthusiasm", adj: "Slimness Enthusiast", deco: "Slimness Enthusiast"};
+		FSAssetExpansionist: {noun: "Asset Expansionism", adj: "Asset Expansionist", deco: "Asset Expansionist"};
+		FSPastoralist: {noun: "Pastoralism", adj: "Pastoralist", deco: "Pastoralist"};
+		FSCummunism: {noun: "Cummunism", adj: "Cummunist", deco: ""};
+		FSPhysicalIdealist: {noun: "Physical Idealism", adj: "Physical Idealist", deco: "Physical Idealist"};
+		FSHedonisticDecadence: {noun: "Decadent Hedonism", adj: "Decadent Hedonist", deco: "Hedonistic"};
+		FSChattelReligionist: {noun: "Chattel Religionism", adj: "Chattel Religionist", deco: "Chattel Religionist"};
+		FSNull: {noun: "Multiculturalism", adj: "Multiculturalist", deco: ""};
+		FSIncestFetishist: {noun: "Incest Fetishism", adj: "Incest Fetishist", deco: ""};
+		FSRomanRevivalist: {noun: "Roman Revivalism", adj: "Roman Revivalist", deco: "Roman Revivalist"};
+		FSNeoImperialist: {noun: "Neo-Imperialism", adj: "Neo-Imperialist", deco: "Neo-Imperialist"};
+		FSEgyptianRevivalist: {noun: "Egyptian Revivalism", adj: "Egyptian Revivalist", deco: "Egyptian Revivalist"};
+		FSEdoRevivalist: {noun: "Edo Revivalism", adj: "Edo Revivalist", deco: "Edo Revivalist"};
+		FSArabianRevivalist: {noun: "Arabian Revivalism", adj: "Arabian Revivalist", deco: "Arabian Revivalist"};
+		FSChineseRevivalist: {noun: "Chinese Revivalism", adj: "Chinese Revivalist", deco: "Chinese Revivalist"};
+		FSAztecRevivalist: {noun: "Aztec Revivalism", adj: "Aztec Revivalist", deco: "Aztec Revivalist"};
+		FSRepopulationFocus: {noun: "Repopulation Focus", adj: "Repopulationist", deco: "Repopulationist"};
+		FSRestart: {noun: "Eugenics", adj: "Eugenics", deco: "Eugenics"};
+		FSIntellectualDependency: {noun: "Intellectual Dependency", adj: "Intellectual Dependency", deco: "Intellectual Dependency"};
+		FSSlaveProfessionalism: {noun: "Slave Professionalism", adj: "Slave Professional", deco: "Slave Professionalism"};
+		FSPetiteAdmiration: {noun: "Petite Admiration", adj: "Petite Admiration", deco: "Petite Admiration"};
+		FSStatuesqueGlorification: {noun: "Statuesque Glorification", adj: "Statuesque Glorification", deco: "Statuesque Glorification"}
 	}
 
 	type FutureSociety = keyof FutureSocietyIdMap;
 	type FutureSocietyNoun = FutureSocietyIdMap[keyof FutureSocietyIdMap]["noun"];
 	type FutureSocietyAdj = FutureSocietyIdMap[keyof FutureSocietyIdMap]["adj"];
+	type FutureSocietyDeco = FutureSocietyIdMap[keyof FutureSocietyIdMap]["deco"] | "standard";
 
 	type FSPolicyValue = number | "unset";
 
diff --git a/src/arcologyBuilding/shops.js b/src/arcologyBuilding/shops.js
index 53a6113f72a2338987dcdd6988bf2030c6043def..7d2191a16f4f5f3a52cde0f78cc268a94e969617 100644
--- a/src/arcologyBuilding/shops.js
+++ b/src/arcologyBuilding/shops.js
@@ -334,55 +334,18 @@ App.Arcology.Cell.Shop = class extends App.Arcology.Cell.BaseCell {
 			));
 		}
 
-		/**
-		 * @param {App.Arcology.Cell.Shop} cell
-		 * @param {FC.FutureSociety} fsProp
-		 * @param {string} [fsType] thanks, Hedonism...
-		 */
-		function fsUpgradeLink(cell, fsProp, fsType) {
-			if (!fsType) {
-				 // TODO: should probably have a different list of valid decoration strings, instead of using the display adjective with exceptions
-				fsType = FutureSocieties.displayAdj(fsProp);
-			}
-			if ((A[fsProp] !== "unset") && !App.Arcology.hasShopOfType(fsType)) {
-				fragment.append(cell._makeUpgrade(
-					`Upgrade this sector to appeal to ${FutureSocieties.displayAdj(fsProp)} establishments.`,
+		for (const FS of FutureSocieties.activeFSes(A)) {
+			const decorationName = FutureSocieties.decorationName(FS);
+			if (decorationName && !App.Arcology.hasShopOfType(decorationName)) {
+				fragment.append(this._makeUpgrade(
+					`Upgrade this sector to appeal to ${FutureSocieties.displayAdj(FS)} establishments.`,
 					() => {
-						cell.type = fsType;
+						this.type = decorationName;
 					}, cost
 				));
 			}
 		}
 
-		fsUpgradeLink(this, "FSSubjugationist");
-		fsUpgradeLink(this, "FSSupremacist");
-		fsUpgradeLink(this, "FSGenderRadicalist");
-		fsUpgradeLink(this, "FSGenderFundamentalist");
-		fsUpgradeLink(this, "FSPaternalist");
-		fsUpgradeLink(this, "FSDegradationist");
-		fsUpgradeLink(this, "FSIntellectualDependency");
-		fsUpgradeLink(this, "FSSlaveProfessionalism", "Slave Professionalism");
-		fsUpgradeLink(this, "FSBodyPurist");
-		fsUpgradeLink(this, "FSTransformationFetishist");
-		fsUpgradeLink(this, "FSYouthPreferentialist");
-		fsUpgradeLink(this, "FSMaturityPreferentialist");
-		fsUpgradeLink(this, "FSPetiteAdmiration");
-		fsUpgradeLink(this, "FSStatuesqueGlorification");
-		fsUpgradeLink(this, "FSSlimnessEnthusiast");
-		fsUpgradeLink(this, "FSAssetExpansionist");
-		fsUpgradeLink(this, "FSPastoralist");
-		fsUpgradeLink(this, "FSPhysicalIdealist");
-		fsUpgradeLink(this, "FSHedonisticDecadence", "Hedonism");
-		fsUpgradeLink(this, "FSRepopulationFocus");
-		fsUpgradeLink(this, "FSChattelReligionist");
-		fsUpgradeLink(this, "FSRomanRevivalist");
-		fsUpgradeLink(this, "FSAztecRevivalist");
-		fsUpgradeLink(this, "FSNeoImperialist");
-		fsUpgradeLink(this, "FSEgyptianRevivalist");
-		fsUpgradeLink(this, "FSEdoRevivalist");
-		fsUpgradeLink(this, "FSArabianRevivalist");
-		fsUpgradeLink(this, "FSChineseRevivalist");
-
 		if (this.type !== "Shops") {
 			fragment.append(this._makeUpgrade(
 				"Return this sector to standard outlets",
diff --git a/src/data/backwardsCompatibility/backwardsCompatibility.js b/src/data/backwardsCompatibility/backwardsCompatibility.js
index 9f7a1170aa033d9d93bbb5e271f059562587d7b4..59b30d4611eb50cc959109be7cb7ef45f5d3874e 100644
--- a/src/data/backwardsCompatibility/backwardsCompatibility.js
+++ b/src/data/backwardsCompatibility/backwardsCompatibility.js
@@ -1291,7 +1291,9 @@ App.Update.globalVariables = function(node) {
 	V.boughtItem.toys.enema = V.boughtItem.toys.enema || V.enema || 0;
 	V.boughtItem.toys.medicalEnema = V.boughtItem.toys.medicalEnema || V.medicalEnema || 0;
 
-	V.building.findCells(cell => cell instanceof App.Arcology.Cell.Shop && cell.type === "Hedonistic Decadence").forEach(cell => cell.type = "Hedonism");
+	V.building.findCells(cell => cell instanceof App.Arcology.Cell.Shop && (cell.type === "Hedonistic Decadence" || cell.type === "Hedonism")).forEach(cell => cell.type = "Hedonistic");
+	V.building.findCells(cell => cell instanceof App.Arcology.Cell.Shop && cell.type === "Repopulation Focus").forEach(cell => cell.type = "Repopulationist");
+	V.building.findCells(cell => cell instanceof App.Arcology.Cell.Shop && cell.type === "Neo Imperialist").forEach(cell => cell.type = "Neo-Imperialist");
 
 	node.append(`Done!`);
 };
diff --git a/src/endWeek/economics/fsDevelopments.js b/src/endWeek/economics/fsDevelopments.js
index a2eb6a00cc79edb6cd656193f3c0a121e2f0558b..13c797d63ef0f7e8e4add798daa286f204d987fc 100644
--- a/src/endWeek/economics/fsDevelopments.js
+++ b/src/endWeek/economics/fsDevelopments.js
@@ -207,7 +207,7 @@ App.EndWeek.FSDevelopments = function() {
 
 		if (V.SecExp.edicts.defense.pregExemption === 1) {
 			r.push(`Pregnant citizens are allowed and encouraged to avoid military service, making their value evident to all citizens.`);
-			FutureSocieties.Change("RepopulationFocus", 2);
+			FutureSocieties.Change("Repopulationist", 2);
 		}
 
 		if (V.SecExp.edicts.defense.eliteOfficers === 1) {
@@ -225,8 +225,7 @@ App.EndWeek.FSDevelopments = function() {
 	const cells = V.building.findCells(cell => cell instanceof App.Arcology.Cell.Shop && !["Brothel", "Club", "Shops"].includes(cell.type));
 	for (const cell of cells) {
 		r.push(`The ${cell.type} establishments on the Promenade help develop society.`);
-		const changedFS = cell.type.replace(/[- ]/g, "");
-		FutureSocieties.Change(changedFS, 4);
+		FutureSocieties.Change(cell.type, 4);
 	}
 
 	/* PA FS bonuses */
diff --git a/src/endWeek/economics/persBusiness.js b/src/endWeek/economics/persBusiness.js
index 688d9c4eca1b7415bc5a1c9e5fcb821281f3addc..84bddcd21596872ce25ae034383c3074a85933d1 100644
--- a/src/endWeek/economics/persBusiness.js
+++ b/src/endWeek/economics/persBusiness.js
@@ -22,7 +22,7 @@ App.EndWeek.personalBusiness = function() {
 		r.push(`<span class="red">You are in debt.</span> This week, interest came to ${cashFormat(interest)}.`);
 		if (V.arcologies[0].FSRomanRevivalist !== "unset") {
 			r.push(`Society <span class="red">very strongly disapproves</span> of your being in debt; this damages the idea that you model yourself on what a Roman leader should be.`);
-			FutureSocieties.Change("RomanRevivalist", -10);
+			FutureSocieties.Change("Roman Revivalist", -10);
 		}
 		if (V.cash < 0 && V.cash > -25000 && V.arcologies[0].FSRestartDecoration === 100) {
 			if (V.eugenicsFullControl !== 1) {
@@ -485,7 +485,7 @@ App.EndWeek.personalBusiness = function() {
 			} else {
 				r.push(`responsible Roman lady.`);
 			}
-			FutureSocieties.Change("RomanRevivalist", 2);
+			FutureSocieties.Change("Roman Revivalist", 2);
 		}
 	} else if (V.cash > 1000) {
 		income = Math.trunc(Math.min(3000 * Math.log(V.cash), V.cash * 0.07));
diff --git a/src/endWeek/economics/reputation.js b/src/endWeek/economics/reputation.js
index bfa8e13f4941d5d51f412bcba86227c956888796..1a31805abc4d44f9416b54ea7e5e075f539bb94a 100644
--- a/src/endWeek/economics/reputation.js
+++ b/src/endWeek/economics/reputation.js
@@ -16,10 +16,10 @@ App.EndWeek.reputation = function() {
 			if (V.nicaea.achievement === "slaves") {
 				if (V.slaves.length > 50) {
 					r.push(`<span class="green">strongly approve</span> of the large`);
-					FutureSocieties.Change("ChattelReligionist", 5);
+					FutureSocieties.Change("Chattel Religionist", 5);
 				} else if (V.slaves.length > 20) {
 					r.push(`<span class="green">approve</span> of the good`);
-					FutureSocieties.Change("ChattelReligionist", 2);
+					FutureSocieties.Change("Chattel Religionist", 2);
 				} else {
 					r.push(`are not impressed by the`);
 				}
@@ -27,10 +27,10 @@ App.EndWeek.reputation = function() {
 			} else if (V.nicaea.achievement === "devotion") {
 				if (V.averageDevotion > 80) {
 					r.push(`<span class="green">strongly approve</span> of the worshipfulness`);
-					FutureSocieties.Change("ChattelReligionist", 5);
+					FutureSocieties.Change("Chattel Religionist", 5);
 				} else if (V.averageDevotion > 50) {
 					r.push(`<span class="green">approve</span> of the devotion`);
-					FutureSocieties.Change("ChattelReligionist", 2);
+					FutureSocieties.Change("Chattel Religionist", 2);
 				} else {
 					r.push(`are not impressed by the devotion`);
 				}
@@ -38,10 +38,10 @@ App.EndWeek.reputation = function() {
 			} else {
 				if (V.averageTrust > 50) {
 					r.push(`<span class="green">strongly approve</span> of the great trust your slaves place in you.`);
-					FutureSocieties.Change("ChattelReligionist", 5);
+					FutureSocieties.Change("Chattel Religionist", 5);
 				} else if (V.averageTrust > 20) {
 					r.push(`<span class="green">approve</span> of the trust your slaves place in you.`);
-					FutureSocieties.Change("ChattelReligionist", 2);
+					FutureSocieties.Change("Chattel Religionist", 2);
 				} else {
 					r.push(`are not impressed by the fear many of your slaves feel towards you.`);
 				}
@@ -172,7 +172,7 @@ App.EndWeek.reputation = function() {
 				r.push(`Your reputation is so well-established that society has accepted your notoriously feminine appearance despite how unusual it is for a prominent slaveowner to look like you do.`);
 				if (V.arcologies[0].FSGenderRadicalist > 30) {
 					r.push(`Indeed, society sees you as entirely male, since you are powerful, and <span class="green">strongly approves</span> of your nonconformity; this advances the redefinition of gender around power.`);
-					FutureSocieties.Change("GenderRadicalist", 5);
+					FutureSocieties.Change("Gender Radicalist", 5);
 				} else if (V.arcologies[0].FSGenderFundamentalist > 30) {
 					r.push(`Indeed, society has been reconciled to female leadership, preferring to see you as a mother figure.`);
 				}
@@ -180,14 +180,14 @@ App.EndWeek.reputation = function() {
 				r.push(`Society accepts you as an arcology owner, since it has become open-minded about power and gender.`);
 				if (V.arcologies[0].FSGenderRadicalist > 50) {
 					r.push(`Indeed, society sees you as fundamentally male, since you are powerful, and <span class="green">strongly approves</span> of your audacity; this advances the redefinition of gender around power.`);
-					FutureSocieties.Change("GenderRadicalist", 5);
+					FutureSocieties.Change("Gender Radicalist", 5);
 				}
 			} else {
 				r.push(`Most prominent slaveowners are male, and your obviously feminine appearance makes it <span class="red">harder for you to maintain your reputation.</span>`);
 				repX(forceNeg(Math.min((V.rep * 0.05), 500)), "PCappearance");
 				if (V.arcologies[0].FSGenderFundamentalist > 10) {
 					r.push(`Society <span class="red">strongly resents</span> your being an arcology owner; this damages the idea that women should not be in positions of responsibility.`);
-					FutureSocieties.Change("GenderFundamentalist", -5);
+					FutureSocieties.Change("Gender Fundamentalist", -5);
 				}
 			}
 		} else if ((V.PC.boobs >= 300) || V.PC.title === 0) {
@@ -195,7 +195,7 @@ App.EndWeek.reputation = function() {
 				r.push(`Your reputation is so strong that society has accepted your feminine appearance despite how unusual it is for a prominent slaveowner to look like you do.`);
 				if (V.arcologies[0].FSGenderRadicalist > 30) {
 					r.push(`Indeed, society sees you as entirely male, since you are powerful, and <span class="green">strongly approves</span> of your nonconformity; this advances the redefinition of gender around power.`);
-					FutureSocieties.Change("GenderRadicalist", 5);
+					FutureSocieties.Change("Gender Radicalist", 5);
 				} else if (V.arcologies[0].FSGenderFundamentalist > 30) {
 					r.push(`Indeed, society has been reconciled to your feminine appearance, seeing you as a person apart.`);
 				}
@@ -203,14 +203,14 @@ App.EndWeek.reputation = function() {
 				r.push(`Society accepts you as an arcology owner, since it has become open-minded anyone who has a cock and fucks.`);
 				if (V.arcologies[0].FSGenderRadicalist > 30) {
 					r.push(`Indeed, society sees you as dominant, since you fuck bitches, and <span class="green">strongly approves</span> of your nonconformity; this advances the redefinition of gender around power.`);
-					FutureSocieties.Change("GenderRadicalist", 5);
+					FutureSocieties.Change("Gender Radicalist", 5);
 				}
 			} else {
 				r.push(`Most prominent slaveowners are very masculine, and your feminine appearance makes it <span class="red">harder for you to maintain your reputation.</span>`);
 				repX(forceNeg(Math.min((V.rep * 0.025), 250)), "PCappearance");
 				if (V.arcologies[0].FSGenderFundamentalist > 30) {
 					r.push(`Society <span class="red">strongly resents</span> your being an arcology owner; this damages the idea that feminine people should not be in positions of responsibility.`);
-					FutureSocieties.Change("GenderFundamentalist", -5);
+					FutureSocieties.Change("Gender Fundamentalist", -5);
 				}
 			}
 		} else if ((V.PC.dick === 0) || (V.PC.vagina !== -1)) {
@@ -218,7 +218,7 @@ App.EndWeek.reputation = function() {
 				r.push(`Your reputation is so strong that society has accepted your unorthodox arrangement downstairs, for an arcology owner.`);
 				if (V.arcologies[0].FSGenderRadicalist > 30) {
 					r.push(`Indeed, society sees you as entirely male, since you are powerful, and <span class="green">strongly approves</span> of your nonconformity; this advances the redefinition of gender around power.`);
-					FutureSocieties.Change("GenderRadicalist", 5);
+					FutureSocieties.Change("Gender Radicalist", 5);
 				} else if (V.arcologies[0].FSGenderFundamentalist > 30) {
 					r.push(`Indeed, society has been reconciled to your strangeness, seeing you as a person apart.`);
 				}
@@ -226,14 +226,14 @@ App.EndWeek.reputation = function() {
 				r.push(`Society accepts you as an arcology owner, since it has become open-minded about the exact genital layout of powerful people.`);
 				if (V.arcologies[0].FSGenderRadicalist > 30) {
 					r.push(`Indeed, society sees you as dominant, since you are powerful, and <span class="green">strongly approves</span> of your nonconformity; this advances the redefinition of gender around power.`);
-					FutureSocieties.Change("GenderRadicalist", 5);
+					FutureSocieties.Change("Gender Radicalist", 5);
 				}
 			} else {
 				r.push(`Most prominent slaveowners are very masculine, and though your unorthodox arrangement downstairs isn't obvious when you're clothed, the rumors are unavoidable and it's <span class="red">harder for you to maintain your reputation.</span>`);
 				repX(forceNeg(Math.min((V.rep * 0.025), 250)), "PCappearance");
 				if (V.arcologies[0].FSGenderFundamentalist > 30) {
 					r.push(`Society <span class="red">strongly resents</span> your being an arcology owner; this damages the idea that people who are not men should not be in positions of responsibility.`);
-					FutureSocieties.Change("GenderFundamentalist", -5);
+					FutureSocieties.Change("Gender Fundamentalist", -5);
 				}
 			}
 		}
@@ -259,7 +259,7 @@ App.EndWeek.reputation = function() {
 			} else {
 				repX(forceNeg(Math.min((V.rep * 0.05), 750)), "PCappearance");
 				r.push(`Society <span class="red">strongly despises</span> being led by someone so easily outsmarted by even the slave population.`);
-				FutureSocieties.Change("SlaveProfessionalism", -10);
+				FutureSocieties.Change("Slave Professionalism", -10);
 			}
 		}
 	} else if (V.PC.intelligence + V.PC.intelligenceImplant <= 10) {
@@ -287,16 +287,16 @@ App.EndWeek.reputation = function() {
 					r.push(`You are so well regarded that society has acquiesced that getting penetrated is not a sure sign of femininity.`);
 				} else {
 					r.push(`Society views getting fucked as sign of femininity and is <span class="red">strongly against your sexual preferences.</span>`);
-					FutureSocieties.Change("GenderRadicalist", -1);
+					FutureSocieties.Change("Gender Radicalist", -1);
 					repX(-1000, "PCactions");
 				}
 			} else if (V.arcologies[0].FSGenderFundamentalist !== "unset" && V.PC.vagina !== -1 && V.PC.title === 0) {
 				if (V.rep > 10000 - _enduringRep) {
 					r.push(`Society has grown accustomed to your efforts enough to not care that you enjoy slave dick. In fact, it even <span class="green">strengthens</span> traditional gender roles, even though you insist on breaking them.`);
-					FutureSocieties.Change("GenderFundamentalist", 1);
+					FutureSocieties.Change("Gender Fundamentalist", 1);
 				} else {
 					r.push(`Society wonders if you would be happier in a whore house getting fucked all day instead of trying to lead an arcology. Your efforts <span class="red">strongly support</span> the idea that women should not be in positions of responsibility.`);
-					FutureSocieties.Change("GenderFundamentalist", -3);
+					FutureSocieties.Change("Gender Fundamentalist", -3);
 					repX(-1000, "PCactions");
 				}
 			} else {
@@ -563,7 +563,7 @@ App.EndWeek.reputation = function() {
 	if (V.arcologies[0].FSRomanRevivalist !== "unset") {
 		if (V.mercenaries > 0) {
 			r.push(`Society <span class="green">approves</span> of how you are providing for the defense of the state, as should all citizens of the new Rome.`);
-			FutureSocieties.Change("RomanRevivalist", V.mercenaries);
+			FutureSocieties.Change("Roman Revivalist", V.mercenaries);
 		}
 		if (V.slaves.length > 20 && V.cash > 50000) {
 			r.push(`Society <span class="green">strongly approves</span> of your wealth and prosperity, fit goals for the`);
@@ -574,42 +574,42 @@ App.EndWeek.reputation = function() {
 			} else {
 				r.push(`rising Roman lady.`);
 			}
-			FutureSocieties.Change("RomanRevivalist", 5);
+			FutureSocieties.Change("Roman Revivalist", 5);
 		}
 		if (V.language !== "Latin") {
 			r.push(`Continuing to use ${V.language} as the lingua franca of ${V.arcologies[0].name} rather than the storied Latin <span class="red">disappoints</span> society and causes doubt about your revivalist project.`);
-			FutureSocieties.Change("RomanRevivalist", -2);
+			FutureSocieties.Change("Roman Revivalist", -2);
 		}
 	} else if (V.arcologies[0].FSAztecRevivalist !== "unset") {
 		if (V.PC.visualAge >= 35) {
 			r.push(`Society <span class="green">approves</span> of your advancing age, which advances the ancient Aztec ideal of an experienced leader of the people.`);
-			FutureSocieties.Change("AztecRevivalist", 1);
+			FutureSocieties.Change("Aztec Revivalist", 1);
 		}
 		if (V.HeadGirlID === 0) {
 			r.push(`Society <span class="red">disapproves</span> of you not having a Head Girl as an advisor and assistant.`);
-			FutureSocieties.Change("AztecRevivalist", -2);
+			FutureSocieties.Change("Aztec Revivalist", -2);
 		} else {
 			r.push(`Society <span class="green">approves</span> of your reliance on a Head Girl as an advisor and assistant.`);
-			FutureSocieties.Change("AztecRevivalist", 2);
+			FutureSocieties.Change("Aztec Revivalist", 2);
 		}
 		if (V.PC.skill.warfare < 0) {
 			r.push(`Society <span class="red">greatly disapproves</span> of your feebleness in the arts of war.`);
-			FutureSocieties.Change("AztecRevivalist", -4);
+			FutureSocieties.Change("Aztec Revivalist", -4);
 		} else if (V.PC.skill.warfare < 50) {
 			r.push(`Society <span class="red">disapproves</span> of you not being properly trained in the arts of war.`);
-			FutureSocieties.Change("AztecRevivalist", -2);
+			FutureSocieties.Change("Aztec Revivalist", -2);
 		} else {
 			r.push(`Society <span class="green">approves</span> of having a leader that is trained in the arts of war.`);
-			FutureSocieties.Change("AztecRevivalist", 2);
+			FutureSocieties.Change("Aztec Revivalist", 2);
 		}
 		if (V.language !== "Nahuatl") {
 			r.push(`Continuing to use ${V.language} as the lingua franca of ${V.arcologies[0].name} rather than the revived Nahuatl <span class="red">disappoints</span> society and causes doubt about your revivalist project.`);
-			FutureSocieties.Change("AztecRevivalist", -3);
+			FutureSocieties.Change("Aztec Revivalist", -3);
 		}
 	} else if (V.arcologies[0].FSNeoImperialist !== "unset") {
 		if (V.mercenaries > 0) {
 			r.push(`Society <span class="green">approves</span> of your strong militarism and elite mercenaries, as your tradition of Imperial conquest glorifies military success above all else.`);
-			FutureSocieties.Change("NeoImperialist", V.mercenaries);
+			FutureSocieties.Change("Neo-Imperialist", V.mercenaries);
 		}
 		if (V.slaves.length > 20 && V.cash > 50000) {
 			r.push(`Society <span class="green">strongly approves</span> of your great wealth and prosperity, as is only fitting for an`);
@@ -620,82 +620,82 @@ App.EndWeek.reputation = function() {
 			} else {
 				r.push(`graceful Imperial noble.`);
 			}
-			FutureSocieties.Change("NeoImperialist", 5);
+			FutureSocieties.Change("Neo-Imperialist", 5);
 		}
 		if (V.cash < 1000) {
 			r.push(`Society <span class="red">disapproves</span> of your poverty; it is viewed as completely unbefitting for an Imperial ruler to have so little cash on hand, and indicative of weakness in your rule.`);
-			FutureSocieties.Change("NeoImperialist", -2);
+			FutureSocieties.Change("Neo-Imperialist", -2);
 		}
 		if (V.PC.skill.warfare < 0) {
 			r.push(`Society <span class="red">greatly disapproves</span> of your weakness in combat. The core duty of any Imperial noble is to fight, and your failure to understand the art of war is an unacceptable weakness.`);
-			FutureSocieties.Change("NeoImperialist", -4);
+			FutureSocieties.Change("Neo-Imperialist", -4);
 		} else if (V.PC.skill.warfare < 50) {
 			r.push(`Society <span class="red">disapproves</span> of you lacking training in the art of warfare, as fighting is a core duty of any Imperial noble.`);
-			FutureSocieties.Change("NeoImperialist", -2);
+			FutureSocieties.Change("Neo-Imperialist", -2);
 		} else {
 			r.push(`Society <span class="green">approves</span> of having a leader who is a capable warrior. Your strength in battle is seen proof of your indisputable right to rule.`);
-			FutureSocieties.Change("NeoImperialist", 2);
+			FutureSocieties.Change("Neo-Imperialist", 2);
 		}
 	} else if (V.arcologies[0].FSEgyptianRevivalist !== "unset") {
 		const _racialVarieties = new Set(V.slaves.map((s) => s.race));
 		if (_racialVarieties.size > 4) {
 			r.push(`Society <span class="green">strongly approves</span> of how you own a cornucopia of different races, which advances the ancient Egyptian ideal of cosmopolitan sex slavery.`);
-			FutureSocieties.Change("EgyptianRevivalist", 5);
+			FutureSocieties.Change("Egyptian Revivalist", 5);
 		}
 		if (V.language !== "Ancient Egyptian") {
 			r.push(`Continuing to use ${V.language} as the lingua franca of ${V.arcologies[0].name} rather than revived Ancient Egyptian <span class="red">disappoints</span> society and causes doubt about your revivalist project.`);
-			FutureSocieties.Change("EgyptianRevivalist", -2);
+			FutureSocieties.Change("Egyptian Revivalist", -2);
 		}
 	} else if (V.arcologies[0].FSEdoRevivalist !== "unset") {
 		const _threshold = Math.trunc(V.rep / 2000);
 		if (V.publicServants <= _threshold) {
 			r.push(`Society <span class="red">disapproves</span> of your failure to provide for cultural development by offering public servants or club slaves in a number that befits your reputation.`);
-			FutureSocieties.Change("EdoRevivalist", -2);
+			FutureSocieties.Change("Edo Revivalist", -2);
 		} else {
 			r.push(`Society <span class="green">approves</span> of your provision for cultural development by offering public servants and club slaves in a number that befits your reputation.`);
-			FutureSocieties.Change("EdoRevivalist", 2);
+			FutureSocieties.Change("Edo Revivalist", 2);
 		}
 		if (V.language !== "Japanese") {
 			r.push(`Continuing to use ${V.language} as the lingua franca of ${V.arcologies[0].name} rather than pure Japanese <span class="red">disappoints</span> society and causes doubt about your revivalist project.`);
-			FutureSocieties.Change("EdoRevivalist", -2);
+			FutureSocieties.Change("Edo Revivalist", -2);
 		}
 	} else if (V.arcologies[0].FSArabianRevivalist !== "unset") {
 		if (V.fuckSlaves < V.rep / 3500) {
 			r.push(`Society <span class="red">disapproves</span> of the small size of your harem, feeling that you do not have enough fucktoys or slaves in your master suite for your reputation.`);
-			FutureSocieties.Change("ArabianRevivalist", -2);
+			FutureSocieties.Change("Arabian Revivalist", -2);
 		} else {
 			r.push(`Society <span class="green">approves</span> of the size of your harem, feeling that you have a good number of fucktoys and slaves in your master suite for your reputation.`);
-			FutureSocieties.Change("ArabianRevivalist", 2);
+			FutureSocieties.Change("Arabian Revivalist", 2);
 		}
 		if (V.language !== "Arabic") {
 			r.push(`Continuing to use ${V.language} as the lingua franca of ${V.arcologies[0].name} rather than the Arabic in which the word of God was passed to Muhammad <span class="red">disappoints</span> society and causes doubt about your revivalist project.`);
-			FutureSocieties.Change("ArabianRevivalist", -2);
+			FutureSocieties.Change("Arabian Revivalist", -2);
 		}
 	} else if (V.arcologies[0].FSChineseRevivalist !== "unset") {
 		if (V.HeadGirlID === 0) {
 			r.push(`Society <span class="red">disapproves</span> of your failure to rely on a Head Girl, as proper imperial administration requires,`);
-			FutureSocieties.Change("ChineseRevivalist", -2);
+			FutureSocieties.Change("Chinese Revivalist", -2);
 		} else {
 			r.push(`Society <span class="green">approves</span> of your reliance on a Head Girl, as proper imperial administration requires,`);
-			FutureSocieties.Change("ChineseRevivalist", 2);
+			FutureSocieties.Change("Chinese Revivalist", 2);
 		}
 		if (V.RecruiterID === 0) {
 			r.push(`<span class="red">disapproves</span> of your failure to maintain a Recruiter to expand the Middle Kingdom,`);
-			FutureSocieties.Change("ChineseRevivalist", -2);
+			FutureSocieties.Change("Chinese Revivalist", -2);
 		} else {
 			r.push(`<span class="green">approves</span> of your maintaining a Recruiter to expand the Middle Kingdom,`);
-			FutureSocieties.Change("ChineseRevivalist", 2);
+			FutureSocieties.Change("Chinese Revivalist", 2);
 		}
 		if (V.BodyguardID === 0) {
 			r.push(`and <span class="red">disapproves</span> of your failure to keep a Bodyguard as befits a proper imperial palace.`);
-			FutureSocieties.Change("ChineseRevivalist", -2);
+			FutureSocieties.Change("Chinese Revivalist", -2);
 		} else {
 			r.push(`and <span class="green">approves</span> of your keeping a Bodyguard, as befits a proper imperial palace.`);
-			FutureSocieties.Change("ChineseRevivalist", 2);
+			FutureSocieties.Change("Chinese Revivalist", 2);
 		}
 		if (V.language !== "Chinese") {
 			r.push(`Continuing to use ${V.language} as the lingua franca of ${V.arcologies[0].name} rather than the Chinese of the Middle Kingdom <span class="red">disappoints</span> society and causes doubt about your revivalist project.`);
-			FutureSocieties.Change("ChineseRevivalist", -2);
+			FutureSocieties.Change("Chinese Revivalist", -2);
 		}
 	}
 
@@ -705,7 +705,7 @@ App.EndWeek.reputation = function() {
 		if (policies.countEugenicsSMRs() > 0) {
 			r.push(`Society <span class="red">disapproves</span> of your policies sterilizing potential mothers. Your insistence on eugenics hinders adoption of your new society.`);
 			_noEugenics = -1 * policies.countEugenicsSMRs();
-			FutureSocieties.Change("RepopulationFocus", _noEugenics);
+			FutureSocieties.Change("Repopulationist", _noEugenics);
 		}
 	} else if (V.arcologies[0].FSPaternalist !== "unset") {
 		if (policies.countEugenicsSMRs() > 0) {
@@ -823,7 +823,7 @@ App.EndWeek.reputation = function() {
 	if (V.breederOrphanageTotal > 0 && V.arcologies[0].FSRepopulationFocus !== "unset") {
 		r.push(`The public <span class="green">approves</span> of the way you've dedicated ${num(V.breederOrphanageTotal)} of your slaves' children to be raised into future breeders.`);
 		const _futureBreeders = Math.round(((V.breederOrphanageTotal / 100) + 1));
-		FutureSocieties.Change("RepopulationFocus", _futureBreeders);
+		FutureSocieties.Change("Repopulationist", _futureBreeders);
 	}
 
 	if (V.arcologies[0].FSNull !== "unset") {
diff --git a/src/endWeek/reports/masterSuiteReport.js b/src/endWeek/reports/masterSuiteReport.js
index e16c1d71c7179fff49b6ab5b1e121687f5756e92..1239707027840bce36ec0eaea1048b5f83253bc5 100644
--- a/src/endWeek/reports/masterSuiteReport.js
+++ b/src/endWeek/reports/masterSuiteReport.js
@@ -374,7 +374,7 @@ App.EndWeek.masterSuiteReport = function() {
 
 		if ((V.arcologies[0].FSEgyptianRevivalist > 0) && (slaves.length >= 5)) {
 			r.push(`Society <span class="green">approves</span> of your keeping a large number of women. This advances the Egyptian revivalist ideal of multiple concubinage.`);
-			FutureSocieties.Change("EgyptianRevivalist", 2);
+			FutureSocieties.Change("Egyptian Revivalist", 2);
 		}
 		if (pregnantSlaves >= 1) {
 			r.push(`The suite is supporting the pregnancies of the slaves`);
diff --git a/src/endWeek/saSocialEffects.js b/src/endWeek/saSocialEffects.js
index 038e51e63e4d4269c6d55da6b519b72fbad3b8d0..47fbf492b0595681891f8d8c10279b22b3e1a2a1 100644
--- a/src/endWeek/saSocialEffects.js
+++ b/src/endWeek/saSocialEffects.js
@@ -6,7 +6,7 @@ App.SlaveAssignment.saSocialEffects = function(slave) {
 	const {His, his, him, he, girl, wife} = getPronouns(slave);
 
 	/** Build a social effect object
-	 * @param {string} FS
+	 * @param {FC.FutureSocietyDeco} FS
 	 * @param {number} magnitude positive or negative value (a small integer, or a fraction between -1 and 1)
 	 * @param {string} shortDesc for compact/list mode (text string)
 	 * @param {string} longDesc for expanded mode (HTML string)
@@ -111,84 +111,84 @@ App.SlaveAssignment.saSocialEffects = function(slave) {
 
 		if (V.arcologies[0].FSYouthPreferentialist !== "unset") {
 			if ((slave.geneMods.NCS > 0) && (slave.visualAge <= 18)) {
-				t.push(new SocialEffect("YouthPreferentialist", 2, "NCS Youthening",
+				t.push(new SocialEffect("Youth Preferentialist", 2, "NCS Youthening",
 					`Society <span class="green">strongly approves</span> of you keeping ${slave.slaveName} forever young and youthening; this furthers the fashion for young slaves.`));
 			} else if (slave.visualAge < 30) {
 				const youthRepChange = ((30-slave.visualAge)/5);
-				t.push(new SocialEffect("YouthPreferentialist", youthRepChange, "Young-looking slave",
+				t.push(new SocialEffect("Youth Preferentialist", youthRepChange, "Young-looking slave",
 					`Society <span class="green">approves</span> of ${slave.slaveName}'s youthful body; ${he} furthers the fashion for young slaves.`));
 			}
 		} else if (V.arcologies[0].FSMaturityPreferentialist !== "unset") {
 			if (slave.visualAge >= 30) {
 				const matureRepChange = ((slave.visualAge-25)/5);
-				t.push(new SocialEffect("MaturityPreferentialist", matureRepChange, "Mature-looking slave",
+				t.push(new SocialEffect("Maturity Preferentialist", matureRepChange, "Mature-looking slave",
 					`Society <span class="green">approves</span> of ${slave.slaveName}'s mature body; ${he} furthers the fashion for older ladies.`));
 			}
 		}
 
 		if (V.arcologies[0].FSPetiteAdmiration !== "unset") {
 			if (heightPass(slave)) {
-				t.push(new SocialEffect("PetiteAdmiration", 1, "Short slave",
+				t.push(new SocialEffect("Petite Admiration", 1, "Short slave",
 					`Society <span class="green">approves</span> of keeping a slave as short as ${slave.slaveName} is; ${he} furthers the fashion for shorter slaves.`));
 			} else if (slave.height >= 170) {
-				t.push(new SocialEffect("PetiteAdmiration", -1, "Tall slave",
+				t.push(new SocialEffect("Petite Admiration", -1, "Tall slave",
 					`Society <span class="red">frowns</span> at keeping a slave as tall as ${slave.slaveName}; ${he} hinders the fashion for shorter slaves.`));
 			}
 		} else if (V.arcologies[0].FSStatuesqueGlorification !== "unset") {
 			if (heightPass(slave)) {
-				t.push(new SocialEffect("StatuesqueGlorification", 1, "Tall slave",
+				t.push(new SocialEffect("Statuesque Glorification", 1, "Tall slave",
 					`Society <span class="green">approves</span> of keeping a slave as tall as ${slave.slaveName} is; ${he} furthers the fashion for taller slaves.`));
 			} else {
-				t.push(new SocialEffect("StatuesqueGlorification", -1, "Short slave",
+				t.push(new SocialEffect("Statuesque Glorification", -1, "Short slave",
 					`Society <span class="red">frowns</span> at keeping someone as embarrassingly short as ${slave.slaveName}; ${he} hinders the fashion for taller slaves.`));
 			}
 		}
 
 		if (V.arcologies[0].FSGenderRadicalist !== "unset") {
 			 if ((slave.balls > 0) && (slave.pubertyXY === 0) && (slave.physicalAge >= V.potencyAge)) {
-				t.push(new SocialEffect("GenderRadicalist", 2, "Avoiding male puberty",
+				t.push(new SocialEffect("Gender Radicalist", 2, "Avoiding male puberty",
 					`Society <span class="green">approves</span> of you keeping ${slave.slaveName} from going through puberty; this advances public interest in ${girl}s with soft little dicks.`));
 			} else if ((slave.balls > 0) && (slave.dick > 0) && (slave.hormoneBalance >= 100)) {
-				t.push(new SocialEffect("GenderRadicalist", 1, "Feminization",
+				t.push(new SocialEffect("Gender Radicalist", 1, "Feminization",
 					`Society <span class="green">approves</span> of your heavy hormonal feminization of ${slave.slaveName}; this advances public interest in ${girl}s with soft little dicks.`));
 			} else if ((slave.dick > 0) && (slave.balls === 0)) {
-				t.push(new SocialEffect("GenderRadicalist", 1, "Gelded slave",
+				t.push(new SocialEffect("Gender Radicalist", 1, "Gelded slave",
 					`Society <span class="green">approves</span> of your keeping a gelded slave; this advances public interest in ${girl}s with soft dickclits.`));
 			} else if ((slave.dick > 0) && (slave.anus > 0) && (slave.devotion > 20) && (slave.trust >= -20)) {
-				t.push(new SocialEffect("GenderRadicalist", 1, "Contented dickgirl bottom",
+				t.push(new SocialEffect("Gender Radicalist", 1, "Contented dickgirl bottom",
 					`Society <span class="green">approves</span> of your keeping a contented dickgirl bottom; this advances public interest in ${girl}s who get hard when assfucked.`));
 			}
 		} else if (V.arcologies[0].FSGenderFundamentalist !== "unset") {
 			if (V.arcologies[0].FSRestart === "unset") {
 				if (slave.bellyPreg >= 1500) {
-					t.push(new SocialEffect("GenderFundamentalist", 1, "Pregnant",
+					t.push(new SocialEffect("Gender Fundamentalist", 1, "Pregnant",
 						`Society <span class="green">${V.arcologies[0].FSGenderFundamentalist >= V.FSLockinLevel*0.5 ? "strongly " : ""}approves</span> of your keeping a pregnant slave; this also supports the idea that slave women should bear babies.`));
 				} else if ((slave.preg === 0) && isFertile(slave)) {
-					t.push(new SocialEffect("GenderFundamentalist", 1, "Fertile",
+					t.push(new SocialEffect("Gender Fundamentalist", 1, "Fertile",
 						`Society <span class="green">${V.arcologies[0].FSGenderFundamentalist >= V.FSLockinLevel*0.5 ? "strongly " : ""}approves</span> of your keeping a slave fertile; this also supports the idea that slave women should bear babies.`));
 				}
 			} else {
 				if (slave.hips > slave.shoulders) {
-					t.push(new SocialEffect("GenderFundamentalist", 1, "Feminine figure",
+					t.push(new SocialEffect("Gender Fundamentalist", 1, "Feminine figure",
 						`Society <span class="green">approves</span> of keeping a slave with a feminine figure.`));
 				}
 			}
 			if ((slave.intelligenceImplant > 15 || slave.intelligenceImplant < 0) && V.arcologies[0].FSGenderFundamentalistLawBimbo === 1) {
-				t.push(new SocialEffect("GenderFundamentalist", -1, "Educated woman",
+				t.push(new SocialEffect("Gender Fundamentalist", -1, "Educated woman",
 					`Society <span class="red">disapproves</span> of encouraging a woman's education.`));
 			}
 			if ((slave.devotion <= 95) && canPenetrate(slave)) {
-				t.push(new SocialEffect("GenderFundamentalist", -1, "Can penetrate, not worshipful",
+				t.push(new SocialEffect("Gender Fundamentalist", -1, "Can penetrate, not worshipful",
 					`Society <span class="red">disapproves</span> of ${slave.slaveName}'s stiff, unrestrained dick, since ${he} isn't even worshipful of you.`));
 			}
 		}
 
 		function repopRacialPregnancy() {
 			if (V.arcologies[0].FSSubjugationist !== "unset" && (slave.race === V.arcologies[0].FSSubjugationistRace)) {
-				t.push(new SocialEffect("RepopulationFocus", 0, "Undesirable race (Subjugationist)",
+				t.push(new SocialEffect("Repopulationist", 0, "Undesirable race (Subjugationist)",
 					`They just wish it wasn't ${V.arcologies[0].FSSubjugationistRace}, of course.`));
 			} else if (V.arcologies[0].FSSupremacist !== "unset" && (slave.race === V.arcologies[0].FSSupremacistRace)) {
-				t.push(new SocialEffect("RepopulationFocus", 0, "Desirable race (Supremacist)",
+				t.push(new SocialEffect("Repopulationist", 0, "Desirable race (Supremacist)",
 					`The fact that ${he} is ${V.arcologies[0].FSSupremacistRace} only makes it better.`));
 			}
 		}
@@ -196,13 +196,13 @@ App.SlaveAssignment.saSocialEffects = function(slave) {
 		if (V.arcologies[0].FSRepopulationFocus !== "unset") {
 			if (slave.preg > slave.pregData.normalBirth/1.33) {
 				if (slave.pregType >= 20) {
-					t.push(new SocialEffect("RepopulationFocus", 5, "Broodmother",
+					t.push(new SocialEffect("Repopulationist", 5, "Broodmother",
 						`Society is <span class="green">very pleased</span> at ${slave.slaveName}'s dedication to pregnancy.`));
 				} else if (slave.pregType >= 10) {
-					t.push(new SocialEffect("RepopulationFocus", 3, "Large multiple pregnancy",
+					t.push(new SocialEffect("Repopulationist", 3, "Large multiple pregnancy",
 						`Society is <span class="green">pleased</span> by ${slave.slaveName}'s abnormally large pregnancy.`));
 				} else {
-					t.push(new SocialEffect("RepopulationFocus", 2, "Advanced pregnancy",
+					t.push(new SocialEffect("Repopulationist", 2, "Advanced pregnancy",
 						`Society is <span class="green">pleased</span> by ${slave.slaveName}'s advanced pregnancy.`));
 				}
 				repopRacialPregnancy();
@@ -211,19 +211,19 @@ App.SlaveAssignment.saSocialEffects = function(slave) {
 				r.push(`${slave.slaveName} is so fat, society just assumes there is a baby somewhere in there, though they wish it was more obvious.`);
 				if (slave.pregWeek < 0) {
 					r.push(`But fortunately for ${him}, word of ${his} recent birth has gotten around <span class="green">reassuring the masses</span> that ${he} can still bear children.`);
-					t.push(new SocialEffect("RepopulationFocus", 2, "Fat recent mother", r.join(" ")));
+					t.push(new SocialEffect("Repopulationist", 2, "Fat recent mother", r.join(" ")));
 				} else if (slave.collar === "preg biometrics") {
 					if (slave.preg > 0) {
 						r.push(`<span class="green">Their wish is granted</span> by ${slave.slaveName}'s collar revealing ${his} womb's secret${slave.pregType > 1 ? 's' : ''} even when ${his} body is trying its best to keep ${slave.pregType > 1 ? "them" : "it"} hidden.`);
-						t.push(new SocialEffect("RepopulationFocus", 2, "Fat pregnancy", r.join(" ")));
+						t.push(new SocialEffect("Repopulationist", 2, "Fat pregnancy", r.join(" ")));
 						repopRacialPregnancy();
 					} else if (slave.preg <= 0) {
 						r.push(`<span class="red">The illusion is shattered</span> by ${slave.slaveName}'s collar revealing ${his} vacant womb.`);
-						t.push(new SocialEffect("RepopulationFocus", -2, "Fat but not pregnant", r.join(" ")));
+						t.push(new SocialEffect("Repopulationist", -2, "Fat but not pregnant", r.join(" ")));
 					}
 				}
 			} else if (slave.bellyPreg >= 1500) {
-				t.push(new SocialEffect("RepopulationFocus", 1, "Obviously pregnant",
+				t.push(new SocialEffect("Repopulationist", 1, "Obviously pregnant",
 					`Society is <span class="green">pleased</span> by ${slave.slaveName}'s pregnancy.`));
 				repopRacialPregnancy();
 			} else if (V.arcologies[0].FSSubjugationist !== "unset" && (slave.race === V.arcologies[0].FSSubjugationistRace) && slave.bellyImplant >= 1500) {
@@ -233,34 +233,34 @@ App.SlaveAssignment.saSocialEffects = function(slave) {
 				t.push(new SocialEffect("", 0.1, "Belly implant for infertile slave (Repopulation Focus)",
 					`Society <span class="green">accepts</span> ${slave.slaveName}'s implant filled belly due to ${his} infertility.`));
 			} else if (slave.collar === "preg biometrics" && slave.preg > 0) {
-				t.push(new SocialEffect("RepopulationFocus", 1, "Pregnancy biometrics",
+				t.push(new SocialEffect("Repopulationist", 1, "Pregnancy biometrics",
 					`Society is <span class="green">pleased</span> by ${slave.slaveName}'s collar revealing ${his} womb's secret${slave.pregType > 1 ? 's' : ''} even when ${his} body is trying its best to keep ${slave.pregType > 1 ? "them" : "it"} hidden.`));
 				repopRacialPregnancy();
 			} else if (slave.pregWeek < 0) {
-				t.push(new SocialEffect("RepopulationFocus", 2, "Recently gave birth",
+				t.push(new SocialEffect("Repopulationist", 2, "Recently gave birth",
 					`Society is <span class="green">pleased</span> by ${slave.slaveName}'s recent birth.`));
 			} else if (setup.fakeBellies.includes(slave.bellyAccessory)) {
 				t.push(new SocialEffect("", 0.01, "Fake belly (Repopulation Focus)",
 					`Society is <span class="green">placated</span> by ${slave.slaveName}'s fake belly.`));
 			} else if (V.arcologies[0].FSSubjugationist !== "unset" && (slave.race === V.arcologies[0].FSSubjugationistRace)) {
-				t.push(new SocialEffect("RepopulationFocus", 0, "Not pregnant but inferior race (Subjugationist)",
+				t.push(new SocialEffect("Repopulationist", 0, "Not pregnant but inferior race (Subjugationist)",
 					`Society is perfectly fine with ${slave.slaveName} not reproducing. ${His} belly is still unattractively small, however.`));
 			} else if ((slave.ovaries === 0 && slave.mpreg === 0) || (slave.preg < -1) || (slave.pubertyXX === 0)) {
-				t.push(new SocialEffect("RepopulationFocus", -1, "Unable to become pregnant",
+				t.push(new SocialEffect("Repopulationist", -1, "Unable to become pregnant",
 					`Society is <span class="red">mildly disappointed</span> that ${slave.slaveName} is unable to become pregnant.`));
 			} else if (slave.preg === -1) {
-				t.push(new SocialEffect("RepopulationFocus", -2, "On contraceptives",
+				t.push(new SocialEffect("Repopulationist", -2, "On contraceptives",
 					`Society is <span class="red">disapproving</span> of ${slave.slaveName}'s contraceptive regimen.`));
 			} else {
-				t.push(new SocialEffect("RepopulationFocus", -2, "Not visibly pregnant",
+				t.push(new SocialEffect("Repopulationist", -2, "Not visibly pregnant",
 					`Society is <span class="red">disapproving</span> of ${slave.slaveName}'s lack of a baby bump.`));
 			}
 			if (slave.abortionTat > 0) {
-				t.push(new SocialEffect("RepopulationFocus", -1, "Abortion tattoos",
+				t.push(new SocialEffect("Repopulationist", -1, "Abortion tattoos",
 					`Society <span class="red">is disgusted</span> by the tally of aborted children adorning ${his} skin.`));
 			}
 			if (slave.birthsTat > 0) {
-				t.push(new SocialEffect("RepopulationFocus", 1, "Birth tattoos",
+				t.push(new SocialEffect("Repopulationist", 1, "Birth tattoos",
 					`Society <span class="green">is pleased</span> by the tally of successful births adorning ${his} skin.`));
 			}
 		} else if (V.arcologies[0].FSRepopulationFocusPregPolicy === 1) {
@@ -506,123 +506,123 @@ App.SlaveAssignment.saSocialEffects = function(slave) {
 		if (V.arcologies[0].FSIntellectualDependency !== "unset") {
 			if (V.arcologies[0].FSIntellectualDependencyLawBeauty === 1) {
 				if (bimboScore(slave) === 6) {
-					t.push(new SocialEffect("IntellectualDependency", 1, `Perfect bimbo`,
+					t.push(new SocialEffect("Intellectual Dependency", 1, `Perfect bimbo`,
 						`Society <span class="green">is delighted</span> by ${slave.slaveName}'s perfect bimbo appearance.`));
 				}
 			}
 			if (slave.intelligence+slave.intelligenceImplant < -10) {
-				t.push(new SocialEffect("IntellectualDependency", 1, `Dimwitted`,
+				t.push(new SocialEffect("Intellectual Dependency", 1, `Dimwitted`,
 					`Society <span class="green">approves</span> of ${slave.slaveName}'s dimwitted mind; this supports the idea that slaves should be entirely dependent on their owner.`));
 			} else if ([Job.HEADGIRL, Job.ATTENDANT, Job.FARMER, Job.MADAM, Job.MATRON, Job.NURSE, Job.TEACHER, Job.STEWARD, Job.BODYGUARD].includes(slave.assignment)) {
-				t.push(new SocialEffect("IntellectualDependency", 0, `Intelligence required by job`,
+				t.push(new SocialEffect("Intellectual Dependency", 0, `Intelligence required by job`,
 					`Society understands the value of intelligence in ${his} appointed position and is willing to overlook it.`));
 			} else if ((slave.intelligence+slave.intelligenceImplant > 10)) {
-				t.push(new SocialEffect("IntellectualDependency", -1, `Too smart`,
+				t.push(new SocialEffect("Intellectual Dependency", -1, `Too smart`,
 					`Society <span class="red">disapproves</span> of ${slave.slaveName}'s sharp mind; this holds back acceptance of the idea that slaves should be dumb and dependent.`));
 			}
 			if (slave.energy > 95) {
-				t.push(new SocialEffect("IntellectualDependency", 1, `Nymphomania`,
+				t.push(new SocialEffect("Intellectual Dependency", 1, `Nymphomania`,
 					`Society <span class="green">approves</span> of ${slave.slaveName}'s bottomless lust, showing the public one more way a slave may be reliant on ${his} owner.`));
 			} else if ((slave.energy <= 60)) {
-				t.push(new SocialEffect("IntellectualDependency", -1, `Low libido`,
+				t.push(new SocialEffect("Intellectual Dependency", -1, `Low libido`,
 					`Society <span class="red">disapproves</span> of ${slave.slaveName}'s restrained libido; to the public, this gives ${him} too much freedom to focus on things other than sex.`));
 			}
 		} else if (V.arcologies[0].FSSlaveProfessionalism !== "unset") {
 			if (slave.intelligence+slave.intelligenceImplant > 95) {
-				t.push(new SocialEffect("SlaveProfessionalism", 1, `Brilliant`,
+				t.push(new SocialEffect("Slave Professionalism", 1, `Brilliant`,
 					`Society <span class="green">strongly approves</span> of ${slave.slaveName}'s brilliance; ${his} sharp wit is the foundation of slave perfectionism.`));
 			} else if (slave.intelligenceImplant >= 30) {
-				t.push(new SocialEffect("SlaveProfessionalism", 1, `Highly educated`,
+				t.push(new SocialEffect("Slave Professionalism", 1, `Highly educated`,
 					`Society <span class="green">approves</span> of ${slave.slaveName}'s advanced education; this advances ideas about crafting the perfect slave.`));
 			} else if (slave.intelligenceImplant <= -15) {
-				t.push(new SocialEffect("SlaveProfessionalism", -3, `Miseducated`,
+				t.push(new SocialEffect("Slave Professionalism", -3, `Miseducated`,
 					`Society <span class="red">is appalled</span> by ${slave.slaveName}'s twisted education; why someone would do this is beyond them.`));
 			} else if (slave.intelligence < -10 && slave.intelligenceImplant < 15) {
-				t.push(new SocialEffect("SlaveProfessionalism", -2, `Slow and uneducated`,
+				t.push(new SocialEffect("Slave Professionalism", -2, `Slow and uneducated`,
 					`Society <span class="red">frowns</span> upon keeping a slave as slow as ${slave.slaveName}; the lack of an attempt to correct this sets a bad example for other owners.`));
 			}
 			if (slave.accent > 1 && canTalk(slave) && (slave.rules.speech !== "restrictive" || (slave.rules.speech === "restrictive" && slave.devotion < 20 && slave.trust >= -20))) {
-				t.push(new SocialEffect("SlaveProfessionalism", -2, `Can't speak ${V.language} or be silent`,
+				t.push(new SocialEffect("Slave Professionalism", -2, `Can't speak ${V.language} or be silent`,
 					`Society <span class="red">dislikes</span> ${slave.slaveName}'s inability to properly speak ${V.language} or hold ${his} tongue; allowing such a flaw hinders the notion of professional slavery.`));
 			}
 			if (slave.skill.entertainment + slave.skill.whoring + slave.skill.oral + slave.skill.anal + slave.skill.vaginal >= 400) {
-				t.push(new SocialEffect("SlaveProfessionalism", 1, `Highly skilled`,
+				t.push(new SocialEffect("Slave Professionalism", 1, `Highly skilled`,
 					`Society <span class="green">appreciates</span> a slave with skills of ${slave.slaveName}'s caliber.`));
 			}
 			if (slave.energy <= 40 && slave.devotion > 50) {
-				t.push(new SocialEffect("SlaveProfessionalism", 1, `Clearminded (low libido or devoted)`,
+				t.push(new SocialEffect("Slave Professionalism", 1, `Clearminded (low libido or devoted)`,
 					`Society <span class="green">approves</span> of a ${girl} with a clear mind like ${slave.slaveName}; ${he} can pour all ${his} efforts into ${his} lover's pleasure without being lost in ${his} own.`));
 			}
 		}
 
 		if (V.arcologies[0].FSBodyPurist !== "unset") {
 			if ((slave.boobsImplant === 0) && (slave.buttImplant === 0) && (slave.lipsImplant === 0) && (slave.bellyImplant === -1)) {
-				t.push(new SocialEffect("BodyPurist", 1, `No implants`,
+				t.push(new SocialEffect("Body Purist", 1, `No implants`,
 					`Society <span class="green">approves</span> of ${slave.slaveName}'s natural body; this supports the fashion for surgically untouched slaves.`));
 			} else {
-				t.push(new SocialEffect("BodyPurist", -1, `Implants`,
+				t.push(new SocialEffect("Body Purist", -1, `Implants`,
 					`Society <span class="red">disapproves</span> of ${slave.slaveName}'s implants; this holds back acceptance of the idea that slaves should be all-natural.`));
 			}
 			if (slave.corsetPiercing === 0 && modScore.piercing < 3 && modScore.tat < 2) {
-				t.push(new SocialEffect("BodyPurist", 1, `Minimal piercings/tats`,
+				t.push(new SocialEffect("Body Purist", 1, `Minimal piercings/tats`,
 					`Society <span class="green">approves</span> of ${his} unmarked, unblemished skin, advancing the fashion for unspoiled slaves.`));
 			}
 			if ((slave.earShape !== "normal" && slave.earShape !== "damaged") || slave.earT !== "none") {
-				t.push(new SocialEffect("BodyPurist", -1, `Inhuman ears`,
+				t.push(new SocialEffect("Body Purist", -1, `Inhuman ears`,
 					`Society finds ${his} inhuman ears <span class="red">appalling.</span>`));
 			}
 			if (slave.horn !== "none" || slave.tail !== "none") {
-				t.push(new SocialEffect("BodyPurist", -1, `Inhuman tail or horns`,
+				t.push(new SocialEffect("Body Purist", -1, `Inhuman tail or horns`,
 					`Society <span class="red">is disgusted</span> by ${his} inhuman attributes.`));
 			}
 			if (slave.faceImplant <= 5 && slave.race === slave.origRace) {
-				t.push(new SocialEffect("BodyPurist", 1, `Unaltered`,
+				t.push(new SocialEffect("Body Purist", 1, `Unaltered`,
 					`Society <span class="green">approves</span> of ${his} natural, untouched appearance, advancing the fashion for unaltered slaves.`));
 			} else {
-				t.push(new SocialEffect("BodyPurist", -2, `Surgically altered`,
+				t.push(new SocialEffect("Body Purist", -2, `Surgically altered`,
 					`Society <span class="red">disapproves</span> of ${slave.slaveName}'s surgical beautification; this holds back acceptance of the idea that a natural slave is a beautiful slave.`));
 			}
 			if (slave.fuckdoll === 0) {
 				if (slave.vagina === 0 && slave.anus === 0 && slave.counter.vaginal === 0 && slave.counter.anal === 0) {
-					t.push(new SocialEffect("BodyPurist", 3, `Total virgin`,
+					t.push(new SocialEffect("Body Purist", 3, `Total virgin`,
 						`Society <span class="green">strongly approves</span> of ${his} intact holes, idolizing ${his} pristine body.`));
 				} else if (slave.vagina === 0 && slave.counter.vaginal === 0) {
-					t.push(new SocialEffect("BodyPurist", 1, `Vaginal virgin`,
+					t.push(new SocialEffect("Body Purist", 1, `Vaginal virgin`,
 						`Society <span class="green">approves</span> of ${his} intact hymen, advancing ideals of pure, fresh slaves.`));
 				} else if (slave.anus === 0 && slave.counter.anal === 0) {
-					t.push(new SocialEffect("BodyPurist", 1, `Anal virgin`,
+					t.push(new SocialEffect("Body Purist", 1, `Anal virgin`,
 						`Society <span class="green">approves</span> of ${his} intact anus, advancing ideals of pure, fresh slaves.`));
 				}
 			}
 		} else if (V.arcologies[0].FSTransformationFetishist !== "unset") {
 			let transformed = 0;
 			if ((slave.boobsImplant > 0) && (slave.buttImplant > 0) && (slave.lipsImplant > 0)) {
-				t.push(new SocialEffect("TransformationFetishist", 1, `Implants`,
+				t.push(new SocialEffect("Transformation Fetishist", 1, `Implants`,
 					`Society <span class="green">approves</span> of ${slave.slaveName}'s thoroughly modified body; this supports the fashion for surgically upgraded slaves.`));
 				transformed++;
 			}
 			if ((slave.lipsImplant/slave.lips >= .50) || (slave.buttImplant/slave.butt >= .50 && slave.butt >= 6) || (slave.buttImplant/slave.butt >= .25 && slave.butt >= 3) || (slave.boobsImplant/slave.boobs >= .75 && slave.boobs >= 10000) || (slave.boobsImplant/slave.boobs >= .50 && slave.boobs >= 2000) || (slave.boobsImplant/slave.boobs >= .25 && slave.boobs >= 1000) || (slave.boobsImplant/slave.boobs >= .10 && slave.boobs >= 400)) {
-				t.push(new SocialEffect("TransformationFetishist", 1, `Big implants`,
+				t.push(new SocialEffect("Transformation Fetishist", 1, `Big implants`,
 					`Society <span class="green">approves</span> of ${his} obvious implants.`));
 				transformed++;
 			}
 			if (slave.bellyImplant >= 1500) {
-				t.push(new SocialEffect("TransformationFetishist", 1, `Big belly implant`,
+				t.push(new SocialEffect("Transformation Fetishist", 1, `Big belly implant`,
 					`Society <span class="green">mildly approves</span> of ${slave.slaveName}'s belly bulging implant; this supports interest in more unusual implantations.`));
 				transformed++;
 			}
 			if (isAmputee(slave) || (slave.waist < -95) || (slave.teeth === "pointy") || (slave.teeth === "fangs") || (slave.teeth === "removable") || (slave.hips === 3 && slave.hipsImplant > 0)) {
-				t.push(new SocialEffect("TransformationFetishist", 1, `Extreme surgery`,
+				t.push(new SocialEffect("Transformation Fetishist", 1, `Extreme surgery`,
 					`Society <span class="green">approves</span> of ${his} extreme surgeries; interest in ${him} stirs interest in transformations of all kinds.`));
 				transformed++;
 			}
 			if (slave.faceImplant > 30 || slave.race !== slave.origRace) {
-				t.push(new SocialEffect("TransformationFetishist", 1, `Surgically improved`,
+				t.push(new SocialEffect("Transformation Fetishist", 1, `Surgically improved`,
 					`Society <span class="green">approves</span> of ${his} surgically improved appearance; this supports the fashion for surgical corrections.`));
 				transformed++;
 			}
 			if (slave.faceImplant > 95 && slave.face > 40) {
-				t.push(new SocialEffect("TransformationFetishist", 1, `Uncannily beautiful face`,
+				t.push(new SocialEffect("Transformation Fetishist", 1, `Uncannily beautiful face`,
 					`Society <span class="green">approves</span> of ${his} beautiful face, considering it's uncanny nature a boon rather than a fault; this supports the belief that there is no such thing as too much surgery.`));
 				transformed++;
 			}
@@ -640,42 +640,42 @@ App.SlaveAssignment.saSocialEffects = function(slave) {
 				addons.push("tail");
 			}
 			if (addons.length > 0) {
-				t.push(new SocialEffect("TransformationFetishist", Math.min(addons.length, 2), `Transhuman addons`,
+				t.push(new SocialEffect("Transformation Fetishist", Math.min(addons.length, 2), `Transhuman addons`,
 					`Society <span class="green">strongly approves</span> of ${his} transhuman ${arrayToSentence(addons)}.`));
 				transformed += addons.length;
 			}
 			if (slave.dick > 8) {
-				t.push(new SocialEffect("TransformationFetishist", 1, `Giant dick`,
+				t.push(new SocialEffect("Transformation Fetishist", 1, `Giant dick`,
 					`Society <span class="green">approves</span> of ${his} monolithic dick, since it's such an obvious transformation masterpiece.`));
 				transformed++;
 			}
 			if (slave.lips > 95) {
-				t.push(new SocialEffect("TransformationFetishist", 1, `Facepussy`,
+				t.push(new SocialEffect("Transformation Fetishist", 1, `Facepussy`,
 					`Society <span class="green">approves</span> of ${his} absurd facepussy as a transformation of ${his} mouth into nothing more than another fuckhole.`));
 				transformed++;
 			}
 			if (slave.nipples === "fuckable") {
-				t.push(new SocialEffect("TransformationFetishist", 1, `Fuckable nipples`,
+				t.push(new SocialEffect("Transformation Fetishist", 1, `Fuckable nipples`,
 					`Society <span class="green">approves</span> of ${slave.slaveName}'s fuckable nipples; this supports interest in more unusual body modifications.`));
 				transformed++;
 			}
 			if (slave.fuckdoll > 0) {
-				t.push(new SocialEffect("TransformationFetishist", 1, `Fuckdoll`,
+				t.push(new SocialEffect("Transformation Fetishist", 1, `Fuckdoll`,
 					`Society <span class="green">approves</span> of your owning a Fuckdoll.`));
 				transformed += 5; // total transformation
 			}
 			if (transformed === 0) {
-				t.push(new SocialEffect("TransformationFetishist", -2, `Totally unmodified`,
+				t.push(new SocialEffect("Transformation Fetishist", -2, `Totally unmodified`,
 					`Society <span class="red">strongly disapproves</span> of ${slave.slaveName}'s complete lack of any obvious transformations; ${he} does not advance the ideal of body modification.`));
 			} else if (transformed === 1) {
-				t.push(new SocialEffect("TransformationFetishist", -1, `Too few modifications`,
+				t.push(new SocialEffect("Transformation Fetishist", -1, `Too few modifications`,
 					`Society <span class="red">disapproves</span> of ${slave.slaveName}'s mostly-natural appearance; more transformations would help advance the ideal of body modification.`));
 			}
 		}
 
 		if (V.arcologies[0].FSSlimnessEnthusiast !== "unset") {
 			if (isSlim(slave)) {
-				t.push(new SocialEffect("SlimnessEnthusiast", 1, `Slim`,
+				t.push(new SocialEffect("Slimness Enthusiast", 1, `Slim`,
 					`Society <span class="green">approves</span> of ${slave.slaveName}'s graceful, girlish form; ${he} furthers the fashion for slaves like ${him}.`));
 			}
 			let unslim = [];
@@ -686,47 +686,47 @@ App.SlaveAssignment.saSocialEffects = function(slave) {
 				unslim.push("ass");
 			}
 			if (unslim.length > 0) {
-				t.push(new SocialEffect("SlimnessEnthusiast", -1, `Big tits/ass`,
+				t.push(new SocialEffect("Slimness Enthusiast", -1, `Big tits/ass`,
 					`Society <span class="red">disapproves</span> of ${slave.slaveName}'s boorishly large ${arrayToSentence(unslim)}; ${he} damages the fashion for slender slaves.`));
 			}
 		} else if (V.arcologies[0].FSAssetExpansionist !== "unset") {
 			let assets = 0;
 			if (slave.geneMods.NCS > 0) {
-				t.push(new SocialEffect("AssetExpansionist", -2, `NCS Youthening`,
+				t.push(new SocialEffect("Asset Expansionist", -2, `NCS Youthening`,
 					`Society <span class="green">strongly disapproves </span> of ${slave.slaveName} who can't get bigger; ${his} shrinking body hurts the fashion for Asset expansion.`));
 				assets++;
 			}
 			if (slave.boobs > 2000) {
-				t.push(new SocialEffect("AssetExpansionist", 1, `Titanic tits`,
+				t.push(new SocialEffect("Asset Expansionist", 1, `Titanic tits`,
 					`Society <span class="green">approves</span> of ${slave.slaveName}'s huge tits; ${his} breasts further the fashion for bouncing boobs on slaves.`));
 				assets++;
 			}
 			if (slave.butt > 7) {
-				t.push(new SocialEffect("AssetExpansionist", 1, `Big butt`,
+				t.push(new SocialEffect("Asset Expansionist", 1, `Big butt`,
 					`Society <span class="green">approves</span> of ${his} massive ass; ${his} butt furthers the fashion for big behinds on slaves.`));
 				assets++;
 			}
 			if (slave.dick > 8) {
-				t.push(new SocialEffect("AssetExpansionist", Math.ceil(slave.dick/10), `Massive member`,
+				t.push(new SocialEffect("Asset Expansionist", Math.ceil(slave.dick/10), `Massive member`,
 					`Society <span class="green">approves</span> of ${his} massive member, which might be nonfunctional, but is a wonder of expansionism.`));
 				assets++;
 			} else if (slave.dick >= 6) {
-				t.push(new SocialEffect("AssetExpansionist", 1, `Prodigious penis`,
+				t.push(new SocialEffect("Asset Expansionist", 1, `Prodigious penis`,
 					`Society <span class="green">approves</span> of ${his} enormous penis; ${his} cock furthers the fashion for dangling dicks on slaves.`));
 				assets++;
 			}
 			if (slave.balls > 6) {
-				t.push(new SocialEffect("AssetExpansionist", 1, `Tremendous testicles`,
+				t.push(new SocialEffect("Asset Expansionist", 1, `Tremendous testicles`,
 					`Society <span class="green">approves</span> of ${his} swinging balls; ${his} nuts further the fashion for tremendous testicles on slaves.`));
 				assets++;
 			}
 			if (slave.lips > 95) {
-				t.push(new SocialEffect("AssetExpansionist", 1, `Luscious lips`,
+				t.push(new SocialEffect("Asset Expansionist", 1, `Luscious lips`,
 					`Society <span class="green">approves</span> of ${his} expanded lips.`));
 				assets++;
 			}
 			if (assets === 0) {
-				t.push(new SocialEffect("AssetExpansionist", -1, `Unexceptional assets`,
+				t.push(new SocialEffect("Asset Expansionist", -1, `Unexceptional assets`,
 					`Society <span class="red">is disappointed</span> by ${his} normal-sized (or even petite, by expansionist standards) assets.`));
 			}
 		}
@@ -745,37 +745,37 @@ App.SlaveAssignment.saSocialEffects = function(slave) {
 		if (V.arcologies[0].FSPhysicalIdealist !== "unset") {
 			if (V.arcologies[0].FSPhysicalIdealistLaw === 1) {
 				if (slave.muscles > 50) {
-					t.push(new SocialEffect("PhysicalIdealist", 1, `Overmuscled (Fit Feminine)`,
+					t.push(new SocialEffect("Physical Idealist", 1, `Overmuscled (Fit Feminine)`,
 						`Society <span class="green">approves</span> of ${slave.slaveName}'s commitment to fitness; but thinks ${his} muscles are too big and vascular.`));
 				} else if ((slave.muscles > 20)) {
-					t.push(new SocialEffect("PhysicalIdealist", 2, `Fit (Fit Feminine)`,
+					t.push(new SocialEffect("Physical Idealist", 2, `Fit (Fit Feminine)`,
 						`Society <span class="green">strongly approves</span> of ${slave.slaveName}'s fit body; physical enthusiasts see ${him} as the optimal example of feminine fitness.`));
 				} else if ((slave.muscles > 5)) {
-					t.push(new SocialEffect("PhysicalIdealist", 1, `Toned (Fit Feminine)`,
+					t.push(new SocialEffect("Physical Idealist", 1, `Toned (Fit Feminine)`,
 						`Society <span class="green">approves</span> of ${slave.slaveName}'s toned form; the public sees potential in those guns.`));
 				}
 			} else {
 				if (slave.muscles > 95) {
-					t.push(new SocialEffect("PhysicalIdealist", 2, `Bodybuilder`,
+					t.push(new SocialEffect("Physical Idealist", 2, `Bodybuilder`,
 						`Society <span class="green">strongly approves</span> of ${slave.slaveName}'s glorious muscles; everyone wants to train a slave to look as swole as ${him}.`));
 				} else if ((slave.muscles > 30)) {
-					t.push(new SocialEffect("PhysicalIdealist", 1, `Fit`,
+					t.push(new SocialEffect("Physical Idealist", 1, `Fit`,
 						`Society <span class="green">approves</span> of ${slave.slaveName}'s fit body; physical enthusiasts see ${him} as on ${his} way to something great.`));
 				} else if ((slave.muscles > 5)) {
-					t.push(new SocialEffect("PhysicalIdealist", 1, `Toned`,
+					t.push(new SocialEffect("Physical Idealist", 1, `Toned`,
 						`Society <span class="green">approves</span> of ${slave.slaveName}'s toned form; the public sees potential in those guns.`));
 				}
 			}
 			if (slave.muscles < -30) {
-				t.push(new SocialEffect("PhysicalIdealist", -1, `Frail`,
+				t.push(new SocialEffect("Physical Idealist", -1, `Frail`,
 					`Society <span class="red">disapproves</span> of ${slave.slaveName}'s frail state; ${he} needs to build some muscles if ${he}'s going to help the public idolize fitness.`));
 			}
 			if (slave.height >= 185) {
-				t.push(new SocialEffect("PhysicalIdealist", 1, `Tall`,
+				t.push(new SocialEffect("Physical Idealist", 1, `Tall`,
 					`Society <span class="green">approves</span> of how tall ${he} is; the sexual advantages of ${his} height are impressed on the public mind.`));
 			}
 			if (slave.health.condition > 80) {
-				t.push(new SocialEffect("PhysicalIdealist", 1, `Healthy`,
+				t.push(new SocialEffect("Physical Idealist", 1, `Healthy`,
 					`Society <span class="green">approves</span> of ${his} health; the expectation that slaves should be kept perfectly healthy grows.`));
 			}
 		} else if (V.arcologies[0].FSHedonisticDecadence !== "unset") {
@@ -812,36 +812,36 @@ App.SlaveAssignment.saSocialEffects = function(slave) {
 
 		if (V.arcologies[0].FSChattelReligionist !== "unset") {
 			if (["cruel retirement counter", "tight steel", "uncomfortable leather"].includes(slave.collar)) {
-				t.push(new SocialEffect("ChattelReligionist", 1, `Punishing collar`,
+				t.push(new SocialEffect("Chattel Religionist", 1, `Punishing collar`,
 					`Society <span class="green">approves</span> of ${slave.slaveName}'s collar as an expression of the old ideal of mortification of the flesh, advancing the combination of religious originalism and modern slavery.`));
 			}
 			if (["a burqa", "a chattel habit", "a fallen nuns habit", "a hijab and abaya", "a niqab and abaya", "a penitent nuns habit", "a succubus outfit"].includes(slave.clothes)) {
-				t.push(new SocialEffect("ChattelReligionist", 1, `Religious clothing`,
+				t.push(new SocialEffect("Chattel Religionist", 1, `Religious clothing`,
 					`Society <span class="green">approves</span> of ${his} religiously themed clothing, strengthening the connection between sexual servitude and faith.`));
 			} else if (["a bunny outfit", "a hijab and blouse", "a huipil", "a kimono", "a military uniform", "a nice maid outfit", "a nice nurse outfit", "a skimpy loincloth", "a slutty qipao", "a toga", "Imperial Plate", "a tight Imperial bodysuit", "body oil", "chains", "conservative clothing", "nice business attire", "no clothing", "shibari ropes", "uncomfortable straps"].includes(slave.clothes)) {
-				t.push(new SocialEffect("ChattelReligionist", 0, `Spartan clothing`,
+				t.push(new SocialEffect("Chattel Religionist", 0, `Spartan clothing`,
 					`Society accepts ${his} spartan clothing, seeing it as permissible under the new religious mores.`));
 			} else if (slave.fuckdoll === 0) {
-				t.push(new SocialEffect("ChattelReligionist", -1, `Extravagant clothing`,
+				t.push(new SocialEffect("Chattel Religionist", -1, `Extravagant clothing`,
 					`Society <span class="red">disapproves</span> of ${his} unnecessarily gaudy attire; this slows acceptance of a link between faith and sexual servitude.`));
 			}
 			if (slave.devotion > 95) {
-				t.push(new SocialEffect("ChattelReligionist", 1, `Worshipful`,
+				t.push(new SocialEffect("Chattel Religionist", 1, `Worshipful`,
 					`Society <span class="green">approves</span> of ${his} devotion to you as a companion to religious devotion, seeing both as the model for holy slaves.`));
 			}
 			if (slave.trust > 95) {
-				t.push(new SocialEffect("ChattelReligionist", 2, `Completely trusting`,
+				t.push(new SocialEffect("Chattel Religionist", 2, `Completely trusting`,
 					`Society <span class="green">strongly approves</span> of ${his} faith in you as a companion to faith in God, seeing both as the model for righteous slaves of the future.`));
 			}
 			if (slave.behavioralFlaw === "devout") {
-				t.push(new SocialEffect("ChattelReligionist", 0, `Devout`,
+				t.push(new SocialEffect("Chattel Religionist", 0, `Devout`,
 					`Society does not disapprove of ${his} devout adherence to an old world faith, having confidence that you'll bring ${him} around, and looking forward to seeing ${him} converted into a holy sex object.`));
 			} else if ((slave.behavioralQuirk === "sinful")) {
-				t.push(new SocialEffect("ChattelReligionist", 2, `Sinful`,
+				t.push(new SocialEffect("Chattel Religionist", 2, `Sinful`,
 					`Society <span class="green">strongly approves</span> of ${his} eagerness to transgress against the old world religious mores ${he} once held dear.`));
 			}
 			if (slave.shouldersTat === "sacrilege" && slave.lipsTat === "sacrilege" && slave.boobsTat === "sacrilege" && slave.armsTat === "sacrilege" && slave.backTat === "sacrilege" && slave.stampTat === "sacrilege" && slave.buttTat === "sacrilege" && slave.vaginaTat === "sacrilege" && slave.dickTat === "sacrilege" && slave.anusTat === "sacrilege" && slave.legsTat === "sacrilege" && slave.fuckdoll === 0) {
-				t.push(new SocialEffect("ChattelReligionist", 1, `Sacrilegious tattoos`,
+				t.push(new SocialEffect("Chattel Religionist", 1, `Sacrilegious tattoos`,
 					`Society <span class="green">enjoys the sight</span> of the religious sacrilege scrawled across ${his} skin.`));
 			}
 		}
diff --git a/src/events/RETS/reFucktoyPrefersRelative.js b/src/events/RETS/reFucktoyPrefersRelative.js
index ab6acd1129ef569a95ee2862578dd38d1564a8a2..8a2c620e2fcb3162852a4e0127031f21cefd867c 100644
--- a/src/events/RETS/reFucktoyPrefersRelative.js
+++ b/src/events/RETS/reFucktoyPrefersRelative.js
@@ -216,7 +216,7 @@ App.Events.RETSFucktoyPrefersRelative = class RETSFucktoyPrefersRelative extends
 			if (V.arcologies[0].FSSlaveProfessionalism !== "unset") {
 				t = [];
 				t.push(`Whispers spread through your arcology about how seriously you take your slaves' <span class="reputation inc">duty to professional detachment.</span>`);
-				FutureSocieties.Change("SlaveProfessionalism", 3);
+				FutureSocieties.Change("Slave Professionalism", 3);
 				App.Events.addParagraph(frag, t);
 			}
 
diff --git a/src/js/futureSocietyJS.js b/src/js/futureSocietyJS.js
index f22af60d1318367f568f36636062f27c97d223a8..18aed6e07430b5a67413c0a679bd01e1e4429a48 100644
--- a/src/js/futureSocietyJS.js
+++ b/src/js/futureSocietyJS.js
@@ -1,43 +1,39 @@
 globalThis.FutureSocieties = (function() {
-	"use strict";
-	const FSString2Property = { // blame Hedonism and Eugenics for this - TODO: probably can be cleaned up, maybe eliminated
-		Supremacist: "FSSupremacist",
-		Subjugationist: "FSSubjugationist",
-		GenderRadicalist: "FSGenderRadicalist",
-		GenderFundamentalist: "FSGenderFundamentalist",
-		Degradationist: "FSDegradationist",
-		Paternalist: "FSPaternalist",
-		BodyPurist: "FSBodyPurist",
-		TransformationFetishist: "FSTransformationFetishist",
-		YouthPreferentialist: "FSYouthPreferentialist",
-		MaturityPreferentialist: "FSMaturityPreferentialist",
-		SlimnessEnthusiast: "FSSlimnessEnthusiast",
-		AssetExpansionist: "FSAssetExpansionist",
-		Pastoralist: "FSPastoralist",
-		PhysicalIdealist: "FSPhysicalIdealist",
-		Hedonistic: "FSHedonisticDecadence",
-		Hedonism: "FSHedonisticDecadence",
-		ChattelReligionist: "FSChattelReligionist",
-		Multiculturalist: "FSNull",
-		RomanRevivalist: "FSRomanRevivalist",
-		NeoImperialist: "FSNeoImperialist",
-		EgyptianRevivalist: "FSEgyptianRevivalist",
-		EdoRevivalist: "FSEdoRevivalist",
-		ArabianRevivalist: "FSArabianRevivalist",
-		ChineseRevivalist: "FSChineseRevivalist",
-		AztecRevivalist: "FSAztecRevivalist",
-		RepopulationFocus: "FSRepopulationFocus",
-		Repopulationist: "FSRepopulationFocus",
-		Eugenics: "FSRestart",
-		IntellectualDependency: "FSIntellectualDependency",
-		SlaveProfessionalism: "FSSlaveProfessionalism",
-		PetiteAdmiration: "FSPetiteAdmiration",
-		StatuesqueGlorification: "FSStatuesqueGlorification"
+	/** @type {Record<FC.FutureSociety, {noun: FC.FutureSocietyNoun, adj: FC.FutureSocietyAdj, deco: FC.FutureSocietyDeco, NPCOnly?: boolean}>} */
+	const FSRecords = {
+		FSSupremacist: {noun: "Racial Supremacism", adj: "Supremacist", deco: "Supremacist"},
+		FSSubjugationist: {noun: "Racial Subjugationism", adj: "Subjugationist", deco: "Subjugationist"},
+		FSGenderRadicalist: {noun: "Gender Radicalism", adj: "Gender Radicalist", deco: "Gender Radicalist"},
+		FSGenderFundamentalist: {noun: "Gender Fundamentalism", adj: "Gender Fundamentalist", deco: "Gender Fundamentalist"},
+		FSDegradationist: {noun: "Degradationism", adj: "Degradationist", deco: "Degradationist"},
+		FSPaternalist: {noun: "Paternalism", adj: "Paternalist", deco: "Paternalist"},
+		FSBodyPurist: {noun: "Body Purism", adj: "Body Purist", deco: "Body Purist"},
+		FSTransformationFetishist: {noun: "Transformation Fetishism", adj: "Transformation Fetishist", deco: "Transformation Fetishist"},
+		FSYouthPreferentialist: {noun: "Youth Preferentialism", adj: "Youth Preferentialist", deco: "Youth Preferentialist"},
+		FSMaturityPreferentialist: {noun: "Maturity Preferentialism", adj: "Maturity Preferentialist", deco: "Maturity Preferentialist"},
+		FSSlimnessEnthusiast: {noun: "Slimness Enthusiasm", adj: "Slimness Enthusiast", deco: "Slimness Enthusiast"},
+		FSAssetExpansionist: {noun: "Asset Expansionism", adj: "Asset Expansionist", deco: "Asset Expansionist"},
+		FSPastoralist: {noun: "Pastoralism", adj: "Pastoralist", deco: "Pastoralist"},
+		FSCummunism: {noun: "Cummunism", adj: "Cummunist", deco: "", NPCOnly: true},
+		FSPhysicalIdealist: {noun: "Physical Idealism", adj: "Physical Idealist", deco: "Physical Idealist"},
+		FSHedonisticDecadence: {noun: "Decadent Hedonism", adj: "Decadent Hedonist", deco: "Hedonistic"},
+		FSChattelReligionist: {noun: "Chattel Religionism", adj: "Chattel Religionist", deco: "Chattel Religionist"},
+		FSNull: {noun: "Multiculturalism", adj: "Multiculturalist", deco: ""},
+		FSIncestFetishist: {noun: "Incest Fetishism", adj: "Incest Fetishist", deco: "", NPCOnly: true},
+		FSRomanRevivalist: {noun: "Roman Revivalism", adj: "Roman Revivalist", deco: "Roman Revivalist"},
+		FSNeoImperialist: {noun: "Neo-Imperialism", adj: "Neo-Imperialist", deco: "Neo-Imperialist"},
+		FSEgyptianRevivalist: {noun: "Egyptian Revivalism", adj: "Egyptian Revivalist", deco: "Egyptian Revivalist"},
+		FSEdoRevivalist: {noun: "Edo Revivalism", adj: "Edo Revivalist", deco: "Edo Revivalist"},
+		FSArabianRevivalist: {noun: "Arabian Revivalism", adj: "Arabian Revivalist", deco: "Arabian Revivalist"},
+		FSChineseRevivalist: {noun: "Chinese Revivalism", adj: "Chinese Revivalist", deco: "Chinese Revivalist"},
+		FSAztecRevivalist: {noun: "Aztec Revivalism", adj: "Aztec Revivalist", deco: "Aztec Revivalist"},
+		FSRepopulationFocus: {noun: "Repopulation Focus", adj: "Repopulationist", deco: "Repopulationist"},
+		FSRestart: {noun: "Eugenics", adj: "Eugenics", deco: "Eugenics"},
+		FSIntellectualDependency: {noun: "Intellectual Dependency", adj: "Intellectual Dependency", deco: "Intellectual Dependency"},
+		FSSlaveProfessionalism: {noun: "Slave Professionalism", adj: "Slave Professional", deco: "Slave Professionalism"},
+		FSPetiteAdmiration: {noun: "Petite Admiration", adj: "Petite Admiration", deco: "Petite Admiration"},
+		FSStatuesqueGlorification: {noun: "Statuesque Glorification", adj: "Statuesque Glorification", deco: "Statuesque Glorification"}
 	};
-	/** @type {FC.FutureSociety[]} */
-	const SocietyList = [...new Set(Object.keys(FSString2Property).map(key => FSString2Property[key]))]; // This returns an array containing the unique values of FSString2Property. E.g. "FSSupremacist" and "FSSubjugationist"
-	/** @type {FC.FutureSociety[]} */
-	const NPCSocietyList = [ "FSCummunism", "FSIncestFetishist" ]; // NPC arcologies may use these FSes, but the PC can't
 
 	/** @type {FC.FutureSociety[][]} */
 	const FSMutexGroups = [
@@ -58,41 +54,17 @@ globalThis.FutureSocieties = (function() {
 		[ "FSPetiteAdmiration", "FSStatuesqueGlorification"]
 	];
 
-	/** @type {Record<FC.FutureSociety, {noun: FC.FutureSocietyNoun, adj: FC.FutureSocietyAdj}>} */
-	const DisplayName = {
-		FSSupremacist: {noun: "Racial Supremacism", adj: "Supremacist"},
-		FSSubjugationist: {noun: "Racial Subjugationism", adj: "Subjugationist"},
-		FSGenderRadicalist: {noun: "Gender Radicalism", adj: "Gender Radicalist"},
-		FSGenderFundamentalist: {noun: "Gender Fundamentalism", adj: "Gender Fundamentalist"},
-		FSDegradationist: {noun: "Degradationism", adj: "Degradationist"},
-		FSPaternalist: {noun: "Paternalism", adj: "Paternalist"},
-		FSBodyPurist: {noun: "Body Purism", adj: "Body Purist"},
-		FSTransformationFetishist: {noun: "Transformation Fetishism", adj: "Transformation Fetishist"},
-		FSYouthPreferentialist: {noun: "Youth Preferentialism", adj: "Youth Preferentialist"},
-		FSMaturityPreferentialist: {noun: "Maturity Preferentialism", adj: "Maturity Preferentialist"},
-		FSSlimnessEnthusiast: {noun: "Slimness Enthusiasm", adj: "Slimness Enthusiast"},
-		FSAssetExpansionist: {noun: "Asset Expansionism", adj: "Asset Expansionist"},
-		FSPastoralist: {noun: "Pastoralism", adj: "Pastoralist"},
-		FSCummunism: {noun: "Cummunism", adj: "Cummunist"},
-		FSPhysicalIdealist: {noun: "Physical Idealism", adj: "Physical Idealist"},
-		FSHedonisticDecadence: {noun: "Decadent Hedonism", adj: "Decadent Hedonist"},
-		FSChattelReligionist: {noun: "Chattel Religionism", adj: "Chattel Religionist"},
-		FSNull: {noun: "Multiculturalism", adj: "Multiculturalist"},
-		FSIncestFetishist: {noun: "Incest Fetishism", adj: "Incest Fetishist"},
-		FSRomanRevivalist: {noun: "Roman Revivalism", adj: "Roman Revivalist"},
-		FSNeoImperialist: {noun: "Neo-Imperialism", adj: "Neo-Imperialist"},
-		FSEgyptianRevivalist: {noun: "Egyptian Revivalism", adj: "Egyptian Revivalist"},
-		FSEdoRevivalist: {noun: "Edo Revivalism", adj: "Edo Revivalist"},
-		FSArabianRevivalist: {noun: "Arabian Revivalism", adj: "Arabian Revivalist"},
-		FSChineseRevivalist: {noun: "Chinese Revivalism", adj: "Chinese Revivalist"},
-		FSAztecRevivalist: {noun: "Aztec Revivalism", adj: "Aztec Revivalist"},
-		FSRepopulationFocus: {noun: "Repopulation Focus", adj: "Repopulationist"},
-		FSRestart: {noun: "Eugenics", adj: "Eugenics"},
-		FSIntellectualDependency: {noun: "Intellectual Dependency", adj: "Intellectual Dependency"},
-		FSSlaveProfessionalism: {noun: "Slave Professionalism", adj: "Slave Professional"},
-		FSPetiteAdmiration: {noun: "Petite Admiration", adj: "Petite Admiration"},
-		FSStatuesqueGlorification: {noun: "Statuesque Glorification", adj: "Statuesque Glorification"}
-	};
+	/** @type {FC.FutureSociety[]} */
+	const SocietyList = (/** @type {FC.FutureSociety[]} */ Object.keys(FSRecords));
+
+	/** @type {Map<FC.FutureSocietyDeco, FC.FutureSociety>} */
+	const DecoToFSMap = new Map();
+	for (const [fsName, details] of Object.entries(FSRecords)) {
+		if (details.deco) {
+			// @ts-ignore - Object.entries loses type information, apparently intentionally
+			DecoToFSMap.set(details.deco, fsName);
+		}
+	}
 
 	return {
 		activeFSes: activeFSes,
@@ -100,6 +72,7 @@ globalThis.FutureSocieties = (function() {
 		applyBroadProgress: applyBroadProgress,
 		availCredits: calcFSCredits,
 		influenceSources: influenceSources,
+		decorationName: decorationName,
 		diplomaticFSes: diplomaticFSes,
 		displayName: displayName,
 		displayAdj: displayAdj,
@@ -119,9 +92,7 @@ globalThis.FutureSocieties = (function() {
 	 * @returns {FC.FutureSociety[]}
 	 */
 	function activeFSes(arcology) {
-		let isSet = (fs) => arcology[fs] !== "unset";
-		const npcFSes = arcology.direction !== 0 ? NPCSocietyList.filter(isSet) : [];
-		return SocietyList.filter(isSet).concat(npcFSes);
+		return SocietyList.filter((fs) => Number.isFinite(arcology[fs]));
 	}
 
 	/** call as FutureSocieties.activeCount(arcology)
@@ -200,7 +171,7 @@ globalThis.FutureSocieties = (function() {
 	 */
 	function validAdoptions(arcID) {
 		const arcology = V.arcologies[arcID];
-		const societies = Array.from(arcID === 0 ? SocietyList : SocietyList.concat(NPCSocietyList));
+		const societies = Array.from(arcID !== 0 ? SocietyList : SocietyList.filter(fs => !FSRecords[fs].NPCOnly));
 		const arcFSes = activeFSes(arcology);
 
 		// apply game rules
@@ -283,7 +254,7 @@ globalThis.FutureSocieties = (function() {
 	 * @returns {FC.FutureSocietyNoun}
 	 */
 	function displayName(FSProp) {
-		return DisplayName[FSProp].noun;
+		return FSRecords[FSProp].noun;
 	}
 
 	/** returns the future society adjective (typically an "ist") for the given property
@@ -291,7 +262,15 @@ globalThis.FutureSocieties = (function() {
 	 * @returns {FC.FutureSocietyAdj}
 	 */
 	function displayAdj(FSProp) {
-		return DisplayName[FSProp].adj;
+		return FSRecords[FSProp].adj;
+	}
+
+	/** returns the future society decoration name (for use in decoration properties) for the given FS property
+	 * @param {FC.FutureSociety} FSProp
+	 * @returns {FC.FutureSocietyDeco}
+	 */
+	function decorationName(FSProp) {
+		return FSRecords[FSProp].deco;
 	}
 
 	/** decays all the FSes adopted by a particular arcology (for example, because of government instability)
@@ -473,13 +452,22 @@ globalThis.FutureSocieties = (function() {
 		ValidateFacilityDecoration("farmyardDecoration");
 	}
 
-	/* helper function, not callable */
-	/* decoration should be passed as "facilityDecoration" in quotes. For example, ValidateFacilityDecoration("brothelDecoration"). The quotes are important, do not pass it as a story variable. */
+	/** helper function, not callable externally
+	 * @param {string} decoration should be passed as "facilityDecoration" in quotes. For example, ValidateFacilityDecoration("brothelDecoration"). The quotes are important, do not pass it as a story variable.
+	 */
 	function ValidateFacilityDecoration(decoration) {
-		const FSString = V[decoration].replace(/ /g, ''); // removes spaces
-		const activeFS = FSString2Property[FSString]; // gets the property name
+		// Backwards compatibility, do not remove
+		if (V[decoration] === "Hedonism" || V[decoration] === "Hedonistic Decadence") {
+			V[decoration] = "Hedonistic";
+		} else if (V[decoration] === "Repopulation Focus") {
+			V[decoration] = "Repopulationist";
+		} else if (V[decoration] === "Neo Imperialist") {
+			V[decoration] = "Neo-Imperialist";
+		}
+
+		const activeFS = DecoToFSMap.get(V[decoration]); // gets the property name
 
-		if (FSString === "standard") {
+		if (decoration === "standard") {
 			// nothing to do
 		} else if (activeFS === undefined) {
 			// eslint-disable-next-line no-console
@@ -496,7 +484,7 @@ globalThis.FutureSocieties = (function() {
 
 	/** Apply the decoration bonus for a slave working in a facility to the FS
 	 * call as FutureSocieties.DecorationBonus()
-	 * @param {string} decoration - not quoted, just pass it straight in
+	 * @param {FC.FutureSocietyDeco} decoration - not quoted, just pass it straight in
 	 * @param {number} magnitude - will be multiplied by V.FSSingleSlaveRep
 	 */
 	function FSDecorationBonus(decoration, magnitude) {
@@ -504,8 +492,7 @@ globalThis.FutureSocieties = (function() {
 			return; // no bonus
 		}
 
-		const FSString = decoration.replace(/ /g, ''); // removes spaces
-		const FSProp = FSString2Property[FSString]; // gets the property name
+		const FSProp = DecoToFSMap.get(decoration); // gets the property name
 		const arc = V.arcologies[0];
 
 		if (FSProp && Number.isFinite(arc[FSProp])) {
@@ -514,18 +501,17 @@ globalThis.FutureSocieties = (function() {
 	}
 
 	/** call as FutureSocieties.Change()
-	 * @param {string} FSString should be in the FSString2Property object above
+	 * @param {FC.FutureSociety|FC.FutureSocietyDeco} FSString either decoration or FS property
 	 * @param {number} magnitude size of change
 	 * @param {number} [bonusMultiplier=1] multiplier to be applied to FS change (but NOT to rep change)
 	 * @returns {number} reputation change value (for recordkeeping)
 	 */
 	function FSChange(FSString, magnitude, bonusMultiplier = 1) {
 		const arcology = V.arcologies[0];
-		const activeFS = FSString2Property[FSString];
+		// @ts-ignore - could be a decoration string; just try to convert it to a property name, and if we can't then assume it's a property name and use it as-is
+		const activeFS = DecoToFSMap.get(FSString) || FSString;
 
-		if (activeFS === undefined) {
-			throw `Bad FS reference ${FSString}`;
-		} else if (Number.isFinite(arcology[activeFS])) {
+		if (Number.isFinite(arcology[activeFS])) {
 			let repChange = magnitude * V.FSSingleSlaveRep * (arcology[activeFS] / V.FSLockinLevel);
 			if (magnitude < 0) {
 				repChange /= 3; // Reducing the reputation impact of slaves that are not adhering to societal ideals properly
@@ -533,6 +519,8 @@ globalThis.FutureSocieties = (function() {
 			repX(repChange, 'futureSocieties');
 			arcology[activeFS] += 0.05 * magnitude * V.FSSingleSlaveRep * bonusMultiplier;
 			return repChange;
+		} else {
+			throw `Attempted to change unset FS ${activeFS}`;
 		}
 	}
 
diff --git a/src/npc/generate/newSlaveIntro.js b/src/npc/generate/newSlaveIntro.js
index 97b259e59d1a967ecd5ef5e8bdc8a4607b82effd..235abc56aecde66acc2f3891b26b7719709073c3 100644
--- a/src/npc/generate/newSlaveIntro.js
+++ b/src/npc/generate/newSlaveIntro.js
@@ -2317,7 +2317,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest =
 							}
 							if (V.arcologies[0].FSGenderRadicalist !== "unset") {
 								r.push(`Society <span class="green">approves</span> of your promptly gelding ${him}; this advances the idea that all societal inferiors can be made female.`);
-								FutureSocieties.Change("GenderRadicalist", 2);
+								FutureSocieties.Change("Gender Radicalist", 2);
 							}
 							if (V.arcologies[0].FSRestart !== "unset" && slave.pubertyXY === 1) {
 								r.push(`Society <span class="green">approves</span> of your promptly gelding ${him}; this advances the idea that only the elite should breed.`);
@@ -2721,10 +2721,10 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest =
 							V.failedElite += 5;
 						} else if (V.arcologies[0].FSGenderFundamentalist !== "unset" && slave.mpreg === 0) {
 							r.push(`Society <span class="green">approves</span> of your promptly putting a new slave in ${him}; this advances the idea that all slaves should bear their masters' babies.`);
-							FutureSocieties.Change("GenderFundamentalist", 2);
+							FutureSocieties.Change("Gender Fundamentalist", 2);
 						} else if (V.arcologies[0].FSGenderFundamentalist !== "unset") {
 							r.push(`Society <span class="red">is disgusted</span> by you promptly knocking up ${his} ass; babies come from women, not men.`);
-							FutureSocieties.Change("GenderFundamentalist", -2);
+							FutureSocieties.Change("Gender Fundamentalist", -2);
 						}
 						App.Events.addParagraph(el, r);
 
@@ -3389,7 +3389,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest =
 												r.push(`Righting yourself, you grab the gloating slave, drag ${him} to the autosurgery and strap ${him} face-down with ${his} legs spread. ${He} doesn't understand what's happening, but giggles at the sensations running through ${his} numb body. ${He}'s so drugged and drowsy with <span class="health dec">surgical recovery</span> that it takes a while for ${him} to figure out what's happened. When ${he} does, ${his} poor mind scarcely processes the <span class="gold">horror</span> of what's happened. ${He} spends the rest of the week dimly trying to find where ${his} balls went.`);
 												if (V.arcologies[0].FSGenderRadicalist !== "unset") {
 													r.push(`Society <span class="green">approves</span> of your promptly gelding ${him}; this advances the idea that all societal inferiors can be made female.`);
-													FutureSocieties.Change("GenderRadicalist", 2);
+													FutureSocieties.Change("Gender Radicalist", 2);
 												}
 												if (V.arcologies[0].FSRestart !== "unset" && slave.pubertyXY === 1) {
 													r.push(`Society <span class="green">approves</span> of your promptly gelding ${him}; this advances the idea that only the Elite should breed.`);
@@ -3754,7 +3754,7 @@ App.UI.newSlaveIntro = function(slave, slave2, {tankBorn = false, momInterest =
 														r.push(`Righting yourself, you grab the cowering slave, drag ${him} to the autosurgery and strap ${him} face-down with ${his} legs spread. ${He} doesn't understand what's happening, but giggles at the sensations running through ${his} numb body. ${He}'s so drugged and drowsy with <span class="health dec">surgical recovery</span> that it takes a while for ${him} to figure out what's happened. When ${he} does, ${his} poor mind scarcely processes the <span class="gold">horror</span> of what's happened. ${He} spends the rest of the week dimly trying to find where ${his} balls went.`);
 														if (V.arcologies[0].FSGenderRadicalist !== "unset") {
 															r.push(`Society <span class="green">approves</span> of your promptly gelding ${him}; this advances the idea that all societal inferiors can be made female.`);
-															FutureSocieties.Change("GenderRadicalist", 2);
+															FutureSocieties.Change("Gender Radicalist", 2);
 														}
 														if (V.arcologies[0].FSRestart !== "unset") {
 															r.push(`Society <span class="green">approves</span> of your promptly gelding ${him}; this advances the idea that only the Elite should breed.`);