diff --git a/src/events/RETS/reAnalCowgirl.js b/src/events/RETS/reAnalCowgirl.js
index 841691e83f5fa5802e8ebcf8f2b953baa71a569b..87ab05998e5742581493f5e3cf7496d57972c081 100644
--- a/src/events/RETS/reAnalCowgirl.js
+++ b/src/events/RETS/reAnalCowgirl.js
@@ -9,23 +9,29 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent
 		return [
 			[ // event slave /domslave
 				s => s.fetish !== "mindbroken",
+				s => s.fuckdoll === 0,
 				hasAnyArms,
-				hasAnyLegs,
+				canMove,
 				canTalk,
+				canHear,
 				s => s.assignment !== Job.QUARTER,
 				s => s.devotion > 20,
 				s => ["buttslut", "sadist", "dom"].includes(s.fetish),
 				s => (s.chastityPenis !== 1 || s.dick === 0),
 				s => s.rules.release.slaves === 1,
+				s => s.belly < 30000,
 			],
 			[ // and subslave
 				s => s.fetish !== "mindbroken",
+				s => s.fuckdoll === 0,
 				canWalk,
 				canTalk,
+				s => (canSee(s) || canHear(s)),
 				isSlaveAvailable,
 				s => (s.devotion >= -20 && s.devotion <= 60),
 				s => s.fetish !== "buttslut",
 				s => (canDoAnal(s) && s.anus !== 0),
+				s => s.belly < 30000,
 			]
 		];
 	}
@@ -36,14 +42,18 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent
 		const {
 			He, he, his, him, himself
 		} = getPronouns(eventSlave);
+		const hands = hasBothArms(eventSlave) ? "hands" : "hand";
+		const {say} = getEnunciation(eventSlave);
 		const {
 			He2, he2, His2, his2, him2, girl2, himself2
 		} = getPronouns(subSlave).appendSuffix("2");
+		const {say2} = getEnunciation(subSlave);
 
 		V.nextLink = "Next Week";
 
 		App.Events.drawEventArt(node, [eventSlave, subSlave], "no clothing");
 		const canP = canPenetrate(eventSlave);
+		const clitP = eventSlave.clit > 3;
 		let t = [];
 
 
@@ -53,16 +63,38 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent
 		App.Events.addParagraph(node, t);
 		t= [];
 
-		t.push(`${He}'s sitting on the end of the couch, though only ${his} legs, crotch, and hands are immediately visible. This is because ${he} has`);
+		t.push(`${He}'s sitting on the end of the couch, though only ${his} legs, crotch, and ${hands} are immediately visible. This is because ${he} has`);
 		t.push(contextualIntro(eventSlave, subSlave, "DOM"));
-		t.push(`on top of ${him}, impaled on ${canP ? `${his} cock`: `a strap-on ${he}'s wearing`}. ${subSlave.slaveName} is bent almost double. ${eventSlave.slaveName} has ${his} ${eventSlave.skin} hands up on the backs of ${subSlave.slaveName}'s ${subSlave.skin} knees, holding ${his2} legs`);
+		t.push(`on top of ${him}, impaled on`);
+		if (canP) {
+			t.push(`${his} cock.`);
+		} else if (clitP) {
+			t.push(`${his} phallus-like clit.`);
+		} else {
+			t.push(`a strap-on ${he}'s wearing.`);
+		}
+		t.push(`${subSlave.slaveName} is bent`);
+		if (eventSlave.belly >= 5000 && subSlave.belly >= 5000) {
+			t.push(`at an awkward angle.`);
+		} else {
+			t.push(`almost double.`);
+		}
+		t.push(`${eventSlave.slaveName} has ${his} ${eventSlave.skin}`);
+		if (hasBothArms(eventSlave)) {
+			t.push(`hands up on the backs of ${subSlave.slaveName}'s ${subSlave.skin} knees, holding ${his2} legs`);
+		} else {
+			t.push(`hand up on ${subSlave.slaveName}'s ${subSlave.skin} back, forcing ${him2} to keep ${his2} legs`);
+		}
 		if (eventSlave.belly >= 5000) {
-			t.push(`to either side of ${his2}`);
+			t.push(`to either side of ${his}`);
 			if (eventSlave.preg > eventSlave.pregData.normalBirth/8) {
 				t.push(`pregnancy,`);
 			} else {
 				t.push(`belly,`);
 			}
+			if (!hasBothArms(eventSlave)) {
+				t.push(`and`);
+			}
 		}
 		t.push(`up against ${his2}`);
 		if (subSlave.boobs > 2000) {
@@ -71,9 +103,16 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent
 			t.push(`shoulders.`);
 		}
 		t.push(`${subSlave.slaveName} is completely helpless, and ${he2}'s being fucked hard:`);
