diff --git a/src/facilities/nursery/nurseryWidgets.js b/src/facilities/nursery/nurseryWidgets.js
index 72b7930972e2a8ebb475f9dc5e10105882eb2451..b5c507d3f83540340bfbb1683c99fed9aeb3e1d9 100644
--- a/src/facilities/nursery/nurseryWidgets.js
+++ b/src/facilities/nursery/nurseryWidgets.js
@@ -2840,23 +2840,7 @@ App.Facilities.Nursery.ChildSummary = function(child) {
 				r += `<strong>Rew:Situ</strong> `;
 				break;
 		}
-		switch (child.rules.release) {
-			case "permissive":
-				r += `<strong>MaR:P</strong> `;
-				break;
-			case "sapphic":
-				r += `<strong>MaR:S</strong> `;
-				break;
-			case "masturbation":
-				r += `<strong>MaR:M</strong> `;
-				break;
-			case "chastity":
-				r += `<strong>MaR:C</strong> `;
-				break;
-			default:
-				r += `<strong>MaR:R</strong> `;
-				break;
-		}
+		r += `<strong>MaR:${App.Utils.releaseSummaryShort(child)}</strong> `;
 	}
 
 	/**
@@ -2870,7 +2854,7 @@ App.Facilities.Nursery.ChildSummary = function(child) {
 		r += `Relationship rules: ${child.rules.relationship}. `;
 		r += `Typical punishment: ${child.rules.punishment}. `;
 		r += `Typical reward: ${child.rules.reward}. `;
-		r += `Release rules: ${child.rules.release}. `;
+		r += `Release rules: ${App.Utils.releaseSummaryLong(child)}. `;
 	}
 
 	/**
@@ -12624,7 +12608,7 @@ App.Facilities.Nursery.LongChildDescription = function(child) {
 				r += tats.vagina(child);
 			}
 
-			if (child.rules.release === "permissive" || child.rules.release === "masturbation") {
+			if (child.rules.release.masturbation === 1) {
 				if ((child.aphrodisiacs > 0 || child.inflationType === "aphrodisiac") && child.drugs !== "priapism agent") {
 					if (child.aphrodisiacs > 1 || (child.inflationType === "aphrodisiac" && child.inflation > 1)) {
 						if (child.dick !== 0 && child.hormoneBalance >= 100 && !hasAnyArms(child)) {
@@ -15052,7 +15036,7 @@ App.Facilities.Nursery.LongChildDescription = function(child) {
 		r += `${He} has a large, liver-colored birthmark, detracting from ${his} beauty. `;
 	}
 	if (child.skin === "sun tanned") {
-		if (child.rules.release !== "restrictive" && child.rules.release !== "masturbation" && child.rules.release !== "chastity") {
+		if (App.Utils.hasNonassignmentSex(child)) {
 			if (child.fetishKnown && child.fetishStrength > 60) {
 				r += `${His} tan is slightly uneven, since ${he} enjoys`;
 				switch (child.fetish) {
@@ -15319,11 +15303,11 @@ App.Facilities.Nursery.LongChildDescription = function(child) {
 				r += `aphrodisiacs, but is an amputee, so ${he} cannot touch ${himself}. ${He} writhes with extreme sexual frustration, desperately trying to relieve ${himself}, but only managing to stir up the aphrodisiacs contained in ${his} gut, strengthening their effects even more. `;
 			} else if (child.chastityVagina) {
 				r += `aphrodisiacs, but is wearing a chastity belt and cannot touch ${himself}. ${He} writhes with extreme sexual frustration, desperately trying to relieve ${himself}, but only managing to stir up the aphrodisiacs contained in ${his} gut, strengthening their effects even more. `;
-			} else if ((child.rules.release === "permissive" || child.rules.release === "masturbation") && child.dick !== 0 && child.vagina === -1) {
+			} else if (child.rules.release.masturbation === 1 && child.dick !== 0 && child.vagina === -1) {
 				r += `aphrodisiacs and is allowed to masturbate, so as ${he} stands before you ${he} rubs ${his} shaft with one hand while ${he} fingers ${his} anus with the other. ${canPenetrate(child) ? `${His} cock is painfully erect. ` : ``}${His} frantic masturbation forces ${his} distended middle to jiggle obscenely, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. `;
-			} else if ((child.rules.release === "permissive" || child.rules.release === "masturbation") && child.dick !== 0) {
+			} else if (child.rules.release.masturbation === 1 && child.dick !== 0) {
 				r += `aphrodisiacs and is allowed to masturbate, so as ${he} stands before you ${he} rubs ${his} shaft and pussy with one hand while ${he} fingers ${his} anus with the other. ${canPenetrate(child) ? `${His} cock is painfully erect. ` : ``}${His} frantic masturbation forces ${his} distended middle to jiggle obscenely, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. `;
-			} else if ((child.rules.release === "permissive" || child.rules.release === "masturbation") && child.vagina !== -1) {
+			} else if (child.rules.release.masturbation === 1 && child.vagina !== -1) {
 				r += `aphrodisiacs, has ${V.seeDicks > 0 ? `no penis and ` : ``}no vagina, and is not allowed to masturbate, so as ${he} stands before you ${he} `;
 				if (child.anus === 0) {
 					r += `plays with a nipple with one hand while furiously rubbing ${his} virgin anus and the sensitive perineum beneath it with the other, desperately trying to get ${himself} off. ${His} frantic attempts force ${his} distended middle to jiggle obscenely, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. `;
@@ -15338,7 +15322,7 @@ App.Facilities.Nursery.LongChildDescription = function(child) {
 					}
 					r += ` to fuck ${his} own ass. ${His} frantic attempts force ${his} distended middle to jiggle obscenely, stirring up the aphrodisiacs contained in ${his} gut and strengthening their effects even more. `;
 				}
-			} else if (child.rules.release === "permissive" || child.rules.release === "masturbation") {
+			} else if (child.rules.release.masturbation === 1) {
 				r += `aphrodisiacs and is allowed to masturbate, so as ${he} stands before you ${he} rubs ${his} clit with one hand while ${he} fingers ${his} anus with the other. `;
 			} else if (child.dick !== 0) {
 				r += `aphrodisiacs and is not allowed to masturbate, so as ${he} stands before you ${he} desperately presents ${his} open mouth, ${his} breasts, ${his} crotch, and ${his} anus in turn, hoping that something will entice you to give ${him} relief. ${canPenetrate(child) ? `${His} cock is painfully erect. ` : ``}`;
@@ -15353,11 +15337,11 @@ App.Facilities.Nursery.LongChildDescription = function(child) {
 				r += `aphrodisiacs, but is an amputee, so ${he} cannot touch ${himself}. ${He} writhes with extreme sexual frustration, desperately trying to relieve ${himself}. `;
 			} else if (child.chastityVagina) {
 				r += `aphrodisiacs, but is wearing a chastity belt and cannot touch ${himself}. ${He} writhes with extreme sexual frustration, desperately trying to relieve ${himself}. `;
-			} else if ((child.rules.release === "permissive" || child.rules.release === "masturbation") && child.dick !== 0 && child.vagina === -1) {
+			} else if (child.rules.release.masturbation === 1 && child.dick !== 0 && child.vagina === -1) {
 				r += `aphrodisiacs and is allowed to masturbate, so as ${he} stands before you ${he} rubs ${his} shaft with one hand while ${he} fingers ${his} anus with the other. ${canPenetrate(child) ? `${His} cock is painfully erect. ` : ``}`;
-			} else if ((child.rules.release === "permissive" || child.rules.release === "masturbation") && child.dick !== 0) {
+			} else if (child.rules.release.masturbation === 1 && child.dick !== 0) {
 				r += `aphrodisiacs and is allowed to masturbate, so as ${he} stands before you ${he} rubs ${his} shaft and pussy with one hand while ${he} fingers ${his} anus with the other. ${canPenetrate(child) ? `${His} cock is painfully erect. ` : ``}`;
-			} else if ((child.rules.release === "permissive" || child.rules.release === "masturbation") && child.vagina !== -1) {
+			} else if (child.rules.release.masturbation === 1 && child.vagina !== -1) {
 				r += `aphrodisiacs, has ${V.seeDicks > 0 ? `no penis and ` : ``}no vagina, and is not allowed to masturbate, so as ${he} stands before you ${he}`;
 				if (child.anus === 0) {
 					r += `plays with a nipple with one hand while furiously rubbing ${his} virgin anus and the sensitive perineum beneath it with the other, desperately trying to get ${himself} off. `;
@@ -15372,7 +15356,7 @@ App.Facilities.Nursery.LongChildDescription = function(child) {
 					}
 					r += ` to fuck ${his} own ass. `;
 				}
-			} else if (child.rules.release === "permissive" || child.rules.release === "masturbation") {
+			} else if (child.rules.release.masturbation === 1) {
 				r += `aphrodisiacs and is allowed to masturbate, so as ${he} stands before you ${he} rubs ${his} clit with one hand while ${he} fingers ${his} anus with the other. `;
 			} else if (child.dick !== 0) {
 				r += `aphrodisiacs and is not allowed to masturbate, so as ${he} stands before you ${he} desperately presents ${his} open mouth, ${his} breasts, ${his} crotch, and ${his} anus in turn, hoping that something will entice you to give ${him} relief. ${canPenetrate(child) ? `${His} cock is painfully erect. ` : ``}`;
@@ -15386,11 +15370,11 @@ App.Facilities.Nursery.LongChildDescription = function(child) {
 				r += `${He}'s on aphrodisiacs, but is an amputee, so ${he} cannot touch ${himself}. ${He} writhes with sexual frustration. `;
 			} else if (child.chastityVagina) {
 				r += `${He}'s on aphrodisiacs, but is wearing a chastity belt and cannot touch ${himself}. ${He} writhes with sexual frustration. `;
-			} else if ((child.rules.release === "permissive" || child.rules.release === "masturbation") && child.dick !== 0 && child.vagina === -1) {
+			} else if (child.rules.release.masturbation === 1 && child.dick !== 0 && child.vagina === -1) {
 				r += `${He}'s on aphrodisiacs and is allowed to masturbate, so as ${he} obeys your commands ${he} idly rubs ${his} shaft with one hand while the other pinches a nipple. `;
-			} else if ((child.rules.release === "permissive" || child.rules.release === "masturbation") && child.dick !== 0) {
+			} else if (child.rules.release.masturbation === 1 && child.dick !== 0) {
 				r += `${He}'s on aphrodisiacs and is allowed to masturbate, so as ${he} obeys your commands ${he} idly rubs ${his} shaft and pussy with one hand while the other pinches a nipple. `;
-			} else if (child.rules.release === "permissive" || child.rules.release === "masturbation") {
+			} else if (child.rules.release.masturbation === 1) {
 				r += `${He}'s on aphrodisiacs and is allowed to masturbate, so as ${he} obeys your commands ${he} idly rubs ${his} pussy with one hand while the other pinches a nipple. `;
 			} else if (child.dick !== 0 && canPenetrate(child)) {
 				r += `${He}'s on aphrodisiacs and is not allowed to masturbate, so as ${he} obeys your commands ${he} shifts ${his} weight uncomfortably. ${His} erect dick sways as ${he} does. `;
@@ -15767,7 +15751,7 @@ App.Facilities.Nursery.infantToChild = function infantToChild(child) {
 	child.relationship = 0,
 	child.rules.relationship = "restrictive",	// TODO:
 	child.relationshipTarget = 0,
-	child.rules.release = "restrictive",	// TODO:
+	child.rules.release = new App.Entity.ReleaseRulesState(),	// TODO:
 	child.rivalry = 0,
 	child.rivalryTarget = 0,
 	child.rudeTitle = 0,
@@ -17733,14 +17717,7 @@ App.Facilities.Nursery.ChildState = class ChildState {
 		* * "language lessons"
 		*/
 		this.rules.speech = "restrictive";
