diff --git a/game/03-JavaScript/base-clothing.js b/game/03-JavaScript/base-clothing.js
index 5ed6680f05d23473ec54276bed4b5838abdaa7c4..908a05ec3f22be934eddcdab9f47cd030927f55c 100644
--- a/game/03-JavaScript/base-clothing.js
+++ b/game/03-JavaScript/base-clothing.js
@@ -175,15 +175,15 @@ window.getClothingCost = getClothingCost;
 function tailorClothingCost(item, slot) {
 	let cost = 0;
 	if (setup.clothes[slot][clothesIndex(slot, item)].outfitSecondary) {
-		let upperSlot = setup.clothes[slot][clothesIndex(slot, item)].outfitSecondary[0];
-		let upperItem = setup.clothes[upperSlot].findIndex(x => x.name === setup.clothes[slot][clothesIndex(slot, item)].outfitSecondary[1]);
-		if (upperItem >= 0) cost = setup.clothes[upperSlot][upperItem].cost * V.clothesPrice * .2;
+		const upperSlot = setup.clothes[slot][clothesIndex(slot, item)].outfitSecondary[0];
+		const upperItem = setup.clothes[upperSlot].findIndex(x => x.name === setup.clothes[slot][clothesIndex(slot, item)].outfitSecondary[1]);
+		if (upperItem >= 0) cost = setup.clothes[upperSlot][upperItem].cost * V.clothesPrice * 0.2;
 	} else if (setup.clothes[slot][clothesIndex(slot, item)].outfitPrimary) {
-		cost = setup.clothes[slot][clothesIndex(slot, item)].cost * V.clothesPrice * .8;
+		cost = setup.clothes[slot][clothesIndex(slot, item)].cost * V.clothesPrice * 0.8;
 	} else {
 		cost = setup.clothes[slot][clothesIndex(slot, item)].cost * V.clothesPrice;
 	}
-	
+
 	if (
 		setup.clothes.under_lower.findIndex(x => x.name === item.name && x.modder === item.modder) >= 0 ||
 		setup.clothes.under_upper.findIndex(x => x.name === item.name && x.modder === item.modder) >= 0
@@ -340,7 +340,7 @@ function getVisibleClothesList() {
 	if (V.worn.over_lower.exposed >= 2 || V.overlowerwetstage >= 3) visibleClothes.push(V.worn.lower);
 	if (V.worn.upper.exposed >= 2 || V.upperwetstage >= 3) visibleClothes.push(V.worn.under_upper);
 	if (V.worn.lower.exposed >= 2 || V.lowerwetstage >= 3) visibleClothes.push(V.worn.under_lower);
-	if (V.worn.under_lower.exposed >= 2 || V.underlowerwetstage >= 3) visibleClothes.push(V.worn.genitals);
+	if (V.worn.under_lower.exposed >= 1 || V.underlowerwetstage >= 3) visibleClothes.push(V.worn.genitals);
 	return visibleClothes;
 }
 window.getVisibleClothesList = getVisibleClothesList;
diff --git a/game/base-system/named-npcs.twee b/game/base-system/named-npcs.twee
index 37456c710d5101bef51161218043d1d1ba8c60f7..5b4895098b5da813ca1fccb7cec816ec070fb936 100644
--- a/game/base-system/named-npcs.twee
+++ b/game/base-system/named-npcs.twee
@@ -432,6 +432,9 @@ Zohar
 				<<else>>
 					//Mason is the swimming teacher at the local school. She's the youngest teacher, only a few years older than some of the students. Her toned body is naturally shown off during class, but if she notices the way she's leered at, she gives no indication.//
 				<</if>>
+				<<set $NPCName[_i].chastityKeyCarried to 0>> /* Mason is carrying the key to unlock Winter's Chastity belt. 1 is carried, 2 player knows it is carried */
+				<<set $NPCName[_i].chastityRemoved to 0>> /* Number of chastity devices Mason has removed */
+				<<set $NPCName[_i].chastityRemovalDeclined to 0>> /* Whether you've declined Mason's offer to remove it (prompts more passive checking). Resets when a device is removed */
 			<<case Winter>>
 				<<if $NPCName[_i].pronoun is "m">>
 					//Winter teaches history at the local school. He's an older gentleman, well-groomed and sophisticated.//
diff --git a/game/base-system/widgets.twee b/game/base-system/widgets.twee
index e33debc024f1f157bd79e07bed2a6b03885a1d0c..ab4f4e31cabba7f89d8b7a7f02086a1abc8a48a2 100644
--- a/game/base-system/widgets.twee
+++ b/game/base-system/widgets.twee
@@ -3871,6 +3871,7 @@
 	<<set $NPCName[_i].dom = Math.clamp($NPCName[_i].dom, -50, 50)>>
 	<<set _i to $NPCNameList.indexOf("Mason")>>
 	<<set $NPCName[_i].love = Math.clamp($NPCName[_i].love, -50, 50)>>
+	<<set $NPCName[_i].lust = Math.clamp($NPCName[_i].lust, -50, 50)>>
 	<<set $NPCName[_i].dom = Math.clamp($NPCName[_i].dom, -50, 50)>>
 	<<set _i to $NPCNameList.indexOf("Sam")>>
 	<<set $NPCName[_i].love = Math.clamp($NPCName[_i].love, -50, 50)>>
diff --git a/game/overworld-forest/loc-lake/main.twee b/game/overworld-forest/loc-lake/main.twee
index af4309c4126d3e7f891f0e4aa77fefba5b6efc14..e3965124a5d6f43e8ae821506c25927bb96c04bc 100644
--- a/game/overworld-forest/loc-lake/main.twee
+++ b/game/overworld-forest/loc-lake/main.twee
@@ -467,7 +467,7 @@ You are at the bus stop beside the lake. The road from town terminates here, end
 	<</if>>
 	<<eventlakesafe>>
 	<<lakereturnjourney>>
-	<<link [[Soth to shore (0:10)|Lake Shore]]>><<pass 10>><</link>>
+	<<link [[South to shore (0:10)|Lake Shore]]>><<pass 10>><</link>>
 	<br><br>
 
 	<<foresticon>><<link [[Forest (0:10)|Forest]]>><<pass 10>><</link>>
diff --git a/game/overworld-forest/loc-lake/mason.twee b/game/overworld-forest/loc-lake/mason.twee
index 6b9f527054346a1e47779ebb53edcbe93693f9d1..9e51c89bce1886e79371fdcea815a501b81d2ee5 100644
--- a/game/overworld-forest/loc-lake/mason.twee
+++ b/game/overworld-forest/loc-lake/mason.twee
@@ -31,7 +31,7 @@ You swim into the middle of the lake. There Mason swims in a wide circle. <<He>>
 
 	<<link [[Pretend you haven't noticed|Lake Mason Pretend]]>><<npcincr Mason love 1>><</link>><<glove>>
 	<br>
-	<<link [[Tease|Lake Mason Tease]]>><<npcincr Mason love -1>><<npcincr Mason lust 1>><<npcincr Mason dom -1>><</link>><<llove>><<glust>><<promiscuous1>>
+	<<link [[Tease|Lake Mason Tease]]>><<npcincr Mason love -1>><<npcincr Mason lust 1>><<ldom>><<npcincr Mason dom -1>><</link>><<llove>><<glust>><<promiscuous1>>
 	<br>
 	<<link [[Act nonchalant|Lake Mason Nonchalant]]>><</link>>
 	<br>
@@ -58,7 +58,7 @@ You swim into the middle of the lake. There Mason swims in a wide circle. <<He>>
 
 	<<link [[Pretend you haven't noticed|Lake Mason Pretend]]>><<npcincr Mason love 1>><</link>><<glove>>
 	<br>
-	<<link [[Tease|Lake Mason Tease]]>><<npcincr Mason love -1>><<npcincr Mason lust 1>><<npcincr Mason dom -1>><</link>><<llove>><<glust>><<promiscuous1>>
+	<<link [[Tease|Lake Mason Tease]]>><<npcincr Mason love -1>><<npcincr Mason lust 1>><<ldom>><<npcincr Mason dom -1>><</link>><<llove>><<glust>><<promiscuous1>>
 	<br>
 	<<link [[Act nonchalant|Lake Mason Nonchalant]]>><</link>>
 	<br>
@@ -173,7 +173,7 @@ You swim towards Mason. <<He>> doesn't try to outswim you, and starts treading w
 	<br>
 <</if>>
 <<if $promiscuity gte 15>>
-	<<link [[Ask to see|Lake Mason Flirt]]>><<npcincr Mason love -1>><<npcincr Mason lust 1>><<npcincr Mason dom -1>><</link>><<promiscuous2>><<llove>><<glust>>
+	<<link [[Ask to see|Lake Mason Flirt]]>><<npcincr Mason love -1>><<npcincr Mason lust 1>><<ldom>><<npcincr Mason dom -1>><</link>><<promiscuous2>><<llove>><<glust>>
 	<br>
 <</if>>
 
@@ -354,6 +354,12 @@ You follow one of the streams feeding the lake, to the pond Mason likes to relax
 <<effects>>
 
 <<flaunting>> you sit beside the pond. Mason opens <<his>> eyes when <<he>> hears you, but shuts them again when <<he>> sees your <<lewdness>>.
+<<if !C.npc.Mason.chastityKeyCarried and playerChastity() and $worn.genitals.origin is "Winter" and (C.npc.Mason.love gte 5 or C.npc.Mason.lust gte 10)
+	and getVisibleClothesList().find(o => o === V.worn.genitals)>>
+	After a moment, <<he>> opens <<his>> eyes again and stares at your $worn.genitals.name.
+	<<He>> stares hard enough that it briefly becomes uncomfortable before <<he>> catches <<himself>> and averts <<his>> gaze with a blush.
+	<<set C.npc.Mason.chastityKeyCarried to 1>><<set $daily.masonChastityRemovalDeclined to 1>>
+<</if>>
 <<if $exposed gte 2>>
 	<<if $daily.ex.mason isnot 1>>
 		<<exhibitionism5>>
@@ -390,6 +396,12 @@ You follow one of the streams feeding the lake, to the pond Mason likes to relax
 <<effects>><<water>>
 
 <<flaunting>> you slip into the pond. Mason opens <<his>> eyes when <<he>> hears the splash, but shuts them again when <<he>> sees your <<lewdness>>.
+<<if !C.npc.Mason.chastityKeyCarried and playerChastity() and $worn.genitals.origin is "Winter" and (C.npc.Mason.love gte 5 or C.npc.Mason.lust gte 10)
+	and getVisibleClothesList().find(o => o === V.worn.genitals)>>
+	After a moment, <<he>> opens <<his>> eyes again and stares at your $worn.genitals.name.
+	<<He>> stares hard enough that it briefly becomes uncomfortable before <<he>> catches <<himself>> and averts <<his>> gaze with a blush.
+	<<set C.npc.Mason.chastityKeyCarried to 1>><<set $daily.masonChastityRemovalDeclined to 1>>
+<</if>>
 <<if $exposed gte 2>>
 	<<if $daily.ex.mason isnot 1>>
 		<<exhibitionism5>>
@@ -526,7 +538,9 @@ Mason seems unsure, but nods. "If you're sure. Be careful." <<He>> dries <<himse
 		<br>
 		<<link [[Say you'll be okay|Mason Walk Refuse]]>><</link>>
 		<br>
-
+	<<elseif playerChastity() and $worn.genitals.origin is "Winter" and C.npc.Mason.chastityKeyCarried and !$daily.masonChastityRemovalDeclined
+		and getVisibleClothesList().find(o => o === V.worn.genitals) and (C.npc.Mason.love gte 10 or C.npc.Mason.lust gte 15)>>
+		<<include "Mason Chastity Prompt">>
 	<<else>>
 		<<link [[Chat (0:30)|Mason Pond Chat]]>><<npcincr Mason love 1>><<pass 30>><<stress -6>><</link>><<glove>><<lstress>>
 		<br>
@@ -639,3 +653,235 @@ Mason shakes <<his>> head. "I can't be negligent," <<he>> says. "I don't care if
 
 <<link [[Next|Lake Depths Ice]]>><<endevent>><<set $eventskip to 1>><</link>>
 <br>
+
+
+:: Mason Chastity Prompt
+<!-- no effects, this is an alternative passage ending -->
+
+<<if $location is "pool">>
+	As you get closer, <<he>> points to your $worn.genitals.name and blushes,
+<<else>>
+	Pointing to your $worn.genitals.name and blushing, <<he>> says,
+<</if>>
+<<if !C.npc.Mason.chastityRemovalDeclined>>
+	<<switch C.npc.Mason.chastityRemoved>>
+		<<case 0 undefined null>>
+			"Y-you know, I might have something for that."
+			<<He>> follows up with a hasty, "Only if you want, of course."
+		<<case 1>>
+			"What have you been doing to draw the ire of Old Winter to end up in one of these again? Still, I should be able to remove it."
+			<<He>> follows up with a hasty statement, "Only if you want, of course."
+		<<default>>
+			"I don't understand. What have you been doing to keep getting caught in those things? Old Winter only ever ended up doing that to me when I..."
+			<br><br>
+ 
+			Mason's face gets even redder, which you did not think possible, as <<he>> changes the subject. "N-nevermind! The point is, I should be able to remove it again if you like."
+	<</switch>>
+<<else>>
+	<<print [
+		'"Y-you know, I might have something for that. Just let me know,"',
+		'"M-my offer still stands. If you need out of that, I could help,"',
+		'"Talk to me if you ever change your mind about that thing,"',
+	].random()>> says Mason while pointing at your $worn.genitals.name.
+<</if>>
+<br><br>
+
+
+<<link [[No thanks|Mason Chastity Decline]]>><<set C.npc.Mason.chastityRemovalDeclined to 1>><<set $daily.masonChastityRemovalDeclined to 1>><<set $weekly.masonChastityRemovalDeclined to 1>><</link>>
+<br>
+<<if C.npc.Mason.chastityKeyCarried is 1 or $exhibitionism lt 75>>
+	<<link [[Ask|Mason Chastity Ask]]>><</link>>
+<<elseif $exhibitionism gte 75>>
+	<<link [[Accept|Mason Chastity Accept]]>>
+		<<arousal 600>><<exhibitionism5>><<set C.npc.Mason.chastityRemovalDeclined to 0>><<run delete $daily.masonChastityRemovalDeclined>><<run delete $weekly.masonChastityRemovalDeclined>>
+	<</link>><<garousal>><<exhibitionist5>>
+<<else>>
+	<span class="purple">You aren't lewd enough to let Mason strip you.</span>
+<</if>>
+<br>
+
+
+:: Mason Chastity Decline
+<<effects>>
+"No thanks," you say while shifting to cover the $worn.genitals.name a little.
+<br><br>
+
+"I understand," says Mason blushing. "I just thought I'd offer." <<He>> cannot help but glance at your $worn.genitals.name once more before turning away. <<npcincr Mason lust 1>><<glust>>
+<br><br>
+<<if $location is "pool">> /* Exit to Pool */
+	<<link [[Rejoin the Class|Swimming Lesson]]>><<endevent>><</link>>
+<<else>> /* Exit to Mason Pond */
+	<<mason_actions>>
+<</if>>
+<br>
+
+
+:: Mason Chastity Ask
+<<effects>><<set C.npc.Mason.chastityKeyCarried to 2>>
+"Like what?" you ask.
+<br><br>
+
+Mason pulls out a small key. "You've had a run in with Old Winter. I think this might fit. W-would you mind if I tried?"
+<br><br>
+
+<<link [[No thanks|Mason Chastity Decline]]>><<set C.npc.Mason.chastityRemovalDeclined to 1>><<set $daily.masonChastityRemovalDeclined to 1>><<set $weekly.masonChastityRemovalDeclined to 1>><</link>>
+<br>
+<<if $exhibitionism gte 75>>
+	<<link [[Accept|Mason Chastity Accept]]>>
+		<<arousal 600>><<exhibitionism5>><<set C.npc.Mason.chastityRemovalDeclined to 0>><<run delete $daily.masonChastityRemovalDeclined>><<run delete $weekly.masonChastityRemovalDeclined>>
+	<</link>><<garousal>><<exhibitionist5>>
+<<else>>
+	<br><span class="purple">You aren't lewd enough to let Mason strip you.</span>
+<</if>>
+<br>
+
+
+:: Mason Chastity Accept
+<<effects>>
+<<if C.npc.Mason.chastityRemoved is undefined>><<set C.npc.Mason.chastityRemoved to 0>><</if>>
+
+/* Player */
+<<switch C.npc.Mason.chastityRemoved>>
+	<<case 0>>
+		<<if $speech_attitude is "meek">>
+			"O-only if you think it will fit," you say, blushing and averting your eyes.
+		<<elseif $speech_attitude is "bratty">>
+			"I bet it would fit," you say, smiling and tilting your head suggestively.
+		<<else>>
+			"Do you think it will fit?" you ask as you look at the key and back to Mason.
+		<</if>>
+	<<case 1>>
+		<<if $speech_attitude is "meek">>
+			"Y-you sure you don't just want another peek?" you ask, blushing and averting your eyes.
+		<<elseif $speech_attitude is "bratty">>
+			"I bet you just want another peek," you say, smiling and tilting your head suggestively.
+		<<else>>
+			"I don't mind letting you see, have another look," you say as you look at the key and back to Mason.
+		<</if>>
+	<<default>>
+		<<if $speech_attitude is "meek">>
+			"I-I'm ok with letting you peek again. M-maybe you can even touch if you want," you say, blushing and averting your eyes.
+		<<elseif $speech_attitude is "bratty">>
+			"Are you sure you are not just trying to get another peek? Maybe I'll even let you touch if you like," you say, smiling and tilting your head suggestively.
+		<<else>>
+			"Sure, I can let you have another peek and maybe let you touch if you like," you say with a smile.
+		<</if>>
+<</switch>>
+<br><br>
+
+/* Action */
+<<He>> tries to ignore your comment but unconsciously licks <<his>> lips. <<He>>
+<<if $location is "pool">>
+	pulls you off to the side of the pool where there is at least a slight amount of privacy and
+<</if>>
+brings the key to your $worn.genitals.name with trembling fingers.
+<<if $worn.over_lower.vagina_exposed gte 1 and $worn.lower.vagina_exposed gte 1 and $worn.under_lower.vagina_exposed gte 1>>
+	<<switch random(0,1)>>
+		<<case 0>>
+			You thrust your hips forward, letting Mason have full access to your $worn.genitals.name.
+		<<default>>
+			You spread your legs, giving Mason full access to your $worn.genitals.name.
+	<</switch>>
+<<else>>
+	<<set _worn to [$worn.over_lower, $worn.lower, $worn.under_lower].filter(w => w.name !== "naked").map(w => w.name).formatList({useOxfordComma: true})>>
+	You pull off your <<print $underlowerwetstage gte 3 or $overlowerwetstage gte 3 or $lowerwetstage gte 3 ? "soaked " : "">>_worn to give Mason full access to your $worn.genitals.name.
+<</if>>
+The key fits perfectly, and with a loud click, the $worn.genitals.name comes off, exposing your <<genitals 1>>.
+<<set $worn.genitals.type.push("broken")>><<genitalsruined>>
+<br><br>
+
+/* Reaction */
+<<switch C.npc.Mason.chastityRemoved>>
+	<<case 0>>
+		Mason marvels at your <<genitals 2>> for longer than <<he>> means to and, upon realising it, closes <<his>> eyes and quickly turns away.
+		"Well, it does fit, so you're welcome. It's not the first time I've had a run in with one of these."
+		<<npcincr Mason lust 5>><<gglust>><<npcincr Mason love 1>><<glove>>
+	<<case 1>>
+		Mason stares at your <<genitals 2>> for longer than intended, and <<his>> hand raises, as if to touch you. When <<he>> realises, <<he>> pulls back <<his>> hand and turns away, closing <<his>> eyes.
+		"You're welcome, though you should try to be more careful. Winter has... unique interests."
+		<<npcincr Mason lust 5>><<gglust>><<npcincr Mason love 1>><<glove>>
+	<<default>>
+		Mason marvels at your <<genitals 2>> for longer than <<he>> means to. As if it had a mind of its own, <<his>> hand raises.
+<</switch>>
+<<set C.npc.Mason.chastityRemoved += 1>>
+<br><br>
+
+/* Options */
+<<if C.npc.Mason.chastityRemoved gte 3>>
+	<<if $promiscuity lt 35>>
+		<span class="blue">You aren't promiscuous enough to take things any further.</span>
+	<<else>>
+		<<link [[Grab Mason's Hand|Mason Chastity Grab]]>><</link>><<handholdingvirginitywarning>><<NPCvirginitywarning "Mason" "handholding">>
+	<</if>>
+	<br>
+	<<if $location is "pool">> /* Exit to Pool */
+		<<link [[Do Nothing|Mason Chastity Escape]]>><<endevent>><</link>>
+	<<else>> /* Exit to Mason Pond */
+		<<mason_actions>>
+	<</if>>
+<<else>>
+	<<if $location is "pool">>
+		<<link [[Rejoin the Class|Swimming Lesson]]>><<endevent>><</link>>
+	<<else>>
+		<<mason_actions>>
+	<</if>>
+<</if>>
+
+<br>
+
+
+:: Mason Chastity Escape
+<<effects>>
+Upon realising what <<he>> is about to do, Mason pulls <<his>> hand back and closes <<his>> eyes while quickly turning away.
+"You're welcome, though you should try to be more careful. Winter has... unique interests."
+<<npcincr Mason lust 5>><<gglust>><<npcincr Mason love 1>><<glove>>
+<br><br>
+
+<<if $location is "pool">>
+	<<link [[Rejoin the Class|Swimming Lesson]]>><<endevent>><</link>>
+<<else>>
+	<<mason_actions>>
+<</if>>
+
+:: Mason Chastity Grab
+<<effects>>
+
+Before Mason loses <<his>> nerve, you catch <<his>> hand and pull it toward your <<genitals>>. <<takeHandholdingVirginity "Mason">>
+<br><br>
+
+<<if C.npc.Mason.love gte 20 or C.npc.Mason.lust gte 25>>
+	<<set _part to $player.penisExist and $player.vaginaExist ? ["penis","pussy"].random() : $player.penisExist ? "penis" : "pussy">>
+	<<He>> panics and attempts to pull <<his>> hand back, but your grip is too firm.
+	When <<his>> fingers touch your <<genitals 2>>, <<his>> struggling stops, but <<his>> hand is shaking.
+	You gently guide <<his>> trembling fingers to your _part. Mason's eyes go wide as <<he>>
+	<<if _part is "pussy">>probes your pussy.
+	<<else>>grasps your penis.<</if>>
+	With timid fingers, <<he>> slowly begins to
+	<<if _part is "pussy">>rub your pussy.
+	<<else>>stroke your penis.<</if>>
+	<<npcincr Mason lust 5>><<gglust>><<npcincr Mason love -2>><<llove>><<npcincr Mason dom -1>><<arousal 1800 _part>><<ggarousal>>
+	<br><br>
+
+	<<if $arousal gte $arousalmax>>
+		<<orgasm>>
+		You shudder as a wave of pleasure washes over you and you cum on Mason's hand.
+		<<He>> does not immediately remove <<his>> hand, though, and instead gives you a few more moments of pleasure before withdrawing.
+		<br><br>
+
+		Mason inspects <<his>> hand and catches your eye. <<He>> quickly turns away, "We shouldn't have done that."
+	<<else>>
+		Mason continues to
+		<<if _part is "pussy">>rub your pussy
+		<<else>>stroke your penis<</if>>
+		for a few moments before finally pulling <<his>> hand away. <<He>> catches your eye and quickly turns away, "We shouldn't have done that."
+	<</if>>
+<<else>>
+	<<He>> panics and pulls <<his>> hand from your grip. Mason scowls at you and opens <<his>> mouth to protest, but thinks better of it and turns away with a blush.<<npcincr Mason lust 1>><<glust>><<npcincr Mason love -1>><<llove>><<gdom>><<npcincr Mason dom 1>>
+<</if>>
+<br><br>
+
+<<if $location is "pool">>
+	<<link [[Rejoin the Class|Swimming Lesson]]>><<endevent>><</link>>
+<<else>>
+	<<mason_actions>>
+<</if>>
diff --git a/game/overworld-town/loc-school/changing-rooms.twee b/game/overworld-town/loc-school/changing-rooms.twee
index 2c27682b1540d15becacf9704f89c636e428d4fe..aaca3f2e91c3489936ffa31835942cb2ff471f1a 100755
--- a/game/overworld-town/loc-school/changing-rooms.twee
+++ b/game/overworld-town/loc-school/changing-rooms.twee
@@ -678,7 +678,7 @@ Mason struggles to remain silent as you pump <<his>> cock with your hand.
 <br><br>
 
 At that, Mason's body shudders, and <<his>> <<print $NPCList[0].penisdesc>> twitches in your palm. You aim <<his>> penis away from you and begin to stroke it much more quickly.
-<span class="lewd">Thick ropes of cum</span> erupt from the tip, splattering against the locker wall.<<lllust>><<npcincr Mason lust -10>>
+<span class="lewd">Thick ropes of cum</span> erupt from the tip, splattering against the locker wall.<<lllust>><<npcincr Mason lust -10>><<ldom>><<npcincr Mason dom -2>>
 <br><br>
 
 <<link [[Next|School Pool Locker Hand End]]>><</link>>
@@ -785,7 +785,7 @@ Mason struggles to remain silent as you slide your fingers into <<his>> slit.
 <</if>>
 <br><br>
 
-At that, Mason's body shudders, <span class="lewd">and lewd fluid runs over your finger.</span> A soft moan escapes <<his>> lips. You're reminded that <<hes>> not much older than you.<<lllust>><<npcincr Mason lust -10>>
+At that, Mason's body shudders, <span class="lewd">and lewd fluid runs over your finger.</span> A soft moan escapes <<his>> lips. You're reminded that <<hes>> not much older than you.<<lllust>><<npcincr Mason lust -10>><<ldom>><<npcincr Mason dom -2>>
 <br><br>
 
 <<link [[Next|School Pool Locker Hand End]]>><</link>>
diff --git a/game/overworld-town/loc-school/classes/swimming.twee b/game/overworld-town/loc-school/classes/swimming.twee
index d62944ae6278d2f05d8065e232afa1b46d06fbff..32352359745ed0b67506e92ac17ae5c7fb9e310b 100644
--- a/game/overworld-town/loc-school/classes/swimming.twee
+++ b/game/overworld-town/loc-school/classes/swimming.twee
@@ -1,6 +1,9 @@
 :: School Pool
 <<set $outside to 0>><<set $location to "pool">><<schooleffects>><<effects>>
 
+<<set _masonCanUnlock to playerChastity() and $worn.genitals.origin is "Winter" and C.npc.Mason.chastityKeyCarried and !$weekly.masonChastityRemovalDeclined and !$daily.masonChastityRemovalDeclined
+	and getVisibleClothesList().find(o => o === V.worn.genitals) and (C.npc.Mason.love gte 10 or C.npc.Mason.lust gte 15)>>
+
 <<if $poolroomstate is "own">>
 	<<if Time.minute gte 45>>
 		<<if $daily.school.attended.swimming>>
@@ -25,25 +28,26 @@
 		<<npc Mason>><<person1>>
 		<<if $daily.school.attended.swimming>>
 			You rejoin the swimming lesson.
-			<<if $rightarm is "bound" or $leftarm is "bound" or $feetuse is "bound">>
-				Mason instantly notices your bound <<if $rightarm is "bound" or $leftarm is "bound">>arms<</if>><<if ($rightarm is "bound" or $leftarm is "bound") and $feetuse is "bound">> and <</if>><<if $feetuse is "bound">>legs<</if>>. "It wouldn't be safe to let you swim like that."
-				<br>
-				<<He>> moves behind you and <span class="green">you feel your limbs fall free.</span><<unbind>>
+			<<schoolpoolmasoncheck>>
+			<<if _masonCanUnlock>>
+				<<include "Mason Chastity Prompt">>
+			<<else>>
+				<br><br>
+
+				<<link [[Next|Swimming Lesson]]>><<endevent>><</link>>
 			<</if>>
-			<br><br>
-			<<link [[Next|Swimming Lesson]]>><<endevent>><</link>>
 			<br>
 		<<elseif Time.minute lte 5>>
 			You enter the swimming pool room.
 			Mason stands by the pool, covering <<his>> body as <<he>> tries to encourage students to stretch while the rest of the class pours in.
-			<<if $rightarm is "bound" or $leftarm is "bound" or $feetuse is "bound">>
-				<<He>> notices your bound <<if $rightarm is "bound" or $leftarm is "bound">>arms<</if>><<if ($rightarm is "bound" or $leftarm is "bound") and $feetuse is "bound">> and <</if>><<if $feetuse is "bound">>legs<</if>>. "T-that's a little too much."
-				<br>
-				<<He>> moves behind you and <span class="green">you feel your limbs fall free.</span><<unbind>>
-			<</if>>
-			<br><br>
+			<<schoolpoolmasoncheck>>
+			<<if _masonCanUnlock>>
+				<<include "Mason Chastity Prompt">>
+			<<else>>
+				<br><br>
 
-			<<link [[Next|Swimming Lesson]]>><<endevent>><</link>>
+				<<link [[Next|Swimming Lesson]]>><<endevent>><</link>>
+			<</if>>
 			<br>
 
 		<<else>>
@@ -58,14 +62,15 @@
 				<<gdelinquency>><<detention 1>>
 			<</if>>
 			<br><br>
-			<<if $rightarm is "bound" or $leftarm is "bound" or $feetuse is "bound">>
-				Mason instantly notices your bound <<if $rightarm is "bound" or $leftarm is "bound">>arms<</if>><<if ($rightarm is "bound" or $leftarm is "bound") and $feetuse is "bound">> and <</if>><<if $feetuse is "bound">>legs<</if>>. "Wait! It wouldn't be safe to let you swim like that."
-				<br>
-				<<He>> moves behind you and <span class="green">you feel your limbs fall free.</span><<unbind>>
+			<<schoolpoolmasoncheck>>
+			<<if _masonCanUnlock>>
+				<<include "Mason Chastity Prompt">>
+			<<else>>
+				You climb into the water as Mason continues the lesson.
+				<br><br>
+
+				<<link [[Next|Swimming Lesson]]>><<endevent>><</link>>
 			<</if>>
-			You climb into the water as Mason continues the lesson.
-			<br><br>
-			<<link [[Next|Swimming Lesson]]>><<endevent>><</link>>
 			<br>
 		<</if>>
 	<<elseif $exposed gte 2 and $swimall isnot 1>>
@@ -78,18 +83,21 @@
 		<<npc Mason>><<person1>>
 		<<if $daily.school.attended.swimming>>
 			You rejoin the swimming lesson.
-			<<if $rightarm is "bound" or $leftarm is "bound" or $feetuse is "bound">>
-				Mason instantly notices your bound <<if $rightarm is "bound" or $leftarm is "bound">>arms<</if>><<if ($rightarm is "bound" or $leftarm is "bound") and $feetuse is "bound">> and <</if>><<if $feetuse is "bound">>legs<</if>>. "Well... obviously it wouldn't be safe to let you swim like that."
-				<br>
-				<<He>> moves behind you and <span class="green">you feel your limbs fall free.</span><<unbind>>
-			<</if>>
+			<<schoolpoolmasoncheck>>
 			<br>
+		<<else>>
+			You enter the swimming pool room.
+			Mason stands by the pool, encouraging students to stretch while waiting for the rest of the class.
 		<</if>>
-		You enter the swimming pool room.
-		Mason stands by the pool, encouraging students to stretch while waiting for the rest of the class.
+		
 		<<if $exposed gte 2>>
-			<br><br>
-			<<link [[Next|Swimming Lesson]]>><<endevent>><</link>>
+			<br>
+			<<if _masonCanUnlock>>
+				<<include "Mason Chastity Prompt">>
+			<<else>>
+				<br><br>
+				<<link [[Next|Swimming Lesson]]>><<endevent>><</link>>
+			<</if>>
 		<<else>>
 			<br><br>
 			<<He>> glares at you. "So, thanks to a certain someone, I'm not allowed to let you in the pool unless you're all nude."
@@ -102,27 +110,27 @@
 		<<npc Mason>><<person1>>
 		<<if $daily.school.attended.swimming>>
 			You rejoin the swimming lesson.
-			<<if $rightarm is "bound" or $leftarm is "bound" or $feetuse is "bound">>
-				Mason instantly notices your bound <<if $rightarm is "bound" or $leftarm is "bound">>arms<</if>><<if ($rightarm is "bound" or $leftarm is "bound") and $feetuse is "bound">> and <</if>><<if $feetuse is "bound">>legs<</if>>. "Well... obviously it wouldn't be safe to let you swim like that."
-				<br>
-				<<He>> moves behind you and <span class="green">you feel your limbs fall free.</span><<unbind>>
+			<<schoolpoolmasoncheck>>
+			<<if _masonCanUnlock>>
+				<<include "Mason Chastity Prompt">>
+			<<else>>
+				<br><br>
+
+				<<link [[Next|Swimming Lesson]]>><<endevent>><</link>>
 			<</if>>
-			<br><br>
-			<<link [[Next|Swimming Lesson]]>><<endevent>><</link>>
 			<br>
 		<<elseif Time.minute lte 5>>
 			You enter the swimming pool room.
 			Mason stands by the pool, encouraging students to stretch while waiting for the rest of the class.
-			<<if $rightarm is "bound" or $leftarm is "bound" or $feetuse is "bound">>
-				<<He>> instantly notices your bound <<if $rightarm is "bound" or $leftarm is "bound">>arms<</if>><<if ($rightarm is "bound" or $leftarm is "bound") and $feetuse is "bound">> and <</if>><<if $feetuse is "bound">>legs<</if>>. "I can't let you swim like that."
-				<br>
-				<<He>> moves behind you and <span class="green">you feel your limbs fall free.</span><<unbind>>
-			<</if>>
-			<br><br>
+			<<schoolpoolmasoncheck>>
+			<<if _masonCanUnlock>>
+				<<include "Mason Chastity Prompt">>
+			<<else>>
+				<br><br>
 
-			<<link [[Next|Swimming Lesson]]>><<endevent>><</link>>
+				<<link [[Next|Swimming Lesson]]>><<endevent>><</link>>
+			<</if>>
 			<br>
-
 		<<else>>
 			You enter the swimming pool room.
 
@@ -135,17 +143,16 @@
 				<<gdelinquency>><<detention 1>>
 			<</if>>
 			<br><br>
-			<<if $rightarm is "bound" or $leftarm is "bound" or $feetuse is "bound">>
-				Mason instantly notices your bound <<if $rightarm is "bound" or $leftarm is "bound">>arms<</if>><<if ($rightarm is "bound" or $leftarm is "bound") and $feetuse is "bound">> and <</if>><<if $feetuse is "bound">>legs<</if>>. "Wait! It wouldn't be safe to let you swim like that."
-				<br>
-				<<He>> moves behind you and <span class="green">you feel your limbs fall free.</span><<unbind>>
-			<</if>>
-			You climb into the water as Mason continues the lesson.
-			<br><br>
+			<<schoolpoolmasoncheck>>
+			<<if _masonCanUnlock>>
+				<<include "Mason Chastity Prompt">>
+			<<else>>
+				You climb into the water as Mason continues the lesson.
+				<br><br>
 
-			<<link [[Next|Swimming Lesson]]>><<endevent>><</link>>
+				<<link [[Next|Swimming Lesson]]>><<endevent>><</link>>
+			<</if>>
 			<br>
-
 		<</if>>
 	<<else>>
 		You enter the swimming pool room.
@@ -155,38 +162,42 @@
 		<<else>>
 			"You can't swim dressed like that!
 		<</if>>
-		Go get changed."
-		<br><br>
+		<<if _masonCanUnlock>>
+			<<include "Mason Chastity Prompt">>
+		<<else>>
+			Go get changed."
+			<br><br>
 
-		<<if $exhibitionism gte 75 and $swimall isnot 1>>
-			<<link [[Ask to swim naked|School Pool Ask Naked]]>><<fameexhibitionism 15>><<endevent>><<set $swimnudecounter += 1>><</link>><<exhibitionist5>>
-			<br>
-		<</if>>
-		<<if $player.gender is "f" or ($player.gender is "h" and $player.gender_appearance is "f")>>
-			<<if !$daily.swimCrossdressPermission>>
-				<<link [[Say you only have a boy's swimming costume|School Pool Wrong]]>><</link>>
+			<<if $exhibitionism gte 75 and $swimall isnot 1>>
+				<<link [[Ask to swim naked|School Pool Ask Naked]]>><<fameexhibitionism 15>><<endevent>><<set $swimnudecounter += 1>><</link>><<exhibitionist5>>
 				<br>
 			<</if>>
-			<<link [[Say you don't have anything to change into|School Pool Spare]]>><</link>>
-			<br>
-		<<else>>
-			<<if !$daily.swimCrossdressPermission>>
-				<<if ($worn.upper.type.includes("naked") and $worn.under_upper.type.includes("naked")) and
-				($worn.lower.type.includes("swim") or ($worn.lower.type.includes("naked") and $worn.under_lower.type.includes("swim")))>>
-					<<link [[Say you only have a boy's swimming costume|School Pool Wrong]]>><<set $phase to 1>><</link>>
-				<<else>>
-					<<link [[Say you only have a girl's swimming costume|School Pool Wrong]]>><</link>>
+			<<if $player.gender is "f" or ($player.gender is "h" and $player.gender_appearance is "f")>>
+				<<if !$daily.swimCrossdressPermission>>
+					<<link [[Say you only have a boy's swimming costume|School Pool Wrong]]>><</link>>
+					<br>
+				<</if>>
+				<<link [[Say you don't have anything to change into|School Pool Spare]]>><</link>>
+				<br>
+			<<else>>
+				<<if !$daily.swimCrossdressPermission>>
+					<<if ($worn.upper.type.includes("naked") and $worn.under_upper.type.includes("naked")) and
+					($worn.lower.type.includes("swim") or ($worn.lower.type.includes("naked") and $worn.under_lower.type.includes("swim")))>>
+						<<link [[Say you only have a boy's swimming costume|School Pool Wrong]]>><<set $phase to 1>><</link>>
+					<<else>>
+						<<link [[Say you only have a girl's swimming costume|School Pool Wrong]]>><</link>>
+					<</if>>
+					<br>
 				<</if>>
+				<<link [[Say you don't have anything to change into|School Pool Spare]]>><</link>>
 				<br>
 			<</if>>
-			<<link [[Say you don't have anything to change into|School Pool Spare]]>><</link>>
 			<br>
+			<<maleicon>><<link [[Boys' changing room|School Boy Changing Room]]>><<endevent>><</link>>
+			<br>
+			<<femaleicon>><<link [[Girls' changing room|School Girl Changing Room]]>><<endevent>><</link>>
+			<br><br>
 		<</if>>
-		<br>
-		<<maleicon>><<link [[Boys' changing room|School Boy Changing Room]]>><<endevent>><</link>>
-		<br>
-		<<femaleicon>><<link [[Girls' changing room|School Girl Changing Room]]>><<endevent>><</link>>
-		<br><br>
 	<</if>>
 
 <<elseif $poolroomstate is "other">>
@@ -238,6 +249,9 @@
 :: School Pool Ask Naked
 <<set $outside to 0>><<set $location to "pool">><<schoolpoolundress>><<schooleffects>><<effects>><<exposure>>
 
+<<set _masonCanUnlock to playerChastity() and $worn.genitals.origin is "Winter" and C.npc.Mason.chastityKeyCarried and !$weekly.masonChastityRemovalDeclined and !$daily.masonChastityRemovalDeclined
+	and getVisibleClothesList().find(o => o === V.worn.genitals) and (C.npc.Mason.love gte 10 or C.npc.Mason.lust gte 15)>>
+
 <<if $swimnudecounter lte 1>>
 	<<npc Mason>>
 
@@ -249,10 +263,10 @@
 		"Can I swim naked?" you ask.
 	<</if>>
 	<br><br>
-
+				
+	<<schoolpoolmasoncheck>>
 	<<person1>><<His>> blush deepens as the class breaks into excitement. "F-fine," <<he>> says. <<He>> turns and does <<his>>
 	best to quiet the other students.
-	<br><br>
 <<elseif $swimnudecounter lte 2>>
 	<<npc Mason>><<generatey2>>
 
@@ -270,7 +284,6 @@
 	<br><br>
 
 	<<person2>>"It's unfair if only <<pshe>> gets to swim naked," <<he>> says. Mason is too stunned to respond, and lets you both enter the pool.
-	<br><br>
 <<elseif $swimnudecounter lte 3>>
 	<<npc Mason>><<generatey2>><<generatey3>><<generatey4>>
 
@@ -289,7 +302,6 @@
 	<<else>>
 		"I'm not the only one who hates these swimsuits" you say.
 	<</if>>
-	<br><br>
 <<elseif $swimnudecounter lte 4>>
 	<<npc Mason>><<generatey2>><<generatey3>><<generatey4>>
 
@@ -299,35 +311,34 @@
 
 	A <<person2>><<person>> waves at you, <<his>> legs kicking in the water at the edge, while <<person1>> Mason tries <<his>>
 	best to distract the clothed students from the gaggle of nude swimmers.
-	<br><br>
 
 	<<if $cool gte 80>>
+		<br><br>
 		Several of them are doing stretches at the edge of the pool, and a <<person3>><<person>> spots you,
 		and points you out to a <<person4>><<person>>, who both wave at you.
-		<br><br>
 	<</if>>
-<<elseif $rng gte 51>>
-	<<npc Mason>><<generatey2>><<generatey3>>
-
-	<<person1>>Almost the entire class is now swimming naked. A few holdouts, including a <<person2>><<person>> and a <<person3>><<person>>,
-	struggle to avoid looking as Mason tries to teach.
-	<br><br>
 <<else>>
 	<<npc Mason>><<generatey2>><<generatey3>>
 
 	<<person1>>Almost the entire class is now swimming naked. A few holdouts, including a <<person2>><<person>> and a <<person3>><<person>>,
 	struggle to avoid looking as Mason tries to teach.
-	<br><br>
 <</if>>
+<br><br>
 
-<<person1>><<He>> does little to temper their excitement.
-<<if $exposed gte 2>>
-	<<flaunting>> you feel their eyes on you as you slip into the water.
+<<if _masonCanUnlock>>
+	<<include "Mason Chastity Prompt">>
 <<else>>
-	<<flaunting>> you feel their eyes on you as you <<nervously>> strip down to your <<lewdness>>, before slipping into the water. <<covered>>
-<</if>><<exhibitionism5>>
+	<<person1>><<He>> does little to temper their excitement.
+	<<if $exposed gte 2>>
+		<<flaunting>> you feel their eyes on you as you slip into the water.
+	<<else>>
+		<<flaunting>> you feel their eyes on you as you <<nervously>> strip down to your <<lewdness>>, before slipping into the water. <<covered>>
+	<</if>><<exhibitionism5>>
+	<br><br>
+
+	<<link [[Next|Swimming Lesson]]>><<endevent>><</link>>
+<</if>>
 
-<<link [[Next|Swimming Lesson]]>><<endevent>><</link>>
 
 :: Pool Leighton Nude Punishment
 <<set $outside to 0>><<set $location to "pool">><<schooleffects>><<effects>><<set $swimall to 1>><<underlowerstrip>><<underupperstrip>>
diff --git a/game/overworld-town/loc-school/widgets.twee b/game/overworld-town/loc-school/widgets.twee
index feeb308f261b9a8398aa15553dd38fd21fd415ff..c27f8cf035c9efc28e120e6ec5663dbe403cd0cc 100644
--- a/game/overworld-town/loc-school/widgets.twee
+++ b/game/overworld-town/loc-school/widgets.twee
@@ -2576,6 +2576,10 @@
 <<widget "schoolpoolexposed">>
 	<<if $schoolstate is "fifth" and $swimnudecounter gte 1>>
 		You step into the pool room. <<covered>>
+		<<schoolpoolmasoncheck>>
+		<<if _masonCanUnlock>>
+			<<include "Mason Chastity Prompt">>
+		<</if>>
 		<br><br>
 	<<else>>
 		<<npc Mason>><<generatey2>><<generatey3>>You take a deep breath, and walk into the pool room with your <<lewdness>> on display.
@@ -2605,10 +2609,34 @@
 		Mason refuses to look at you. <<Hes>> blushing. "Get back in the changing room. P-please."
 		<br><br>
 	<</if>>
-	<<maleicon>><<link [[Boy's changing room|School Boy Changing Room]]>><<endevent>><</link>>
-	<br>
-	<<femaleicon>><<link [[Girl's changing room|School Girl Changing Room]]>><<endevent>><</link>>
-	<br>
+	<<if !_masonCanUnlock or $schoolstate isnot "fifth">>
+		<<maleicon>><<link [[Boy's changing room|School Boy Changing Room]]>><<endevent>><</link>>
+		<br>
+		<<femaleicon>><<link [[Girl's changing room|School Girl Changing Room]]>><<endevent>><</link>>
+		<br>
+	<</if>>
+<</widget>>
+
+<<widget "schoolpoolmasoncheck">>
+	<<set _anyBound to $rightarm is "bound" or $leftarm is "bound" or $feetuse is "bound">>
+	<<if _anyBound>>
+		Mason instantly notices your bound <<boundBodyParts>>. 
+		<<print [
+			`"It wouldn't be safe to let you swim like that."`,
+			`"T-that's a little too much."`,
+			`"Well... obviously it wouldn't be safe to let you swim like that."`,
+			`"I can't let you swim like that."`
+		].random()>>
+		<br><br>
+		<<He>> moves behind you and <span class="green">you feel your limbs fall free.</span><<unbind>>
+	<</if>>
+	<<if !C.npc.Mason.chastityKeyCarried and playerChastity() and $worn.genitals.origin is "Winter" and (C.npc.Mason.love gte 5 or C.npc.Mason.lust gte 10)
+		and getVisibleClothesList().find(o => o === V.worn.genitals)>>
+		<<if _anyBound>><<He>>
+		<<else>>Mason<</if>> cannot help but notice and stare at the $worn.genitals.name.
+		<<He>> stares hard enough that it briefly becomes uncomfortable before <<he>> catches <<himself>> and turns away with a blush.
+		<<set C.npc.Mason.chastityKeyCarried to 1>><<set $daily.masonChastityRemovalDeclined to 1>>
+	<</if>>
 <</widget>>
 
 :: Lesson Effects Widget [widget]
diff --git a/t3lt.twee-config.yml b/t3lt.twee-config.yml
index 43c5d3a4fcfd7d79795fe94887ef4f40127ee5a2..d2c7c2d9990ecaa27e848ee5f0d8a8dbde1872ec 100644
--- a/t3lt.twee-config.yml
+++ b/t3lt.twee-config.yml
@@ -6364,6 +6364,17 @@ sugarcube-2:
       name: schoolChangingRoomLinks
     schoolPoolSwap:
       name: schoolPoolSwap
+    schoolpoolmasoncheck:
+      name: schoolpoolmasoncheck
+      description: |-
+        Check for bindings and have Mason remove them immediately.
+        Also has Mason make a mental note to bring chastity key from now on.
+        Outputs text.
+
+        Usage:
+        ```
+        <<schoolpoolmasoncheck>>
+        ```
     schoolShop-main:
       name: schoolShop-main
     schoolVendingMachine: