diff --git a/game/base-combat/doggy-images.twee b/game/base-combat/doggy-images.twee
index 12f36286428d09bec07bf7243ee84276248b07e3..15c7c5636c973b39485387da9b6e757a6751935d 100644
--- a/game/base-combat/doggy-images.twee
+++ b/game/base-combat/doggy-images.twee
@@ -532,18 +532,23 @@
 			<<if ["mohawk", "wide flaps"].includes($fringetype)>>
 				<<set _fringetype to $fringetype.replace(" ", "_")>>
 				/* Sprites designed to reflect fringe length */
-				<<if $fringelength gte 900>>
-					<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/doggy/active/hair/' + _fringetype + '/doggyactivefeet.png'">
-				<<elseif $fringelength gte 700>>
-					<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/doggy/active/hair/' + _fringetype + '/doggyactivethighs.png'">
-				<<elseif $fringelength gte 600>>
-					<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/doggy/active/hair/' + _fringetype + '/doggyactivenavel.png'">
-				<<elseif $fringelength gte 400>>
-					<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/doggy/active/hair/' + _fringetype + '/doggyactivechest.png'">
-				<<elseif $fringelength gte 200>>
-					<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/doggy/active/hair/' + _fringetype + '/doggyactiveshoulder.png'">
+
+				<<if $fringetype is "mohawk" and $worn.head.mask_img is 1>>
+					<img class="layer-sexhair colour-hair anim-idle-2f" src="img/sex/doggy/active/hair/short/doggyactiveshort.png">
 				<<else>>
-					<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/doggy/active/hair/' + _fringetype + '/doggyactiveshort.png'">
+					<<if $fringelength gte 900>>
+						<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/doggy/active/hair/' + _fringetype + '/doggyactivefeet.png'">
+					<<elseif $fringelength gte 700>>
+						<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/doggy/active/hair/' + _fringetype + '/doggyactivethighs.png'">
+					<<elseif $fringelength gte 600>>
+						<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/doggy/active/hair/' + _fringetype + '/doggyactivenavel.png'">
+					<<elseif $fringelength gte 400>>
+						<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/doggy/active/hair/' + _fringetype + '/doggyactivechest.png'">
+					<<elseif $fringelength gte 200>>
+						<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/doggy/active/hair/' + _fringetype + '/doggyactiveshoulder.png'">
+					<<else>>
+						<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/doggy/active/hair/' + _fringetype + '/doggyactiveshort.png'">
+					<</if>>
 				<</if>>
 				<<unset _fringetype>>
 			<<elseif $fringetype is "buzzcut">>
@@ -1124,18 +1129,23 @@
 			<<if ["mohawk", "wide flaps"].includes($fringetype)>>
 				<<set _fringeType to $fringetype.replace(" ", "_")>>
 				/* Sprites designed to reflect fringe length */
-				<<if $fringelength gte 900>>
-					<img @class="'colour-hair layer-sexhair anim-doggy-4f-'+_animspeed" @src="'img/sex/doggy/active/hair/' + _fringeType + '/doggyactivefeet.png'">
-				<<elseif $fringelength gte 700>>
-					<img @class="'colour-hair layer-sexhair anim-doggy-4f-'+_animspeed" @src="'img/sex/doggy/active/hair/' + _fringeType + '/doggyactivethighs.png'">
-				<<elseif $fringelength gte 600>>
-					<img @class="'colour-hair layer-sexhair anim-doggy-4f-'+_animspeed" @src="'img/sex/doggy/active/hair/' + _fringeType + '/doggyactivenavel.png'">
-				<<elseif $fringelength gte 400>>
-					<img @class="'colour-hair layer-sexhair anim-doggy-4f-'+_animspeed" @src="'img/sex/doggy/active/hair/' + _fringeType + '/doggyactivechest.png'">
-				<<elseif $fringelength gte 200>>
-					<img @class="'colour-hair layer-sexhair anim-doggy-4f-'+_animspeed" @src="'img/sex/doggy/active/hair/' + _fringeType + '/doggyactiveshoulder.png'">
+
+				<<if $fringetype is "mohawk" and $worn.head.mask_img is 1>>
+					<img @class="'layer-sexhair colour-hair anim-doggy-4f-'+_animspeed" src="img/sex/doggy/active/hair/short/doggyactiveshort.png">
 				<<else>>