-		if (canP) {
-			if (eventSlave.dick - subSlave.anus > 2) {
-				t.push(`${eventSlave.slaveName}'s cock is very big,`);
+		if (canP || clitP) {
+			let sizeRatio;
+			if (canP) {
+				sizeRatio = eventSlave.dick - subSlave.anus;
+			} else {
+				sizeRatio = eventSlave.clit - subSlave.anus - 2;
+			}
+			const cock = canP ? "cock" : "clit";
+			if (sizeRatio > 2) {
+				t.push(`${eventSlave.slaveName}'s ${cock} is very big,`);
 				if (subSlave.anus > 2) {
 					t.push(`even for ${subSlave.slaveName}'s loose anus,`);
 				} else if (subSlave.anus > 1) {
@@ -82,8 +121,8 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent
 					t.push(`especially for ${subSlave.slaveName}'s tight anus,`);
 				}
 				t.push(`so ${eventSlave.slaveName} is bouncing ${his} anal bottom up and down only a little way, allowing ${him} to do so fast.`);
-			} else if (eventSlave.dick - subSlave.anus > 0) {
-				t.push(`${eventSlave.slaveName}'s cock is a good fit for ${subSlave.slaveName}'s`);
+			} else if (sizeRatio > 0) {
+				t.push(`${eventSlave.slaveName}'s ${cock} is a good fit for ${subSlave.slaveName}'s`);
 				if (subSlave.anus > 2) {
 					t.push(`loose`);
 				} else if (subSlave.anus > 1) {
@@ -93,7 +132,7 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent
 				}
 				t.push(`anus, so ${eventSlave.slaveName} is bouncing ${his} anal bottom up and down fast.`);
 			} else {
-				t.push(`${eventSlave.slaveName}'s cock barely stretches ${subSlave.slaveName}'s`);
+				t.push(`${eventSlave.slaveName}'s ${cock} barely stretches ${subSlave.slaveName}'s`);
 				if (subSlave.anus > 2) {
 					t.push(`loose`);
 				} else if (subSlave.anus > 1) {
@@ -122,10 +161,11 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent
 			if (subSlave.bellyPreg >= 8000) {
 				t.push(`though ${his2}`);
 				if (subSlave.pregType > 1) {
-					t.push(`children seem to be expressing their own thoughts as ${he2} rubs ${his2} pregnant belly.`);
+					t.push(`children seem to be expressing their own thoughts`);
 				} else {
-					t.push(`children seem to be expressing their own thought as ${he2} rubs ${his2} pregnant belly.`);
+					t.push(`child seems to be expressing its own thought`);
 				}
+				t.push(`as ${he2} rubs ${his2} pregnant belly.`);
 			} else if (subSlave.bellyImplant >= 8000) {
 				t.push(`${his2} implant rounded belly bobbing with each thrust into ${him2}.`);
 			} else {
@@ -138,41 +178,25 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent
 		} else if (subSlave.dick > 0) {
 			t.push(`${he2} looks aroused, though ${his2} flopping dick can't show it.`);
 		} else if (subSlave.vaginaLube > 0) {
-			t.push(`${his2} cunt is gushing`);
-			if (girl2 === "girl") {
-				t.push(`female`);
-			}
-			t.push(`lubricant as the pistoning phallus alternately pushes and pulls at ${his2} vaginal walls.`);
+			t.push(`${his2} cunt is gushing female lubricant as the pistoning phallus pushes against the back of ${his2} vaginal wall.`);
 		} else if (subSlave.labia > 0) {
 			t.push(`${his2} generous petals move gently with the motion of the pounding, and they're far from dry.`);
 		} else if (subSlave.vagina === -1) {
 			t.push(`${he2}'s taking it up ${his2} only hole just fine.`);
 		} else {
-			t.push(`${his2} cunt glistens as the pistoning phallus alternately pushes and pulls at ${his2} vaginal walls.`);
+			t.push(`${his2} cunt glistens as the pistoning phallus alternately pushes and pulls at ${his2} vaginal wall from behind.`);
 		}
 		t.push(`"H-h-hi-i`);
-		if (SlaveStatsChecker.checkForLisp(subSlave)) {
-			if (subSlave.custom.titleLisp !== "" && subSlave.custom.titleLisp !== 0) {
-				t.push(`${subSlave.custom.titleLisp}," ${he2} lisps`);
-			} else if (V.PC.customTitleLisp) {
-				t.push(`${V.PC.customTitleLisp}," ${he2} lisps`);
-			} else if (V.PC.title !== 0) {
-				t.push(`M-m-ma-a-th-t-ter," ${he2} lisps`);
-			} else {
-				t.push(`M-m-mi-i-ith-t-r-r-e-eth-th-th," ${he2} lisps`);
-			}
+		if (subSlave.custom.title !== "" && subSlave.custom.title !== 0) {
+			t.push(`${Spoken(subSlave, `${subSlave.custom.title},`)}"`);
+		} else if (V.PC.customTitle) {
+			t.push(`${Spoken(subSlave, `${V.PC.customTitle},`)}"`);
+		} else if (V.PC.title !== 0) {
+			t.push(`${Spoken(subSlave, `M-m-ma-a-st-t-ter,`)}"`);
 		} else {
-			if (subSlave.custom.title !== "" && subSlave.custom.title !== 0) {
-				t.push(`${subSlave.custom.title}," ${he2} says`);
-			} else if (V.PC.customTitle) {
-				t.push(`${V.PC.customTitle}," ${he2} says`);
-			} else if (V.PC.title !== 0) {
-				t.push(`M-m-ma-a-st-t-ter," ${he2} says`);
-			} else {
-				t.push(`M-m-mi-i-is-st-r-r-e-es-s-s," ${he2} says`);
-			}
+			t.push(`${Spoken(subSlave, `M-m-mi-i-is-st-r-r-e-es-s-s,`)}"`);
 		}
-		t.push(`breathlessly, doing ${his2} best to greet you properly despite the bouncing.`);
+		t.push(`${he2} ${say2}s breathlessly, doing ${his2} best to greet you properly despite the bouncing.`);
 		App.Events.addParagraph(node, t);
 		t= [];
 
@@ -184,7 +208,7 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent
 		} else {
 			t.push(`homely`);
 		}
-		t.push(`face instantly appears, craning out from behind ${subSlave.slaveName}'s back to see. ${Spoken(eventSlave, `"Oh, hi, ${getWrittenTitle(eventSlave)}!"`)} ${he} says with a cheerful smile,`);
+		t.push(`face instantly appears, craning out from behind ${subSlave.slaveName}'s back to see. ${Spoken(eventSlave, `"Oh, hi, ${getWrittenTitle(eventSlave)}!"`)} ${he} ${say}s with a cheerful smile,`);
 		if (eventSlave.muscles > 30) {
 			t.push(`not breathing hard at all despite bouncing a ${girl2} off ${his} crotch.`);
 		} else if (eventSlave.muscles > 5) {
@@ -192,7 +216,7 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent
 		} else {
 			t.push(`completely out of breath.`);
 		}
-		t.push(Spoken(eventSlave, `"I ${canSee(eventSlave) ? "saw" : canHear(eventSlave) ? "heard" : "noticed"} ${him2} going by, and I thought ${he2}'d look cute with ${canP ? "my dick" : "a strap-on"} up ${his2} butthole, so I ${V.universalRulesConsent === 0 ? `told ${him2} to get in here and take it.` : `asked ${him2} to get in here and ${he2} did!`}"`));
+		t.push(Spoken(eventSlave, `"I ${canSee(eventSlave) ? "saw" : "heard"} ${him2} going by, and I thought ${he2}'d look cute with ${canP ? "my dick" : clitP ? "my clit" : "a strap-on"} up ${his2} butthole, so I ${V.universalRulesConsent === 0 ? `told ${him2} to get in here and take it.` : `asked ${him2} to get in here and ${he2} did!`}"`));
 		t.push(`${He} shrugs.`);
 		if (eventSlave.fetish === "sadist") {
 			t.push(Spoken(eventSlave, `"I thought ${he2} was going to whine and struggle, but ${he2}'s kinda disappointing."`));
@@ -284,12 +308,16 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent
 			}
 			if (canSee(eventSlave)) {
 				t.push(`Seeing`);
-			} else if (canHear(eventSlave)) {
+			} else {
 				t.push(`Hearing`);
+			}
+			t.push(`this, ${eventSlave.slaveName} <span class="hotpink">giggles with anticipation,</span> and pulls`);
+			if (hasBothArms(eventSlave)) {
+				t.push(`${subSlave.slaveName}'s knees back farther.`);
 			} else {
-				t.push(`Acknowledging`);
+				t.push(`${subSlave.slaveName} even closer.`);
 			}
-			t.push(`this, ${eventSlave.slaveName} <span class="hotpink">giggles with anticipation,</span> and pulls ${subSlave.slaveName}'s knees back farther. The slave whines at the stretch, and then gasps as the invading phallus pops free of ${his2} asshole. ${His2} anus`);
+			t.push(`The slave whines at the stretch, and then gasps as the invading phallus pops free of ${his2} asshole. ${His2} anus`);
 			if (subSlave.anus > 2) {
 				t.push(`gapes lewdly, its sphincter so well stretched that it stays invitingly open,`);
 			} else if (subSlave.anus > 1) {
@@ -323,9 +351,23 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent
 			} else {
 				t.push(`crotch.`);
 			}
-			t.push(`With you standing there, ${eventSlave.slaveName} can't really see much, and ${he} can't drop ${subSlave.slaveName}'s legs without throwing everything into confusion. So, ${he}'s reduced to blind jabs to get ${his}`);
+			t.push(`With you standing there, ${eventSlave.slaveName} can't really`);
+			if (canSee(eventSlave)) {
+				t.push(`see much,`);
+			} else {
+				t.push(`feel around down there,`);
+			}
+			t.push(`and ${he} can't`);
+			if (hasBothArms(eventSlave)) {
+				t.push(`drop ${subSlave.slaveName}'s legs`);
+			} else {
+				t.push(`relax ${his} grip on ${subSlave.slaveName}`);
+			}
+			t.push(`without throwing everything into confusion. So, ${he}'s reduced to blind jabs to get ${his}`);
 			if (canP) {
 				t.push(`cock`);
+			} else if (clitP) {
+				t.push(`clit`);
 			} else {
 				t.push(`strap-on`);
 			}
@@ -337,9 +379,9 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent
 			}
 			App.Events.addParagraph(frag, t);
 			t = [];
-			if (subSlave.vagina > 0) {
+			if (canDoVaginal(subSlave) && subSlave.vagina > 0) {
 				t.push(`With ${eventSlave.slaveName} occupying ${subSlave.slaveName}'s rear hole, your next step is obvious to everyone involved, and ${he2} groans with fullness as ${he2} feels ${his2} cunt accommodate you. ${eventSlave.slaveName} matches ${his} rhythm to yours, and`);
-				if (canP) {
+				if (canP || clitP) {
 					t.push(`orgasms promptly, since ${he}'s less accustomed than you are to the delectable sensation of a ${girl2} tightened by a phallus in ${his2} other hole.`);
 				} else {
 					t.push(`climaxes quickly despite having no sensation in ${his} fake dick, since ${he} finds the situation so arousing.`);
@@ -350,10 +392,11 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent
 				if (canP && canImpreg(subSlave, eventSlave)) {
 					t.push(knockMeUp(subSlave, 5, 1, eventSlave.ID, true));
 				}
+				seX(subSlave, "vaginal", V.PC, "penetrative");
 			} else if (subSlave.anus > 2) {
 				t.push(`${subSlave.slaveName}'s rear hole is such a loose slit that double anal shouldn't be too much trouble for ${him2}. It isn't, though ${his2} breath definitely quickens as ${he2} feels a second rod push its way past ${his2} stretched sphincter. ${eventSlave.slaveName}`);
-				if (canP) {
-					t.push(`orgasms promptly, unable to prolong sex when ${he}'s feeling ${his} cock slide against you inside another slave's anus.`);
+				if (canP || clitP) {
+					t.push(`orgasms promptly, unable to prolong sex when ${he}'s feeling ${his} ${cock} slide against you inside another slave's anus.`);
 				} else {
 					t.push(`climaxes quickly despite having no sensation in ${his} fake dick, since ${he} finds the situation so arousing.`);
 				}
@@ -363,9 +406,10 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent
 				if (canP && canImpreg(subSlave, eventSlave)) {
 					t.push(knockMeUp(subSlave, 5, 1, eventSlave.ID, true));
 				}
+				seX(subSlave, "anal", V.PC, "penetrative");
 			} else {
 				t.push(`${subSlave.slaveName}'s rear hole is a bit tight for double anal, and ${he2}'s already quite dominated; you mean to use ${him2} thoroughly, not destroy ${him2}. So, you and ${eventSlave.slaveName} switch off: you use ${subSlave.slaveName}'s butt while ${eventSlave.slaveName} pins ${him2} for you, and then you go back to ${subSlave.slaveName}'s mouth for a while and let ${eventSlave.slaveName} take over sodomizing duties. ${He}`);
-				if (canP) {
+				if (canP || clitP) {
 					t.push(`orgasms promptly, since ${he} finds a hole warm from your use very hot.`);
 				} else {
 					t.push(`climaxes quickly despite having no sensation in ${his} fake dick, since ${he} finds the situation so arousing.`);
@@ -376,6 +420,7 @@ App.Events.RETSAnalCowgirl = class RETSAnalCowgirl extends App.Events.BaseEvent
 				if (canP && canImpreg(subSlave, eventSlave)) {
 					t.push(knockMeUp(subSlave, 5, 1, eventSlave.ID, true));
 				}
+				seX(subSlave, "anal", V.PC, "penetrative");
 			}
 			t.push(`When ${subSlave.slaveName} has stumbled off to the shower, ${eventSlave.slaveName} presents ${himself} for inspection, smelling of sex and <span class="mediumaquamarine">smiling trustingly.</span>`);
 			eventSlave.devotion += 2;