diff --git a/src/events/RE/reBusyServantsQuarters.js b/src/events/RE/reBusyServantsQuarters.js
new file mode 100644
index 0000000000000000000000000000000000000000..efe6fb52312f6766d66fc9eb4629a225c9224cc8
--- /dev/null
+++ b/src/events/RE/reBusyServantsQuarters.js
@@ -0,0 +1,38 @@
+App.Events.REBusyServantsQuarters = class REBusyServantsQuarters extends App.Events.BaseEvent {
+	eventPrerequisites() {
+		return [
+			() => App.Utils.countFacilityWorkers(["servantsQuarters"]).servantsQuarters > 3
+		];
+	}
+
+	execute(node) {
+		V.nextButton = "Continue";
+		V.nextLink = "RIE Eligibility Check";
+		App.Events.addParagraph(node, [`Your penthouse is very well staffed with servants. The trend in modern buildings is to design around automatic cleaning systems. Dusting, mopping, and polishing are no longer really necessary when machines that do them more cheaply and thoroughly than any human are readily available. Keeping slaves to clean is an ostentation, and visitors to your quarters are often <span class="reputation inc">surprised and gratified</span> to see a sex slave working away in the old way.`]);
+		App.Events.addParagraph(node, [`The busy servants' quarters are a reservoir of slaves that can be used for almost any whim that occurs to you.`]);
+
+		repX(500, "event");
+
+		App.Events.addResponses(node, [
+			new App.Events.Result("Share the servants' quarters with your more favored slaves", share),
+		]);
+
+		function share() {
+			for (const slave of V.slaves) {
+				if (slave.assignment !== Job.QUARTER) {
+					slave.devotion += 4;
+					actX(slave, "oral", 3);
+				} else {
+					slave.devotion -= 5;
+					if (canDoVaginal(slave) && slave.vagina > 0) {
+						actX(slave, "vaginal");
+					} else if (canDoAnal(slave) && slave.anus > 0) {
+						actX(slave, "anal");
+					}
+					actX(slave, "oral", 5);
+				}
+			}
+			return `The poor slaves in the servants' quarters are lower than almost any others, and they know it. Unfortunately for them, they're about to spend a long weekend knowing it unusually well. Sleeping time is usually nearly inviolate; you are the only person in the penthouse who is permitted to wake a sleeping slave for any but emergency reasons. Not now. You haunt the servants' quarters, using and abusing at will, and encourage your better slaves to follow your example. They quickly take the opportunity to be better than someone for once, and compete with each other in sexual harassment of the servants. They <span class="devotion inc">appreciate</span> having <span class="devotion dec">targets</span> for their frustrations.`;
+		}
+	}
+};
diff --git a/src/events/randomEvent.js b/src/events/randomEvent.js
index b3c87838c35902bb5544d9515710d44d026fd408..dfc8e6ea39ae870ba0ae8e447deed4128fcc8210 100644
--- a/src/events/randomEvent.js
+++ b/src/events/randomEvent.js
@@ -162,6 +162,8 @@ App.Events.getNonindividualEvents = function() {
 		new App.Events.RELegendaryEntertainer(),
 		new App.Events.RELegendaryWomb(),
 
+		new App.Events.REBusyServantsQuarters(),
+
 		// recFS
 		new App.Events.recFSArabianRevivalist(),
 		new App.Events.recFSAssetExpansionist(),
diff --git a/src/uncategorized/randomNonindividualEvent.tw b/src/uncategorized/randomNonindividualEvent.tw
index 20a6b70faac569ec1fb276c7573d8eb6e7570845..eb531a13b0fd99b5d9105625045132a796f54399 100644
--- a/src/uncategorized/randomNonindividualEvent.tw
+++ b/src/uncategorized/randomNonindividualEvent.tw
@@ -94,9 +94,6 @@
 			<<set $events.push("RE busy dairy")>>
 		<</if>>
 	<</if>>
-	<<if _L.servantsQuarters > 3>>
-		<<set $events.push("RE busy servants quarters")>>
-	<</if>>
 	<<if App.Entity.facilities.arcade.employeesIDs().size > 3>>
 		<<set $events.push("RE busy arcade")>>
 	<</if>>
@@ -147,9 +144,8 @@
 		<<if (_S.Bodyguard.relationship == 0)>>
 			<<if (_S.Bodyguard.rules.relationship == "permissive")>>
 				<<if (_S.Bodyguard.fetish != "mindbroken")>>
-					<<set $j = $slaves.findIndex(function(s) { return s.ID != $BodyguardID && s.relationship == 0 && s.devotion >= -20; })>>
-					<<if $j != -1>>
-						<<set $events.push("PE lonely bodyguard")>> /* requires valid $slaves[$j] */
+					<<if $slaves.find(s => s.ID !== $BodyguardID && s.relationship === 0 && s.devotion >= -20)>>
+						<<set $events.push("PE lonely bodyguard")>>
 					<</if>>
 				<</if>>
 			<</if>>
diff --git a/src/uncategorized/reBusyServantsQuarters.tw b/src/uncategorized/reBusyServantsQuarters.tw
deleted file mode 100644
index c98dd93cd52ab7f75799a30e81aef1d8118674b4..0000000000000000000000000000000000000000
--- a/src/uncategorized/reBusyServantsQuarters.tw
+++ /dev/null
@@ -1,41 +0,0 @@
-:: RE busy servants quarters [nobr]
-
-<<set $nextButton = "Continue">>
-<<set $nextLink = "RIE Eligibility Check">>
-
-Your penthouse is very well staffed with servants. The trend in modern buildings is to design around automatic cleaning systems. Dusting, mopping, and polishing are no longer really necessary when machines that do them more cheaply and thoroughly than any human are readily available. Keeping slaves to clean is an ostentation, and visitors to your quarters are often @@.green;surprised and gratified@@ to see a sex slave working away in the old way.
-<<run repX(500, "event")>>
-
-<br><br>
-
-The busy servants' quarters are a reservoir of slaves that can be used for almost any whim that occurs to you.
-
-<br><br>
-
-<span id="result">
-<<link "Share the servants' quarters with your more favored slaves">>
-	<<replace "#result">>
-	<br><br>
-	The poor slaves in the servants' quarters are lower than almost any others, and they know it. Unfortunately for them, they're about to spend a long weekend knowing it unusually well. Sleeping time is usually nearly inviolate; you are the only person in the penthouse who is permitted to wake a sleeping slave for any but emergency reasons. Not now. You haunt the servants' quarters, using and abusing at will, and encourage your better slaves to follow your example. They quickly take the opportunity to be better than someone for once, and compete with each other in sexual harassment of the servants. They @@.hotpink;appreciate@@ having @@.mediumorchid;targets@@ for their frustrations.
-	<<for $i = 0; $i < $slaves.length; $i++>>
-		<<if $slaves[$i].assignment != "work as a servant">>
-			<<set $slaves[$i].devotion += 4>>
-			<<set $slaves[$i].counter.oral += 3>>
-			<<set $oralTotal += 3>>
-		<</if>>
-		<<if $slaves[$i].assignment == "work as a servant">>
-			<<set $slaves[$i].devotion -= 5>>
-			<<if canDoVaginal($slaves[$i]) && $slaves[$i].vagina > 0>>
-				<<set $slaves[$i].counter.vaginal += 1>>
-				<<set $vaginalTotal += 1>>
-			<<elseif canDoAnal($slaves[$i]) && $slaves[$i].anus > 0>>
-				<<set $slaves[$i].counter.anal += 1>>
-				<<set $analTotal += 1>>
-			<</if>>
-			<<set $slaves[$i].counter.oral += 5>>
-			<<set $oralTotal += 5>>
-		<</if>>
-	<</for>>
-	<</replace>>
-<</link>>
-</span>