diff --git a/src/events/RESS/penitent.js b/src/events/RESS/penitent.js
index 4591fd964e582c407cdea3ad6cd04d251b6aa09e..ad68b264b4be6d98b2724a80f7f6c2e33f3675c9 100644
--- a/src/events/RESS/penitent.js
+++ b/src/events/RESS/penitent.js
@@ -8,11 +8,10 @@ App.Events.RESSPenitent = class RESSPenitent extends App.Events.BaseEvent {
 			[ // single event slave
 				s => s.fetish !== "mindbroken",
 				hasAnyArms,
-				hasAnyLegs,
+				canStand,
 				canTalk,
 				s => s.assignment !== Job.QUARTER,
 				s => s.clothes === "a penitent nuns habit",
-				//s => s.anus > 0, //FIXME: commented out because event doesn't seem to require this (and checks for anal virginity later)
 				s => s.devotion >= -20 && s.devotion <= 50
 			]
 		];
@@ -39,7 +38,7 @@ App.Events.RESSPenitent = class RESSPenitent extends App.Events.BaseEvent {
 		} else {
 			r.push(`chafing.`);
 		}
-	 r.push(`${He} seems totally concentrated on obedience: the constant discomfort often has the effect of forcing a slave to marshal all ${his} mental faculties in the service of pain avoidance.`);
+		r.push(`${He} seems totally concentrated on obedience: the constant discomfort often has the effect of forcing a slave to marshal all ${his} mental faculties in the service of pain avoidance.`);
 		App.Events.addParagraph(node, r);
 		r = [];
 		r.push(`${His} responses to your routine questions are so mechanical and honest that you make an impromptu confession of it. You require ${him} to tell the full tale of all ${his} minor infractions against the rules, and even order ${him} to confess ${his} resistant thoughts to you as well. Past the ability to resist, ${he} pours out a stream of ${his} inner fears, hopes, and feelings about ${his} life as a sex slave.`);
@@ -71,10 +70,10 @@ App.Events.RESSPenitent = class RESSPenitent extends App.Events.BaseEvent {
 				r.push(`bloody`);
 			}
 			if (eventSlave.bellyPreg >= 1500) {
-				r.push(`gravid`);
+				r.push(r.pop() + `, gravid`);
 			}
 			r.push(`form into the shower, wash ${him}, and apply curatives, <span class="health dec">though ${he}'s still quite injured.</span> ${He} wakes to find ${himself} curled up in your lap, and ${he} stiffens for a brief moment before <span class="devotion inc">relaxing against your chest,</span> weeping softly.`);
-			if ((eventSlave.fetish !== "submissive") && (random(1, 100) > 50)) {
+			if (eventSlave.fetish !== "submissive" && fetishChangeChance(eventSlave) > random(1, 100)) {
 				eventSlave.fetish = "submissive";
 				eventSlave.fetishKnown = 1;
 				eventSlave.fetishStrength = 10;
@@ -124,17 +123,17 @@ App.Events.RESSPenitent = class RESSPenitent extends App.Events.BaseEvent {
 				r.push(VCheck.Vaginal(eventSlave, 1));
 			}
 			knockMeUp(eventSlave, 100, 2, -1);
-			if ((eventSlave.fetish !== "humiliation") && (random(1, 100) > 50)) {
+			if (eventSlave.fetish !== "humiliation" && fetishChangeChance(eventSlave) > random(1, 100)) {
 				eventSlave.fetish = "humiliation";
 				eventSlave.fetishKnown = 1;
 				eventSlave.fetishStrength = 10;
 				r.push(`${He} has come to associate <span class="fetish gain">humiliation</span> with sexual fulfillment.`);
-			} else if ((eventSlave.fetish !== "submissive") && (random(1, 100) > 50)) {
+			} else if (eventSlave.fetish !== "submissive" && fetishChangeChance(eventSlave) > random(1, 100)) {
 				eventSlave.fetish = "submissive";
 				eventSlave.fetishKnown = 1;
 				eventSlave.fetishStrength = 10;
 				r.push(`${He} has come to associate <span class="fetish gain">submission</span> with sexual fulfillment.`);
-			} else if ((eventSlave.fetish !== "pregnancy") && (random(1, 100) > 50)) {
+			} else if (eventSlave.fetish !== "pregnancy" && fetishChangeChance(eventSlave) > random(1, 100)) {
 				eventSlave.fetish = "pregnancy";
 				eventSlave.fetishKnown = 1;
 				eventSlave.fetishStrength = 10;
@@ -171,12 +170,12 @@ App.Events.RESSPenitent = class RESSPenitent extends App.Events.BaseEvent {
 			}
 			r.push(`up ${his} waiting pussy. ${He} <span class="devotion inc">does ${his} best</span> to relax and resumes,`, Spoken(eventSlave, `"Oh ${Master}..."`));
 			r.push(VCheck.Vaginal(eventSlave, 1));
-			if ((eventSlave.fetish !== "humiliation") && (random(1, 100) > 50)) {
+			if (eventSlave.fetish !== "humiliation" && fetishChangeChance(eventSlave) > random(1, 100)) {
 				eventSlave.fetish = "humiliation";
 				eventSlave.fetishKnown = 1;
 				eventSlave.fetishStrength = 10;
 				r.push(`${He} has come to associate <span class="fetish gain">humiliation</span> with sexual fulfillment.`);
-			} else if ((eventSlave.fetish !== "submissive") && (random(1, 100) > 50)) {
+			} else if (eventSlave.fetish !== "submissive" && fetishChangeChance(eventSlave) > random(1, 100)) {
 				eventSlave.fetish = "submissive";
 				eventSlave.fetishKnown = 1;
 				eventSlave.fetishStrength = 10;
@@ -207,12 +206,12 @@ App.Events.RESSPenitent = class RESSPenitent extends App.Events.BaseEvent {
 			}
 			r.push(`up ${his} loosened ass. ${He} <span class="devotion inc">does ${his} best</span> to relax and resumes,`, Spoken(eventSlave, `"Oh ${Master}..."`));
 			r.push(VCheck.Anal(eventSlave, 1));
-			if ((eventSlave.fetish !== "humiliation") && (random(1, 100) > 50)) {
+			if (eventSlave.fetish !== "humiliation" && fetishChangeChance(eventSlave) > random(1, 100)) {
 				eventSlave.fetish = "humiliation";
 				eventSlave.fetishKnown = 1;
 				eventSlave.fetishStrength = 10;
 				r.push(`${He} has come to associate <span class="fetish gain">humiliation</span> with sexual fulfillment.`);
-			} else if ((eventSlave.fetish !== "submissive") && (random(1, 100) > 50)) {
+			} else if (eventSlave.fetish !== "submissive" && fetishChangeChance(eventSlave) > random(1, 100)) {
 				eventSlave.fetish = "submissive";
 				eventSlave.fetishKnown = 1;
 				eventSlave.fetishStrength = 10;