diff --git a/game/base-clothing/clothing-sets.twee b/game/base-clothing/clothing-sets.twee
index 77564a6d35ef98b2279365e8870ff9bfa1b78e01..dd7c89e432b7f8cc7017c68caf39ef1163b5f022 100644
--- a/game/base-clothing/clothing-sets.twee
+++ b/game/base-clothing/clothing-sets.twee
@@ -521,6 +521,10 @@
 		<</if>>
 	<</if>>
 
+	<<if $worn.under_lower.type.includes("naked")>>
+		<<set $worn.under_lower.exposedType to "notWorn">>
+	<</if>>
+
 	<<if $wear_outfit isnot "none" and _notEquipped>>
 		<<if Object.values(_notEquipped).length gt 0>>
 			<<set _resultStrings to {}>>
diff --git a/game/base-clothing/school-shop.twee b/game/base-clothing/school-shop.twee
index 07a44002a35a017d3374ccc3c799db65c5d319d7..09c48b252c8e3e521e8554e77a4c465713a0c34d 100644
--- a/game/base-clothing/school-shop.twee
+++ b/game/base-clothing/school-shop.twee
@@ -114,7 +114,7 @@
 			<</link>>
 			<br>
 		<<elseif $tryOn.value is 0>>
-			<<getouticon>><<link [[Leave|Library Rental Counter]]>><<shopClothingFilterReset>><<ShowUnderEquip "normal">><<endnpc>><<unset $clothes_choice>><<set $tryOn.autoReset to true>><<set $eventskip to 1>><<unset $tempDisable>><<endevent>><</link>>
+			<<getouticon>><<link [[Leave|Library Rental Counter]]>><<shopClothingFilterReset>><<ShowUnderEquip "normal">><<endnpc>><<unset $clothes_choice>><<set $tryOn.autoReset to true>><<set $eventskip to 1>><<unset $tempDisable>><<shopCommandoCheck>><<endevent>><</link>>
 			<br><br>
 		<</if>>
 	<</if>>
diff --git a/game/base-clothing/shop.twee b/game/base-clothing/shop.twee
index 354735dadd4255874dc54686d9da8cb24c22e8f8..42df85fc547a7eb12954f125d0ad7ed9d403920f 100644
--- a/game/base-clothing/shop.twee
+++ b/game/base-clothing/shop.twee
@@ -59,7 +59,7 @@
 
 <<widget "forestShop-leave">>
 	<<shopClothingFilterReset>><<unset $clothes_choice>><<ShowUnderEquip "normal">><<ShowUnderEquip "over">>
-	<<set $tryOn.autoReset to true>><<set $eventskip to 1>><<unset $tempDisable>>
+	<<set $tryOn.autoReset to true>><<set $eventskip to 1>><<unset $tempDisable>><<shopCommandoCheck>>
 <</widget>>
 
 <<widget "forestShop-main">>
diff --git a/game/base-clothing/wardrobes.twee b/game/base-clothing/wardrobes.twee
index 9149ceefa6f30beb343c33296d7588813403f4ef..c4a1ffb6e47d7710838a12ae472b549515c8009c 100644
--- a/game/base-clothing/wardrobes.twee
+++ b/game/base-clothing/wardrobes.twee
@@ -261,6 +261,9 @@
 			<<set _selectedWardrobe[_slot].deleteAt(_wearId)>>
 		<</if>>
 	<</for>>
+	<<if $worn.under_lower.type.includes("naked")>>
+		<<set $worn.under_lower.exposedType to "notWorn">>
+	<</if>>
 	<<if $wardrobeOption is "wear" and $_itemNames.length gte 1>>
 		You put on the <<print formatList($_itemNames)>>.
 	<</if>>