-		/**
-		* * "permissive"
-		* * "sapphic"
-		* * "masturbation"
-		* * "restrictive"
-		* * "chastity"
-		*/
-		this.rules.release = "restrictive";
+		this.rules.release = new App.Entity.ReleaseRulesState();
 		/**
 		* * "restrictive"
 		* * "just friends"
diff --git a/src/interaction/main/walkPast.js b/src/interaction/main/walkPast.js
index 851908e4144c1cecdddd569a05dfe0bd9c1d911f..e78e250424f5acbffbc8d39f03b9600be7c4a806 100644
--- a/src/interaction/main/walkPast.js
+++ b/src/interaction/main/walkPast.js
@@ -87,7 +87,7 @@ window.walkPast = (function() {
 
 		if (V.partner === "rivalry") {
 			output += rivalSlave(activeSlave, seed);
-		} else if (V.partner === "relationship" && activeSlave.relationship >= 3 && activeSlave.rules.release !== "restrictive" && activeSlave.rules.release !== "masturbation" && activeSlave.rules.release !== "chastity") {
+		} else if (V.partner === "relationship" && App.Utils.hasPartnerSex(activeSlave)) {
 			output += loverSlave(activeSlave);
 		} else if (V.partner === "relationship" || V.partner === "relation") {
 			output += relatedSlave(activeSlave);
@@ -217,7 +217,7 @@ window.walkPast = (function() {
 	function primeSlave(activeSlave, seed) {
 		r = "";
 
-		if (V.partner !== "relationship" || activeSlave.relationship === 1 || activeSlave.relationship === 2 || activeSlave.rules.release === "restrictive") {
+		if (V.partner !== "relationship" || !App.Utils.hasPartnerSex(activeSlave)) {
 			r += `${activeSlave.slaveName} `;
 			r += walkPasts(activeSlave, seed);
 			t = "";
@@ -307,7 +307,8 @@ window.walkPast = (function() {
 					fuckSpot = `out in the open in the slave dormitory`;
 				}
 
-				if ((activeSlave.fetish === "dom" || activeSlave.fetish === "sadist") && canPenetrate(activeSlave) && (partnerSlave.fetish === "dom" || partnerSlave.fetish === "sadist") && canPenetrate(partnerSlave)) {
+				const thirdWheelAllowed = (activeSlave.rules.release.slaves === 1) && (partnerSlave.rules.release.slaves === 1);
+				if (thirdWheelAllowed && (activeSlave.fetish === "dom" || activeSlave.fetish === "sadist") && canPenetrate(activeSlave) && (partnerSlave.fetish === "dom" || partnerSlave.fetish === "sadist") && canPenetrate(partnerSlave)) {
 					t += `double penetrating another slave. They're face to face over their sub's shoulders, `;
 					if (canSee(activeSlave) && canSee(partnerSlave)) {
 						t += `looking into each other's eyes `;
diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js
index f68846ceaf3d957285a22526b2694d5124b6a951..0839c9dc068a67a91e0848f93cab19b509fb1b8c 100644
--- a/src/js/DefaultRules.js
+++ b/src/js/DefaultRules.js
@@ -1939,25 +1939,16 @@ window.DefaultRules = (function() {
 	 * @param {object} rule
 	 */
 	function ProcessRelease(slave, rule) {
+		// FIXME: rule.releaseRules is currently a string - slave.rules.release isn't!
 		if ((rule.releaseRules !== undefined) && (rule.releaseRules !== null)) {
 			let release = 0;
-			if (rule.releaseRules === "restrictive" &&
+			if (!App.Utils.hasNonassignmentSex(slave) &&
 				!(["be a subordinate slave", "be confined in the arcade", "be your Head Girl", "get milked", "please you", "serve in the club", "serve in the master suite", "serve the public", "whore", "work a glory hole", "work as a farmhand", "work in the brothel", "work in the dairy"].contains(slave.assignment))) {
 				release = 1;
 			}
-			if (slave.fetish === "mindbroken") {
-				if (slave.rules.release !== "permissive") {
-					slave.rules.release = "permissive";
-					r += `<br>Since ${slave.slaveName} is mindbroken, ${his} masturbation rules have been set to permissive.`;
-				}
-			} else if (!hasAnyArms(slave) || slave.fuckdoll > 0) {
-				if (slave.rules.release === "masturbation") {
-					slave.rules.release = "restrictive";
-					r += `<br>Since ${slave.slaveName} is unable to masturbate, ${his} masturbation rules have been set to restrictive.`;
-				}
-			} else if ((release !== 1) && (slave.rules.release !== rule.releaseRules)) {
+			if ((release !== 1) && (slave.rules.release !== rule.releaseRules)) {
 				slave.rules.release = rule.releaseRules;
-				r += `<br>${slave.slaveName}'s masturbation rules have been set to ${rule.releaseRules}.`;
+				r += `<br>${slave.slaveName}'s release rules have been set to: ${App.Utils.releaseSummaryLong}.`;
 			}
 		}
 	}
diff --git a/src/js/economyJS.js b/src/js/economyJS.js
index 9c51188ad5ce05fb1371e1c10a3508a781f6afc8..fc05b8c8d172ab87a3e019e82500b8f7aab4d9d7 100644
--- a/src/js/economyJS.js
+++ b/src/js/economyJS.js
@@ -1377,7 +1377,7 @@ window.slaveJobValues = function(lowerClassSexDemandRef, middleClassSexDemandRef
 
 		// The quality/value of each sexual act
 		s.sexQuality = FResult(s);
-		if ((s.rules.release === "restrictive" || s.rules.release === "chastity") && s.rules.reward !== "orgasm" && s.energy >= 20) {
+		if (!App.Utils.hasNonAssignmentSex(s) && s.rules.reward !== "orgasm" && s.energy >= 20) {
 			s.sexQuality += 2;
 		}
 		if (canDoAnal(s) && s.anus === 0) {
@@ -1555,7 +1555,7 @@ window.slaveJobValues = function(lowerClassSexDemandRef, middleClassSexDemandRef
 
 		// The quality/value of each sexual act
 		s.sexQuality = FResult(s);
-		if ((s.releaseRules === "restrictive" || s.releaseRules === "chastity") && s.standardReward !== "orgasm" && s.energy >= 20) {
+		if (!App.Utils.hasNonassignmentSex(s) && s.standardReward !== "orgasm" && s.energy >= 20) {
 			s.sexQuality += 2;
 		}
 		if (canDoAnal(s) && s.anus === 0) {
diff --git a/src/js/eventSelectionJS.js b/src/js/eventSelectionJS.js
index f8ef71249b8b4630ad28eed0f12e27e462e6f555..f8bd29fb34de29c3efa94e7b4213060af7365942 100644
--- a/src/js/eventSelectionJS.js
+++ b/src/js/eventSelectionJS.js
@@ -18,7 +18,7 @@ window.generateRandomEventPoolStandard = function(eventSlave) {
 							if (eventSlave.energy > 40) {
 								if (canPenetrate(eventSlave)) {
 									if (canSee(eventSlave)) {
-										if (eventSlave.rules.release !== "restrictive" && eventSlave.rules.release !== "masturbation" && eventSlave.rules.release !== "chastity") {
+										if (eventSlave.rules.release.slaves === 1) {
 											State.variables.RETSevent.push("interslave begging");
 										}
 									}
@@ -1843,7 +1843,7 @@ window.generateRandomEventPoolServant = function(eventSlave) {
 							if (eventSlave.energy > 40) {
 								if (canPenetrate(eventSlave)) {
 									if (canSee(eventSlave)) {
-										if (eventSlave.rules.release !== "restrictive" && eventSlave.rules.release !== "masturbation" && eventSlave.rules.release !== "chastity") {
+										if (eventSlave.rules.release.slaves === 1) {
 											State.variables.RETSevent.push("interslave begging");
 										}
 									}
diff --git a/src/js/rulesAssistantOptions.js b/src/js/rulesAssistantOptions.js
index db452df01c2f13b20e2bf57f5ef036277dfd8af3..0702884673e468227bfc6cc8100c7c9cf573fa78 100644
--- a/src/js/rulesAssistantOptions.js
+++ b/src/js/rulesAssistantOptions.js
@@ -2777,6 +2777,7 @@ window.rulesAssistantOptions = (function() {
 		}
 	}
 
+	// FIXME: update for new release rules (slave.rules.release)
 	class ReleaseList extends ListSelector {
 		constructor() {
 			const pairs = [
diff --git a/src/js/slaveSummaryWidgets.js b/src/js/slaveSummaryWidgets.js
index 4c10d6462675377ad78368c436ade10b1e46a1bc..c849d543a08668c329c44c9ed715ba1628c5bb9d 100644
--- a/src/js/slaveSummaryWidgets.js
+++ b/src/js/slaveSummaryWidgets.js
@@ -445,23 +445,7 @@ window.SlaveSummaryUncached = (function() {
 				makeSpan(c, "Rew:Situ", styles);
 				break;
 		}
-		switch (slave.rules.release) {
-			case "permissive":
-				makeSpan(c, "MaR:P", styles);
-				break;
-			case "sapphic":
-				makeSpan(c, "MaR:S", styles);
-				break;
-			case "masturbation":
-				makeSpan(c, "MaR:M", styles);
-				break;
-			case "chastity":
-				makeSpan(c, "MaR:C", styles);
-				break;
-			default:
-				makeSpan(c, "MaR:R", styles);
-				break;
-		}
+		makeSpan(c, "MaR:" + App.Utils.releaseSummaryShort(slave), styles);
 	}
 
 	/**
@@ -477,7 +461,7 @@ window.SlaveSummaryUncached = (function() {
 		addText(c, `Relationship rules: ${slave.rules.relationship}. `);
 		addText(c, `Typical punishment: ${slave.rules.punishment}. `);
 		addText(c, `Typical reward: ${slave.rules.reward}. `);
-		addText(c, `Release rules: ${slave.rules.release}. `);
+		addText(c, `Release rules: ${App.Utils.releaseSummaryLong(slave)}. `);
 	}
 
 	/**
diff --git a/src/js/surgery.js b/src/js/surgery.js
index f78ec553f5087b9f230904ee847afefde7bb16e2..94274b462a84b4119a5275d6d75b2218fec5a964 100644
--- a/src/js/surgery.js
+++ b/src/js/surgery.js
@@ -933,7 +933,10 @@ window.beginFuckdoll = function(slave) {
 	}
 	slave.rules.living = "spare";
 	slave.rules.speech = "restrictive";
-	slave.rules.release = "restrictive";
+	slave.rules.release.masturbation = 0;
+	slave.rules.release.partner = 0;
+	slave.rules.release.family = 0;
+	slave.rules.release.slaves = 0;
 	slave.rules.relationship = "restrictive";
 	slave.choosesOwnClothes = 0;
 	slave.clothes = "a Fuckdoll suit";
diff --git a/src/js/vignettes.js b/src/js/vignettes.js
index d49869eecbc4b44a98281e2f03af27001beec312..96cd42211e4feccd45b11c95b51f306e3c0bd104 100644
--- a/src/js/vignettes.js
+++ b/src/js/vignettes.js
@@ -764,19 +764,20 @@ window.GetVignette = function GetVignette(slave) {
 				});
 			}
 		}
-		if (slave.rules.release === "permissive" || slave.rules.release === "masturbation") {
+		if (slave.rules.release.masturbation === 1) {
 			vignettes.push({
 				text: `a customer asked if ${he} masturbates, and then spent an hour jerking off as ${he} described how,`,
 				type: "cash",
 				effect: 1,
 			});
-		} else if (slave.rules.release === "restrictive") {
+		} else {
 			vignettes.push({
 				text: `a customer asked if ${he} masturbates, and seemed disappointed when ${he} answered honestly,`,
 				type: "cash",
 				effect: 0,
 			});
-		} else {
+		}
+		if (App.Utils.hasNonassignmentSex(slave)) {
 			vignettes.push({
 				text: `a closeted female customer asked about ${his} sex life with other slaves, and was enthralled by ${his} answer,`,
 				type: "rep",
@@ -2732,19 +2733,20 @@ window.GetVignette = function GetVignette(slave) {
 				});
 			}
 		}
-		if (slave.rules.release === "permissive" || slave.rules.release === "masturbation") {
+		if (slave.rules.release.masturbation === 1) {
 			vignettes.push({
 				text: `a citizen asked if ${he} masturbates, and then spent an hour jerking off as ${he} described how,`,
 				type: "rep",
 				effect: 1,
 			});
-		} else if (slave.rules.release === "restrictive") {
+		} else {
 			vignettes.push({
 				text: `a citizen asked if ${he} masturbates, and seemed disappointed when ${he} answered honestly,`,
 				type: "rep",
 				effect: 0,
 			});
-		} else {
+		}
+		if (App.Utils.hasNonassignmentSex(slave)) {
 			vignettes.push({
 				text: `a closeted female citizen asked about ${his} sex life with other slaves, and was enthralled by ${his} answer,`,
 				type: "rep",
@@ -4453,7 +4455,7 @@ window.GetVignette = function GetVignette(slave) {
 				});
 			} else {
 				if (hasAnyArms(slave)) {
-					if (slave.rules.release === "permissive" || slave.rules.release === "masturbation") {
+					if (slave.rules.release.masturbation === 1) {
 						vignettes.push({
 							text: `due to the obvious difficulties in ${his} mobility, ${he} spent a lot of time masturbating in bed,`,
 							type: "health",
@@ -4470,7 +4472,7 @@ window.GetVignette = function GetVignette(slave) {
 			}
 		}
 		if (slave.energy > 80) {
-			if (slave.rules.release === "permissive" || slave.rules.release === "masturbation") {
+			if (slave.rules.release.masturbation === 1) {
 				if (slave.fetish === "boobs") {
 					if (slave.boobs >= 800) {
 						vignettes.push({
diff --git a/src/npc/fFeelings.tw b/src/npc/fFeelings.tw
index 91fe9a79263dcbe4a195501d39a122efa6c0130f..60d4dff434d2e56c19f4a69b35ba31765e7487cd 100644
--- a/src/npc/fFeelings.tw
+++ b/src/npc/fFeelings.tw
@@ -423,7 +423,7 @@ My favorite part of my body i<<s>>
 			<<set _Amp = "rub mythelf againtht thtuff,">>
 		<</if>>
 	<</if>>
-	<<if ($activeSlave.rules.release == "permissive") || ($activeSlave.rules.release == "masturbation")>>
+	<<if ($activeSlave.rules.release.masturbation == 1)>>
 		Thank you for letting me
 		<<if ($activeSlave.fetishKnown == 1)>>
 			<<if ($activeSlave.energy > 95) && (!canSee($activeSlave))>>
@@ -464,7 +464,7 @@ My favorite part of my body i<<s>>
 		<<else>>
 			_Amp <<Master>>.
 		<</if>>
-	<<elseif ($activeSlave.rules.release == "sapphic")>>
+	<<elseif ($activeSlave.rules.release.slaves == 1)>>
 		Thank you for letting
 		<<if ($activeSlave.fetishKnown == 1)>>
 			<<if ($activeSlave.energy > 95)>>
@@ -498,7 +498,44 @@ My favorite part of my body i<<s>>
 				me get off with the other girl<<s>>,
 			<</if>>
 		<<else>>
-			me _Amp
+			me get off with the other girl<<s>>,
+		<</if>>
+		<<Master>>.
+	<<elseif (App.Utils.hasFamilySex($activeSlave))>>
+		Thank you for letting
+		<<if ($activeSlave.fetishKnown == 1)>>
+			<<if ($activeSlave.energy > 95)>>
+				me fuck my family,
+			<<elseif ($activeSlave.fetish == "humiliation") && ($activeSlave.fetishStrength > 60)>>
+				my family fuck me, I love doing it in the dormitory where everyone can <<s>>ee us.
+			<<elseif ($activeSlave.fetish == "sadist") && ($activeSlave.fetishStrength > 60)>>
+				me abu<<s>>e my family,
+			<<elseif ($activeSlave.fetish == "buttslut") && ($activeSlave.fetishStrength > 60)>>
+				my family fuck my butthole,
+			<<elseif ($activeSlave.fetish == "boobs") && ($activeSlave.fetishStrength > 60)>>
+				my family play with my boob<<s>>,
+			<<elseif ($activeSlave.fetish == "pregnancy") && ($activeSlave.fetishStrength > 60)>>
+				<<if ($activeSlave.bellyPreg >= 5000)>>
+					my family fuck me, being pregnant and getting fucked i<<s>> amazing,
+				<<elseif ($activeSlave.dick > 1) && ($activeSlave.balls > 0)>>
+					me fuck my family, I cum <<s>>o hard whenever I imagine filling them with babie<<s>>,
+				<<else>>
+					my family fuck me, I love imagining how I'd look with a tummy <<s>>wollen with babie<<s>>,
+				<</if>>
+			<<elseif ($activeSlave.fetish == "cumslut") && ($activeSlave.fetishStrength > 60)>>
+				my family u<<s>>e my mouth to cum.
+				<<if ($activeSlave.dick > 0) && ($activeSlave.balls > 0)>>
+					Being able to drink my own cum i<<s>> really fun too,
+				<<elseif $activeSlave.dietCum == 1 || $activeSlave.dietCum == 2 >>
+					I love having cum in my food, and <<s>>ometime<<s>> I get an e<<x>>tra load on top from a relative,
+				<</if>>
+			<<elseif ($activeSlave.attrKnown == 1) && ($activeSlave.attrXX > 80)>>
+				me bone the ladie<<s>> in my family,
+			<<else>>
+				me get off with the other girl<<s>> in my family,
+			<</if>>
+		<<else>>
+			me get off with the other girl<<s>> in my family,
 		<</if>>
 		<<Master>>.
 	<<else>>
diff --git a/src/pregmod/widgets/deathWidgets.tw b/src/pregmod/widgets/deathWidgets.tw
index 17e7af9e4fd6b5c9f6a7e3804e0af93ce82b54a0..0697933639997e1be1c285b9b49417c83070a636 100644
--- a/src/pregmod/widgets/deathWidgets.tw
+++ b/src/pregmod/widgets/deathWidgets.tw
@@ -46,7 +46,7 @@
 		<<elseif _deathSeed > 25>>
 			$He is found dead in the showers, having slipped sometime earlier.
 		<<else>>
-			<<if $args[0].rules.release != "restrictive" && $args[0].rules.release != "masturbation" && $args[0].rules.release != "chastity">>
+			<<if App.Utils.hasNonassignmentSex($args[0])>>
 				$He is found dead in the bed of another slave, having died during intercourse. $His lover is not taking it well.
 			<<else>>
 				$He is found dead in the cafeteria, having died during breakfast; $he ruined the day for a number of your slaves.
diff --git a/src/uncategorized/RESS.tw b/src/uncategorized/RESS.tw
index c92d6167d25fbc310b25fd2f9f035b99ad3bd45b..4a1ed88603872d0c6443d086d7bc3d912aad2be4 100644
--- a/src/uncategorized/RESS.tw
+++ b/src/uncategorized/RESS.tw
@@ -3845,7 +3845,7 @@ The slutty $desc wants it badly.
 
 <<case "arcade sadist">>
 
-You happen to come across <<EventNameLink>> during one of $his rest periods. $He's lying on a couch in the slave areas, <<if canSee($activeSlave)>>staring at the ceiling above $him<<else>>leaning back<</if>> with a dreamy expression on $his face. $He's <<if $activeSlave.rules.release == "permissive" || $activeSlave.rules.release == "masturbation">>touching $himself idly.<<else>>not allowed to touch $himself, but $he's extremely aroused.<</if>> Whatever's on $his mind, it's so absorbing that $he doesn't realize you're there until you're standing over $him.
+You happen to come across <<EventNameLink>> during one of $his rest periods. $He's lying on a couch in the slave areas, <<if canSee($activeSlave)>>staring at the ceiling above $him<<else>>leaning back<</if>> with a dreamy expression on $his face. $He's <<if $activeSlave.rules.release.masturbation == 1>>touching $himself idly.<<else>>not allowed to touch $himself, but $he's extremely aroused.<</if>> Whatever's on $his mind, it's so absorbing that $he doesn't realize you're there until you're standing over $him.
 <br><br>
 "<<S>>orry, <<Master>>," $he <<say>>s apologetically, <<if $activeSlave.belly >= 10000>>struggling<<else>>scrambling<</if>> to $his feet. "I didn't noti<<c>>e you there." <<if canSee($activeSlave)>>Seeing your questioning look<<elseif canHear($activeSlave)>>Hearing your lack of response<<else>>Sensing a request to continue<</if>>, $he explains $himself further. "I was ju<<s>>t thinking about, um, my favorite pla<<c>>e. I can almo<<s>>t get off ju<<s>>t by thinking about it." There's a wild, perverted gleam <<if canSee($activeSlave)>>in $his <<= App.Desc.eyesColor($activeSlave)>><<else>>on $his face<</if>>. $He's a confirmed sadist, so whatever $his favorite mental masturbation is probably quite strong.
 
@@ -19301,7 +19301,7 @@ brought in to you. This time <<EventNameLink>> has been sent to deliver it. $He
 		<<if $activeSlave.belly >= 10000>> You spread your legs as you shift into a more comfortable position, stealthily showing mercy since $he can't possibly keep $his <<if $activeSlave.bellyPreg >= 3000>>full-term belly<<else>>_belly belly<</if>> off you otherwise.<</if>> $He bobs up and down, getting you off without ever touching you<<if $PC.dick != 0>>, other than the contact between your penis and the inside of $his body, of course<</if>>.
 		<<if $activeSlave.energy > 80>>
 			$He has such a powerful sex drive that even this sterile intercourse brings $him to orgasm.
-		<<elseif $activeSlave.rules.release == "restrictive" || $activeSlave.rules.release == "chastity">>
+		<<elseif (!App.Utils.hasNonassignmentSex($activeSlave))>>
 			$He obeys the rules about orgasm and hasn't gotten off as part of $his assignment recently, so $he orgasms despite the sterility of the intercourse.
 		<<else>>
 			$He does not orgasm, serving you properly and showing appropriate disregard for $his own pleasure.
diff --git a/src/uncategorized/RETS.tw b/src/uncategorized/RETS.tw
index 70eeceeefb8d4f3d53447b98898b812c8c33b691..e8eab0b4cc9ba47c6d60c14e8c8e374715061913 100644
--- a/src/uncategorized/RETS.tw
+++ b/src/uncategorized/RETS.tw
@@ -928,7 +928,7 @@ The slaves are about to go to bed; they're naked, and the horny $activeSlave.sla
 <br><br>
 <<run Enunciate($subSlave)>>
 $subSlave.slaveName <<if _lewd>>blushes at the lewd<<else>>smiles at the<</if>> flattery, but after a moment's hesitation _he2 maintains _his2 reluctance.
-<<if $activeSlave.rules.release == "permissive">>
+<<if $activeSlave.rules.release.masturbation == 1>>
 	"Why don't you ju<<s>>t jerk off," _he2 asks dismissively. "<<S>>eriou<<s>>ly, you're allowed to."
 <<else>>
 	"Go find <<s>>omeone el<<s>>e," _he2 <<say>>s dismissively. "<<if _vaginal>>There are plenty of other pu<<ss>>ie<<s>> around for you to play with.<<else>>I'm <<s>>ure you can find <<s>>ome other _girl2 who wouldn't mind late night anal.<</if>>"
@@ -937,7 +937,7 @@ _He2 turns away.
 <br><br>
 <<run Enunciate($activeSlave)>>
 $activeSlave.slaveName is almost in tears.
-<<if $activeSlave.rules.release == "permissive">>
+<<if $activeSlave.rules.release.masturbation == 1>>
 	"I have," $he moans, blue balled. "<<if $activeSlave.aphrodisiacs > 0 || $activeSlave.inflationType == "aphrodisiac">>It'<<s>> the<<s>>e fucking aphrodi<<s>>iac<<s>>. I can't help it. Plea<<s>>e, plea<<s>>e let me try cumming in<<s>>ide you. I won't be able to <<s>>leep.<<else>>It'<<s>> not the <<s>>ame. I need to <<s>>tick my dick in <<s>>omething <<s>>o bad. Plea<<s>>e.<</if>>"
 <<else>>
 	"But I want you," $he moans, blue balled.
diff --git a/src/uncategorized/assistantEvents.tw b/src/uncategorized/assistantEvents.tw
index ef361f7a59abf9b8fded63c997e6820dc75b9969..0ff4bef0ee62c11098fd27c6625804b0d500d354 100644
--- a/src/uncategorized/assistantEvents.tw
+++ b/src/uncategorized/assistantEvents.tw
@@ -24,7 +24,7 @@ One morning, after seeing to an immense pile of business with $assistantName pro
 <<set $assistantOptions = 1>>
 <<set _smartPiercings = 0>>
 <<for $i = 0; $i < $slaves.length; $i++>>
-	<<if ($slaves[$i].rules.release == "permissive") || ($slaves[$i].rules.release == "masturbation")>>
+	<<if ($slaves[$i].rules.release.masturbation == 1)>>
 		<<set $activeSlave = $slaves[$i]>>
 		<<set _smartPiercings = 1>>
 		<<break>>
diff --git a/src/uncategorized/longSlaveDescription.tw b/src/uncategorized/longSlaveDescription.tw
index f8479dde9a96ec616ffd7c69d74b851f12e624ef..f2a8c89daa2f541f6f883898fc2f4c8f8b9af2d0 100644
--- a/src/uncategorized/longSlaveDescription.tw
+++ b/src/uncategorized/longSlaveDescription.tw
@@ -253,53 +253,7 @@ is
 		<<else>>
 			$He sleeps in $his own little room,
 		<</if>>
-		<<if $activeSlave.rules.release == "restrictive">>
-			and $he is not allowed to masturbate or proposition
-			<<if ($activeSlave.rules.relationship == "permissive")>>
-				<<if ($activeSlave.relationship == 5)>>
-					slaves other than $his _wife2.
-				<<elseif ($activeSlave.relationship == 4)>>
-					slaves other than $his <<= _girl2>>friend.
-				<<elseif ($activeSlave.relationship == 3)>>
-					slaves other than $his fuckbuddy.
-				<<else>>
-					other slaves; $he must find sexual release in $his duties.
-				<</if>>
-			<<else>>
-				other slaves; $he must find sexual release in $his duties.
-			<</if>>
-		<<elseif $activeSlave.rules.release == "sapphic">>
-			<<if $universalRulesConsent == 1>>
-				and $he is not allowed to masturbate; $he must proposition other slaves to find sexual release,
-				<<if ($activeSlave.devotion > 50) || ($activeSlave.energy > 95)>>
-					which $he is constantly doing.
-				<<elseif ($activeSlave.devotion > 20)>>
-					which $he is often willing to do.
-				<<else>>
-					which $he is rarely willing to do.
-				<</if>>
-			<<else>>
-				and $he is not allowed to masturbate; $he is allowed to demand sex from other slaves,
-				<<if ($activeSlave.devotion > 50) || ($activeSlave.energy > 95)>>
-					an opportunity $he takes shameless advantage of.
-				<<elseif ($activeSlave.devotion > 20)>>
-					which $he is often willing to do.
-				<<else>>
-					which $he is rarely willing to do.
-				<</if>>
-			<</if>>
-		<<elseif $activeSlave.rules.release == "masturbation">>
-			and $he is only allowed to
-			<<if ($activeSlave.energy > 95)>>
-				masturbate, which $he is constantly doing.
-			<<else>>
-				masturbate.
-			<</if>>
-		<<elseif $activeSlave.rules.release == "permissive">>
-			and $he is allowed to masturbate.
-		<<elseif $activeSlave.rules.release == "chastity">>
-			and $he is to remain completely chaste.
-		<</if>>
+		<<= App.Desc.releaseDesc($activeSlave)>>
 	<</if>>
 
 <</if>> /* CLOSES SALE AND EVENT RULES NONDISPLAY */
@@ -2027,7 +1981,7 @@ $He is
 		$He has a large, liver-colored birthmark, detracting from $his beauty.
 	<</if>>
 	<<if ($activeSlave.skin == "sun tanned")>>
-		<<if ($activeSlave.rules.release != "restrictive" && $activeSlave.rules.release != "masturbation" && $activeSlave.rules.release != "chastity")>>
+		<<if (($activeSlave.rules.release.slaves === 1) || App.Utils.hasFamilySex($activeSlave))>>
 			<<if ($activeSlave.fetishStrength > 60) && ($activeSlave.fetishKnown == 1)>>
 				$His tan is slightly uneven, since $he enjoys
 				<<if ($activeSlave.fetish == "buttslut")>>
@@ -2287,18 +2241,18 @@ $He is
 				aphrodisiacs, but is an amputee, so $he cannot touch $himself. $He writhes with extreme sexual frustration, desperately trying to relieve $himself, but only managing to stir up the aphrodisiacs contained in $his gut, strengthening their effects even more.
 			<<elseif ($activeSlave.chastityVagina)>>
 				aphrodisiacs, but is wearing a chastity belt and cannot touch $himself. $He writhes with extreme sexual frustration, desperately trying to relieve $himself, but only managing to stir up the aphrodisiacs contained in $his gut, strengthening their effects even more.
-			<<elseif ($activeSlave.rules.release == "permissive" || $activeSlave.rules.release == "masturbation") && ($activeSlave.dick != 0) && ($activeSlave.vagina == -1)>>
+			<<elseif ($activeSlave.rules.release.masturbation == 1 && ($activeSlave.dick != 0) && ($activeSlave.vagina == -1)>>
 				aphrodisiacs and is allowed to masturbate, so as $he stands before you $he rubs $his shaft with <<if hasBothArms($activeSlave)>>one hand while $he fingers $his anus with the other<<else>>$his hand<</if>>.<<if canPenetrate($activeSlave)>> $His cock is painfully erect.<</if>> $His frantic masturbation forces $his distended middle to jiggle obscenely, stirring up the aphrodisiacs contained in $his gut and strengthening their effects even more.
-			<<elseif ($activeSlave.rules.release == "permissive" || $activeSlave.rules.release == "masturbation") && ($activeSlave.dick != 0)>>
+			<<elseif ($activeSlave.rules.release.masturbation == 1) && ($activeSlave.dick != 0)>>
 				aphrodisiacs and is allowed to masturbate, so as $he stands before you $he rubs $his shaft and pussy with <<if hasBothArms($activeSlave)>>one hand while $he fingers $his anus with the other<<else>>$his hand<</if>>.<<if canPenetrate($activeSlave)>> $His cock is painfully erect.<</if>> $His frantic masturbation forces $his distended middle to jiggle obscenely, stirring up the aphrodisiacs contained in $his gut and strengthening their effects even more.
-			<<elseif ($activeSlave.rules.release == "permissive" || $activeSlave.rules.release == "masturbation") && ($activeSlave.vagina == -1)>>
+			<<elseif ($activeSlave.rules.release.masturbation == 1) && ($activeSlave.vagina == -1)>>
 				aphrodisiacs, has<<if $seeDicks > 0>> no penis and<</if>> no vagina, and is not allowed to masturbate, so as $he stands before you $he
 				<<if $activeSlave.anus == 0>>
 					plays with a nipple with one hand while furiously rubbing $his virgin anus and the sensitive perineum beneath it with the other, desperately trying to get $himself off. $His frantic attempts force $his distended middle to jiggle obscenely, stirring up the aphrodisiacs contained in $his gut and strengthening their effects even more.
 				<<else>>
 					uses <<if $activeSlave.anus > 2>>$his entire hand, formed into a beak shape,<<elseif $activeSlave.anus > 1>>two fingers<<else>>a finger<</if>> to fuck $his own ass. $His frantic attempts force $his distended middle to jiggle obscenely, stirring up the aphrodisiacs contained in $his gut and strengthening their effects even more.
 				<</if>>
-			<<elseif ($activeSlave.rules.release == "permissive" || $activeSlave.rules.release == "masturbation")>>
+			<<elseif ($activeSlave.rules.release.masturbation == 1)>>
 				aphrodisiacs and is allowed to masturbate, so as $he stands before you $he rubs $his clit with <<if hasBothArms($activeSlave)>>one hand while $he fingers $his anus with the other<<else>>$his hand<</if>>.
 			<<elseif ($activeSlave.dick != 0)>>
 				aphrodisiacs and is not allowed to masturbate, so as $he stands before you $he desperately presents $his open mouth, $his breasts, $his crotch, and $his anus in turn, hoping that something will entice you to give $him relief.<<if canPenetrate($activeSlave)>> $His cock is painfully erect.<</if>>
@@ -2313,18 +2267,18 @@ $He is
 				aphrodisiacs, but is an amputee, so $he cannot touch $himself. $He writhes with extreme sexual frustration, desperately trying to relieve $himself.
 			<<elseif ($activeSlave.chastityVagina)>>
 				aphrodisiacs, but is wearing a chastity belt and cannot touch $himself. $He writhes with extreme sexual frustration, desperately trying to relieve $himself.
-			<<elseif ($activeSlave.rules.release == "permissive" || $activeSlave.rules.release == "masturbation") && ($activeSlave.dick != 0) && ($activeSlave.vagina == -1)>>
+			<<elseif ($activeSlave.rules.release.masturbation == 1) && ($activeSlave.dick != 0) && ($activeSlave.vagina == -1)>>
 				aphrodisiacs and is allowed to masturbate, so as $he stands before you $he rubs $his shaft with <<if hasBothArms($activeSlave)>>one hand while $he fingers $his anus with the other<<else>>$his hand<</if>>.<<if canPenetrate($activeSlave)>> $His cock is painfully erect.<</if>>
-			<<elseif ($activeSlave.rules.release == "permissive" || $activeSlave.rules.release == "masturbation") && ($activeSlave.dick != 0)>>
+			<<elseif ($activeSlave.rules.release.masturbation == 1) && ($activeSlave.dick != 0)>>
 				aphrodisiacs and is allowed to masturbate, so as $he stands before you $he rubs $his shaft and pussy with <<if hasBothArms($activeSlave)>>one hand while $he fingers $his anus with the other<<else>>$his hand<</if>>.<<if canPenetrate($activeSlave)>> $His cock is painfully erect.<</if>>
-			<<elseif ($activeSlave.rules.release == "permissive" || $activeSlave.rules.release == "masturbation") && ($activeSlave.vagina == -1)>>
+			<<elseif ($activeSlave.rules.release.masturbation == 1) && ($activeSlave.vagina == -1)>>
 				aphrodisiacs, has<<if $seeDicks > 0>> no penis and<</if>> no vagina, and is not allowed to masturbate, so as $he stands before you $he
 				<<if $activeSlave.anus == 0>>
 					plays with a nipple with one hand while furiously rubbing $his virgin anus and the sensitive perineum beneath it with the other, desperately trying to get $himself off.
 				<<else>>
 					uses <<if $activeSlave.anus > 2>>$his entire hand, formed into a beak shape,<<elseif $activeSlave.anus > 1>>two fingers<<else>>a finger<</if>> to fuck $his own ass.
 				<</if>>
-			<<elseif ($activeSlave.rules.release == "permissive" || $activeSlave.rules.release == "masturbation")>>
+			<<elseif ($activeSlave.rules.release.masturbation == 1)>>
 				aphrodisiacs and is allowed to masturbate, so as $he stands before you $he rubs $his clit with <<if hasBothArms($activeSlave)>>one hand while $he fingers $his anus with the other<<else>>$his hand<</if>>.
 			<<elseif ($activeSlave.dick != 0)>>
 				aphrodisiacs and is not allowed to masturbate, so as $he stands before you $he desperately presents $his open mouth, $his breasts, $his crotch, and $his anus in turn, hoping that something will entice you to give $him relief.<<if canPenetrate($activeSlave)>> $His cock is painfully erect.<</if>>
@@ -2338,11 +2292,11 @@ $He is
 				$He's on aphrodisiacs, but is an amputee, so $he cannot touch $himself. $He writhes with sexual frustration.
 			<<elseif ($activeSlave.chastityVagina)>>
 				$He's on aphrodisiacs, but is wearing a chastity belt and cannot touch $himself. $He writhes with sexual frustration.
-			<<elseif ($activeSlave.rules.release == "permissive" || $activeSlave.rules.release == "masturbation") && ($activeSlave.dick != 0) && ($activeSlave.vagina == -1)>>
+			<<elseif ($activeSlave.rules.release.masturbation == 1) && ($activeSlave.dick != 0) && ($activeSlave.vagina == -1)>>
 				$He's on aphrodisiacs and is allowed to masturbate, so as $he obeys your commands $he idly rubs $his shaft with <<if hasBothArms($activeSlave)>>one hand while the other pinches a nipple<<else>>$his hand<</if>>.
-			<<elseif ($activeSlave.rules.release == "permissive" || $activeSlave.rules.release == "masturbation") && ($activeSlave.dick != 0)>>
+			<<elseif ($activeSlave.rules.release.masturbation == 1) && ($activeSlave.dick != 0)>>
 				$He's on aphrodisiacs and is allowed to masturbate, so as $he obeys your commands $he idly rubs $his shaft and pussy with <<if hasBothArms($activeSlave)>>one hand while the other pinches a nipple<<else>>$his hand<</if>>.
-			<<elseif ($activeSlave.rules.release == "permissive" || $activeSlave.rules.release == "masturbation")>>
+			<<elseif ($activeSlave.rules.release.masturbation == 1)>>
 				$He's on aphrodisiacs and is allowed to masturbate, so as $he obeys your commands $he idly rubs $his pussy with <<if hasBothArms($activeSlave)>>one hand while the other pinches a nipple<<else>>$his hand<</if>>.
 			<<elseif ($activeSlave.dick != 0) && canPenetrate($activeSlave)>>
 				$He's on aphrodisiacs and is not allowed to masturbate, so as $he obeys your commands $he shifts $his weight uncomfortably. $His erect dick sways as $he does.
diff --git a/src/uncategorized/personalAssistantOptions.tw b/src/uncategorized/personalAssistantOptions.tw
index d3d0a9df65997cf6d231479aa30c6aefdce8f3a9..020476d274e77232bd0e108c7dc505c9138d2687 100644
--- a/src/uncategorized/personalAssistantOptions.tw
+++ b/src/uncategorized/personalAssistantOptions.tw
@@ -10,7 +10,7 @@
 Seated at your desk, you glance at the visual representation of $assistantName, down in one corner of your desk's glass top.
 
 <<set $masturbationAllowed = 0>>
-<<set $i = $slaves.findIndex(function(s) { return s.rules.release == "permissive" || s.rules.release == "masturbation"; })>>
+<<set $i = $slaves.findIndex(function(s) { return s.rules.release.masturbation === 1; })>>
 <<if $i != -1>>
 	<<set $masturbationAllowed = 1>>
 <</if>>
diff --git a/src/uncategorized/randomIndividualEvent.tw b/src/uncategorized/randomIndividualEvent.tw
index 80bc6c194dcde041c9fa182c8911fb3f61989091..ba00ec8849a7621e9ca0be6fb914859d7928b71a 100644
--- a/src/uncategorized/randomIndividualEvent.tw
+++ b/src/uncategorized/randomIndividualEvent.tw
@@ -60,7 +60,7 @@
 							<<if $slaves[$i].boobs > 3000>>
 								<<set $REBoobCollisionSubIDs.push($slaves[$i].ID)>>
 							<</if>>
-							<<if $slaves[$i].rules.release != "restrictive" && $slaves[$i].rules.release != "masturbation" && $slaves[$i].rules.release != "chastity">>
+							<<if $slaves[$i].rules.release.slaves === 1>>
 								<<if $slaves[$i].energy > 40>>
 									<<if canDoVaginal($slaves[$i]) || canDoAnal($slaves[$i])>>
 										<<set $REInterslaveBeggingIDs.push($slaves[$i].ID)>>
diff --git a/src/uncategorized/reStandardPunishment.tw b/src/uncategorized/reStandardPunishment.tw
index 55ed23b16134efd2093cf5a2a778d6bfca379545..bc819929f3544d60f5b244377bf3230f8fcd48f1 100644
--- a/src/uncategorized/reStandardPunishment.tw
+++ b/src/uncategorized/reStandardPunishment.tw
@@ -43,7 +43,7 @@
 	<</if>>
 <<else>>
 	<<if $activeSlave.energy > 40>>
-		<<if $activeSlave.rules.release != "restrictive" && $activeSlave.rules.release != "masturbation" && $activeSlave.rules.release != "chastity">>
+		<<if $activeSlave.rules.release.slaves == 1 || App.Utils.hasFamilySex($activeSlave)>>
 			<<set _sins.push("slave molestation")>>
 		<</if>>
 	<</if>>
diff --git a/src/uncategorized/remoteSurgery.tw b/src/uncategorized/remoteSurgery.tw
index cbad7f9fcb7787cc7ded0958d69ec7b739434e5e..6e10b9d8366d0585a4017e540c9ba9c4e685a3f0 100644
--- a/src/uncategorized/remoteSurgery.tw
+++ b/src/uncategorized/remoteSurgery.tw
@@ -1873,7 +1873,7 @@
 			<<if _atleastOne>>
 				<<set $activeSlave.health -= _atleastOne * 10, cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>>
 				<<if !hasAnyArms($activeSlave)>>
-					<<set $activeSlave.rules.release = "restrictive">>
+					<<set $activeSlave.rules.release.masturbation = 0>>
 				<</if>>
 				<<set $surgeryType = "amp">>
 				<<goto "Surgery Degradation">>
diff --git a/src/utility/descriptionWidgetsFlesh.tw b/src/utility/descriptionWidgetsFlesh.tw
index bb36bbde986cc95b3d30922690ce23240a36a6cd..392327f92861001bbef33e603cdbc74d3c23a0dd 100644
--- a/src/utility/descriptionWidgetsFlesh.tw
+++ b/src/utility/descriptionWidgetsFlesh.tw
@@ -4064,7 +4064,7 @@ $He's got a
 <<= App.Desc.mods($activeSlave, "clit")>>
 
 <<if $activeSlave.fuckdoll == 0>>
-	<<if ($activeSlave.rules.release == "permissive") || $activeSlave.rules.release == "masturbation">>
+	<<if $activeSlave.rules.release.masturbation == 1>>
 		<<if (($activeSlave.aphrodisiacs > 0) || ($activeSlave.inflationType == "aphrodisiac")) && $activeSlave.drugs != "priapism agents">>
 			<<if ($activeSlave.aphrodisiacs > 1) || ($activeSlave.inflationType == "aphrodisiac" && $activeSlave.inflation > 1)>>
 				<<if ($activeSlave.dick != 0) && ($activeSlave.hormoneBalance >= 100) && (!hasAnyArms($activeSlave))>>