diff --git a/game/03-JavaScript/ingame.js b/game/03-JavaScript/ingame.js
index d7b50ff677813d71c79c461ce209a121db50a29b..0e37ecdd74f94d263f00465744c65fc175b3585f 100644
--- a/game/03-JavaScript/ingame.js
+++ b/game/03-JavaScript/ingame.js
@@ -1131,13 +1131,13 @@ function isConnectedToHood(slot) {
 	// Return false if slot is undefined or not a valid clothing category
 	if (!slot || !V.worn[slot]) return false;
 	// Return true if this item IS a hood 
-	if (V.worn[slot].hood) return true;
+	if (V.worn[slot].hood && V.worn[slot].outfitSecondary[1] !== "broken") return true;
 
 	// Use the primary clothing slot for the next check if this item is connected to an outfit (and is not the primary item)
 	if (V.worn[slot].outfitSecondary && V.worn[slot].outfitSecondary[1] !== "broken"){
 		slot = V.worn[slot].outfitSecondary[0];
 	}
-	if (V.worn[slot].outfitPrimary && V.worn[slot].outfitPrimary.head && V.worn[slot].outfitPrimary.head !== "broken" && V.worn.head.hood){
+	if (V.worn[slot].hoodposition && (V.worn[slot].hoodposition == "down" || (V.worn[slot].hoodposition == "up" && V.worn[slot].outfitPrimary.head !== "broken" && V.worn.head.hood == 1))){
 		return true;
 	}
 	return false;
diff --git a/game/04-Variables/canvasmodel-main.js b/game/04-Variables/canvasmodel-main.js
index 682b5ea2591ac91783c96c3738f7ff3ffc4f5468..77a5719726a53a46461da53c0960ea09ffc53c57 100644
--- a/game/04-Variables/canvasmodel-main.js
+++ b/game/04-Variables/canvasmodel-main.js
@@ -2354,8 +2354,8 @@ function genlayer_clothing_main(slot, overrideOptions) {
 	return Object.assign({
 		srcfn(options) {
 			let isHoodDown = options.hood_down &&
-				options["worn_" + slot + "_setup"].hood &&
-				options["worn_" + slot + "_setup"].outfitSecondary !== undefined;
+				options["worn_" + slot + "_setup"].hoodposition !== undefined &&
+				options["worn_" + slot + "_setup"].outfitPrimary.head !== undefined;
 			let path = 'img/clothes/' +
 				slot + '/' +
 				options["worn_" + slot + "_setup"].variable + '/' +
@@ -2380,8 +2380,8 @@ function genlayer_clothing_accessory(slot, overrideOptions) {
 		srcfn(options) {
 			let setup = options["worn_" + slot + "_setup"];
 			let isHoodDown = options.hood_down &&
-				setup.hood &&
-				setup.outfitSecondary !== undefined;
+				setup.hoodposition !== undefined &&
+				setup.outfitPrimary.head !== undefined;
 			let path = 'img/clothes/' +
 				slot + '/' +
 				setup.variable + '/' +
diff --git a/game/04-Variables/variables-start2.twee b/game/04-Variables/variables-start2.twee
index b47de5db6889c0daada4188894bbac6b181a6de8..c7bdabd611fa6a455570dc9ec9d805694dcd290f 100644
--- a/game/04-Variables/variables-start2.twee
+++ b/game/04-Variables/variables-start2.twee
@@ -288,6 +288,8 @@
 	rng: random(0,1000)
 }>>
 
+<<set $retrieveShopCustomColor to {}>>
+
 <<set $customColors to {
 	presets:{},
 	action: "set",
diff --git a/game/04-Variables/variables-versionUpdate.twee b/game/04-Variables/variables-versionUpdate.twee
index fd4ca3144eac52b2a3cb7f4635ec5ea5e88291a7..083026709494c4c18d181f1606fd3a60f3751944 100644
--- a/game/04-Variables/variables-versionUpdate.twee
+++ b/game/04-Variables/variables-versionUpdate.twee
@@ -2646,9 +2646,9 @@
 	<<run window.backCompPillsInventory()>> /* restructure V.sexStats.pills inventory */
 	<<set $runWardrobeSanityChecker to true>>
 
-	<<if $objectVersion.updateClothes lt 30 or $objectVersion.updateClothes is undefined>>
+	<<if $objectVersion.updateClothes lt 31 or $objectVersion.updateClothes is undefined>>
 		<<updateClothes>>
-		<<set $objectVersion.updateClothes to 30>>
+		<<set $objectVersion.updateClothes to 31>>
 		<!--If you have added any `colour_combat` or `accessory_colour_combat` to clothes that need their `colour` or `accessory_colour`, this will clear them.
 		Remove `colour_combat` or `accessory_colour_combat` where this is the case, they are independant so `colour_combat` will only clear `colour`-->
 	<</if>>
diff --git a/game/base-clothing/canvasmodel-img.twee b/game/base-clothing/canvasmodel-img.twee
index 448662f54b1eb054d6df5a1bd5d0e7a7ee03c912..925fe17941ab6868cf6d9642765a3c485b050cb3 100644
--- a/game/base-clothing/canvasmodel-img.twee
+++ b/game/base-clothing/canvasmodel-img.twee
@@ -491,8 +491,8 @@ Set model options & filters for player clothes
 	<<set _modeloptions.crotch_visible to false>>
 <</if>>
 
-<<set _modeloptions.hood_down to $hoodDown>>
-<<if ((($worn.over_head.hood is 1 and $worn.over_head.mask_img isnot 1) or ($worn.head.hood is 1 and $worn.head.mask_img isnot 1))) and $hoodDown is 0>>
+<<set _modeloptions.hood_down to $worn.upper.hoodposition is "down">>
+<<if ((($worn.over_head.hood is 1 and $worn.over_head.mask_img isnot 1) or ($worn.head.hood is 1 and $worn.head.mask_img isnot 1))) and $worn.upper.hoodposition is "down">>
 	<<set _modeloptions.hair_sides_length to "short">>
 	<<set _modeloptions.hair_fringe_length to "short">>
 <</if>>
diff --git a/game/base-clothing/clothing-upper.twee b/game/base-clothing/clothing-upper.twee
index 6e46b001c3eda097428042d1be2035c0aa0128c3..63fc90979b931ca14af6d47112120a0bb0e4be05 100644
--- a/game/base-clothing/clothing-upper.twee
+++ b/game/base-clothing/clothing-upper.twee
@@ -3379,7 +3379,8 @@ plural - widget will output "are" if 1, and "is" if 0. eg - Your hat <<upperplur
 	iconFile: "hoodie.png",
 	accIcon: 0,
 	outfitPrimary:{head:"hoodie hood"},
-	notuck: 1
+	notuck: 1,
+	hoodposition: "up"
 },
 
 	{index: 78,
@@ -3638,7 +3639,8 @@ plural - widget will output "are" if 1, and "is" if 0. eg - Your hat <<upperplur
 	iconFile: "monster_hoodie.png",
 	accIcon: 0,
 	outfitPrimary:{lower:"monster skirt", head:"monster hood"},
-	notuck: 0
+	notuck: 0,
+	hoodposition: "up"
 },
 
 	{index: 84,
@@ -3896,7 +3898,8 @@ plural - widget will output "are" if 1, and "is" if 0. eg - Your hat <<upperplur
 	iconFile: "cow_onesie.png",
 	accIcon: 0,
 	outfitPrimary:{lower:"cow onesie bottoms", head:"cow onesie hood"},
-	notuck: 0
+	notuck: 0,
+	hoodposition: "up"
 },
 
 	{index: 90,
diff --git a/game/base-clothing/images.twee b/game/base-clothing/images.twee
index 65e6cde008102b8abe774a006bd4e92bf9082de6..fd1b88b037e19004b6ead80e2e31a73ba55319dd 100644
--- a/game/base-clothing/images.twee
+++ b/game/base-clothing/images.twee
@@ -38,7 +38,7 @@
 	<<if $player.penisExist>>
 		<<set _penisSize to Math.clamp($player.penissize, -2, 4)>>
 	<</if>>
-	<<if ($worn.over_head.hood is 1 or $worn.head.hood is 1) and $hoodDown is 0>>
+	<<if $worn.over_head.hood is 1 or $worn.head.hood is 1>>
 		<<set _hairlengthstage to "short">>
 		<<set _fringelengthstage to "short">>
 	<<else>>
@@ -2774,17 +2774,15 @@
 <<widget "baseClothingImg">>
 <<if $worn[_args[0]].name isnot "naked">>
 	<<baseClothingStrings _args[0]>>
-	<<set _isHoodDown = $hoodDown and $worn[_args[0]].hood and $worn[_args[0]].outfitSecondary isnot undefined>>
-	<<set _hoodDown = _isHoodDown ? "_down" : "">>
 	<div @class="'clothes-div layer-'+_args[0]">
 		<<if $worn[_args[0]].mainImage isnot 0>>
-			<img @class="_class" @src="'img/clothes/'+[_args[0]]+'/' + $worn[_args[0]].variable + '/' + 'full' + _hoodDown + '.png'" @style="_style">
+			<img @class="_class" @src="'img/clothes/'+[_args[0]]+'/' + $worn[_args[0]].variable + '/' + 'full.png'" @style="_style">
 		<</if>>
 		<<if $worn[_args[0]].accessory is 1>>
-			<img @class="_classAcc" @src="'img/clothes/'+[_args[0]]+'/' + $worn[_args[0]].variable + '/' + 'acc' + _hoodDown + '.png'" @style="_styleAcc">
+			<img @class="_classAcc" @src="'img/clothes/'+[_args[0]]+'/' + $worn[_args[0]].variable + '/' + 'acc.png'" @style="_styleAcc">
 		<</if>>
 	</div>
-	<<if $worn[_args[0]].back_img is 1 and !_isHoodDown>>
+	<<if $worn[_args[0]].back_img is 1>>
 		<div @class="'clothes-div layer-'+_args[0]+'-back'">
 			<img @class="$worn[_args[0]].back_img_colour is 'secondary' ? _classAcc : _class" @src="'img/clothes/'+[_args[0]]+'/' + $worn[_args[0]].variable + '/' + 'back.png'" @style="_styleAcc">
 		</div>
@@ -3071,6 +3069,7 @@
 		<<default>><<set _upperWetness to "">>
 	<</switch>>
 	<<set _tucked = $upperTucked and !setup.clothes.upper[clothesIndex('upper', $worn.upper)].notuck and $worn.upper.outfitPrimary is undefined ? " tucked" : "">>
+	<<set $_hoodDown to $worn.upper.hoodposition is "down" ? "_down" : "">>
 	<div @class="'clothes-div layer-upper' + _tucked + _upperWetness">
 		<<if $worn.upper.mainImage isnot 0>>
 			<<if $worn.upper.integrity lte (clothingData('upper',$worn.upper,'integrity_max') / 10) * 2>>
@@ -3082,13 +3081,13 @@
 			<<else>>
 				<<set _imgName to "full">>
 			<</if>>
-			<img @class="_class" @src="'img/clothes/upper/' + $worn.upper.variable + '/' + _imgName + '.png'" @style="_style">
+			<img @class="_class" @src="'img/clothes/upper/' + $worn.upper.variable + '/' + _imgName + $_hoodDown + '.png'" @style="_style">
 		<</if>>
 		<<if setup.clothes.upper[clothesIndex('upper', $worn.upper)].breast_img is 1>>
 			<img @class="_class" @src="'img/clothes/upper/' + $worn.upper.variable + '/' + (Math.min(_breastSize, 5)) + '.png'" @style="_style">
 		<</if>>
 		<<if $worn.upper.accessory is 1>>
-			<img @class="_classAcc" @src="'img/clothes/upper/' + $worn.upper.variable + '/' + 'acc' + ($worn.upper.accessory_integrity_img ? '_' + _imgName : '') + '.png'" @style="_styleAcc">
+			<img @class="_classAcc" @src="'img/clothes/upper/' + $worn.upper.variable + '/' + 'acc' + ($worn.upper.accessory_integrity_img ? '_' + _imgName : '') + $_hoodDown + '.png'" @style="_styleAcc">
 		<</if>>
 		<<if $worn.upper.breast_acc_img is 1>>
 			<img @class="_classAcc" @src="'img/clothes/upper/' + $worn.upper.variable + '/' + (Math.min(_breastSize, 5)) + '_acc.png'" @style="_styleAcc">
diff --git a/game/base-clothing/update.twee b/game/base-clothing/update.twee
index 7adce0f0adb0f4c7ed9f687e3d22f75e383be12c..78d479b8fc4fec55a619d3a76ef00e5909c8c7ad 100644
--- a/game/base-clothing/update.twee
+++ b/game/base-clothing/update.twee
@@ -5,6 +5,12 @@
 <<set _skip to ["integrity","integrity_max","colour","accessory_colour", "exposed", "vagina_exposed", "anus_exposed", "anal_shield", "one_piece", "skirt_down", "state", "state_top","name_cap","iconFile","accIcon","notuck","skirt","description","colour_options","accessory_colour_options","fabric_strength","integrity_max","bustresize","sleeve_img","breast_img","exposed_base","vagina_exposed_base","anus_exposed_base","state_top_base","state_base",,"word","femininity","strap","cost","shop"]>>
 <<set _remap_colours to {"light-pink":"light pink", "blue-steel":"blue steel"}>>
 
+/*0.3.9.3: adding "hoodposition" variable to all hoodies*/
+/*Just add the variable to hoodies that don't have it, skip it after this*/
+<<if $objectVersion.updateClothes gte 31>>
+	<<set _skip.push("hoodposition")>>
+<</if>>
+
 <<for _i to 0; _i lt _equip.length; _i++>>
 	<<set _worn to $worn[_equip[_i]]>>
 	<<set _default to setup.clothes[_equip[_i]][clothesIndex(_equip[_i],_worn)]>>
diff --git a/game/base-clothing/wardrobes.twee b/game/base-clothing/wardrobes.twee
index c2b96cb5983cfce4c6f7d5ba83e7cecfedc0da56..8c044fa120a14bebed9189780fec2db60a1171b0 100644
--- a/game/base-clothing/wardrobes.twee
+++ b/game/base-clothing/wardrobes.twee
@@ -564,17 +564,54 @@ Type: <label>Everyday <<radiobutton "$outfit_type" 0 checked>></label> | <label>
 	<</if>>
 <</silently>><<print $_output>><</widget>>
 
-<<widget "toggleHood">>
+<<widget "toggleHoodLink">>
 	<div class="toggleHoodLink">
-		<<link `($hoodDown ? "Pull hood up" : "Pull hood down")`>>
-			<<set $hoodDown to +!$hoodDown>>
+		<<link `($worn.upper.hoodposition is "down" ? "Pull hood up" : "Pull hood down")`>>
+			<<toggleHood _args[0]>>
 			<<updatesidebarimg>>
-			<<run $(".toggleHoodLink .link-internal").html($hoodDown ? "Pull hood up" : "Pull hood down")>>
+			<<if _args[0] isnot "shop">>
+				<<updatewardrobe>>
+			<</if>>
+			<<run $(".toggleHoodLink .link-internal").html($worn.upper.hoodposition is "down" ? "Pull hood up" : "Pull hood down")>>
 			<<run Links.generateLinkNumbers($(".passage"))>>
 		<</link>>
 	</div>
 <</widget>>
 
+<<widget "toggleHood">>
+	/* If hood is up, put it down and free up the head slot*/
+	<<if $worn.upper.hoodposition is "up">> 
+		<<run delete $worn.upper.outfitPrimary.head>>
+		<<set $worn.upper.hoodposition to "down">>
+		<<if _args[0] is "shop" and $tryOn.ownedStored.head.name isnot $worn.head.name and !($tryOn.ownedStored.head.outfitSecondary and $tryOn.ownedStored.head.outfitSecondary[1] isnot "broken")>>
+			<<set $worn.head to clone($tryOn.ownedStored.head)>>
+		<<else>>
+			<<set $worn.head to clone(setup.clothes.head[0])>>
+		<</if>>
+	
+	/* If hood is down, put it back up and remove anything on the head if necessary */
+	<<else>>
+		<<if !$worn.head.cursed>> /* No cursed head items yet, but if one is made, should probably have some popup saying this was prevented */
+			<<if $worn.head.name isnot "naked" and _args[0] isnot "shop">> /*Don't put head accessory back in wardrobe if curently in a shop, might need it back*/
+				<<generalUndress $wardrobe_location "head">>
+			<</if>>
+			<<set $worn.upper.outfitPrimary.head to clone(setup.clothes.upper[$worn.upper.index].outfitPrimary.head)>>
+			<<set $worn.upper.hoodposition to "up">>
+			/* re-create the hood using colors from the hoodie */
+			<<set $_hoodIndex to setup.clothes.head.findIndex(x => x.name === $worn.upper.outfitPrimary.head)>>
+			<<set $worn.head to clone(setup.clothes.head[$_hoodIndex])>>
+			<<set $worn.head.colour to $worn.upper.colour>>
+			<<if $worn.head.colour is "custom">>
+				<<set $worn.head.colourCustom to $worn.upper.colourCustom>>
+			<</if>>
+			<<set $worn.head.accessory_colour to $worn.upper.accessory_colour>>
+			<<if $worn.head.accessory_colour is "custom">>
+				<<set $worn.head.accessory_colourCustom to $worn.upper.accessory_colourCustom>>
+			<</if>>
+		<</if>>
+	<</if>>
+<</widget>>
+
 <<widget "toggleUpperTuck">>
 	<<set _linkOption1 to _args[0] || "Untuck">>
 	<<set _linkOption2 to _args[1] || "Tuck in">>
@@ -684,7 +721,7 @@ Type: <label>Everyday <<radiobutton "$outfit_type" 0 checked>></label> | <label>
 
 			<<if isConnectedToHood(_wardrobe_list)>>
 				<!-- If selected item is a hood or selected item has a secondary hood piece -->
-				<div class="no-numberify"><<toggleHood>></div>
+				<div class="no-numberify"><<toggleHoodLink>></div>
 				<br>
 			<</if>>
 			<<if _wardrobe_list is "upper" and $worn.lower.name isnot "naked" and _wornItem.outfitPrimary is undefined and !_wornItemData.notuck>>
@@ -826,7 +863,7 @@ Type: <label>Everyday <<radiobutton "$outfit_type" 0 checked>></label> | <label>
 		<</if>>
 		<<if $worn.head.hood>>
 			<!-- If selected item is a hood or selected item has a secondary hood piece -->
-			<<toggleHood>>
+			<<Link>>
 		<</if>>
 	</div>
 <</widget>>
diff --git a/game/base-clothing/widgets.twee b/game/base-clothing/widgets.twee
index 39339d8a93e6945deb851d52c9fdf13d56bde090..64ef63c2cf5743cf5c9e4d61cca285bab8b500dd 100644
--- a/game/base-clothing/widgets.twee
+++ b/game/base-clothing/widgets.twee
@@ -161,7 +161,9 @@
 			<<for $_label, $_value range $_outfitPrimary>>
 				<<set _pieceId to setup.clothes[$_label].findIndex(item => item.name is $_value)>>
 				<<if _pieceId isnot -1>> <!-- findIndex() returns -1 if no index is found -->
-					<<sendToWardrobeFromDefault _args[0] $_label _pieceId _colour _accessory_colour>>
+					<<if !_hoodDown or $_label isnot "head">> /*If hood is down, don't make a hood*/
+						<<sendToWardrobeFromDefault _args[0] $_label _pieceId _colour _accessory_colour>>
+					<</if>>
 				<<else>>
 					<!-- Error -->
 				<</if>>
@@ -206,6 +208,10 @@
 			<<set $_item.accessory_colour to clone($_item.accessory_colour_options.random())>>
 		<</if>>
 	<</if>>
+	<<if _hoodDown and $_item.hoodposition isnot undefined>>
+		<<set $_item.hoodposition to "down">>
+		<<run delete $_item.outfitPrimary.head>>
+	<</if>>
 	<<run clothesDataTrimmer($_item)>>
 <</widget>>
 
@@ -598,6 +604,7 @@
 		<</if>>
 
 		<<set $_cost to Math.trunc(getClothingCost($_item, $_slot) * 1.5)>>
+		<<set _hoodDown to $_item.hoodposition is "down">>
 
 		<<if $_item.outfitSecondary isnot undefined and $_item.outfitSecondary[1] is "broken">>
 		<<elseif $money gte $_cost>>
@@ -609,6 +616,7 @@
 			<<run $rebuy_failure.push(clone($_item.name))>>
 			<<set $effectsmessage to 1>>
 		<</if>>
+		<<unset _hoodDown>>
 	<</if>>
 <</if>>
 <</widget>>
diff --git a/game/base-system/effects.twee b/game/base-system/effects.twee
index 1dd8d1e382a601f008fe194f042ae6f9425ef738..d43271599bccb6560995d2de22abfda68de23ed9 100644
--- a/game/base-system/effects.twee
+++ b/game/base-system/effects.twee
@@ -812,8 +812,6 @@
 		<<if $worn[_active_clothes].warmth isnot undefined>>
 			<<if _active_clothes is "upper" and $worn.upper.warmth lte $upperwet or _active_clothes is "lower" and $worn.lower.warmth lte $lowerwet or _active_clothes is "under_upper" and $worn.under_upper.warmth lte $underupperwet or _active_clothes is "under_lower" and $worn.under_lower.warmth lte $underlowerwet>>
 				/*Do nothing*/
-			<<elseif $hoodDown and (_active_clothes is "head" or _active_clothes is "over_head") and $worn[_active_clothes].hood and $worn[_active_clothes].outfitSecondary isnot undefined>>
-				/* Don't add warmth if it's a hood and it has been pulled down */
 			<<else>>
 				<<set $warmth += $worn[_active_clothes].warmth>>
 			<</if>>
diff --git a/game/base-system/widgets.js b/game/base-system/widgets.js
index af54617ec4f9379e1a98a91b2f22a160c2d1f88e..31a57b518325972ea2b747bd3cd84a1949c1cf03 100644
--- a/game/base-system/widgets.js
+++ b/game/base-system/widgets.js
@@ -104,7 +104,7 @@ function genderappearancecheck() {
 	addfemininityofclothingarticle('legs',V.worn.legs);
 	addfemininityofclothingarticle('feet',V.worn.feet);
 	/* Hair length */
-	if ((V.worn.over_head.hood !== 1 && V.worn.head.hood !== 1) || V.hoodDown == 1) {
+	if (V.worn.over_head.hood !== 1 && V.worn.head.hood !== 1) {
 		let lengthCap;
 		/* Set Hair Style cap */
 		if(hairStyleCap.hairtype[V.hairtype] && hairStyleCap.fringetype[V.fringetype]){
diff --git a/game/overworld-town/loc-shop/clothing-v2.twee b/game/overworld-town/loc-shop/clothing-v2.twee
index 365e9e155dc46653c1717cbbe11bfdcf6a1d13a1..de192bdb30d5dba7720e4c2c85435ba6e466d435 100644
--- a/game/overworld-town/loc-shop/clothing-v2.twee
+++ b/game/overworld-town/loc-shop/clothing-v2.twee
@@ -666,9 +666,9 @@
 							<</link>>
 						</div>
 					<</if>>
-					<<if $worn.head.hood and isConnectedToHood($clothingShopSlot)>>
+					<<if $worn[$clothingShopSlot].name is _temp_choice.name and isConnectedToHood($clothingShopSlot)>>
 						<!-- If selected item is a hood or selected item has a secondary hood piece -->
-						<div class="try-button div-link"><<toggleHood>></div>
+						<div class="try-button div-link"><<toggleHoodLink "shop">></div>
 						<br>
 					<</if>>
 					<<if ["upper","lower"].includes($clothingShopSlot) and $worn.lower.name isnot "naked" and $worn.upper.outfitPrimary is undefined and !setup.clothes.upper[clothesIndex("upper",$worn.upper)].notuck>>
@@ -1577,4 +1577,11 @@
 <<else>>
 	<<set $wardrobes.shopReturn to "wardrobe">>
 <</if>>
+<</widget>>
+
+/*If the player just goes to the shop and puts up their hood, make sure whatever they had on their head doesn't just disappear*/
+<<widget "shopHoodCheck">> 
+	<<if $tryOn.tryingOn.head is null and $tryOn.ownedStored.head.name isnot "naked" and $tryOn.ownedStored.head.name isnot $worn.head.name and $worn.head.hood is 1>>
+		<<wardrobeSend "head" $tryOn.ownedStored.head>>
+	<</if>>
 <</widget>>
\ No newline at end of file
diff --git a/game/overworld-town/loc-shop/clothing.twee b/game/overworld-town/loc-shop/clothing.twee
index 71ace502a66eb00e8cd576ded71e46877e080633..e75314bc9a9c674bc6bc25ddf1b08af9d3d864e8 100644
--- a/game/overworld-town/loc-shop/clothing.twee
+++ b/game/overworld-town/loc-shop/clothing.twee
@@ -118,6 +118,7 @@
 						<<ShowUnderEquip "over">>
 						<<set $tryOn.autoReset to true>>
 						<<crimeup `$tryOn.value / 100`>>
+						<<shopHoodCheck>>
 					<</link>>
 				<<else>>
 					<<link [[Leave|Shopping Centre Top]]>>
@@ -126,6 +127,7 @@
 						<<ShowUnderEquip "over">>
 						<<set $tryOn.autoReset to true>>
 						<<crimeup `$tryOn.value / 100`>>
+						<<shopHoodCheck>>
 					<</link>>
 				<</if>>
 				<<if $tryOn.value gt 0>>
@@ -160,7 +162,7 @@
 					<</link>>
 					<br>
 				<</if>>
-				<<link [[Leave with stolen clothes|Stolen Clothing Shop Result]]>><<shopClothingFilterReset>><</link>>
+				<<link [[Leave with stolen clothes|Stolen Clothing Shop Result]]>><<shopClothingFilterReset>><<shopHoodCheck>><</link>>
 				<br>
 			<</if>>
 		<</if>>
diff --git a/game/overworld-town/loc-shop/tryOn.twee b/game/overworld-town/loc-shop/tryOn.twee
index 1678109c47f55e3c5969047da2a33e90fbe3e538..cd3c29567eb079bf47e9884b120e1297328851d3 100644
--- a/game/overworld-town/loc-shop/tryOn.twee
+++ b/game/overworld-town/loc-shop/tryOn.twee
@@ -117,6 +117,14 @@
 				<<if $tryOn.ownedStored[_equip[_i]] isnot null and $tryOn.tryingOn[_equip[_i]] isnot null and $tryOn.ownedStored[_equip[_i]].name isnot "naked" and !_towels.includes($tryOn.ownedStored[_equip[_i]].name)>>
 					/*Send previously equipped clothes to wardrobe*/
 					<<wardrobeSend _equip[_i] $tryOn.ownedStored[_equip[_i]]>>
+					/*Make sure outfit parts don't get left behind*/
+					<<if $tryOn.ownedStored[_equip[_i]].outfitPrimary isnot undefined>>
+						<<for $_slot, $_item range $tryOn.ownedStored[_equip[_i]].outfitPrimary>>
+							<<if $_item isnot "broken" and $tryOn.ownedStored[$_slot].name isnot "naked" and !_towels.includes($tryOn.ownedStored[$_slot].name)>>
+								<<wardrobeSend $_slot $tryOn.ownedStored[$_slot]>>
+							<</if>>
+						<</for>>
+					<</if>>
 				<</if>>
 			<</for>>
 		<<case "wardrobe">>
diff --git a/img/clothes/upper/cowonesie/frayed_down.png b/img/clothes/upper/cowonesie/frayed_down.png
new file mode 100644
index 0000000000000000000000000000000000000000..3e474852b192574d8f687c6660fd02fa46b53c47
Binary files /dev/null and b/img/clothes/upper/cowonesie/frayed_down.png differ
diff --git a/img/clothes/upper/cowonesie/full_down.png b/img/clothes/upper/cowonesie/full_down.png
new file mode 100644
index 0000000000000000000000000000000000000000..da0de4c14c1332a1ff4395169723ef8729b25c67
Binary files /dev/null and b/img/clothes/upper/cowonesie/full_down.png differ
diff --git a/img/clothes/upper/cowonesie/tattered_down.png b/img/clothes/upper/cowonesie/tattered_down.png
new file mode 100644
index 0000000000000000000000000000000000000000..fa7fbedf184b25dddbbebed760ff41cf0b929805
Binary files /dev/null and b/img/clothes/upper/cowonesie/tattered_down.png differ
diff --git a/img/clothes/upper/cowonesie/torn_down.png b/img/clothes/upper/cowonesie/torn_down.png
new file mode 100644
index 0000000000000000000000000000000000000000..812acd37ac2835fdef5bde2259c53908b4e7ded5
Binary files /dev/null and b/img/clothes/upper/cowonesie/torn_down.png differ
diff --git a/img/clothes/upper/hoodie/acc_down.png b/img/clothes/upper/hoodie/acc_down.png
new file mode 100644
index 0000000000000000000000000000000000000000..c24a4ba9c22428c4c28bf3c1c0e3061dc004c3d4
Binary files /dev/null and b/img/clothes/upper/hoodie/acc_down.png differ
diff --git a/img/clothes/upper/hoodie/acc_down_gray.png b/img/clothes/upper/hoodie/acc_down_gray.png
new file mode 100644
index 0000000000000000000000000000000000000000..67dac0c3dc612ed88af3e80394964763c9130109
Binary files /dev/null and b/img/clothes/upper/hoodie/acc_down_gray.png differ
diff --git a/img/clothes/upper/hoodie/frayed_down.png b/img/clothes/upper/hoodie/frayed_down.png
new file mode 100644
index 0000000000000000000000000000000000000000..8b35f725bb4a42d4ff9b8e2d00e3edff6253e23e
Binary files /dev/null and b/img/clothes/upper/hoodie/frayed_down.png differ
diff --git a/img/clothes/upper/hoodie/frayed_down_gray.png b/img/clothes/upper/hoodie/frayed_down_gray.png
new file mode 100644
index 0000000000000000000000000000000000000000..c6096febe55259191d03dd123028678abf4086d9
Binary files /dev/null and b/img/clothes/upper/hoodie/frayed_down_gray.png differ
diff --git a/img/clothes/upper/hoodie/full_down.png b/img/clothes/upper/hoodie/full_down.png
new file mode 100644
index 0000000000000000000000000000000000000000..78551420a152b77c7057c3df1a369401ad739d9b
Binary files /dev/null and b/img/clothes/upper/hoodie/full_down.png differ
diff --git a/img/clothes/upper/hoodie/full_down_gray.png b/img/clothes/upper/hoodie/full_down_gray.png
new file mode 100644
index 0000000000000000000000000000000000000000..c28a816c4852ef8d7e3567582a4cbe0cd6f380cf
Binary files /dev/null and b/img/clothes/upper/hoodie/full_down_gray.png differ
diff --git a/img/clothes/upper/hoodie/tattered_down.png b/img/clothes/upper/hoodie/tattered_down.png
new file mode 100644
index 0000000000000000000000000000000000000000..9090b9b0b637768821bc7f5fe834338ccafb2dbf
Binary files /dev/null and b/img/clothes/upper/hoodie/tattered_down.png differ
diff --git a/img/clothes/upper/hoodie/tattered_down_gray.png b/img/clothes/upper/hoodie/tattered_down_gray.png
new file mode 100644
index 0000000000000000000000000000000000000000..bc7b52deb4ed4d5b60065fbb0a26b270d01347be
Binary files /dev/null and b/img/clothes/upper/hoodie/tattered_down_gray.png differ
diff --git a/img/clothes/upper/hoodie/torn_down.png b/img/clothes/upper/hoodie/torn_down.png
new file mode 100644
index 0000000000000000000000000000000000000000..a4028e984ea3923f880edd034779c7139a47d2ce
Binary files /dev/null and b/img/clothes/upper/hoodie/torn_down.png differ
diff --git a/img/clothes/upper/hoodie/torn_down_gray.png b/img/clothes/upper/hoodie/torn_down_gray.png
new file mode 100644
index 0000000000000000000000000000000000000000..0422a4dccef3dad49647b68d6d93019fd004677e
Binary files /dev/null and b/img/clothes/upper/hoodie/torn_down_gray.png differ
diff --git a/img/clothes/upper/monster/acc_down.png b/img/clothes/upper/monster/acc_down.png
new file mode 100644
index 0000000000000000000000000000000000000000..3b732f755ac708469d264bbd36c7d0f0a971d072
Binary files /dev/null and b/img/clothes/upper/monster/acc_down.png differ
diff --git a/img/clothes/upper/monster/acc_down_gray.png b/img/clothes/upper/monster/acc_down_gray.png
new file mode 100644
index 0000000000000000000000000000000000000000..3b732f755ac708469d264bbd36c7d0f0a971d072
Binary files /dev/null and b/img/clothes/upper/monster/acc_down_gray.png differ
diff --git a/img/clothes/upper/monster/frayed_down.png b/img/clothes/upper/monster/frayed_down.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a4f5d94539193345246893c9e7d4256be3c4611
Binary files /dev/null and b/img/clothes/upper/monster/frayed_down.png differ
diff --git a/img/clothes/upper/monster/frayed_down_gray.png b/img/clothes/upper/monster/frayed_down_gray.png
new file mode 100644
index 0000000000000000000000000000000000000000..910c4f4272073de7345a859e18ba523ddb4fd132
Binary files /dev/null and b/img/clothes/upper/monster/frayed_down_gray.png differ
diff --git a/img/clothes/upper/monster/full_down.png b/img/clothes/upper/monster/full_down.png
new file mode 100644
index 0000000000000000000000000000000000000000..9499bf4ab3a383eae7ff65bb014fdc616ad135ff
Binary files /dev/null and b/img/clothes/upper/monster/full_down.png differ
diff --git a/img/clothes/upper/monster/full_down_gray.png b/img/clothes/upper/monster/full_down_gray.png
new file mode 100644
index 0000000000000000000000000000000000000000..c910cbe70711d45f420fdf6f69badf69872dec0f
Binary files /dev/null and b/img/clothes/upper/monster/full_down_gray.png differ
diff --git a/img/clothes/upper/monster/tattered_down.png b/img/clothes/upper/monster/tattered_down.png
new file mode 100644
index 0000000000000000000000000000000000000000..14713da0130f9f959b2ccbe51e13d658aff8d282
Binary files /dev/null and b/img/clothes/upper/monster/tattered_down.png differ
diff --git a/img/clothes/upper/monster/tattered_down_gray.png b/img/clothes/upper/monster/tattered_down_gray.png
new file mode 100644
index 0000000000000000000000000000000000000000..93c49b0342984ab9ae4456f6a5955ac9dfbff5f5
Binary files /dev/null and b/img/clothes/upper/monster/tattered_down_gray.png differ
diff --git a/img/clothes/upper/monster/torn_down.png b/img/clothes/upper/monster/torn_down.png
new file mode 100644
index 0000000000000000000000000000000000000000..e304d64d8c14c5cf3dd8415fb893a1acb25c07a1
Binary files /dev/null and b/img/clothes/upper/monster/torn_down.png differ
diff --git a/img/clothes/upper/monster/torn_down_gray.png b/img/clothes/upper/monster/torn_down_gray.png
new file mode 100644
index 0000000000000000000000000000000000000000..a4ec80489eccf5762ee391a710eeadb968739a9e
Binary files /dev/null and b/img/clothes/upper/monster/torn_down_gray.png differ