diff --git a/game/base-clothing/widgets.twee b/game/base-clothing/widgets.twee
index b36ae922466e2baca6f45c26999ae6f85c4d8107..5b6d6aab78d20328673e97e44fdb2997403ff78c 100644
--- a/game/base-clothing/widgets.twee
+++ b/game/base-clothing/widgets.twee
@@ -700,12 +700,28 @@
 
 <<widget "underupperruined">>
 	<<set _noRebuy to _args[0]>>
+	<<if $worn.under_lower.type.includes("naked")>>
+		<<set $_exposedType to $worn.under_lower.exposedType>>
+	<</if>>
 	<<generalRuined "under_upper">>
+	<<if $_exposedType and $worn.under_lower.type.includes("naked")>>
+		<<set $worn.under_lower.exposedType to $_exposedType>>
+	<</if>>
 <</widget>>
 
 <<widget "underlowerruined">>
 	<<set _noRebuy to _args[0]>>
+	<<if $worn.under_lower.type.includes("naked")>>
+		<<set $_exposedType to $worn.under_lower.exposedType>>
+	<</if>>
 	<<generalRuined "under_lower">>
+	<<if _args[1] and $worn.under_lower.type.includes("naked")>>
+		<<set $worn.under_lower.exposedType to _args[1]>>
+	<<elseif $_exposedType and $worn.under_lower.type.includes("naked")>>
+		<<set $worn.under_lower.exposedType to $_exposedType>>
+	<<elseif !$_exposedType>>
+		<<set $worn.under_lower.exposedType to "ruined">>
+	<</if>>
 <</widget>>
 
 <<widget "genitalsruined">>
@@ -950,11 +966,27 @@
 <</widget>>
 
 <<widget "underuppersteal">>
+	<<if $worn.under_lower.type.includes("naked")>>
+		<<set $_exposedType to $worn.under_lower.exposedType>>
+	<</if>>
 	<<generalSteal "under_upper" _args[0]>>
+	<<if $_exposedType and $worn.under_lower.type.includes("naked")>>
+		<<set $worn.under_lower.exposedType to $_exposedType>>
+	<</if>>
 <</widget>>
 
 <<widget "underlowersteal">>
+	<<if $worn.under_lower.type.includes("naked")>>
+		<<set $_exposedType to $worn.under_lower.exposedType>>
+	<</if>>
 	<<generalSteal "under_lower" _args[0]>>
+	<<if _args[1] and $worn.under_lower.type.includes("naked")>>
+		<<set $worn.under_lower.exposedType to _args[1]>>
+	<<elseif $_exposedType and $worn.under_lower.type.includes("naked")>>
+		<<set $worn.under_lower.exposedType to $_exposedType>>
+	<<else>>
+		<<set $worn.under_lower.exposedType to "stolen">>
+	<</if>>
 <</widget>>
 
 <<widget "overheadsteal">>
@@ -1012,6 +1044,9 @@
 		<</if>>
 		<<generalUndress $_location $_slot>>
 	<</for>>
+	<<if $worn.under_lower.type.includes("naked")>>
+		<<set $worn.under_lower.exposedType to "notWorn">>
+	<</if>>
 <</widget>>
 
 <<widget "undressOverClothes">>
diff --git a/game/base-combat/beast-generation.twee b/game/base-combat/beast-generation.twee
index bd9361079e549b59080c9ae10cf0974bc43fae03..01a9f479431cc829f30a214a7b84a9f86667dd1f 100644
--- a/game/base-combat/beast-generation.twee
+++ b/game/base-combat/beast-generation.twee
@@ -57,7 +57,7 @@
 <<widget "beastattribute">>
 	<!-- NEW Set Beast attributes. $arg[0] calls NPC number to be generated, arg[1] sets beast type -->
 
-	<!-- <<nounderwearcheck>> see widget for disabled reason -->
+	<<nounderwearcheck>>
 
 	<<set _n to _args[0]>>
 	<<set _type to _args[1]>>
