diff --git a/js/003-data/miscData.js b/js/003-data/miscData.js
index a0a906213fdd4bb2278d7f912445f137d778ccbd..11a4116e3d8df59fa7a7444e0e59b9a122549610 100644
--- a/js/003-data/miscData.js
+++ b/js/003-data/miscData.js
@@ -261,9 +261,6 @@ App.Data.misc = {
 	filterRaces: ["Amerindian", "Asian", "Black", "Indo-Aryan", "Latina", "Malay", "Middle Eastern", "Mixed Race", "Pacific Islander", "Semitic", "Southern European", "White"],
 	filterRacesLowercase: ["amerindian", "asian", "black", "indo-aryan", "latina", "malay", "middle eastern", "mixed race", "pacific islander", "semitic", "southern european", "white"],
 	filterRegions: ["Africa", "Asia", "Australia", "Europe", "Middle East", "North America", "South America"],
-	naturalSkins: ["pure white", "ivory", "white", "extremely pale", "very pale", "pale", "extremely fair", "very fair", "fair", "light", "light olive", "tan", "olive", "bronze", "dark olive", "dark", "light beige", "beige", "dark beige", "light brown", "brown", "dark brown", "black", "ebony", "pure black"],
-	dyedSkins: ["camouflage patterned", "dyed blue", "dyed gray", "dyed green", "dyed pink", "dyed red", "tiger striped"],
-	naturalNippleColors: ["black", "brown", "dark brown", "ebony", "ivory", "light brown", "pale pink", "pink"],
 
 	/* START Custom Nationalities region filter */
 	/* Not currently weighted, but will accept weights */
diff --git a/js/003-data/slaveMods.js b/js/003-data/slaveMods.js
index 4f5deee28451931127bc72def9764c48bea0f140..70e41dc98207ee1a087d7d818a4444a53e2896be 100644
--- a/js/003-data/slaveMods.js
+++ b/js/003-data/slaveMods.js
@@ -392,16 +392,6 @@ App.Medicine.Modification.hairStyles = {
 			title: "Very long",
 			hLength: 100
 		},
-		{
-			title: "Apply hair growth stimulating treatment",
-			hLength: 0,
-			requirements: slave => !slave.bald
-		},
-		{
-			title: "Apply extensions",
-			onApplication: function(slave) { slave.hLength += 10; },
-			requirements: slave => !slave.bald && slave.hLength < 150
-		},
 	]
 };
 
@@ -438,3 +428,12 @@ App.Medicine.Modification.eyeShape = [
 	{value: "vacant"},
 	{value: "wide-eyed"}
 ];
+
+App.Medicine.Modification.naturalSkins = ["pure white", "ivory", "white", "extremely pale", "very pale", "pale", "extremely fair", "very fair", "fair", "light", "light olive", "tan", "olive", "bronze", "dark olive", "dark", "light beige", "beige", "dark beige", "light brown", "brown", "dark brown", "black", "ebony", "pure black"];
+App.Medicine.Modification.dyedSkins = ["camouflage patterned", "dyed blue", "dyed gray", "dyed green", "dyed pink", "dyed red", "tiger striped"];
+App.Medicine.Modification.naturalNippleColors = ["black", "brown", "dark brown", "ebony", "ivory", "light brown", "pale pink", "pink"];
+App.Medicine.Modification.eyebrowStyles = new Set(["shaved", "straight", "rounded", "natural", "slanted inwards", "slanted outwards", "high-arched", "elongated", "shortened", "curved"]);
+App.Medicine.Modification.eyebrowFullness = new Set(["pencil-thin", "thin", "threaded", "natural", "tapered", "thick", "bushy"]);
+App.Medicine.Modification.pubicStyles = new Set(["waxed", "in a strip", "neat", "bushy", "bushy in the front and neat in the rear", "very bushy"]);
+App.Medicine.Modification.armpitStyles = new Set(["waxed", "shaved", "neat", "bushy"]);
+App.Medicine.Modification.hornColor = new Set(["golden", "copper", "red", "deep red", "green", "pink", "dark brown", "brown", "burgundy", "jet black", "black", "grey", "silver", "white", "blue-violet", "purple", "dark orchid", "sea green", "green-yellow", "dark blue", "blazing red", "neon green", "neon blue", "neon pink"]);
diff --git a/src/003-assets/CSS/gridTemplates.css b/src/003-assets/CSS/gridTemplates.css
index 87763df8e8ace21100c398ba5f1789e5a3bec787..bdc2adf2e7f4ce6c1b970d3059b45c2dcb7cf382 100644
--- a/src/003-assets/CSS/gridTemplates.css
+++ b/src/003-assets/CSS/gridTemplates.css
@@ -24,15 +24,16 @@ div.eyeContainer {
 	grid-template-columns: 80px 50px 70px 50px;
 }
 
