diff --git a/css/gui/tooltips/tippy.css b/css/gui/tooltips/tippy.css
index 020f60d5d539062a097b435a48003672c64127a4..0025e60e0503ff55ccc7f55dbe171352cc5ddb24 100644
--- a/css/gui/tooltips/tippy.css
+++ b/css/gui/tooltips/tippy.css
@@ -1,5 +1,6 @@
 .has-tooltip {
 	text-decoration: underline dotted;
+	white-space: nowrap;
 }
 
 .tippy-content {
diff --git a/devTools/javaSanityCheck/excluded b/devTools/javaSanityCheck/excluded
index 77372f70251a771e95c1337a2d66e75f3d6f4b8c..a9bc4033967119c6ec2bac63456ad793bc88003f 100644
--- a/devTools/javaSanityCheck/excluded
+++ b/devTools/javaSanityCheck/excluded
@@ -3,10 +3,8 @@
 #O : OnlyUsedOnce, if variables are used more than once
 #S : SpellCheck, matches based on dictionaries in devTools/
 #
-src/art/;LO
 src/gui/svgFilters.tw;L
 #
 #JS files, logic won't be checked here anyways
-src/js/economyJS.js;S
 src/data/backwardsCompatibility/datatypeCleanup.js;S
 js/003-data/miscDataNames.js;S
diff --git a/js/003-data/policiesData.js b/js/003-data/policiesData.js
index 0a1b83c17a76b481ac4f84ad1f5dc05288cb91c9..3f1aef12bb84382dc06d4220214cace8e365d821 100644
--- a/js/003-data/policiesData.js
+++ b/js/003-data/policiesData.js
@@ -1340,7 +1340,7 @@ App.Data.Policies.Selection = {
 			{
 				title: "Invalid Protection Act",
 				titleClass: "lime",
-				text: "by law, anyone unable to pass a standardized test of intelligence and not already a dependant will be enslaved for their own well being.",
+				text: "by law, anyone unable to pass a standardized test of intelligence and not already a dependant will be enslaved for their own well-being.",
 				get requirements() { return (V.arcologies[0].FSIntellectualDependency >= 80); },
 				note: `Will convert some immigrants to menial slaves and give a small boost to reputation`
 			}
diff --git a/js/medicine/surgery/assets/breastShapePreservation.js b/js/medicine/surgery/assets/breastShapePreservation.js
index 8b3f7e0eaab63efc85f363e227ad5b6126007cea..e8f2ba66e049f0cd8a95683658bc4202e35a0a5f 100644
--- a/js/medicine/surgery/assets/breastShapePreservation.js
+++ b/js/medicine/surgery/assets/breastShapePreservation.js
@@ -92,7 +92,7 @@ App.Medicine.Surgery.Reactions.BreastShapePreservationFailure = class extends Ap
 				} else {
 					r.push(`${He} bounces a little to feel ${his} tiny breasts move and turns ${his} torso to you with a smile to show them off. ${He}'s still sore, so ${he} doesn't bounce too much.`);
 				}
-				r.push(`<span class="devotion inc">${He}'s happy with your changes to ${his} boobs</span> and <span class="trust inc">thankful</span> that you'd consider ${his} health, well being and ability to fuck. As with all invasive surgery <span class="health dec">${his} health has been affected.</span>`);
+				r.push(`<span class="devotion inc">${He}'s happy with your changes to ${his} boobs</span> and <span class="trust inc">thankful</span> that you'd consider ${his} health, well-being, and ability to fuck. As with all invasive surgery <span class="health dec">${his} health has been affected.</span>`);
 				reaction.devotion += 4;
 				reaction.trust += 4;
 			} else if (slave.devotion >= -20) {
diff --git a/js/medicine/surgery/assets/mastectomy.js b/js/medicine/surgery/assets/mastectomy.js
index f8e9d6adb556355c7a7324fe0f2d80eb92dc47cb..e0579208b06e6fd99214490d63271fe1b576c2e4 100644
--- a/js/medicine/surgery/assets/mastectomy.js
+++ b/js/medicine/surgery/assets/mastectomy.js
@@ -177,7 +177,7 @@ App.Medicine.Surgery.Reactions.Mastectomy = class extends App.Medicine.Surgery.S
 			} else {
 				r.push(`${He} bounces a little to feel ${his} tiny breasts move and turns ${his} torso to you with a smile to show them off. ${He}'s still sore, so ${he} doesn't bounce too much.`);
 			}