diff --git a/game/base-combat/npc-generation.twee b/game/base-combat/npc-generation.twee
index 3bafabae8e6ee97ec1921d2c263c5565b0ebebde..e5b1e97ca02d979fd9b5720bc641337dbc75003b 100644
--- a/game/base-combat/npc-generation.twee
+++ b/game/base-combat/npc-generation.twee
@@ -659,7 +659,7 @@
 	<!-- Added sex toy functionality 0.3.8.0 -->
 
 	<!-- check if this npc has seen the player while the player was pantiless; doesn't matter if they knew it or not. -->
-	<!-- <<nounderwearcheck>> see widget for disabled reason -->
+	<<nounderwearcheck>>
 
 	<<set _n to _args[0]>>
 	<<set _gender to _args[1]>>
diff --git a/game/base-system/effects.twee b/game/base-system/effects.twee
index 166e066345c4fa56745ec08dc95323f79cf410cf..d120617e803ac879ec614910f4d67f4458d70027 100644
--- a/game/base-system/effects.twee
+++ b/game/base-system/effects.twee
@@ -579,6 +579,7 @@
 		<<if $exhibitionism_message is 1>>
 			<<set $exhibitionism_message to 0>>
 			<span class="lblue">You've spent time in public with no underwear on. You wonder if people can tell, and shiver at the thought.</span>
+			<<exhibitionism1>>
 		<</if>>
 		<<if $rebuy_success.length gt 0>>
 			<<set _rebuyMessage to {}>>
diff --git a/game/base-system/widgets.twee b/game/base-system/widgets.twee
index 28a10116c297fa371df1fab4f804550482caec53..dcf600b5f5e5bf9e177f1140d0b856b3d3a8ffe7 100644
--- a/game/base-system/widgets.twee
+++ b/game/base-system/widgets.twee
@@ -3826,18 +3826,18 @@
 <<widget "nounderwearcheck">>
 	/*Checks if the PC is pantiless, but otherwise decent. Results in low level exhibitionism increases.*/
 	/*
-		Feature was disabled previous but left the text as is, just disabling the text rather than removing it
+		Feature was disabled previously, has been re-enabled after meeting the below requirement
 		Vrelnir: Exhibitionism should only rise when the player directly choses certain actions. The PC could have their underwear stolen, which would result in exhibitionism rising without a direct decision to do so.
-		Left in incase a valid use of the feature can be correctly implemented that meets the above requirement
 	*/
-	/*<<if !$worn.lower.type.includes("naked") and $worn.under_lower.type.includes("naked") and $exposed lte 0 and $exhibitionism lt 19>>
+	<<if (!$worn.over_lower.type.includes("naked") or !$worn.lower.type.includes("naked")) and $worn.under_lower.type.includes("naked") and ["notWorn", "notBought", "sold", "given"].includes($worn.under_lower.exposedType) and $exposed lte 0 and $exhibitionism lt 19 and !$daily.no_underwear>>
 		<<set $no_underwear += 1>>
 	<</if>>
-	<<if $no_underwear gte 8>>
+	<<if $no_underwear gte 20>>
+		<<set $daily.no_underwear to true>>
 		<<set $no_underwear to 0>>
 		<<set $effectsmessage to 1>>
 		<<set $exhibitionism_message to 1>>
-	<</if>>*/
+	<</if>>
 <</widget>>
 
 <<widget "breastfed">>
diff --git a/game/overworld-plains/loc-bird/main.twee b/game/overworld-plains/loc-bird/main.twee
index 940fcf1b27df90fc1239759d18b4c9f9b3811905..33d799940eb719ac2e48e243bf68c9a58c8816a7 100644
--- a/game/overworld-plains/loc-bird/main.twee
+++ b/game/overworld-plains/loc-bird/main.twee
@@ -630,7 +630,7 @@ You have <<number $bird.fabric>> spare material<<if $bird.fabric gt 1>>s<</if>>.
 		<br>
 	<</if>>
 	<<if $worn.under_lower.name isnot "naked" and $worn.under_lower.cursed isnot 1>>
