diff --git a/src/events/RESS/obedientGirlish.js b/src/events/RESS/obedientGirlish.js
new file mode 100644
index 0000000000000000000000000000000000000000..92fee807b32c4873a6dba488e9e6b27771a17a00
--- /dev/null
+++ b/src/events/RESS/obedientGirlish.js
@@ -0,0 +1,160 @@
+App.Events.RESSObedientGirlish = class RESSObedientGirlish extends App.Events.BaseEvent {
+	eventPrerequisites() {
+		return [];
+	}
+
+	actorPrerequisites() {
+		return [
+			[ // single event slave
+				s => s.fetish !== "mindbroken",
+				s => s.assignment !== "work as a servant",
+				s => canDoAnal(s) || canDoVaginal(s),
+				s => s.butt < 3,
+				s => s.boobs < 500,
+				s => s.weight <= 10,
+				s => s.muscles <= 30,
+				s => s.trust >= -20,
+				s => s.devotion > 20,
+				s => s.devotion <= 50
+			]
+		];
+	}
+
+	execute(node) {
+		/** @type {Array<App.Entity.SlaveState>} */
+		let [eventSlave] = this.actors.map(a => getSlave(a));
+		const {
+			He, he, His, his, him, himself
+		} = getPronouns(eventSlave);
+		const {title: Master} = getEnunciation(eventSlave);
+		const belly = bellyAdjective(eventSlave);
+
+		/** @type {App.Entity.PlayerState} */
+		let PC = V.PC;
+
+		V.nextLink = "Next Week";
+
+		App.Events.drawEventArt(node, eventSlave, "no clothing");
+
+		let t = [];
+
+		t.push(App.UI.DOM.slaveDescriptionDialog(eventSlave));
+		if (eventSlave.bellyPreg >= 1500) {
+			t.push(`is nice and slim as ${he} can be given ${his} pregnancy,`);
+		} else if (eventSlave.bellyImplant >= 1500) {
+			t.push(`is nice and slim as ${he} can be given the implant rounding out ${his} middle,`);
+		} else if (eventSlave.bellyFluid >= 1500) {
+			t.push(`is nice and slim as ${he} can be given the amount of eventSlave.inflationType distending ${his} middle,`);
+		} else {
+			t.push("is nice and slim,");
+		}
+		t.push(`with a trim chest, narrow hips and not much of an ass to speak of. Despite the myriad ways a Free Cities slaveowner can give his property tits and asses, you've held off for now, keeping ${him} lithe.`);
+		if (hasAnyLegs(eventSlave)) {
+			if (hasAnyArms(eventSlave)) {
+				t.push(`${He} comes before you for a routine nude inspection, obediently standing before your desk with ${his} ${hasBothArms(eventSlave) ? "hands crossed" : "hand placed"}`);
+				if (eventSlave.belly >= 30000) {
+					t.push(`atop ${his} ${belly} stomach.`);
+				} else if (eventSlave.belly >= 1500) {
+					t.push(`over ${his} rounded stomach.`);
+				} else {
+					t.push(`over ${his} flat stomach.`);
+				}
+			} else {
+				t.push(`${He} comes before you for a routine nude inspection, obediently standing before your desk.`);
+			}
+		} else {
+			t.push(`Another slave strips ${him} and leaves ${his} naked torso on your desk for a routine inspection.`);
+		}
+		t.push(`A perfectly devoted slave might display ${himself}, and a rebellious one might try to cover ${himself}: ${he}'s neither. `);
+		if (eventSlave.dick > 0) {
+			t.push(`Though ${he}'s not sexually aroused, ${his} cock is visible and contributes greatly to ${his} androgyny.`);
+		} else if (eventSlave.vagina === -1) {
+			t.push(`The smooth featureless skin between ${his} legs makes ${him} look like a doll, not a girl.`);
+		} else {
+			t.push(`${His} bare pussy completes the picture of simultaneous innocence and availability.`);
+		}
+		App.Events.addParagraph(node, t);
+		t = [];
+
+		App.Events.addResponses(node, [
+			new App.Events.Result(`Let ${him} get dressed and spend some quality time with ${him}`, dress, virginityWarning(1)),
+			canDoAnal(eventSlave)
+				? new App.Events.Result(`Dominate ${his} narrow ass`, dominate, virginityWarning(0))
+				: new App.Events.Result()
+		]);
+
+		function dress() {
+			t = [];
+
+			t.push(`You let ${eventSlave.slaveName} don a nice dress and take ${him} out. ${He}'s a little suspicious at first but when you reach the first balcony on your lazy route around the huge building the sun on ${his} face and the gentle breeze around ${his} ears convince ${him} there's no trick. ${He} watches you shyly as you lead ${him} around, soaking in the sights and relaxing. Though you still speak as ${his} ${WrittenMaster(eventSlave)}, you chat about goings on around the arcology, and you buy ${him} a fresh fruit from a vendor. The unexpected show of care and compassion has ${him} quite agog. By the time you take ${him} out onto another parklike balcony and fuck ${him} on a bench,`);
+			if (eventSlave.dick > 0 && eventSlave.chastityPenis === 1 && eventSlave.chastityAnus === 1) {
+				t.push(`${his} combined chastity cage and anal chastity belt makes ${him} move awkwardly.`);
+			} else if (eventSlave.dick > 0 && eventSlave.chastityPenis === 1) {
+				t.push(`${his} chastity cage is dribbling precum, a sign ${he} wouldn't mind having to take it up the ass.`);
+			} else if (eventSlave.dick > 0 && eventSlave.chastityAnus === 1) {
+				t.push(`${his} dick is tenting the front of ${his} dress, through ${his} anal chastity belt.`);
+			} else if (eventSlave.dick > 0 && canAchieveErection(eventSlave)) {
+				t.push(`${his} dick is tenting the front of ${his} dress and ${he}'s happy to take it up the ass.`);
+			} else if (eventSlave.dick > 6) {
+				t.push(`${he}'s happy to take it up the ass; there's even a steady stream of pre dripping from ${his} monstrous cock.`);
+			} else if (eventSlave.dick > 0) {
+				t.push(`${he}'s happy to take it up the ass, though there's no sign of an erection from ${his} useless sissy dick.`);
+			} else if (!canDoVaginal(eventSlave)) {
+				t.push(`${he}'s obviously ready and willing to get buttfucked, even if ${his} body has no physically obvious way to show it off.`);
+			} else {
+				t.push(`${he}'s wet and ready and moans happily as you enter ${him}.`);
+			}
+			t.push(`There's no hesitation or fear at all on ${his} face when ${he} ${canSee(eventSlave) ? "sees" : "notices"} you're returning ${him} to your penthouse; <span class="mediumaquamarine">${his} trust in you has increased.</span>`);
+			if (canDoVaginal(eventSlave)) {
+				VCheck.Vaginal(1, eventSlave);
+			} else {
+				VCheck.Anal(1, eventSlave);
+			}
+
+			eventSlave.trust += 4;
+			return t;
+		}
+
+		function dominate() {
+			t = [];
+
+			t.push(`You make a show of examining ${him} with a critical air that makes ${him} aware of ${his} modest endowments. Finished, you announce in a serious tone that you're concerned that you can't tell if ${he}'s a girl, since girls have breasts and butts. ${eventSlave.belly >= 1500 ? `${He} should do something about that bulbous gut too, you mock.` : ""}`);
+			if (!canTalk(eventSlave)) {
+				t.push(`${He} protests wordlessly, gesturing desperately at ${himself}.`);
+			} else {
+				if (eventSlave.lips > 70) {
+					t.push(`${He} protests through ${his} huge lips,`);
+				} else if (eventSlave.lipsPiercing + eventSlave.tonguePiercing > 2) {
+					t.push(`${He} protests through ${his} piercings,`);
+				} else {
+					t.push(`${He} protests,`);
+				}
+				t.push(Spoken(eventSlave, `"${Master}, I'm a slave girl! Please, just look at me, ${Master}!"`));
+			}
+			t.push(`${canSee(eventSlave) ? "Shaking your head" : "Tutting"} with pretended doubt, you say that since you're not sure you'll have to make do. Your order ${him} to`);
+			if (eventSlave.belly >= 300000) {
+				t.push(`lean over ${his} ${belly} belly${PC.dick === 0 ? " while you don a strap-on" : ""}.`);
+			} else if (eventSlave.belly >= 5000) {
+				t.push(`lean face-down into the couch cushions${PC.dick === 0 ? " while you don a strap-on" : ""}.`);
+			} else {
+				t.push(`lie face-down on the couch${PC.dick === 0 ? " while you don a strap-on" : ""}.`);
+			}
+			t.push(`${He} does doubtfully, only realizing what you intend when ${he} feels ${PC.dick === 0 ? "the strap-on" : "your dickhead"} forcing its way between ${his} narrow buttcheeks. ${He} whimpers and moans ${eventSlave.belly < 300000 ? "into the couch" : ""} as you roughly sodomize ${him}. It's true, ${he}'s pretty androgynous from this angle, especially while ${he} takes it up the butthole. <span class="hotpink">${He} has become more submissive to you,</span> but there's <span class="gold">some fear there, too.</span>`);
+
+			VCheck.Anal(1, eventSlave);
+			eventSlave.trust -= 2;
+			eventSlave.devotion += 4;
+			return t;
+		}
+
+		function virginityWarning(type) {
+			if (type === 1 && canDoVaginal(eventSlave)) {
+				if (eventSlave.vagina === 0) {
+					return `This option will take ${his} vaginal virginity`;
+				}
+			} else if (eventSlave.anus === 0 && canDoVaginal(eventSlave)) {
+				return `This option will take ${his} anal virginity`;
+			}
+		}
+	}
+};
diff --git a/src/events/randomEvent.js b/src/events/randomEvent.js
index 262cf2afa4cc2ee1b771cbb63b099b957b0bc5cc..1f07217439a0b5b967bb86363abf60e7a93dc1fa 100644
--- a/src/events/randomEvent.js
+++ b/src/events/randomEvent.js
@@ -22,6 +22,7 @@ App.Events.getIndividualEvents = function() {
 		new App.Events.RESSMuscles(),
 		new App.Events.RESSObedientAddict(),
 		new App.Events.RESSObedientBitchy(),
+		new App.Events.RESSObedientGirlish(),
 		new App.Events.RESSObedientIdiot(),
 		new App.Events.RESSObedientShemale(),
 		new App.Events.RESSRetchingCum(),
diff --git a/src/js/eventSelectionJS.js b/src/js/eventSelectionJS.js
index 3b1f6d4b2cf5eba5801ffcf227fea4b83f5139a4..af3b03fe90925c2d71c835ecaea5dc6fe7032da3 100644
--- a/src/js/eventSelectionJS.js
+++ b/src/js/eventSelectionJS.js
@@ -1411,22 +1411,6 @@ globalThis.generateRandomEventPoolStandard = function(eventSlave) {
 			}
 		}
 