-div.buyProsthetics {
+div.buy-prosthetics {
 	display: grid;
-	grid-template-columns: 300px 140px 150px 150px;
+	grid-template-columns: repeat(4, max-content);
+	grid-column-gap: 40px;
 }
-div.buyProsthetics div.full {
+div.buy-prosthetics div.full {
 	grid-column-start: 2;
 	grid-column-end: 5;
 }
-div.buyProsthetics div.research {
+div.buy-prosthetics div.research {
 	grid-column-start: 3;
 	grid-column-end: 5;
 	text-align: center;
diff --git a/src/descriptions/familySummaries.js b/src/descriptions/familySummaries.js
index ab159c9683f975913b4ab4aed1bd3eada2c7c314..dd7b45d6fa77566f651aa9a7319ee3d47cf5cb11 100644
--- a/src/descriptions/familySummaries.js
+++ b/src/descriptions/familySummaries.js
@@ -387,7 +387,7 @@ App.Desc.family = (function() {
 		if (areSisters(slave, V.PC) === 3 && slave.genes === "XX") {
 			r.push(`${He} is`);
 			if (halfSisters.length > 0) {
-				r.push(`<span class="lightgreen">is your half-${sister} along with ${slaveListToText(halfSisters)}.</span>`);
+				r.push(`<span class="lightgreen">your half-${sister} along with ${slaveListToText(halfSisters)}.</span>`);
 			} else {
 				r.push(`<span class="lightgreen">your half-${sister}.</span>`);
 			}
@@ -398,7 +398,7 @@ App.Desc.family = (function() {
 		if (areSisters(slave, V.PC) === 3 && slave.genes === "XY") {
 			r.push(`${He} is`);
 			if (halfBrothers.length > 0) {
-				r.push(`<span class="lightgreen">is your half-${sister} along with ${slaveListToText(halfBrothers)})>>.</span>`);
+				r.push(`<span class="lightgreen">your half-${sister} along with ${slaveListToText(halfBrothers)}.</span>`);
 			} else {
 				r.push(`<span class="lightgreen">your half-${sister}.</span>`);
 			}
diff --git a/src/endWeek/economics/arcmgmt.js b/src/endWeek/economics/arcmgmt.js
index 64e5a67637416d778bd47e55cd912fe639c764c7..daa8bb291e2b0c48333b28cde90accb90833a689 100644
--- a/src/endWeek/economics/arcmgmt.js
+++ b/src/endWeek/economics/arcmgmt.js
@@ -106,20 +106,20 @@ App.EndWeek.arcManagement = function() {
 	V.ACitizens = V.lowerClass + V.middleClass + V.upperClass + V.topClass;
 	if (V.cheatMode === 1 || V.debugMode === 1) {
 		appendDiv(`${V.arcologies[0].prosperity} Prosperity | ${_FSScore} FS Score | ${_honeymoon} Honeymoon | ${_transportHub} Transporthub | ${_terrain} Terrain | ${_crime} Crime`);
-		appendDiv(`${_LSCD} Lower + Slave Class Demand | ${_SCD} Slave Class Demand | ${_slaveProductivity} Slave Productivity`);
-		appendDiv(`${_LCD} Lower Class Demand | ${_lowerClassP} LC Multiplier`);
-		appendDiv(`${_MCD} Middle Class Demand | ${_middleClassP} MC Multiplier`);
-		appendDiv(`${_UCD} Upper Class Demand | ${_upperClassP} UC Multiplier`);
-		appendDiv(`${_TCD} Top Class Demand | ${_topClassP} TC Multiplier`);
+		appendDiv(`${num(_LSCD)} Lower + Slave Class Demand | ${num(_SCD)} Slave Class Demand | ${num(_slaveProductivity)} Slave Productivity`);
+		appendDiv(`${num(_LCD)} Lower Class Demand | ${num(_lowerClassP)} LC Multiplier`);
+		appendDiv(`${num(_MCD)} Middle Class Demand | ${num(_middleClassP)} MC Multiplier`);
+		appendDiv(`${num(_UCD)} Upper Class Demand | ${num(_upperClassP)} UC Multiplier`);
+		appendDiv(`${num(_TCD)} Top Class Demand | ${num(_topClassP)} TC Multiplier`);
 	}
 	const percOfPop = (n) => Math.trunc((n / (V.ACitizens + V.ASlaves)) * 1000) / 10;
 	appendDiv(`${V.arcologies[0].name} is home to the following:`);
-	appendDiv(`Citizens | ${V.ACitizens} | ${percOfPop(V.ACitizens)}%`);
-	appendDiv(`Lower Class Citizens | ${V.lowerClass} | ${percOfPop(V.lowerClass)}%`);
-	appendDiv(`Middle Class Citizens | ${V.middleClass} | ${percOfPop(V.middleClass)}%`);
-	appendDiv(`Upper Class Citizens | ${V.upperClass} | ${percOfPop(V.upperClass)}%`);
-	appendDiv(`Millionaires | ${V.topClass} | ${percOfPop(V.topClass)}%`);
-	appendDiv(`Slaves | ${V.ASlaves} | ${percOfPop(V.ASlaves)}%`);
+	appendDiv(`Citizens | ${num(V.ACitizens)} | ${percOfPop(V.ACitizens)}%`);
+	appendDiv(`Lower Class Citizens | ${num(V.lowerClass)} | ${percOfPop(V.lowerClass)}%`);
+	appendDiv(`Middle Class Citizens | ${num(V.middleClass)} | ${percOfPop(V.middleClass)}%`);
+	appendDiv(`Upper Class Citizens | ${num(V.upperClass)} | ${percOfPop(V.upperClass)}%`);
+	appendDiv(`Millionaires | ${num(V.topClass)} | ${percOfPop(V.topClass)}%`);
+	appendDiv(`Slaves | ${num(V.ASlaves)} | ${percOfPop(V.ASlaves)}%`);
 
 	r = [];
 	if (V.arcologies[0].FSSupremacistLawME === 1) {
@@ -256,8 +256,7 @@ App.EndWeek.arcManagement = function() {
 		r.push(`Food vendors are offered subsidized rent and operating expenses to set up shop in your arcology.`);
 	}
 	if (V.secExpEnabled > 0) {
-		if (V.SecExp.edicts.alternativeRents === 1) {
-			/* A silly policy*/
+		if (V.SecExp.edicts.alternativeRents === 1) { // A silly policy
 			r.push(`Your citizens are allowed to pay their rents in slaves rather than cash and a few financially challenged individuals make use of this.`);
 			_rentMultiplier *= 0.95;
 			const _movement = random(0, 3);
@@ -411,8 +410,7 @@ App.EndWeek.arcManagement = function() {
 		if (V.arcologies[0].prosperity < (V.rep / 100)) {
 			r.push(`Your impressive reputation relative to ${V.arcologies[0].name}'s prosperity <span class="green">drives an increase in business.</span>`);
 			_AWeekGrowth++;
-		} else if (V.rep > 18000) {
-			/* no growth penalty if PC is at high rep, no matter how high prosperity goes */
+		} else if (V.rep > 18000) { // no growth penalty if PC is at high rep, no matter how high prosperity goes
 		} else if (V.arcologies[0].prosperity > (V.rep / 60)) {
 			r.push(`Your low reputation relative to ${V.arcologies[0].name}'s prosperity <span class="red">seriously impedes business growth.</span>`);
 			_AWeekGrowth -= 2;
@@ -530,7 +528,7 @@ App.EndWeek.arcManagement = function() {
 			_AWeekGrowth--;
 		}
 
-		/* deactivated with sec Exp as they are modifiers for the trade mechanic */
+		// deactivated with sec Exp as they are modifiers for the trade mechanic
 		if (V.secExpEnabled === 0) {
 			if (V.terrain === "urban") {
 				r.push(`Since your arcology is located in the heart of an urban area, its commerce is naturally vibrant.`);
@@ -656,7 +654,6 @@ App.EndWeek.arcManagement = function() {
 			let _popCap = menialPopCap();
 			let _menialSlaveValue = menialSlaveCost();
 			const {HeM, heM} = getPronouns(assistant.pronouns().market).appendSuffix('M');
-			// <br>
 			r.push(`Your <span class="bold">business assistant</span> manages the menial slave market.`);
 			if (_menialSlaveValue <= 900 + V.assistant.market.aggressiveness) { /* BUY */
 				let _bulkMax = _popCap.value - V.menials - V.fuckdolls - V.menialBioreactors;
@@ -1453,8 +1450,8 @@ App.EndWeek.arcManagement = function() {
 			V.menials += _enslavedPC;
 			V.NPCSlaves += _enslavedNPC;
 			if (_enslaved > 1) {
-				appendDiv(`In total <span class="green">${_enslaved} lower class citizens</span> were enslaved for failing to pay their debts.`);
-				appendDiv(`<span class="green">You enslaved ${_enslavedPC}</span> of them while other debtholders in the arcology enslaved the remaining ${_enslavedNPC}.`);
+				appendDiv(`In total <span class="green">${num(_enslaved)} lower class citizens</span> were enslaved for failing to pay their debts.`);
+				appendDiv(`<span class="green">You enslaved ${num(_enslavedPC)}</span> of them while other debtholders in the arcology enslaved the remaining ${num(_enslavedNPC)}.`);
 			} else {
 				appendDiv(`<span class="green">As arcology owner you claimed the slave.</span>`);
 			}
@@ -1493,7 +1490,7 @@ App.EndWeek.arcManagement = function() {
 			appendDiv(`<span class="red">Visitors is NaN, report this issue!</span>`);
 			V.visitors = _oldVisitors;
 		}
-		appendDiv(`<span class="green">${V.visitors} traders and tourists</span> visited your arcology this week.`);
+		appendDiv(`<span class="green">${num(V.visitors)} traders and tourists</span> visited your arcology this week.`);
 		appendDiv(App.SecExp.propagandaEffects("enslavement").text);
 		_enslaved += App.SecExp.propagandaEffects("enslavement").effect;
 
@@ -1506,7 +1503,7 @@ App.EndWeek.arcManagement = function() {
 			if (_weeklyRetiredMenials > 1) {
 				_weeklyRetiredMenials = Math.trunc(_weeklyRetiredMenials);
 				if (_weeklyRetiredMenials > 1) {
-					appendDiv(`<span class="red">${_weeklyRetiredMenials} of your menial slaves</span> retired as free citizens this week.`);
+					appendDiv(`<span class="red">${num(_weeklyRetiredMenials)} of your menial slaves</span> retired as free citizens this week.`);
 				} else {
 					appendDiv(`<span class="red">One of your menial slaves</span> retired as a free citizen this week.`);
 				}
@@ -1522,7 +1519,7 @@ App.EndWeek.arcManagement = function() {
 			if (_weeklyRetiredNPCMenials > 1) {
 				_weeklyRetiredNPCMenials = Math.trunc(_weeklyRetiredNPCMenials);
 				if (_weeklyRetiredNPCMenials > 1) {
-					appendDiv(`<span class="red">${_weeklyRetiredNPCMenials} menial slaves</span> were retired as free citizens by other slave owners in your arcology this week.`);
+					appendDiv(`<span class="red">${num(_weeklyRetiredNPCMenials)} menial slaves</span> were retired as free citizens by other slave owners in your arcology this week.`);
 				} else {
 					appendDiv(`<span class="red">One menial slave</span> was retired as a free citizen by another slave owner in your arcology this week.`);
 				}
@@ -1554,7 +1551,7 @@ App.EndWeek.arcManagement = function() {
 				V.menialDemandFactor -= _NPCSlavesSold;
 				V.NPCSlaves = Math.trunc(_SCD * 1.6);
 				if (_NPCSlavesSold > 1) {
-					appendDiv(`<span class="red">${_NPCSlavesSold}</span> slaves were sold by your inhabitants. They've got more than enough of them already.`);
+					appendDiv(`<span class="red">${num(_NPCSlavesSold)}</span> slaves were sold by your inhabitants. They've got more than enough of them already.`);
 				} else if (_NPCSlavesSold > 0) {
 					appendDiv(`<span class="red">One slave</span> was sold by your inhabitants. They've got more than enough of them already.`);
 				}
@@ -1564,7 +1561,7 @@ App.EndWeek.arcManagement = function() {
 				V.menialDemandFactor -= _NPCSlavesSold;
 				V.NPCSlaves = Math.trunc(_LSCD / _slaveProductivity);
 				if (_NPCSlavesSold > 1) {
-					appendDiv(`<span class="red">${_NPCSlavesSold}</span> slaves were sold by your inhabitants. There was so little work that they failed to earn their keep.`);
+					appendDiv(`<span class="red">${num(_NPCSlavesSold)}</span> slaves were sold by your inhabitants. There was so little work that they failed to earn their keep.`);
 				} else if (_NPCSlavesSold > 0) {
 					appendDiv(`<span class="red">One slave</span> was sold by your inhabitants. There was so little work that it failed to earn its keep.`);
 				}
@@ -1575,7 +1572,7 @@ App.EndWeek.arcManagement = function() {
 					V.menialDemandFactor -= _NPCSlavesSold;
 					V.NPCSlaves -= _NPCSlavesSold;
 					if (_NPCSlavesSold > 1) {
-						appendDiv(`<span class="red">${_NPCSlavesSold}</span> slaves were sold by your inhabitants. They've got more than enough of them already.`);
+						appendDiv(`<span class="red">${num(_NPCSlavesSold)}</span> slaves were sold by your inhabitants. They've got more than enough of them already.`);
 					} else if (_NPCSlavesSold > 0) {
 						appendDiv(`<span class="red">One slave</span> was sold by your inhabitants. They've got more than enough of them already.`);
 					}
@@ -1587,7 +1584,7 @@ App.EndWeek.arcManagement = function() {
 					V.menialDemandFactor -= _NPCSlavesSold;
 					V.NPCSlaves -= _NPCSlavesSold;
 					if (_NPCSlavesSold > 1) {
-						appendDiv(`<span class="red">${_NPCSlavesSold}</span> were sold by your inhabitants. They saw an opportunity for profit.`);
+						appendDiv(`<span class="red">${num(_NPCSlavesSold)}</span> were sold by your inhabitants. They saw an opportunity for profit.`);
 					} else if (_NPCSlavesSold > 0) {
 						appendDiv(`<span class="red">One slave</span> was sold by your inhabitants. They saw an opportunity for profit.`);
 					}
@@ -1600,7 +1597,7 @@ App.EndWeek.arcManagement = function() {
 					V.menialSupplyFactor -= _NPCSlavesBought;
 					V.NPCSlaves += _NPCSlavesBought;
 					if (_NPCSlavesBought > 1) {
-						appendDiv(`<span class="green">${_NPCSlavesBought} slaves</span> were bought by your inhabitants. They were too cheap to pass up on.`);
+						appendDiv(`<span class="green">${num(_NPCSlavesBought)} slaves</span> were bought by your inhabitants. They were too cheap to pass up on.`);
 					} /* there's no way this ever ends up needing a 1 slave version*/
 				}
 			}
@@ -1630,12 +1627,12 @@ App.EndWeek.arcManagement = function() {
 					const _intellectualDependencyEnslaved = Math.trunc(_LCImmigration * 0.25);
 					_LCImmigration -= _intellectualDependencyEnslaved;
 					_enslaved += _intellectualDependencyEnslaved;
-					r.push(`<span class="green">${_intellectualDependencyEnslaved} dumb immigrants</span> were enslaved for their own good.`);
+					r.push(`<span class="green">${num(_intellectualDependencyEnslaved)} dumb immigrants</span> were enslaved for their own good.`);
 				}
 
 				V.lowerClass += _LCImmigration;
 				if (_LCImmigration > 1) {
-					r.push(`<span class="green">${_LCImmigration} lower class citizens</span> moved to your arcology.`);
+					r.push(`<span class="green">${num(_LCImmigration)} lower class citizens</span> moved to your arcology.`);
 				} else if (_LCImmigration > 0) {
 					r.push(`<span class="green">One lower class citizen</span> moved to your arcology.`);
 				}
@@ -1646,9 +1643,9 @@ App.EndWeek.arcManagement = function() {
 				V.lowerClass -= _LCEmigration;
 				_enslaved += _enslavedEmigrants;
 				if (_LCEmigration > 1) {
-					r.push(`<span class="red">${_LCEmigration} lower class citizens</span> had no work and tried to leave your arcology.`);
+					r.push(`<span class="red">${num(_LCEmigration)} lower class citizens</span> had no work and tried to leave your arcology.`);
 					if (_enslavedEmigrants > 1) {
-						r.push(`<span class="green">${_enslavedEmigrants} of them were enslaved instead.</span>`);
+						r.push(`<span class="green">${num(_enslavedEmigrants)} of them were enslaved instead.</span>`);
 					} else if (_enslavedEmigrants > 0) {
 						r.push(`<span class="green">One of them was enslaved instead.</span>`);
 					}
@@ -1664,7 +1661,7 @@ App.EndWeek.arcManagement = function() {
 				V.menialSupplyFactor -= _NPCSlavesBought;
 				V.NPCSlaves += _NPCSlavesBought;
 				if (_NPCSlavesBought > 1) {
-					appendDiv(`<span class="green">${_NPCSlavesBought} slaves</span> were bought by your inhabitants. They did not have enough of them to satisfy their needs.`);
+					appendDiv(`<span class="green">${num(_NPCSlavesBought)} slaves</span> were bought by your inhabitants. They did not have enough of them to satisfy their needs.`);
 				} else if (_NPCSlavesBought > 0) {
 					appendDiv(`<span class="green">One slave</span> was bought by your inhabitants. They did not quite have enough of them to satisfy their needs.`);
 				}
@@ -1693,7 +1690,7 @@ App.EndWeek.arcManagement = function() {
 				const _MCImmigration = Math.trunc((_MCD - V.middleClass) * (0.3 * _terrain)) + 1 + secExpImigrationBonus.effect;
 				V.middleClass += _MCImmigration;
 				if (_MCImmigration > 1) {
-					appendDiv(`<span class="green">${_MCImmigration} middle class citizens</span> moved to your arcology.`);
+					appendDiv(`<span class="green">${num(_MCImmigration)} middle class citizens</span> moved to your arcology.`);
 				} else if (_MCImmigration > 0) {
 					appendDiv(`<span class="green">One middle class citizen</span> moved to your arcology.`);
 				}
@@ -1702,7 +1699,7 @@ App.EndWeek.arcManagement = function() {
 				const _MCEmigration = Math.trunc((V.middleClass - _MCD) * 0.4);
 				V.middleClass -= _MCEmigration;
 				if (_MCEmigration > 1) {
-					appendDiv(`<span class="red">${_MCEmigration} middle class citizens</span> left your arcology.`);
+					appendDiv(`<span class="red">${num(_MCEmigration)} middle class citizens</span> left your arcology.`);
 				} else if (_MCEmigration > 0) {
 					appendDiv(`<span class="red">One middle class citizen</span> left your arcology.`);
 				}
@@ -1731,7 +1728,7 @@ App.EndWeek.arcManagement = function() {
 				const _UCImmigration = Math.trunc((_UCD - V.upperClass) * (0.3 * _terrain)) + 1 + secExpImigrationBonus.effect;
 				V.upperClass += _UCImmigration;
 				if (_UCImmigration > 1) {
-					appendDiv(`<span class="green">${_UCImmigration} upper class citizens</span> moved to your arcology.`);
+					appendDiv(`<span class="green">${num(_UCImmigration)} upper class citizens</span> moved to your arcology.`);
 				} else if (_UCImmigration > 0) {
 					appendDiv(`<span class="green">One upper class citizen</span> moved to your arcology.`);
 				}
@@ -1740,7 +1737,7 @@ App.EndWeek.arcManagement = function() {
 				const _UCEmigration = Math.trunc((V.upperClass - _UCD) * 0.4);
 				V.upperClass -= _UCEmigration;
 				if (_UCEmigration > 1) {
-					appendDiv(`<span class="red">${_UCEmigration} upper class citizens</span> left your arcology.`);
+					appendDiv(`<span class="red">${num(_UCEmigration)} upper class citizens</span> left your arcology.`);
 				} else if (_UCEmigration > 0) {
 					appendDiv(`<span class="red">One upper class citizen</span> left your arcology.`);
 				}
@@ -1775,7 +1772,7 @@ App.EndWeek.arcManagement = function() {
 				const _TCImmigration = Math.trunc((_TCD - V.topClass) * (0.3 * _terrain)) + 1 + secExpImigrationBonus.effect;
 				V.topClass += _TCImmigration;
 				if (_TCImmigration > 1) {
-					appendDiv(`<span class="green">${_TCImmigration} millionaires</span> moved to your arcology.`); /* Fat Cat? One-Percenter? */
+					appendDiv(`<span class="green">${num(_TCImmigration)} millionaires</span> moved to your arcology.`); /* Fat Cat? One-Percenter? */
 				} else if (_TCImmigration > 0) {
 					appendDiv(`<span class="green">One millionaire</span> moved to your arcology.`);
 				}
@@ -1784,7 +1781,7 @@ App.EndWeek.arcManagement = function() {
 				const _TCEmigration = Math.trunc((V.topClass - _TCD) * 0.4) + 1;
 				V.topClass -= _TCEmigration;
 				if (_TCEmigration > 1) {
-					appendDiv(`<span class="red">${_TCEmigration} millionaires</span> left your arcology.`);
+					appendDiv(`<span class="red">${num(_TCEmigration)} millionaires</span> left your arcology.`);
 				} else if (_TCEmigration > 0) {
 					appendDiv(`<span class="red">One millionaire</span> left your arcology.`);
 				}
@@ -1815,12 +1812,12 @@ App.EndWeek.arcManagement = function() {
 			V.citizenRetirementTrigger = 2;
 			r.push(`You have enacted citizen retirement, the slaves of eligible age are granted freedom.`);
 			if (_menialsRetirement > 1) {
-				r.push(`<span class="red">${_menialsRetirement} of your menial slaves</span> were retired.`);
+				r.push(`<span class="red">${num(_menialsRetirement)} of your menial slaves</span> were retired.`);
 			} else if (_menialsRetirement > 0) {
 				r.push(`<span class="red">One of your menial slaves</span> was retired.`);
 			}
 			if (_ASlavesRetirement > 1) {
-				r.push(`<span class="red">${_ASlavesRetirement} slaves</span> in your arcology were given a citizen retirement.`);
+				r.push(`<span class="red">${num(_ASlavesRetirement)} slaves</span> in your arcology were given a citizen retirement.`);
 			}
 			/* I could bother with a single slave retirement message, but that's never going to get used*/
 		}
@@ -1874,7 +1871,7 @@ App.EndWeek.arcManagement = function() {
 				r.push(`<span class="red">${capFirstChar(numberWithPluralOne(_expiration, "slave"))} died</span> due to the tough working conditions in your arcology.`);
 			}
 			if (_expirationPC > 1) {
-				r.push(`Of which <span class="red">${_expirationPC} were yours.</span>`);
+				r.push(`Of which <span class="red">${num(_expirationPC)} were yours.</span>`);
 			} else if (_expirationPC > 0) {
 				r.push(`<span class="red">One of them was yours.</span>`);
 			}
diff --git a/src/endWeek/saRelationships.js b/src/endWeek/saRelationships.js
index ed45109b57e076010e0767e6109d44058c11aa2a..b470976241be7c412c0e9e48b513318cae0fd459 100644
--- a/src/endWeek/saRelationships.js
+++ b/src/endWeek/saRelationships.js
@@ -8,7 +8,6 @@ App.SlaveAssignment.relationships = (function() {
 	let playerPronouns;
 
 	let PC;
-	let friend;
 
 	return saRelationships;
 
@@ -346,6 +345,7 @@ App.SlaveAssignment.relationships = (function() {
 	 *
 	 */
 	function existingRelationship(slave) {
+		let friend;
 		let him2, his2, wife2;
 		if (slave.relationship > 0) {
 			friend = getSlave(slave.relationshipTarget);
@@ -454,6 +454,7 @@ App.SlaveAssignment.relationships = (function() {
 					case Job.QUARTER:
 						r.push(`${He} is <span class="devotion inc">happy</span> to be allowed to live ${his} life close to you, since ${he}'s your ${wife}. In addition, ${his} deep reliance on ${his} formal relationship to you produces a steady increase of both <span class="devotion inc">devotion</span> and <span class="trust inc">trust.</span>`);
 						slave.devotion += 2;
+						slave.trust += 2;
 						break;
 					case Job.WHORE:
 					case Job.BROTHEL:
@@ -554,7 +555,9 @@ App.SlaveAssignment.relationships = (function() {
 				}
 			}
 		} else if (slave.rules.relationship === "restrictive" && slave.relationship !== 5) {
-			 if (friend.rules.relationship === "restrictive") {
+			if (disobedience(friend) > random(0, 100)) {
+				r.push(`${friend.slaveName} knows ${slave.slaveName} isn't allowed to be in a relationship with ${him2}, but keeps seeing ${him} anyway.`);
+			} else {
 				r.push(`Since the rules forbid the relationship between ${slave.slaveName} and ${friend.slaveName}, they are <span class="relationship dec">forced apart.</span>`);
 				 if (slave.relationship > 1) {
 					slave.relationship--;
@@ -578,7 +581,9 @@ App.SlaveAssignment.relationships = (function() {
 				}
 			}
 		} else if (slave.rules.relationship === "just friends" && slave.relationship !== 5 && slave.relationship > 2) {
-			 if (friend.rules.relationship === "restrictive") {
+			if (disobedience(friend) > random(0, 100)) {
+				r.push(`${friend.slaveName} knows ${slave.slaveName} isn't allowed to be in a sexual relationship with ${him2}, but keeps fucking ${him} anyway.`);
+			} else {
 				r.push(`Since the sexual relationship between ${slave.slaveName} and ${friend.slaveName} is against the rules, they`);
 				if (!hasAnyArms(slave) && !hasAnyArms(friend)) {
 					r.push(`are, metaphorically speaking,`);
diff --git a/src/events/intro/pcAppearance.js b/src/events/intro/pcAppearance.js
index 96b5024ccaee1d0cc7e6bd95e6ca3d56a2f23e11..99dbf31f93e48b6d899fa8428abc7462a18d28f9 100644
--- a/src/events/intro/pcAppearance.js
+++ b/src/events/intro/pcAppearance.js
@@ -3,7 +3,7 @@ App.UI.Player = {};
 App.UI.Player.appearance = function(options) {
 	options.addOption("Your nationality is", "nationality", V.PC).showTextBox()
 		.addValueList(Object.keys(App.Data.SlaveSummary.short.nationality))
-		.addComment("For best result capitalize it.");
+		.addComment("For best result capitalize it.").pulldown();
 
 	options.addOption("Your race is", "race", V.PC).showTextBox()
 		.addValueList(Array.from(setup.filterRaces, (k => [k, k.toLowerCase()])));
@@ -14,11 +14,11 @@ App.UI.Player.appearance = function(options) {
 	}
 
 	options.addOption("Your skin tone is", "skin", V.PC).showTextBox()
-		.addValueList(makeAList(setup.naturalSkins));
+		.addValueList(makeAList(App.Medicine.Modification.naturalSkins));
 
 	if (V.cheatMode) {
 		options.addOption("Your genetic skin tone is", "origSkin", V.PC).showTextBox()
-			.addValueList(makeAList(setup.naturalSkins));
+			.addValueList(makeAList(App.Medicine.Modification.naturalSkins));
 	}
 
 	options.addOption("Your body", "markings", V.PC)
diff --git a/src/facilities/bodyModification/bodyModification.js b/src/facilities/bodyModification/bodyModification.js
index 682f9b9c50cfab76016516595779bca380b4291c..93e3be757f1c1fa864bbd37018aa0e28c5c1aa97 100644
--- a/src/facilities/bodyModification/bodyModification.js
+++ b/src/facilities/bodyModification/bodyModification.js
@@ -41,7 +41,7 @@ App.UI.bodyModification = function(slave, cheat = false) {
 	function intro() {
 		const el = new DocumentFragment();
 		App.UI.DOM.appendNewElement("h1", el, "Body Modification Studio");
-		App.UI.DOM.appendNewElement("div", el, `${SlaveFullName(slave)} is lying strapped down on the table in your body modification studio. ${He} is entirely at your mercy.`);
+		App.UI.DOM.appendNewElement("div", el, `${SlaveFullName(slave)} is lying strapped down on the table in your body modification studio. ${He} is entirely at your mercy.`, "scene-intro");
 		return el;
 	}
 
diff --git a/src/facilities/salon/salon.tw b/src/facilities/salon/salon.tw
new file mode 100644
index 0000000000000000000000000000000000000000..07bb6f37df73148445f546bf7c0e95cc38fb42a3
--- /dev/null
+++ b/src/facilities/salon/salon.tw
@@ -0,0 +1,5 @@
+:: Salon [nobr jump-from-safe]
+
+<<set $nextButton = "Confirm changes", $nextLink = "Slave Interact", $encyclopedia = "The Auto Salon">>
+
+<<includeDOM App.UI.salon(getSlave($AS))>>
\ No newline at end of file
diff --git a/src/facilities/salon/salonPassage.js b/src/facilities/salon/salonPassage.js
new file mode 100644
index 0000000000000000000000000000000000000000..b78f34aecd986a313a2b0b7ad571d04d2ef83311
--- /dev/null
+++ b/src/facilities/salon/salonPassage.js
@@ -0,0 +1,507 @@
+/**
+ * UI for the Salon.  Refreshes without refreshing the passage.
+ * @param {App.Entity.SlaveState} slave
+ * @param {boolean} cheat if true, will hide scenes and keep the player from being billed for changes.
+ */
+App.UI.salon = function(slave, cheat = false) {
+	const container = document.createElement("span");
+	container.id = "salon";
+	const {
+		He, His,
+		he, his, him
+	} = getPronouns(slave);
+	Enunciate(slave);
+
+	container.append(createPage());
+	return container;
+
+	function createPage() {
+		const el = new DocumentFragment();
+		if (!cheat) {
+			if (V.seeImages > 0) {
+				App.Events.drawEventArt(el, slave);
+			}
+			el.append(intro());
+		}
+		el.append(eyewear());
+		el.append(ears());
+		if (slave.horn !== "none") {
+			el.append(horns());
+		}
+		el.append(hair());
+		el.append(makeup());
+		el.append(skin());
+		el.append(bodyHair());
+		return el;
+	}
+
+	function intro() {
+		const el = new DocumentFragment();
+		App.UI.DOM.appendNewElement("h1", el, "The Auto Salon");
+		App.UI.DOM.appendNewElement("div", el, `${SlaveFullName(slave)} is seated in the auto salon. ${He} is awaiting your artistic pleasure.`, "scene-intro");
+		return el;
+	}
+
+	function eyewear() {
+		const el = new DocumentFragment();
+		App.UI.DOM.appendNewElement("h3", el, "Eyewear");
+		const r = [];
+		const options = new App.UI.OptionsGroup();
+
+		if (getBestVision(slave) === 0) {
+			r.push(`${He} is blind`);
+		} else if (anyVisionEquals(slave, 1)) {
+			r.push(`${He} is nearsighted`);
+		} else {
+			r.push(`${His} vision is normal`);
+		}
+
+		const option = options.addOption(r.join(" "), "eyewear", slave)
+			.addValue("None", "none")
+			.addValue("Cosmetic glasses", "glasses", billMod);
+		if (getBestVision(slave) !== 0 && anyVisionEquals(slave, 1)) {
+			option.addValue("Corrective glasses", "corrective glasses", billMod);
+			option.addValue("Corrective glasses", "corrective glasses", billMod);
+		} else {
+			option.addValue("Blurring glasses", "blurring glasses", billMod);
+			option.addValue("Blurring glasses", "blurring glasses", billMod);
+			option.addComment("Blurring options are annoying and impede performance on some assignments.");
+		}
+		el.append(options.render());
+
+		el.append(App.Medicine.Modification.eyeSelector(slave, cheat));
+		return el;
+	}
+
+	function ears() {
+		const el = new DocumentFragment();
+		App.UI.DOM.appendNewElement("h3", el, "Ears");
+		const r = [];
+		const options = new App.UI.OptionsGroup();
+
+		if (slave.earImplant === 1) {
+			r.push(`${He} has artificial inner ear implants`);
+		} else if (slave.hears < -1) {
+			r.push(`${He} is deaf`);
+		} else if (slave.hears > -1) {
+			r.push(`${His} hearing is normal`);
+		} else {
+			r.push(`${He} is hearing impaired`);
+		}
+		const option = options.addOption(r.join(" "), "earwear", slave)
+			.addValue("None", "none");
+		// Hard of hearing
+		if (slave.hears === -1 && slave.earImplant !== 1) {
+			option.addValue("Hearing aids", "hearing aids", billMod);
+		}
+		// Is not deaf
+		if (slave.hears > -2 || slave.earImplant === 1) {
+			option.addValue("Muffling ear plugs", "muffling ear plugs", billMod);
+			option.addValue("Deafening ear plugs", "deafening ear plugs", billMod);
+		}
+		el.append(options.render());
+
+		el.append(App.Medicine.Salon.ears(slave));
+
+		return el;
+	}
+
+	function horns() {
+		const el = new DocumentFragment();
+		App.UI.DOM.appendNewElement("h3", el, "Horns");
+		const options = new App.UI.OptionsGroup();
+
+		const option = options.addOption(`Set the color of ${his} ${slave.horn}`, "hornColor", slave);
+		for (const hornColor of App.Medicine.Modification.hornColor) {
+			option.addValue(capFirstChar(hornColor), hornColor, billMod);
+		}
+
+		el.append(options.render());
+
+		return el;
+	}
+
+	function makeup() {
+		const el = new DocumentFragment();
+		App.UI.DOM.appendNewElement("h3", el, "Makeup");
+		const options = new App.UI.OptionsGroup();
+
+		options.addOption(App.Desc.makeup(slave), "makeup", slave)
+			.addValue("Nice", 1, billMod)
+			.addValue("Gorgeous", 2, billMod)
+			.addValue("Slutty", 4, billMod)
+			.addValue("Color-coordinate with hair", 3, billMod);
+
+		options.addOption("", "makeup", slave)
+			.addValue("Neon", 5, billMod)
+			.addValue("Neon, color-coordinate with hair", 6, billMod);
+
+		options.addOption("", "makeup", slave)
+			.addValue("Metallic", 7, billMod)
+			.addValue("Metallic, color-coordinate with hair", 8, billMod);
+
+		el.append(options.render());
+
+		return el;
+	}
+
+	function hair() {
+		const el = new DocumentFragment();
+		let option;
+		App.UI.DOM.appendNewElement("h3", el, "Hair");
+		const options = new App.UI.OptionsGroup();
+		let title;
+		let showChoices = true;
+		const hasWig = (slave.bald === 1 && slave.hStyle !== "bald");
+
+		if (slave.bald === 1) {
+			if (slave.hStyle === "bald") {
+				title = `${He} is completely bald.`;
+				showChoices = false;
+			} else {
+				title = `${His} wig is ${slave.hColor}.`;
+			}
+		} else {
+			title = `${His} hair is ${slave.hColor}.`;
+		}
+		App.UI.DOM.appendNewElement("div", el, title);
+
+		if (slave.bald === 1) {
+			options.addOption(`Use a wig`, "hStyle", slave)
+				.addValue("Enable", "neat").on()
+				.addValue("Disable", "bald").off();
+		}
+
+		if (showChoices) {
+			if (slave.hLength > 1) {
+				// Original color
+				if (cheat) {
+					option = options.addOption("Natural color", "origHColor", slave);
+					for (const color of App.Medicine.Modification.Color.Primary) {
+						option.addValue(capFirstChar(color.value), color.value, billMod);
+					}
+					option.pulldown();
+
+					options.addOption("")
+						.customButton(
+							"Sync body hair color",
+							() => {
+								slave.eyebrowHColor = slave.origHColor;
+								slave.pubicHColor = slave.origHColor;
+								slave.underArmHColor = slave.origHColor;
+								App.UI.reload();
+							},
+							""
+						);
+				}
+				// Color
+				option = options.addOption("Primary color", "hColor", slave);
+				if (slave.origHColor !== slave.hColor) {
+					option.addValue("Restore natural color", slave.origHColor, billMod);
+				}
+				for (const color of App.Medicine.Modification.Color.Primary) {
+					option.addValue(capFirstChar(color.value), color.value, billMod);
+				}
+				option.pulldown();
+
+				option = options.addOption("Secondary color", "hColor", slave);
+				for (const color of App.Medicine.Modification.Color.Secondary) {
+					option.addValue(color.title, (slave.hColor + color.value), billMod);
+				}
+				option.pulldown();
+			}
+			// Style
+			if (slave.hLength > 1) {
+				title = `Style ${hasWig ? "wig" : "hair"} `;
+			} else {
+				title = `${His} ${hasWig ? "wig" : "hair"} is too short to style meaningfully`;
+			}
+			option = options.addOption(title, "hStyle", slave);
+			if (slave.hLength > 1) {
+				for (const style of App.Medicine.Modification.hairStyles.Normal) {
+					option.addValue(style.title, style.value, billMod);
+				}
+				option.pulldown();
+			}
+
+			// Style + Cut
+			if (slave.hLength > 1) {
+				option = options.addOption(`${hasWig ? "Change wig style and length" : "Cut and style hair"}`, "hStyle", slave);
+				if (slave.hLength > 1) {
+					for (const style of App.Medicine.Modification.hairStyles.Cut) {
+						option.addValue(
+							style.title,
+							style.value,
+							() => {
+								slave.hLength = style.hLength;
+								billMod();
+							});
+					}
+				}
+			}
+
+			// Length
+			option = options.addOption(`${hasWig ? "Find longer or shorter wig" : "Cut or lengthen hair"}`, "hLength", slave);
+			if (slave.hLength > 0) {
+				for (const style of App.Medicine.Modification.hairStyles.Length) {
+					if (
+						(style.hasOwnProperty("requirements") && !style.requirements(slave)) ||
+						(style.hLength && style.hLength > slave.hLength)
+					) {
+						continue;
+					}
+					option.addValue(style.title, style.hLength, billMod);
+				}
+				if (!slave.bald && slave.hLength < 150) {
+					option.addValue("Apply extensions", slave.hLength + 10, billMod);
+				}
+			} else {
+				option.addValue("Apply hair growth stimulating treatment", 1);
+			}
+
+			option.showTextBox();
+
+			// Maintain
+			if (!hasWig) {
+				options.addOption(`Maintain this length`, "haircuts", slave)
+					.addValue("Enable", 1).on()
+					.addValue("Disable", 0).off();
+			}
+		}
+
+		el.append(options.render());
+		return el;
+	}
+
+	function skin() {
+		const el = new DocumentFragment();
+		let r;
+		App.UI.DOM.appendNewElement("h3", el, "Skin");
+		const options = new App.UI.OptionsGroup();
+		let comment = [];
+
+		if (cheat) {
+			options.addOption(`${His} natural skin color is`, "origSkin", slave).showTextBox()
+				.addValueList([["Pure White", "pure white"], ["Ivory", "ivory"], ["White", "white"], ["Extremely Pale", "extremely pale"],
+					["Very Pale", "very pale"], ["Pale", "pale"], ["Extremely Fair", "extremely fair"], ["Very Fair", "very fair"],
+					["Fair", "fair"], ["Light", "light"], ["Light Olive", "light olive"], ["Tan", "tan"], ["Olive", "olive"], ["Bronze", "bronze"],
+					["Dark Olive", "dark olive"], ["Dark", "dark"], ["Light Beige", "light beige"], ["Beige", "beige"],
+					["Dark Beige", "dark beige"], ["Light Brown", "light brown"], ["Brown", "brown"], ["Dark Brown", "dark brown"],
+					["Black", "black"], ["Ebony", "ebony"], ["Pure Black", "pure black"]]).pulldown();
+		}
+
+		let option = options.addOption(`${His} skin is ${slave.skin}.`, "skin", slave);
+		if (App.Medicine.Modification.dyedSkins.includes(slave.skin)) {
+			option.addValue("Remove coloring", slave.origSkin, billMod);
+		} else if (((slave.skin === "sun tanned") || (slave.skin === "spray tanned"))) {
+			option.addValue("Remove tanning", slave.origSkin, billMod);
+		}
+
+		if (!App.Medicine.Modification.dyedSkins.includes(slave.skin)) {
+			if (slave.skin === "sun tanned" || slave.skin === "spray tanned") {
+				comment.push(`${His} skin tanning must be removed before any advanced procedure to change ${his} skin color.`);
+			} else {
+				if (skinToneLevel(slave.skin) > 1) {
+					option.addValue("Bleach", changeSkinTone(slave.skin, -2), billMod);
+				}
+				if (skinToneLevel(slave.skin) > 8) {
+					option.addValue("Lighten", changeSkinTone(slave.skin, -1), billMod);
+				}
+				if (skinToneLevel(slave.skin) < 18) {
+					option.addValue("Darken", changeSkinTone(slave.skin, 1), billMod);
+				}
+				if (skinToneLevel(slave.skin) < 25) {
+					option.addValue("Blacken", changeSkinTone(slave.skin, 2), billMod);
+				}
+			}
+			if (slave.skin !== "sun tanned") {
+				if (skinToneLevel(slave.skin) < 6) {
+					comment.push(`${His} skin is so light in color that any attempt at natural tanning is more likely to damage ${his} skin.`);
+				} else if ((skinToneLevel(slave.skin) > 20)) {
+					comment.push(`${His} skin is so dark in color that any attempt at natural tanning is not likely to appear on ${his} skin.`);
+				} else {
+					option.addValue("Sun tan", "sun tanned", billMod);
+				}
+			}
+			if (slave.skin !== "spray tanned") {
+				option.addValue("Spray tan", "sun tanned", billMod);
+			}
+			option.addComment(comment.join(" "));
+		}
+
+		option = options.addOption(`Dye or paint`, "skin", slave);
+		for (const dye of App.Medicine.Modification.dyedSkins) {
+			option.addValue(capFirstChar(dye), dye, billMod);
+		}
+
+		if (cheat) {
+			options.addOption(`${His} skin's marks are`, "markings", slave)
+				.addValueList([
+					["None", "none"],
+					["Freckles", "freckles"],
+					["Heavily freckled", "heavily freckled"],
+					["Beauty mark", "beauty mark"],
+					["Birthmark", "birthmark"],
+				]);
+		}
+		option.pulldown();
+
+		if (slave.markings === "beauty mark") {
+			r = [];
+			r.push(`${He} has a prominent mole on ${his} face, which`);
+			if (slave.face > 40) {
+				r.push(`qualifies as a beauty mark and enhances ${his} attractiveness due to ${his} facial beauty.`);
+			} else if (slave.face < -10) {
+				r.push(`makes ${him} even less attractive.`);
+			} else {
+				r.push(`qualifies as a beauty mark since ${he}'s pretty, having no significant impact on ${his} beauty.`);
+			}
+			options.addOption(r.join(" "), "markings", slave)
+				.addValue("Remove it", "none", billMod);
+		}
+		if (slave.markings === "birthmark") {
+			r = [];
+			r.push(`${He} has a large birthmark, which`);
+			if (slave.prestige > 0 || slave.porn.prestige > 1) {
+				r.push(`enhances ${his} attractiveness due to ${his} prestige.`);
+			} else {
+				r.push(`detracts from ${his} attractiveness.`);
+			}
+			options.addOption(r.join(" "), "markings", slave)
+				.addValue("Bleach it", "none", billMod);
+		}
+
+		el.append(options.render());
+
+		return el;
+	}
+
+	function bodyHair() {
+		const el = new DocumentFragment();
+		const options = new App.UI.OptionsGroup();
+		let option;
+		let r = [];
+		App.UI.DOM.appendNewElement("h3", el, "Body hair");
+
+		// Eyebrows
+		if (slave.eyebrowHStyle !== "bald") {
+			// Describe and change color
+			r.push(`${His} eyebrows`);
+			if (slave.eyebrowHStyle === "shaved") {
+				r.push(`would be ${slave.eyebrowHColor} if present.`);
+			} else {
+				r.push(`are ${slave.eyebrowHColor}.`);
+			}
+
+			option = options.addOption(r.join(" "), "eyebrowHColor", slave);
+			if (slave.eyebrowHColor !== slave.hColor) {
+				option.addValue("Match the hair", slave.hColor);
+			}
+			option.addValueList(makeAList(App.Medicine.Modification.Color.Primary.map(color => color.value)));
+			option.addCallbackToEach(billMod);
+			option.pulldown();
+
+			// Style
+			option = options.addOption(`Style ${his} eyebrow hair`, "eyebrowHStyle", slave);
+			for (const fullness of App.Medicine.Modification.eyebrowStyles) {
+				option.addValue(capFirstChar(fullness), fullness, billMod);
+			}
+			option.pulldown();
+
+			// Fullness
+			option = options.addOption(`Shape ${his} eyebrow hair`, "eyebrowFullness", slave);
+			for (const fullness of App.Medicine.Modification.eyebrowFullness) {
+				option.addValue(capFirstChar(fullness), fullness, billMod);
+			}
+			option.pulldown();
+		} else {
+			options.addComment(`${His} eyebrows are completely hairless.`);
+		}
+
+		// Pubic hair
+		const _pubertyAge = Math.min(slave.pubertyAgeXX, slave.pubertyAgeXY);
+		r = [];
+		const hasPubes = (slave.pubicHStyle !== "bald" && slave.pubicHStyle !== "hairless" && slave.physicalAge >= _pubertyAge - 1);
+		if (hasPubes) {
+			r.push(`${His}`);
+			if (slave.physicalAge < _pubertyAge) {
+				r.push(`wispy pubic hair, which is just starting to grow in,`);
+			} else if (slave.pubicHStyle === "in a strip") {
+				r.push(`pubic hair, which is shaved into a strip,`);
+			} else {
+				r.push(`${slave.pubicHStyle} pubic hair`);
+			}
+			if (slave.pubicHStyle === "waxed") {
+				r.push(`would be ${slave.pubicHColor} if present.`);
+			} else {
+				r.push(`is ${slave.pubicHColor}.`);
+			}
+		} else {
+			r.push(`${His} groin is completely hairless.`);
+		}
+		option = options.addOption(r.join(" "), "pubicHColor", slave);
+		if (hasPubes) {
+			if (slave.pubicHColor !== slave.hColor) {
+				option.addValue("Match the curtains", slave.pubicHColor);
+			}
+			option.addValueList(makeAList(App.Medicine.Modification.Color.Primary.map(color => color.value)))
+				.addCallbackToEach(billMod)
+				.pulldown();
+
+			// Style
+			option = options.addOption(`Style ${his} pubic hair`, "pubicHStyle", slave);
+			for (const fullness of App.Medicine.Modification.pubicStyles) {
+				option.addValue(capFirstChar(fullness), fullness, billMod);
+			}
+			option.pulldown();
+		}
+
+		// Armpit hair
+		r = [];
+		const hasPitHair = (slave.underArmHStyle !== "bald" && slave.underArmHStyle !== "hairless" && slave.physicalAge >= _pubertyAge - 1);
+		if (hasPitHair) {
+			r.push(`${His}`);
+			if (slave.physicalAge < _pubertyAge) {
+				r.push(`wispy underarm hair`);
+			} else {
+				r.push(`${slave.underArmHStyle} underarm hair`);
+			}
+			if (slave.underArmHStyle === "waxed") {
+				r.push(`would be ${slave.underArmHColor} if present.`);
+			} else {
+				r.push(`is ${slave.underArmHColor}.`);
+			}
+		} else {
+			r.push(`${His} underarms are completely hairless.`);
+		}
+		option = options.addOption(r.join(" "), "underArmHColor", slave);
+		if (hasPitHair) {
+			if (slave.underArmHColor !== slave.hColor) {
+				option.addValue("Match the hair", slave.hColor);
+			}
+			option.addValueList(makeAList(App.Medicine.Modification.Color.Primary.map(color => color.value)))
+				.addCallbackToEach(billMod)
+				.pulldown();
+
+			// Style
+			option = options.addOption(`Style ${his} armpit hair`, "underArmHStyle", slave);
+			for (const fullness of App.Medicine.Modification.armpitStyles) {
+				option.addValue(capFirstChar(fullness), fullness, billMod);
+			}
+			option.pulldown();
+		}
+
+		el.append(options.render());
+		return el;
+	}
+
+	function billMod() {
+		if (!cheat) {
+			cashX(forceNeg(V.modCost), "slaveMod", slave);
+		}
+	}
+
+	function makeAList(iterable) {
+		return Array.from(iterable, (k => [capFirstChar(k), k]));
+	}
+};
diff --git a/src/gui/options/options.js b/src/gui/options/options.js
index a8aafbcd3f844fc3df238d83117f9f22402ad0bf..12967cf2e552c9559016fb40caf4366002e479df 100644
--- a/src/gui/options/options.js
+++ b/src/gui/options/options.js
@@ -65,6 +65,17 @@ App.UI.OptionsGroup = (function() {
 			return this;
 		}
 
+		/**
+		 * @param {Map} values
+		 * @returns {Option}
+		 */
+		addValueMap(values) {
+			for (const [key, value] of values) {
+				this.addValue(key, value);
+			}
+			return this;
+		}
+
 		/**
 		 * @param {*} value
 		 * @param {number} compareValue
@@ -144,6 +155,14 @@ App.UI.OptionsGroup = (function() {
 			return this;
 		}
 
+		/**
+		 * @param {Function} callback gets executed on every button click. Selected value is given as argument.
+		 */
+		addCallbackToEach(callback) {
+			this.valuePairs.forEach(pair => pair.callback = callback);
+			return this;
+		}
+
 		/**
 		 * Mark option as on to style differently.
 		 * @returns {Option}
@@ -171,8 +190,14 @@ App.UI.OptionsGroup = (function() {
 			return this;
 		}
 
+		/**
+		 * Puts the options in side a pulldown if there are at least 6.
+		 * Not counting text boxes or comments.
+		 * @returns {Option}
+		 */
 		pulldown() {
 			this.enablePulldown = true;
+			return this;
 		}
 
 		/**
@@ -247,6 +272,7 @@ App.UI.OptionsGroup = (function() {
 					buttonGroup.append(button);
 				}
 			} else {
+				let matchFound = false;
 				let select = document.createElement("select");
 				select.classList.add("rajs-list");
 
@@ -256,9 +282,13 @@ App.UI.OptionsGroup = (function() {
 					el.value = value.value;
 					if (this.object[this.property] === value.value) {
 						el.selected = true;
+						matchFound = true;
 					}
 					select.appendChild(el);
 				}
+				if (!matchFound) {
+					select.selectedIndex = -1;
+				}
 				select.onchange = () => {
 					const O = select.options[select.selectedIndex];
 					if (isNaN(Number(O.value))) {
diff --git a/src/interaction/prostheticConfig.tw b/src/interaction/prostheticConfig.tw
index dc84c4ea06d63de195ca06c57a653ff27a52fd64..4326995e2739557b650eb27dddce73f1203e6b58 100644
--- a/src/interaction/prostheticConfig.tw
+++ b/src/interaction/prostheticConfig.tw
@@ -273,7 +273,7 @@ This room is lined with shelves and cabinets; it could be easily mistaken for a
 <p class="choices">
 //Fit prosthetics to $him://
 
-<div class="buyProsthetics">
+<div class="buy-prosthetics">
 	<div></div>
 	<div>''Buy and fit''</div>
 	<div>
@@ -297,52 +297,56 @@ This room is lined with shelves and cabinets; it could be easily mistaken for a
 		<<if $adjustProsthetics.findIndex(function(p) {return p.id == _p && p.slaveID == getSlave($AS).ID}) != -1 || $researchLab.tasks.findIndex(function(p) {return p.type == "craftFit" && p.id == _p && p.slaveID == getSlave($AS).ID}) != -1>>
 			<div class="full">//Currently being fitted to $him.//</div>
 		<<elseif setup.prosthetics[_p].level > $prostheticsUpgrade>>
-			<div class="full">//Better contracts are needed to buy this.//</div>
+			<div class="full">//Better contracts are needed to buy these.//</div>
 		<<elseif isProstheticAvailable(getSlave($AS), _p)>>
 			<div class="full">//Completed.//</div>
 		<<else>>
 			<<capture _p>>
 			<div>
-			<<if $prosthetics[_p].amount > 0>>
-				<<link "From storage" "Prosthetics Configuration">>
-					<<set $adjustProsthetics.push({id: _p, workLeft: setup.prosthetics[_p].adjust, slaveID: getSlave($AS).ID}), $prosthetics[_p].amount -= 1>>
-				<</link>>
-			<<else>>
-				<<link "<<= cashFormat(setup.prosthetics[_p].costs)>>" "Prosthetics Configuration">>
-					<<set $adjustProsthetics.push({id: _p, workLeft: setup.prosthetics[_p].adjust, slaveID: getSlave($AS).ID}), cashX(forceNeg(setup.prosthetics[_p].costs), "slaveMod", getSlave($AS))>>
-				<</link>>
-			<</if>>
+				<<if $prosthetics[_p].amount > 0>>
+					<<link "From storage" "Prosthetics Configuration">>
+						<<set $adjustProsthetics.push({id: _p, workLeft: setup.prosthetics[_p].adjust, slaveID: getSlave($AS).ID}), $prosthetics[_p].amount -= 1>>
+					<</link>>
+				<<else>>
+					<<link "<<= cashFormat(setup.prosthetics[_p].costs)>>" "Prosthetics Configuration">>
+						<<set $adjustProsthetics.push({id: _p, workLeft: setup.prosthetics[_p].adjust, slaveID: getSlave($AS).ID}), cashX(forceNeg(setup.prosthetics[_p].costs), "slaveMod", getSlave($AS))>>
+					<</link>>
+				<</if>>
 			</div>
 			<<if $prosthetics[_p].research > 0>>
-			<div style="text-align:center">
-			<<if $researchLab.level > 0 && $prosthetics[_p].research > 0>>
-				<<link "Construct" "Prosthetics Configuration">>
-					<<set $researchLab.tasks.push({
-						type: "craftFit",
-						id: _p,
-						workLeft: (setup.prosthetics[_p].adjust + setup.prosthetics[_p].craft) / 1.5,
-						slaveID: $AS})>>
-					/* 1.5: longer than adjust, but faster than adjust+craft. */
-				<</link>>
-			<</if>>
-			</div>
-			<div style="text-align:right">
-			<<if $researchLab.speed >= 300 && $prosthetics[_p].research > 0>> /* max speed */
-			<<if $prosthetics[_p].amount > 0>>
-				<<link "From storage: <<= cashFormat(setup.prosthetics[_p].adjust * 50)>>" "Prosthetics Configuration">>
-					<<set cashX(forceNeg(setup.prosthetics[_p].costs * 1.5), "slaveMod", getSlave($AS)), addProsthetic(getSlave($AS), _p)>>
-				<</link>>
-			<<else>>
-				<<link "<<= cashFormat(setup.prosthetics[_p].costs + setup.prosthetics[_p].adjust * 100)>>" "Prosthetics Configuration">>
-					<<set cashX(forceNeg(setup.prosthetics[_p].costs + setup.prosthetics[_p].adjust * 100), "slaveMod", getSlave($AS)), addProsthetic(getSlave($AS), _p)>>
-				<</link>>
-			<</if>>
-			<</if>>
-			</div>
+				<div style="text-align:center">
+					<<if $researchLab.level > 0 && $prosthetics[_p].research > 0>>
+						<<link "Construct" "Prosthetics Configuration">>
+							<<set $researchLab.tasks.push({
+								type: "craftFit",
+								id: _p,
+								workLeft: (setup.prosthetics[_p].adjust + setup.prosthetics[_p].craft) / 1.5,
+								slaveID: $AS})>>
+							/* 1.5: longer than adjust, but faster than adjust+craft. */
+						<</link>>
+					<</if>>
+				</div>
+				<div style="text-align:right">
+					<<if $researchLab.speed >= 300 && $prosthetics[_p].research > 0>> /* max speed */
+						<<if $prosthetics[_p].amount > 0>>
+							<<link "From storage: <<= cashFormat(setup.prosthetics[_p].adjust * 50)>>" "Prosthetics Configuration">>
+								<<set cashX(forceNeg(setup.prosthetics[_p].costs * 1.5), "slaveMod", getSlave($AS)), addProsthetic(getSlave($AS), _p)>>
+							<</link>>
+						<<else>>
+							<<link "<<= cashFormat(setup.prosthetics[_p].costs + setup.prosthetics[_p].adjust * 100)>>" "Prosthetics Configuration">>
+								<<set cashX(forceNeg(setup.prosthetics[_p].costs + setup.prosthetics[_p].adjust * 100), "slaveMod", getSlave($AS)), addProsthetic(getSlave($AS), _p)>>
+							<</link>>
+						<</if>>
+					<</if>>
+				</div>
 			<<elseif $researchLab.level > 0>>
-			<div class="research">
-				//Not researched.//
-			</div>
+				<div class="research">
+					//Not researched.//
+				</div>
+			<<else>>
+				<div class="research">
+					//You need to construct a lab first.//
+				</div>
 			<</if>>
 			<</capture>>
 		<</if>>
diff --git a/src/js/rulesAssistantOptions.js b/src/js/rulesAssistantOptions.js
index 03ce426239d71eb0f92e498c642749506d27e6be..ccc8b24aa8fafc3d015748080a818e4239f2212b 100644
--- a/src/js/rulesAssistantOptions.js
+++ b/src/js/rulesAssistantOptions.js
@@ -3029,32 +3029,7 @@ globalThis.rulesAssistantOptions = (function() {
 
 	class HornColorList extends ListSelector {
 		constructor() {
-			const pairs = [
-				["golden"],
-				["copper"],
-				["red"],
-				["deep red"],
-				["green"],
-				["pink"],
-				["dark brown"],
-				["brown"],
-				["burgundy"],
-				["jet black"],
-				["black"],
-				["grey"],
-				["silver"],
-				["white"],
-				["blue-violet"],
-				["purple"],
-				["dark orchid"],
-				["sea green"],
-				["green-yellow"],
-				["dark blue"],
-				["blazing red"],
-				["neon green"],
-				["neon blue"],
-				["neon pink"]
-			];
+			const pairs = Array.from(App.Medicine.Modification.hornColor, color => [color]);
 			super("Horn color", pairs);
 			this.setValue(current_rule.set.hornColor);
 			this.onchange = (value) => current_rule.set.hornColor = value;
@@ -3081,18 +3056,7 @@ globalThis.rulesAssistantOptions = (function() {
 
 	class EyebrowStyleList extends ListSelector {
 		constructor() {
-			const pairs = [
-				["shaved"],
-				["straight"],
-				["rounded"],
-				["natural"],
-				["slanted inwards"],
-				["slanted outwards"],
-				["high-arched"],
-				["elongated"],
-				["shortened"],
-				["curved"]
-			];
+			const pairs = Array.from(App.Medicine.Modification.eyebrowStyles, style => [style]);
 			super("Eyebrow style", pairs);
 			this.setValue(current_rule.set.eyebrowHStyle);
 			this.onchange = (value) => current_rule.set.eyebrowHStyle = value;
@@ -3101,15 +3065,7 @@ globalThis.rulesAssistantOptions = (function() {
 
 	class EyebrowFullnessList extends ListSelector {
 		constructor() {
-			const pairs = [
-				["pencil-thin"],
-				["thin"],
-				["threaded"],
-				["natural"],
-				["tapered"],
-				["thick"],
-				["bushy"]
-			];
+			const pairs = Array.from(App.Medicine.Modification.eyebrowFullness, fullness => [fullness]);
 			super("Eyebrow fullness", pairs);
 			this.setValue(current_rule.set.eyebrowFullness);
 			this.onchange = (value) => current_rule.set.eyebrowFullness = value;
@@ -3140,14 +3096,7 @@ globalThis.rulesAssistantOptions = (function() {
 
 	class PubicHairStyleList extends ListSelector {
 		constructor() {
-			const pairs = [
-				["waxed"],
-				["in a strip"],
-				["neat"],
-				["bushy"],
-				["bushy in the front and neat in the rear"],
-				["very bushy"]
-			];
+			const pairs = Array.from(App.Medicine.Modification.pubicStyles, style => [style]);
 			super("Pubic hairstyle", pairs);
 			this.setValue(current_rule.set.pubicHStyle);
 			this.onchange = (value) => current_rule.set.pubicHStyle = value;
@@ -3165,12 +3114,7 @@ globalThis.rulesAssistantOptions = (function() {
 
 	class ArmpitHairStyleList extends ListSelector {
 		constructor() {
-			const pairs = [
-				["waxed"],
-				["shaved"],
-				["neat"],
-				["bushy"]
-			];
+			const pairs = Array.from(App.Medicine.Modification.armpitStyles, style => [style]);
 			super("Underarm hair style", pairs);
 			this.setValue(current_rule.set.underArmHStyle);
 			this.onchange = (value) => current_rule.set.underArmHStyle = value;
@@ -4022,13 +3966,7 @@ globalThis.rulesAssistantOptions = (function() {
 				["pure black"],
 				["sun tanned"],
 				["spray tanned"],
-				["dyed red"],
-				["dyed green"],
-				["dyed blue"],
-				["dyed pink"],
-				["dyed gray"],
-				["tiger striped"],
-				["camouflage patterned"],
+				...App.Medicine.Modification.dyedSkins
 			];
 			super("Dye or tan skin", items);
 			this.setValue(current_rule.set.skinColor);
diff --git a/src/js/salon.js b/src/js/salon.js
index 9a0e8ccdfd578613e480eb56978c00c947dab257..74916eb4ff5a80df035fa3a44c6ce96fda0e8b43 100644
--- a/src/js/salon.js
+++ b/src/js/salon.js
@@ -1,8 +1,9 @@
 /**
  * @param {FC.HumanState} entity
+ * @param {Boolean} cheat
  * @returns {HTMLDivElement}
  */
-App.Medicine.Modification.eyeSelector = function(entity) {
+App.Medicine.Modification.eyeSelector = function(entity, cheat = false) {
 	const {He, him, his} = getPronouns(entity);
 
 	const player = entity === V.PC;
@@ -166,7 +167,9 @@ App.Medicine.Modification.eyeSelector = function(entity) {
 			selectedPupil === "none" ? "" : selectedPupil,
 			selectedSclera === "none" ? "" : selectedSclera,
 			selectedSide);
-		cashX(forceNeg(V.modCost), "slaveMod", entity);
+		if (!cheat) {
+			cashX(forceNeg(V.modCost), "slaveMod", entity);
+		}
 
 		App.UI.reload();
 	}
@@ -226,463 +229,100 @@ App.Medicine.Modification.eyeSelector = function(entity) {
  * @param {object} params
  * @param {number|string} [params.primaryEarColor=0]
  * @param {string} [params.secondaryEarColor=""]
- * @returns {JQuery<HTMLElement>}
+ * @param {Boolean} [params.cheat=false]
+ * @returns {HTMLElement}
  */
-App.Medicine.Salon.ears = function(slave, {primaryEarColor = 0, secondaryEarColor = ""} = {}) {
-	const frag = new DocumentFragment();
+App.Medicine.Salon.ears = function(slave, {primaryEarColor = 0, secondaryEarColor = "", cheat = false} = {}) {
 	let updatePrimary = (newVal) => { primaryEarColor = newVal; apply(); };
 	let updateSecondary = (newVal) => { secondaryEarColor = newVal; apply(); };
+	const container = document.createElement("div");
+	container.id = "salon-ears";
+	container.append(content());
+	return container;
 
-	if (slave.earT !== "none" && slave.earTColor !== "hairless") {
-		const {His, his} = getPronouns(slave);
-		let div;
-		let p;
-		frag.append(`${His} fluffy ears are ${slave.earTColor}.`);
-
-		div = document.createElement("div");
-		div.classList.add("choices");
-		if (slave.earTColor !== slave.hColor) {
-			div.append(
-				App.UI.DOM.link(
-					"Match current hair",
-					() => {
-						slave.earTColor = slave.hColor;
-						App.Art.refreshSlaveArt(slave, 3, "art-frame");
-						apply();
-					}
-				)
-			);
-			div.append(" or ");
-			App.UI.DOM.appendNewElement("span", div, "choose a new one: ", "note");
-		} else {
-			App.UI.DOM.appendNewElement("span", div, `Choose a dye color before dyeing ${his} ears:`, "note");
-		}
-		frag.append(div);
-
-		div = document.createElement("div");
-		div.classList.add("choices");
-		div.append(`Colors:`);
-		div.append(createList(App.Medicine.Modification.Color.Primary, updatePrimary));
-		frag.append(div);
-
-		div = document.createElement("div");
-		div.classList.add("choices");
-		div.append(`Highlights:`);
-		div.append(createList(App.Medicine.Modification.Color.Secondary, updateSecondary));
-		frag.append(div);
-
-		if (primaryEarColor !== 0) {
-			p = document.createElement("p");
-			p.classList.add("choices");
-			p.append(
-				App.UI.DOM.link(
-					`Color ${his} ears`,
-					() => {
-						slave.earTColor = (primaryEarColor + secondaryEarColor);
-						App.Art.refreshSlaveArt(slave, 3, "art-frame");
-						cashX(forceNeg(V.modCost), "slaveMod", slave);
-						App.Medicine.Salon.ears(slave); // discard selections after locking them in.
-					}
-				)
-			);
-			p.append(` ${primaryEarColor}${secondaryEarColor} now?`);
-			frag.append(p);
-		}
-	}
-	return jQuery("#salon-ears").empty().append(frag);
-
-	function createList(array, method) {
-		const links = [];
-		for (const item of array) {
-			const title = item.title || capFirstChar(item.value);
-			links.push(
-				App.UI.DOM.link(
-					title,
-					() => method(item.value)
-				)
-			);
-		}
-		return App.UI.DOM.generateLinksStrip(links);
-	}
-	function apply() {
-		App.Art.refreshSlaveArt(slave, 3, "art-frame");
-		App.Medicine.Salon.ears(
-			slave,
-			{
-				primaryEarColor: primaryEarColor,
-				secondaryEarColor: secondaryEarColor,
-			}
-		);
-	}
-};
-
-/**
- * Update hair in salon
- * @param {App.Entity.SlaveState} slave
- * @param {object} params
- * @param {number|string} [params.primaryHairColor]
- * @param {string} [params.secondaryHairColor]
- * @returns {JQuery<HTMLElement>}
- */
-App.Medicine.Salon.hair = function(slave, {primaryHairColor = 0, secondaryHairColor = ""} = {}) {
-	const frag = new DocumentFragment();
-	let updatePrimary = (newVal) => { primaryHairColor = newVal.value; apply(); };
-	let updateSecondary = (newVal) => { secondaryHairColor = newVal.value; apply(); };
-	const {His, his, He, him} = getPronouns(slave);
-
-	if (slave.bald !== 1) {
-		frag.append(hairDye());
-		frag.append(hairStyle());
-		frag.append(hairLength());
-		frag.append(hairMaint());
-	} else {
-		// Bald
-		if (slave.hStyle === "bald") {
-			frag.append(`${He} is completely bald. `);
-		} else {
-			frag.append(wigDye());
-		}
-		frag.append(wigStyle());
-		frag.append(wigLength());
-	}
-	return jQuery("#salon-hair").empty().append(frag);
-
-	function hairDye() {
-		const frag = new DocumentFragment();
-		let div;
-		let p;
-		frag.append(`${His} hair is ${slave.hColor}.`);
-
-		div = document.createElement("div");
-		div.classList.add("choices");
-		if (slave.origHColor !== slave.hColor) {
-			div.append(
-				App.UI.DOM.link(
-					"Restore natural color",
-					() => {
-						slave.hColor = slave.origHColor;
-						App.Art.refreshSlaveArt(slave, 3, "art-frame");
-						cashX(forceNeg(V.modCost), "slaveMod", slave);
-						apply();
-					}
-				)
-			);
-			div.append(" or ");
-			App.UI.DOM.appendNewElement("span", div, "choose a new one: ", "note");
-		} else {
-			App.UI.DOM.appendNewElement("span", div, `Choose a dye color before dyeing ${his} hair:`, "note");
-		}
-		frag.append(div);
-
-		div = document.createElement("div");
-		div.classList.add("choices");
-		div.append(`Colors:`);
-		div.append(createList(App.Medicine.Modification.Color.Primary, updatePrimary));
-		frag.append(div);
-
-		div = document.createElement("div");
-		div.classList.add("choices");
-		div.append(`Highlights:`);
-		div.append(createList(App.Medicine.Modification.Color.Secondary, updateSecondary));
-		frag.append(div);
-
-		if (primaryHairColor !== 0) {
-			p = document.createElement("p");
-			p.classList.add("choices");
-			p.append(
-				App.UI.DOM.link(
-					`Color ${his} hair`,
-					() => {
-						slave.hColor = (primaryHairColor + secondaryHairColor);
-						App.Art.refreshSlaveArt(slave, 3, "art-frame");
-						cashX(forceNeg(V.modCost), "slaveMod", slave);
-						App.Medicine.Salon.hair(slave); // discard selections after locking them in.
-					}
-				)
-			);
-			p.append(` ${primaryHairColor}${secondaryHairColor} now?`);
-			frag.append(p);
-		}
-		return frag;
-	}
-
-	function hairStyle() {
-		const frag = new DocumentFragment();
-		let div;
-		let method;
-		div = document.createElement("div");
-		if (slave.hStyle !== "shaved") {
-			div.append(`${His} ${slave.hStyle} hair is ${lengthToEitherUnit(slave.hLength)} long. `);
-		} else {
-			div.append(`${His} hair is shaved smooth. `);
-		}
-		App.UI.DOM.appendNewElement("span", div, `General hairstyles will conform to hair length and clothing choices.`, "note");
-		frag.append(div);
-
-		// Normal styles
-		div = document.createElement("div");
-		div.classList.add("choices");
-		method = (newVal) => {
-			slave.hStyle = newVal.value;
-			cashX(forceNeg(V.modCost), "slaveMod", slave);
-			apply();
-		};
-		if (slave.hLength > 1) {
-			div.append(`Style ${his} hair:`);
-			div.append(createList(App.Medicine.Modification.hairStyles.Normal, method));
-		} else {
-			App.UI.DOM.appendNewElement("span", div, `${His} hair is too short to style meaningfully`, "note");
-		}
-		frag.append(div);
-
-		// Short styles, includes cutting
-		div = document.createElement("div");
-		div.classList.add("choices");
-		method = (newVal) => {
-			slave.hStyle = newVal.value;
-			slave.hLength = newVal.hLength;
-			cashX(forceNeg(V.modCost), "slaveMod", slave);
-			apply();
-		};
-		if (slave.hLength > 1) {
-			div.append(`Cut and style ${his} hair:`);
-			div.append(createList(App.Medicine.Modification.hairStyles.Cut, method));
-		}
-		frag.append(div);
-
-		return frag;
-	}
-
-	function hairLength() {
+	function content() {
 		const frag = new DocumentFragment();
-		let div = document.createElement("div");
-		div.classList.add("choices");
-		let method = (newVal) => {
-			if (newVal.hasOwnProperty("onApplication")) {
-				newVal.onApplication(slave);
+		if (slave.earT !== "none" && slave.earTColor !== "hairless") {
+			const {His, his} = getPronouns(slave);
+			let div;
+			let p;
+			frag.append(`${His} fluffy ears are ${slave.earTColor}.`);
+
+			div = document.createElement("div");
+			div.classList.add("choices");
+			if (slave.earTColor !== slave.hColor) {
+				div.append(
+					App.UI.DOM.link(
+						"Match current hair",
+						() => {
+							slave.earTColor = slave.hColor;
+							App.Art.refreshSlaveArt(slave, 3, "art-frame");
+							apply();
+						}
+					)
+				);
+				div.append(" or ");
+				App.UI.DOM.appendNewElement("span", div, "choose a new one: ", "note");
+			} else {
+				App.UI.DOM.appendNewElement("span", div, `Choose a dye color before dyeing ${his} ears:`, "note");
 			}
-			if (newVal.hasOwnProperty("hLength")) {
-				slave.hLength = newVal.hLength;
+			frag.append(div);
+
+			div = document.createElement("div");
+			div.classList.add("choices");
+			div.append(`Colors:`);
+			div.append(createList(App.Medicine.Modification.Color.Primary, updatePrimary));
+			frag.append(div);
+
+			div = document.createElement("div");
+			div.classList.add("choices");
+			div.append(`Highlights:`);
+			div.append(createList(App.Medicine.Modification.Color.Secondary, updateSecondary));
+			frag.append(div);
+
+			if (primaryEarColor !== 0) {
+				p = document.createElement("p");
+				p.classList.add("choices");
+				p.append(
+					App.UI.DOM.link(
+						`Color ${his} ears`,
+						() => {
+							slave.earTColor = (primaryEarColor + secondaryEarColor);
+							App.Art.refreshSlaveArt(slave, 3, "art-frame");
+							if (!cheat) {
+								cashX(forceNeg(V.modCost), "slaveMod", slave);
+							}
+							App.Medicine.Salon.ears(slave); // discard selections after locking them in.
+						}
+					)
+				);
+				p.append(` ${primaryEarColor}${secondaryEarColor} now?`);
+				frag.append(p);
 			}
-			apply();
-		};
-		const oldHLength = (V.showInches === 2) ? Math.round(slave.hLength / 2.54) : slave.hLength;
-
-		App.UI.DOM.appendNewElement("span", div, `Cut or lengthen ${his} hair:`);
-		div.append(createList(App.Medicine.Modification.hairStyles.Length, method));
-		div.append(" | Custom length: ");
-		div.append(
-			App.UI.DOM.makeTextBox(
-				oldHLength,
-				v => {
-					v = Math.max(v, 0); // Positive hair length only
-					// If they entered "inches," convert
-					if (V.showInches === 2) {
-						v = Math.round(v * 2.54);
-					}
-					slave.hLength = v;
-					cashX(forceNeg(V.modCost), "slaveMod", slave);
-					apply();
-				},
-				true
-			)
-		);
-		if (V.showInches === 1) {
-			div.append(`cm (${cmToInchString(slave.hLength)})`);
-		} else if (V.showInches === 2) {
-			div.append(`inches`);
 		}
-
-		frag.append(div);
-
-		return frag;
-	}
-
-	function hairMaint() {
-		let div = document.createElement("div");
-		div.classList.add("choices");
-		div.append(`Have ${his} hair carefully maintained at its current length: `);
-		let haircuts;
-		let text;
-		if (slave.haircuts === 1) {
-			text = "Cease maintenance";
-			haircuts = 0;
-		} else {
-			text = "Begin maintenance";
-			haircuts = 1;
-		}
-		div.append(
-			App.UI.DOM.link(
-				text,
-				() => {
-					slave.haircuts = haircuts;
-					apply();
-				}
-			)
-		);
-		return div;
-	}
-
-	function wigDye() {
-		const frag = new DocumentFragment();
-		let div;
-		let p;
-		frag.append(`${His} current wig is ${slave.hColor}. `);
-
-		if (slave.hStyle !== "bald") {
-			frag.append(
-				App.UI.DOM.link(
-					"Remove wig",
-					() => {
-						slave.hStyle = "bald";
-						slave.hLength = 0;
-						// I'm not going to charge you for taking off a fucking wig.
-						apply();
-					}
-				)
-			);
-			frag.append(" or ");
-			App.UI.DOM.appendNewElement("span", frag, "choose a new one: ", "note");
-		} else {
-			App.UI.DOM.appendNewElement("span", frag, `Choose a wig color:`, "note");
-		}
-
-		div = document.createElement("div");
-		div.classList.add("choices");
-		div.append(`Colors:`);
-		div.append(createList(App.Medicine.Modification.Color.Primary, updatePrimary));
-		frag.append(div);
-
-		div = document.createElement("div");
-		div.classList.add("choices");
-		div.append(`Highlights:`);
-		div.append(createList(App.Medicine.Modification.Color.Secondary, updateSecondary));
-		frag.append(div);
-
-		if (primaryHairColor !== 0) {
-			p = document.createElement("p");
-			p.classList.add("choices");
-			p.append(
-				App.UI.DOM.link(
-					`Change`,
-					() => {
-						slave.earTColor = (primaryHairColor + secondaryHairColor);
-						App.Art.refreshSlaveArt(slave, 3, "art-frame");
-						cashX(forceNeg(V.modCost), "slaveMod", slave);
-						App.Medicine.Salon.hair(slave); // discard selections after locking them in.
-					}
-				)
-			);
-			p.append(` ${his} wig color to ${primaryHairColor}${secondaryHairColor} now?`);
-			frag.append(p);
-		}
-		return frag;
-	}
-
-	function wigLength() {
-		const frag = new DocumentFragment();
-		if (slave.hStyle === "bald") {
-			return frag;
-		}
-		let div = document.createElement("div");
-		div.classList.add("choices");
-		const array = [];
-		for (const number of [10, 30, 60, 90, 120, 150]) {
-			const obj = {};
-			obj.title = lengthToEitherUnit(number);
-			obj.hLength = number;
-			array.push(obj);
-		}
-		let method = (newVal) => {
-			slave.hLength = newVal.hLength;
-			apply();
-		};
-		const oldHLength = (V.showInches === 2) ? Math.round(slave.hLength / 2.54) : slave.hLength;
-		App.UI.DOM.appendNewElement("span", div, `Set wig length to:`, "choices");
-		div.append(createList(array, method));
-		div.append(" | Custom length: ");
-		div.append(
-			App.UI.DOM.makeTextBox(
-				oldHLength,
-				v => {
-					v = Math.max(v, 10); // Wigs must be at least 10 cm
-					// If they entered "inches," convert
-					if (V.showInches === 2) {
-						v = Math.round(v * 2.54);
-					}
-					slave.hLength = v;
-					cashX(forceNeg(V.modCost), "slaveMod", slave);
-					apply();
-				},
-				true
-			)
-		);
-		if (V.showInches === 1) {
-			div.append(`cm (${cmToInchString(slave.hLength)})`);
-		} else if (V.showInches === 2) {
-			div.append(`inches`);
-		}
-
-		frag.append(div);
-
-		return frag;
-	}
-
-	function wigStyle() {
-		const frag = new DocumentFragment();
-		let div = document.createElement("div");
-		div.classList.add("choices");
-		const method = (newVal) => {
-			slave.hStyle = newVal.value;
-			cashX(forceNeg(V.modCost), "slaveMod", slave);
-			apply();
-		};
-
-		if (slave.hStyle !== "bald") {
-			frag.append(`${His} ${slave.hStyle} wig is ${lengthToEitherUnit(slave.hLength)} long. `);
-		} else {
-			frag.append(`${He} is not wearing a wig. `);
-		}
-		App.UI.DOM.appendNewElement("span", frag, `General hairstyles will conform to hair length and clothing choices.`, "note");
-
-		div = document.createElement("div");
-		div.classList.add("choices");
-		if (slave.hStyle === "bald") {
-			div.append(`Give ${him} a wig:`);
-		} else {
-			div.append(`Set wig style:`);
-		}
-		div.append(createList(App.Medicine.Modification.hairStyles.Normal, method));
-		frag.append(div);
 		return frag;
 	}
 
 	function createList(array, method) {
 		const links = [];
 		for (const item of array) {
-			if (item.hasOwnProperty("requirements")) {
-				if (item.requirements(slave) === false) {
-					continue;
-				}
-			}
 			const title = item.title || capFirstChar(item.value);
 			links.push(
 				App.UI.DOM.link(
 					title,
-					() => method(item)
+					() => method(item.value)
 				)
 			);
 		}
 		return App.UI.DOM.generateLinksStrip(links);
 	}
-
 	function apply() {
 		App.Art.refreshSlaveArt(slave, 3, "art-frame");
-		App.Medicine.Salon.hair(
+		App.Medicine.Salon.ears(
 			slave,
 			{
-				primaryHairColor: primaryHairColor,
-				secondaryHairColor: secondaryHairColor,
+				primaryEarColor: primaryEarColor,
+				secondaryEarColor: secondaryEarColor,
 			}
 		);
 	}
@@ -694,9 +334,10 @@ App.Medicine.Salon.hair = function(slave, {primaryHairColor = 0, secondaryHairCo
  * @param {object} params
  * @param {number|string} [params.primaryTailColor]
  * @param {string} [params.secondaryTailColor]
+ * @param {Boolean} [params.cheat]
  * @returns {JQuery<HTMLElement>}
  */
-App.Medicine.Salon.tail = function(slave, {primaryTailColor = 0, secondaryTailColor = ""} = {}) {
+App.Medicine.Salon.tail = function(slave, {primaryTailColor = 0, secondaryTailColor = "", cheat = false} = {}) {
 	const frag = new DocumentFragment();
 	let updatePrimary = (newVal) => { primaryTailColor = newVal.value; apply(); };
 	let updateSecondary = (newVal) => { secondaryTailColor = newVal.value; apply(); };
@@ -723,7 +364,9 @@ App.Medicine.Salon.tail = function(slave, {primaryTailColor = 0, secondaryTailCo
 					() => {
 						slave.tailColor = slave.hColor;
 						App.Art.refreshSlaveArt(slave, 3, "art-frame");
-						cashX(forceNeg(V.modCost), "slaveMod", slave);
+						if (!cheat) {
+							cashX(forceNeg(V.modCost), "slaveMod", slave);
+						}
 						apply();
 					}
 				)
@@ -756,7 +399,9 @@ App.Medicine.Salon.tail = function(slave, {primaryTailColor = 0, secondaryTailCo
 					() => {
 						slave.tailColor = (primaryTailColor + secondaryTailColor);
 						App.Art.refreshSlaveArt(slave, 3, "art-frame");
-						cashX(forceNeg(V.modCost), "slaveMod", slave);
+						if (!cheat) {
+							cashX(forceNeg(V.modCost), "slaveMod", slave);
+						}
 						App.Medicine.Salon.tail(slave); // discard selections after locking them in.
 					}
 				)
diff --git a/src/js/utilsFC.js b/src/js/utilsFC.js
index febd84b8831a2472c3d0b5fcd362fba36b1013ac..779c965102fff7ef801041666187948cecb7d077 100644
--- a/src/js/utilsFC.js
+++ b/src/js/utilsFC.js
@@ -2577,7 +2577,7 @@ globalThis.randomRaceHair = function(raceName) {
  * @returns {number}
  */
 globalThis.skinToneLevel = function(skinTone) {
-	if (!setup.naturalSkins.includes(skinTone)) {
+	if (!App.Medicine.Modification.naturalSkins.includes(skinTone)) {
 		return undefined;
 	}
 	const skinToMelanin = {
@@ -2617,7 +2617,7 @@ globalThis.skinToneLevel = function(skinTone) {
  * @returns {string}
  */
 globalThis.changeSkinTone = function(skin, value) {
-	if (!setup.naturalSkins.includes(skin)) {
+	if (!App.Medicine.Modification.naturalSkins.includes(skin)) {
 		return skin;
 	}
 	const skinToMelanin = {
@@ -2670,7 +2670,7 @@ globalThis.changeSkinTone = function(skin, value) {
  * @returns {number}
  */
 globalThis.nippleColorLevel = function(color) {
-	if (!setup.naturalNippleColors.includes(color)) {
+	if (!App.Medicine.Modification.naturalNippleColors.includes(color)) {
 		return undefined;
 	}
 	const nippleColor = {
diff --git a/src/markets/specificMarkets/customSlaveMarket.js b/src/markets/specificMarkets/customSlaveMarket.js
index 16c09e908488c3e92ab4e2bfc453ea1bd37cc6c1..5838770da2fdae91ad4f50d3a54eb3143e8c507f 100644
--- a/src/markets/specificMarkets/customSlaveMarket.js
+++ b/src/markets/specificMarkets/customSlaveMarket.js
@@ -349,7 +349,7 @@ App.Markets["Custom Slave"] = function() {
 		const choices = new Map([
 			["left natural", "Left natural"]
 		]);
-		for (const skin of App.Data.misc.naturalSkins) {
+		for (const skin of App.Medicine.Modification.naturalSkins) {
 			choices.set(skin, capFirstChar(skin));
 		}
 
diff --git a/src/npc/interaction/fAbuse.tw b/src/npc/interaction/fAbuse.tw
index bc3ca37031738e907fb72e9831c5b55700323280..266ac82a3d89fda3428ec704e5af1ec552912de9 100644
--- a/src/npc/interaction/fAbuse.tw
+++ b/src/npc/interaction/fAbuse.tw
@@ -362,7 +362,7 @@ from your victim.
 	<</if>>
 <</if>>
 
-<<if (setup.dyedSkins.includes(getSlave($AS).skin))>>
+<<if (App.Medicine.Modification.dyedSkins.includes(getSlave($AS).skin))>>
 	$His <<= getSlave($AS).skin>><<if $seeRace == 1>>, <<= getSlave($AS).race>><</if>> ass barely shows the spanking.
 <<elseif (skinToneLevel(getSlave($AS)) < 5)>>
 	$His <<= getSlave($AS).skin>><<if $seeRace == 1>>, <<= getSlave($AS).race>><</if>> ass shows the spanking extremely well.
diff --git a/src/npc/startingGirls/editFamily.js b/src/npc/startingGirls/editFamily.js
index 0717927c390b7870290117a5294e10f36c3b26e1..45b2e9b23ba66754aa22d8f0cbcf3bb2b6120ff3 100644
--- a/src/npc/startingGirls/editFamily.js
+++ b/src/npc/startingGirls/editFamily.js
@@ -1,38 +1,37 @@
 App.Intro.editFamily = function(slave) {
 	const el = new DocumentFragment();
 	const _allowPCFamily = (V.freshPC === 1 || V.saveImported === 0);
-	const {His} = getPronouns(slave);
+	const {His, his} = getPronouns(slave);
 
 	// Checks to make sure a slave is not the active slave's parent.
 	const isNotMom = (s) => ((s.mother !== slave.mother) || (slave.mother === 0));
 	const isNotDad = (s) => ((s.father !== slave.father) || (slave.father === 0));
 
 	const editFamily = makeElWithID("edit-family");
-
-	const familyTable = makeElWithID("family-table");
-	familyTable.append(summary());
-	familyTable.append(makeElWithID("dont-be-dumb"));
-	familyTable.append(mother());
-	if (slave.mother) {
-		familyTable.append(sameMotherAs());
-	}
-	familyTable.append(father());
-	if (slave.father) {
-		familyTable.append(sameFatherAs());
-	}
-	familyTable.append(motherOfTheChildren());
-	familyTable.append(fatherOfTheChildren());
-	if (_allowPCFamily) {
-		familyTable.append(resetAllRelativesOfPC());
-	}
-	editFamily.append(familyTable);
+	editFamily.append(makeFamilyTable());
 	editFamily.append(makeElWithID("family-tree"));
 	el.append(editFamily);
 
 	return el;
 
+	function makeFamilyTable() {
+		const familyTable = makeElWithID("family-table");
+		familyTable.append(summary());
+		familyTable.append(makeElWithID("dont-be-dumb"));
+		familyTable.append(mother());
+		familyTable.append(sameMotherAs());
+		familyTable.append(father());
+		familyTable.append(sameFatherAs());
+		familyTable.append(motherOfTheChildren());
+		familyTable.append(fatherOfTheChildren());
+		if (_allowPCFamily) {
+			familyTable.append(resetAllRelativesOfPC());
+		}
+		return familyTable;
+	}
+
 	function summary() {
-		const familySummary = makeElWithID("familySummary", "p");
+		const familySummary = App.UI.DOM.makeElement("p");
 		$(familySummary).append(App.Desc.family(slave));
 		return familySummary;
 	}
@@ -41,11 +40,7 @@ App.Intro.editFamily = function(slave) {
 		const div = document.createElement("div");
 		const linkArray = [];
 
-		div.append(`${slave.slaveName}'s mother is `);
-
-		const nameEl = makeElWithID("motherName", "span");
-		nameEl.append(parentName("mother"), " ");
-		div.append(nameEl);
+		div.append(`${slave.slaveName}'s mother is ${parentName("mother")}. `);
 
 		linkArray.push(
 			App.UI.DOM.link(
@@ -92,11 +87,7 @@ App.Intro.editFamily = function(slave) {
 		const div = document.createElement("div");
 		const linkArray = [];
 
-		div.append(`${slave.slaveName}'s father is `);
-
-		const nameEl = makeElWithID("fatherName", "span");
-		nameEl.append(parentName("father"), " ");
-		div.append(nameEl);
+		div.append(`${slave.slaveName}'s father is ${parentName("father")}. `);
 
 		linkArray.push(
 			App.UI.DOM.link(
@@ -143,11 +134,13 @@ App.Intro.editFamily = function(slave) {
 		const div = document.createElement("div");
 		const linkArray = [];
 
-		div.append(`${His} mom, ${getSlave(slave.mother).slaveName}, is also the mother of: `);
+		if (slave.mother === -1) {
+			div.append(`You are ${his} mother, and also the mother of: `);
+		} else {
+			div.append(`${His} mom, ${parentName("mother")}, is also the mother of: `);
+		}
 
-		const nameEl = makeElWithID("sameMotherNames", "span");
-		nameEl.append(App.StartingGirls.listOfSlavesWithParent('mother', slave.mother), " ");
-		div.append(nameEl);
+		div.append(App.StartingGirls.listOfSlavesWithParent('mother', slave.mother), " ");
 
 		linkArray.push(
 			App.UI.DOM.link(
@@ -205,12 +198,13 @@ App.Intro.editFamily = function(slave) {
 		const div = document.createElement("div");
 		const linkArray = [];
 
-		div.append(`${His} dad, ${getSlave(slave.father).slaveName}, is also the father of: `);
-
-		const nameEl = makeElWithID("sameFatherNames", "span");
-		nameEl.append(App.StartingGirls.listOfSlavesWithParent('father', slave.father), " ");
-		div.append(nameEl);
+		if (slave.father === -1) {
+			div.append(`You are ${his} father, and also the father of: `);
+		} else {
+			div.append(`${His} dad, ${parentName("father")}, is also the father of: `);
+		}
 
+		div.append(App.StartingGirls.listOfSlavesWithParent('father', slave.father), " ");
 
 		linkArray.push(
 			App.UI.DOM.link(
@@ -329,13 +323,11 @@ App.Intro.editFamily = function(slave) {
 
 	function motheredNames() {
 		const children = App.StartingGirls.listOfSlavesWithParent("mother", slave.ID);
-		const nameEl = makeElWithID("motheredNames", "span");
 		if (children) {
-			nameEl.append(`${slave.slaveName} is the mother of these children: ${children}. Add: `);
+			return `${slave.slaveName} is the mother of these children: ${children}. Add: `;
 		} else {
-			nameEl.append(`${slave.slaveName} is not a mother to any children yet. Add: `);
+			return `${slave.slaveName} is not a mother to any children yet. Add: `;
 		}
-		return nameEl;
 	}
 
 	function fatherOfTheChildren() {
@@ -396,13 +388,11 @@ App.Intro.editFamily = function(slave) {
 
 	function fatheredNames() {
 		const children = App.StartingGirls.listOfSlavesWithParent("father", slave.ID);
-		const nameEl = makeElWithID("fatheredNames", "span");
 		if (children) {
-			nameEl.append(`${slave.slaveName} is the father of these children: ${children}. Add: `);
+			return `${slave.slaveName} is the father of these children: ${children}. Add: `;
 		} else {
-			nameEl.append(`${slave.slaveName} is not a father to any children yet. Add: `);
+			return `${slave.slaveName} is not a father to any children yet. Add: `;
 		}
-		return nameEl;
 	}
 
 	function resetAllRelativesOfPC() {
@@ -477,19 +467,13 @@ App.Intro.editFamily = function(slave) {
 			return `You`;
 		} else {
 			const relObj = getSlave(slave[rel]);
-			return relObj ? relObj.slaveName : "unknown to you.";
+			return relObj ? relObj.slaveName : "unknown to you";
 		}
 	}
 
 	function refresh() {
+		jQuery('#family-table').replaceWith(makeFamilyTable);
 		jQuery('#dont-be-dumb').empty().append(App.UI.DOM.makeElement("div", "You will break things by making impossible relations such as being your own father. If you do this, clearing all PC relations will fix it. Probably.", "note"));
-		jQuery('#fatheredNames').empty().append(fatheredNames());
-		jQuery('#motheredNames').empty().append(motheredNames());
-		jQuery('#familySummary').empty().append(App.Desc.family(slave));
-		jQuery('#motherName').empty().append(parentName("mother"), " ");
-		jQuery('#fatherName').empty().append(parentName("father"), " ");
-		jQuery('#sameMotherNames').empty().append(App.StartingGirls.listOfSlavesWithParent("mother", slave.mother), " ");
-		jQuery('#sameFatherNames').empty().append(App.StartingGirls.listOfSlavesWithParent("father", slave.father), " ");
 		App.StartingGirls.uncommittedFamilyTree(slave);
 	}
 };
diff --git a/src/npc/startingGirls/startingGirls.js b/src/npc/startingGirls/startingGirls.js
index 15c12bda60d42096c1db238afecad3d0b9e7c5c5..8a03b57faeb3de2c96e13845758dcdf4de0288b3 100644
--- a/src/npc/startingGirls/startingGirls.js
+++ b/src/npc/startingGirls/startingGirls.js
@@ -37,11 +37,6 @@ App.StartingGirls.cleanup = function(slave) {
 
 	resetEyeColor(slave, "both");
 	slave.origRace = slave.race;
-	slave.skin = slave.origSkin;
-	slave.hColor = slave.origHColor;
-	slave.eyebrowHColor = slave.hColor;
-	slave.pubicHColor = slave.hColor;
-	slave.underArmHColor = slave.hColor;
 
 	if (slave.balls === 0) {
 		slave.scrotum = 0;
diff --git a/src/npc/startingGirls/startingGirls.tw b/src/npc/startingGirls/startingGirls.tw
index 0cabf80ab677e03e1d5b99e9bd99ddbb74e625a8..eb8a930e046c3575c14da7388c7e367ae4a7892d 100644
--- a/src/npc/startingGirls/startingGirls.tw
+++ b/src/npc/startingGirls/startingGirls.tw
@@ -206,6 +206,7 @@
 	<button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'Skills')" id="tab Skills">Skills</button>
 	<button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'Family', App.StartingGirls.uncommittedFamilyTree(V.activeSlave))" id="tab Family">Family</button>
 	<button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'body-mods')" id="tab body-mods">Body Mods</button>
+	<button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'salon')" id="tab salon">Salon</button>
 	<button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'Customization')" id="tab Customization">Customization</button>
 	<<if $cash >= _slaveCost>>
 		<button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'assignRemove')" id="tab assignRemove">Finalize</button>
@@ -324,7 +325,9 @@
 	<</if>>
 
 	<<run _options.addOption("$His nationality is", "nationality", $activeSlave).showTextBox()
-	.addValueList(Object.keys(App.Data.SlaveSummary.short.nationality))>>
+	.addValueList(Object.keys(App.Data.SlaveSummary.short.nationality))
+	.pulldown()
+	>>
 
 	<<if $seeRace == 1>>
 		<<run _options.addOption("$His ethnicity is", "race", $activeSlave).showTextBox()
@@ -333,14 +336,6 @@
 			["Amerindian", "amerindian"], ["Pacific Islander", "pacific islander"], ["Malay", "malay"], ["Mixed Race", "mixed race"]])>>
 	<</if>>
 
-	<<run _options.addOption("$His skin color is", "origSkin", $activeSlave).showTextBox()
-	.addValueList([["Pure White", "pure white"], ["Ivory", "ivory"], ["White", "white"], ["Extremely Pale", "extremely pale"],
-			["Very Pale", "very pale"], ["Pale", "pale"], ["Extremely Fair", "extremely fair"], ["Very Fair", "very fair"],
-			["Fair", "fair"], ["Light", "light"], ["Light Olive", "light olive"], ["Tan", "tan"], ["Olive", "olive"], ["Bronze", "bronze"],
-			["Dark Olive", "dark olive"], ["Dark", "dark"], ["Light Beige", "light beige"], ["Beige", "beige"],
-			["Dark Beige", "dark beige"], ["Light Brown", "light brown"], ["Brown", "brown"], ["Dark Brown", "dark brown"],
-			["Black", "black"], ["Ebony", "ebony"], ["Pure Black", "pure black"]])>>
-
 	<<run _options.addOption("Intelligence", "intelligence", $activeSlave)
 	.addValueList([["Moronic", -100], ["Very stupid", -60], ["Stupid", -30], ["Average", 0], ["Smart", 30], ["Very smart", 60], ["Brilliant", 100]])>>
 
@@ -468,6 +463,16 @@
 	.addRange(6000, 6000, "<=", "Monstrous")
 	.addRange(8000, 6000, ">", "Science Experiment")>>
 
+	<<run _options.addOption("Natural shape", "boobShape", $activeSlave)
+	.addValueList([
+		["Normal", "normal"],
+		["Perky", "perky"],
+		["Torpedo-shaped", "torpedo-shaped"],
+		["Wide-set", "wide-set"],
+		["Downward-facing", "downward-facing"],
+		["Saggy", "saggy"]
+	])>>
+
 	<<run _options.addOption("Lactation", "lactation", $activeSlave)
 	.addValue("Artificial", 2, () => V.activeSlave.lactationDuration = 2)
 	.addValue("Natural", 1, () => V.activeSlave.lactationDuration = 2)
@@ -491,6 +496,22 @@
 	<<run _options.addOption("Anus", "anus", $activeSlave)
 	.addValueList([["Virgin", 0], ["Normal", 1], ["Veteran", 2], ["Gaping", 3]])>>
 
+	<<if $activeSlave.anus > 0>>
+		<<if $activeSlave.analArea <= $activeSlave.anus>>
+			<<set _comment = "Recently stretched to current size.">>"
+		<<elseif $activeSlave.analArea - $activeSlave.anus == 1>>
+			<<set _comment = "Used to current size."">>
+		<<else>>
+			<<set _comment = "Very broad."">>
+		<</if>>
+		<<run _options.addOption("External anus appearance", "anus", $activeSlave)
+		.addValueList([
+			["Recently stretched", $activeSlave.analArea = $activeSlave.anus],
+			["Used to current size", $activeSlave.analArea = $activeSlave.anus+1],
+			["Very broad", $activeSlave.analArea = $activeSlave.anus+2],
+		]).addComment(_comment)>>
+	<</if>>
+
 	<<run _options.addOption("Vagina", "vagina", $activeSlave)
 	.addValue("No vagina", -1, () => {
 		V.activeSlave.preg = 0;
@@ -904,6 +925,12 @@
 	</div>
 </div>
 
+<div id="salon" class="tab-content">
+	<div class="content">
+		<<includeDOM App.UI.salon($activeSlave, true)>>
+	</div>
+</div>
+
 <div id="Customization" class="tab-content">
 	<div class="content">
 
@@ -914,9 +941,6 @@
 	<br>''Career:'' <span id="career-textbox"><<textbox "$activeSlave.career" $activeSlave.career "Starting Girls">></span>
 	<span id="careers"></span>
 	<script>jQuery('#careers').empty().append(App.StartingGirls.career(V.activeSlave));</script>
-	<br>''Hair color:'' <<textbox "$activeSlave.origHColor" $activeSlave.origHColor "Starting Girls">> //This will also set eyebrow, pubic, and underarm hair color.//
-	<br>''Hair Style:'' <<textbox "$activeSlave.hStyle" $activeSlave.hStyle "Starting Girls">>
-	<br>''Hair Length:'' <<textbox "$activeSlave.hLength" $activeSlave.hLength "Starting Girls">>
 	<br>''Eye color:'' <<textbox "$activeSlave.eye.origColor" $activeSlave.eye.origColor "Starting Girls">>
 	<<if def $pupil_temp>>
 		<<set $activeSlave.eye.left.pupil = $pupil_temp, $activeSlave.eye.right.pupil = $pupil_temp, delete $pupil_temp>>
@@ -926,7 +950,6 @@
 		<<set $activeSlave.eye.left.sclera = $sclerae_temp, $activeSlave.eye.right.sclera = $sclerae_temp, delete $sclerae_temp>>
 	<</if>>
 	<br>''Sclera color:'' <<textbox "$sclerae_temp" $activeSlave.eye.left.sclera "Starting Girls">>
-	<br>Custom tattoo: <<textbox "$activeSlave.custom.tattoo" $activeSlave.custom.tattoo "Starting Girls">> //Use complete, capitalized and punctuated sentences.//
 	<br>Custom origin story: <<textbox "$activeSlave.origin" $activeSlave.origin "Starting Girls">> //Use complete, capitalized and punctuated sentences.//
 	<br>Origin override:
 	<<if $originOverride == 1>>
@@ -940,79 +963,6 @@
 	<br>Custom description: <<textbox "$activeSlave.custom.desc" $activeSlave.custom.desc "Starting Girls">> //Use complete, capitalized and punctuated sentences.//
 	<br>Custom label: <<textbox "$activeSlave.custom.label" $activeSlave.custom.label "Starting Girls">> //Use a short phrase.//
 
-	<br><br>
-	''Eyebrow hair style:'' $activeSlave.eyebrowHStyle.
-	[[Natural|Starting Girls][$activeSlave.eyebrowHStyle = "natural"]]
-	| [[Curved|Starting Girls][$activeSlave.eyebrowHStyle = "curved"]]
-	| [[Elongated|Starting Girls][$activeSlave.eyebrowHStyle = "elongated"]]
-	| [[High-Arched|Starting Girls][$activeSlave.eyebrowHStyle = "high-arched"]]
-	| [[Rounded|Starting Girls][$activeSlave.eyebrowHStyle = "rounded"]]
-	| [[Shaved|Starting Girls][$activeSlave.eyebrowHStyle = "shaved"]]
-	| [[Shortened|Starting Girls][$activeSlave.eyebrowHStyle = "shortened"]]
-	| [[Slanted Inwards|Starting Girls][$activeSlave.eyebrowHStyle = "slanted inwards"]]
-	| [[Slanted Outwards|Starting Girls][$activeSlave.eyebrowHStyle = "slanted outwards"]]
-	| [[Straight|Starting Girls][$activeSlave.eyebrowHStyle = "straight"]]
-
-	<br>
-	''Eyebrow hair maintenance:'' $activeSlave.eyebrowFullness
-	[[Natural|Starting Girls][$activeSlave.eyebrowFullness = "natural"]]
-	| [[Bushy|Starting Girls][$activeSlave.eyebrowFullness = "bushy"]]
-	| [[Thick|Starting Girls][$activeSlave.eyebrowFullness = "thick"]]
-	| [[Tapered|Starting Girls][$activeSlave.eyebrowFullness = "tapered"]]
-	| [[Threaded|Starting Girls][$activeSlave.eyebrowFullness = "threaded"]]
-	| [[Thin|Starting Girls][$activeSlave.eyebrowFullness = "thin"]]
-	| [[Pencil-Thin|Starting Girls][$activeSlave.eyebrowFullness = "pencil-thin"]]
-
-	<br><br>
-	''Pubic hair maintenance:'' $activeSlave.pubicHStyle.
-	[[Waxed|Starting Girls][$activeSlave.pubicHStyle = "waxed"]]
-	| [[Naturally hairless|Starting Girls][$activeSlave.pubicHStyle = "hairless"]]
-	| [[Landing strip|Starting Girls][$activeSlave.pubicHStyle = "in a strip"]]
-	| [[Neat|Starting Girls][$activeSlave.pubicHStyle = "neat"]]
-	| [[Bushy in the front|Starting Girls][$activeSlave.pubicHStyle = "bushy in the front and neat in the rear"]]
-	| [[Bushy|Starting Girls][$activeSlave.pubicHStyle = "bushy"]]
-	| [[Very Bushy|Starting Girls][$activeSlave.pubicHStyle = "very bushy"]]
-
-	<br><br>
-	''Under arm hair maintenance:'' $activeSlave.underArmHStyle.
-	[[Waxed|Starting Girls][$activeSlave.underArmHStyle = "waxed"]]
-	| [[Naturally hairless|Starting Girls][$activeSlave.underArmHStyle = "hairless"]]
-	| [[Shaved|Starting Girls][$activeSlave.underArmHStyle = "shaved"]]
-	| [[Neat|Starting Girls][$activeSlave.underArmHStyle = "neat"]]
-	| [[Bushy|Starting Girls][$activeSlave.underArmHStyle = "bushy"]]
-
-	<br><br>
-	''Natural skin distinctiveness:'' $activeSlave.markings.
-	[[None|Starting Girls][$activeSlave.markings = "none"]]
-	| [[Freckles|Starting Girls][$activeSlave.markings = "freckles"]]
-	| [[Heavily freckled|Starting Girls][$activeSlave.markings = "heavily freckled"]]
-	| [[Beauty mark|Starting Girls][$activeSlave.markings = "beauty mark"]]
-	| [[Birthmark|Starting Girls][$activeSlave.markings = "birthmark"]]
-
-	<<if $activeSlave.anus > 0>>
-		<br><br>
-		''External appearance of anus:''
-		<<if $activeSlave.analArea <= $activeSlave.anus>>
-			Recently stretched to current size.
-		<<elseif $activeSlave.analArea - $activeSlave.anus == 1>>
-			Used to current size.
-		<<else>>
-			Very broad.
-		<</if>>
-		[[Recently stretched|Starting Girls][$activeSlave.analArea = $activeSlave.anus]]
-		| [[Used to current size|Starting Girls][$activeSlave.analArea = $activeSlave.anus+1]]
-		| [[Very broad|Starting Girls][$activeSlave.analArea = $activeSlave.anus+2]]
-	<</if>>
-
-	<br><br>
-	''Natural breast shape:'' $activeSlave.boobShape.
-	[[Normal|Starting Girls][$activeSlave.boobShape = "normal"]]
-	| [[Perky|Starting Girls][$activeSlave.boobShape = "perky"]]
-	| [[Torpedo-shaped|Starting Girls][$activeSlave.boobShape = "torpedo-shaped"]]
-	| [[Wide-set|Starting Girls][$activeSlave.boobShape = "wide-set"]]
-	| [[Downward-facing|Starting Girls][$activeSlave.boobShape = "downward-facing"]]
-	| [[Saggy|Starting Girls][$activeSlave.boobShape = "saggy"]]
-
 	<br><br>
 	''Births:'' <<textbox "$activeSlave.counter.birthsTotal" $activeSlave.counter.birthsTotal "Starting Girls">> //How many times $he has already given birth, not necessarily while owned by you.//
 
diff --git a/src/uncategorized/genericPlotEvents.tw b/src/uncategorized/genericPlotEvents.tw
index dd1f4a93b76b81410d65a68729487acc2a80bf88..acaa3e8ca1455d0f7516cdb224826fd358b0e56f 100644
--- a/src/uncategorized/genericPlotEvents.tw
+++ b/src/uncategorized/genericPlotEvents.tw
@@ -47,7 +47,7 @@
 	As you step off the elevator, you hear several <<if $seeDicks !== 100>>female <</if>>voices shouting. Apparently one of $arcologies[0].name's few remaining strip joints has closed. It was a topless bar and strip club all in one, but the owner is packing up his things. He's explaining to a crowd of his angry former employees that he can't make ends meet. As the price of a slave whore is barely higher than that of a lap dance from a free stripper, it's not surprising. It looks like the former dancers are on the verge of trashing the place.
 <<case "strip club aftermath">>
 	<<set _ContractCost = 1000>>
-	<<set _pram = {minAge: $minimumSlaveAge, maxAge: 42, , disableDisability: 1}>>
+	<<set _pram = {minAge: $minimumSlaveAge, maxAge: 42, disableDisability: 1}>>
 	<<if $arcologies[0].FSSupremacistLawME === 1>>
 		<<set _pram.race = $arcologies[0].FSSupremacistRace>>
 	<<elseif $arcologies[0].FSSubjugationistLawME === 1>>
@@ -1306,4 +1306,4 @@
 		<</replace>>
 	<</link>>
 <</switch>>
-</span>
\ No newline at end of file
+</span>
diff --git a/src/uncategorized/managePenthouse.tw b/src/uncategorized/managePenthouse.tw
index 2b68bee8a0389943ed988d254c8f35fd594b09b5..09ad829c0b4ab571d01e30260e3779954c7907f1 100644
--- a/src/uncategorized/managePenthouse.tw
+++ b/src/uncategorized/managePenthouse.tw
@@ -400,7 +400,7 @@
 			<span class="detail">
 				Costs <<print cashFormat(Math.trunc(150000*$upgradeMultiplierArcology))>>
 				<div class="indent">
-					Buying the equipment to construct prosthetics yourself is expensive but if you want to construct a lot of prosthetics it will pay out in the long run.
+					Buying the equipment to construct prosthetics yourself is expensive but if you plan to construct many prosthetics it will pay out in the long run.
 				</div>
 			</span>
 		<</if>>
diff --git a/src/uncategorized/salon.tw b/src/uncategorized/salon.tw
deleted file mode 100644
index 40e4e8d6b826fff50902559e31453a202499bee5..0000000000000000000000000000000000000000
--- a/src/uncategorized/salon.tw
+++ /dev/null
@@ -1,551 +0,0 @@
-:: Salon [nobr jump-from-safe]
-
-<<set $nextButton = "Confirm changes", $nextLink = "Slave Interact", $encyclopedia = "The Auto Salon">>
-<<run App.Utils.setLocalPronouns(getSlave($AS))>>
-
-<<if $showInches == 2>>
-	<<set _oldHLength = Math.round(getSlave($AS).hLength/2.54), _newHLength = 0>>
-<<else>>
-	<<set _oldHLength = getSlave($AS).hLength, _newHLength = 0>>
-<</if>>
-
-<h1>The Auto Salon</h1>
-
-<span class="note">
-	<<= getSlave($AS).slaveName>> is seated in the auto salon. $He is awaiting your artistic pleasure.
-</span>
-
-/* 000-250-006 */
-<span id="art-frame">
-	<<if $seeImages == 1>>
-		<<if $imageChoice == 1>>
-			<div class="imageRef lrgVector"><div class="mask">&nbsp;</div><<= SlaveArt(getSlave($AS), 3, 0)>></div>
-		<<else>>
-			<div class="imageRef lrgRender"><div class="mask">&nbsp;</div><<= SlaveArt(getSlave($AS), 3, 0)>></div>
-		<</if>>
-	<</if>>
-</span>
-/* 000-250-006 */
-
-/* EYES */
-
-<h3>Eyewear</h3>
-<<if getBestVision(getSlave($AS)) === 0>>
-	$He is blind, and
-	<<if getSlave($AS).eyewear == "none">>
-		has no eyewear.
-	<<else>>
-		is wearing <<= getSlave($AS).eyewear>>. [[Remove|Salon][getSlave($AS).eyewear = "none"]]
-	<</if>>
-	<div class="choices">
-		Give $him: [[Cosmetic glasses|Salon][getSlave($AS).eyewear = "glasses",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-	</div>
-<<elseif anyVisionEquals(getSlave($AS), 1)>>
-	$He is nearsighted, and $he
-	<<if getSlave($AS).eyewear == "none">>
-		has no eyewear.
-	<<else>>
-		is wearing <<= getSlave($AS).eyewear>>. [[Remove|Salon][getSlave($AS).eyewear = "none"]]
-	<</if>>
-	<div class="choices">
-		Give $him: [[Cosmetic glasses|Salon][getSlave($AS).eyewear = "glasses",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-		| [[Corrective glasses|Salon][getSlave($AS).eyewear = "corrective glasses",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-		| [[Corrective contacts|Salon][getSlave($AS).eyewear = "corrective contacts",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-		<span class="note">Nearsightedness will impede performance on some assignments.</span>
-	</div>
-<<else>>
-	$His vision is normal, and $he
-	<<if getSlave($AS).eyewear == "none">>
-		has no eyewear.
-	<<else>>
-		is wearing <<= getSlave($AS).eyewear>>. [[Remove|Salon][getSlave($AS).eyewear = "none"]]
-	<</if>>
-	<div class="choices">
-		Give $him: [[Cosmetic glasses|Salon][getSlave($AS).eyewear = "glasses",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-		| [[Blurring glasses|Salon][getSlave($AS).eyewear = "blurring glasses",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-		| [[Blurring contacts|Salon][getSlave($AS).eyewear = "blurring contacts",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-		<span class="note">Blurring options are annoying and impede performance on some assignments.</span>
-	</div>
-<</if>>
-
-<<includeDOM App.Medicine.Modification.eyeSelector(getSlave($AS))>>
-
-/* EARS */
-<h3>Ears</h3>
-<p id="salon-ears"></p>
-<script>
-	App.Medicine.Salon.ears(getSlave(V.AS));
-</script>
-
-<div>
-	<<if getSlave($AS).earImplant == 1>>
-		$He has artificial inner ear implants,
-		<<if getSlave($AS).earwear == "none">>
-			which are unobstructed.
-		<<else>>
-			and is wearing <<= getSlave($AS).earwear>>. [[Remove|Salon][getSlave($AS).earwear = "none"]]
-		<</if>>
-	<<elseif getSlave($AS).hears < -1>>
-		$He is deaf, and
-		<<if getSlave($AS).earwear == "none">>
-			is wearing nothing on $his ears.
-		<<else>>
-			is wearing <<= getSlave($AS).earwear>>. [[Remove|Salon][getSlave($AS).earwear = "none"]]
-		<</if>>
-	<<elseif getSlave($AS).hears > -1>>
-		$His hearing is normal, and $he
-		<<if getSlave($AS).earwear == "none">>
-			has nothing in $his ears.
-		<<else>>
-			is wearing <<= getSlave($AS).earwear>>. [[Remove|Salon][getSlave($AS).earwear = "none"]]
-		<</if>>
-	<<else>>
-		$He is hearing impaired, and
-		<<if getSlave($AS).earwear == "none">>
-			wears nothing to correct or worsen this.
-		<<else>>
-			is wearing <<= getSlave($AS).earwear>>. [[Remove|Salon][getSlave($AS).earwear = "none"]]
-		<</if>>
-	<</if>>
-	<div class="choices">
-		Give $him:
-		[[Hearing aids|Salon][getSlave($AS).earwear = "hearing aids",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-		| [[Muffling ear plugs|Salon][getSlave($AS).earwear = "muffling ear plugs",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-		| [[Deafening ear plugs|Salon][getSlave($AS).earwear = "deafening ear plugs",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-		<span class="note">Muffling options are annoying and impede performance on some assignments.</span>
-	</div>
-</div>
-
-/*End ear check */
-<div>
-	<<if getSlave($AS).horn != "none">>
-		$His <<= getSlave($AS).horn>> are <<= getSlave($AS).hornColor>>
-		<div class="choices">
-			Set horn color:
-				[[Black|Salon][getSlave($AS).hornColor = "black",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[Blazing Red|Salon][getSlave($AS).hornColor = "blazing red",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[Blue-Violet|Salon][getSlave($AS).hornColor = "blue-violet",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[Blue|Salon][getSlave($AS).hornColor = "blue",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[Brown|Salon][getSlave($AS).hornColor = "brown",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[Burgundy|Salon][getSlave($AS).hornColor = "burgundy",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[Copper|Salon][getSlave($AS).hornColor = "copper",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[Dark Blue|Salon][getSlave($AS).hornColor = "dark blue",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[Dark Brown|Salon][getSlave($AS).hornColor = "dark brown",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[Dark Orchid|Salon][getSlave($AS).hornColor = "dark orchid",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[Deep Red|Salon][getSlave($AS).hornColor = "deep red",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[Golden|Salon][getSlave($AS).hornColor = "golden",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[Green-yellow|Salon][getSlave($AS).hornColor = "green-yellow",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[Green|Salon][getSlave($AS).hornColor = "green",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[Grey|Salon][getSlave($AS).hornColor = "grey",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[Jet Black|Salon][getSlave($AS).hornColor = "jet black",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[Neon Blue|Salon][getSlave($AS).hornColor = "neon blue",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[Neon Green|Salon][getSlave($AS).hornColor = "neon green",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[Neon Pink|Salon][getSlave($AS).hornColor = "neon pink",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[Pink|Salon][getSlave($AS).hornColor = "pink",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[Ivory|Salon][getSlave($AS).hornColor = "ivory",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[Purple|Salon][getSlave($AS).hornColor = "purple",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[Red|Salon][getSlave($AS).hornColor = "red",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[Sea Green|Salon][getSlave($AS).hornColor = "sea green",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[Silver|Salon][getSlave($AS).hornColor = "silver",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				| [[White|Salon][getSlave($AS).hornColor = "white",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-		</div>
-	<</if>>
-</div>
-
-/* HAIR */
-
-<h3>Hair</h3>
-<p id="salon-hair"></p>
-<script>
-	App.Medicine.Salon.hair(getSlave(V.AS));
-</script>
-
-/* MAKEUP */
-<h3>Makeup</h3>
-
-<div>
-	<<= App.Desc.makeup(getSlave($AS))>>
-	<<if getSlave($AS).makeup > 0>>
-		[[Remove|Salon][getSlave($AS).makeup = 0,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-	<</if>>
-	<div class="choices">
-	Apply makeup:
-		[[Nice|Salon][getSlave($AS).makeup = 1,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-		| [[Gorgeous|Salon][getSlave($AS).makeup = 2,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-		| [[Slutty|Salon][getSlave($AS).makeup = 4,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-		| [[Color-coordinate with hair|Salon][getSlave($AS).makeup = 3,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-	</div>
-	<div class="choices">
-		&nbsp;&nbsp;
-		[[Neon|Salon][getSlave($AS).makeup = 5,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-		| [[Neon, color-coordinate with hair|Salon][getSlave($AS).makeup = 6,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-	</div>
-	<div class="choices">
-		&nbsp;&nbsp;
-		[[Metallic|Salon][getSlave($AS).makeup = 7,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-		| [[Metallic, color-coordinate with hair|Salon][getSlave($AS).makeup = 8,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-	</div>
-</div>
-
-/* NAILS */
-<div>
-	<<= App.Desc.nails(getSlave($AS))>>
-
-	<<if hasAnyArms(getSlave($AS))>>
-		<div class="choices">
-			Treat nails:
-			[[Clip|Salon][getSlave($AS).nails = 0,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Extend|Salon][getSlave($AS).nails = 1,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Sharp, claw-like|Salon][getSlave($AS).nails = 3,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Bright, glittery|Salon][getSlave($AS).nails = 4,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Streetwalker-style|Salon][getSlave($AS).nails = 5,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Color-coordinate with hair|Salon][getSlave($AS).nails = 2,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-		</div>
-		<div class="choices">
-			&nbsp;&nbsp;
-			[[Neon|Salon][getSlave($AS).nails = 6,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Neon, color-coordinate with hair|Salon][getSlave($AS).nails = 7,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-		</div>
-		<div class="choices">
-			&nbsp;&nbsp;
-			[[Metallic|Salon][getSlave($AS).nails = 8,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Metallic, color-coordinate with hair|Salon][getSlave($AS).nails = 9,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-		</div>
-	<</if>>
-</div>
-
-/* SKIN */
-<h3>Skin</h3>
-<div>
-	$His skin is <<= getSlave($AS).skin>>.
-
-	<<if (setup.dyedSkins.includes(getSlave($AS).skin))>>
-		[[Remove coloring|Salon][getSlave($AS).skin = getSlave($AS).origSkin,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-	<<elseif ((getSlave($AS).skin == "sun tanned") || (getSlave($AS).skin == "spray tanned"))>>
-		[[Remove tanning|Salon][getSlave($AS).skin = getSlave($AS).origSkin,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-	<</if>>
-</div>
-
-<<if (!setup.dyedSkins.includes(getSlave($AS).skin))>>
-	<div class="choices">
-		<<if (getSlave($AS).skin == "sun tanned" || getSlave($AS).skin == "spray tanned")>>
-			$His skin tanning must be removed before any advanced procedure to change $his skin color.
-		<<else>>
-			Change skin tone:
-			<<set _needsSpacers = 0>>
-			<<if (skinToneLevel(getSlave($AS).skin) > 1)>>
-				<<if _needsSpacers == 1>> | <</if>>
-				[[Bleach|Salon][getSlave($AS).skin = changeSkinTone(getSlave($AS).skin, -2), cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				<<set _needsSpacers = 1>>
-			<</if>>
-			<<if (skinToneLevel(getSlave($AS).skin) > 8)>>
-				<<if _needsSpacers == 1>> | <</if>>
-				[[Lighten|Salon][getSlave($AS).skin = changeSkinTone(getSlave($AS).skin, -1), cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				<<set _needsSpacers = 1>>
-			<</if>>
-			<<if (skinToneLevel(getSlave($AS).skin) < 18)>>
-				<<if _needsSpacers == 1>> | <</if>>
-				[[Darken|Salon][getSlave($AS).skin = changeSkinTone(getSlave($AS).skin, 1), cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				<<set _needsSpacers = 1>>
-			<</if>>
-			<<if (skinToneLevel(getSlave($AS).skin) < 25)>>
-				<<if _needsSpacers == 1>> | <</if>>
-				[[Blacken|Salon][getSlave($AS).skin = changeSkinTone(getSlave($AS).skin, 2), cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				<<set _needsSpacers = 1>>
-			<</if>>
-		<</if>>
-	</div>
-	<div class="choices">
-		<<set _needsSpacers = 0>>
-		<<if (getSlave($AS).skin != "sun tanned")>>
-			<<if (skinToneLevel(getSlave($AS).skin) < 6)>>
-				$His skin is so light in color that any attempt at natural tanning is more likely to damage $his skin.
-			<<elseif (skinToneLevel(getSlave($AS).skin) > 20)>>
-				$His skin is so dark in color that any attempt at natural tanning is not likely to appear on $his skin.
-			<<else>>
-				[["Sun tan " + $his + " skin"|Salon][getSlave($AS).skin = "sun tanned", cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-				<<set _needsSpacers = 1>>
-			<</if>>
-		<</if>>
-		<<if (getSlave($AS).skin != "spray tanned")>>
-			<<if _needsSpacers == 1>> | <</if>>
-			[["Spray tan " + $his + " skin"|Salon][getSlave($AS).skin = "spray tanned", cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-		<</if>>
-	</div>
-<</if>>
-
-<div class="choices">
-	Dye or paint:
-	[[Blue|Salon][getSlave($AS).skin = "dyed blue",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-	| [[Camouflage|Salon][getSlave($AS).skin = "camouflage patterned",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-	| [[Gray|Salon][getSlave($AS).skin = "dyed gray",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-	| [[Green|Salon][getSlave($AS).skin = "dyed green",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-	| [[Pink|Salon][getSlave($AS).skin = "dyed pink",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-	| [[Red|Salon][getSlave($AS).skin = "dyed red",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-	| [[Tiger Stripes|Salon][getSlave($AS).skin = "tiger striped",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-</div>
-
-<p id="salon-tail"></p>
-<script>
-	App.Medicine.Salon.tail(getSlave(V.AS));
-</script>
-
-/* MARKS */
-<div>
-	<<if (getSlave($AS).markings == "beauty mark")>>
-		$He has a prominent mole on $his face, which
-		<<if getSlave($AS).face > 40>>
-			qualifies as a beauty mark and enhances $his attractiveness due to $his facial beauty.
-		<<elseif getSlave($AS).face < -10>>
-			makes $him even less attractive.
-		<<else>>
-			qualifies as a beauty mark since $he's pretty, having no significant impact on $his beauty.
-		<</if>>
-		[[Remove it|Salon][getSlave($AS).markings = "none",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-	<</if>>
-</div>
-
-<div>
-	<<if (getSlave($AS).markings == "birthmark")>>
-		$He has a large birthmark, which
-		<<if getSlave($AS).prestige > 0 || getSlave($AS).porn.prestige > 1>>
-			enhances $his attractiveness due to $his prestige.
-		<<else>>
-			detracts from $his attractiveness.
-		<</if>>
-		[[Bleach it|Salon][getSlave($AS).markings = "none",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-	<</if>>
-</div>
-
-
-<h3>Body hair</h3>
-/* EYEBROW HAIR */
-
-<<if getSlave($AS).eyebrowHStyle != "bald">>
-	<div>
-		$His <<if getSlave($AS).eyebrowFullness != "natural">><<= getSlave($AS).eyebrowFullness>><<if getSlave($AS).eyebrowHStyle != "natural">>,<</if>> <</if>><<if getSlave($AS).eyebrowHStyle != "natural">><<= getSlave($AS).eyebrowHStyle>> <</if>> eyebrows
-		<<if getSlave($AS).eyebrowHStyle == "shaved">>
-			would be <<= getSlave($AS).eyebrowHColor>> if present.
-		<<else>>
-			are <<= getSlave($AS).eyebrowHColor>>.
-		<</if>>
-		<<if getSlave($AS).eyebrowHColor != getSlave($AS).hColor>>
-			[[Match the hair?|Salon][getSlave($AS).eyebrowHColor = getSlave($AS).hColor,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-		<</if>>
-	</div>
-
-	<div class="choices">
-		Dye $his eyebrow hair:
-			[[Auburn|Salon][getSlave($AS).eyebrowHColor = "auburn",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Black|Salon][getSlave($AS).eyebrowHColor = "black",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Blazing Red|Salon][getSlave($AS).eyebrowHColor = "blazing red",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Blonde|Salon][getSlave($AS).eyebrowHColor = "blonde",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Blue-Violet|Salon][getSlave($AS).eyebrowHColor = "blue-violet",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Blue|Salon][getSlave($AS).eyebrowHColor = "blue",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Brown|Salon][getSlave($AS).eyebrowHColor = "brown",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Burgundy|Salon][getSlave($AS).eyebrowHColor = "burgundy",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Chestnut|Salon][getSlave($AS).eyebrowHColor = "chestnut",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Chocolate|Salon][getSlave($AS).eyebrowHColor = "chocolate brown",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Copper|Salon][getSlave($AS).eyebrowHColor = "copper",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Dark Blue|Salon][getSlave($AS).eyebrowHColor = "dark blue",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Dark Brown|Salon][getSlave($AS).eyebrowHColor = "dark brown",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Dark Orchid|Salon][getSlave($AS).eyebrowHColor = "dark orchid",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Deep Red|Salon][getSlave($AS).eyebrowHColor = "deep red",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Ginger|Salon][getSlave($AS).eyebrowHColor = "ginger",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Golden|Salon][getSlave($AS).eyebrowHColor = "golden",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Green-yellow|Salon][getSlave($AS).eyebrowHColor = "green-yellow",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Green|Salon][getSlave($AS).eyebrowHColor = "green",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Grey|Salon][getSlave($AS).eyebrowHColor = "grey",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Hazel|Salon][getSlave($AS).eyebrowHColor = "hazel",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Jet Black|Salon][getSlave($AS).eyebrowHColor = "jet black",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Neon Blue|Salon][getSlave($AS).eyebrowHColor = "neon blue",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Neon Green|Salon][getSlave($AS).eyebrowHColor = "neon green",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Neon Pink|Salon][getSlave($AS).eyebrowHColor = "neon pink",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Pink|Salon][getSlave($AS).eyebrowHColor = "pink",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Platinum Blonde|Salon][getSlave($AS).eyebrowHColor = "platinum blonde",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Purple|Salon][getSlave($AS).eyebrowHColor = "purple",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Red|Salon][getSlave($AS).eyebrowHColor = "red",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Sea Green|Salon][getSlave($AS).eyebrowHColor = "sea green",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Silver|Salon][getSlave($AS).eyebrowHColor = "silver",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Strawberry-Blonde|Salon][getSlave($AS).eyebrowHColor = "strawberry-blonde",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[White|Salon][getSlave($AS).eyebrowHColor = "white",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-	</div>
-
-	<div class="choices">
-		Style $his eyebrow hair:
-			[[Natural|Salon][getSlave($AS).eyebrowHStyle = "natural",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Curved|Salon][getSlave($AS).eyebrowHStyle = "curved",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Elongated|Salon][getSlave($AS).eyebrowHStyle = "elongated",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[High-Arched|Salon][getSlave($AS).eyebrowHStyle = "high-arched",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Rounded|Salon][getSlave($AS).eyebrowHStyle = "rounded",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Shaved|Salon][getSlave($AS).eyebrowHStyle = "shaved",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Shortened|Salon][getSlave($AS).eyebrowHStyle = "shortened",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Slanted Inwards|Salon][getSlave($AS).eyebrowHStyle = "slanted inwards",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Slanted Outwards|Salon][getSlave($AS).eyebrowHStyle = "slanted outwards",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Straight|Salon][getSlave($AS).eyebrowHStyle = "straight",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-	</div>
-
-	<div class="choices">
-		Shape $his eyebrow hair:
-			[[Natural|Salon][getSlave($AS).eyebrowFullness = "natural",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Bushy|Salon][getSlave($AS).eyebrowFullness = "bushy",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Thick|Salon][getSlave($AS).eyebrowFullness = "thick",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Tapered|Salon][getSlave($AS).eyebrowFullness = "tapered",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Threaded|Salon][getSlave($AS).eyebrowFullness = "threaded",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Thin|Salon][getSlave($AS).eyebrowFullness = "thin",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Pencil-Thin|Salon][getSlave($AS).eyebrowFullness = "pencil-thin",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-	</div>
-<<else>>
-	<div>
-		$His eyebrows are completely hairless.
-	</div>
-<</if>>
-
-/* PUBIC HAIR */
-
-<<set _pubertyAge = Math.min(getSlave($AS).pubertyAgeXX, getSlave($AS).pubertyAgeXY)>>
-<<if getSlave($AS).pubicHStyle != "bald" && getSlave($AS).pubicHStyle != "hairless" && getSlave($AS).physicalAge >= _pubertyAge-1>>
-
-	<div>
-		$His
-		<<if getSlave($AS).physicalAge < _pubertyAge>>
-			wispy pubic hair, which is just starting to grow in,
-		<<elseif getSlave($AS).pubicHStyle == "in a strip">>
-			pubic hair, which is shaved into a strip,
-		<<else>>
-			<<= getSlave($AS).pubicHStyle>> pubic hair
-		<</if>>
-		<<if getSlave($AS).pubicHStyle == "waxed">>
-			would be <<= getSlave($AS).pubicHColor>> if present.
-		<<else>>
-			is <<= getSlave($AS).pubicHColor>>.
-		<</if>>
-		<<if getSlave($AS).pubicHColor != getSlave($AS).hColor>>
-			[[Match the curtains?|Salon][getSlave($AS).pubicHColor = getSlave($AS).hColor,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-		<</if>>
-	</div>
-
-	<div class="choices">
-		Dye $his pubic hair:
-			[[Auburn|Salon][getSlave($AS).pubicHColor = "auburn",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Black|Salon][getSlave($AS).pubicHColor = "black",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Blazing Red|Salon][getSlave($AS).pubicHColor = "blazing red",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Blonde|Salon][getSlave($AS).pubicHColor = "blonde",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Blue-Violet|Salon][getSlave($AS).pubicHColor = "blue-violet",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Blue|Salon][getSlave($AS).pubicHColor = "blue",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Brown|Salon][getSlave($AS).pubicHColor = "brown",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Burgundy|Salon][getSlave($AS).pubicHColor = "burgundy",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Chestnut|Salon][getSlave($AS).pubicHColor = "chestnut",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Chocolate|Salon][getSlave($AS).pubicHColor = "chocolate brown",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Copper|Salon][getSlave($AS).pubicHColor = "copper",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Dark Blue|Salon][getSlave($AS).pubicHColor = "dark blue",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Dark Brown|Salon][getSlave($AS).pubicHColor = "dark brown",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Dark Orchid|Salon][getSlave($AS).pubicHColor = "dark orchid",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Deep Red|Salon][getSlave($AS).pubicHColor = "deep red",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Ginger|Salon][getSlave($AS).pubicHColor = "ginger",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Golden|Salon][getSlave($AS).pubicHColor = "golden",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Green-yellow|Salon][getSlave($AS).pubicHColor = "green-yellow",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Green|Salon][getSlave($AS).pubicHColor = "green",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Grey|Salon][getSlave($AS).pubicHColor = "grey",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Hazel|Salon][getSlave($AS).pubicHColor = "hazel",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Jet Black|Salon][getSlave($AS).pubicHColor = "jet black",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Neon Blue|Salon][getSlave($AS).pubicHColor = "neon blue",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Neon Green|Salon][getSlave($AS).pubicHColor = "neon green",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Neon Pink|Salon][getSlave($AS).pubicHColor = "neon pink",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Pink|Salon][getSlave($AS).pubicHColor = "pink",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Platinum Blonde|Salon][getSlave($AS).pubicHColor = "platinum blonde",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Purple|Salon][getSlave($AS).pubicHColor = "purple",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Red|Salon][getSlave($AS).pubicHColor = "red",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Sea Green|Salon][getSlave($AS).pubicHColor = "sea green",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Silver|Salon][getSlave($AS).pubicHColor = "silver",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Strawberry-Blonde|Salon][getSlave($AS).pubicHColor = "strawberry-blonde",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[White|Salon][getSlave($AS).pubicHColor = "white",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-	</div>
-
-	<div class="choices">
-		Style $his pubic hair:
-			[[Waxed|Salon][getSlave($AS).pubicHStyle = "waxed",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Landing strip|Salon][getSlave($AS).pubicHStyle = "in a strip",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Neat|Salon][getSlave($AS).pubicHStyle = "neat",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Bushy in the front|Salon][getSlave($AS).pubicHStyle = "bushy in the front and neat in the rear",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Bushy|Salon][getSlave($AS).pubicHStyle = "bushy",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Very Bushy|Salon][getSlave($AS).pubicHStyle = "very bushy",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-	</div>
-
-<<else>>
-	<div>
-		$His groin is completely hairless.
-	</div>
-<</if>>
-
-/* UNDERARM HAIR */
-
-<<if getSlave($AS).underArmHStyle != "bald" && getSlave($AS).underArmHStyle != "hairless" && getSlave($AS).physicalAge >= _pubertyAge-1>>
-
-	<div>
-		$His
-		<<if getSlave($AS).physicalAge < _pubertyAge>>
-			wispy underarm hair
-		<<else>>
-			<<= getSlave($AS).underArmHStyle>> underarm hair
-		<</if>>
-		<<if getSlave($AS).underArmHStyle == "waxed">>
-			would be <<= getSlave($AS).underArmHColor>> if present.
-		<<else>>
-			is <<= getSlave($AS).underArmHColor>>.
-		<</if>>
-		<<if getSlave($AS).underArmHColor != getSlave($AS).hColor>>
-			[[Match the hair?|Salon][getSlave($AS).underArmHColor = getSlave($AS).hColor,cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-		<</if>>
-	</div>
-
-	<div class="choices">
-		Dye $his armpit hair:
-			[[Auburn|Salon][getSlave($AS).underArmHColor = "auburn",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Black|Salon][getSlave($AS).underArmHColor = "black",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Blazing Red|Salon][getSlave($AS).underArmHColor = "blazing red",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Blonde|Salon][getSlave($AS).underArmHColor = "blonde",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Blue-Violet|Salon][getSlave($AS).underArmHColor = "blue-violet",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Blue|Salon][getSlave($AS).underArmHColor = "blue",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Brown|Salon][getSlave($AS).underArmHColor = "brown",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Burgundy|Salon][getSlave($AS).underArmHColor = "burgundy",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Chestnut|Salon][getSlave($AS).underArmHColor = "chestnut",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Chocolate|Salon][getSlave($AS).underArmHColor = "chocolate brown",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Copper|Salon][getSlave($AS).underArmHColor = "copper",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Dark Blue|Salon][getSlave($AS).underArmHColor = "dark blue",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Dark Brown|Salon][getSlave($AS).underArmHColor = "dark brown",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Dark Orchid|Salon][getSlave($AS).underArmHColor = "dark orchid",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Deep Red|Salon][getSlave($AS).underArmHColor = "deep red",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Ginger|Salon][getSlave($AS).underArmHColor = "ginger",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Golden|Salon][getSlave($AS).underArmHColor = "golden",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Green-yellow|Salon][getSlave($AS).underArmHColor = "green-yellow",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Green|Salon][getSlave($AS).underArmHColor = "green",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Grey|Salon][getSlave($AS).underArmHColor = "grey",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Hazel|Salon][getSlave($AS).underArmHColor = "hazel",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Jet Black|Salon][getSlave($AS).underArmHColor = "jet black",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Neon Blue|Salon][getSlave($AS).underArmHColor = "neon blue",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Neon Green|Salon][getSlave($AS).underArmHColor = "neon green",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Neon Pink|Salon][getSlave($AS).underArmHColor = "neon pink",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Pink|Salon][getSlave($AS).underArmHColor = "pink",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Platinum Blonde|Salon][getSlave($AS).underArmHColor = "platinum blonde",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Purple|Salon][getSlave($AS).underArmHColor = "purple",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Red|Salon][getSlave($AS).underArmHColor = "red",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Sea Green|Salon][getSlave($AS).underArmHColor = "sea green",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Silver|Salon][getSlave($AS).underArmHColor = "silver",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Strawberry-Blonde|Salon][getSlave($AS).underArmHColor = "strawberry-blonde",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[White|Salon][getSlave($AS).underArmHColor = "white",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-	</div>
-
-	<div class="choices">
-		Style $his armpit hair:
-			[[Waxed|Salon][getSlave($AS).underArmHStyle = "waxed",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Shaved|Salon][getSlave($AS).underArmHStyle = "shaved",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Neat|Salon][getSlave($AS).underArmHStyle = "neat",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-			| [[Bushy|Salon][getSlave($AS).underArmHStyle = "bushy",cashX(forceNeg($modCost), "slaveMod", getSlave($AS))]]
-	</div>
-
-<<else>>
-	<div>
-		$His underarms are completely hairless.
-	</div>
-<</if>>