-		Tear up your <<link [[$worn.under_lower.name|Bird Tower Rope Clothes]]>><<set $bird.fabric += 1>><<underlowerruined>><</link>>
+		Tear up your <<link [[$worn.under_lower.name|Bird Tower Rope Clothes]]>><<set $bird.fabric += 1>><<underlowerruined undefined "commando">><</link>>
 		<br>
 	<</if>>
 	<<if $worn.over_upper.name isnot "naked" and $worn.over_upper.cursed isnot 1>>
diff --git a/game/overworld-plains/loc-moor/main.twee b/game/overworld-plains/loc-moor/main.twee
index 7eb810033e054235d2eda6116b463debe3d771cb..c2ac3f753742a11ecfc06f3b1919b89d4f34995e 100644
--- a/game/overworld-plains/loc-moor/main.twee
+++ b/game/overworld-plains/loc-moor/main.twee
@@ -737,13 +737,13 @@ The <<person>> sighs. "Fine." <<He>> chucks it onto the earth beside you. You cr
 		<<exhibitionism5>>
 		Eager, <<he>> clambers down the rocks, and snatches your $worn.under_upper.name from your hand. <<He>> drops the black box to the ground as <<he>> climbs back up, as if forgetting about it.
 		<br><br>
-		<<underupperruined>><<underlowerruined>>
+		<<underupperruined>><<underlowerruined undefined "given">>
 	<<else>>
 		You pull your $worn.under_lower.name down your thighs, over your knees, and then your ankles. You step out of the fabric, lift it, and hold it towards the <<person>>.
 		<<exhibitionism5>>
 		Eager, <<he>> clambers down the rocks, and snatches your $worn.under_lower.name from your hand. <<He>> drops the black box to the ground as <<he>> climbs back up, as if forgetting about it.
 		<br><br>
-		<<underlowerruined>>
+		<<underlowerruined undefined "given">>
 	<</if>>
 <<elseif setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt is 1>>
 	<<if $worn.under_upper.set is $worn.under_lower.set>>
@@ -758,14 +758,14 @@ The <<person>> sighs. "Fine." <<He>> chucks it onto the earth beside you. You cr
 			<</if>>
 			Eager, <<he>> clambers down the rocks, and snatches your $worn.under_upper.name from your hand. <<He>> drops the black box to the ground as <<he>> climbs back up, as if forgetting about it.
 			<br><br>
-			<<underupperruined>><<underlowerruined>>
+			<<underupperruined>><<underlowerruined undefined "given">>
 		<<else>>
 			You tug your $worn.under_upper.name down your chest, until it bunches at your waist. You hitch up your skirt, and begin pulling it the rest of the way, down your thighs, over your knees, and then your ankles. You step out of the fabric before holding it towards the <<person>>
 			<<exhibitionism1>>
 
 			Eager, <<he>> clambers down the rocks, and snatches your $worn.under_upper.name from your hand. <<He>> drops the black box to the ground as <<he>> climbs back up, as if forgetting about it.
 			<br><br>
-			<<underupperruined>><<underlowerruined>>
+			<<underupperruined>><<underlowerruined undefined "given">>
 		<</if>>
 	<<else>>
 		You hitch up the sides of your skirt, and pull your $worn.under_lower.name down your thighs, over your knees, and down to your ankles. The <<person>> watches intently.
@@ -773,7 +773,7 @@ The <<person>> sighs. "Fine." <<He>> chucks it onto the earth beside you. You cr
 
 		You step out of them, lift them from the ground, and hold them towards the <<person>>. Eager, <<he>> clambers down the rocks, and snatches your $worn.under_lower.name from your hand. <<He>> drops the black box to the ground as <<he>> climbs back up, as if forgetting about it.
 		<br><br>
-		<<underlowerruined>>
+		<<underlowerruined undefined "given">>
 	<</if>>
 <<else>>
 	<<if $worn.under_upper.set is $worn.under_lower.set>>