-			r.push(`<span class="devotion inc">${He}'s happy with your changes to ${his} boobs</span> and <span class="trust inc">thankful</span> that you'd consider ${his} health, well being and ability to fuck. As with all invasive surgery <span class="health dec">${his} health has been affected.</span>`);
+			r.push(`<span class="devotion inc">${He}'s happy with your changes to ${his} boobs</span> and <span class="trust inc">thankful</span> that you'd consider ${his} health, well-being, and ability to fuck. As with all invasive surgery <span class="health dec">${his} health has been affected.</span>`);
 			reaction.devotion += 4;
 			reaction.trust += 4;
 		} else if (slave.devotion >= -20) {
diff --git a/js/medicine/surgery/ears/deafen.js b/js/medicine/surgery/ears/deafen.js
index 73b0c4e9cfb4b467492c17c875f362d447062d6f..e8a186574b7f7184e136f6d65290477470a6694e 100644
--- a/js/medicine/surgery/ears/deafen.js
+++ b/js/medicine/surgery/ears/deafen.js
@@ -12,7 +12,7 @@ App.Medicine.Surgery.Reactions.Deafen = class extends App.Medicine.Surgery.Simpl
 				r.push(`When ${he} finally figures it out, ${he} begins to bawl, not understanding what ${he} did to earn this. After a short expurgation of <span class="trust dec">grief and terror,</span> ${he} takes a deep breath and visibly suppresses ${his} emotions.`);
 				reaction.trust -= 20;
 			} else {
-				r.push(`When ${he} realizes what's happened, ${his} face <span class="devotion dec">clouds with rage.</span> ${He} begins to peer around, looking for the source of ${his} woes. ${He} finally understands the true use of deafness when ${he} realizes ${he} won't be able to easily tell where you are, or anyone else is for that matter. ${His} well being is now firmly in the hands of someone ${he} distrusts. ${He} begins to <span class="trust dec">shake with fear.</span>`);
+				r.push(`When ${he} realizes what's happened, ${his} face <span class="devotion dec">clouds with rage.</span> ${He} begins to peer around, looking for the source of ${his} woes. ${He} finally understands the true use of deafness when ${he} realizes ${he} won't be able to easily tell where you are, or anyone else is for that matter. ${His} well-being is now firmly in the hands of someone ${he} distrusts. ${He} begins to <span class="trust dec">shake with fear.</span>`);
 				reaction.trust -= 8;
 				reaction.devotion -= 8;
 			}
diff --git a/js/medicine/surgery/eye/blind.js b/js/medicine/surgery/eye/blind.js
index cc5f35337e08ff61e5e421dceefbf1f6e9aadeba..68e9f0159dae78da2314637f1c7ff14fefa0490e 100644
--- a/js/medicine/surgery/eye/blind.js
+++ b/js/medicine/surgery/eye/blind.js
@@ -13,7 +13,7 @@ App.Medicine.Surgery.Reactions.Blind = class extends App.Medicine.Surgery.Simple
 				r.push(`When ${he} finally figures it out, ${he} begins to bawl, not understanding what ${he} did to earn this. After a short expurgation of <span class="trust dec">grief and terror,</span> ${he} takes a deep breath and visibly suppresses ${his} emotions.`);
 				reaction.trust -= 20;
 			} else {
-				r.push(`When ${he} realizes what's happened, ${his} face <span class="devotion dec">clouds with rage.</span> Reflexively, ${he} begins to peer around, looking for the source of ${his} woes. ${He} finally understands the true use of blindness when ${he} realizes ${he} won't be able to tell where you are, where anyone is, or even where ${he} is. ${His} well being is now firmly in the hands of someone ${he} distrusts. ${He} begins to <span class="trust dec">shake with fear.</span>`);
+				r.push(`When ${he} realizes what's happened, ${his} face <span class="devotion dec">clouds with rage.</span> Reflexively, ${he} begins to peer around, looking for the source of ${his} woes. ${He} finally understands the true use of blindness when ${he} realizes ${he} won't be able to tell where you are, where anyone is, or even where ${he} is. ${His} well-being is now firmly in the hands of someone ${he} distrusts. ${He} begins to <span class="trust dec">shake with fear.</span>`);
 				reaction.trust -= 8;
 				reaction.devotion -= 8;
 			}
diff --git a/js/medicine/surgery/eye/removeEyes.js b/js/medicine/surgery/eye/removeEyes.js
index 065c19b55dfd0eddb56f72a663df12ba92bd1bdc..185ec0773a6f4a8e4940d0a2c78e26d9ac1229af 100644
--- a/js/medicine/surgery/eye/removeEyes.js
+++ b/js/medicine/surgery/eye/removeEyes.js
@@ -13,7 +13,7 @@ App.Medicine.Surgery.Reactions.RemoveEyes = class extends App.Medicine.Surgery.S
 				r.push(`When ${he} realizes why, ${he} begins to bawl, not understanding what ${he} did to earn this. After a short expurgation of <span class="trust dec">grief and terror,</span> ${he} takes a deep breath and visibly suppresses ${his} emotions.`);
 				reaction.trust -= 20;
 			} else {
-				r.push(`When ${he} realizes what's happened, ${his} face <span class="devotion dec">clouds with rage.</span> Reflexively, ${he} swings ${his} head around, looking for the source of ${his} woes. ${He} finally understands the true use of blindness when ${he} realizes ${he} won't be able to tell where you are, where anyone is, or even where ${he} is. ${His} well being is now firmly in the hands of someone ${he} distrusts. ${He} begins to <span class="trust dec">shake with fear.</span>`);
+				r.push(`When ${he} realizes what's happened, ${his} face <span class="devotion dec">clouds with rage.</span> Reflexively, ${he} swings ${his} head around, looking for the source of ${his} woes. ${He} finally understands the true use of blindness when ${he} realizes ${he} won't be able to tell where you are, where anyone is, or even where ${he} is. ${His} well-being is now firmly in the hands of someone ${he} distrusts. ${He} begins to <span class="trust dec">shake with fear.</span>`);
 				reaction.trust -= 8;
 				reaction.devotion -= 8;
 			}