-					<img @class="'colour-hair layer-sexhair anim-doggy-4f-'+_animspeed" @src="'img/sex/doggy/active/hair/' + _fringeType + '/doggyactiveshort.png'">
+					<<if $fringelength gte 900>>
+						<img @class="'colour-hair layer-sexhair anim-doggy-4f-'+_animspeed" @src="'img/sex/doggy/active/hair/' + _fringeType + '/doggyactivefeet.png'">
+					<<elseif $fringelength gte 700>>
+						<img @class="'colour-hair layer-sexhair anim-doggy-4f-'+_animspeed" @src="'img/sex/doggy/active/hair/' + _fringeType + '/doggyactivethighs.png'">
+					<<elseif $fringelength gte 600>>
+						<img @class="'colour-hair layer-sexhair anim-doggy-4f-'+_animspeed" @src="'img/sex/doggy/active/hair/' + _fringeType + '/doggyactivenavel.png'">
+					<<elseif $fringelength gte 400>>
+						<img @class="'colour-hair layer-sexhair anim-doggy-4f-'+_animspeed" @src="'img/sex/doggy/active/hair/' + _fringeType + '/doggyactivechest.png'">
+					<<elseif $fringelength gte 200>>
+						<img @class="'colour-hair layer-sexhair anim-doggy-4f-'+_animspeed" @src="'img/sex/doggy/active/hair/' + _fringeType + '/doggyactiveshoulder.png'">
+					<<else>>
+						<img @class="'colour-hair layer-sexhair anim-doggy-4f-'+_animspeed" @src="'img/sex/doggy/active/hair/' + _fringeType + '/doggyactiveshort.png'">
+					<</if>>
 				<</if>>
 			<<elseif $fringetype is "buzzcut">>
 				<img @class="'colour-hair layer-sexhair anim-doggy-4f-'+_animspeed" @src="'img/sex/doggy/active/hair/buzzcut/doggyactiveshort.png'">
diff --git a/game/base-combat/missionary-images.twee b/game/base-combat/missionary-images.twee
index ea2ff710905be13c2a0b8058cb3ddb319c113f42..aedd21711d43c71e368aa6c893cea10de616abfd 100644
--- a/game/base-combat/missionary-images.twee
+++ b/game/base-combat/missionary-images.twee
@@ -361,18 +361,23 @@
 			<<if ["mohawk", "wide flaps"].includes($fringetype)>>
 				<<set _fringeType to $fringetype.replace(" ", "_")>>
 				/* Sprites designed to reflect fringe length */
-				<<if $fringelength gte 900>>
-					<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/missionary/active/hair/' + _fringeType + '/activefeet.png'">
-				<<elseif $fringelength gte 700>>
-					<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/missionary/active/hair/' + _fringeType + '/activethighs.png'">
-				<<elseif $fringelength gte 600>>
-					<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/missionary/active/hair/' + _fringeType + '/activenavel.png'">
-				<<elseif $fringelength gte 400>>
-					<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/missionary/active/hair/' + _fringeType + '/activechest.png'">
-				<<elseif $fringelength gte 200>>
-					<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/missionary/active/hair/' + _fringeType + '/activeshoulder.png'">
+
+				<<if $fringetype is "mohawk" and $worn.head.mask_img is 1>>
+					<img class="layer-sexhair colour-hair anim-idle-2f" src="img/sex/missionary/active/hair/short/activeshort.png">
 				<<else>>