@@ -786,7 +786,7 @@ The <<person>> sighs. "Fine." <<He>> chucks it onto the earth beside you. You cr
 
 			You hold the fabric towards the <<person>>. Eager, <<he>> clambers down the rocks, and snatches your $worn.under_upper.name from your hand. <<He>> drops the black box to the ground as <<he>> climbs back up, as if forgetting about it.
 			<br><br>
-			<<underupperruined>><<underlowerruined>>
+			<<underupperruined>><<underlowerruined undefined "given">>
 		<<else>>
 			You'll need to remove your $worn.lower.name first. "Turn around," you say. The <<person>> obliges, facing away and resting <<his>> hands on <<his>> hips.
 			<br><br>
@@ -796,7 +796,7 @@ The <<person>> sighs. "Fine." <<He>> chucks it onto the earth beside you. You cr
 
 			You hold the fabric towards the <<person>>. Eager, <<he>> clambers down the rocks, and snatches your $worn.under_upper.name from your hand. <<He>> drops the black box to the ground as <<he>> climbs back up, as if forgetting about it.
 			<br><br>
-			<<underupperruined>><<underlowerruined>>
+			<<underupperruined>><<underlowerruined undefined "given">>
 
 		<</if>>
 	<<else>>
@@ -809,7 +809,7 @@ The <<person>> sighs. "Fine." <<He>> chucks it onto the earth beside you. You cr
 
 			You hold the fabric towards the <<person>>. Eager, <<he>> clambers down the rocks, and snatches your $worn.under_lower.name from your hand. <<He>> drops the black box to the ground as <<he>> climbs back up, as if forgetting about it.
 			<br><br>
-			<<underlowerruined>>
+			<<underlowerruined undefined "given">>
 		<<else>>
 			You'll need to remove your $worn.lower.name first. "Turn around," you say. The <<person>> obliges, facing away and resting <<his>> hands on <<his>> hips.
 			<br><br>
@@ -819,7 +819,7 @@ The <<person>> sighs. "Fine." <<He>> chucks it onto the earth beside you. You cr
 
 			You hold the fabric towards the <<person>>. Eager, <<he>> clambers down the rocks, and snatches your $worn.under_lower.name from your hand. <<He>> drops the black box to the ground as <<he>> climbs back up, as if forgetting about it.
 			<br><br>
-			<<underlowerruined>>
+			<<underlowerruined undefined "given">>
 		<</if>>
 	<</if>>
 <</if>>
diff --git a/game/overworld-town/loc-adultshop/shop.twee b/game/overworld-town/loc-adultshop/shop.twee
index 807eb6467ae02e562d8678ecac8e202ae6146552..b69e72b7b49c0ae85a26cd0e365d049d0622b12b 100644
--- a/game/overworld-town/loc-adultshop/shop.twee
+++ b/game/overworld-town/loc-adultshop/shop.twee
@@ -119,6 +119,7 @@
 						<<set $tryOn.autoReset to true>>
 						<<crimeUp `$tryOn.value / 100` "thievery">>
 						<<set $adultshopstate to "closed">>
+						<<shopCommandoCheck>>
 					<</link>>
 				<<else>>
 					<<elkicon>><<link [[Leave|Adult Shop]]>>
@@ -128,6 +129,7 @@
 						<<set $tryOn.autoReset to true>>
 						<<crimeUp `$tryOn.value / 100` "thievery">>
 						<<set $adultshopstate to "closed">>
+						<<shopCommandoCheck>>
 					<</link>>
 				<</if>>
 				<<if $tryOn.value gt 0>>
@@ -162,7 +164,7 @@
 					<</link>>
 					<br>
 				<</if>>
-				<<elkicon>><<link [[Leave with stolen clothes|Stolen Adult Shop Result]]>><<shopClothingFilterReset>><</link>>
+				<<elkicon>><<link [[Leave with stolen clothes|Stolen Adult Shop Result]]>><<shopClothingFilterReset>><<shopCommandoCheck>><</link>>
 				<br>
 			<</if>>
 		<</if>>
