diff --git a/game/03-JavaScript/time.js b/game/03-JavaScript/time.js
index 17e26b7424f2c76408536dba1d28407faca4eaa7..2802f99a6f25b2e3ceb1e0d5e921121101d33bdd 100644
--- a/game/03-JavaScript/time.js
+++ b/game/03-JavaScript/time.js
@@ -508,7 +508,7 @@ function weekPassed() {
 		if (V.brothelVending.weeksEmpty >= 4) V.brothelVending.status = "sold";
 	}
 
-	supermarket_weekly();
+	supermarketWeekly();
 
 	statChange.worldCorruption("soft", V.world_corruption_hard);
 
@@ -1609,7 +1609,12 @@ function dailySchoolEffects() {
 	if (Time.isSchoolDay(Time.yesterday) && V.location !== "prison") {
 		const attended = Object.keys(V.daily.school.attended).length;
 		V.schoolLessonsMissed.science += !Number(V.daily.school.attended.science);
-		V.schoolLessonsMissed.maths += !Number(V.daily.school.attended.maths);
+		if ([4, 6].includes(Time.weekDay)) {
+			// Housekeeping classes take over days 3 and 5, added one to both since this occurs on the next day
+			V.schoolLessonsMissed.housekeeping += !Number(V.daily.school.attended.housekeeping);
+		} else {
+			V.schoolLessonsMissed.maths += !Number(V.daily.school.attended.maths);
+		}
 		V.schoolLessonsMissed.english += !Number(V.daily.school.attended.english);
 		V.schoolLessonsMissed.history += !Number(V.daily.school.attended.history);
 		V.schoolLessonsMissed.swimming += !Number(V.daily.school.attended.swimming);
@@ -2083,14 +2088,27 @@ function getTimeString(...args) {
 }
 window.getTimeString = getTimeString;
 
-/*Determines and replenishes stock at supermarket*/
-function supermarket_weekly() {
-	const food_keys = Object.keys(setup.plants);
-	for (let i = 0; i < food_keys.length; i++) {
-		const current_food = food_keys[i];
-		if (setup.plants[current_food].name == "cocoa_powder" || setup.plants[current_food].name == "salt" || setup.plants[current_food].name == "sugar" || setup.plants[current_food].name == "vegetable_oil" || setup.plants[current_food].type == "meat" || setup.plants[current_food].type == "fish" || setup.plants[current_food].name == "red_wine" || setup.plants[current_food].name == "white_wine" || setup.plants[current_food].name == "oats" || setup.plants[current_food].name == "date" || setup.plants[current_food].name == "cherry" || setup.plants[current_food].name == "lime") {
-			V.plants[current_food].supermarket = Math.trunc(3000 / setup.plants[current_food].plant_cost);
+/* Determines and replenishes stock at supermarket */
+function supermarketWeekly() {
+	const foodKeys = Object.keys(setup.plants);
+	for (let i = 0; i < foodKeys.length; i++) {
+		const currentFood = foodKeys[i];
+		if (
+			setup.plants[currentFood].name === "cocoa_powder" ||
+			setup.plants[currentFood].name === "salt" ||
+			setup.plants[currentFood].name === "sugar" ||
+			setup.plants[currentFood].name === "vegetable_oil" ||
+			setup.plants[currentFood].type === "meat" ||
+			setup.plants[currentFood].type === "fish" ||
+			setup.plants[currentFood].name === "red_wine" ||
+			setup.plants[currentFood].name === "white_wine" ||
+			setup.plants[currentFood].name === "oats" ||
+			setup.plants[currentFood].name === "date" ||
+			setup.plants[currentFood].name === "cherry" ||
+			setup.plants[currentFood].name === "lime"
+		) {
+			V.plants[currentFood].supermarket = Math.trunc(3000 / setup.plants[currentFood].plant_cost);
 		}
 	}
 }
-DefineMacro("supermarket_weekly", supermarket_weekly);
+DefineMacro("supermarketWeekly", supermarketWeekly);
diff --git a/game/03-JavaScript/ui.js b/game/03-JavaScript/ui.js
index 665af473fb34ffe5f3abc7e827e6061609d01fa8..3d64ba0c84923071ffeb3832106041c0cc6f26a8 100644
--- a/game/03-JavaScript/ui.js
+++ b/game/03-JavaScript/ui.js
@@ -849,6 +849,7 @@ function moneyStatsProcess(stats) {
 					case "tattoo":
 					case "furniture":
 					case "cosmetics":
+					case "supermarket":
 						compressTo = "shopping";
 						break;
 					case "flatsCanal":
diff --git a/game/04-Variables/variables-start.twee b/game/04-Variables/variables-start.twee
index 50d1b506cf16c64aa237418f6a4b2669db47d351..f6b9a8365b5d4bd18b1191b7d5707e6656247928 100644
--- a/game/04-Variables/variables-start.twee
+++ b/game/04-Variables/variables-start.twee
@@ -658,7 +658,7 @@
 	<<set $medicated to 0>>
 	<<set $trance to 0>>
 	<<set $harperexam to 0>>
-	<<set $schoolLessonsMissed = { science: 0, maths: 0, english: 0, history: 0, swimming: 0 }>>
+	<<set $schoolLessonsMissed = { science: 0, maths: 0, english: 0, history: 0, swimming: 0, housekeeping: 0 }>>
 
 	<<set $science_star to 0>>
 	<<set $maths_star to 0>>
diff --git a/game/04-Variables/variables-start2.twee b/game/04-Variables/variables-start2.twee
index b1234aee944ec4c811fa65a5c7e872f14df53f68..3893175cf676494662543b361e77daf251d81b04 100644
--- a/game/04-Variables/variables-start2.twee
+++ b/game/04-Variables/variables-start2.twee
@@ -404,7 +404,7 @@
 			<<set $plants[$_type] to {"name": setup.plants[$_type].name, "plural": setup.plants[$_type].plural, "amount": $plants[$_type].amount}>>
 		<</if>>
 	<</for>>
-	<<supermarket_weekly>>
+	<<supermarketWeekly>>
 
 	<<set $weekly to {
 		theft: {},
diff --git a/game/04-Variables/variables-versionUpdate.twee b/game/04-Variables/variables-versionUpdate.twee
index 053d5de2b57ef4783739368fbffe6297ac19a058..eeb25d9e1c20cb151736049a20ac01e02ef6f2d2 100644
--- a/game/04-Variables/variables-versionUpdate.twee
+++ b/game/04-Variables/variables-versionUpdate.twee
@@ -5748,6 +5748,10 @@
 				<<set $plants[$_type] to {"name": setup.plants[$_type].name, "plural": setup.plants[$_type].plural, "amount": $plants[$_type].amount}>>
 			<</if>>
 		<</for>>
-		<<supermarket_weekly>>
+		<<supermarketWeekly>>
+	<</if>>
+
+	<<if $schoolLessonsMissed.housekeeping is undefined>>
+		<<set $schoolLessonsMissed.housekeeping to 0>>
 	<</if>>
 <</widget>>
diff --git a/game/base-system/mirror.twee b/game/base-system/mirror.twee
index deee6b76db0c2eb7257f3e5d98f14ad6725606db..df1ac8f4594321e4af47297c2b957963c35ba088 100644
--- a/game/base-system/mirror.twee
+++ b/game/base-system/mirror.twee
@@ -592,14 +592,17 @@
 
 <<widget "faceStyleOptions">>
 	Your currently selected style is:
-	<<listbox "$facestyle" autoselect>>
+	<<listbox "_facestyle" autoselect>>
 		<<optionsfrom setup.faceStyleOptions>>
 	<</listbox>>
 	<br>
 	<<link "Apply">>
-		<<set $facevariant to "default">>
-		<<replace "#visualsFaceVariantRadios">><<faceVariantOptions>><</replace>>
-		<<updatesidebarimg true>>
+		<<if $facestyle isnot _facestyle>>
+			<<set $facestyle to _facestyle>>
+			<<set $facevariant to "default">>
+			<<replace "#visualsFaceVariantRadios">><<faceVariantOptions>><</replace>>
+			<<updatesidebarimg true>>
+		<</if>>
 	<</link>>
 <</widget>>
 
@@ -610,9 +613,11 @@
 			<<optionsfrom setup.faceVariantOptions[$facestyle]>>
 		<</listbox>>
 		<br>
-		<<link "Apply">>
-			<<updatesidebarimg true>>
-		<</link>>
+		<<run $(() => {
+			$("#listbox-facevariant").on("change", () => {
+				Wikifier.wikifyEval('<<updatesidebarimg true>>');
+			});
+		})>>
 	<<else>>
 		There are
 		<mouse class = "gold tooltip-small" style="border-bottom-color:white">
diff --git a/game/base-system/overlays/statistics.twee b/game/base-system/overlays/statistics.twee
index 0ef6da7e80e04be47ff55596445baee4c67d2077..48abc9a26766555e19dd4b0a9a1257d6b7a40287 100644
--- a/game/base-system/overlays/statistics.twee
+++ b/game/base-system/overlays/statistics.twee
@@ -558,6 +558,8 @@
 		<br>
 		Maths lessons missed: $schoolLessonsMissed.maths
 		<br>
+		Housekeeping lessons missed: $schoolLessonsMissed.housekeeping
+		<br>
 		English lessons missed: $schoolLessonsMissed.english
 		<br>
 		History lessons missed: $schoolLessonsMissed.history
diff --git a/game/overworld-forest/loc-lake/main.twee b/game/overworld-forest/loc-lake/main.twee
index 6758c6a1836f085680bdb16a2d7a46130f2ae82e..4e0a6348280a5c8e8d7e4e79fb82a823b6de94de 100644
--- a/game/overworld-forest/loc-lake/main.twee
+++ b/game/overworld-forest/loc-lake/main.twee
@@ -1013,7 +1013,7 @@ You are at the campsite.
 You swim among the lotus flowers, gathering seeds. <span class="gold">You can now grow <<icon "tending/lotus.png">> lotus.</span> <i>Lotus are valuable, but need a special environment to grow.</i>
 <br><br>
 
-<<link [[Next|Lake Shallows]]>><<handheldon>></link>>
+<<link [[Next|Lake Shallows]]>><<handheldon>><</link>>
 <br>
 
 :: Lake Lotus Ice
diff --git a/game/overworld-town/loc-school/changing-rooms-widgets.twee b/game/overworld-town/loc-school/changing-rooms-widgets.twee
index 06be90e4a5901430ffc783478dbd99a4ef8e89ad..6e0cdba5596336c4ec4472a78f953024fd832eef 100644
--- a/game/overworld-town/loc-school/changing-rooms-widgets.twee
+++ b/game/overworld-town/loc-school/changing-rooms-widgets.twee
@@ -328,9 +328,11 @@
 				One of the girls asks around the room to see if anyone has an extra pair of panties. She claims that someone broke into her locker and took hers. No one offers to help, leaving her to nervously put her skirt on and leave the locker room.
 			<</addinlineevent>>
 		<</if>>
-		<<addinlineevent "schoolChangingRoomGirlsEvent">>
-			On the other side of the room, a group of popular girls giggles as they cut holes in a nerdy girl's swimsuit. Their unaware victim pulls on her swimsuit, only to squeak in embarrassment when she realises that her nipples are exposed. The popular girls burst into laughter and exit the locker room, leaving the mortified girl covering her breasts. Thankfully, they leave you alone.
-		<</addinlineevent>>
+		<<if _notStartedLesson>>
+			<<addinlineevent "schoolChangingRoomGirlsEvent">>
+				On the other side of the room, a group of popular girls giggles as they cut holes in a nerdy girl's swimsuit. Their unaware victim pulls on her swimsuit, only to squeak in embarrassment when she realises that her nipples are exposed. The popular girls burst into laughter and exit the locker room, leaving the mortified girl covering her breasts. Thankfully, they leave you alone.
+			<</addinlineevent>>
+		<</if>>
 	<</if>>
 	<<if $worn.over_lower.name is "naked" and $worn.lower.name is "naked" and $worn.under_lower.name isnot "naked" and $worn.under_lower.reveal gte 500>>
 		<<addinlineevent "schoolChangingRoomGirlsEvent">>
diff --git a/game/overworld-town/loc-school/classes/housekeeping.twee b/game/overworld-town/loc-school/classes/housekeeping.twee
index 241ebe102f74006c791ca98fa8c7a63c1e0821ac..d210a495127f7cc5fbfab8086e16fd483387ef3e 100644
--- a/game/overworld-town/loc-school/classes/housekeeping.twee
+++ b/game/overworld-town/loc-school/classes/housekeeping.twee
@@ -26,7 +26,7 @@
 		<<link [[Next|Hallways]]>><<endevent>><</link>>
 		<br><br>
 	<<elseif $worn.upper.type.includes("school") and $worn.lower.type.includes("school") and $rightarm isnot "bound">>
-		<<if $daily.school.attended.maths>>
+		<<if $daily.school.attended.housekeeping>>
 			You rejoin the housekeeping lesson,
 			<<if $worn.over_upper.name isnot "naked" or $worn.over_lower.name isnot "naked" or $worn.over_head.name isnot "naked">>
 				hang your coat at the back of the class
diff --git a/game/overworld-town/loc-shop/supermarket.twee b/game/overworld-town/loc-shop/supermarket.twee
index 668de0fdb8cfc667d2acb70ff9c1eabc007c17f8..ef4f63b6ef89b831de17505a1c3f7c50bb16ecb7 100644
--- a/game/overworld-town/loc-shop/supermarket.twee
+++ b/game/overworld-town/loc-shop/supermarket.twee
@@ -19,7 +19,7 @@ The shutters protecting the supermarket windows would be liftable, if not for th
 	<<skulduggeryrequired>>
 	<br><br>
 <</if>>
-<<getouticon>><<link [[Leave|Shopping Centre Top]]>><</link>>
+<<getouticon>><<link [[Leave|Shopping Centre]]>><</link>>
 
 :: Supermarket
 <<set $outside to 0>><<location "shopping_centre">><<effects>>
@@ -59,7 +59,7 @@ You are in the supermarket. All sorts of fresh ingredients line the shelves, or
 			<br><br>
 			<<supermarket_display>>
 		<</if>>
-		<<getouticon>><<link [[Leave|Shopping Centre Top]]>><</link>>
+		<<getouticon>><<link [[Leave|Shopping Centre]]>><</link>>
 		<br>
 	<</if>>
-<</if>>
\ No newline at end of file
+<</if>>
diff --git a/game/overworld-town/loc-shop/widgets.twee b/game/overworld-town/loc-shop/widgets.twee
index 6916a26a944fe64635a98650ee7dadb067be6f02..142867b514a2c983b2024e8a082eb8689c08385d 100644
--- a/game/overworld-town/loc-shop/widgets.twee
+++ b/game/overworld-town/loc-shop/widgets.twee
@@ -618,16 +618,16 @@
 					<</if>>
 				<<else>>
 					<<if $money gte _plant_cost * 2 and $plants[_type].supermarket gte 1>>
-						<<link [[Buy one|$passage]]>><<tending_give $plants[_type].name 1>><<set $money -= (_plant_cost * 2)>><<set $plants[_type].supermarket -= 1>><</link>>
+						<<link [[Buy one|$passage]]>><<tending_give $plants[_type].name 1>><<money `-(_plant_cost * 2)` "supermarket">><<set $plants[_type].supermarket -= 1>><</link>>
 					<</if>>
 					<<if $money gte _plant_cost * 10 and $plants[_type].supermarket gte 5>>
-						| <<link [[Buy five|$passage]]>><<tending_give $plants[_type].name 5>><<set $money -= (_plant_cost * 10)>><<set $plants[_type].supermarket -= 5>><</link>>
+						| <<link [[Buy five|$passage]]>><<tending_give $plants[_type].name 5>><<money `-(_plant_cost * 10)` "supermarket">><<set $plants[_type].supermarket -= 5>><</link>>
 					<</if>>
 					<<if $money gte _plant_cost * 20 and $plants[_type].supermarket gte 10>>
-						| <<link [[Buy ten|$passage]]>><<tending_give $plants[_type].name 10>><<set $money -= (_plant_cost * 20)>><<set $plants[_type].supermarket -= 10>><</link>>
+						| <<link [[Buy ten|$passage]]>><<tending_give $plants[_type].name 10>><<money `-(_plant_cost * 20)` "supermarket">><<set $plants[_type].supermarket -= 10>><</link>>
 					<</if>>
 					<<if $money gte _plant_cost * 200 and $plants[_type].supermarket gte 100>>
-						| <<link [[Buy one hundred|$passage]]>><<tending_give $plants[_type].name 100>><<set $money -= (_plant_cost * 200)>><<set $plants[_type].supermarket -= 100>><</link>>
+						| <<link [[Buy one hundred|$passage]]>><<tending_give $plants[_type].name 100>><<money `-(_plant_cost * 200)` "supermarket">><<set $plants[_type].supermarket -= 100>><</link>>
 					<</if>>
 				<</if>>
 			</span>
@@ -670,16 +670,16 @@
 					<</if>>
 				<<else>>
 					<<if $money gte _plant_cost * 2 and $plants[_type].supermarket gte 1>>
-						<<link [[Buy one|$passage]]>><<tending_give $plants[_type].name 1>><<set $money -= (_plant_cost * 2)>><<set $plants[_type].supermarket -= 1>><</link>>
+						<<link [[Buy one|$passage]]>><<tending_give $plants[_type].name 1>><<money `-(_plant_cost * 2)` "supermarket">><<set $plants[_type].supermarket -= 1>><</link>>
 					<</if>>
 					<<if $money gte _plant_cost * 10 and $plants[_type].supermarket gte 5>>
-						| <<link [[Buy five|$passage]]>><<tending_give $plants[_type].name 5>><<set $money -= (_plant_cost * 10)>><<set $plants[_type].supermarket -= 5>><</link>>
+						| <<link [[Buy five|$passage]]>><<tending_give $plants[_type].name 5>><<money `-(_plant_cost * 10)` "supermarket">><<set $plants[_type].supermarket -= 5>><</link>>
 					<</if>>
 					<<if $money gte _plant_cost * 20 and $plants[_type].supermarket gte 10>>
-						| <<link [[Buy ten|$passage]]>><<tending_give $plants[_type].name 10>><<set $money -= (_plant_cost * 20)>><<set $plants[_type].supermarket -= 10>><</link>>
+						| <<link [[Buy ten|$passage]]>><<tending_give $plants[_type].name 10>><<money `-(_plant_cost * 20)` "supermarket">><<set $plants[_type].supermarket -= 10>><</link>>
 					<</if>>
 					<<if $money gte _plant_cost * 200 and $plants[_type].supermarket gte 100>>
-						| <<link [[Buy one hundred|$passage]]>><<tending_give $plants[_type].name 100>><<set $money -= (_plant_cost * 200)>><<set $plants[_type].supermarket -= 100>><</link>>
+						| <<link [[Buy one hundred|$passage]]>><<tending_give $plants[_type].name 100>><<money `-(_plant_cost * 200)` "supermarket">><<set $plants[_type].supermarket -= 100>><</link>>
 					<</if>>
 				<</if>>
 			</span>
@@ -722,16 +722,16 @@
 					<</if>>
 				<<else>>
 					<<if $money gte _plant_cost * 2 and $plants[_type].supermarket gte 1>>
-						<<link [[Buy one|$passage]]>><<tending_give $plants[_type].name 1>><<set $money -= (_plant_cost * 2)>><<set $plants[_type].supermarket -= 1>><</link>>
+						<<link [[Buy one|$passage]]>><<tending_give $plants[_type].name 1>><<money `-(_plant_cost * 2)` "supermarket">><<set $plants[_type].supermarket -= 1>><</link>>
 					<</if>>
 					<<if $money gte _plant_cost * 10 and $plants[_type].supermarket gte 5>>
-						| <<link [[Buy five|$passage]]>><<tending_give $plants[_type].name 5>><<set $money -= (_plant_cost * 10)>><<set $plants[_type].supermarket -= 5>><</link>>
+						| <<link [[Buy five|$passage]]>><<tending_give $plants[_type].name 5>><<money `-(_plant_cost * 10)` "supermarket">><<set $plants[_type].supermarket -= 5>><</link>>
 					<</if>>
 					<<if $money gte _plant_cost * 20 and $plants[_type].supermarket gte 10>>
-						| <<link [[Buy ten|$passage]]>><<tending_give $plants[_type].name 10>><<set $money -= (_plant_cost * 20)>><<set $plants[_type].supermarket -= 10>><</link>>
+						| <<link [[Buy ten|$passage]]>><<tending_give $plants[_type].name 10>><<money `-(_plant_cost * 20)` "supermarket">><<set $plants[_type].supermarket -= 10>><</link>>
 					<</if>>
 					<<if $money gte _plant_cost * 200 and $plants[_type].supermarket gte 100>>
-						| <<link [[Buy one hundred|$passage]]>><<tending_give $plants[_type].name 100>><<set $money -= (_plant_cost * 200)>><<set $plants[_type].supermarket -= 100>><</link>>
+						| <<link [[Buy one hundred|$passage]]>><<tending_give $plants[_type].name 100>><<money `-(_plant_cost * 200)` "supermarket">><<set $plants[_type].supermarket -= 100>><</link>>
 					<</if>>
 				<</if>>
 			</span>