diff --git a/devTools/FC.d.ts b/devTools/FC.d.ts
index 8a570c30a6217226617d1415c0615415f8522b1b..d51a3cd533dd8b4c8341f8dd7b9147e65839013a 100644
--- a/devTools/FC.d.ts
+++ b/devTools/FC.d.ts
@@ -130,6 +130,8 @@ declare namespace App {
 			speechRules: string;
 			clothes: string;
 			collar: string;
+			faceAccessory: string;
+			mouthAccessory: string;
 			shoes: string;
 			armAccessory: string;
 			legAccessory: string;
diff --git a/js/003-data/miscData.js b/js/003-data/miscData.js
index 78fc7a72990346a34adb7d8658cfb053affe6301..c8f2cbdd88d525756c4cbd1d1f20f4aa049e4fdf 100644
--- a/js/003-data/miscData.js
+++ b/js/003-data/miscData.js
@@ -2255,6 +2255,12 @@ App.Data.misc = {
 			fs: "FSGenderFundamentalist",
 			rs: "clothesBoughtBunny"
 		},
+		{
+			name: "Neck tie",
+			value: "neck tie",
+			fs: "FSPaternalist",
+			rs: "clothesBoughtConservative"
+		},
 		{
 			name: "Ancient Egyptian",
 			value: "ancient Egyptian",
@@ -2269,12 +2275,20 @@ App.Data.misc = {
 		{name: "Uncomfortable leather", value: "uncomfortable leather"},
 		{name: "Pregnancy biometrics", value: "preg biometrics", rs: "seePreg"},
 		{name: "Shock punishment", value: "shock punishment"},
-		{name: "Dildo gag", value: "dildo gag"},
-		{name: "Massive dildo gag", value: "massive dildo gag", rs: "buyGag"},
+		{name: "Neck corset", value: "neck corset"},
+	],
+
+	faceAccessory: [
+		{name: "Porcelain mask", value: "porcelain mask"},
+		{name: "Cat ears", value: "cat ears"},
+	],
+
+	mouthAccessory: [
 		{name: "Ball gag", value: "ball gag"},
 		{name: "Bit gag", value: "bit gag"},
-		{name: "Neck corset", value: "neck corset"},
-		{name: "Porcelain mask", value: "porcelain mask"}
+		{name: "Ring gag", value: "ring gag"},
+		{name: "Massive dildo gag", value: "massive dildo gag"},
+		{name: "Dildo gag", value: "dildo gag"},
 	],
 
 	shoes: [
diff --git a/js/003-data/slaveSummaryData.js b/js/003-data/slaveSummaryData.js
index abcd4340cb7e5f6973b38c2586bd7858e8324e67..c34be62132316d165b454cf78085196deb76ff81 100644
--- a/js/003-data/slaveSummaryData.js
+++ b/js/003-data/slaveSummaryData.js
@@ -408,18 +408,14 @@ App.Data.SlaveSummary = {
 		accessory: {
 			collar: {
 				"ancient Egyptian": "Wesekh.",
-				"ball gag": "Ball gag.",
 				"bell collar": "Bell collar.",
-				"bit gag": "Bit gag.",
 				"bowtie": "Bowtie collar.",
+				"neck tie": "Neck tie.",
 				"cruel retirement counter": "Cruel counter collar.",
-				"dildo gag": "Dildo gag.",
 				"heavy gold": "Gold collar.",
 				"leather with cowbell": "Cowbell collar.",
-				"massive dildo gag": "Throat-bulging dildo gag.",
 				"neck corset": "Neck corset.",
 				"nice retirement counter": "Nice counter collar.",
-				"porcelain mask": "Porcelain mask.",
 				"preg biometrics": "Pregnancy biometrics collar.",
 				"pretty jewelry": "Pretty collar.",
 				"satin choker": "Satin choker.",
@@ -429,6 +425,17 @@ App.Data.SlaveSummary = {
 				"tight steel": "Steel collar.",
 				"uncomfortable leather": "Leather collar.",
 			},
+			faceAccessory: {
+				"porcelain mask": "Porcelain mask.",
+				"cat ears": "Cat ears.",
+			},
+			mouthAccessory: {
+				"bit gag": "Bit gag.",
+				"dildo gag": "Dildo gag.",
+				"ring gag": "Ring gag.",
+				"massive dildo gag": "Throat-bulging dildo gag.",
+				"ball gag": "Ball gag.",
+			},
 			belly: {
 				"a corset": "Corset.",
 				"a huge empathy belly": "Huge fake belly.",
diff --git a/slave variables documentation - Pregmod.txt b/slave variables documentation - Pregmod.txt
index 39fc114d8b0ef06aec02252cb5e806763f309465..abd14f0b624e22222cdbf216300d68e159629f5c 100644
--- a/slave variables documentation - Pregmod.txt	
+++ b/slave variables documentation - Pregmod.txt	
@@ -2898,22 +2898,31 @@ may accept strings, use at own risk
 "uncomfortable leather"
 "tight steel"
 "shock punishment"
-"dildo gag"
 "heavy gold"
 "pretty jewelry"
 "nice retirement counter"
 "bell collar"
 "leather with cowbell"
 "bowtie"
+"neck tie"
 "neck corset"
 "stylish leather"
 "satin choker"
 "preg biometrics"
-"massive dildo gag"
 "silk ribbon"
+
+faceAccessory:
+"none"
+"porcelain mask"
+"cat ears"
+
+mouth:
+"none"
 "ball gag"
 "bit gag"
-"porcelain mask"
+"ring gag"
+"massive dildo gag"
+"dildo gag"
 
 shoes:
 
diff --git a/src/art/vector/VectorArtJS.js b/src/art/vector/VectorArtJS.js
index ab842c9c0b06812875be75bd0af263ccf8d04937..47d89e44a3cb61d4b3aa34128392f25624642a6f 100644
--- a/src/art/vector/VectorArtJS.js
+++ b/src/art/vector/VectorArtJS.js
@@ -1337,7 +1337,7 @@ App.Art.vectorArtElement = (function() {
 			}
 
 			/* head addons */
-			if (slave.collar === "porcelain mask") {
+			if (slave.faceAccessory  === "porcelain mask") {
 				T.glassesColor = slave.glassesColor || "#FFFFFF"; /* use custom color or white */
 			} else {
 				T.glassesColor = slave.glassesColor || "#010101"; /* use custom color or default */
@@ -1967,7 +1967,7 @@ App.Art.vectorArtElement = (function() {
 			}
 		}
 		/* note: latex clothing actually shows some hair, but there is no appropriate art for it */
-		if (slave.collar === "cat ears") {
+		if (slave.faceAccessory  === "cat ears") {
 			res.appendChild(useSvg("Art_Vector_Cat_Ear_Back"));
 		}
 	}
@@ -2043,7 +2043,7 @@ App.Art.vectorArtElement = (function() {
 			}
 		}
 		/* note: latex clothing actually shows some hair, but there is no appropriate art for it */
-		if (slave.collar === "cat ears") {
+		if (slave.faceAccessory  === "cat ears") {
 			res.appendChild(useSvg("Art_Vector_Cat_Ear_Fore"));
 		}
 	}
@@ -2513,15 +2513,17 @@ App.Art.vectorArtElement = (function() {
 
 		/* ADDONS */
 		if (slave.fuckdoll === 0) { /* Fuckdolls cannot be decorated */
-			if (slave.collar === "dildo gag") {
+			if (slave.mouthAccessory   === "dildo gag") {
 				res.appendChild(useSvg("Art_Vector_Dildo_Gag"));
-			} else if (slave.collar === "ball gag") {
+			} else if (slave.mouthAccessory  === "ball gag") {
 				res.appendChild(useSvg("Art_Vector_Ball_Gag"));
-			} else if (slave.collar === "bit gag") {
+			} else if (slave.mouthAccessory  === "bit gag") {
 				res.appendChild(useSvg("Art_Vector_Bit_Gag"));
-			} else if (slave.collar === "massive dildo gag") {
+			} else if (slave.mouthAccessory  === "massive dildo gag") {
 				res.appendChild(useSvg("Art_Vector_Massive_Dildo_Gag"));
-			} else if (slave.collar === "porcelain mask") {
+			}
+
+			if (slave.faceAccessory   === "porcelain mask") {
 				res.appendChild(useSvg("Art_Vector_Porcelain_Mask"));
 			}
 
@@ -3040,10 +3042,15 @@ App.Art.legacyVectorArtElement = function() {
 			case "shock punishment":
 			case "tight steel":
 			case "uncomfortable leather":
+		}
+
+		/* Gag */
+		switch (slave.mouthAccessory ) {
 			case "dildo gag":
 				addImg(res, `outfit/${slave.collar}`);
 		}
 
+
 		/* Head base image */
 		if (wearingLatex === true) {
 			addImg(res, "outfit/head latex");
diff --git a/src/art/vector_revamp/vectorRevampedArtControl.js b/src/art/vector_revamp/vectorRevampedArtControl.js
index b7b6b3bf725b05efaccb1977d94781ce62a1791e..967fd9094a97677955c8258d05aa32f9824e52e4 100644
--- a/src/art/vector_revamp/vectorRevampedArtControl.js
+++ b/src/art/vector_revamp/vectorRevampedArtControl.js
@@ -1647,7 +1647,7 @@ class RevampedArtControl {
 		}
 
 		if (this.showMouth) {
-			switch (this.artSlave.collar) {
+			switch (this.artSlave.mouthAccessory) {
 				case "dildo gag":
 					result.push("Art_Vector_Revamp_Dildo_Gag");
 					break;
diff --git a/src/data/backwardsCompatibility/datatypeCleanup.js b/src/data/backwardsCompatibility/datatypeCleanup.js
index e3fa0e0b2fae264d53ffde31beb350b36ce2eed5..9df18a339519b07663a7617bc776357752799854 100644
--- a/src/data/backwardsCompatibility/datatypeCleanup.js
+++ b/src/data/backwardsCompatibility/datatypeCleanup.js
@@ -880,6 +880,26 @@ globalThis.SlaveDatatypeCleanup = (function SlaveDatatypeCleanup() {
 		if (typeof slave.backAccessory !== "string") {
 			slave.backAccessory = "none";
 		}
+		if (typeof slave.faceAccessory !== "string") {
+			slave.faceAccessory = "none";
+		}
+		if (typeof slave.mouthAccessory !== "string") {
+			slave.mouthAccessory = "none";
+		}
+		switch(slave.collar) {
+			case "porcelain mask":
+				slave.faceAccessory = slave.collar;
+				slave.collar = "none";
+				break;
+			case "bit gag":
+			case "dildo gag":
+			case "massive dildo gag":
+			case "ball gag":
+			case "ring gag":
+				slave.mouthAccessory = slave.collar;
+				slave.collar = "none";
+				break;
+		}
 	}
 
 	/**
@@ -2282,7 +2302,7 @@ App.Entity.Utils.GenePoolRecordCleanup = (function() {
 			"useRulesAssistant",
 			"diet", "dietCum", "dietMilk",
 			"drugs", "curatives", "aphrodisiacs",
-			"choosesOwnClothes", "clothes", "collar", "shoes",
+			"choosesOwnClothes", "clothes", "collar", "mouthAccessory", "faceAccessory", "shoes",
 			"makeup", "nails",
 			"vaginalAccessory", "vaginalAttachment", "dickAccessory", "nipplesAccessory", "armAccessory", "legAccessory",
 			"buttplug", "buttplugAttachment",
diff --git a/src/endWeek/saClothes.js b/src/endWeek/saClothes.js
index 593c50e77c984259d65c569e85a76db59f5fbf84..4139ed3b0f1bfd280a92327d15392d1c823dfdad 100644
--- a/src/endWeek/saClothes.js
+++ b/src/endWeek/saClothes.js
@@ -32,6 +32,12 @@ App.SlaveAssignment.clothes = (function() {
 		if (slave.collar !== "none") {
 			collarEffects(slave);
 		}
+		if (slave.faceAccessory  !== "none") {
+			maskEffects(slave);
+		}
+		if (slave.mouthAccessory  !== "none") {
+			mouthEffects(slave);
+		}
 		chastityEffects(slave);
 		if (slave.bellyAccessory !== "none") {
 			bellyAccessories(slave);
@@ -395,25 +401,6 @@ App.SlaveAssignment.clothes = (function() {
 			} else if (slave.collar === "uncomfortable leather" || slave.collar === "neck corset") {
 				r.push(`The uncomfortable leather collar ${he}'s wearing <span class="gold">reminds ${him} to be afraid</span> every time ${he} turns ${his} head.`);
 				slave.trust -= 1;
-			} else if (slave.collar === "dildo gag") {
-				r.push(`The dildo gag ${he}'s wearing <span class="gold">reminds ${him} to be afraid</span> with every breath ${he} must carefully take through ${his} nose.`);
-				slave.trust -= 1;
-			} else if (slave.collar === "ball gag") {
-				r.push(`The ball gag ${he}'s wearing keeps ${his} mouth filled and, since ${he} can't speak out, forces ${him} <span class="hotpink">to submit</span> to your will. ${He} <span class="gold">fears</span> for ${his} safety with every suppressed word.`);
-				slave.devotion++;
-				slave.trust -= 2;
-			} else if (slave.collar === "bit gag") {
-				r.push(`The uncomfortable bit gag ${he}'s wearing keeps ${his} mouth locked and, since ${he} can't speak out, forces ${him} <span class="hotpink">to submit</span> to your will. ${He} <span class="gold">fears</span> for ${his} safety with every suppressed word.`);
-				slave.devotion++;
-				slave.trust -= 2;
-			} else if (slave.collar === "porcelain mask") {
-				r.push(`The beautiful porcelain mask ${he}'s wearing slowly erodes ${his} identity, forcing ${him} <span class="hotpink">to submit</span> to your will. ${He} <span class="gold">questions</span> who ${he} is.`);
-				slave.devotion++;
-				slave.trust -= 2;
-			} else if (slave.collar === "massive dildo gag") {
-				r.push(`The enormous dildo gag ${he}'s wearing <span class="gold">terrifies ${him}</span> that ${he} will soon be choking down cocks of similar size. ${He} can feel ${his} throat stretching around the giant dildo, and <span class="mediumorchid">resents you</span> for tormenting ${him} this way.`);
-				slave.devotion -= 1;
-				slave.trust -= 2;
 			} else if (slave.collar === "shock punishment") {
 				r.push(`The shock collar ${he}'s wearing makes ${his} frequent, deserved punishments <span class="gold">immediate, inescapable,</span> and <span class="mediumorchid">awful.</span>`);
 				slave.devotion -= 2;
@@ -433,8 +420,8 @@ App.SlaveAssignment.clothes = (function() {
 			if (slave.collar === "heavy gold" || slave.collar === "ancient Egyptian") {
 				r.push(`${He} bears the burden of ${his} heavy gold collar with <span class="mediumaquamarine">confidence.</span>`);
 				slave.trust += 1;
-			} else if (slave.collar === "bowtie") {
-				r.push(`The bowtie and shirt collar ${he} wears fill ${him} with <span class="mediumaquamarine">confidence,</span> since although they conceal a more traditional slave collar that can be used to restrain ${him}, they don't look like it.`);
+			} else if (slave.collar === "bowtie" || slave.collar === "neck tie" ) {
+				r.push(`The ${slave.collar} and shirt collar ${he} wears fill ${him} with <span class="mediumaquamarine">confidence,</span> since although they conceal a more traditional slave collar that can be used to restrain ${him}, they don't look like it.`);
 				slave.trust += 1;
 			} else if (["nice retirement counter", "pretty jewelry", "satin choker", "silk ribbon", "stylish leather"].includes(slave.collar)) {
 				r.push(`The lovely collar ${he} wears fills ${him} with <span class="mediumaquamarine">confidence.</span>`);
@@ -447,31 +434,90 @@ App.SlaveAssignment.clothes = (function() {
 					r.push(`${He} <span class="hotpink">likes</span> how ${his} cow collar encourages everyone to touch ${his} udders.`);
 					slave.devotion += 1;
 				}
-			} else if (slave.collar === "ball gag" || slave.collar === "bit gag") {
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 *
+	 */
+	function maskEffects(slave) {
+		if (slave.devotion <= 20) {
+			if (slave.faceAccessory === "porcelain mask") {
+				r.push(`The beautiful porcelain mask ${he}'s wearing slowly erodes ${his} identity, forcing ${him} <span class="hotpink">to submit</span> to your will. ${He} <span class="gold">questions</span> who ${he} is.`);
+				slave.devotion++;
+				slave.trust -= 2;
+			} else if (slave.faceAccessory === "cat ears") {
+				r.push(`The adorable cat ears ${he}'s wearing slowly chip away at ${his} dignity, forcing ${him} <span class="hotpink">to submit</span> to your will. ${He} <span class="gold">feels</span> more and more like a sex object.`);
+				slave.devotion++;
+				slave.trust -= 2;
+			}
+		} else {
+			if (slave.faceAccessory === "porcelain mask") {
 				if (slave.fetish === "submissive" && slave.fetishStrength > 95) {
-					r.push(`${He} <span class="hotpink">loves</span> how ${his} gag forces ${him} to keep silent.`);
+					r.push(`${He} <span class="hotpink">loves</span> how ${his} mask makes ${him} beautiful enough for you.`);
 					slave.devotion += 1;
 				} else if (slave.fetish === "submissive" || slave.energy > 95) {
-					r.push(`${He} <span class="hotpink">likes</span> how ${his} gag forces ${him} to keep silent.`);
+					r.push(`${He} <span class="hotpink">likes</span> how ${his} mask makes ${him} beautiful enough for you.`);
 					slave.devotion += 1;
 				}
-			} else if (slave.collar === "porcelain mask") {
+			} else if (slave.faceAccessory === "cat ears") {
 				if (slave.fetish === "submissive" && slave.fetishStrength > 95) {
-					r.push(`${He} <span class="hotpink">loves</span> how ${his} mask makes ${him} beautiful enough for you.`);
+					r.push(`${He} <span class="hotpink">loves</span> how ${his} cat ears make ${him} especially adorable for you.`);
 					slave.devotion += 1;
 				} else if (slave.fetish === "submissive" || slave.energy > 95) {
-					r.push(`${He} <span class="hotpink">likes</span> how ${his} mask makes ${him} beautiful enough for you.`);
+					r.push(`${He} <span class="hotpink">likes</span> how ${his} cat ears make ${him} especially adorable for you.`);
+					slave.devotion += 1;
+				}
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 *
+	 */
+	function mouthEffects(slave) {
+		if (slave.devotion <= 20) {
+			if (slave.mouthAccessory === "dildo gag") {
+				r.push(`The dildo gag ${he}'s wearing <span class="gold">reminds ${him} to be afraid</span> with every breath ${he} must carefully take through ${his} nose.`);
+				slave.trust -= 1;
+			} else if (slave.mouthAccessory === "ball gag") {
+				r.push(`The ball gag ${he}'s wearing keeps ${his} mouth filled and, since ${he} can't speak out, forces ${him} <span class="hotpink">to submit</span> to your will. ${He} <span class="gold">fears</span> for ${his} safety with every suppressed word.`);
+				slave.devotion++;
+				slave.trust -= 2;
+			} else if (slave.mouthAccessory === "ring gag") {
+				r.push(`The ring gag ${he}'s wearing keeps ${his} mouth stretched wide and drooling. Since ${he} can't speak clearly, it forces ${him} <span class="hotpink">to submit</span> to your will. ${He} <span class="gold">fears</span> for ${his} safety with every suppressed word.`);
+				slave.devotion++;
+				slave.trust -= 2;
+			} else if (slave.mouthAccessory === "bit gag") {
+				r.push(`The uncomfortable bit gag ${he}'s wearing keeps ${his} mouth locked and, since ${he} can't speak out, forces ${him} <span class="hotpink">to submit</span> to your will. ${He} <span class="gold">fears</span> for ${his} safety with every suppressed word.`);
+				slave.devotion++;
+				slave.trust -= 2;
+			} else if (slave.mouthAccessory === "massive dildo gag") {
+				r.push(`The enormous dildo gag ${he}'s wearing <span class="gold">terrifies ${him}</span> that ${he} will soon be choking down cocks of similar size. ${He} can feel ${his} throat stretching around the giant dildo, and <span class="mediumorchid">resents you</span> for tormenting ${him} this way.`);
+				slave.devotion -= 1;
+				slave.trust -= 2;
+			}
+		} else {
+			if (slave.mouthAccessory === "ball gag" || slave.mouthAccessory === "bit gag" || slave.mouthAccessory === "ring gag") {
+				if (slave.fetish === "submissive" && slave.fetishStrength > 95) {
+					r.push(`${He} <span class="hotpink">loves</span> how ${his} gag forces ${him} to keep silent.`);
+					slave.devotion += 1;
+				} else if (slave.fetish === "submissive" || slave.energy > 95) {
+					r.push(`${He} <span class="hotpink">likes</span> how ${his} gag forces ${him} to keep silent.`);
 					slave.devotion += 1;
 				}
 			}
 		}
-		if (slave.collar === "dildo gag") {
+		if (slave.mouthAccessory === "dildo gag") {
 			if (slave.skill.oral <= 10) {
 				r.push(`Living gagged by a dildo, ${he} can't help but get better at having things down ${his} throat.`);
 				r.push(`${SkillIncrease.Oral(slave, 5)}`);
 			}
 		}
-		if (slave.collar === "massive dildo gag") {
+		if (slave.mouthAccessory === "massive dildo gag") {
 			if (slave.skill.oral < 75) {
 				r.push(`Living gagged by such an immense dildo, ${he} can't help but get even better at having giant things rammed down ${his} throat.`);
 				r.push(`${SkillIncrease.Oral(slave, 5)}`);
diff --git a/src/endWeek/saPorn.js b/src/endWeek/saPorn.js
index e5b71af2f88ada3a66883cf9c0e0454614a62560..2f51af66f0c395659b80586f570a1b217f323df3 100644
--- a/src/endWeek/saPorn.js
+++ b/src/endWeek/saPorn.js
@@ -114,7 +114,7 @@ App.SlaveAssignment.porn = (function() {
 			decayRate = 5000;
 			if (slave.fuckdoll > 0) {
 				face = 50;
-			} else if (slave.collar === "porcelain mask") {
+			} else if (slave.faceAccessory  === "porcelain mask") {
 				face = 20;
 			} else {
 				face = slave.face * 4;
@@ -124,7 +124,7 @@ App.SlaveAssignment.porn = (function() {
 			decayRate = 500;
 			if (slave.fuckdoll > 0) {
 				face = 20;
-			} else if (slave.collar === "porcelain mask") {
+			} else if (slave.faceAccessory  === "porcelain mask") {
 				face = 50;
 			} else {
 				face = slave.face * 2;
@@ -134,7 +134,7 @@ App.SlaveAssignment.porn = (function() {
 			decayRate = 30;
 			if (slave.fuckdoll > 0) {
 				face = 0;
-			} else if (slave.collar === "porcelain mask") {
+			} else if (slave.faceAccessory  === "porcelain mask") {
 				face = 0;
 			} else {
 				face = slave.face / 20;
@@ -167,7 +167,7 @@ App.SlaveAssignment.porn = (function() {
 	function faceCommentary(slave) {
 		if (slave.fuckdoll > 0) {
 			return;
-		} else if (slave.collar === "porcelain mask") {
+		} else if (slave.faceAccessory  === "porcelain mask") {
 			r += `${His} mask adds an air of mystery to ${him}, `;
 			if (slave.porn.prestige > 1) {
 				r += `but people wonder if ${he} is trying to hide something. `;
diff --git a/src/facilities/nursery/nurseryDatatypeCleanup.js b/src/facilities/nursery/nurseryDatatypeCleanup.js
index de65be9984e94e87339540509349f87e52918b76..e57f1d4a33976617e7f8b804ae54668bad2da2ba 100644
--- a/src/facilities/nursery/nurseryDatatypeCleanup.js
+++ b/src/facilities/nursery/nurseryDatatypeCleanup.js
@@ -344,6 +344,26 @@ App.Facilities.Nursery.ChildDatatypeCleanup = function(child) {
 		if (typeof child.backAccessory !== "string") {
 			child.backAccessory = "none";
 		}
+		if (typeof slave.faceAccessory !== "string") {
+			slave.faceAccessory = "none";
+		}
+		if (typeof slave.mouthAccessory !== "string") {
+			slave.mouthAccessory = "none";
+		}
+		switch(slave.collar) {
+			case "porcelain mask":
+				slave.faceAccessory = slave.collar;
+				slave.collar = "none";
+				break;
+			case "bit gag":
+			case "dildo gag":
+			case "massive dildo gag":
+			case "ball gag":
+			case "ring gag":
+				slave.mouthAccessory = slave.collar;
+				slave.collar = "none";
+				break;
+		}
 	}
 
 	function childDietDatatypeCleanup(child) {
diff --git a/src/interaction/main/walkPast.js b/src/interaction/main/walkPast.js
index 22c8ef88c804b6eb45cac0f692cbec138e61d7e4..c9e941edc2178fb00bff347c9862adff8d7df1bb 100644
--- a/src/interaction/main/walkPast.js
+++ b/src/interaction/main/walkPast.js
@@ -9120,9 +9120,6 @@ globalThis.walkPast = (function() {
 		t += `<<faceDescription>>`;
 		t += `<<mouthDescription>>`;
 		switch (slave.collar) {
-			case "a Fuckdoll suit":
-				t += `${His} suit is expressly designed to encourage use of ${his} face hole.`;
-				break;
 			case "uncomfortable leather":
 				t += `${His} uncomfortable leather collar makes ${him} swallow and lick ${his} lips periodically, making it look like ${he}'s offering oral even though ${he}'s just trying to relieve the discomfort.`;
 				break;
@@ -9133,12 +9130,6 @@ globalThis.walkPast = (function() {
 			case "preg biometrics":
 				t += `${His} collar reveals everything about ${his} womb, bringing eyes straight to ${his} belly before drawing them back to ${his} neck.`;
 				break;
-			case "dildo gag":
-				t += `${His} ring gag would make ${him} ready for oral service, as soon as the formidable dildo it secures down ${his} throat is removed.`;
-				break;
-			case "massive dildo gag":
-				t += `Your eyes are drawn to the distinct bulge in ${his} throat caused by the enormous dildo in it, though ${his} mouth would only be suitable for the largest of cocks right now.`;
-				break;
 			case "shock punishment":
 				t += `${His} shock collar rests threateningly at ${his} throat, ready to compel ${him} to do anything you wish.`;
 				break;
@@ -9170,26 +9161,48 @@ globalThis.walkPast = (function() {
 			case "bowtie":
 				t += `${His} black bowtie contrasts with ${his} white collar, drawing the eye towards ${his} neck and face.`;
 				break;
+			case "neck tie":
+				t += `${His} neck tie is a reminder of old world business, although ${his} body is a reminder of the oldest business in the world.`;
+				break;
 			case "ancient Egyptian":
 				t += `${His} wesekh glints richly as ${he} moves, sparkling with opulence and sensuality.`;
 				break;
+			default:
+				if (slave.clothes === "a Fuckdoll suit") {
+					t += `${His} suit is expressly designed to encourage use of ${his} face hole.`;
+				} else {
+					t += `${His} unadorned `;
+					if (V.PC.dick !== 0) {
+						t += `throat is just waiting to be wrapped around a thick shaft.`;
+					} else {
+						t += `lips are just begging for a cunt to lavish attention on.`;
+					}
+				}
+		}
+		switch (slave.mouthAccessory ) {
+			case "dildo gag":
+				t += `${His} ring gag would make ${him} ready for oral service, as soon as the formidable dildo it secures down ${his} throat is removed.`;
+				break;
+			case "massive dildo gag":
+				t += `Your eyes are drawn to the distinct bulge in ${his} throat caused by the enormous dildo in it, though ${his} mouth would only be suitable for the largest of cocks right now.`;
+				break;
 			case "ball gag":
 				t += `${His} ball gag uncomfortably holds ${his} jaw apart as it fills ${his} mouth.`;
 				break;
 			case "bit gag":
 				t += `${His} bit gag uncomfortably keeps ${him} from closing ${his} jaw; drool visibly pools along the corners of ${his} mouth, where the rod forces back ${his} cheeks.`;
 				break;
+			case "ring gag":
+				t += `${His} ring gag uncomfortably keeps ${him} from closing ${his} mouth; drool visibly pools around ${his} tongue, and trickles down ${his} chin unless ${he} can keep ${his} head back.`;
+				break;
+		}
+
+		switch (slave.faceAccessory ) {
 			case "porcelain mask":
 				t += `${His} beautiful porcelain mask hides ${his} face and any unsightly facial features.`;
 				break;
-			default:
-				t += `${His} unadorned `;
-				if (V.PC.dick !== 0) {
-					t += `throat is just waiting to be wrapped around a thick shaft.`;
-				} else {
-					t += `lips are just begging for a cunt to lavish attention on.`;
-				}
 		}
+
 		if (jsRandom(1, 3) === 1) {
 			V.target = "FKiss";
 		} else {
diff --git a/src/interaction/wardrobeUse.js b/src/interaction/wardrobeUse.js
index b357de90b58156a94d329d5a4f71d739dec0544d..e83c8cead527d6cebf1c7bf94f6e4d6f8a144967 100644
--- a/src/interaction/wardrobeUse.js
+++ b/src/interaction/wardrobeUse.js
@@ -158,7 +158,55 @@ App.UI.Wardrobe.collar = function(slave) {
 	links.appendChild(App.UI.SlaveInteract.generateRows(harshOptionsArray, slave, "collar", true));
 	el.appendChild(links);
 
-	if (slave.eyewear === "corrective glasses" || slave.eyewear === "glasses" || slave.eyewear === "blurring glasses" || slave.collar === "porcelain mask") {
+	return jQuery('#collar').empty().append(el);
+};
+
+App.UI.Wardrobe.mask = function(slave) {
+	if (slave.fuckdoll !== 0) {
+		return;
+	}
+	let el = document.createElement('div');
+
+	let label = document.createElement('div');
+	label.append(`Mask: `);
+
+	let choice = document.createElement('span');
+	choice.style.fontWeight = "bold";
+	choice.textContent = (`${slave.faceAccessory} `);
+	label.appendChild(choice);
+
+	// Choose her own
+	if (slave.faceAccessory !== `none`) {
+		let choiceOptionsArray = [];
+		choiceOptionsArray.push({text: `None`, updateSlave: {faceAccessory: `none`}});
+		label.appendChild(App.UI.SlaveInteract.generateRows(choiceOptionsArray, slave, "faceAccessory", false));
+	}
+
+	el.appendChild(label);
+
+	let array = [];
+
+	let clothingOption;
+	App.Data.misc.faceAccessory.forEach(item => {
+		clothingOption = {
+			text: item.name,
+			updateSlave: {faceAccessory: item.value}
+		};
+		if (item.fs) {
+			clothingOption.FS = item.fs;
+		}
+		array.push(clothingOption);
+	});
+
+	// Sort
+	array = array.sort((a, b) => (a.text > b.text) ? 1 : -1);
+
+	let links = document.createElement('div');
+	links.className = "choices";
+	links.appendChild(App.UI.SlaveInteract.generateRows(array, slave, "faceAccessory", true));
+	el.appendChild(links);
+
+	if (slave.eyewear === "corrective glasses" || slave.eyewear === "glasses" || slave.eyewear === "blurring glasses" || slave.faceAccessory === "porcelain mask") {
 		// Color options
 		links = document.createElement('div');
 		links.className = "choices";
@@ -171,7 +219,56 @@ App.UI.Wardrobe.collar = function(slave) {
 		el.appendChild(links);
 	}
 
-	return jQuery('#collar').empty().append(el);
+	return jQuery('#faceAccessory').empty().append(el);
+};
+
+App.UI.Wardrobe.mouth = function(slave) {
+	if (slave.fuckdoll !== 0) {
+		return;
+	}
+	let el = document.createElement('div');
+
+	let label = document.createElement('div');
+	label.append(`Gag: `);
+
+	let choice = document.createElement('span');
+	choice.style.fontWeight = "bold";
+	choice.textContent = (`${slave.mouthAccessory} `);
+	label.appendChild(choice);
+
+	// Choose her own
+	if (slave.mouthAccessory !== `none`) {
+		let choiceOptionsArray = [];
+		choiceOptionsArray.push({text: `None`, updateSlave: {mouthAccessory: `none`}});
+		label.appendChild(App.UI.SlaveInteract.generateRows(choiceOptionsArray, slave, "mouthAccessory", false));
+	}
+
+	el.appendChild(label);
+
+	let array = [];
+
+	let clothingOption;
+	// mouthAccessory
+	App.Data.misc.mouthAccessory.forEach(item => {
+		clothingOption = {
+			text: item.name,
+			updateSlave: {mouthAccessory: item.value}
+		};
+		if (item.fs) {
+			clothingOption.FS = item.fs;
+		}
+		array.push(clothingOption);
+	});
+
+	// Sort
+	array = array.sort((a, b) => (a.text > b.text) ? 1 : -1);
+
+	let links = document.createElement('div');
+	links.className = "choices";
+	links.appendChild(App.UI.SlaveInteract.generateRows(array, slave, "mouthAccessory", true));
+	el.appendChild(links);
+
+	return jQuery('#mouthAccessory').empty().append(el);
 };
 
 App.UI.Wardrobe.armAccessory = function(slave) {
@@ -807,6 +904,8 @@ App.UI.Wardrobe.colorOptions = function(slave, update) {
 App.UI.Wardrobe.refreshAll = function(slave) {
 	App.UI.Wardrobe.clothes(slave);
 	App.UI.Wardrobe.collar(slave);
+	App.UI.Wardrobe.mask(slave);
+	App.UI.Wardrobe.mouth(slave);
 	App.UI.Wardrobe.armAccessory(slave);
 	App.UI.Wardrobe.shoes(slave);
 	App.UI.Wardrobe.legAccessory(slave);
diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js
index 8b565adae01fc363914756ac81c9e55beec6adcb..a5ebb5d42447c886a26c7752e320d2c09d4bcc0c 100644
--- a/src/js/DefaultRules.js
+++ b/src/js/DefaultRules.js
@@ -46,6 +46,8 @@ globalThis.DefaultRules = (function() {
 		if (slave.fuckdoll === 0) {
 			ProcessClothing(slave, rule);
 			ProcessCollar(slave, rule);
+			ProcessMask(slave, rule);
+			ProcessGag(slave, rule);
 			ProcessEyewear(slave, rule);
 			ProcessEarwear(slave, rule);
 			ProcessDildos(slave, rule);
@@ -206,9 +208,6 @@ globalThis.DefaultRules = (function() {
 				if (rule.collar === "preg biometrics" && slave.preg <= -1 && slave.ovaries === 0 && slave.mpreg === 0) {
 					slave.collar = "none";
 					r += `${slave.slaveName} cannot utilize preg biometrics. `;
-				} else if ((rule.collar === "massive dildo gag" && slave.skill.oral <= 50)) {
-					slave.collar = "none";
-					r += `${slave.slaveName} lacks the oral skill to successfully keep the massive dildo gag in ${his} throat. `;
 				} else {
 					slave.collar = rule.collar;
 				}
@@ -216,7 +215,7 @@ globalThis.DefaultRules = (function() {
 					r += `${slave.slaveName} has been given no collar.`;
 				} else if ((slave.collar === "pretty jewelry")) {
 					r += `${slave.slaveName} has been given ${slave.collar}.`;
-				} else if ((["ball gag", "bell collar", "bit gag", "bowtie", "dildo gag", "massive dildo gag", "neck corset", "porcelain mask"].includes(slave.collar))) {
+				} else if ((["bell collar", "bowtie", "neck corset", "neck tie"].includes(slave.collar))) {
 					r += `${slave.slaveName} has been given a ${slave.collar}.`;
 				} else {
 					r += `${slave.slaveName} has been given a ${slave.collar} collar.`;
@@ -225,6 +224,49 @@ globalThis.DefaultRules = (function() {
 		}
 	}
 
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 * @param {App.RA.RuleSetters} rule
+	 */
+	function ProcessMask(slave, rule) {
+		// apply faceAccessory to slave
+		if ((rule.faceAccessory !== undefined) && (rule.faceAccessory !== null)) {
+			if (slave.faceAccessory !== rule.faceAccessory) {
+				r += "<br>";
+				slave.faceAccessory = rule.faceAccessory;
+				if (slave.faceAccessory === "none") {
+					r += `${slave.slaveName} has had their mask removed.`;
+				} else {
+					r += `${slave.slaveName} has been given a ${slave.faceAccessory}.`;
+				}
+			}
+		}
+	}
+
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 * @param {App.RA.RuleSetters} rule
+	 */
+	function ProcessGag(slave, rule) {
+		// apply mouthAccessory to slave
+		if ((rule.mouthAccessory !== undefined) && (rule.mouthAccessory !== null)) {
+			if (slave.mouthAccessory !== rule.mouthAccessory) {
+				r += "<br>";
+				if ((rule.mouthAccessory === "massive dildo gag" && slave.skill.oral <= 50)) {
+					slave.mouthAccessory = "none";
+					r += `${slave.slaveName} lacks the oral skill to successfully keep the massive dildo gag in ${his} throat. `;
+				} else {
+					slave.mouthAccessory = rule.mouthAccessory;
+				}
+				if (slave.mouthAccessory === "none") {
+					r += `${slave.slaveName} has been given no gag.`;
+				} else {
+					r += `${slave.slaveName} has been given a ${slave.mouthAccessory}.`;
+				}
+			}
+		}
+	}
+
 	/**
 	 * @param {App.Entity.SlaveState} slave
 	 * @param {App.RA.RuleSetters} rule
diff --git a/src/js/SlaveState.js b/src/js/SlaveState.js
index 381f9e6605cabbdec98ea673e30f7015c99b242a..6dac7d2d3868405278ef5dbf1095aa4115ccab17 100644
--- a/src/js/SlaveState.js
+++ b/src/js/SlaveState.js
@@ -1789,25 +1789,36 @@ App.Entity.SlaveState = class SlaveState {
 		 * * "uncomfortable leather"
 		 * * "tight steel"
 		 * * "shock punishment"
-		 * * "dildo gag"
 		 * * "heavy gold"
 		 * * "pretty jewelry"
 		 * * "nice retirement counter"
 		 * * "bell collar"
 		 * * "leather with cowbell"
 		 * * "bowtie"
+		 * * "neck tie"
 		 * * "neck corset"
 		 * * "stylish leather"
 		 * * "satin choker"
 		 * * "preg biometrics"
-		 * * "massive dildo gag"
 		 * * "silk ribbon"
+		 */
+		this.collar = "none";
+		/**
+		 * may accept strings, use at own risk
+		 * * "none"
+		 * * "porcelain mask"
+		 */
+		this.faceAccessory = "none";
+		/**
+		 * may accept strings, use at own risk
+		 * * "none"
+		 * * "dildo gag"
+		 * * "massive dildo gag"
 		 * * "ball gag"
 		 * * "bit gag"
 		 * * "ring gag"
-		 * * "porcelain mask"
 		 */
-		this.collar = "none";
+		this.mouthAccessory = "none";
 		/**
 		 * may accept strings, use at own risk
 		 * * "none"
diff --git a/src/js/descriptionWidgets.js b/src/js/descriptionWidgets.js
index 86a273ae8a5ed236e7445f7f2351bc0f2d87d426..b880d2d4ee5b41a0d5af05c249c98c77f94ca153 100644
--- a/src/js/descriptionWidgets.js
+++ b/src/js/descriptionWidgets.js
@@ -1727,3 +1727,42 @@ App.Desc.sexualHistory = function(slave) {
 
 	return r;
 };
+
+App.Desc.faceAccessory  = function(slave) {
+	const {He, his} = getPronouns(slave);
+	switch (slave.faceAccessory) {
+		case "porcelain mask":
+			return `${He} is wearing a beautiful porcelain mask to hide ${his} unsightly facial features.`;
+		case "cat ears":
+			return `${He} is wearing an adorable pair of cat ears.`;
+	}
+};
+
+App.Desc.mouthAccessory   = function(slave) {
+	const {He, His, him, he, his, himself, girl} = getPronouns(slave);
+	let r = ``;
+	switch (slave.mouthAccessory ) {
+		case "ball gag":
+			r += `${He} is wearing a mouth filling, `;
+			if (slave.makeup === 3 || slave.makeup === 6 || slave.makeup === 8) {
+				r += `${slave.hColor} `;
+			} else {
+				r += `red `;
+			 }
+			r += `ball-shaped gag that prevents ${him} from uttering a word while keeping ${him} uncomfortably aware of ${his} status.`;
+			break;
+		case "bit gag":
+			r += `${He} is wearing a jaw spreading, bar-shaped gag that prevents ${him} from speaking while keeping $him uncomfortably aware of ${his} status.`;
+			break;
+		case "dildo gag":
+			r +=  `${He} is wearing a sturdy leather collar that continues up to restrict ${his} jaw as well. It holds a ring gag in ${his} mouth, into which slots a formidable inward-facing dildo that reaches down ${his} throat. It can be removed to facefuck ${him}.`;
+			break;
+		case "massive dildo gag":
+			r += `${He} is wearing a sturdy leather collar that continues up to restrict ${his} jaw as well. It acts as an anchor for an enormous inward-facing dildo that reaches deep down ${his} throat. The sheer size of the phallus forces ${his} mouth as wide as it will go and considerably bulges ${his} throat. Fortunately for ${him}, it is designed to allow ${him} to be able to breathe through ${his} nose; though when removed, the poor ${girl} finds ${himself} incapable of closing ${his} mouth for some time.`;
+			break;
+		case "ring gag":
+			r += `${His} ring gag uncomfortably keeps ${him} from closing ${his} mouth; drool visibly pools around ${his} tongue, and trickles down ${his} chin unless ${he} can keep ${his} head back.`;
+			break;
+	}
+	return r;
+};
diff --git a/src/js/eventSelectionJS.js b/src/js/eventSelectionJS.js
index 0bda43a6d0514d9952b5887b240c41b42c5d86a9..3d088d06c33badba2e534ed3da2d00e131d5267d 100644
--- a/src/js/eventSelectionJS.js
+++ b/src/js/eventSelectionJS.js
@@ -816,7 +816,7 @@ globalThis.generateRandomEventPoolStandard = function(eventSlave) {
 			} /* closes mute exempt */
 
 			if (eventSlave.devotion > 20) {
-				if (["ball gag", "bit gag", "dildo gag", "massive dildo gag"].includes(eventSlave.collar)) {
+				if (eventSlave.mouthAccessory !== "none") {
 					State.variables.RESSevent.push("gagged slave");
 				}
 			}
@@ -1025,7 +1025,7 @@ globalThis.generateRandomEventPoolStandard = function(eventSlave) {
 
 			if (eventSlave.voice > 0) {
 				if (eventSlave.lips <= 95) {
-					if (!["ball gag", "bit gag", "dildo gag", "massive dildo gag"].includes(eventSlave.collar)) {
+					if (eventSlave.mouthAccessory === "none") {
 						if (eventSlave.accent === 3) {
 							if (eventSlave.devotion <= 50) {
 								if (eventSlave.trust > -10) {
@@ -2226,7 +2226,7 @@ globalThis.generateRandomEventPoolServant = function(eventSlave) {
 			} /* closes mute exempt */
 
 			if (eventSlave.devotion > 20) {
-				if (["ball gag", "bit gag", "dildo gag", "massive dildo gag"].includes(eventSlave.collar)) {
+				if (eventSlave.mouthAccessory !== "none") {
 					State.variables.RESSevent.push("gagged slave");
 				}
 			}
diff --git a/src/js/rulesAssistantOptions.js b/src/js/rulesAssistantOptions.js
index 27554ebb74a037bebae672b5144a0a41b47c159f..08d195385554f6056bd3aad5df7c7d06573944b0 100644
--- a/src/js/rulesAssistantOptions.js
+++ b/src/js/rulesAssistantOptions.js
@@ -1573,6 +1573,8 @@ globalThis.rulesAssistantOptions = (function() {
 			super("appearance", "Appearance", tabButtons);
 			this.appendChild(new ClothesList());
 			this.appendChild(new CollarList());
+			this.appendChild(new GagList());
+			this.appendChild(new MaskList());
 			this.appendChild(new ShoeList());
 			this.appendChild(new CorsetList());
 			this.appendChild(new GlovesList());
@@ -1822,6 +1824,21 @@ globalThis.rulesAssistantOptions = (function() {
 		}
 	}
 
+	class MaskList extends ListSelector {
+		constructor() {
+			super("Mask", isItemAccessible.array(App.Data.misc.faceAccessory ));
+			this.setValue(current_rule.set.faceAccessory );
+			this.onchange = (value) => current_rule.set.faceAccessory  = value;
+		}
+	}
+
+	class GagList extends ListSelector {
+		constructor() {
+			super("Gag", isItemAccessible.array(App.Data.misc.mouthAccessory ));
+			this.setValue(current_rule.set.mouthAccessory );
+			this.onchange = (value) => current_rule.set.mouthAccessory = value;
+		}
+	}
 	class ShoeList extends ListSelector {
 		constructor() {
 			super("Shoes", isItemAccessible.array(App.Data.misc.shoes));
diff --git a/src/js/slaveSummaryHelpers.js b/src/js/slaveSummaryHelpers.js
index ec2449ca055dfaa70f4d45ff3fee40002ac328dd..e0c1fc79590a7d520cf59aff383473fc0054520e 100644
--- a/src/js/slaveSummaryHelpers.js
+++ b/src/js/slaveSummaryHelpers.js
@@ -945,6 +945,24 @@ App.UI.SlaveSummaryImpl = function() {
 			helpers.makeMappedSpan(c, data.long.accessory.collar, slave.collar);
 		}
 
+		/**
+		 * @param {App.Entity.SlaveState} slave
+		 * @param {Node} c
+		 * @returns {void}
+		 */
+		function long_mask(slave, c) {
+			helpers.makeMappedSpan(c, data.long.accessory.faceAccessory, slave.faceAccessory);
+		}
+
+		/**
+		 * @param {App.Entity.SlaveState} slave
+		 * @param {Node} c
+		 * @returns {void}
+		 */
+		function long_mouth(slave, c) {
+			helpers.makeMappedSpan(c, data.long.accessory.mouthAccessory, slave.mouthAccessory);
+		}
+
 		/**
 		 * @param {App.Entity.SlaveState} slave
 		 * @param {Node} c
@@ -1673,6 +1691,8 @@ App.UI.SlaveSummaryImpl = function() {
 				porn_prestige: long_porn_prestige,
 				clothes: long_clothes,
 				collar: long_collar,
+				mask: long_mask,
+				mouth: long_mouth,
 				belly: long_belly,
 				arms: long_arms,
 				legs: long_legs,
diff --git a/src/js/slaveSummaryWidgets.js b/src/js/slaveSummaryWidgets.js
index 10cd93fc06b6bc01c312d62c32d83937d4a113e2..adb622a4bb353e13c67ef96a9e73d187990b23a9 100644
--- a/src/js/slaveSummaryWidgets.js
+++ b/src/js/slaveSummaryWidgets.js
@@ -663,6 +663,8 @@ App.UI.SlaveSummaryRenderers = function() {
 			}
 			b.clothes(slave, dressingBlock);
 			b.collar(slave, dressingBlock);
+			b.mask(slave, dressingBlock);
+			b.mouth(slave, dressingBlock);
 			b.belly(slave, dressingBlock);
 			if (hasAnyArms(slave)) {
 				b.arms(slave, dressingBlock);
diff --git a/src/js/statsChecker/statsChecker.js b/src/js/statsChecker/statsChecker.js
index a4e164f4b5b78184c147bd750533030f89995935..c30d8c5bf8ea0cee0929d01a6990a5b7e44e9318 100644
--- a/src/js/statsChecker/statsChecker.js
+++ b/src/js/statsChecker/statsChecker.js
@@ -766,13 +766,15 @@ globalThis.canTalk = function(slave, checkLanguage = true) {
 		return false;
 	} else if (slave.lips > 95) {
 		return false;
-	} else if (slave.collar === "dildo gag") {
+	} else if (slave.mouthAccessory  === "dildo gag") {
 		return false;
-	} else if (slave.collar === "massive dildo gag") {
+	} else if (slave.mouthAccessory  === "massive dildo gag") {
 		return false;
-	} else if (slave.collar === "ball gag") {
+	} else if (slave.mouthAccessory  === "ball gag") {
 		return false;
-	} else if (slave.collar === "bit gag") {
+	} else if (slave.mouthAccessory  === "bit gag") {
+		return false;
+	} else if (slave.mouthAccessory  === "ring gag") {
 		return false;
 	}
 	return true;
diff --git a/src/npc/interaction/fDance.tw b/src/npc/interaction/fDance.tw
index c02b251217cac39298301e0494713f3bfccaa1d7..7a1c6a83e086ed8bbe6af87e1a6d84f2e1a2afea 100644
--- a/src/npc/interaction/fDance.tw
+++ b/src/npc/interaction/fDance.tw
@@ -164,68 +164,80 @@ $His face is
 		but $he is to terrified of you to see what happens if $he resists
 	<<else>>
 		and refuses to comply. In order to make $him obey, a leash is attached from
-		<<switch getSlave($AS).collar>>
-		<<case "uncomfortable leather">>
-			the steel ring on $his leather collar
-		<<case "dildo gag">>
-			a ring on $his gag strap
-		<<case "massive dildo gag">>
-			a ring on $his gag strap
-		<<case "preg biometrics">>
-			$his collar
-		<<case "silk ribbon">>
-			$his silk ribbon
-		<<case "tight steel">>
-			$his steel collar
-		<<case "porcelain mask">>
-			<<if getSlave($AS).nosePiercing == 2>>
-				$his nose ring
-			<<elseif getSlave($AS).nipplesPiercing == 2>>
-				$his nipple chain
-			<<else>>
-				a collar that is placed around $his neck
-			<</if>>
-		<<case "shock punishment">>
-			$his shock collar
-		<<case "neck corset">>
-			an O-ring at the from of $his neck corset
-		<<case "stylish leather">>
-			$his collar
-		<<case "satin choker">>
-			$his choker collar
-		<<case "heavy gold">>
-			$He is wearing a heavy gold collar, an outstanding bit of ostentation.
-		<<case "pretty jewelry">>
-			$his ornate collar
-		<<case "bell collar">>
-			the ring attaching $his bell to $his collar, and
-		<<case "leather with cowbell">>
-			the ring attaching $his bell to $his collar, and
-		<<case "bowtie">>
-			$his bowtie collar
-		<<case "ancient Egyptian">>
-			<<if getSlave($AS).nosePiercing == 2>>
-				$his nose ring
-			<<elseif getSlave($AS).nipplesPiercing == 2>>
-				$his nipple chain
-			<<else>>
-				$his wesekh
-			<</if>>.
-		<<case "ball gag">>
-			a ring on the back of $his gag
-		<<case "bit gag">>
-			the ring on the side of $his bit
-		<<case "cruel retirement counter" "nice retirement counter">>
-			$his retirement counter
-		<<case "default">>
-			<<if getSlave($AS).nosePiercing == 2>>
-				$his nose ring
-			<<elseif getSlave($AS).nipplesPiercing == 2>>
-				$his nipple chain
-			<<else>>
-				a collar that is placed on $his neck for the occasion, and
-			<</if>>
-		<</switch>>
+		<<if getSlave($AS).collar != "none">>
+			<<switch getSlave($AS).collar>>
+			<<case "uncomfortable leather">>
+				the steel ring on $his leather collar
+			<<case "preg biometrics">>
+				$his collar
+			<<case "silk ribbon">>
+				$his silk ribbon
+			<<case "tight steel">>
+				$his steel collar
+			<<case "shock punishment">>
+				$his shock collar
+			<<case "neck corset">>
+				an O-ring at the from of $his neck corset
+			<<case "stylish leather">>
+				$his collar
+			<<case "satin choker">>
+				$his choker collar
+			<<case "heavy gold">>
+				$He is wearing a heavy gold collar, an outstanding bit of ostentation.
+			<<case "pretty jewelry">>
+				$his ornate collar
+			<<case "bell collar">>
+				the ring attaching $his bell to $his collar, and
+			<<case "leather with cowbell">>
+				the ring attaching $his bell to $his collar, and
+			<<case "bowtie">>
+				$his bowtie collar
+			<<case "bowtie">>
+				$his neck tie
+			<<case "ancient Egyptian">>
+				<<if getSlave($AS).nosePiercing == 2>>
+					$his nose ring
+				<<elseif getSlave($AS).nipplesPiercing == 2>>
+					$his nipple chain
+				<<else>>
+					$his wesekh
+				<</if>>.
+			<<case "cruel retirement counter" "nice retirement counter">>
+				$his retirement counter
+			<<case "default">>
+				<<if getSlave($AS).nosePiercing == 2>>
+					$his nose ring
+				<<elseif getSlave($AS).nipplesPiercing == 2>>
+					$his nipple chain
+				<<else>>
+					a collar that is placed on $his neck for the occasion, and
+				<</if>>
+			<</switch>>
+		<<elseif getSlave($AS).mouthAccessory != "none">>
+			<<switch getSlave($AS).mouthAccessory>>
+			<<case "dildo gag">>
+				a ring on $his gag strap
+			<<case "massive dildo gag">>
+				a ring on $his gag strap
+			<<case "ball gag">>
+				a ring on the back of $his gag
+			<<case "bit gag">>
+				the ring on the side of $his bit
+			<<case "ring gag">>
+				a bar in $his mouth slightly wider than $his ring gag
+			<</switch>>
+		<<elseif getSlave($AS).faceAccessory != "none">>
+			<<switch getSlave($AS).faceAccessory>>
+			<<case "porcelain mask">>
+				<<if getSlave($AS).nosePiercing == 2>>
+					$his nose ring
+				<<elseif getSlave($AS).nipplesPiercing == 2>>
+					$his nipple chain
+				<<else>>
+					a collar that is placed around $his neck
+				<</if>>
+			<</switch>>
+		<</if>>
 		to the pole in order to keep $him from getting down. Whenever $he stops dancing the chain is tightened a bit more,
 		<<switch getSlave($AS).collar>>
 		<<case "uncomfortable leather">>
diff --git a/src/npc/interaction/fKiss.tw b/src/npc/interaction/fKiss.tw
index 55b7b267b2bcca0ad49ce1939c854a2b6eb101d7..a377816d00d355bea8c05d580d192c8996859fc9 100644
--- a/src/npc/interaction/fKiss.tw
+++ b/src/npc/interaction/fKiss.tw
@@ -5,34 +5,34 @@
 <<setPlayerPronouns>>
 
 You tell <<= getSlave($AS).slaveName>> to
-<<switch getSlave($AS).collar>>
+<<switch getSlave($AS).mouthAccessory>>
+<<case "none">>
+	<<if canWalk(getSlave($AS))>>
+		approach you.
+	<<else>>
+		have another slave help $him to your desk.
+	<</if>>
 <<case "dildo gag">>
 	<<if hasAnyArms(getSlave($AS))>>
 		remove $his dildo gag and approach you.
 	<<else>>
 		have another slave remove $his dildo gag and set $him down on your desk.
 	<</if>>
-	<<set _tempGag = getSlave($AS).collar, getSlave($AS).collar = "none">>
+	<<set _tempGag = getSlave($AS).mouthAccessory, getSlave($AS).mouthAccessory = "none">>
 <<case "massive dildo gag">>
 	<<if hasAnyArms(getSlave($AS))>>
 		pull $his enormous dildo gag out of the depths of $his throat and approach you.
 	<<else>>
 		have another slave pull the enormous dildo gag out of the depths of $his throat and set $him down on your desk.
 	<</if>>
-	<<set _tempGag = getSlave($AS).collar, getSlave($AS).collar = "none">>
-<<case "ball gag" "bit gag">>
+	<<set _tempGag = getSlave($AS).mouthAccessory, getSlave($AS).mouthAccessory = "none">>
+<<default>>
 	<<if hasAnyArms(getSlave($AS))>>
 		undo $his gag and approach you.
 	<<else>>
 		have another slave undo $his gag and set $him down on your desk.
 	<</if>>
-	<<set _tempGag = getSlave($AS).collar, getSlave($AS).collar = "none">>
-<<default>>
-	<<if canWalk(getSlave($AS))>>
-		approach you.
-	<<else>>
-		have another slave help $him to your desk.
-	<</if>>
+	<<set _tempGag = getSlave($AS).mouthAccessory, getSlave($AS).mouthAccessory = "none">>
 <</switch>>
 
 <<run Enunciate(getSlave($AS))>>
@@ -323,5 +323,5 @@ Then, you gently raise $his <<if getSlave($AS).face > 95>>heartrendingly beautif
 <</if>>
 
 <<if def _tempGag>>
-	<<set getSlave($AS).collar = _tempGag>>
+	<<set getSlave($AS).mouthAccessory = _tempGag>>
 <</if>>
diff --git a/src/npc/interaction/fLips.tw b/src/npc/interaction/fLips.tw
index 5c674dfa777d8631e0ba946634f91965fcd7ba9d..0cc558174b3adf3aa96660106ca3088ce231c021 100644
--- a/src/npc/interaction/fLips.tw
+++ b/src/npc/interaction/fLips.tw
@@ -26,7 +26,7 @@ You tell <<= getSlave($AS).slaveName>> to
 	$He's delighted at the prospect of $his favorite activity.
 <</if>>
 
-<<switch getSlave($AS).collar>>
+<<switch getSlave($AS).mouthAccessory>>
 <<case "dildo gag">>
 	<<if hasAnyArms(getSlave($AS))>>
 		$He removes the dildo from $his throat, leaving the ring gag in place.
@@ -48,6 +48,13 @@ You tell <<= getSlave($AS).slaveName>> to
 		As an amputee, $he requires your assistance to get the gag unfastened.
 	<</if>>
 	Able to breathe through $his mouth for the first time in a while, $he gasps gratefully, knowing the respite will be brief.
+<<case "ring gag">>
+	<<if hasAnyArms(getSlave($AS))>>
+		$He unfastens $his gag.
+	<<else>>
+		As an amputee, $he requires your assistance to get the gag unfastened.
+	<</if>>
+	Able to flew $his jaw for the first time in a while, $he swallows gratefully, knowing the respite will be brief.
 <</switch>>
 
 <<if (getSlave($AS).lipsTat == "tribal patterns")>>
@@ -120,10 +127,10 @@ You tell <<= getSlave($AS).slaveName>> to
 <<elseif getSlave($AS).devotion < -20>>
 	$He tries to back away, so you
 	<<if ($PC.dick != 0)>>
-		<<if getSlave($AS).collar == "dildo gag">>
+		<<if getSlave($AS).mouthAccessory == "dildo gag">>
 			grab $him; $his <<if $seeRace == 1>><<= getSlave($AS).race>> <</if>>mouth is already held invitingly open by $his gag, and $he's prevented from biting. You push $him down to <<if hasAnyLegs(getSlave($AS))>>$his knee<<if hasBothLegs(getSlave($AS))>>s<</if>><<else>>the ground<</if>> with $his head against the couch next to your desk so you can give $him a good hard throat fuck. When you cum down $his <<= getSlave($AS).skin>> throat $he retches through $his tears.
 			<<if $PC.vagina != -1>>$He has a mere moment to get $his breath back before you press your pussy against $his unwilling mouth.<</if>>
-		<<elseif getSlave($AS).collar == "massive dildo gag">>
+		<<elseif getSlave($AS).mouthAccessory == "massive dildo gag">>
 			grab $him; $his <<if $seeRace == 1>><<= getSlave($AS).race>> <</if>>mouth is left agape, unable to close after being forced so widely open for so long, so $he is unlikely to bite. You push $him down to <<if hasAnyLegs(getSlave($AS))>>$his knee<<if hasBothLegs(getSlave($AS))>>s<</if>><<else>>the ground<</if>> with $his head against the couch next to your desk so you can give $him a good hard throat fuck. When you cum down $his <<= getSlave($AS).skin>> throat $he retches through $his tears.
 			<<if $PC.vagina != -1>>$He has a mere moment to get $his breath back before you press your pussy against $his unwilling mouth.<</if>>
 		<<else>>
diff --git a/src/npc/surgery/surgery.js b/src/npc/surgery/surgery.js
index a1b984d2f947c61a89190d2b613eb6c4f34d19e0..3edc3d395cd2a3dbb622d1c610c7efc7f2d61d89 100644
--- a/src/npc/surgery/surgery.js
+++ b/src/npc/surgery/surgery.js
@@ -1104,6 +1104,8 @@ globalThis.beginFuckdoll = function(slave) {
 	slave.choosesOwnClothes = 0;
 	slave.clothes = "a Fuckdoll suit";
 	slave.collar = "none";
+	slave.faceAccessory  = "none";
+	slave.mouthAccessory  = "none";
 	if ((!hasAnyLegs(slave)) || (slave.shoes !== "none")) {
 		slave.shoes = "heels";
 	}
diff --git a/src/pregmod/widgets/bodyswapWidgets.tw b/src/pregmod/widgets/bodyswapWidgets.tw
index 0449dcf8102d1587e143f62490162e08fedb306d..c69a68d7bdb3ea609b87f64eca017a2cf397ab43 100644
--- a/src/pregmod/widgets/bodyswapWidgets.tw
+++ b/src/pregmod/widgets/bodyswapWidgets.tw
@@ -194,6 +194,8 @@
 	<<set $args[0].dietMilk = $args[1].dietMilk>>
 	<<set $args[0].clothes = $args[1].clothes>>
 	<<set $args[0].collar = $args[1].collar>>
+	<<set $args[0].faceAccessory  = $args[1].faceAccessory >>
+	<<set $args[0].mouthAccessory  = $args[1].mouthAccessory >>
 	<<set $args[0].shoes = $args[1].shoes>>
 	<<set $args[0].makeup = $args[1].makeup>>
 	<<set $args[0].nails = $args[1].nails>>
diff --git a/src/uncategorized/REFI.tw b/src/uncategorized/REFI.tw
index df85f4d12a76f15326e0951bf1779262215daf52..c1c752a72dc98a46542cd906627bde1795b08cb5 100644
--- a/src/uncategorized/REFI.tw
+++ b/src/uncategorized/REFI.tw
@@ -865,10 +865,10 @@ There was a glint of envy <<if canSee($activeSlave)>>in $his eyes when $he saw<<
 		<<= VCheck.Vaginal()>>
 	<<else>>
 		$He hasn't recovered before $he feels
-		<<switch $activeSlave.collar>>
+		<<switch $activeSlave.mouthAccessory>>
 		<<case "dildo gag" "massive dildo gag">>
 			the relief of the dildo gag being drawn from $his throat before
-		<<case "ball gag" "bit gag">>
+		<<case "ball gag" "bit gag" "ring gag">>
 			you unhook $his gag before
 		<</switch>>
 		the still more urgent pain of <<if $PC.dick != 0>>your dick getting shoved as deep down $his throat as you can<<else>>an enormous dildo forcing $his jaw wide and working its way down $his throat<</if>>,
@@ -1000,10 +1000,10 @@ There was a glint of envy <<if canSee($activeSlave)>>in $his eyes when $he saw<<
 		<<= VCheck.Vaginal()>>
 	<<else>>
 		$He hasn't recovered before $he feels
-		<<switch $activeSlave.collar>>
+		<<switch $activeSlave.mouthAccessory>>
 		<<case "dildo gag" "massive dildo gag">>
 			the relief of the dildo gag being drawn from $his throat before
-		<<case "ball gag" "bit gag">>
+		<<case "ball gag" "bit gag" "ring gag">>
 			you unhook $his gag before
 		<</switch>>
 		the still more urgent pain of <<if $PC.dick != 0>>your dick getting shoved as deep down $his throat as you can<<else>>an enormous dildo forcing $his jaw wide and working its way down $his throat<</if>>,
diff --git a/src/uncategorized/RESS.tw b/src/uncategorized/RESS.tw
index fa3e61a47de0a40fc137528f92b171909eb9dd64..209656ddc88a234a04905ddece54ad9e20ff0f06 100644
--- a/src/uncategorized/RESS.tw
+++ b/src/uncategorized/RESS.tw
@@ -2908,12 +2908,11 @@ $He comes to a stop right beside your elbow, waiting for further direction, just
 <<case "tittymonster inspection">>
 
 You enter your office from other business a few minutes after the scheduled start of <<= App.UI.slaveDescriptionDialog($activeSlave)>>'s inspection. The <<if $boobAccessibility == 1>>accessibility aids for slaves with immobilizing breasts<<else>>slaves who helped $him in<</if>> have gone, leaving $him waiting for you in front of your desk. The sight is an arresting one. $He's kneeling, but $his boobs are so enormous that they're resting on the ground in front of $him, completely concealing $his body below the chest<<if $activeSlave.belly >= 120000>>, save for the protruding mass of $his <<if $activeSlave.pregType > 8>>hyper pregnant<<elseif $activeSlave.pregType > 4>><<print pregNumberName($activeSlave.pregType, 1)>>-filled<<else>>overly distended<</if>> belly<</if>>. With $his arm<<if hasBothArms($activeSlave)>>s<</if>> tucked back, and $his torso, <<if $activeSlave.belly < 120000>><<if $activeSlave.bellyPreg > 100>>pregnancy,<<elseif $activeSlave.belly > 100>>swollen stomach,<<else>>abdomen,<</if>><</if>> and legs hidden, $he appears to consist of a <<if $activeSlave.face > 95>>gorgeous<<elseif $activeSlave.face > 50>>beautiful<<elseif $activeSlave.face >= 10>>pretty<<elseif $activeSlave.face >= 0>>nice<<else>>homely<</if>>, $activeSlave.faceShape face, a
-<<switch $activeSlave.collar>>
-<<case "none" "dildo gag" "ball gag" "bit gag" "massive dildo gag">>
-	bare
-<<default>>
+<<if $activeSlave.collar == "none">>
+	none
+<<else>>
 	collared
-<</switch>>
+<</if>>
 neck, $activeSlave.skin, <<if $activeSlave.muscles > 95>>hugely muscled<<elseif $activeSlave.muscles > 30>>strong<<elseif $activeSlave.shoulders > 0>>broad<<elseif $activeSlave.shoulders < 0>>feminine<<elseif $activeSlave.muscles > 5>>toned<<else>>soft<</if>> shoulders, and below that, breasts<<if $activeSlave.belly >= 120000>> parted by $his _belly dome of a stomach<</if>>. $He greets you <<if $activeSlave.devotion > 50>>devotedly, behaving for all the world like $he's pleased to be<<elseif $activeSlave.devotion >= -20>>properly, with just a hint of unhappiness about being<<else>>with more than a hint of resentment over being<</if>> pinned to the floor by $his own tits.
 
 <<case "bonded love">>
@@ -4155,13 +4154,15 @@ beside your desk to await further orders. It occurs to you, gazing down at your
 <<case "gagged slave">>
 
 You cross paths with <<= App.UI.slaveDescriptionDialog($activeSlave)>> as $he returns from $activeSlave.assignment after a long day. One of the things most readily apparent about $activeSlave.slaveName is the
-<<if ($activeSlave.collar == "ball gag")>>
+<<if ($activeSlave.mouthAccessory == "ball gag")>>
 	ball gag keeping $his mouth filled,
-<<elseif ($activeSlave.collar == "bit gag")>>
+<<elseif ($activeSlave.mouthAccessory == "bit gag")>>
 	cruel bit gag keeping $his jaw locked,
-<<elseif ($activeSlave.collar == "dildo gag")>>
+<<elseif ($activeSlave.mouthAccessory == "ring gag")>>
+	cruel ring gag keeping $his mouth stretched open,
+<<elseif ($activeSlave.mouthAccessory == "dildo gag")>>
 	dildo gag filling $his mouth and throat,
-<<elseif ($activeSlave.collar == "massive dildo gag")>>
+<<elseif ($activeSlave.mouthAccessory == "massive dildo gag")>>
 	dildo gag hugely distending $his throat,
 <</if>>
 the existence of which is a constant reminder to $him of $his submission to you and your immense power over $him.
@@ -19380,7 +19381,7 @@ brought in to you. This time <<= App.UI.slaveDescriptionDialog($activeSlave)>> h
 
 <<link "Give $him something else to gag on">>
 	<<replace "#result">>
-		As pleasant an image as $activeSlave.slaveName's mouth filled by a $activeSlave.collar is, one of $his mouth's primary purposes is still to provide you with ample <<if $PC.dick != 0>>blowjobs<<if $PC.vagina != -1>> and <</if>><</if>><<if $PC.vagina != -1>>cunnilingus<</if>>. With $activeSlave.slaveName already kneeling, it is merely a matter of undoing $his gag before you can put $his mouth to work.
+		As pleasant an image as $activeSlave.slaveName's mouth filled by a $activeSlave.mouthAccessory is, one of $his mouth's primary purposes is still to provide you with ample <<if $PC.dick != 0>>blowjobs<<if $PC.vagina != -1>> and <</if>><</if>><<if $PC.vagina != -1>>cunnilingus<</if>>. With $activeSlave.slaveName already kneeling, it is merely a matter of undoing $his gag before you can put $his mouth to work.
 		<<if $activeSlave.skill.oral >= 100>>
 			Though $he has spent much time gagged, $his mastery at giving oral is unaffected.
 		<<elseif $activeSlave.skill.oral > 60>>
@@ -19412,20 +19413,22 @@ brought in to you. This time <<= App.UI.slaveDescriptionDialog($activeSlave)>> h
 <</link>>
 <br><<link "Remove the gag for a few minutes">>
 	<<replace "#result">>
-		You wordlessly remove the $activeSlave.collar and watch as $activeSlave.slaveName opens and closes $his mouth testingly, as if $he has forgotten what it feels like to do so without obstruction. Though you eventually return to the gag to its rightful place in $his mouth, $he @@.mediumaquamarine;trusts you more@@ for granting $him a few moments respite from the gag.
+		You wordlessly remove the $activeSlave.mouthAccessory and watch as $activeSlave.slaveName opens and closes $his mouth testingly, as if $he has forgotten what it feels like to do so without obstruction. Though you eventually return to the gag to its rightful place in $his mouth, $he @@.mediumaquamarine;trusts you more@@ for granting $him a few moments respite from the gag.
 		<<set $activeSlave.trust += 4>>
 	<</replace>>
 <</link>>
 <br><<link "Torment $him with the gag">>
 	<<replace "#result">>
-		Though having a $activeSlave.collar constrict $his mouth is torment enough, you take the time to linger and add to $his torturous existence. $activeSlave.slaveName soon discovers that the straps of a gag can always be made tighter, the
-		<<if ($activeSlave.collar == "ball gag")>>
+		Though having a $activeSlave.mouthAccessory constrict $his mouth is torment enough, you take the time to linger and add to $his torturous existence. $activeSlave.slaveName soon discovers that the straps of a gag can always be made tighter, the
+		<<if ($activeSlave.mouthAccessory == "ball gag")>>
 			ball can always be made larger,
-		<<elseif ($activeSlave.collar == "bit gag")>>
+		<<elseif ($activeSlave.mouthAccessory == "bit gag")>>
 			the bit can always be made thicker,
-		<<elseif ($activeSlave.collar == "dildo gag")>>
+		<<elseif ($activeSlave.mouthAccessory == "ring gag")>>
+			the ring can always be made wider,
+		<<elseif ($activeSlave.mouthAccessory == "dildo gag")>>
 			the dildo can always be made larger,
-		<<elseif ($activeSlave.collar == "massive dildo gag")>>
+		<<elseif ($activeSlave.mouthAccessory == "massive dildo gag")>>
 			the dildo can always be made wider and longer,
 		<</if>>
 		and the punishments rendered for daring to show any discomfort can always be harsher and stricter. Come the end of your session with $him, $activeSlave.slaveName <<if $activeSlave.fetish == "masochist">> is mortified by the intensity of $his orgasms, @@.hotpink;and more convinced than ever that $he's a pain slut,@@ and yet<</if>> @@.gold;scuttles away quickly, having learnt a harsh lesson about your power over $his body.@@
diff --git a/src/uncategorized/dairyReport.tw b/src/uncategorized/dairyReport.tw
index 7481e8a2993a5674152e1d566ab0eb4f06196905..e975241557b4f9072f6df7b7420ce4c531bb3ed9 100644
--- a/src/uncategorized/dairyReport.tw
+++ b/src/uncategorized/dairyReport.tw
@@ -365,7 +365,7 @@
 		<<set $slaves[$i].diet = "healthy">>
 	<</if>>
 	<<if $dairyRestraintsSetting > 1>>
-		<<set $slaves[$i].collar = "none", $slaves[$i].choosesOwnClothes = 0, $slaves[$i].clothes = "no clothing", $slaves[$i].vaginalAccessory = "none", $slaves[$i].vaginalAttachment = "none", $slaves[$i].dickAccessory = "none", $slaves[$i].buttplug = "none", $slaves[$i].chastityAnus = 0, $slaves[$i].chastityPenis = 0, $slaves[$i].chastityVagina = 0>>
+		<<set $slaves[$i].collar = "none", $slaves[$i].faceAccessory  = "none", $slaves[$i].mouthAccessory = "none", $slaves[$i].choosesOwnClothes = 0, $slaves[$i].clothes = "no clothing", $slaves[$i].vaginalAccessory = "none", $slaves[$i].vaginalAttachment = "none", $slaves[$i].dickAccessory = "none", $slaves[$i].buttplug = "none", $slaves[$i].chastityAnus = 0, $slaves[$i].chastityPenis = 0, $slaves[$i].chastityVagina = 0>>
 	<</if>>
 	<<switch $dairyDecoration>>
 	<<case "Arabian Revivalist" "Aztec Revivalist" "Chattel Religionist" "Chinese Revivalist" "Degradationist" "Edo Revivalist" "Egyptian Revivalist" "Roman Revivalist" "Subjugationist" "Supremacist">>
diff --git a/src/uncategorized/longSlaveDescription.tw b/src/uncategorized/longSlaveDescription.tw
index 1ae369626da629dd78ddb72c359497420ce333a4..82cb1109e2488a930f43cb0df1d06e543e66a0ea 100644
--- a/src/uncategorized/longSlaveDescription.tw
+++ b/src/uncategorized/longSlaveDescription.tw
@@ -1902,6 +1902,8 @@ $He is
 
 	<<if $activeSlave.fuckdoll == 0>>
 		<<collarDescription>>
+		<<= App.Desc.faceAccessory($activeSlave)>>
+		<<= App.Desc.mouthAccessory($activeSlave)>>
 		<<if ($activeSlave.relationship > 4)>>
 			<<if hasAnyArms($activeSlave)>>
 				$He has a simple gold band on the little finger of $his <<if !hasLeftArm($activeSlave)>>right<<else>>left<</if>> hand.
diff --git a/src/uncategorized/randomNonindividualEvent.tw b/src/uncategorized/randomNonindividualEvent.tw
index 384aa92f8749652c400a601dfe98500dd5098eaf..d438ff3b6ba13708e9d7bff4bcabd42b04c5579e 100644
--- a/src/uncategorized/randomNonindividualEvent.tw
+++ b/src/uncategorized/randomNonindividualEvent.tw
@@ -187,7 +187,7 @@
 				<</if>>
 			<<elseif ($slaves[$i].fetish == "cumslut")>>
 				<<if ($cumslutID == 0)>>
-					<<if !["dildo gag", "massive dildo gag", "ball gag", "bit gag"].includes($slaves[$i].collar)>>
+					<<if ["ring gag", "none"].includes($slaves[$i].mouthAccessory)>>
 						<<set $cumslutID = $slaves[$i].ID>>
 					<</if>>
 				<</if>>
diff --git a/src/uncategorized/reBoomerang.tw b/src/uncategorized/reBoomerang.tw
index ed98acb50cd33914c9753acec6f6229369d93d0f..1343e924d6501ee9ad55bc9f81b5b830a210a314 100644
--- a/src/uncategorized/reBoomerang.tw
+++ b/src/uncategorized/reBoomerang.tw
@@ -18,7 +18,7 @@ Your work is interrupted by $assistant.name with an alert from the entrance to t
 brings up the relevant feeds. There's a naked body crumpled pathetically against one wall of the entryway, beneath the communications panel. It's <<= SlaveFullName($activeSlave)>>, whom you sold _weeks weeks ago. $He's looking up into one of the cameras plaintively.
 "Plea<<s>>e take me back," $he whispers, not wanting to draw the attention of passersby, and knowing that $his faint words will be picked up and amplified for you.
 
-<<set $activeSlave.collar = "none", $activeSlave.choosesOwnClothes = 0, $activeSlave.clothes = "no clothing", $activeSlave.buttplug = "none", $activeSlave.vaginalAccessory = "none", $activeSlave.dickAccessory = "none", $activeSlave.chastityAnus = 0, $activeSlave.chastityPenis = 0, $activeSlave.chastityVagina = 0>>
+<<set $activeSlave.collar = "none", $activeSlave.faceAccessory = "none", $activeSlave.mouthAccessory = "none", $activeSlave.choosesOwnClothes = 0, $activeSlave.clothes = "no clothing", $activeSlave.buttplug = "none", $activeSlave.vaginalAccessory = "none", $activeSlave.dickAccessory = "none", $activeSlave.chastityAnus = 0, $activeSlave.chastityPenis = 0, $activeSlave.chastityVagina = 0>>
 <<run setHealth($activeSlave, jsRandom(-40, -25), $activeSlave.health.shortDamage + jsRandom(0, 10), $activeSlave.health.longDamage + jsRandom(0, 10))>>
 
 /* ------------------ pregnancy setup start here----------------- */
diff --git a/src/uncategorized/slaveInteract.tw b/src/uncategorized/slaveInteract.tw
index 83550af2493902931580e114b76664d95b73c113..8aa14a826137b1ac7578e65d03365a90ba471c7a 100644
--- a/src/uncategorized/slaveInteract.tw
+++ b/src/uncategorized/slaveInteract.tw
@@ -169,6 +169,10 @@
 				<span id="collar"></span>
 				/*<script>App.UI.Wardrobe.collar(getSlave(V.activeSlave.ID))</script>*/
 
+				<span id="faceAccessory"></span>
+
+				<span id="mouthAccessory"></span>
+
 				<span id="armAccessory"></span>
 				/*<script>App.UI.Wardrobe.armAccessory(getSlave(V.activeSlave.ID))</script>*/
 
diff --git a/src/utility/descriptionWidgetsStyle.tw b/src/utility/descriptionWidgetsStyle.tw
index 66c9faa27605e2950b953bd49ab01a52efdba21a..7263bf0f8be8aca102c60e14991ba052068e8c36 100644
--- a/src/utility/descriptionWidgetsStyle.tw
+++ b/src/utility/descriptionWidgetsStyle.tw
@@ -3744,10 +3744,6 @@ $His
 	<<switch $activeSlave.collar>>
 	<<case "uncomfortable leather">>
 		$He is wearing an uncomfortable leather collar with a useful steel ring in front.
-	<<case "dildo gag">>
-		$He is wearing a sturdy leather collar that continues up to restrict $his jaw as well. It holds a ring gag in $his mouth, into which slots a formidable inward-facing dildo that reaches down $his throat. It can be removed to facefuck $him.
-	<<case "massive dildo gag">>
-		$He is wearing a sturdy leather collar that continues up to restrict $his jaw as well. It acts as an anchor for an enormous inward-facing dildo that reaches deep down $his throat. The sheer size of the phallus forces $his mouth as wide as it will go and considerably bulges $his throat. Fortunately for $him, it is designed to allow $him to be able to breathe through $his nose; though when removed, the poor $girl finds $himself incapable of closing $his mouth for some time.
 	<<case "preg biometrics">>
 		<<if $activeSlave.pregSource > 0>>
 			<<set _daddy = findFather($activeSlave.pregSource), _daddy = _daddy.slaveName>>
@@ -3809,8 +3805,6 @@ $His
 		$He is wearing a tight silk ribbon fitted to $his neck, it is oddly elegant.
 	<<case "tight steel">>
 		$He is wearing a tight steel collar whose restricting metal touch $he cannot escape.
-	<<case "porcelain mask">>
-		$He is wearing a beautiful porcelain mask to hide $his unsightly facial features.
 	<<case "shock punishment">>
 		$He is wearing a utilitarian collar with a punishment device at $his throat to administer agonizing shocks.
 	<<case "neck corset">>
@@ -3829,12 +3823,10 @@ $His
 		$He is wearing a comfortable leather collar with a small steel cowbell at $his throat.
 	<<case "bowtie">>
 		$He is wearing the collar from a white formal shirt, and a black bowtie, though these conceal an actual collar that works perfectly well for restraint.
+	<<case "neck tie">>
+		$He is wearing a neck tie, though it conceals an actual collar that works perfectly well for restraint.
 	<<case "ancient Egyptian">>
 		$He is wearing a beautiful golden wesekh, a collar that spreads from $his neck out onto both shoulders and down $his front.
-	<<case "ball gag">>
-		$He is wearing a mouth filling, <<if $activeSlave.makeup == 3 || $activeSlave.makeup == 6 || $activeSlave.makeup == 8>>$activeSlave.hColor<<else>>red<</if>> ball-shaped gag that prevents $him from uttering a word while keeping $him uncomfortably aware of $his status.
-	<<case "bit gag">>
-		$He is wearing a jaw spreading, bar-shaped gag that prevents $him from speaking while keeping $him uncomfortably aware of $his status.
 	<<case "cruel retirement counter" "nice retirement counter">>
 		$He is wearing a <<if $activeSlave.collar == "cruel retirement counter">>heavy metal collar<<else>>nice collar, almost a necklace,<</if>> with a small numerical display reading
 		<<if $activeSlave.indenture > -1>>