diff --git a/game/overworld-town/loc-school/inspections.twee b/game/overworld-town/loc-school/inspections.twee
index f1bd84cf6a57ea4110701605b3291cc803aa0659..87e8e2937f4ea90057f39d8e8d564c2a7fa5622d 100644
--- a/game/overworld-town/loc-school/inspections.twee
+++ b/game/overworld-town/loc-school/inspections.twee
@@ -1244,7 +1244,7 @@ aren't speaking much, and shift their legs uncomfortably.
 		You cock your head. "I'm not wearing panties," you say, trying to sound apologetic.
 		You lean back and spread your legs, giving the whole class a look.
 	<<else>>
-		You lift your skirt and pull down your $worn.under_lower.name, then hand <<if $worn.under_lower.plural>>them<<else>>it<</if>> to Leighton.<<underlowerruined>>
+		You lift your skirt and pull down your $worn.under_lower.name, then hand <<if $worn.under_lower.plural>>them<<else>>it<</if>> to Leighton.<<underlowerruined undefined "given">>
 		Wasting no time, you climb atop the desk and pull your $worn.lower.name off your legs, placing <<if $worn.lower.plural>>them<<else>>it<</if>> to one side.
 		<<if $worn.lower.plural>>They<<else>>It<</if>> would only get in the way.
 		You lean back and spread your legs, giving the whole class a look.
@@ -1257,7 +1257,7 @@ aren't speaking much, and shift their legs uncomfortably.
 	<<else>>
 		Wasting no time, you climb atop the desk and pull off your $worn.lower.name, placing <<if $worn.lower.plural>>them<<else>>it<</if>> to one side.
 		Your $worn.under_lower.name <<if $worn.under_lower.plural>>come<<else>>comes<</if>> next.
-		You slip <<if $worn.under_lower.plural>>them<<else>>it<</if>> off, and hand <<if $worn.under_lower.plural>>them<<else>>it<</if>> to Leighton.<<underlowerruined>>
+		You slip <<if $worn.under_lower.plural>>them<<else>>it<</if>> off, and hand <<if $worn.under_lower.plural>>them<<else>>it<</if>> to Leighton.<<underlowerruined undefined "given">>
 		You lean back and spread your legs, giving the whole class a look.
 	<</if>>
 <</if>>
@@ -1315,9 +1315,9 @@ The class erupts into whispering when they see your <<penis>>.
 	<</if>>
 <<else>>
 	<<if setup.clothes.lower[clothesIndex('lower', $worn.lower)].skirt is 1>>
-		You lift your skirt and pull down your $worn.under_lower.name, then hand them to Leighton.<<underlowerruined>> You climb atop the desk and lift your skirt just above your <<genitals>>.
+		You lift your skirt and pull down your $worn.under_lower.name, then hand them to Leighton.<<underlowerruined undefined "given">> You climb atop the desk and lift your skirt just above your <<genitals>>.
 	<<else>>
-		You climb atop the desk and pull down your $worn.lower.name. Your $worn.under_lower.name come next. You slip them off your legs, and hand them to Leighton.<<underlowerruined>>
+		You climb atop the desk and pull down your $worn.lower.name. Your $worn.under_lower.name come next. You slip them off your legs, and hand them to Leighton.<<underlowerruined undefined "given">>
 	<</if>>
 <</if>>
 
@@ -1418,7 +1418,7 @@ You look away as Leighton takes a picture.
 
 Wasting no time, you climb atop the desk and pull your $worn.lower.name off your legs, placing it to one side. It would only get in the way.
 <<if !$worn.under_lower.type.includes("naked")>>
-	Your $worn.under_lower.name come next. You slip them off, and hand them to Leighton.<<underlowerruined>>
+	Your $worn.under_lower.name come next. You slip them off, and hand them to Leighton.<<underlowerruined undefined "given">>
 <</if>>
 You lean back and spread your legs, giving the whole class a look. <<exhibitionism4>>
 