-		if (eventSlave.boobs < 500) {
-			if (eventSlave.butt < 3) {
-				if (canDoAnal(eventSlave) || canDoVaginal(eventSlave)) {
-					if (eventSlave.devotion <= 50) {
-						if (eventSlave.devotion > 20 && eventSlave.trust >= -20) {
-							if (eventSlave.weight <= 10) {
-								if (eventSlave.muscles <= 30) {
-									V.RESSevent.push("obedient girlish");
-								}
-							}
-						}
-					}
-				}
-			}
-		}
-
 		if (eventSlave.boobs > 1200) {
 			if (eventSlave.areolaeShape !== "circle") {
 				if (eventSlave.devotion > 50) {
diff --git a/src/uncategorized/RESS.tw b/src/uncategorized/RESS.tw
index 9a0f5a07d3b7f9b0e0f1a0d5fb1287cc23d53745..e0e85cf4a58d23cd854903565b59760ee293bf6f 100644
--- a/src/uncategorized/RESS.tw
+++ b/src/uncategorized/RESS.tw
@@ -44,7 +44,7 @@
 <<set _clothesTemp = $activeSlave.clothes>>
 <<switch $RESSevent>>
 /*Some events start with the slave naked (any event that starts with the daily inspection, for example). Here we switch their clothing just for the image to load, then switch it back quickly so the player's choice is not messed up.*/
-<<case "age implant" "ara ara" "back stretch" "bad dream" "bed snuggle" "bondage gear" "bonded love" "breast expansion blues" "confident tanning" "devoted educated slave" "devoted exhibition" "devoted lotion" "desperate null" "devoted nympho" "devoted shortstack" "extreme aphrodisiacs" "fearful balls" "fucktoy tribbing" "gaped asshole" "happy dance" "heavy piercing" "huge naturals" "huge tits" "hugely pregnant" "ignorant horny" "im scared" "implant inspection" "kitchen molestation" "language lesson" "mindbroken morning" "modest clothes" "mods please" "obedient girlish" "old PC age difference" "orchiectomy please" "PA flirting" "penitent" "permitted masturbation" "plimb help" "rebellious arrogant" "resistant gelding" "resistant shower" "resting amp" "restricted profession" "restricted smart" "sexy succubus" "shaped areolae" "shift masturbation" "shift sleep" "shower slip" "slave clit on slave" "slave dick huge" "slave dick on slave" "sleeping ambivalent" "sore shoulders" "spa boobs" "subjugation blues" "tendon fall" "terrified inspection" "tittymonster inspection" "torpedo squeeze" "transition anxiety" "trusting HG" "unhappy virgin" "used whore" "vocal disobedience" "young PC age difference">>
+<<case "age implant" "ara ara" "back stretch" "bad dream" "bed snuggle" "bondage gear" "bonded love" "breast expansion blues" "confident tanning" "devoted educated slave" "devoted exhibition" "devoted lotion" "desperate null" "devoted nympho" "devoted shortstack" "extreme aphrodisiacs" "fearful balls" "fucktoy tribbing" "gaped asshole" "happy dance" "heavy piercing" "huge naturals" "huge tits" "hugely pregnant" "ignorant horny" "im scared" "implant inspection" "kitchen molestation" "language lesson" "mindbroken morning" "modest clothes" "mods please" "old PC age difference" "orchiectomy please" "PA flirting" "penitent" "permitted masturbation" "plimb help" "rebellious arrogant" "resistant gelding" "resistant shower" "resting amp" "restricted profession" "restricted smart" "sexy succubus" "shaped areolae" "shift masturbation" "shift sleep" "shower slip" "slave clit on slave" "slave dick huge" "slave dick on slave" "sleeping ambivalent" "sore shoulders" "spa boobs" "subjugation blues" "tendon fall" "terrified inspection" "tittymonster inspection" "torpedo squeeze" "transition anxiety" "trusting HG" "unhappy virgin" "used whore" "vocal disobedience" "young PC age difference">>
 	<<set $activeSlave.clothes = "no clothing">>
 <<case "whore rebellious">>
 	/* this scene states they are wearing "thick, durable latex with temperature regulation and anchor points for restraint" no matter what they are assigned to wear. */
@@ -2315,39 +2315,6 @@ $His responses to your routine questions are so mechanical and honest that you m
 <br><br>
 Lately, you've noticed that $he reacts to these <<if canSee($activeSlave)>>sights<<elseif canHear($activeSlave)>>sounds<<else>>thoughts<</if>> with a well-concealed flash of apprehension. It seems $he's figured out that $he will probably be required to take it up $his little <<if $seeRace == 1>>$activeSlave.race <</if>>butt someday, and isn't enthusiastic about the prospect. You could probably exploit this.
 
-<<case "obedient girlish">>
-
-<<= App.UI.slaveDescriptionDialog($activeSlave)>> is nice and
-<<if $activeSlave.bellyPreg >= 1500>>
-	slim as $he can be given $his pregnancy,
-<<elseif $activeSlave.bellyImplant >= 1500>>
-	slim as $he can be given the implant rounding out $his middle,
-<<elseif $activeSlave.bellyFluid >= 1500>>
-	slim as $he can be given the amount of $activeSlave.inflationType distending $his middle,
-<<else>>
-	slim,
-<</if>>
-with a trim chest, narrow hips and not much of an ass to speak of. Despite the myriad ways a Free Cities slaveowner can give his property tits and asses, you've held off for now, keeping $him lithe.
-<<if hasAnyLegs($activeSlave)>>
-	$He comes before you for a routine nude inspection, obediently standing before your
-	<<if hasAnyArms($activeSlave)>>
-		desk with $his <<if hasBothArms($activeSlave)>>hands crossed<<else>>hand placed<</if>>
-		<<if $activeSlave.belly >= 30000>>
-			atop $his _belly
-		<<elseif $activeSlave.belly >= 1500>>
-			over $his rounded
-		<<else>>
-			over $his flat
-		<</if>>
-		stomach.
-	<<else>>
-		desk.
-	<</if>>
-<<else>>
-	Another slave strips $him and leaves $his naked torso on your desk for a routine inspection.
-<</if>>
-A perfectly devoted slave might display $himself, and a rebellious one might try to cover $himself: $he's neither. <<if $activeSlave.dick > 0>>Though $he's not sexually aroused, $his cock is visible and contributes greatly to $his androgyny.<<elseif $activeSlave.vagina == -1>>The smooth featureless skin between $his legs makes $him look like a doll, not a girl.<<else>>$His bare pussy completes the picture of simultaneous innocence and availability.<</if>>
-
 <<case "diet">>
 
 <<= App.UI.slaveDescriptionDialog($activeSlave)>> is on a diet, and $he needs it. That doesn't make it any easier for $him. Your slaves are not permitted time to waste over meals. They enter the simple kitchen, drink their allotted portion of slave food out of a cup, and get on with their duties.<<if $activeSlave.preg > $activeSlave.pregData.normalBirth/1.33>> Despite eating for <<if $activeSlave.pregType <= 1>>two<<elseif $activeSlave.pregType >= 10>>far too many<<else>><<= num($activeSlave.pregType + 1)>><</if>>, $his diet is still in full effect.<</if>> <<= capFirstChar($assistant.name)>> catches $activeSlave.slaveName, whose cup is always filled less than halfway, skulking around in the hope that one of the others will take $his eyes off $his cup, or even leave leftovers.
@@ -12290,71 +12257,6 @@ brought in to you. This time <<= App.UI.slaveDescriptionDialog($activeSlave)>> h
 	<</if>>
 <</if>>
 
-<<case "obedient girlish">>
-
-<<link "Let $him get dressed and spend some quality time with $him">>
-	<<replace "#result">>
-		You let $activeSlave.slaveName don a nice dress and take $him out. $He's a little suspicious at first but when you reach the first balcony on your lazy route around the huge building the sun on $his face and the gentle breeze around $his ears convince $him there's no trick. $He watches you shyly as you lead $him around, soaking in the sights and relaxing. Though you still speak as $his <<= WrittenMaster($activeSlave)>>, you chat about goings on around the arcology, and you buy $him a fresh fruit from a vendor. The unexpected show of care and compassion has $him quite agog. By the time you take $him out onto another parklike balcony and fuck $him on a bench,
-		<<if ($activeSlave.dick > 0) && ($activeSlave.chastityPenis == 1) && ($activeSlave.chastityAnus == 1)>>
-			$his combined chastity cage and anal chastity belt makes $him move awkwardly.
-		<<elseif ($activeSlave.dick > 0) && ($activeSlave.chastityPenis == 1)>>
-			$his chastity cage is dribbling precum, a sign $he wouldn't mind having to take it up the ass.
-		<<elseif ($activeSlave.dick > 0) && ($activeSlave.chastityAnus == 1)>>
-			$his dick is tenting the front of $his dress, through $his anal chastity belt.
-		<<elseif ($activeSlave.dick > 0) && canAchieveErection($activeSlave)>>
-			$his dick is tenting the front of $his dress and $he's happy to take it up the ass.
-		<<elseif ($activeSlave.dick > 6)>>
-			$he's happy to take it up the ass; there's even a steady stream of pre dripping from $his monstrous cock.
-		<<elseif ($activeSlave.dick > 0)>>
-			$he's happy to take it up the ass, though there's no sign of an erection from $his useless sissy dick.
-		<<elseif !canDoVaginal($activeSlave)>>
-			$he's obviously ready and willing to get buttfucked, even if $his body has no physically obvious way to show it off.
-		<<else>>
-			$he's wet and ready and moans happily as you enter $him.
-		<</if>>
-		<<if ($activeSlave.vagina > -1)>>
-			<<= VCheck.Vaginal()>>
-		<<else>>
-			<<= VCheck.Anal()>>
-		<</if>>
-		There's no hesitation or fear at all on $his face when $he <<if canSee($activeSlave)>>sees<<else>>notices<</if>> you're returning $him to your penthouse; @@.mediumaquamarine;$his trust in you has increased.@@
-		<<set $activeSlave.trust += 4>>
-	<</replace>>
-<</link>><<if (canDoAnal($activeSlave) || canDoVaginal($activeSlave)) && (($activeSlave.vagina == -1) && ($activeSlave.anus == 0)) || ($activeSlave.vagina == 0)>> //This option will take $his virginity//<</if>>
-<<if canDoAnal($activeSlave)>>
-	<br><<link "Dominate $his narrow ass">>
-		<<replace "#result">>
-			You make a show of examining $him with a critical air that makes $him aware of $his modest endowments. Finished, you announce in a serious tone that you're concerned that you can't tell if $he's a girl, since girls have breasts and butts.<<if $activeSlave.belly >= 1500>> $He should do something about that bulbous gut too, you mock.<</if>>
-			<<if !canTalk($activeSlave)>>
-				$He protests wordlessly, gesturing desperately at $himself.
-			<<else>>
-				<<if ($activeSlave.lips > 70)>>
-					$He protests through $his huge lips,
-				<<elseif ($activeSlave.lipsPiercing+$activeSlave.tonguePiercing > 2)>>
-					$He protests through $his piercings,
-				<<else>>
-					$He protests,
-				<</if>>
-				"<<Master>>, I'm a <<s>>lave girl! Plea<<s>>e, ju<<s>>t look at me, <<Master>>!"
-			<</if>>
-			<<if canSee($activeSlave)>>Shaking your head<<else>>Tutting<</if>> with pretended doubt, you say that since you're not sure you'll have to make do. Your order $him to
-			<<if $activeSlave.belly >= 300000>>
-				lean over $his _belly belly<<if $PC.dick == 0>> while you don a strap-on<</if>>.
-			<<elseif $activeSlave.belly >= 5000>>
-				lean face-down into the couch cushions<<if $PC.dick == 0>> while you don a strap-on<</if>>.
-			<<else>>
-				lie face-down on the couch<<if $PC.dick == 0>> while you don a strap-on<</if>>.
-			<</if>>
-			$He does doubtfully, only realizing what you intend when $he feels <<if $PC.dick == 0>>the strap-on<<else>>your dickhead<</if>> forcing its way between $his narrow buttcheeks.
-			<<= VCheck.Anal()>>
-			$He whimpers and moans
-			<<if $activeSlave.belly < 300000>>into the couch<</if>>
-			as you roughly sodomize $him. It's true, $he's pretty androgynous from this angle, especially while $he takes it up the butthole. @@.hotpink;$He has become more submissive to you,@@ but there's @@.gold;some fear there, too.@@
-			<<set $activeSlave.trust -= 2, $activeSlave.devotion += 4>>
-		<</replace>>
-	<</link>><<if canDoAnal($activeSlave) && $activeSlave.anus == 0>> //This option will take $his anal virginity//<</if>>
-<</if>>
-
 <<case "diet">>
 
 <<link "Catch $him at it and punish $him">>