diff --git a/sanityCheck.sh b/sanityCheck.sh
index be825347d967449688397e816e92e00d6d7f56ca..9d2f403dd3ef21a95e6d7050b67c5f3f0dfa4560 100755
--- a/sanityCheck.sh
+++ b/sanityCheck.sh
@@ -31,7 +31,7 @@ $GREP "<<[ ]*[^\$><_\[]*\(activeSlave\|PC\)[.]" -- "src/*" | myprint "MissingDol
 # Check for closing bracket without opening bracket.  e.g.:  <<if foo)>>	  (but  <<case "foo")>>   is valid, so ignore those
 $GREP -e "<<[ a-zA-Z]\+\([^()<>]\|[^()<>][<>][^()<>]\)*)" --and --not -e "<< *case" -- "src/**/*.tw" | myprint "MissingOpeningBracket"
 # Check for opening bracket without closing bracket.  e.g.:  <<if (foo>>
-$GREP -e "<<[ a-zA-Z]\([^<>]\|[^<>][<>][^<>]\)\+(\([^()<>]\|[^<>()][<>][^<>()]\|([^<>()]*])\)*>>" -- "src/*" | myprint "MissingClosingBracket"
+$GREP -e "<<[ a-zA-Z]\([^<>]\|[^<>][<>][^<>]\)\+(\([^()<>]\|[^<>()][<>][^<>()]\|([^<>()]*])\)*>>" -- "src/**/*.tw" | myprint "MissingClosingBracket"
 # Check for two closing brackets but one opening bracket.  e.g.:  <<if (foo))>>
 $GREP -e "<<[ a-zA-Z]\+[^()<>]*([^()]*)[^()]*)[^()<>]*>>" -- "src/**/*.tw" | myprint "MissingOpeningBracket2"
 # Check for one closing bracket but two opening brackets.  e.g.:  <<if ((foo)>>