diff --git a/game/overworld-town/loc-school/widgets-events.twee b/game/overworld-town/loc-school/widgets-events.twee
index 9909ee83f8b1b7b71f7898d779368c28a2725096..67252d58ef5fbd00bed73a5459dba884d779b089 100644
--- a/game/overworld-town/loc-school/widgets-events.twee
+++ b/game/overworld-town/loc-school/widgets-events.twee
@@ -2614,7 +2614,7 @@
 			<<link [[Next|Hallways]]>><<endevent>><<set $eventskip to 1>><<set $whitneypantiescheck to 1>><</link>>
 			<br>
 		<<else>>
-			<<link [[Let it happen|Bully Panties]]>><<trauma 6>><<stress 3>><<sub 1>><<npcincr Whitney dom 1>><</link>><<gtrauma>><<gstress>><<garousal>><<gdom>>
+			<<link [[Let it happen|Bully Panties]]>><<trauma 6>><<stress 3>><<sub 1>><<npcincr Whitney dom 1>><<set $whitneyWilling to true>><</link>><<gtrauma>><<gstress>><<garousal>><<gdom>>
 			<br>
 			<<link [[Fight|Bully Fight]]>><<set $fightstart to 1>><<def 1>><<npcincr Whitney dom -1>><</link>><<ldom>>
 			<br>
diff --git a/game/overworld-town/loc-shop/clothing-v2.twee b/game/overworld-town/loc-shop/clothing-v2.twee
index 46684f32fa1fc118b9a490a4501379cd68c7edd6..5c0aa01ecaa8d577e104f5e6a69e55c923b3b605 100644
--- a/game/overworld-town/loc-shop/clothing-v2.twee
+++ b/game/overworld-town/loc-shop/clothing-v2.twee
@@ -1764,3 +1764,14 @@
 		<<wardrobeSend "head" $tryOn.ownedStored.head>>
 	<</if>>
 <</widget>>
+
+<<widget "shopCommandoCheck">>
+	<<if $earSlime.forcedCommando isnot undefined or ($worn.under_lower.type.includes("naked") and setup.clothes.under_lower.find(item => {
+		if (!item.shop.includes($shopName) or $money lt getClothingCost(item, "under_lower")) return false;
+		if (playerBellySize() >= 12 and item.type.includes("constricting")) return false;
+		if (V.earSlime.forcedDressing and V.earSlime.forcedDressing.days gt 0 and item.gender isnot V.earSlime.forcedDressing.type and item.gender isnot "n" and !item.type.includesAny("event")) return false;		
+		return true;
+	}))>>
+		<<set $worn.under_lower.exposedType to "notBought">>
+	<</if>>
+<</widget>>
diff --git a/game/overworld-town/loc-shop/clothing.twee b/game/overworld-town/loc-shop/clothing.twee
index 19771d34c66fd128aeb3e7f4375d93d1a4db5dca..5a0b0c8b964a3a8be09bfc7604c25a2fc57428fd 100644
--- a/game/overworld-town/loc-shop/clothing.twee
+++ b/game/overworld-town/loc-shop/clothing.twee
@@ -120,6 +120,7 @@
 						<<set $tryOn.autoReset to true>>
 						<<crimeUp `$tryOn.value / 100` "thievery">>
 						<<shopHoodCheck>>
+						<<shopCommandoCheck>>
 					<</link>>
 				<<else>>
 					<<getouticon>>
@@ -130,6 +131,7 @@
 						<<set $tryOn.autoReset to true>>
 						<<crimeUp `$tryOn.value / 100` "thievery">>
 						<<shopHoodCheck>>
+						<<shopCommandoCheck>>
 					<</link>>
 				<</if>>
 				<<if $tryOn.value gt 0>>
@@ -164,7 +166,7 @@
 					<</link>>
 					<br>
 				<</if>>