-					<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/missionary/active/hair/' + _fringeType + '/activeshort.png'">
+					<<if $fringelength gte 900>>
+						<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/missionary/active/hair/' + _fringeType + '/activefeet.png'">
+					<<elseif $fringelength gte 700>>
+						<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/missionary/active/hair/' + _fringeType + '/activethighs.png'">
+					<<elseif $fringelength gte 600>>
+						<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/missionary/active/hair/' + _fringeType + '/activenavel.png'">
+					<<elseif $fringelength gte 400>>
+						<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/missionary/active/hair/' + _fringeType + '/activechest.png'">
+					<<elseif $fringelength gte 200>>
+						<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/missionary/active/hair/' + _fringeType + '/activeshoulder.png'">
+					<<else>>
+						<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/missionary/active/hair/' + _fringeType + '/activeshort.png'">
+					<</if>>
 				<</if>>
 			<<elseif $fringetype is "buzzcut">>
 				<img class="layer-sexhair colour-hair anim-idle-2f" @src="'img/sex/missionary/active/hair/buzzcut/activeshort.png'">
@@ -989,18 +994,23 @@
 			<<if ["mohawk", "wide flaps"].includes($fringetype)>>
 				<<set _fringeType to $fringetype.replace(" ", "_")>>
 				/* Sprites designed to reflect fringe length */
-				<<if $fringelength gte 900>>
-					<img @class="'layer-sexhair colour-hair anim-doggy-4f-'+_animspeed" @src="'img/sex/missionary/active/hair/' + _fringeType + '/activefeet.png'">
-				<<elseif $fringelength gte 700>>
-					<img @class="'colour-hair layer-sexhair anim-doggy-4f-'+_animspeed" @src="'img/sex/missionary/active/hair/' + _fringeType + '/activethighs.png'">
-				<<elseif $fringelength gte 600>>
-					<img @class="'colour-hair layer-sexhair anim-doggy-4f-'+_animspeed" @src="'img/sex/missionary/active/hair/' + _fringeType + '/activenavel.png'">
-				<<elseif $fringelength gte 400>>
-					<img @class="'colour-hair layer-sexhair anim-doggy-4f-'+_animspeed" @src="'img/sex/missionary/active/hair/' + _fringeType + '/activechest.png'">
-				<<elseif $fringelength gte 200>>
-					<img @class="'colour-hair layer-sexhair anim-doggy-4f-'+_animspeed" @src="'img/sex/missionary/active/hair/' + _fringeType + '/activeshoulder.png'">
+
+				<<if $fringetype is "mohawk" and $worn.head.mask_img is 1>>
+					<img @class="'layer-sexhair colour-hair anim-doggy-4f-'+_animspeed" src="img/sex/missionary/active/hair/short/activeshort.png">
 				<<else>>
-					<img @class="'colour-hair layer-sexhair anim-doggy-4f-'+_animspeed" @src="'img/sex/missionary/active/hair/' + _fringeType + '/activeshort.png'">
+					<<if $fringelength gte 900>>
+						<img @class="'layer-sexhair colour-hair anim-doggy-4f-'+_animspeed" @src="'img/sex/missionary/active/hair/' + _fringeType + '/activefeet.png'">
+					<<elseif $fringelength gte 700>>
+						<img @class="'colour-hair layer-sexhair anim-doggy-4f-'+_animspeed" @src="'img/sex/missionary/active/hair/' + _fringeType + '/activethighs.png'">
+					<<elseif $fringelength gte 600>>
+						<img @class="'colour-hair layer-sexhair anim-doggy-4f-'+_animspeed" @src="'img/sex/missionary/active/hair/' + _fringeType + '/activenavel.png'">
+					<<elseif $fringelength gte 400>>
+						<img @class="'colour-hair layer-sexhair anim-doggy-4f-'+_animspeed" @src="'img/sex/missionary/active/hair/' + _fringeType + '/activechest.png'">
+					<<elseif $fringelength gte 200>>
+						<img @class="'colour-hair layer-sexhair anim-doggy-4f-'+_animspeed" @src="'img/sex/missionary/active/hair/' + _fringeType + '/activeshoulder.png'">
+					<<else>>
+						<img @class="'colour-hair layer-sexhair anim-doggy-4f-'+_animspeed" @src="'img/sex/missionary/active/hair/' + _fringeType + '/activeshort.png'">
+					<</if>>
 				<</if>>
 			<<elseif $fringetype is "buzzcut">>
 				<img @class="'colour-hair layer-sexhair anim-doggy-4f-'+_animspeed" @src="'img/sex/missionary/active/hair/buzzcut/activeshort.png'">
