diff --git a/js/003-data/slaveWearData.js b/js/003-data/slaveWearData.js
index 187ad4e0269a891fab53f4964615630d298ae233..4bc7787d66ff7b464d9c46bf01be9f90fc1d5e5c 100644
--- a/js/003-data/slaveWearData.js
+++ b/js/003-data/slaveWearData.js
@@ -24,7 +24,7 @@
 App.Data.clothes = new Map([
 	["a Fuckdoll suit",
 		{
-			name: "a Fuckdoll suit",
+			name: "Fuckdoll suit",
 			exposure: 3,
 			fuckdoll: true
 		}
diff --git a/src/endWeek/saLongTermMentalEffects.js b/src/endWeek/saLongTermMentalEffects.js
index 785ae2e977ade19d59da700c19428dd9f4a16bc7..df248eb6019f35724d234cf4116cd99f26214dde 100644
--- a/src/endWeek/saLongTermMentalEffects.js
+++ b/src/endWeek/saLongTermMentalEffects.js
@@ -1385,8 +1385,8 @@ App.SlaveAssignment.longTermMentalEffects = (function() {
 				} else if (slave.assignment === "be the Schoolteacher" && V.schoolroom >= 20) {
 					r.push(`${His} paraphilia is satisfied by ${his} work as a sexual instructor; enough eyes are fixated on ${his} lessons.`);
 					slave.paraphiliaSatisfied = 1;
-				} else if (slave.clothes === "no clothing") {
-					r.push(`${His} paraphilia is satisfied by ${his} total nudity.`);
+				} else if (App.Data.clothes.get(slave.clothes).exposure >= 4) {
+					r.push(`${His} paraphilia is satisfied by ${his} nudity.`);
 					slave.paraphiliaSatisfied = 1;
 				} else {
 					r.push(`${He} doesn't seem to feel ${he}'s getting fucked in public enough, leaving the attention whore <span class="devotion dec">depressed and anxious.</span>`);
diff --git a/src/events/PE/concubineInterview.js b/src/events/PE/concubineInterview.js
index e356177791939d4e7580a3344b5b75ed1ab49b5e..c177077e95c218a58d7005c5badae8d07569f123 100644
--- a/src/events/PE/concubineInterview.js
+++ b/src/events/PE/concubineInterview.js
@@ -80,7 +80,7 @@ App.Events.PEConcubineInterview = class PEConcubineInterview extends App.Events.
 			} else {
 				t.push(`strides out`);
 			}
-			if (eventSlave.clothes === "no clothing") {
+			if (App.Data.clothes.get(eventSlave.clothes).exposure >= 4) {
 				t.push(`in magnificent nudity. It's a shock to old world values, no doubt, but the titillation should counterbalance that.`);
 			} else {
 				t.push(`resplendent in ${eventSlave.clothes}.`);
diff --git a/src/events/RESS/frighteningDick.js b/src/events/RESS/frighteningDick.js
index 2669b9a87a997ac709f11b793247ffe7b7f79bdd..bd3bcfed353d5197995e8f4d9ca3700f288d6858 100644
--- a/src/events/RESS/frighteningDick.js
+++ b/src/events/RESS/frighteningDick.js
@@ -112,7 +112,7 @@ App.Events.RESSFrighteningDick = class RESSFrighteningDick extends App.Events.Ba
 		function rape() {
 			t = [];
 
-			t.push(`Sometimes there's really no need to overthink things. You reach down, grab ${him} under the armpits, and haul ${him} up, throwing ${him} across your desk. ${He} lands on ${his} back, and the impact drives the wind out of ${him}, so ${he} lies there, <span class="gold">all possibility of resistance driven out of ${him}.</span> ${eventSlave.clothes === "no clothing" ? `${He}'s already naked, so there's no need to` : "You"} tear the clothes off ${him}. You force yourself in between ${his} legs as ${he} struggles to get ${his} breath back, and ${he} gets another good look at the formidable dick that's about to be slammed inside ${him}`);
+			t.push(`Sometimes there's really no need to overthink things. You reach down, grab ${him} under the armpits, and haul ${him} up, throwing ${him} across your desk. ${He} lands on ${his} back, and the impact drives the wind out of ${him}, so ${he} lies there, <span class="gold">all possibility of resistance driven out of ${him}.</span> ${App.Data.clothes.get(eventSlave.clothes).exposure >= 4 ? `${He}'s already naked, so there's no need to` : "You"} tear the clothes off ${him}. You force yourself in between ${his} legs as ${he} struggles to get ${his} breath back, and ${he} gets another good look at the formidable dick that's about to be slammed inside ${him}`);
 			if (eventSlave.belly >= 5000) {
 				t.push(`before it disappears beneath ${his} ${eventSlave.bellyPreg >= 3000 ? "pregnant" : belly} belly`);
 			}
diff --git a/src/events/RESS/meanGirls.js b/src/events/RESS/meanGirls.js
index da37c0c5685d2551ab3f55f7b91e2e08413a3833..c0924c6b42634e0812644692432a2ff00281b05b 100644
--- a/src/events/RESS/meanGirls.js
+++ b/src/events/RESS/meanGirls.js
@@ -98,147 +98,17 @@ App.Events.RESSMeanGirls = class RESSMeanGirls extends App.Events.BaseEvent {
 			r.push(`reluctantly`);
 		}
 		r.push(`showing off ${his}`);
-		if (eventSlave.clothes === "no clothing") {
-			r.push(`nude`);
-			if (eventSlave.bellyPreg >= 1500) {
-				r.push(`pregnant`);
-			} else if (eventSlave.bellyImplant >= 1500) {
-				r.push(`gravid`);
-			} else if (eventSlave.bellyFluid >= 1500) {
-				r.push(`bloated`);
-			}
-			r.push(`body`);
+		if (eventSlave.bellyPreg >= 1500) {
+			r.push(`pregnant`);
+		} else if (eventSlave.bellyImplant >= 1500) {
+			r.push(`gravid`);
+		} else if (eventSlave.bellyFluid >= 1500) {
+			r.push(`bloated`);
+		}
+		if (App.Data.clothes.get(eventSlave.clothes).exposure >= 4) {
+			r.push(`nude body`);
 		} else {
-			if (eventSlave.bellyPreg >= 1500) {
-				r.push(`pregnant`);
-			} else if (eventSlave.bellyImplant >= 1500) {
-				r.push(`gravid`);
-			} else if (eventSlave.bellyFluid >= 1500) {
-				r.push(`bloated`);
-			}
-			r.push(`body in ${his}`);
-			switch (eventSlave.clothes) {
-				case "a toga":
-					r.push(`toga`);
-					break;
-				case "a huipil":
-					r.push(`huipil`);
-					break;
-				case "a long qipao":
-				case "a slutty qipao":
-					r.push(`qipao`);
-					break;
-				case "a penitent nuns habit":
-					r.push(`habit`);
-					break;
-				case "a slave gown":
-				case "a ball gown":
-					r.push(`gown`);
-					break;
-				case "a comfortable bodysuit":
-					r.push(`bodysuit`);
-					break;
-				case "a leotard":
-					r.push(`leotard`);
-					break;
-				case "a bunny outfit":
-					r.push(`bunny outfit`);
-					break;
-				case "a nice nurse outfit":
-					r.push(`nurse outfit`);
-					break;
-				case "a slutty nurse outfit":
-					r.push(`slutty nurse outfit`);
-					break;
-				case "a schoolgirl outfit":
-					r.push(`school clothes`);
-					break;
-				case "a hijab and abaya":
-					r.push(`hijab and abaya`);
-					break;
-				case "a kimono":
-					r.push(`kimono`);
-					break;
-				case "a nice maid outfit":
-					r.push(`maid outfit`);
-					break;
-				case "a slutty maid outfit":
-					r.push(`skimpy maid outfit`);
-					break;
-				case "a biyelgee costume":
-				case "a dirndl":
-				case "a halter top dress":
-				case "a mini dress":
-				case "a maternity dress":
-					r.push(`dress`);
-					break;
-				case "a latex catsuit":
-					r.push(`latex catsuit`);
-					break;
-				case "a military uniform":
-				case "a mounty outfit":
-				case "a red army uniform":
-				case "a schutzstaffel uniform":
-				case "a slutty schutzstaffel uniform":
-					r.push(`uniform`);
-					break;
-				case "battlearmor":
-					r.push(`battlearmor`);
-					break;
-				case "Imperial Plate":
-					r.push(`imperial armor`);
-					break;
-				case "lederhosen":
-					r.push(`lederhosen`);
-					break;
-				case "spats and a tank top":
-					r.push(`spats`);
-					break;
-				case "a burkini":
-				case "a monokini":
-					r.push(`swimsuit`);
-					break;
-				case "a chattel habit":
-				case "a fallen nuns habit":
-					r.push(`slutty habit`);
-					break;
-				case "a cheerleader outfit":
-					r.push(`cheerleader outfit`);
-					break;
-				case "a cybersuit":
-					r.push(`cybersuit`);
-					break;
-				case "a tight Imperial bodysuit":
-					r.push(`imperial bodysuit`);
-					break;
-				case "an apron":
-					r.push(`apron`);
-					break;
-				case "a scalemail bikini":
-					r.push(`scalemail bikini`);
-					break;
-				case "a slutty outfit":
-					r.push(`slutty outfit`);
-					break;
-				case "a string bikini":
-					r.push(`string bikini`);
-					break;
-				case "a succubus outfit":
-					r.push(`succubus getup`);
-					break;
-				case "a hijab and blouse":
-				case "conservative clothing":
-					r.push(`conservative clothes`);
-					break;
-				case "a bimbo outfit":
-					r.push(`bimbo outfit`);
-					break;
-				case "a courtesan dress":
-					r.push(`courtesan dress`);
-					break;
-				default:
-					r.push(`${eventSlave.clothes}`);
-			}
+			r.push(`body in ${his} ${App.Data.clothes.get(eventSlave.clothes).name.toLowerCase()}`);
 		}
 		r.push(`and flirting with passersby. Or ${he} would be, if ${he} weren't surrounded by a hostile group of girls. They're very obviously inebriated, rich, vapid, and on vacation, and their rapid-fire bitchiness makes the cause clear.`);
 		App.Events.addParagraph(node, r);
diff --git a/src/events/RESS/tooThinForCumDiet.js b/src/events/RESS/tooThinForCumDiet.js
index 84de69d9e16fe4c5b2918b79145a1f98edf90d27..ecc36a0d53602de673ac69965b1501fdb875fdc3 100644
--- a/src/events/RESS/tooThinForCumDiet.js
+++ b/src/events/RESS/tooThinForCumDiet.js
@@ -42,7 +42,7 @@ App.Events.RESSTooThinForCumDiet = class RESSTooThinForCumDiet extends App.Event
 		t.push(`You are in your office, tending to the tedious business of requisition orders for your penthouse when you see`);
 		t.push(contextualIntro(V.PC, eventSlave, "DOM"));
 		t.push(`appear outside your door. ${He} hovers outside in the hall, peeking ${his} head around the entry-way, looking very unsure about disturbing you. You stop what you're doing and call ${him} in. ${He}'s reticent at first, but then ${he} obediently steps into your office. ${He} is`);
-		if (eventSlave.clothes === "no clothing") {
+		if (App.Data.clothes.get(eventSlave.clothes).exposure >= 4) {
 			t.push(`forced to remain naked at all times, and the most striking thing about ${his} body is how`);
 			if (eventSlave.belly >= 100000) {
 				if (eventSlave.bellyPreg >= 3000) {
diff --git a/src/events/RESS/waistlineWoes.js b/src/events/RESS/waistlineWoes.js
index c03c65210abf70e41fc1fe843f3377cf187b98f1..77965ec6a9e188be8debd561047880ed1e03b2da 100644
--- a/src/events/RESS/waistlineWoes.js
+++ b/src/events/RESS/waistlineWoes.js
@@ -235,16 +235,16 @@ App.Events.RESSWaistlineWoes = class RESSWaistlineWoes extends App.Events.BaseEv
 			if (eventSlave.behavioralQuirk === "fitness") {
 				t.push(`${He} brightens, catching on immediately and nodding ${his} head with understanding`);
 				if (V.PC.dick === 0) {
-					t.push(`before quickly ${eventSlave.clothes !== "no clothing" && eventSlave.clothes !== "body oil" ? `shedding ${his} clothes and` : ""} retrieving an appropriate dildo, eager for the workout.`);
+					t.push(`before quickly ${App.Data.clothes.get(eventSlave.clothes).exposure <= 3 ? `shedding ${his} clothes and` : ""} retrieving an appropriate dildo, eager for the workout.`);
 				} else {
-					t.push(`${eventSlave.clothes !== "no clothing" && eventSlave.clothes !== "body oil" ? "before" : ""} quickly ${eventSlave.clothes !== "no clothing" && eventSlave.clothes !== "body oil" ? `shedding ${his} clothes` : ""}, eager for the workout.`);
+					t.push(`${App.Data.clothes.get(eventSlave.clothes).exposure <= 3 ? "before" : ""} quickly ${App.Data.clothes.get(eventSlave.clothes).exposure <= 3 ? `shedding ${his} clothes` : ""}, eager for the workout.`);
 				}
 			} else {
 				t.push(`${He} catches on quickly, nodding ${his} head with understanding`);
 				if (V.PC.dick === 0) {
-					t.push(`before ${eventSlave.clothes !== "no clothing" && eventSlave.clothes !== "body oil" ? `shedding ${his} clothes and` : ""} retrieving an appropriate dildo, glad for the opportunity.`);
+					t.push(`before ${App.Data.clothes.get(eventSlave.clothes).exposure <= 3 ? `shedding ${his} clothes and` : ""} retrieving an appropriate dildo, glad for the opportunity.`);
 				} else {
-					t.push(`${eventSlave.clothes !== "no clothing" && eventSlave.clothes !== "body oil" ? `before shedding ${his} clothes` : ""}, glad for the opportunity.`);
+					t.push(`${App.Data.clothes.get(eventSlave.clothes).exposure <= 3 ? `before shedding ${his} clothes` : ""}, glad for the opportunity.`);
 				}
 			}
 			t.push(`${His} hips settle close to yours, moving seductively while ${he} makes a show of undressing you. ${His} fingers smooth`);
diff --git a/src/events/reRecruit/femaleRecruit.js b/src/events/reRecruit/femaleRecruit.js
index 3f443fc4839a7fe7b479330cd4e9f80ec7b6c300..7d79f308f3b9fd61d010b4b744a9e61cd9552167 100644
--- a/src/events/reRecruit/femaleRecruit.js
+++ b/src/events/reRecruit/femaleRecruit.js
@@ -54,7 +54,7 @@ App.Events.recFemaleRecruit = class recFemaleRecruit extends App.Events.BaseEven
 			let r = [];
 			cashX(forceNeg(contractCost), "slaveTransfer", slave);
 			r.push(`You complete the legalities and biometric scanning quickly and without fuss. ${slave.slaveName} bounces nervously on ${his} heels. Finally ${he} works up ${his} courage and asks,`);
-			if (S.HeadGirl.clothes !== "no clothing") {
+			if (App.Data.clothes.get(S.HeadGirl.clothes).exposure <= 3) {
 				r.push(Spoken(slave, `"Can I have ${S.HeadGirl.clothes} like ${S.HeadGirl.slaveName}?"`));
 			} else {
 				r.push(Spoken(slave, `"Can I work with ${S.HeadGirl.slaveName}?"`));
@@ -71,7 +71,7 @@ App.Events.recFemaleRecruit = class recFemaleRecruit extends App.Events.BaseEven
 			let r = [];
 			cashX(cost, "slaveTransfer");
 			r.push(`You complete the legalities and biometric scanning quickly and without fuss. ${slave.slaveName} bounces nervously on ${his} heels. Finally ${he} works up ${his} courage and asks,`);
-			if (S.HeadGirl.clothes !== "no clothing") {
+			if (App.Data.clothes.get(S.HeadGirl.clothes).exposure <= 3) {
 				r.push(Spoken(slave, `"Can I have ${S.HeadGirl.clothes} like ${S.HeadGirl.slaveName}?"`));
 			} else {
 				r.push(Spoken(slave, `"Can I work with ${S.HeadGirl.slaveName}?"`));
diff --git a/src/events/reRecruit/maleRecruit.js b/src/events/reRecruit/maleRecruit.js
index 584898eebef9301ab3d3084f27a0a42de92b2797..3f33670b2f8aa39f928ec524adec5be78e73388d 100644
--- a/src/events/reRecruit/maleRecruit.js
+++ b/src/events/reRecruit/maleRecruit.js
@@ -50,7 +50,7 @@ App.Events.recMaleRecruit = class recMaleRecruit extends App.Events.BaseEvent {
 			let r = [];
 			cashX(forceNeg(contractCost), "slaveTransfer", slave);
 			r.push(`You complete the legalities and biometric scanning quickly and without fuss. ${slave.slaveName} bounces nervously on ${his} heels. Finally ${he} works up ${his} courage and asks,`);
-			if (S.HeadGirl.clothes !== "no clothing") {
+			if (App.Data.clothes.get(S.HeadGirl.clothes).exposure <= 3) {
 				r.push(Spoken(slave, `"Can I have ${S.HeadGirl.clothes} like ${S.HeadGirl.slaveName}?"`));
 			} else {
 				r.push(Spoken(slave, `"Can I work with ${S.HeadGirl.slaveName}?"`));
@@ -67,7 +67,7 @@ App.Events.recMaleRecruit = class recMaleRecruit extends App.Events.BaseEvent {
 			let r = [];
 			cashX(cost, "slaveTransfer");
 			r.push(`You complete the legalities and biometric scanning quickly and without fuss. ${slave.slaveName} bounces nervously on ${his} heels. Finally ${he} works up ${his} courage and asks,`);
-			if (S.HeadGirl.clothes !== "no clothing") {
+			if (App.Data.clothes.get(S.HeadGirl.clothes).exposure <= 3) {
 				r.push(Spoken(slave, `"Can I have ${S.HeadGirl.clothes} like ${S.HeadGirl.slaveName}?"`));
 			} else {
 				r.push(Spoken(slave, `"Can I work with ${S.HeadGirl.slaveName}?"`));
diff --git a/src/js/birth/birth.js b/src/js/birth/birth.js
index 5122c25a3dda5616df3c90883d6c800c6598d32d..d811de7dd9b0c0feb9529fe712c4ec458ce5a178 100644
--- a/src/js/birth/birth.js
+++ b/src/js/birth/birth.js
@@ -7137,7 +7137,7 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false} = {})
 			babyIntro = `${his} ${babies}${UH}`;
 		}
 
-		if (undressed === 0 && slave.clothes !== "no clothing" && slave.clothes !== "body oil") {
+		if (undressed === 0 && App.Data.clothes.get(slave.clothes).exposure <= 3) {
 			if (slave.fetish === "mindbroken") {
 				r.push(`Instinctively, ${he} begins to push out`);
 				if (slave.broodmother > 0) {
@@ -8505,7 +8505,7 @@ globalThis.birth = function(slave, {birthStorm = false, cSection = false} = {})
 						}
 					}
 			}
-		} else if (slave.clothes === "no clothing" || slave.clothes === "body oil") {
+		} else if (App.Data.clothes.get(slave.clothes).exposure <= 3) {
 			if (slave.fetish === "mindbroken") {
 				r.push(`Instinctively, ${he} begins to push out`);
 				if (slave.broodmother > 0) {
diff --git a/src/js/slaveSummaryWidgets.js b/src/js/slaveSummaryWidgets.js
index e28ed8c61cd915ff9da266c454ffe54eda2cce49..99398330f5262b7522ae8200e73229c398bd45a3 100644
--- a/src/js/slaveSummaryWidgets.js
+++ b/src/js/slaveSummaryWidgets.js
@@ -137,7 +137,7 @@ App.UI.SlaveSummaryRenderers = function() {
 			}
 			if (slave.vagina === 0) {
 				makeSpan(c, "VV", "lime");
-			} else if ((slave.pregKnown === 1) && canStand(slave) && (slave.clothes === "no clothing" || slave.clothes === "body oil") && (slave.shoes === "none")) {
+			} else if ((slave.pregKnown === 1) && canStand(slave) && (App.Data.clothes.get(slave.clothes).exposure >= 3) && (slave.shoes === "none")) {
 				makeSpan(c, "NBP", "pink");
 			}
 			if (slave.anus === 0) {
@@ -459,7 +459,7 @@ App.UI.SlaveSummaryRenderers = function() {
 			}
 			if (slave.vagina === 0) {
 				helpers.makeSpan(c, "Virgin.", "lime");
-			} else if ((slave.pregKnown === 1) && canStand(slave) && (slave.clothes === "no clothing" || slave.clothes === "body oil") && (slave.shoes === "none")) {
+			} else if ((slave.pregKnown === 1) && canStand(slave) && (App.Data.clothes.get(slave.clothes).exposure >= 4) && (slave.shoes === "none")) {
 				helpers.makeSpan(c, "Naked, barefoot, and pregnant.", "pink");
 			}
 			if (slave.anus === 0) {
diff --git a/src/npc/descriptions/crotch/vaginalAccessory.js b/src/npc/descriptions/crotch/vaginalAccessory.js
index 9b5227dfd120119bf540ebe4608166bda4d6ef69..c607dbb59b608b3b7c6645dc7887195699e32381 100644
--- a/src/npc/descriptions/crotch/vaginalAccessory.js
+++ b/src/npc/descriptions/crotch/vaginalAccessory.js
@@ -67,7 +67,7 @@ App.Desc.vaginalAccessory = function(slave) {
 		default:
 			if (slave.chastityVagina) {
 				r.push(`${His} pussy is protected by a chastity`);
-				if (slave.clothes !== "no clothing") {
+				if (App.Data.clothes.get(slave.clothes).exposure <= 3) {
 					r.push(`belt worn under ${his} clothing.`);
 				} else {
 					r.push(`belt.`);
diff --git a/src/npc/interaction/fAbuse.tw b/src/npc/interaction/fAbuse.tw
index abe601fedf816d28f4e40c93ee0cb185f19668d7..009d2e5bb01e9eaab8e66e39d3ecee12ae512013 100644
--- a/src/npc/interaction/fAbuse.tw
+++ b/src/npc/interaction/fAbuse.tw
@@ -319,9 +319,9 @@
 <</if>>
 
 <<if ($PC.dick != 0)>>
-	<<if hasAnyArms(getSlave($AS)) && (getSlave($AS).clothes !== "no clothing")>>While $he strips, your<<else>>Your<</if>> stiffening cock rises<<if $PC.vagina != -1>>, revealing your pussy and<</if>> earning
+	<<if hasAnyArms(getSlave($AS)) && App.Data.clothes.get(getSlave($AS).clothes).exposure <= 3)>>While $he strips, your<<else>>Your<</if>> stiffening cock rises<<if $PC.vagina != -1>>, revealing your pussy and<</if>> earning
 <<else>>
-	<<if hasAnyArms(getSlave($AS)) && (getSlave($AS).clothes !== "no clothing")>>While $he strips, you<<else>>You<</if>> don a cruelly large strap-on, earning
+	<<if hasAnyArms(getSlave($AS)) && App.Data.clothes.get(getSlave($AS).clothes).exposure <= 3)>>While $he strips, you<<else>>You<</if>> don a cruelly large strap-on, earning
 <</if>>
 <<if (getSlave($AS).fetish == "masochist") && (getSlave($AS).fetishKnown == 1) && (getSlave($AS).fetishStrength > 95)>>
 	a sultry look
@@ -333,7 +333,7 @@
 from your victim.
 
 <<if isAmputee(getSlave($AS))>>
-	<<if (getSlave($AS).clothes !== "no clothing")>>Growing impatient, you rip the clothes off $his limbless torso<<else>>You walk up to $him<</if>> and spank $his brutally; spinning $him to present
+	<<if App.Data.clothes.get(getSlave($AS).clothes).exposure <= 3)>>Growing impatient, you rip the clothes off $his limbless torso<<else>>You walk up to $him<</if>> and spank $him brutally; spinning $him to present
 	<<if (getSlave($AS).vagina > -1)>>
 		$his holes
 	<<else>>
diff --git a/src/npc/interaction/fAnimal.js b/src/npc/interaction/fAnimal.js
index d8a064064ce3a29c66ae694fe26b0374d4d78c0c..d9a129bfbdb49283dc18279bc2f2f9bc4e50f9c5 100644
--- a/src/npc/interaction/fAnimal.js
+++ b/src/npc/interaction/fAnimal.js
@@ -265,7 +265,7 @@ App.Interact.fAnimal = function(slave, type) {
 			if (act === Acts.ORAL) {
 				r.push(`You have ${him} kneel on the floor before calling in the ${animal.name}. The beast slowly saunters up to the slave where ${he} waits, showing little concern when the slave reaches out and begins masturbating it to begin the process of getting the animal hard. Once the ${animal.name} is hard enough, ${slave.slaveName} takes its cock and begins to give it a few tentative licks before finally putting it in ${his} mouth. `);
 			} else {
-				r.push(`You have ${him} ${slave.clothes !== "no clothing" ? `take off ${his} clothes and ` : ``}get on the floor, ass in the air, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few short moments for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `);
+				r.push(`You have ${him} ${App.Data.clothes.get(slave.clothes).exposure <= 3 ? `take off ${his} clothes and ` : ``}get on the floor, ass in the air, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few short moments for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `);
 			}
 
 			switch (animal) {
@@ -340,7 +340,7 @@ App.Interact.fAnimal = function(slave, type) {
 			if (act === Acts.ORAL) {
 				r.push(`You tell ${him} to kneel on the floor before calling in the ${animal.name}. The beast slowly saunters up to the slave where ${he} waits, showing little concern when the slave hesitantly reaches out and begins masturbating it to begin the process of getting the animal hard. Once the ${animal.name} is hard enough, ${slave.slaveName} takes its cock, and, after taking a moment to steel ${his} resolve, begins to give it a few reluctant licks before putting it in ${his} mouth. `);
 			} else {
-				r.push(`You tell ${him} to ${slave.clothes !== "no clothing" ? `take off ${his} clothes and ` : ``}get on the floor, ass in the air, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few seconds for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `);
+				r.push(`You tell ${him} to ${App.Data.clothes.get(slave.clothes).exposure <= 3 ? `take off ${his} clothes and ` : ``}get on the floor, ass in the air, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few seconds for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `);
 			}
 
 			switch (animal) {
@@ -415,7 +415,7 @@ App.Interact.fAnimal = function(slave, type) {
 			if (act === Acts.ORAL) {
 				r.push(`You force ${him} to kneel on the floor before calling in the ${animal.name}. The beast slowly saunters up to the slave where ${he} waits, showing little concern when the slave reluctantly reaches out and begins masturbating it to begin the process of getting the animal hard. Once the ${animal.name} is hard enough, ${slave.slaveName} takes its cock and begins to give it a few tentative licks before finally putting it in ${his} mouth. `);
 			} else {
-				r.push(`You force ${him} to ${slave.clothes !== "no clothing" ? `take off ${his} clothes and ` : ``}get on the floor, ass in the air, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few short moments for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `);
+				r.push(`You force ${him} to ${App.Data.clothes.get(slave.clothes).exposure <= 3 ? `take off ${his} clothes and ` : ``}get on the floor, ass in the air, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few short moments for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `);
 			}
 
 			switch (animal) {
@@ -490,7 +490,7 @@ App.Interact.fAnimal = function(slave, type) {
 			if (act === Acts.ORAL) {
 				r.push(`You have to physically force ${him} to kneel on the floor before calling in the ${animal.name}. The beast slowly saunters up to the slave where ${he} is restrained, showing little concern when another slave reaches out and begins masturbating it to begin the process of getting the animal hard. Once the ${animal.name} is hard enough, the slave takes its cock and lines it up with ${slave.slaveName}'s mouth. The animal needs no prompting, and thrusts itself into ${his} ring-gagged mouth. `);
 			} else {
-				r.push(`You have to physically force ${him} to ${slave.clothes !== "no clothing" ? `take off ${his} clothes and ` : ``} get on the floor, ass in the air and restraints around ${his} wrists and ankles, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few short moments for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `);
+				r.push(`You have to physically force ${him} to ${App.Data.clothes.get(slave.clothes).exposure <= 3 ? `take off ${his} clothes and ` : ``} get on the floor, ass in the air and restraints around ${his} wrists and ankles, before calling in the ${animal.name}. The beast slowly saunters up to the slave, where it takes only a few short moments for its animal brain to realize that what it is standing behind is a warm hole that needs to be filled with seed. `);
 			}
 
 			switch (animal) {
diff --git a/src/uncategorized/PESS.tw b/src/uncategorized/PESS.tw
index d59d24ef61123ecc307df1dd998740d02846c6d8..b9a614a2f4fae061c3708ecc1bc3fdaa4ceb407b 100644
--- a/src/uncategorized/PESS.tw
+++ b/src/uncategorized/PESS.tw
@@ -157,11 +157,12 @@ The business is brief and inconsequential, but it's good to speak with $him. Whe
 <<= App.UI.slaveDescriptionDialog($activeSlave)>> comes wearily into your office at the end of $his day to check in with you, like a good Head Girl should. You're busy at the moment, so $he waits quietly, not wanting to interrupt you. $He seems tired, and leans <<if $activeSlave.physicalAge > 35>>heavily<<else>>lightly<</if>> against the back of the office couch<<if hasAnyProstheticArms($activeSlave)>>, $his mechanical hand hard against the leather<</if>>. Your Head Girl is a <<if $activeSlave.fetish == "dom">>very dominant $desc<<elseif $activeSlave.fetish == "sadist">>sadistic and dominant $desc<<else>>dutiful $desc and takes $his leadership position seriously<</if>>, but $he knows $he doesn't have to pretend to be invincible around you.
 <br><br>
 When you've finished your task, you raise your eyes to examine $him. $He's standing with $his <<if $activeSlave.hips > 1>>broad<<elseif $activeSlave.hips < -1>>narrow<<else>>womanly<</if>> hips slightly cocked and $his <<if $activeSlave.muscles > 95>>incredibly muscular<<elseif $activeSlave.weight > 10>>soft<<elseif $activeSlave.muscles > 10>>hard<<else>>trim<</if>> thighs bowed a bit wide. You immediately understand why: it's $his job to impregnate fertile slaves, a duty $he takes very seriously, and $his dick must be very sore.
-<<if $activeSlave.clothes == "no clothing">>
+<<set _exposure = App.Data.clothes.get($activeSlave.clothes).exposure>>
+<<if _exposure >= 4>>
 	$He's nude, making it obvious that $his poor soft member has done its duty today. It even looks a little moist, as though it bred a fertile slave's pussy only a few minutes ago.
-<<elseif ["body oil", "chains", "clubslut netting", "restrictive latex", "shibari ropes", "uncomfortable straps"].indexOf($activeSlave.clothes) != -1>>
+<<elseif _exposure == 3>>
 	$His clothes don't cover $his dick, making it obvious that $his poor soft member has done its duty today. It even looks a little moist, as though it bred a fertile slave's pussy only a few minutes ago.
-<<elseif ["a comfortable bodysuit", "a cybersuit", "a fallen nuns habit", "a latex catsuit", "a leotard", "a monokini", "a scalemail bikini", "a string bikini", "attractive lingerie for a pregnant woman", "attractive lingerie", "harem gauze", "kitty lingerie", "restrictive latex", "striped panties", "slutty jewelry", "spats and a tank top", "stretch pants and a crop-top"].indexOf($activeSlave.clothes) != -1>>
+<<elseif _exposure == 2>>
 	$His clothes cover $his groin, but they're pretty tight, making it clear that $his poor soft member has done its duty today.
 <<else>>
 	$His clothes are relatively modest, so you can't see it, but it's clear that $his poor soft member has done its duty today.
diff --git a/src/uncategorized/RESS.tw b/src/uncategorized/RESS.tw
index b2ff185e6afaf43225d551f9e914884c13d200dd..da66dac5a3fa007c5dfc788423ba92b1399a6078 100644
--- a/src/uncategorized/RESS.tw
+++ b/src/uncategorized/RESS.tw
@@ -3287,84 +3287,17 @@ One afternoon, $assistant.name informs you $he that $he has a non-urgent matter
 brings up a video feed.
 <br><br>
 $activeSlave.slaveName is doing $his job, standing in an area of the arcology that's busy at this time of night, <<if $activeSlave.energy > 95>>eagerly<<elseif $activeSlave.devotion > 95>>diligently<<elseif $activeSlave.devotion > 20>>obediently<<else>>reluctantly<</if>> showing off $his
-<<if $activeSlave.clothes == "no clothing">>
-	nude <<if $activeSlave.bellyPreg >= 1500>>pregnant <<elseif $activeSlave.bellyImplant >= 1500>>gravid <<elseif $activeSlave.bellyFluid >= 1500>>bloated <</if>>body
+<<if $activeSlave.bellyPreg >= 1500>>
+	pregnant
+<<elseif $activeSlave.bellyImplant >= 1500>>
+	gravid
+<<elseif $activeSlave.bellyFluid >= 1500>>
+	bloated
+<</if>>
+<<if App.Data.clothes.get($activeSlave.clothes).exposure >= 4>>
+	nude body
 <<else>>
-	<<if $activeSlave.bellyPreg >= 1500>>pregnant <<elseif $activeSlave.bellyImplant >= 1500>>gravid <<elseif $activeSlave.bellyFluid >= 1500>>bloated <</if>>body in $his
-	<<switch $activeSlave.clothes>>
-	<<case "a toga">>
-		toga
-	<<case "a huipil">>
-		huipil
-	<<case "a long qipao" "a slutty qipao">>
-		qipao
-	<<case "a penitent nuns habit">>
-		habit
-	<<case "a slave gown" "a ball gown">>
-		gown
-	<<case "a comfortable bodysuit">>
-		bodysuit
-	<<case "a leotard">>
-		leotard
-	<<case "a bunny outfit">>
-		bunny outfit
-	<<case "a nice nurse outfit">>
-		nurse outfit
-	<<case "a slutty nurse outfit">>
-		slutty nurse outfit
-	<<case "a schoolgirl outfit">>
-		school clothes
-	<<case "a hijab and abaya">>
-		hijab and abaya
-	<<case "a kimono">>
-		kimono
-	<<case "a nice maid outfit">>
-		maid outfit
-	<<case "a slutty maid outfit">>
-		skimpy maid outfit
-	<<case "a biyelgee costume" "a dirndl" "a halter top dress" "a mini dress" "a maternity dress">>
-		dress
-	<<case "a latex catsuit">>
-		latex catsuit
-	<<case "a military uniform" "a mounty outfit" "a red army uniform" "a schutzstaffel uniform" "a slutty schutzstaffel uniform">>
-		uniform
-	<<case "battlearmor">>
-		battlearmor
-	<<case "Imperial Plate">>
-		imperial armor
-	<<case "lederhosen">>
-		lederhosen
-	<<case "spats and a tank top">>
-		spats
-	<<case "a burkini" "a monokini">>
-		swimsuit
-	<<case "a chattel habit" "a fallen nuns habit">>
-		slutty habit
-	<<case "a cheerleader outfit">>
-		cheerleader outfit
-	<<case "a cybersuit">>
-		cybersuit
-	<<case "a tight Imperial bodysuit">>
-		imperial bodysuit
-	<<case "an apron">>
-		apron
-	<<case "a scalemail bikini">>
-		scalemail bikini
-	<<case "a slutty outfit">>
-		slutty outfit
-	<<case "a string bikini">>
-		string bikini
-	<<case "a succubus outfit">>
-		succubus getup
-	<<case "a hijab and blouse" "conservative clothing">>
-		conservative clothes
-	<<case "a bimbo outfit">>
-		bimbo outfit
-	<<case "a courtesan dress">>
-		courtesan dress
-	<<default>>
-		$activeSlave.clothes
-	<</switch>>
+	body in $his <<= App.Data.clothes.get($activeSlave.clothes).name.toLowerCase()>>
 <</if>>
 and flirting with passersby. Or $he would be, if $he weren't surrounded by a group of shame-faced college boys. They're very obviously rich, naïve, and inexperienced with both sex and the Free Cities, and their complete lack of confidence in approaching $activeSlave.slaveName make that clear.
 <br><br>
@@ -16971,10 +16904,6 @@ $He cranes $his neck, glancing over $his shoulder to give you a pleading look.
 		<</if>>
 		$He returns quickly, in $his proper
 		<<switch $activeSlave.clothes>>
-		<<case "a toga">>
-			toga.
-		<<case "a huipil">>
-			huipil.
 		<<case "a long qipao" "a slutty qipao">>
 			qipao.
 		<<case "a penitent nuns habit">>
@@ -16983,75 +16912,33 @@ $He cranes $his neck, glancing over $his shoulder to give you a pleading look.
 			gown.
 		<<case "a comfortable bodysuit">>
 			bodysuit.
-		<<case "a leotard">>
-			leotard.
-		<<case "a bunny outfit">>
-			bunny outfit.
-		<<case "a nice nurse outfit">>
-			nurse outfit.
-		<<case "a slutty nurse outfit">>
-			slutty nurse outfit.
 		<<case "a schoolgirl outfit">>
 			school clothes.
-		<<case "a hijab and abaya">>
-			hijab and abaya.
-		<<case "a kimono">>
-			kimono.
 		<<case "a nice maid outfit">>
 			maid outfit.
 		<<case "a slutty maid outfit">>
 			skimpy maid outfit.
 		<<case "a biyelgee costume" "a dirndl" "a halter top dress" "a mini dress" "a maternity dress">>
 			dress.
-		<<case "a latex catsuit">>
-			latex catsuit.
 		<<case "a military uniform" "a mounty outfit" "a red army uniform" "a schutzstaffel uniform" "a slutty schutzstaffel uniform">>
 			uniform.
-		<<case "battlearmor">>
-			battlearmor.
-		<<case "Imperial Plate">>
-			imperial armor.
-		<<case "lederhosen">>
-			lederhosen.
 		<<case "spats and a tank top">>
 			spats.
 		<<case "a burkini" "a monokini">>
 			swimsuit.
 		<<case "a chattel habit" "a fallen nuns habit">>
 			slutty habit.
-		<<case "a cheerleader outfit">>
-			cheerleader outfit.
-		<<case "a cybersuit">>
-			cybersuit.
-		<<case "a tight Imperial bodysuit">>
-			imperial bodysuit.
-		<<case "an apron">>
-			apron.
-		<<case "a scalemail bikini">>
-			scalemail bikini.
-		<<case "a slutty outfit">>
-			slutty outfit.
-		<<case "a string bikini">>
-			string bikini.
 		<<case "a succubus outfit">>
 			succubus getup.
 		<<case "a hijab and blouse" "conservative clothing">>
 			conservative clothes.
-		<<case "a bimbo outfit">>
-			bimbo outfit.
-		<<case "a courtesan dress">>
-			courtesan dress.
 		<<default>>
-			$activeSlave.clothes.
+			<<= App.Data.clothes.get($activeSlave.clothes).name.toLowerCase()>>
 		<</switch>>
 		You tell $him that you like how $he looks, and that $he's pretty. $He wasn't expecting such a blunt compliment, and <<if canSee($activeSlave)>>$his <<= App.Desc.eyesColor($activeSlave)>> flick down to<<else>>$he faces<</if>> the ground for a moment as $he blushes. "T-thank you, <<Master>>," $he stutters.
 		<br><br>
 		You add that $he looks so good that $he had better take $his nice clean
 		<<switch $activeSlave.clothes>>
-		<<case "a toga">>
-			toga
-		<<case "a huipil">>
-			huipil
 		<<case "a long qipao" "a slutty qipao">>
 			qipao
 		<<case "a penitent nuns habit">>
@@ -17060,66 +16947,30 @@ $He cranes $his neck, glancing over $his shoulder to give you a pleading look.
 			gown
 		<<case "a comfortable bodysuit">>
 			bodysuit
-		<<case "a leotard">>
-			leotard
-		<<case "a bunny outfit">>
-			bunny outfit
 		<<case "a nice nurse outfit">>
 			nurse outfit
-		<<case "a slutty nurse outfit">>
-			slutty nurse outfit
 		<<case "a schoolgirl outfit">>
 			school clothes
-		<<case "a hijab and abaya">>
-			hijab and abaya
-		<<case "a kimono">>
-			kimono
 		<<case "a nice maid outfit">>
 			maid outfit
 		<<case "a slutty maid outfit">>
 			skimpy maid outfit
 		<<case "a biyelgee costume" "a dirndl" "a halter top dress" "a mini dress" "a maternity dress">>
 			dress
-		<<case "a latex catsuit">>
-			latex catsuit
 		<<case "a military uniform" "a mounty outfit" "a red army uniform" "a schutzstaffel uniform" "a slutty schutzstaffel uniform">>
 			uniform
-		<<case "battlearmor">>
-			battlearmor
-		<<case "Imperial Plate">>
-			imperial armor
-		<<case "lederhosen">>
-			lederhosen
 		<<case "spats and a tank top">>
 			spats
 		<<case "a burkini" "a monokini">>
 			swimsuit
 		<<case "a chattel habit" "a fallen nuns habit">>
 			slutty habit
-		<<case "a cheerleader outfit">>
-			cheerleader outfit
-		<<case "a cybersuit">>
-			cybersuit
-		<<case "a tight Imperial bodysuit">>
-			imperial bodysuit
-		<<case "an apron">>
-			apron
-		<<case "a scalemail bikini">>
-			scalemail bikini
-		<<case "a slutty outfit">>
-			slutty outfit
-		<<case "a string bikini">>
-			string bikini
 		<<case "a succubus outfit">>
 			succubus getup
 		<<case "a hijab and blouse" "conservative clothing">>
 			conservative clothes
-		<<case "a bimbo outfit">>
-			bimbo outfit
-		<<case "a courtesan dress">>
-			courtesan dress
 		<<default>>
-			$activeSlave.clothes
+			<<= App.Data.clothes.get($activeSlave.clothes).name.toLowerCase()>>
 		<</switch>>
 		off again, because
 		<<if canDoVaginal($activeSlave) && $activeSlave.vagina != 0>>