-				<<getouticon>><<link [[Leave with stolen clothes|Stolen Clothing Shop Result]]>><<shopClothingFilterReset>><<shopHoodCheck>><</link>><<crime "thievery">>
+				<<getouticon>><<link [[Leave with stolen clothes|Stolen Clothing Shop Result]]>><<shopClothingFilterReset>><<shopHoodCheck>><<shopCommandoCheck>><</link>><<crime "thievery">>
 				<br>
 			<</if>>
 		<</if>>
diff --git a/game/overworld-town/loc-street/events.twee b/game/overworld-town/loc-street/events.twee
index fa5f04b63ba66c71c7db6da9c71c6409740f18e1..1920672f8778db902e0857867420ae361c718aac 100644
--- a/game/overworld-town/loc-street/events.twee
+++ b/game/overworld-town/loc-street/events.twee
@@ -2140,7 +2140,7 @@ Your cries attract the attention of the people passing by the alley's entrance.
 	<</if>>
 	You hand <<him>> the garment, which <<he>> takes with trembling hands. "It's still warm," <<he>> says, holding it against <<his>> face.
 	<<if $rng lte 50 and Time.dayState is "night">>
-		<<underlowerruined>>
+		<<underlowerruined undefined "sold">>
 		<<He>> is about to hand you the money, when <<he>> hesitates. <<He>> goes back into <<his>> <<if $pronoun is "m">>wallet<<else>>purse<</if>> and pulls out more notes.
 		<br><br>
 		"£270 for the rest," <<he>> says. "For all your clothes. That's £300 for everything."
@@ -2167,7 +2167,7 @@ Your cries attract the attention of the people passing by the alley's entrance.
 		<</if>>
 		hands you the money and departs.
 		<<exhibitionism3>>
-		<<underlowerruined>>
+		<<underlowerruined undefined "sold">>
 		<<set $money += 3000>><<fameexhibitionism 1>>
 		<<endevent>>
 		<<destinationeventend>>
diff --git a/game/overworld-town/special-whitney/main.twee b/game/overworld-town/special-whitney/main.twee
index 7af543ea72dd599cac3e3bab91c18accc8919732..78235b22bf199862b91a370147cc071aac133e9d 100644
--- a/game/overworld-town/special-whitney/main.twee
+++ b/game/overworld-town/special-whitney/main.twee
@@ -2927,7 +2927,11 @@ You hand Whitney the money. "Nice doing business," <<he>> says. <<He>> barges pa
 		<</if>>
 		<br><br>
 		<<set $stealtextskip to 1>>
-		<<underlowersteal strip>>
+		<<if $whitneyWilling>>
+
+		<<else>>
+			<<underlowersteal strip `$whitneyWilling ? "given" : undefined`>>
+		<</if>>
 		<<link [[Agree to wear panties|Bully Panties 2]]>><<set $whitneypantiescheck to 2>><<set $phase to 0>><</link>> <i><small class="red">This may give Whitney other ideas</small></i>
 		<br>
 		<<link [[Refuse|Bully Panties 2]]>><<set $phase to 1>><<npcincr Whitney dom -1>><</link>><<ldom>>
@@ -2935,9 +2939,10 @@ You hand Whitney the money. "Nice doing business," <<he>> says. <<He>> barges pa
 		Whitney tears off your $worn.under_lower.name and pockets <<print $worn.under_lower.plural ? "them" : "it">>. "I'll be keeping an eye out, slut."
 		<br><br>
 		<<set $stealtextskip to 1>>
-		<<underlowersteal strip>>
+		<<underlowersteal strip `$whitneyWilling ? "given" : undefined`>>
 		<<link [[Next|Hallways]]>><<endevent>><<set $eventskip to 1>><</link>>
 	<</if>>
+	<<unset $whitneyWilling>>
 <<else>>
 	Whitney and <<his>> friends tear your clothes off, then shove you to the ground. <<tearful>> you pick yourself back up.
 	<br><br>