diff --git a/game/overworld-town/loc-school/canteen.twee b/game/overworld-town/loc-school/canteen.twee
index 39ebbf2ddcfe3d9d607b2659ca15852098b74d74..fa88eedabf7dbfbc8f5056986ed92170ccc24053 100644
--- a/game/overworld-town/loc-school/canteen.twee
+++ b/game/overworld-town/loc-school/canteen.twee
@@ -468,36 +468,58 @@ You drink the milkshake you bought from the cafe. It's deliciously creamy, and e
 
 	<<link [[Next|Canteen]]>><<endevent>><</link>>
 <<else>>
-	You open the paper bag, finding a simple sandwich and a bag of crisps.
-	<<if $fame.sex gte random(15, 2000) or $cool lt 40>>
-		You take a bite into the sandwich.
-		<<if $ejactrait is 1>>
-			<span class="lewd">It tastes delicious.</span> You peel the bread away in wonder, and find a white, gooey substance coating the ham and cheese. It's cum.
-			<<arousal 600>><<garousal>>
-		<<else>>
-			<span class="pink">It tastes strange.</span> You peel the bread away in confusion, and find a white, gooey substance coating the ham and cheese.<<if $awarelevel gte 1>> It's cum.<</if>>
-			<<stress 6>><<gstress>>
-		<</if>>
-		<br><br>
+	You open the paper bag, finding a simple sandwich and a bag of crisps. You take a bite into the sandwich.
+	<br><br>
 
-		You hear giggling from a nearby table. The <<person>>, along with a <<person2>><<person>>, whisper to each other while watching you.
-		<br><br>
+	<<if $fame.sex gte random(1,2000) or $cool lt 40>>
+		<<if $NPCList[0].penis isnot "none" or $NPCList[1].penis isnot "none">>
+			<<if $ejactrait is 1>>
+				<span class="lewd">It tastes delicious.</span> You peel the bread away in wonder, and find a white, gooey substance coating the ham and cheese. It's cum.
+				<<arousal 600>><<garousal>>
+			<<else>>
+				<span class="pink">It tastes strange.</span> You peel the bread away in confusion, and find a white, gooey substance coating the ham and cheese.<<if $awarelevel gte 1>> It's cum.<</if>>
+				<<stress 6>><<gstress>>
+			<</if>>
+			<br><br>
+
+			You hear giggling from a nearby table. The <<person>>, along with a <<person2>><<person>>, whisper to each other while watching you.
+			<br><br>
 
-		<<if $promiscuity gte 55 or $ejactrait is 1>>
-			<<link [[Finish the lunch|Canteen Lunch Sandwich Finish]]>><</link>><<if $ejactrait is 1>><<ejacTrait>><<else>><<promiscuous4>><</if>>
+			<<if $promiscuity gte 55 or $ejactrait is 1>>
+				<<link [[Finish it|Canteen Lunch Sandwich Finish]]>><<set $phase to 1>><</link>><<if $ejactrait is 1>><<ejacTrait>><</if>><<if $promiscuity gte 55>><<promiscuous4>><</if>>
+			<<else>>
+				<span class="blue">You are not lewd enough to continue eating, now that you know what's in it.</span>
+			<</if>>
+			<br>
+			<<link [[`Throw it at ${$NPCList[0].pronouns.him}`|Canteen Lunch Sandwich Throw]]>><</link>><<athleticsdifficulty>>
+			<br>
+			<<link [[Throw it in the garbage|Canteen Lunch Sandwich Garbage]]>><</link>><<lcool>>
+			<br>
 		<<else>>