diff --git a/src/endWeek/reports/masterSuiteReport.js b/src/endWeek/reports/masterSuiteReport.js
index ece7e1579348577a73a9cf953b7bb5c417390cbe..a7a0e0d895478d02e5840b34790645fb88e8a4ee 100644
--- a/src/endWeek/reports/masterSuiteReport.js
+++ b/src/endWeek/reports/masterSuiteReport.js
@@ -286,10 +286,10 @@ App.EndWeek.masterSuiteReport = function() {
 
 		if (V.masterSuiteUpgradePregnancy === 1) {
 			/* If they're not on fertility drugs and the toggle is active, stick them on (if they can take them). Otherwise take them off. */
-			if (V.masterSuitePregnancyFertilityDrugs === 1 && slave.drugs !== "fertility drugs" && canGetPregnant(slave)) {
-				slave.drugs = "fertility drugs";
-			} else if (V.masterSuiteHyperPregnancy === 1 && slave.drugs !== "super fertility drugs" && canGetPregnant(slave)) {
+			if (V.masterSuiteHyperPregnancy === 1 && slave.drugs !== "super fertility drugs" && canGetPregnant(slave)) {
 				slave.drugs = "super fertility drugs";
+			} else if (V.masterSuitePregnancyFertilityDrugs === 1 && slave.drugs !== "fertility drugs" && canGetPregnant(slave)) {
+				slave.drugs = "fertility drugs";
 			} else if (
 				(
 					(V.masterSuitePregnancyFertilityDrugs === 0 && slave.drugs === "fertility drugs") ||
diff --git a/src/endWeek/saArena.js b/src/endWeek/saArena.js
index cf6a84cdadf15a016a09cab18fe720a19cfecd26..1eb188dedfc930acea6adf580f1cd4c6feeee444 100644
--- a/src/endWeek/saArena.js
+++ b/src/endWeek/saArena.js
@@ -33,7 +33,7 @@ App.SlaveAssignment.arena = function saArena(slave) {
 			if (slave.health.illness < 4) {
 				r.push(`${His} illness is preventing ${him} from doing strenuous exercise, making ${him} focus on theory this week.`);
 			} else {
-				r.push(`${He} is so ill that ${he} is just laying on the sidelines the whole time.`);
+				r.push(`${He} is so ill that ${he} is just lying on the sidelines the whole time.`);
 				learningBlocked = true;
 			}
 		}
@@ -59,7 +59,7 @@ App.SlaveAssignment.arena = function saArena(slave) {
 
 	function body() {
 		if (slave.muscles < -30) {
-			r.push(`${His} frail body prevents ${him} from doing continues training, hampering ${his} progress.`);
+			r.push(`${His} frail body prevents ${him} from doing continuous training, hampering ${his} progress.`);
 			skillIncrease -= 1;
 		} else if (
 			slave.muscles > 30) {
diff --git a/src/endWeek/saClothes.js b/src/endWeek/saClothes.js
index b110fdce3e27809804179bc05cf24032ab5ebc3f..5269ecd65078d6b51489a23ea20fb1c74c028afe 100644
--- a/src/endWeek/saClothes.js
+++ b/src/endWeek/saClothes.js
@@ -1252,7 +1252,7 @@ App.SlaveAssignment.clothes = function saClothes(slave) {
 				if (slave.anus < 4) {
 					if (slave.fuckdoll === 0 && slave.fetish !== Fetish.MINDBROKEN) {
 						if (slave.sexualQuirk === "size queen") {
-							r.push(`${He} thinks of the horribly huge tailed plug ${he} has wear in ${his} butt as <span class="lime">preparation for the biggest cocks,</span> and <span class="hotpink">looks forward</span> to being able to safely take unlubricated anal from them. Even so, the tail hanging from ${his} rear is <span class="gold">a constant degrading reminder of ${his} submission.</span>`);
+							r.push(`${He} thinks of the horribly huge tailed plug ${he} has to wear in ${his} butt as <span class="lime">preparation for the biggest cocks,</span> and <span class="hotpink">looks forward</span> to being able to safely take unlubricated anal from them. Even so, the tail hanging from ${his} rear is <span class="gold">a constant degrading reminder of ${his} submission.</span>`);
 							slave.devotion += 4;
 							slave.trust -= 5;
 						} else if (slave.fetish === Fetish.MASOCHIST && slave.fetishKnown === 1 && slave.fetishStrength > 60) {
@@ -1304,7 +1304,7 @@ App.SlaveAssignment.clothes = function saClothes(slave) {
 				if (slave.anus < 4) {
 					if (slave.fuckdoll === 0 && slave.fetish !== Fetish.MINDBROKEN) {
 						if (slave.sexualQuirk === "size queen") {
-							r.push(`${He} thinks of the horribly huge plug ${he} has wear in ${his} butt as <span class="lime">preparation for the biggest cocks,</span> and <span class="hotpink">looks forward</span> to being able to safely take unlubricated anal from them.`);
+							r.push(`${He} thinks of the horribly huge plug ${he} has to wear in ${his} butt as <span class="lime">preparation for the biggest cocks,</span> and <span class="hotpink">looks forward</span> to being able to safely take unlubricated anal from them.`);
 							slave.devotion += 4;
 						} else if (slave.fetish === Fetish.MASOCHIST && slave.fetishKnown === 1 && slave.fetishStrength > 60) {
 							r.push(`${He} gets off on the agony of having ${his} anal sphincter`);
diff --git a/src/events/RESS/languageLesson.js b/src/events/RESS/languageLesson.js
index e5e308abba2ea2f44ef450bcbdf4f713c2946568..4ebf111de258777d8220246399273a75512bf4de 100644
--- a/src/events/RESS/languageLesson.js
+++ b/src/events/RESS/languageLesson.js
@@ -283,7 +283,7 @@ App.Events.RESSLanguageLesson = class RESSLanguageLesson extends App.Events.Base
 				r.push(`to repetition of`);
 				r.push(Spoken(eventSlave, `"Intercourse, sex, unh, fucking, breeding, um, mounting,"`));
 				const Orgasm = Spoken(eventSlave, "Orgasm");
-				r.push(`and so on. Just when the eavesdropping ${girlU} decides that this might be too salicious for ${hisU} well being and turns to go about ${hisU} business, ${eventSlave.slaveName}'s voice rises sharply in pitch. "Aaah! <span class="trust inc">${Orgasm}!</span>`);
+				r.push(`and so on. Just when the eavesdropping ${girlU} decides that this might be too salacious for ${hisU} well-being and turns to go about ${hisU} business, ${eventSlave.slaveName}'s voice rises sharply in pitch. "Aaah! <span class="trust inc">${Orgasm}!</span>`);
 				r.push(Spoken(eventSlave, `Oh ${Master}, ohh, orgasm, orgasm,"`));
 				r.push(`followed by much breathless repetition of what's about to come, and a final, ecstatic`);
 				r.push(Spoken(eventSlave, `"C-creampie!"`));
diff --git a/src/events/RESS/retchingCum.js b/src/events/RESS/retchingCum.js
index 4f50c973ff1b48a11c51a052c2c73aca4c59264f..cef9c3ebe7e7a4dd86cadca514ba37763b298fbf 100644
--- a/src/events/RESS/retchingCum.js
+++ b/src/events/RESS/retchingCum.js
@@ -76,7 +76,7 @@ App.Events.RESSRetchingCum = class RESSRetchingCum extends App.Events.BaseEvent
 			eventSlave.devotion -= 5;
 			eventSlave.trust += 5;
 			eventSlave.dietCum = 0;
-			return `You see how ${eventSlave.slaveName} is suffering and you decide to reconsider ${his} dietary prescription. You instruct ${V.assistant.name} to change ${eventSlave.slaveName}'s diet to exclude cum for now. Slaves who can't eat are unhealthy, and unhealthy slaves are unprofitable slaves. ${He} is now <span class="mediumorchid">more confident that ${he} can resist you and get ${his} way,</span> ${he} also <span class="mediumaquamarine">trusts you a little more</span> to look after ${his} well being.`;
+			return `You see how ${eventSlave.slaveName} is suffering and you decide to reconsider ${his} dietary prescription. You instruct ${V.assistant.name} to change ${eventSlave.slaveName}'s diet to exclude cum for now. Slaves who can't eat are unhealthy, and unhealthy slaves are unprofitable slaves. ${He} is now <span class="mediumorchid">more confident that ${he} can resist you and get ${his} way,</span> ${he} also <span class="mediumaquamarine">trusts you a little more</span> to look after ${his} well-being.`;
 		}
 		function heavy() {
 			eventSlave.devotion -= 3;
diff --git a/src/events/RESS/review/tittymonsterInspection.js b/src/events/RESS/review/tittymonsterInspection.js
index c1003fe3bef85c109acbb4509c27143ebddc5ae3..e4b8f0e63ae1a1b20afaac322c7de6937109058b 100644
--- a/src/events/RESS/review/tittymonsterInspection.js
+++ b/src/events/RESS/review/tittymonsterInspection.js
@@ -60,17 +60,17 @@ App.Events.RESSTittymonsterInspection = class RESSTittymonsterInspection extends
 		}
 		r.push(`and legs hidden, ${he} appears to consist of a`);
 		if (eventSlave.face > 95) {
-			r.push(`gorgeous,`);
+			r.push(`gorgeous`);
 		} else if (eventSlave.face > 50) {
-			r.push(`beautiful,`);
+			r.push(`beautiful`);
 		} else if (eventSlave.face >= 10) {
-			r.push(`pretty,`);
+			r.push(`pretty`);
 		} else if (eventSlave.face >= 0) {
-			r.push(`nice,`);
+			r.push(`nice`);
 		} else {
-			r.push(`homely,`);
+			r.push(`homely`);
 		}
-		r.push(`${eventSlave.faceShape} face, a`);
+		r.addToLast(`${eventSlave.faceShape !== "normal" ? `, ${eventSlave.faceShape}` : ``} face, a`);
 		if (eventSlave.collar === "none") {
 			r.push(`bare`);
 		} else {
diff --git a/src/events/nonRandom/rival/pRivalryActions.js b/src/events/nonRandom/rival/pRivalryActions.js
index 4d21a3303466f9a933ed5c03c504c832969ca461..03d1efafd092d7f5c8a5d79d20246eb781245141 100644
--- a/src/events/nonRandom/rival/pRivalryActions.js
+++ b/src/events/nonRandom/rival/pRivalryActions.js
@@ -3562,19 +3562,23 @@ App.Events.pRivalryActions = function() {
 									arc.rival = 0;
 									arc.government = "direct democracy";
 									if (rivalCaptured) {
-										V.rival.state = 3;
 										if (arc.FSSupremacist > 20) {
+											// @ts-ignore
 											V.rival.race = arc.FSSupremacistRace;
 										} else if (arc.FSSubjugationist > 20) {
 											V.rival.race = Array.from(App.Data.misc.filterRacesPublic.keys()).filter(race => race !== arc.FSSubjugationistRace).random();
 										}
-									} else {
-										V.rival.state = 4;
 									}
 									break;
 								}
 							}
 						}
+						if (rivalCaptured) {
+							V.rival.state = 3;
+						} else {
+							V.rival.state = 4;
+						}
+
 						if (V.rival.hostageState === 1) {
 							r.push(`${V.assistant.name} pauses. "Also confirm package is secure."`);
 							V.rival.hostageState = 2;
diff --git a/src/events/reRecruit/schoolSale.js b/src/events/reRecruit/schoolSale.js
index 8f97e9887895158765059ee3d741bc82f01f8168..5524a4b5d6ec47c151397f3a9894e79cb5cafe8d 100644
--- a/src/events/reRecruit/schoolSale.js
+++ b/src/events/reRecruit/schoolSale.js
@@ -88,7 +88,9 @@ App.Events.recSchoolSale = class recSchoolSale extends App.Events.BaseEvent {
 			slave.skill.vaginal = 0;
 			slave.skill.oral = 0;
 			slave.skill.anal = 0;
-			slave.hStyle = "long and in twin schoolgirl tails";
+			slave.hLength = 5 * random(10, 18); // 50-90cm
+			slave.hStyle = "tails"; // custom hairstyle replaced with dictionary item, original dummied out for record-keeping
+			// slave.hStyle = "long and in twin schoolgirl tails";
 			slave.pubicHStyle = "waxed";
 			slave.underArmHStyle = "waxed";
 			slave.birthWeek = 0;
diff --git a/src/events/reRecruit/schoolTrap.js b/src/events/reRecruit/schoolTrap.js
index e74c65a5dedf1ee5d3c88785b76c22a0538a1d7b..bec8e04c9ba490cb11ad9894c71d8ee282633358 100644
--- a/src/events/reRecruit/schoolTrap.js
+++ b/src/events/reRecruit/schoolTrap.js
@@ -88,7 +88,9 @@ App.Events.recSchoolTrap = class recSchoolTrap extends App.Events.BaseEvent {
 			slave.clit = 0;
 			slave.skill.oral = 0;
 			slave.skill.anal = 0;
-			slave.hStyle = "long and in twin schoolgirl tails";
+			slave.hLength = 5 * random(10, 18); // 50-90cm
+			slave.hStyle = "tails"; // custom hairstyle replaced with dictionary item, original dummied out for record-keeping
+			// slave.hStyle = "long and in twin schoolgirl tails";
 			slave.pubicHStyle = "waxed";
 			slave.underArmHStyle = "waxed";
 			slave.pubertyXY = 0;
diff --git a/src/events/recFS/recfsPastoralistTwo.js b/src/events/recFS/recfsPastoralistTwo.js
index 128971114480ff836df1d5ebe610dbc96918ea6c..1d8e4692be444b32476bb1481828106ccc3be984 100644
--- a/src/events/recFS/recfsPastoralistTwo.js
+++ b/src/events/recFS/recfsPastoralistTwo.js
@@ -64,7 +64,7 @@ App.Events.recFSPastoralistTwo = class recFSPastoralistTwo extends App.Events.Ba
 		function enslave() {
 			const frag = new DocumentFragment();
 			r = [];
-			r.push(`${He} speaks to you as a free ${woman} while working through the enslavement process, perhaps ${he} hasn't quite grasped ${his} new role. Nonetheless, it seems as if a vast weight has been lifted from ${his} shoulders. You've seen this before, the perverse internal freedom that comes with the knowledge that ${his} life is in the hands of another now, and that all ${he} has to do or can do is obey. ${His} last words to you as a free ${woman} are an ironic statement that, people always praised ${his} milk-filled udders as givers of life, yet ${he} never thought they'd save ${hers} one day.`);
+			r.push(`${He} speaks to you as a free ${woman} while working through the enslavement process, perhaps ${he} hasn't quite grasped ${his} new role. Nonetheless, it seems as if a vast weight has been lifted from ${his} shoulders. You've seen this before, the perverse internal freedom that comes with the knowledge that ${his} life is in the hands of another now, and that all ${he} has to do or can do is obey. ${His} last words to you as a free ${woman} are an ironic statement that, while people always praised ${his} milk-filled udders as givers of life, ${he} never thought they'd save ${hers} one day.`);
 
 			r.push(App.UI.newSlaveIntro(slave));
 			App.Events.addParagraph(frag, r);
diff --git a/src/gui/Encyclopedia/encyclopediaSlaves.js b/src/gui/Encyclopedia/encyclopediaSlaves.js
index da73f16fc198295e22650cf1578d56ad016a89ba..468615007371ea1c5f08ae5face6e196149cef81 100644
--- a/src/gui/Encyclopedia/encyclopediaSlaves.js
+++ b/src/gui/Encyclopedia/encyclopediaSlaves.js
@@ -25,7 +25,7 @@ App.Encyclopedia.addArticle("Demand for Sex", function() {
 App.Encyclopedia.addArticle("Living Conditions", function() {
 	const f = new DocumentFragment();
 
-	App.Events.addParagraph(f, ["Slaves can be assigned different living conditions which affect their mental state and well being. Some Facilities may overwrite manually set living conditions."]);
+	App.Events.addParagraph(f, ["Slaves can be assigned different living conditions which affect their mental state and well-being. Some Facilities may overwrite manually set living conditions."]);
 
 	const dl = document.createElement("dl");
 	App.Events.addNode(dl, ["<dt>Spare</dt><dd>The cheapest and the default but may cause some issues.</dd>"], );
diff --git a/src/markets/marketUI.js b/src/markets/marketUI.js
index 66291e9f0a0041552c8cd9e4cbe881253c3b3b4f..066f9ac62cb7ec9a2c096295b702cf971bc7b879 100644
--- a/src/markets/marketUI.js
+++ b/src/markets/marketUI.js
@@ -98,7 +98,10 @@ App.Markets.purchaseFramework = function(slaveMarket, {sTitleSingular = "slave",
 							V.nextButton = "Continue";
 							V.returnTo = "Main";
 							student();
-							jQuery("#slave-markets").empty().append(App.UI.newSlaveIntro(slave));
+							jQuery("#slave-markets").empty().append(
+								App.Desc.longSlave(slave, {market: slaveMarket}),
+								App.UI.newSlaveIntro(slave)
+							);
 						},
 					)
 				);
diff --git a/src/npc/interaction/fondleBoobs.js b/src/npc/interaction/fondleBoobs.js
index 81f815f9ba15af99290d3cd6499cf03967f01926..7d5b96aa815a229e2751e77a46c60baf2c55666a 100644
--- a/src/npc/interaction/fondleBoobs.js
+++ b/src/npc/interaction/fondleBoobs.js
@@ -160,13 +160,13 @@ App.Interact.fondleBoobs = function(slave) {
 			if (slave.lactation > 0) {
 				r.push(`milky`);
 			}
-			r.push(`nipples with your thumbs and fingers and tweak them in your fingertips, then you dab ${his} nipples with your thumbs, flicking them in different directions. ${He} moans at your playing with ${his} breasts, ${He} rubs ${himself} while you do, getting intensely aroused at the expert way you move around ${his} tits and nipples. You continue, rolling ${his} ${slave.nipples} nipples between your fingers and thumbs while ${he} gets increasingly frenzied at the continued stimulation. When it seems like ${he}'s close, you give them a hard pull, sending ${him} gasping over the edge of ecstasy.`);
+			r.push(`nipples with your thumbs and fingers and tweak them in your fingertips, then you dab ${his} nipples with your thumbs, flicking them in different directions. ${He} moans at your playing with ${his} breasts, rubbing ${himself} while you do, growing intensely aroused at the expert way you move around ${his} tits and nipples. You continue, rolling ${his} ${slave.nipples} nipples between your fingers and thumbs while ${he} gets increasingly frenzied at the continued stimulation. When it seems like ${he}'s close, you give them a hard pull, sending ${him} gasping over the edge of ecstasy.`);
 		} else {
 			r.push(`Then you alternate, gently probing the depths of the other nipple. You dig deep into both ${his} breasts, teasing what was once the tips of ${his}`);
 			if (slave.lactation > 0) {
 				r.push(`milky`);
 			}
-			r.push(`nipples with your fingers before vigorously fingering ${his} tits. ${He} moans at your playing with ${his} breasts, ${He} rubs ${himself} while you do, getting intensely aroused at the expert way you move around ${his} tits and nipples. You continue, adding more fingers into ${his} ${slave.nipples} nipples while ${he} gets increasingly frenzied at the continued stimulation. When it seems like ${he}'s close, you cram your whole fist in, sending ${him} gasping over the edge of ecstasy.`);
+			r.push(`nipples with your fingers before vigorously fingering ${his} tits. ${He} moans at your playing with ${his} breasts, rubbing ${himself} while you do, growing intensely aroused at the expert way you move around ${his} tits and nipples. You continue, adding more fingers into ${his} ${slave.nipples} nipples while ${he} gets increasingly frenzied at the continued stimulation. When it seems like ${he}'s close, you cram your whole fist in, sending ${him} gasping over the edge of ecstasy.`);
 		}
 	} else if (slave.devotion > 50 && slave.fetish === "dom" && slave.fetishKnown === 1 && slave.fetishStrength > 60) {
 		r.push(`${He} eagerly comes over to you, puffing ${his} chest out at you. When you place your hands on ${his}`);
@@ -380,9 +380,9 @@ App.Interact.fondleBoobs = function(slave) {
 		}
 		r.push(`at you longingly, hungry for more.`);
 	} else if (slave.devotion > 50) {
-		r.push(`${He} devotedly comes over to you, to stand between you and your desk. ${His} doting`);
+		r.push(`${He} devotedly comes over to you, to stand between you and your desk, ${his} doting`);
 		r.push(App.Desc.eyesColor(slave));
-		r.push(`looking in yours. You place your hands on ${his}`);
+		r.push(`gazing deep into yours. You place your hands on ${his}`);
 		if (slave.boobs >= 20000) {
 			r.push(`colossal tits, before sinking your body into their immense softness,`);
 		} else if (slave.boobs >= 10000) {
diff --git a/src/npc/interaction/passage/fSlaveSlaveAss.js b/src/npc/interaction/passage/fSlaveSlaveAss.js
index a91fed705032ce9461158fa5369b9b7890b45e33..7f86dfd0301be0155a98db2d84228e3619b1c5bc 100644
--- a/src/npc/interaction/passage/fSlaveSlaveAss.js
+++ b/src/npc/interaction/passage/fSlaveSlaveAss.js
@@ -354,7 +354,7 @@ App.Interact.fSlaveSlaveAss = function(slave, rapist) {
 		}
 		r.push(`into place. ${slave.slaveName} does ${his} best to hump ${himself} against the unwilling cock until you deal ${rapist.slaveName} a terrific swat across the ass and promise to give ${him2} more of the same until ${he2} gets going. ${He2} is still unenthusiastic, so you have ${him2} lie down and have ${slave.slaveName} ride ${himself} to orgasm. ${He2} resents what you made ${him2} do and fears you'll force ${him2} to do it again. Though ${slave.slaveName} accepts the situation, ${he} looks into ${rapist.slaveName}'s eyes with obvious apology.`);
 	} else if (rapist.fetish === "dom" && rapist.fetishStrength > 20 && rapist.devotion > 20) {
-		r.push(`${slave.slaveName} is tied and placed on the bed with ${his} asshole defenseless and available, and then you tell the randy ${rapist.slaveName} that it's all ${hers2}. The slave life has so affected ${rapist.slaveName} that ${he2} is quite eager to rape another slave for ${his2} pleasure. ${He2} penetrates ${him} immediately, fondling, pinching and licking while pistoning away, fully enjoying ${his2} dominant role, edging ${his2} poor toy again and again and making ${him} beg for release.`);
+		r.push(`${slave.slaveName} is tied and placed on the bed with ${his} asshole defenseless and available, and then you tell the randy ${rapist.slaveName} that it's all ${hers2}. The slave life has so affected ${rapist.slaveName} that ${he2} is quite eager to rape another slave for ${his2} pleasure. ${He2} penetrates ${him} immediately, fondling, pinching, and licking while pistoning away, fully enjoying ${his2} dominant role, edging ${his2} poor toy again and again and making ${him} beg for release.`);
 		if (slave.fetish === "dom") {
 			if (slave.devotion < -20) {
 				r.push(`By the end of the day ${slave.slaveName}'s abused backdoor is`);
diff --git a/src/npc/interaction/passage/fSlaveSlaveDick.js b/src/npc/interaction/passage/fSlaveSlaveDick.js
index 6d1cd239955f048ffe1df9bf53bd435f8a7aafa5..052d40a0171527959170d0713c4e8dc94a79a8d1 100644
--- a/src/npc/interaction/passage/fSlaveSlaveDick.js
+++ b/src/npc/interaction/passage/fSlaveSlaveDick.js
@@ -917,7 +917,7 @@ App.Interact.fSlaveSlaveDick = function(slave, rapist) {
 			rapist.vagina = 1;
 			rapist.fetishStrength += 1;
 		}
-		r.push(`${He2} begins playing with ${him2} immediately, fondling, pinching and licking while bouncing on the meaty shaft. Occasionally ${he2} stops, denying ${slave.slaveName} release and teasing ${him}, fully enjoying ${his2} dominant role.`);
+		r.push(`${He2} begins playing with ${him} immediately, fondling, pinching, and licking while bouncing on the meaty shaft. Occasionally ${he2} stops, denying ${slave.slaveName} release and teasing ${him}, fully enjoying ${his2} dominant role.`);
 		if (slave.dick > 0) {
 			if (slave.fetish === Fetish.SUBMISSIVE) {
 				r.push(`By the end of the session ${slave.slaveName}'s abused, pent-up penis has shot a massive load into ${rapist.slaveName}'s welcoming pussy. ${He} is glad to be dominated.`);
diff --git a/src/npc/interaction/passage/fSlaveSlaveVag.js b/src/npc/interaction/passage/fSlaveSlaveVag.js
index 98421890dba761f521b5b0162b61b7139746dde9..4c5eb5c5ec6a7b183bd906188049b18647d6bc46 100644
--- a/src/npc/interaction/passage/fSlaveSlaveVag.js
+++ b/src/npc/interaction/passage/fSlaveSlaveVag.js
@@ -365,7 +365,7 @@ App.Interact.fSlaveSlaveVag = function(slave, rapist) {
 		}
 		r.push(`into place. ${slave.slaveName} does ${his} best to hump ${himself} against the unwilling cock until you deal ${rapist.slaveName} a terrific swat across the ass and promise to give ${him2} more of the same until ${he2} gets going. ${He2} is still unenthusiastic, so you have ${him2} lie down and have ${slave.slaveName} ride ${himself} to orgasm. ${He2} resents what you made ${him2} do and fears you'll force ${him2} to do it again. Though ${slave.slaveName} accepts the situation, ${he} looks into ${rapist.slaveName}'s eyes with obvious apology.`);
 	} else if (rapist.fetish === "dom" && rapist.fetishStrength > 20 && rapist.devotion > 20) {
-		r.push(`${slave.slaveName} is tied and placed on the bed with ${his} pussy defenseless and available, and then you tell the randy ${rapist.slaveName} that it's all ${hers2}. The slave life has so affected ${rapist.slaveName} that ${he2} is quite eager to rape another slave for ${his2} pleasure. ${He2} penetrates ${him} immediately, fondling, pinching and licking while pistoning away, fully enjoying ${his2} dominant role, edging ${his2} poor toy again and again and making ${him} beg for release.`);
+		r.push(`${slave.slaveName} is tied and placed on the bed with ${his} pussy defenseless and available, and then you tell the randy ${rapist.slaveName} that it's all ${hers2}. The slave life has so affected ${rapist.slaveName} that ${he2} is quite eager to rape another slave for ${his2} pleasure. ${He2} penetrates ${him} immediately, fondling, pinching, and licking while pistoning away, fully enjoying ${his2} dominant role, edging ${his2} poor toy again and again and making ${him} beg for release.`);
 		if (slave.fetish === "dom") {
 			if (slave.devotion < -20) {
 				r.push(`By the end of the day ${slave.slaveName}'s abused cunt is`);