-			<span class="blue">You are not lewd enough to continue eating, now that you know what's in it.</span>
+			<span class="pink">A sticky strand trails from the bread.</span> You peel it back to find a clear splatter, right in the centre. They spat in your food.<<stress 6>><<gstress>>
+			<br><br>
+
+			You hear giggling from a nearby table. The <<person>>, along with a <<person2>><<person>>, watch and whisper.
+			<br><br>
+
+			<<if $promiscuity gte 55 or $submissive gte 1500>>
+				<<link [[Finish it|Canteen Lunch Sandwich Finish]]>><<set $phase to 0>><</link>><<if $submissive gte 1500>><<submissivetext>><</if>><<if $promiscuity gte 55>><<promiscuous4>><</if>>
+			<<else>>
+				<span class="blue">You are not lewd enough to continue eating, now that you know what's in it.</span>
+			<</if>>
+			<br>
+			<<link [[`Throw it at ${$NPCList[0].pronouns.him}`|Canteen Lunch Sandwich Throw]]>><</link>><<athleticsdifficulty>>
+			<br>
+			<<link [[Throw it in the garbage|Canteen Lunch Sandwich Garbage]]>><</link>><<lcool>>
+			<br>
 		<</if>>
-		<br>
-		<<link [[`Throw sandwich at ${$NPCList[0].pronouns.him}`|Canteen Lunch Sandwich Throw]]>><</link>><<athleticsdifficulty>>
-		<br>
-		<<link [[Throw lunch in the garbage|Canteen Lunch Sandwich Garbage]]>><</link>><<lcool>>
 	<<else>>
 		You take a bite into the sandwich. Plain ham and cheese, unbuttered. It's not particularly amazing, but better than the canteen food. You see the <<person>> smile and wave from another table.
 		<<stress -6>><<trauma -6>><<lstress>><<ltrauma>>
 		<br><br>
 
 		<<link [[Next|Canteen]]>><<endevent>><</link>>
+		<br>
 	<</if>>
 <</if>>
 
@@ -505,16 +527,30 @@ You drink the milkshake you bought from the cafe. It's deliciously creamy, and e
 <<effects>>
 
 You make a show of eating the sandwich, taking the time to make eye contact with the <<person1>><<person>> as you slowly take another bite. <<He>> and <<his>> friend's eyes are locked on you, and their attention goads you on.
-<<if $ejactrait is 1>>
+<<if $phase is 1 and $ejactrait is 1>>
 	It tastes so good, you don't even need to pretend to enjoy it.
+<<elseif $phase is 0 and $submissive gte 1500>>
+	You cast your gaze down in feigned humiliation.
+<</if>>
+<<if $promiscuity gte 55>>
+	<<promiscuity4>>
+<<else>>
+	<<arousal 600>><<garousal>>
+	<br><br>
 <</if>>
-<<promiscuity4>>
 
-A bit of the fluid drips onto your lips, but you lick it back up, leaving the two in awe. Finished, you get up and leave the canteen.
-<<status 1>><<gcool>><<famesex 10>><<bodyliquid "mouth" "semen">>
+<<if $phase is 1>>
+	A bit of the fluid drips onto your lips, but you lick it back up, leaving the two in awe.
+	<<bodyliquid "mouth" "semen">>
+<<else>>
+	A string of saliva clings to your lips. You lap it up, leaving the two in awe.
+<</if>>
+Finished, you get up and leave the canteen.
+<<status 1>><<gcool>><<famesex 10>>
 <br><br>
 
 <<link [[Next|Canteen]]>><<endevent>><</link>>
+<br>
 
 :: Canteen Lunch Sandwich Throw
 <<effects>>