diff --git a/js/003-data/miscData.js b/js/003-data/miscData.js
index 7cea54214556f4d5eb35a49d0962598fafc848cc..79b06b0afeb7eb905ff79032a6344949b0c04f5d 100644
--- a/js/003-data/miscData.js
+++ b/js/003-data/miscData.js
@@ -1912,180 +1912,292 @@ App.Data.misc = {
 			name: "Maternity lingerie",
 			value: "attractive lingerie for a pregnant woman",
 			fs: "FSRepopulationFocus",
-			unlock: {clothesBoughtMaternityLingerie: 1}
+			rs: "clothesBoughtMaternityLingerie"
 		},
 		{
 			name: "Bunny outfit",
 			value: "a bunny outfit",
 			fs: "FSGenderFundamentalist",
-			unlock: {clothesBoughtBunny: 1}
+			rs: "clothesBoughtBunny"
 		},
 		{
 			name: "Body oil",
 			value: "body oil",
 			fs: "FSPhysicalIdealist",
-			unlock: {clothesBoughtOil: 1}
+			rs: "clothesBoughtOil"
 		},
 		{
 			name: "Chattel habit",
 			value: "a chattel habit",
 			fs: "FSChattelReligionist",
-			unlock: {clothesBoughtHabit: 1}
+			rs: "clothesBoughtHabit"
 		},
 		{
 			name: "Conservative clothing",
 			value: "conservative clothing",
 			fs: "FSPaternalist",
-			unlock: {clothesBoughtConservative: 1}
+			rs: "clothesBoughtConservative"
 		},
 		{
 			name: "Harem gauze",
 			value: "harem gauze",
 			fs: "FSArabianRevivalist",
-			unlock: {clothesBoughtHarem: 1}
+			rs: "clothesBoughtHarem"
 		},
 		{
 			name: "Huipil",
 			value: "a huipil",
 			fs: "FSAztecRevivalist",
-			unlock: {clothesBoughtHuipil: 1}
+			rs: "clothesBoughtHuipil"
 		},
 		{
 			name: "Kimono",
 			value: "a kimono",
 			fs: "FSEdoRevivalist",
-			unlock: {clothesBoughtKimono: 1, continent: "Japan"}
+			rs: {
+				either: {
+					clothesBoughtKimono: 1,
+					continent: "Japan"
+				}
+			}
 		},
 		{
 			name: "Maternity dress",
 			value: "a maternity dress",
 			fs: "FSRepopulationFocus",
-			unlock: {clothesBoughtMaternityDress: 1}
+			rs: "clothesBoughtMaternityDress"
 		},
 		{
 			name: "Qipao (slutty)",
 			value: "a slutty qipao",
 			fs: "FSChineseRevivalist",
-			unlock: {clothesBoughtQipao: 1}
+			rs: "clothesBoughtQipao"
 		},
 		{
 			name: "Qipao (long)",
 			value: "a long qipao",
 			fs: "FSChineseRevivalist",
-			unlock: {clothesBoughtCultural: 1}
+			rs: "clothesBoughtCultural"
 		},
 		{
 			name: "Stretch pants and a crop-top",
 			value: "stretch pants and a crop-top",
 			fs: "FSHedonisticDecadence",
-			unlock: {clothesBoughtLazyClothes: 1}
+			rs: "clothesBoughtLazyClothes"
 		},
 		{
 			name: "Toga",
 			value: "a toga",
 			fs: "FSRomanRevivalist",
-			unlock: {clothesBoughtToga: 1}
+			rs: "clothesBoughtToga"
 		},
 		{
 			name: "Western clothing",
 			value: "Western clothing",
 			fs: "FSPastoralist",
-			unlock: {clothesBoughtWestern: 1}
+			rs: "clothesBoughtWestern"
 		},
 		{
 			name: "Courtesan dress",
 			value: "a courtesan dress",
 			fs: "FSSlaveProfessionalism",
-			unlock: {clothesBoughtCourtesan: 1}
+			rs: "clothesBoughtCourtesan"
 		},
 		{
 			name: "Bimbo outfit",
 			value: "a bimbo outfit",
 			fs: "FSIntellectualDependency",
-			unlock: {clothesBoughtBimbo: 1}
+			rs: "clothesBoughtBimbo"
 		},
 		{
 			name: "Petite admi outfit",
 			value: "petite admi outfit",
 			fs: "FSPetiteAdmiration",
-			unlock: {clothesBoughtPetite: 1}
-		},
-		{name: "Battlearmor", value: "battlearmor", unlock: {clothesBoughtMilitary: 1}},
-		{name: "Military uniform", value: "a military uniform", unlock: {clothesBoughtMilitary: 1}},
-		{name: "Red Army uniform", value: "a red army uniform", unlock: {clothesBoughtMilitary: 1}},
-		{name: "Battledress", value: "battledress", unlock: {clothesBoughtMilitary: 1}},
-		{name: "Biyelgee costume", value: "a biyelgee costume", unlock: {clothesBoughtCultural: 1}},
-		{name: "Dirndl", value: "a dirndl", unlock: {clothesBoughtCultural: 1}},
-		{name: "Lederhosen", value: "lederhosen", unlock: {clothesBoughtCultural: 1}},
-		{name: "Mounty outfit", value: "a mounty outfit", unlock: {clothesBoughtCultural: 1}},
-		{name: "Hanbok", value: "a hanbok", unlock: {clothesBoughtCultural: 1}},
-		{name: "Burqa", value: "a burqa", unlock: {clothesBoughtMiddleEastern: 1, continent: "the Middle East"}},
-		{name: "Niqab and abaya", value: "a niqab and abaya", unlock: {clothesBoughtMiddleEastern: 1, continent: "the Middle East"}},
-		{name: "Hijab and blouse", value: "a hijab and blouse", unlock: {clothesBoughtMiddleEastern: 1, clothesBoughtConservative: 1, continent: "the Middle East"}},
-		{name: "Burkini", value: "a burkini", unlock: {clothesBoughtMiddleEastern: 1, clothesBoughtSwimwear: 1, continent: "the Middle East"}},
-		{name: "Santa dress", value: "a Santa dress", unlock: {clothesBoughtCostume: 1}},
-
-		{name: "Klan robe", value: "a klan robe", unlock: {clothesBoughtPol: 1}},
-		{name: "Slutty klan robe", value: "a slutty klan robe", unlock: {clothesBoughtPol: 1}},
-		{name: "Schutzstaffel uniform", value: "a schutzstaffel uniform", unlock: {clothesBoughtPol: 1}},
-		{name: "Slutty schutzstaffel uniform", value: "a slutty schutzstaffel uniform", unlock: {clothesBoughtPol: 1}},
-
-		{name: "Nice business attire", value: "nice business attire", unlock: {clothesBoughtCareer: 1}},
-		{name: "Nurse (nice)", value: "a nice nurse outfit", unlock: {clothesBoughtCareer: 1}},
-		{name: "Police uniform", value: "a police uniform", unlock: {clothesBoughtCareer: 1}},
-		{name: "Maid (nice)", value: "a nice maid outfit", unlock: {clothesBoughtCareer: 1, "PC.career": "servant"}},
-
-		{name: "Ballgown", value: "a ball gown", unlock: {clothesBoughtDresses: 1}},
-		{name: "Gothic lolita dress", value: "a gothic lolita dress", unlock: {clothesBoughtDresses: 1}},
-
-		{name: "Cybersuit", value: "a cybersuit", unlock: {clothesBoughtBodysuits: 1}},
-		{name: "Latex catsuit", value: "a latex catsuit", unlock: {clothesBoughtBodysuits: 1}},
-
-		{name: "Button-up shirt and panties", value: "a button-up shirt and panties", unlock: {clothesBoughtCasual: 1}},
-		{name: "Button-up shirt", value: "a button-up shirt", unlock: {clothesBoughtCasual: 1}},
-		{name: "Cutoffs", value: "cutoffs", unlock: {clothesBoughtCasual: 1}},
-		{name: "Jeans", value: "jeans", unlock: {clothesBoughtCasual: 1}},
-		{name: "Leather pants and a tube top", value: "leather pants and a tube top", unlock: {clothesBoughtCasual: 1}},
-		{name: "Leather pants", value: "leather pants", unlock: {clothesBoughtCasual: 1}},
-		{name: "Oversized t-shirt", value: "an oversized t-shirt", unlock: {clothesBoughtCasual: 1}},
-		{name: "Sweater and cutoffs", value: "a sweater and cutoffs", unlock: {clothesBoughtCasual: 1}},
-		{name: "Sweater and panties", value: "a sweater and panties", unlock: {clothesBoughtCasual: 1}},
-		{name: "Sweater", value: "a sweater", unlock: {clothesBoughtCasual: 1}},
-		{name: "T-shirt and jeans", value: "a t-shirt and jeans", unlock: {clothesBoughtCasual: 1}},
-		{name: "T-shirt and panties", value: "a t-shirt and panties", unlock: {clothesBoughtCasual: 1}},
-		{name: "T-shirt", value: "a t-shirt", unlock: {clothesBoughtCasual: 1}},
-		{name: "Tank-top and panties", value: "a tank-top and panties", unlock: {clothesBoughtCasual: 1}},
-		{name: "Tank-top", value: "a tank-top", unlock: {clothesBoughtCasual: 1}},
-		{name: "Tube top", value: "a tube top", unlock: {clothesBoughtCasual: 1}},
-
-		{name: "Boyshorts", value: "boyshorts", unlock: {clothesBoughtUnderwear: 1}},
-		{name: "Bra", value: "a bra", unlock: {clothesBoughtUnderwear: 1}},
-		{name: "Kitty lingerie", value: "kitty lingerie", unlock: {clothesBoughtUnderwear: 1}},
-		{name: "Panties and pasties", value: "panties and pasties", unlock: {clothesBoughtUnderwear: 1}},
-		{name: "Skimpy loincloth", value: "a skimpy loincloth", unlock: {clothesBoughtUnderwear: 1}},
-		{name: "Thong", value: "a thong", unlock: {clothesBoughtUnderwear: 1}},
-		{name: "Pasties", value: "pasties", unlock: {clothesBoughtUnderwear: 1}},
-
-		{name: "Leather pants and pasties", value: "leather pants and pasties", unlock: {clothesBoughtUnderwear: 1, clothesBoughtCasual: 1}},
-		{name: "T-shirt and thong", value: "a t-shirt and thong", unlock: {clothesBoughtUnderwear: 1, clothesBoughtCasual: 1}},
-		{name: "Tube top and thong", value: "a tube top and thong", unlock: {clothesBoughtUnderwear: 1, clothesBoughtCasual: 1}},
-		{name: "Oversized t-shirt and boyshorts", value: "an oversized t-shirt and boyshorts", unlock: {clothesBoughtUnderwear: 1, clothesBoughtCasual: 1}},
-
-		{name: "Sport shorts and a sports bra", value: "sport shorts and a sports bra", unlock: {clothesBoughtSports: 1}},
-		{name: "Sport shorts", value: "sport shorts", unlock: {clothesBoughtSports: 1}},
-		{name: "Sports bra", value: "a sports bra", unlock: {clothesBoughtSports: 1}},
-
-		{name: "Sport shorts and a t-shirt", value: "sport shorts and a t-shirt", unlock: {clothesBoughtSports: 1, clothesBoughtCasual: 1}}, // note both unlocks should be met for this one, not just either.
-
-		{name: "Pony outfit (nice)", value: "a nice pony outfit", unlock: {clothesBoughtPony: 1}},
-		{name: "Pony outfit (slutty)", value: "a slutty pony outfit", unlock: {clothesBoughtPony: 1}},
-
-		{name: "Monokini", value: "a monokini", unlock: {clothesBoughtSwimwear: 1}},
-		{name: "One-piece swimsuit", value: "a one-piece swimsuit", unlock: {clothesBoughtSwimwear: 1}},
-
-		{name: "Striped bra", value: "a striped bra", unlock: {clothesBoughtPantsu: 1, continent: "Japan"}},
-		{name: "Striped panties", value: "striped panties", unlock: {clothesBoughtPantsu: 1, continent: "Japan"}},
-		{name: "Striped underwear", value: "striped underwear", unlock: {clothesBoughtPantsu: 1, continent: "Japan"}},
+			rs: "clothesBoughtPetite"
+		},
+		{name: "Battlearmor", value: "battlearmor", rs: "clothesBoughtMilitary"},
+		{name: "Military uniform", value: "a military uniform", rs: "clothesBoughtMilitary"},
+		{name: "Red Army uniform", value: "a red army uniform", rs: "clothesBoughtMilitary"},
+		{name: "Battledress", value: "battledress", rs: "clothesBoughtMilitary"},
+		{name: "Biyelgee costume", value: "a biyelgee costume", rs: "clothesBoughtCultural"},
+		{name: "Dirndl", value: "a dirndl", rs: "clothesBoughtCultural"},
+		{name: "Lederhosen", value: "lederhosen", rs: "clothesBoughtCultural"},
+		{name: "Mounty outfit", value: "a mounty outfit", rs: "clothesBoughtCultural"},
+		{name: "Hanbok", value: "a hanbok", rs: "clothesBoughtCultural"},
+		{
+			name: "Burqa",
+			value: "a burqa",
+			rs: {
+				either: {
+					clothesBoughtMiddleEastern: 1,
+					continent: "the Middle East"
+				}
+			}
+		},
+		{
+			name: "Niqab and abaya",
+			value: "a niqab and abaya",
+			rs: {
+				either: {
+					clothesBoughtMiddleEastern: 1,
+					continent: "the Middle East"
+				}
+			}
+		},
+		{
+			name: "Hijab and blouse",
+			value: "a hijab and blouse",
+			rs: {
+				either: {
+					clothesBoughtConservative: 1,
+					continent: "the Middle East"
+				}
+			}
+		},
+		{
+			name: "Burkini",
+			value: "a burkini",
+			rs: {
+				clothesBoughtSwimwear: 1,
+				either: {
+					clothesBoughtMiddleEastern: 1,
+					continent: "the Middle East"
+				}
+			}
+		},
+		{name: "Santa dress", value: "a Santa dress", rs: "clothesBoughtCostume"},
+
+		{name: "Klan robe", value: "a klan robe", rs: "clothesBoughtPol"},
+		{name: "Slutty klan robe", value: "a slutty klan robe", rs: "clothesBoughtPol"},
+		{name: "Schutzstaffel uniform", value: "a schutzstaffel uniform", rs: "clothesBoughtPol"},
+		{name: "Slutty schutzstaffel uniform", value: "a slutty schutzstaffel uniform", rs: "clothesBoughtPol"},
+
+		{name: "Nice business attire", value: "nice business attire", rs: "clothesBoughtCareer"},
+		{name: "Nurse (nice)", value: "a nice nurse outfit", rs: "clothesBoughtCareer"},
+		{name: "Police uniform", value: "a police uniform", rs: "clothesBoughtCareer"},
+		{
+			name: "Maid (nice)",
+			value: "a nice maid outfit",
+			rs: {
+				either: {
+					clothesBoughtCareer: 1,
+					PC: {
+						career: "servant"
+					}
+				}
+			}
+		},
+
+		{name: "Ballgown", value: "a ball gown", rs: "clothesBoughtDresses"},
+		{name: "Gothic lolita dress", value: "a gothic lolita dress", rs: "clothesBoughtDresses"},
+
+		{name: "Cybersuit", value: "a cybersuit", rs: "clothesBoughtBodysuits"},
+		{name: "Latex catsuit", value: "a latex catsuit", rs: "clothesBoughtBodysuits"},
+
+		{name: "Button-up shirt and panties", value: "a button-up shirt and panties", rs: "clothesBoughtCasual"},
+		{name: "Button-up shirt", value: "a button-up shirt", rs: "clothesBoughtCasual"},
+		{name: "Cutoffs", value: "cutoffs", rs: "clothesBoughtCasual"},
+		{name: "Jeans", value: "jeans", rs: "clothesBoughtCasual"},
+		{name: "Leather pants and a tube top", value: "leather pants and a tube top", rs: "clothesBoughtCasual"},
+		{name: "Leather pants", value: "leather pants", rs: "clothesBoughtCasual"},
+		{name: "Oversized t-shirt", value: "an oversized t-shirt", rs: "clothesBoughtCasual"},
+		{name: "Sweater and cutoffs", value: "a sweater and cutoffs", rs: "clothesBoughtCasual"},
+		{name: "Sweater and panties", value: "a sweater and panties", rs: "clothesBoughtCasual"},
+		{name: "Sweater", value: "a sweater", rs: "clothesBoughtCasual"},
+		{name: "T-shirt and jeans", value: "a t-shirt and jeans", rs: "clothesBoughtCasual"},
+		{name: "T-shirt and panties", value: "a t-shirt and panties", rs: "clothesBoughtCasual"},
+		{name: "T-shirt", value: "a t-shirt", rs: "clothesBoughtCasual"},
+		{name: "Tank-top and panties", value: "a tank-top and panties", rs: "clothesBoughtCasual"},
+		{name: "Tank-top", value: "a tank-top", rs: "clothesBoughtCasual"},
+		{name: "Tube top", value: "a tube top", rs: "clothesBoughtCasual"},
+
+		{name: "Boyshorts", value: "boyshorts", rs: "clothesBoughtUnderwear"},
+		{name: "Bra", value: "a bra", rs: "clothesBoughtUnderwear"},
+		{name: "Kitty lingerie", value: "kitty lingerie", rs: "clothesBoughtUnderwear"},
+		{name: "Panties and pasties", value: "panties and pasties", rs: "clothesBoughtUnderwear"},
+		{name: "Skimpy loincloth", value: "a skimpy loincloth", rs: "clothesBoughtUnderwear"},
+		{name: "Thong", value: "a thong", rs: "clothesBoughtUnderwear"},
+		{name: "Pasties", value: "pasties", rs: "clothesBoughtUnderwear"},
+
+		{
+			name: "Leather pants and pasties",
+			value: "leather pants and pasties",
+			rs: {
+				clothesBoughtUnderwear: 1,
+				clothesBoughtCasual: 1
+			}
+		},
+		{
+			name: "T-shirt and thong",
+			value: "a t-shirt and thong",
+			rs: {
+				clothesBoughtUnderwear: 1,
+				clothesBoughtCasual: 1
+			}
+		},
+		{
+			name: "Tube top and thong",
+			value: "a tube top and thong",
+			rs: {
+				clothesBoughtUnderwear: 1,
+				clothesBoughtCasual: 1
+			}
+		},
+		{
+			name: "Oversized t-shirt and boyshorts",
+			value: "an oversized t-shirt and boyshorts",
+			rs: {
+				clothesBoughtUnderwear: 1,
+				clothesBoughtCasual: 1
+			}
+		},
+		{name: "Sport shorts and a sports bra", value: "sport shorts and a sports bra", rs: "clothesBoughtSports"},
+		{name: "Sport shorts", value: "sport shorts", rs: "clothesBoughtSports"},
+		{name: "Sports bra", value: "a sports bra", rs: "clothesBoughtSports"},
+		{
+			name: "Sport shorts and a t-shirt",
+			value: "sport shorts and a t-shirt",
+			rs: {
+				clothesBoughtSports: 1,
+				clothesBoughtCasual: 1
+			}
+		},
+		{name: "Pony outfit (nice)", value: "a nice pony outfit", rs: "clothesBoughtPony"},
+		{name: "Pony outfit (slutty)", value: "a slutty pony outfit", rs: "clothesBoughtPony"},
+
+		{name: "Monokini", value: "a monokini", rs: "clothesBoughtSwimwear"},
+		{name: "One-piece swimsuit", value: "a one-piece swimsuit", rs: "clothesBoughtSwimwear"},
+
+		{
+			name: "Striped bra",
+			value: "a striped bra",
+			rs: {
+				either: {
+					clothesBoughtPantsu: 1,
+					continent: "Japan"
+				}
+			}
+		},
+		{
+			name: "Striped panties",
+			value: "striped panties",
+			rs: {
+				either: {
+					clothesBoughtPantsu: 1,
+					continent: "Japan"
+				}
+			}
+		},
+		{
+			name: "Striped underwear",
+			value: "striped underwear",
+			rs: {
+				either: {
+					clothesBoughtPantsu: 1,
+					continent: "Japan"
+				}
+			}
+		},
 
 		// "Normal" things:
 		{name: "Apron", value: "an apron"},
@@ -2111,7 +2223,7 @@ App.Data.misc = {
 		{name: "Succubus costume", value: "a succubus outfit"},
 		{name: "Suit (slutty)", value: "slutty business attire"},
 
-		// {name: "Let them choose", value: "choosing her own clothes"}, //an option, but not one we need to return.  Human eyes only.
+		{name: "Let them choose", value: "choosing her own clothes"},
 		{name: "Haltertop dress", value: "a halter top dress"},
 		{name: "Slave gown", value: "a slave gown"}
 	],
@@ -2120,7 +2232,7 @@ App.Data.misc = {
 			name: "Chains",
 			value: "chains",
 			fs: "FSDegradationist",
-			unlock: {clothesBoughtChains: 1}
+			rs: "clothesBoughtChains"
 		},
 		{name: "Go naked", value: "no clothing"},
 		{name: "Penitent nun", value: "a penitent nuns habit"},
@@ -2139,10 +2251,16 @@ App.Data.misc = {
 		{name: "Bell", value: "bell collar"},
 		{name: "Cowbell", value: "leather with cowbell"},
 		{
-			name: "Bowtie collar", value: "bowtie", fs: "FSGenderFundamentalist", rs: "clothesBoughtBunny"
+			name: "Bowtie collar",
+			value: "bowtie",
+			fs: "FSGenderFundamentalist",
+			rs: "clothesBoughtBunny"
 		},
 		{
-			name: "Ancient Egyptian", value: "ancient Egyptian", fs: "FSEgyptianRevivalist", rs: "clothesBoughtEgypt"
+			name: "Ancient Egyptian",
+			value: "ancient Egyptian",
+			fs: "FSEgyptianRevivalist",
+			rs: "clothesBoughtEgypt"
 		},
 	],
 
@@ -2195,66 +2313,230 @@ App.Data.misc = {
 		{
 			name: "1st Trimester belly",
 			value: "a small empathy belly",
-			fs: "repopulation",
+			fs: "FSRepopulationFocus",
 			rs: "boughtBelly"
 		},
 		{
 			name: "2nd Trimester belly",
 			value: "a medium empathy belly",
-			fs: "repopulation",
+			fs: "FSRepopulationFocus",
 			rs: "boughtBelly"
 		},
 		{
 			name: "3rd Trimester belly",
 			value: "a large empathy belly",
-			fs: "repopulation",
+			fs: "FSRepopulationFocus",
 			rs: "boughtBelly"
 		},
 		{
 			name: "3rd Trimester twins belly",
 			value: "a huge empathy belly",
-			fs: "repopulation",
+			fs: "FSRepopulationFocus",
 			rs: "boughtBelly"
 		}
 	],
 
-	vaginalAccessories: [
-		{name: "None", value: "none"},
-		{name: "Bullet vibrator", value: "bullet vibrator"},
-		{name: "Smart bullet vibrator", value: "smart bullet vibrator"},
-		{name: "Dildo", value: "dildo"},
-		{name: "Long dildo", value: "long dildo", rs: "buyBigDildos"},
-		{name: "Large dildo", value: "large dildo"},
-		{name: "Long, large dildo", value: "long, large dildo", rs: "buyBigDildos"},
-		{name: "Huge dildo", value: "huge dildo"},
-		{name: "Long, huge dildo", value: "long, huge dildo", rs: "buyBigDildos"}
+	vaginalAccessories: [{
+			name: "None",
+			value: "none"
+		},
+		{
+			name: "Bullet vibrator",
+			value: "bullet vibrator"
+		},
+		{
+			name: "Smart bullet vibrator",
+			value: "smart bullet vibrator",
+			rs: "toysBoughtSmartVibes"
+		},
+		{
+			name: "Dildo",
+			value: "dildo"
+		},
+		{
+			name: "Long dildo",
+			value: "long dildo",
+			rs: "buyBigDildos"
+		},
+		{
+			name: "Large dildo",
+			value: "large dildo"
+		},
+		{
+			name: "Long, large dildo",
+			value: "long, large dildo",
+			rs: "buyBigDildos"
+		},
+		{
+			name: "Huge dildo",
+			value: "huge dildo"
+		},
+		{
+			name: "Long, huge dildo",
+			value: "long, huge dildo",
+			rs: "buyBigDildos"
+		}
 	],
 
 	vaginalAttachments: [
 		{name: "None", value: "none"},
-		{name: "Vibrating attachment", value: "vibrator"}
+		{
+			name: "Vibrating attachment",
+			value: "vibrator",
+		}
 	],
 
 	dickAccessories: [
-		{name: "None", value: "none"}
+		{name: "None", value: "none"},
+		{
+			name: "Bullet vibrator",
+			value: "bullet vibrator"
+		},
+		{
+			name: "Smart bullet vibrator",
+			value: "smart bullet vibrator"
+		}
 	],
 
-	buttplugs: [
-		{name: "None", value: "none"},
-		{name: "Standard plug", value: "plug"},
-		{name: "Long plug", value: "long plug", rs: "buyBigPlugs"},
-		{name: "Large plug", value: "large plug"},
-		{name: "Long, large plug", value: "long, large plug", rs: "buyBigPlugs"},
-		{name: "Huge plug", value: "huge plug"},
-		{name: "Long, huge plug", value: "long, huge plug", rs: "buyBigPlugs"}
+	buttplugs: [{
+			name: "None",
+			value: "none"
+		},
+		{
+			name: "Standard plug",
+			value: "plug"
+		},
+		{
+			name: "Long plug",
+			value: "long plug",
+			rs: "toysBoughtButtPlugs"
+		},
+		{
+			name: "Large plug",
+			value: "large plug"
+		},
+		{
+			name: "Long, large plug",
+			value: "long, large plug",
+			rs: "toysBoughtButtPlugs",
+		},
+		{
+			name: "Huge plug",
+			value: "huge plug",
+		},
+		{
+			name: "Long, huge plug",
+			value: "long, huge plug",
+			rs: "toysBoughtButtPlugs",
+		}
 	],
 
 	buttplugAttachments: [
 		{name: "None", value: "none"},
-		{name: "Tail", value: "tail", rs: "buyTails"},
-		{name: "Fox tail", value: "fox tail", rs: "buyTails"},
-		{name: "Cat tail", value: "cat tail", rs: "buyTails"},
-		{name: "Cow tail", value: "cow tail", rs: "buyTails"}
+		{name: "Tail", value: "tail", rs: "toysBoughtButtPlugTails"},
+		{name: "Fox tail", value: "fox tail", rs: "toysBoughtButtPlugTails"},
+		{name: "Cat tail", value: "cat tail", rs: "toysBoughtButtPlugTails"},
+		{name: "Cow tail", value: "cow tail", rs: "toysBoughtButtPlugTails"}
+	],
+
+	chastityDevices: [
+		// '.value' must be a string, so using update slave so I can update multiple values.
+		{
+			name: "None",
+			value: "none",
+			updateSlave: {
+				choosesOwnChastity: 0,
+				chastityAnus: 0,
+				chastityPenis: 0,
+				chastityVagina: 0
+			},
+		},
+		{
+			name: "Anal chastity",
+			value: "anal chastity",
+			updateSlave: {
+				choosesOwnChastity: 0,
+				chastityAnus: 1,
+				chastityPenis: 0,
+				chastityVagina: 0
+			}
+		},
+		{
+			name: "Chastity belt",
+			value: "chastity belt",
+			updateSlave: {
+				choosesOwnChastity: 0,
+				chastityAnus: 0,
+				chastityPenis: 0,
+				chastityVagina: 1
+			},
+		},
+		{
+			name: "Combined chastity belt",
+			value: "combined chastity belt",
+			updateSlave: {
+				choosesOwnChastity: 0,
+				chastityAnus: 1,
+				chastityPenis: 0,
+				chastityVagina: 1
+			},
+		},
+		{
+			name: "Chastity cage",
+			value: "chastity cage",
+			updateSlave: {
+				choosesOwnChastity: 0,
+				chastityAnus: 0,
+				chastityPenis: 1,
+				chastityVagina: 0
+			},
+		},
+		{
+			name: "Combined chastity cage",
+			value: "combined chastity cage",
+			updateSlave: {
+				choosesOwnChastity: 0,
+				chastityAnus: 1,
+				chastityPenis: 1,
+				chastityVagina: 0
+			},
+		},
+		{
+			name: "Genital chastity",
+			value: "genital chastity",
+			updateSlave: {
+				choosesOwnChastity: 0,
+				chastityAnus: 0,
+				chastityPenis: 1,
+				chastityVagina: 1
+			},
+		},
+		{
+			name: "Full chastity",
+			value: "full chastity",
+			updateSlave: {
+				choosesOwnChastity: 0,
+				chastityAnus: 1,
+				chastityPenis: 1,
+				chastityVagina: 1
+			},
+		},
+		{
+			name: "Choose own chastity",
+			value: "choose own chastity",
+			fs: "FSRestart",
+			updateSlave: {
+				choosesOwnChastity: 1
+			},
+		},
+		{
+			name: "Revoke choosing own chastity",
+			value: "revoke choosing own chastity",
+			fs: "FSRestart",
+			updateSlave: {
+				choosesOwnChastity: 0
+			},
+		},
 	],
 
 	facilityCareers: ["be confined in the arcade", "be confined in the cellblock", "be the Attendant", "be the DJ", "be the Farmer", "be the Madam", "be the Matron", "be the Milkmaid", "be the Nurse", "be the Schoolteacher", "be the Stewardess", "be the Wardeness", "be your Concubine", "get treatment in the clinic", "learn in the schoolroom", "live with your Head Girl", "rest in the spa", "serve in the club", "serve in the master suite", "work as a farmhand", "work as a nanny", "work as a servant", "work in the brothel", "work in the dairy"],
diff --git a/src/art/artJS.js b/src/art/artJS.js
index 022fbeca7b95061e5a5227091d7a07371f53f617..8d0bb9571fbb917eaa520c03937ec924e9abd7d6 100644
--- a/src/art/artJS.js
+++ b/src/art/artJS.js
@@ -51,6 +51,42 @@ App.Art.SlaveArtElement = function(artSlave, artSize, UIDisplay) {
 	}
 };
 
+/**
+ * @param {App.Entity.SlaveState} artSlave Slave
+ * @param {number} artSize Image size/center:
+ * * 3: Large, right. Example: long slave description.
+ * * 2: Medium, right. Example: random events.
+ * * 1: Small, left. Example: lists.
+ * * 0: Tiny, left. Example: facilities
+ * @param {string} elementID the html element that is being updated
+ * @param {number} [UIDisplay] (optional, only used by legacy art): icon UI Display for vector art, 1 for on
+ */
+App.Art.refreshSlaveArt = function(artSlave, artSize, elementID, UIDisplay=0) {
+	if ($('#'+elementID).length) {
+		if (V.seeImages === 1 && V.eventDescription !== 1) {
+			let image = document.createElement('div');
+			if (artSize === 3) {
+				if (V.imageChoice === 1) {
+					image.className = "imageRef lrgVector";
+				} else {
+					image.className = "imageRef lrgRender";
+				}
+				let mask = document.createElement('div');
+				mask.className = "mask";
+				mask.textContent = " ";
+				image.appendChild(mask);
+			} else if (artSize === 2) {
+				image.className = "imageRef medImg";
+			} else if (artsize < 2) {
+				image.className = "imageRef smlImg";
+			}
+			image.appendChild(App.Art.SlaveArtElement(artSlave, artSize, UIDisplay));
+			return jQuery('#'+elementID).empty().append(image);
+		}
+	}
+	return;
+};
+
 window.ArtControlRendered = function ArtControlRendered(slave, sizePlacement) {
 	return App.Art.elementToMarkup(App.Art.renderedArtElement(slave, sizePlacement));
 };
diff --git a/src/endWeek/saChoosesOwnClothes.js b/src/endWeek/saChoosesOwnClothes.js
index 35eb146b400703731668e816b4eeb323edffce9b..5deb57be435a13947a62eb259c85d5e007fd9d23 100644
--- a/src/endWeek/saChoosesOwnClothes.js
+++ b/src/endWeek/saChoosesOwnClothes.js
@@ -207,16 +207,16 @@ window.saChoosesOwnClothes = (function() {
 			}
 		} else if (slave.devotion <= 20) {
 			clothing.push({text: `${He} uses the ability to select outfits to cover up with comfortable cutoffs and a t-shirt.`, clothes: "cutoffs and a t-shirt"});
-			if (isClothingAccessible.entry("a hijab and blouse")) {
+			if (isClothingAccessible.entry("a hijab and blouse") === true) {
 				clothing.push({text: `${He} uses the ability to select outfits to cover up with the most conservative clothing ${he} can find.`, clothes: "a hijab and blouse"});
 			}
-			if (isClothingAccessible.entry("conservative clothing")) {
+			if (isClothingAccessible.entry("conservative clothing") === true) {
 				clothing.push({text: `${He} uses the ability to select outfits to cover up with the most conservative clothing ${he} can find.`, clothes: "conservative clothing"});
 			}
-			if (isClothingAccessible.entry("a kimono")) {
+			if (isClothingAccessible.entry("a kimono") === true) {
 				clothing.push({text: `${He} uses the ability to select outfits to cover ${himself} with a kimono.`, clothes: "a kimono"});
 			}
-			if (isClothingAccessible.entry("stretch pants and a crop-top")) {
+			if (isClothingAccessible.entry("stretch pants and a crop-top") === true) {
 				clothing.push({text: `${He} uses the ability to select outfits to cover up with stretch pants and a crop-top, though ${he} wishes it didn't have lewd comments printed on it.`, clothes: "stretch pants and a crop-top"});
 			}
 			selection = jsEither(clothing);
@@ -228,12 +228,12 @@ window.saChoosesOwnClothes = (function() {
 					wardrobeAssignment.push({text: `and wears a slutty nurse outfit to make it clear just how much this nurse needs ${his} daily lay.`, clothes: "a slutty nurse outfit"});
 				} else if (slave.energy > 80) {
 					wardrobeAssignment.push({text: `and wears a slutty nurse outfit to show off ${his} body and arouse ${his} patients.`, clothes: "a slutty nurse outfit"});
-					if (isClothingAccessible.entry("a nice nurse outfit")) {
+					if (isClothingAccessible.entry("a nice nurse outfit") === true) {
 						wardrobeAssignment.push({text: `and wears a nice nurse outfit to look professional before ${his} patients.`, clothes: "a nice nurse outfit"});
 					}
 					wardrobeAssignment.push({text: `and wears a slutty nurse outfit to show to a little skin as ${he} cares for ${his} patients.`, clothes: "a slutty nurse outfit"});
 				} else {
-					if (isClothingAccessible.entry("a nice nurse outfit")) {
+					if (isClothingAccessible.entry("a nice nurse outfit") === true) {
 						wardrobeAssignment.push({text: `and wears a nice nurse outfit to look professional before ${his} patients.`, clothes: "a nice nurse outfit"});
 					}
 					wardrobeAssignment.push({text: `and wears a slutty nurse outfit to show to a little skin as ${he} cares for ${his} patients.`, clothes: "a slutty nurse outfit"});
@@ -242,25 +242,25 @@ window.saChoosesOwnClothes = (function() {
 				if (slave.energy > 95 || slave.need > 100) {
 					wardrobeAssignment.push({text: `and wears a slutty suit to be certain nothing blocks ${him} from getting the sex ${he} needs.`, clothes: "slutty business attire"});
 				} else if (slave.energy > 80) {
-					if (isClothingAccessible.entry("nice business attire")) {
+					if (isClothingAccessible.entry("nice business attire") === true) {
 						wardrobeAssignment.push({text: `and wears a nice suit to show ${he} means business.`, clothes: "nice business attire"});
 					}
 					wardrobeAssignment.push({text: `and wears a slutty suit to entice and arouse while still looking managerial.`, clothes: "slutty business attire"});
 					wardrobeAssignment.push({text: `and wears a slutty suit to entice and arouse while still looking managerial.`, clothes: "slutty business attire"});
 				} else {
-					if (isClothingAccessible.entry("nice business attire")) {
+					if (isClothingAccessible.entry("nice business attire") === true) {
 						wardrobeAssignment.push({text: `and wears a nice suit to show ${he} means business.`, clothes: "nice business attire"});
 					}
 					wardrobeAssignment.push({text: `and wears a slutty suit to entice and arouse while still looking managerial.`, clothes: "slutty business attire"});
 				}
 			} else if (slave.assignment === "be the Milkmaid") {
 				if (slave.energy > 95 || slave.need > 100) {
-					if (isClothingAccessible.entry("body oil")) {
+					if (isClothingAccessible.entry("body oil") === true) {
 						wardrobeAssignment.push({text: `and coats ${himself} with oil to better slip between ${his} cows as ${he} pleasures them.`, clothes: "body oil"});
 					}
 					wardrobeAssignment.push({text: `but goes nude to not be slowed down while moving between ${his} charges.`, clothes: "no clothing"});
 				} else {
-					if (isClothingAccessible.entry("a nice maid outfit")) {
+					if (isClothingAccessible.entry("a nice maid outfit") === true) {
 						wardrobeAssignment.push({text: `and wears a sturdy maid outfit, since anything else might be damaged by ${his} hard work with the cows.`, clothes: "a nice maid outfit"});
 					}
 					wardrobeAssignment.push({text: `and puts on a proper pair of worker's overalls, but not much else.`, clothes: "overalls"});
@@ -268,36 +268,36 @@ window.saChoosesOwnClothes = (function() {
 					wardrobeAssignment.push({text: `and opts to don a cheerleader outfit to help cheer the cows on.`, clothes: "a cheerleader outfit"});
 					wardrobeAssignment.push({text: `and dresses up as a succubus since ${he}'ll be drawing plenty of fluids.`, clothes: "a succubus outfit"});
 					wardrobeAssignment.push({text: `and slips into some spats and a tank top since ${he} feels a workout coming on.`, clothes: "spats and a tank top"});
-					if (isClothingAccessible.entry("Western clothing")) {
+					if (isClothingAccessible.entry("Western clothing") === true) {
 						wardrobeAssignment.push({text: `and wears an appropriate cowgirl outfit. ${His} bare ass walking past is sure to amuse ${his} charges.`, clothes: "Western clothing"});
 					}
-					if (isClothingAccessible.entry("stretch pants and a crop-top")) {
+					if (isClothingAccessible.entry("stretch pants and a crop-top") === true) {
 						wardrobeAssignment.push({text: `and slips into some comfy stretch pants to relax as ${he} works the cows.`, clothes: "stretch pants and a crop-top"});
 					}
 					if (State.variables.cumSlaves > 2) {
 						wardrobeAssignment.push({text: `and wears a slutty nurse outfit to help keep ${his} charges hard.`, clothes: "a slutty nurse outfit"});
 						wardrobeAssignment.push({text: `and wears nothing but sexy lingerie to help keep ${his} charges hard.`, clothes: "attractive lingerie"});
 						wardrobeAssignment.push({text: `and wears the skimpiest bikini on hand to help keep ${his} charges hard.`, clothes: "a string bikini"});
-						if (isClothingAccessible.entry("body oil")) {
+						if (isClothingAccessible.entry("body oil") === true) {
 							wardrobeAssignment.push({text: `and coats ${himself} in oil for ${his} charges to savor.`, clothes: "body oil"});
 						}
 					}
 				}
 			} else if (slave.assignment === "be your Head Girl") {
-				if (isClothingAccessible.entry("a military uniform")) {
+				if (isClothingAccessible.entry("a military uniform") === true) {
 					wardrobeAssignment.push({text: `and wears a military uniform to give ${him} that extra touch of authority.`, clothes: "a military uniform"});
 				}
-				if (isClothingAccessible.entry("a schutzstaffel uniform")) {
+				if (isClothingAccessible.entry("a schutzstaffel uniform") === true) {
 					wardrobeAssignment.push({text: `and wears a schutzstaffel uniform to give ${him} that extra touch of authority.`, clothes: "a schutzstaffel uniform"});
 					wardrobeAssignment.push({text: `and wears a slutty schutzstaffel uniform to give ${him} that extra touch of authority.`, clothes: "a slutty schutzstaffel uniform"});
 				}
-				if (isClothingAccessible.entry("a red army uniform")) {
+				if (isClothingAccessible.entry("a red army uniform") === true) {
 					wardrobeAssignment.push({text: `and wears a red army uniform to give ${him} that extra touch of authority.`, clothes: "a red army uniform"});
 				}
-				if (isClothingAccessible.entry("a mounty outfit")) {
+				if (isClothingAccessible.entry("a mounty outfit") === true) {
 					wardrobeAssignment.push({text: `and wears a mounty outfit to give ${him} that extra touch of authority.`, clothes: "a mounty outfit"});
 				}
-				if (isClothingAccessible.entry("nice business attire")) {
+				if (isClothingAccessible.entry("nice business attire") === true) {
 					wardrobeAssignment.push({text: `and wears a handsome suit to give ${him} that extra touch of authority.`, clothes: "nice business attire"});
 				}
 				if (canPenetrate(slave)) {
@@ -306,49 +306,49 @@ window.saChoosesOwnClothes = (function() {
 					wardrobeAssignment.push({text: `and wears a slutty suit to give ${him} an extra touch of authority while keeping ${his} crotch available.`, clothes: "slutty business attire"});
 				}
 			} else if (slave.assignment === "be the Schoolteacher") {
-				if (isClothingAccessible.entry("nice business attire")) {
+				if (isClothingAccessible.entry("nice business attire") === true) {
 					wardrobeAssignment.push({text: `and wears a handsome suit to give ${him} that teacherly authority.`, clothes: "nice business attire"});
 				}
 				wardrobeAssignment.push({text: `and wears a slutty suit to give ${him} an air of authority will keeping all eyes focused on ${him}.`, clothes: "slutty business attire"});
 				wardrobeAssignment.push({text: `and wears a schoolgirl outfit to help keep ${his} charges focused on ${him}.`, clothes: "a schoolgirl outfit"});
 				wardrobeAssignment.push({text: `and dresses up as a succubus to give ${his} sex lessons an extra kick.`, clothes: "a succubus outfit"});
-				if (isClothingAccessible.entry("conservative clothing")) {
+				if (isClothingAccessible.entry("conservative clothing") === true) {
 					wardrobeAssignment.push({text: `and wears conservative clothes to not detract from this week's lesson.`, clothes: "conservative clothing"});
 				}
-				if (isClothingAccessible.entry("a toga")) {
+				if (isClothingAccessible.entry("a toga") === true) {
 					wardrobeAssignment.push({text: `and wraps ${himself} in a toga to model ${himself} after the philosophers of yore.`, clothes: "a toga"});
 				}
-				if (isClothingAccessible.entry("a maternity dress") && slave.belly >= 10000) {
+				if (isClothingAccessible.entry("a maternity dress") === true && slave.belly >= 10000) {
 					wardrobeAssignment.push({text: `and settles for a comfortable maternity dress to support ${his} middle while ${he} lectures in front of the class all week.`, clothes: "a maternity dress"});
 				}
 			} else if (slave.assignment === "be the Wardeness") {
-				if (isClothingAccessible.entry("battledress")) {
+				if (isClothingAccessible.entry("battledress") === true) {
 					wardrobeAssignment.push({text: `and dons battledress, the better to intimidate the prisoners.`, clothes: "battledress"});
 				}
 				wardrobeAssignment.push({text: `and slips into a scalemail bikini, the better to intimidate the prisoners.`, clothes: "a scalemail bikini"});
 				wardrobeAssignment.push({text: `and dons a scandalous habit to make it perfectly clear that crossing this nun will result in sexual punishment.`, clothes: "a fallen nuns habit"});
-				if (isClothingAccessible.entry("a military uniform")) {
+				if (isClothingAccessible.entry("a military uniform") === true) {
 					wardrobeAssignment.push({text: `and wears a military uniform to look even more brutal and authoritative.`, clothes: "a military uniform"});
 				}
-				if (isClothingAccessible.entry("a schutzstaffel uniform")) {
+				if (isClothingAccessible.entry("a schutzstaffel uniform") === true) {
 					wardrobeAssignment.push({text: `and wears a schutzstaffel uniform to look even more brutal and authoritative.`, clothes: "a schutzstaffel uniform"});
 					wardrobeAssignment.push({text: `and wears a slutty schutzstaffel uniform to look even more brutal and authoritative.`, clothes: "a slutty schutzstaffel uniform"});
 				}
-				if (isClothingAccessible.entry("a red army uniform")) {
+				if (isClothingAccessible.entry("a red army uniform") === true) {
 					wardrobeAssignment.push({text: `and wears a red army uniform to look even more brutal and authoritative.`, clothes: "a red army uniform"});
 				}
-				if (isClothingAccessible.entry("stretch pants and a crop-top")) {
+				if (isClothingAccessible.entry("stretch pants and a crop-top") === true) {
 					wardrobeAssignment.push({text: `and decides to take it easy by slipping into some stretch pants. They come off just as quickly as they come on, just in case.`, clothes: "stretch pants and a crop-top"});
 				}
 			} else if (slave.assignment === "be the Attendant") {
 				wardrobeAssignment.push({text: `and wears a string bikini, since it's all ${he} can wear that won't be ruined by all the moisture in the spa.`, clothes: "a string bikini"});
-				if (isClothingAccessible.entry("a monokini")) {
+				if (isClothingAccessible.entry("a monokini") === true) {
 					wardrobeAssignment.push({text: `and wears an one-piece swimsuit, since it's all ${he} can wear that won't be ruined by all the moisture in the spa.`, clothes: "a monokini"});
 				}
-				if (isClothingAccessible.entry("a one-piece swimsuit")) {
+				if (isClothingAccessible.entry("a one-piece swimsuit") === true) {
 					wardrobeAssignment.push({text: `and wears a one-piece swimsuit, since it's all ${he} can wear that won't be ruined by all the moisture in the spa.`, clothes: "a one-piece swimsuit"});
 				}
-				if (isClothingAccessible.entry("a burkini")) {
+				if (isClothingAccessible.entry("a burkini") === true) {
 					wardrobeAssignment.push({text: `and wears a modest swimsuit, since it's all ${he} can wear that won't be ruined by all the moisture in the spa.`, clothes: "a burkini"});
 				}
 				wardrobeAssignment.push({text: `but decides to go nude, since ${he}'ll be spending so much time in the water.`, clothes: "no clothing"});
@@ -357,10 +357,10 @@ window.saChoosesOwnClothes = (function() {
 				wardrobeAssignment.push({text: `and slips into some attractive lingerie to enjoy ${himself} as ${he} unwinds.`, clothes: "attractive lingerie"});
 				wardrobeAssignment.push({text: `and slips into nothing more than a pair of panties.`, clothes: "panties"});
 				wardrobeAssignment.push({text: `but decides that clothing takes too much work and would rather sleep nude.`, clothes: "no clothing"});
-				if (isClothingAccessible.entry("stretch pants and a crop-top")) {
+				if (isClothingAccessible.entry("stretch pants and a crop-top") === true) {
 					wardrobeAssignment.push({text: `and slips into some comfy stretch pants to relax.`, clothes: "stretch pants and a crop-top"});
 				}
-				if (isClothingAccessible.entry("attractive lingerie for a pregnant woman") && slave.belly >= 1500) {
+				if (isClothingAccessible.entry("attractive lingerie for a pregnant woman") === true && slave.belly >= 1500) {
 					wardrobeAssignment.push({text: `and slips into some attractive lingerie to enjoy ${himself} as ${he} unwinds.`, clothes: "attractive lingerie for a pregnant woman"});
 				}
 				if (slave.fetish === "submissive") {
@@ -368,13 +368,13 @@ window.saChoosesOwnClothes = (function() {
 				}
 			} else if (slave.assignment === "get milked" || slave.assignment === "work in the dairy") {
 				wardrobeAssignment.push({text: `and wears sturdy lingerie to offer the best support to ${his} sore, milk-filled udders.`, clothes: "attractive lingerie"});
-				if (isClothingAccessible.entry("attractive lingerie for a pregnant woman") && slave.belly >= 1500) {
+				if (isClothingAccessible.entry("attractive lingerie for a pregnant woman") === true && slave.belly >= 1500) {
 					wardrobeAssignment.push({text: `and wears lingerie designed for milky mothers.`, clothes: "attractive lingerie for a pregnant woman"});
 				}
-				if (isClothingAccessible.entry("a maternity dress") && slave.belly >= 10000) {
+				if (isClothingAccessible.entry("a maternity dress") === true && slave.belly >= 10000) {
 					wardrobeAssignment.push({text: `and chooses a maternity dress since it is easy to free ${his} breasts from.`, clothes: "a maternity dress"});
 				}
-				if (isClothingAccessible.entry("a monokini")) {
+				if (isClothingAccessible.entry("a monokini") === true) {
 					wardrobeAssignment.push({text: `and chooses a swimsuit that leaves ${his} breasts exposed.`, clothes: "a monokini"});
 				}
 				wardrobeAssignment.push({text: `and puts on a pair of overalls, making sure to leave ${his} breasts exposed.`, clothes: "overalls"});
@@ -386,48 +386,48 @@ window.saChoosesOwnClothes = (function() {
 				wardrobeAssignment.push({text: `and dons a slutty outfit. If ${his} breasts are going to hang out, might as well wear something to complement them.`, clothes: "a slutty outfit"});
 			} else if (slave.assignment === "guard you") {
 				wardrobeAssignment.push({text: `and wears a bodysuit to show off ${his} curves without hindering ${his} deadliness.`, clothes: "a comfortable bodysuit"});
-				if (isClothingAccessible.entry("a military uniform")) {
+				if (isClothingAccessible.entry("a military uniform") === true) {
 					wardrobeAssignment.push({text: `and wears a military uniform to look the part of the honor guard.`, clothes: "a military uniform"});
 				}
-				if (isClothingAccessible.entry("a schutzstaffel uniform")) {
+				if (isClothingAccessible.entry("a schutzstaffel uniform") === true) {
 					wardrobeAssignment.push({text: `and wears a schutzstaffel uniform to look the part of the honor guard.`, clothes: "a schutzstaffel uniform"});
 					wardrobeAssignment.push({text: `and wears a slutty schutzstaffel uniform to look the part of the honor guard.`, clothes: "a slutty schutzstaffel uniform"});
 				}
-				if (isClothingAccessible.entry("a red army uniform")) {
+				if (isClothingAccessible.entry("a red army uniform") === true) {
 					wardrobeAssignment.push({text: `and wears a red army uniform to look the part of the honor guard.`, clothes: "a red army uniform"});
 				}
-				if (isClothingAccessible.entry("nice business attire")) {
+				if (isClothingAccessible.entry("nice business attire") === true) {
 					wardrobeAssignment.push({text: `and wears a nice suit to make it clear you mean business.`, clothes: "nice business attire"});
 				}
-				if (isClothingAccessible.entry("a mounty outfit")) {
+				if (isClothingAccessible.entry("a mounty outfit") === true) {
 					wardrobeAssignment.push({text: `and wears a mounty outfit to make it clear you mean business.`, clothes: "a mounty outfit"});
 				}
 				wardrobeAssignment.push({text: `and wears a scalemail bikini to make ${himself} look fierce.`, clothes: "a scalemail bikini"});
-				if (isClothingAccessible.entry("a kimono")) {
+				if (isClothingAccessible.entry("a kimono") === true) {
 					wardrobeAssignment.push({text: `and wears a nice kimono to add an air of elegance to your presence.`, clothes: "a kimono"});
 				}
 			} else {
 				/* Chooses clothes according to assignment (exceptions allowed)*/
 				if (slave.assignment === "recruit girls") {
-					if (isClothingAccessible.entry("a mini dress")) {
+					if (isClothingAccessible.entry("a mini dress") === true) {
 						wardrobeAssignment.push({text: `and wears a flattering mini dress to appear sexy and carefree before those desperately seeking a better life.`, clothes: "a mini dress"});
 					}
 					wardrobeAssignment.push({text: `and wears a cutoffs and a t-shirt to appear sexy and carefree before those desperately seeking a better life.`, clothes: "cutoffs and a t-shirt"});
-					if (isClothingAccessible.entry("nice business attire")) {
+					if (isClothingAccessible.entry("nice business attire") === true) {
 						wardrobeAssignment.push({text: `and wears a nice suit to appear trustworthy before those desperately seeking a better life.`, clothes: "nice business attire"});
 					}
 					wardrobeAssignment.push({text: `and wears a schoolgirl outfit to appear sexy and carefree before those desperately seeking a better life.`, clothes: "a schoolgirl outfit"});
-					if (isClothingAccessible.entry("a ball gown")) {
+					if (isClothingAccessible.entry("a ball gown") === true) {
 						wardrobeAssignment.push({text: `and wears an opulent gown to showcase your wealth before those desperately seeking a better life.`, clothes: "a ball gown"});
 					}
 					wardrobeAssignment.push({text: `and dresses as a succubus to attempt to lure any potential catches.`, clothes: "a succubus outfit"});
-					if (isClothingAccessible.entry("harem gauze")) {
+					if (isClothingAccessible.entry("harem gauze") === true) {
 						wardrobeAssignment.push({text: `and dons ${his} finest silks to showcase the luxuries waiting would-be slaves.`, clothes: "harem gauze"});
 					}
-					if (isClothingAccessible.entry("stretch pants and a crop-top")) {
+					if (isClothingAccessible.entry("stretch pants and a crop-top") === true) {
 						wardrobeAssignment.push({text: `and wears comfortable stretch pants to and crop-top to appear carefree before those desperately seeking a better life.`, clothes: "stretch pants and a crop-top"});
 					}
-					if (isClothingAccessible.entry("conservative clothing")) {
+					if (isClothingAccessible.entry("conservative clothing") === true) {
 						wardrobeAssignment.push({text: `and wears normal clothing to suggest to those desperately seeking a better life that they can find it here with you.`, clothes: "conservative clothing"});
 					}
 				} else if (slave.assignment === "be the DJ") {
@@ -439,7 +439,7 @@ window.saChoosesOwnClothes = (function() {
 					if (slave.boobs > 1000) {
 						wardrobeAssignment.push({text: `but decides to go naked and let ${his} girls bounce free as ${he} dances.`, clothes: "no clothing"});
 					}
-					if (isClothingAccessible.entry("harem gauze")) {
+					if (isClothingAccessible.entry("harem gauze") === true) {
 						wardrobeAssignment.push({text: `and wears the finest available silks to give ${his} moves a sensual grace.`, clothes: "harem gauze"});
 					}
 				} else if (slave.assignment === "be your Concubine") {
@@ -451,7 +451,7 @@ window.saChoosesOwnClothes = (function() {
 						wardrobeAssignment.push({text: `and dresses as a slutty maid as you always come home with a stiff package that needs a thorough polishing.`, clothes: "a slutty maid outfit"});
 					}
 					wardrobeAssignment.push({text: `and, since you personally see that ${he} never goes hungry, ${he} dresses like the sex demoness ${he} is.`, clothes: "a succubus outfit"});
-					if (isClothingAccessible.entry("attractive lingerie for a pregnant woman") && slave.belly >= 10000 && slave.pregSource === -1) {
+					if (isClothingAccessible.entry("attractive lingerie for a pregnant woman") === true && slave.belly >= 10000 && slave.pregSource === -1) {
 						wardrobeAssignment.push({text: `and chooses attractive lingerie to showcase the body you've given ${him} in the hopes that you ravish ${him}.`, clothes: "attractive lingerie for a pregnant woman"});
 					}
 					if (slave.toyHole === "dick" && canPenetrate(slave)) {
@@ -459,7 +459,7 @@ window.saChoosesOwnClothes = (function() {
 					}
 				} else if (slave.assignment === "be a subordinate slave") {
 					wardrobeAssignment.push({text: `but gives up and goes naked after the other slaves constantly tear whatever ${he}'s wearing off ${him}.`, clothes: "no clothing"});
-					if (isClothingAccessible.entry("Western clothing")) {
+					if (isClothingAccessible.entry("Western clothing") === true) {
 						wardrobeAssignment.push({text: `and chooses a pair of crotchless chaps so your other slaves don't have to waste time undressing ${him}.`, clothes: "Western clothing"});
 					}
 					if (slave.fetish === "submissive") {
@@ -472,28 +472,28 @@ window.saChoosesOwnClothes = (function() {
 				} else if (slave.assignment === "take classes" || slave.assignment === "learn in the schoolroom") {
 					wardrobeAssignment.push({text: `and wears a schoolgirl outfit, since it seems most appropriate.`, clothes: "a schoolgirl outfit"});
 					wardrobeAssignment.push({text: `and wears a cheerleader outfit, since ${he} might as well be one of the popular girls.`, clothes: "a cheerleader outfit"});
-					if (isClothingAccessible.entry("conservative clothing")) {
+					if (isClothingAccessible.entry("conservative clothing") === true) {
 						wardrobeAssignment.push({text: `and wears normal clothing to not distract from ${his} lessons.`, clothes: "conservative clothing"});
 					}
 				} else if ((slave.assignment === "whore") || (slave.assignment === "work in the brothel")) {
-					if (slave.belly >= 5000 && isClothingAccessible.entry("attractive lingerie for a pregnant woman")) {
+					if (slave.belly >= 5000 && isClothingAccessible.entry("attractive lingerie for a pregnant woman") === true) {
 						wardrobeAssignment.push({text: `and wears pretty lingerie to show off ${his} merchandise and accentuate ${his} pregnancy while still looking a little classy.`, clothes: "attractive lingerie for a pregnant woman"});
 					}
 					wardrobeAssignment.push({text: `and wears pretty lingerie to show off ${his} merchandise and still look a little classy.`, clothes: "attractive lingerie"});
-					if (isClothingAccessible.entry("kitty lingerie")) {
+					if (isClothingAccessible.entry("kitty lingerie") === true) {
 						wardrobeAssignment.push({text: `and wears pretty lingerie to show off ${his} merchandise and still look a little cute.`, clothes: "kitty lingerie"});
 					}
-					if (isClothingAccessible.entry("harem gauze")) {
+					if (isClothingAccessible.entry("harem gauze") === true) {
 						wardrobeAssignment.push({text: `and dresses ${himself} with harem gauze to add an exotic charm to ${his} display.`, clothes: "harem gauze"});
 					}
-					if (isClothingAccessible.entry("a kimono")) {
+					if (isClothingAccessible.entry("a kimono") === true) {
 						wardrobeAssignment.push({text: `and wraps ${himself} in a kimono to add some elegance to ${his} display.`, clothes: "a kimono"});
 					}
-					if (isClothingAccessible.entry("a slave gown")) {
+					if (isClothingAccessible.entry("a slave gown") === true) {
 						wardrobeAssignment.push({text: `and adorns ${himself} in fine dress to show off how much of a high class whore ${he} is.`, clothes: "a slave gown"});
 					}
 					wardrobeAssignment.push({text: `and dresses ${himself} in a slutty suit to show ${he}'s in it for the ¤.`, clothes: "slutty business attire"});
-					if (isClothingAccessible.entry("a mini dress")) {
+					if (isClothingAccessible.entry("a mini dress") === true) {
 						wardrobeAssignment.push({text: `and wears a flattering mini dress to really strut ${his} stuff.`, clothes: "a mini dress"});
 					}
 				} else if (slave.assignment === "serve the public" || slave.assignment === "serve in the club") {
@@ -502,7 +502,7 @@ window.saChoosesOwnClothes = (function() {
 					wardrobeAssignment.push({text: `and tosses on a slutty suit that screams ${he} needs a good fuck after a long day.`, clothes: "slutty business attire"});
 					wardrobeAssignment.push({text: `and dresses up as a slutty nurse; ${he} has just the technique to cure penile swelling.`, clothes: "a slutty nurse outfit"});
 					wardrobeAssignment.push({text: `and wears a cheerleader outfit to look energetic and fuckable.`, clothes: "a cheerleader outfit"});
-					if (isClothingAccessible.entry("a bunny outfit")) {
+					if (isClothingAccessible.entry("a bunny outfit") === true) {
 						wardrobeAssignment.push({text: `and slips into a teddy to add some class to ${his} post.`, clothes: "a bunny outfit"});
 					}
 					wardrobeAssignment.push({text: `and dresses up as a succubus to clearly advertise ${his} promiscuity.`, clothes: "a succubus outfit"});
@@ -515,13 +515,13 @@ window.saChoosesOwnClothes = (function() {
 						wardrobeAssignment.push({text: `and wears nothing more than an apron in the hopes that someone sneaks up behind ${him} as ${he} works and fulfills ${his} desires.`, clothes: "an apron"});
 					} else if (slave.energy > 80) {
 						wardrobeAssignment.push({text: `and wears a skimpy maid outfit to tempt anyone watching ${his} work.`, clothes: "a slutty maid outfit"});
-						if (isClothingAccessible.entry("a nice maid outfit")) {
+						if (isClothingAccessible.entry("a nice maid outfit") === true) {
 							wardrobeAssignment.push({text: `and wears a sturdy maid outfit, since anything else might be damaged by ${his} hard work around the penthouse.`, clothes: "a nice maid outfit"});
 						}
 						wardrobeAssignment.push({text: `and wears a skimpy maid outfit to tempt anyone watching ${his} work.`, clothes: "a slutty maid outfit"});
 						wardrobeAssignment.push({text: `and wears nothing more than an apron to tempt anyone watching ${his} work.`, clothes: "an apron"});
 					} else {
-						if (isClothingAccessible.entry("a nice maid outfit")) {
+						if (isClothingAccessible.entry("a nice maid outfit") === true) {
 							wardrobeAssignment.push({text: `and wears a sturdy maid outfit, since anything else might be damaged by ${his} hard work around the penthouse.`, clothes: "a nice maid outfit"});
 						}
 						wardrobeAssignment.push({text: `and wears a skimpy maid outfit to tempt anyone watching ${his} work.`, clothes: "a slutty maid outfit"});
@@ -558,14 +558,14 @@ window.saChoosesOwnClothes = (function() {
 					wardrobeFS.push({text: `and settles for some sexy succubutt.`, clothes: "a succubus outfit"});
 				}
 				if (V.arcologies[0].FSSlaveProfessionalism > 0) {
-					if (isClothingAccessible.entry("nice business attire")) {
+					if (isClothingAccessible.entry("nice business attire") === true) {
 						if (slave.energy > 80) {
 							wardrobeFS.push({text: `and picks out a professional suit with a nice, short skirt so ${he} can get right to business.`, clothes: "slutty business attire"});
 						} else {
 							wardrobeFS.push({text: `and picks out a professional suit that shows ${he} is open for business.`, clothes: "nice business attire"});
 						}
 					}
-					if (isClothingAccessible.entry("a nice maid outfit")) {
+					if (isClothingAccessible.entry("a nice maid outfit") === true) {
 						if (slave.energy > 80) {
 							wardrobeFS.push({text: `and picks out a skimpy maid outfit so ${he} can take advantage of its short skirt and ${his} lack of underwear,`, clothes: "a slutty maid outfit"});
 						} else {
@@ -579,7 +579,7 @@ window.saChoosesOwnClothes = (function() {
 					wardrobeFS.push({text: `and slaps together the sluttiest outfit ${he} can manage.`, clothes: "a slutty outfit"});
 					wardrobeFS.push({text: `and squeezes into a fishnet bodysuit to give ${his} nudity a slutty flair.`, clothes: "clubslut netting"});
 					wardrobeFS.push({text: `and ties on the skimpiest bikini ${he} can find.`, clothes: "a string bikini"});
-					if (slave.bellyPreg >= 5000 && isClothingAccessible.entry("attractive lingerie for a pregnant woman")) {
+					if (slave.bellyPreg >= 5000 && isClothingAccessible.entry("attractive lingerie for a pregnant woman") === true) {
 						wardrobeFS.push({text: `and opts for the classic seductive lingerie, albeit something more fitting for ${his} 'little accident'.`, clothes: "attractive lingerie for a pregnant woman"});
 					} else {
 						wardrobeFS.push({text: `and opts for the classic seductive lingerie.`, clothes: "attractive lingerie"});
@@ -587,10 +587,10 @@ window.saChoosesOwnClothes = (function() {
 				}
 				if (V.arcologies[0].FSPaternalist > 0) {
 					wardrobeFS.push({text: `and wears conservative clothing, as permitted by your paternalism.`, clothes: "conservative clothing"});
-					if (isClothingAccessible.entry("a hijab and blouse") && slave.race === "middle eastern") {
+					if (isClothingAccessible.entry("a hijab and blouse") === true && slave.race === "middle eastern") {
 						wardrobeFS.push({text: `and wears very conservative clothing, as permitted by your paternalism.`, clothes: "a hijab and blouse"});
 					}
-					if (isClothingAccessible.entry("stretch pants and a crop-top")) {
+					if (isClothingAccessible.entry("stretch pants and a crop-top") === true) {
 						wardrobeFS.push({text: `and wears the most comfortable stretch pants ${he} can find.`, clothes: "stretch pants and a crop-top"});
 					}
 				} else if (V.arcologies[0].FSDegradationist > 0) {
@@ -601,16 +601,16 @@ window.saChoosesOwnClothes = (function() {
 				}
 				if (V.arcologies[0].FSMaturityPreferentialist > 0) {
 					if (slave.visualAge >= 30) {
-						if (isClothingAccessible.entry("nice business attire")) {
+						if (isClothingAccessible.entry("nice business attire") === true) {
 							wardrobeFS.push({text: `and wears a formal suit to look like the ideal older woman.`, clothes: "nice business attire"});
 						}
 						wardrobeFS.push({text: `and wears a slutty suit to look like the ideal horny older woman.`, clothes: "slutty business attire"});
 						wardrobeFS.push({text: `and wears only an apron to make ${himself} seem more matronly.`, clothes: "an apron"});
 					} else {
-						if (isClothingAccessible.entry("nice business attire")) {
+						if (isClothingAccessible.entry("nice business attire") === true) {
 							wardrobeFS.push({text: `and wears a formal suit to look more mature.`, clothes: "nice business attire"});
 						}
-						if (isClothingAccessible.entry("a Santa dress")) {
+						if (isClothingAccessible.entry("a Santa dress") === true) {
 							wardrobeFS.push({text: `and wears a dress referencing a figure of advanced age.`, clothes: "a Santa dress"});
 						}
 						wardrobeFS.push({text: `and wears only an apron in an attempt to make ${himself} seem more matronly.`, clothes: "an apron"});
@@ -632,10 +632,10 @@ window.saChoosesOwnClothes = (function() {
 				if (V.arcologies[0].FSPastoralist > 0) {
 					wardrobeFS.push({text: `and wears Western clothing, since ${he} thinks it fits with pastoralism.`, clothes: "Western clothing"});
 					wardrobeFS.push({text: `and wears overalls that leave ${his} breasts uncovered.`, clothes: "overalls"});
-					if (isClothingAccessible.entry("a monokini")) {
+					if (isClothingAccessible.entry("a monokini") === true) {
 						wardrobeFS.push({text: `and wears a swimsuit that leaves ${his} breasts uncovered.`, clothes: "a monokini"});
 					}
-					if (isClothingAccessible.entry("pasties")) {
+					if (isClothingAccessible.entry("pasties") === true) {
 						wardrobeFS.push({text: `and wears nothing more than a pair of pasties over ${his} nipples and crotch.`, clothes: "pasties"});
 					}
 					if (slave.lactation > 0) {
@@ -646,13 +646,13 @@ window.saChoosesOwnClothes = (function() {
 				if (V.arcologies[0].FSBodyPurist > 0) {
 					wardrobeFS.push({text: `and wears a leotard to show off the purity of ${his} body.`, clothes: "a leotard"});
 					wardrobeFS.push({text: `but decides ${his} body is too nice to hide with clothing.`, clothes: "no clothing"});
-					if (isClothingAccessible.entry("body oil")) {
+					if (isClothingAccessible.entry("body oil") === true) {
 						wardrobeFS.push({text: `and coats ${his} pure body in oil to make it stand out.`, clothes: "body oil"});
 					}
 				} else if (V.arcologies[0].FSTransformationFetishist > 0) {
 					wardrobeFS.push({text: `and decides squeezing into a latex suit will only complement ${his} unnatural appearance.`, clothes: "restrictive latex"});
 					wardrobeFS.push({text: `and decides to go nude, ensuring everyone sees ${his} assets.`, clothes: "no clothing"});
-					if (isClothingAccessible.entry("body oil")) {
+					if (isClothingAccessible.entry("body oil") === true) {
 						wardrobeFS.push({text: `and coats ${his} assets in body oil to give them some extra shine.`, clothes: "body oil"});
 					}
 				}
@@ -660,13 +660,13 @@ window.saChoosesOwnClothes = (function() {
 					wardrobeFS.push({text: `and decides to dress up like a young man's wet dream.`, clothes: "a succubus outfit"});
 					wardrobeFS.push({text: `and decides to wear a skimpy bikini to make ${his} assets look even larger.`, clothes: "a string bikini"});
 					wardrobeFS.push({text: `and decides to throw together a slutty outfit that highlight ${his} assets.`, clothes: "a slutty outfit"});
-					if (isClothingAccessible.entry("a monokini")) {
+					if (isClothingAccessible.entry("a monokini") === true) {
 						wardrobeFS.push({text: `and decides to wear a monokini that clings to the assets it actually does conceal.`, clothes: "a monokini"});
 					}
 				} else if (V.arcologies[0].FSSlimnessEnthusiast > 0) {
 					if (slave.boobs < 300) {
 						wardrobeFS.push({text: `and wears a string bikini to show off just how flat ${he} is.`, clothes: "a string bikini"});
-						if (isClothingAccessible.entry("a monokini")) {
+						if (isClothingAccessible.entry("a monokini") === true) {
 							wardrobeFS.push({text: `and wears a monokini that leaves ${his} flat chest bare.`, clothes: "a monokini"});
 						}
 						wardrobeFS.push({text: `and wears only panties, leaving ${his} flat chest bare.`, clothes: "panties"});
@@ -682,23 +682,23 @@ window.saChoosesOwnClothes = (function() {
 				}
 				if (V.arcologies[0].FSSupremacist > 0) {
 					if (V.arcologies[0].FSSupremacistRace === "white") {
-						if (isClothingAccessible.entry("a dirndl")) {
+						if (isClothingAccessible.entry("a dirndl") === true) {
 							wardrobeFS.push({text: `and wears one of the beautiful folk costumes of the white race.`, clothes: "a dirndl"});
 						}
-						if (isClothingAccessible.entry("lederhosen")) {
+						if (isClothingAccessible.entry("lederhosen") === true) {
 							wardrobeFS.push({text: `and wears one of the beautiful folk costumes of the white race.`, clothes: "lederhosen"});
 						}
 					} else if (V.arcologies[0].FSSupremacistRace === "asian") {
-						if (isClothingAccessible.entry("a biyelgee costume")) {
+						if (isClothingAccessible.entry("a biyelgee costume") === true) {
 							wardrobeFS.push({text: `and wears one of the beautiful folk costumes of the asian race.`, clothes: "a biyelgee costume"});
 						}
-						if (isClothingAccessible.entry("a long qipao")) {
+						if (isClothingAccessible.entry("a long qipao") === true) {
 							wardrobeFS.push({text: `and wears one of the beautiful folk costumes of the asian race.`, clothes: "a long qipao"});
 						}
-						if (isClothingAccessible.entry("a kimono")) {
+						if (isClothingAccessible.entry("a kimono") === true) {
 							wardrobeAssignment.push({text: `and wears one of the beautiful folk costumes of the asian race.`, clothes: "a kimono"});
 						}
-						if (isClothingAccessible.entry("a hanbok")) {
+						if (isClothingAccessible.entry("a hanbok") === true) {
 							wardrobeAssignment.push({text: `and wears one of the beautiful folk costumes of the asian race.`, clothes: "a hanbok"});
 						}
 					}
@@ -706,17 +706,17 @@ window.saChoosesOwnClothes = (function() {
 
 				if (V.arcologies[0].FSSubjugationist > 0) {
 					if (V.arcologies[0].FSSubjugationistRace === "black") {
-						if (isClothingAccessible.entry("a klan robe")) {
+						if (isClothingAccessible.entry("a klan robe") === true) {
 							wardrobeFS.push({text: `and wears a costume associated with anti-black societies of the past.`, clothes: "a klan robe"});
 						}
-						if (isClothingAccessible.entry("a slutty klan robe")) {
+						if (isClothingAccessible.entry("a slutty klan robe") === true) {
 							wardrobeFS.push({text: `and wears a costume associated with anti-black societies of the past.`, clothes: "a slutty klan robe"});
 						}
 					} else if (V.arcologies[0].FSSubjugationistRace === "semitic") {
-						if (isClothingAccessible.entry("a schutzstaffel uniform")) {
+						if (isClothingAccessible.entry("a schutzstaffel uniform") === true) {
 							wardrobeFS.push({text: `and wears a costume associated with anti-semitic societies of the past.`, clothes: "a schutzstaffel uniform"});
 						}
-						if (isClothingAccessible.entry("a slutty schutzstaffel uniform")) {
+						if (isClothingAccessible.entry("a slutty schutzstaffel uniform") === true) {
 							wardrobeFS.push({text: `and wears a costume associated with anti-semitic societies of the past.`, clothes: "a slutty schutzstaffel uniform"});
 						}
 					}
@@ -731,7 +731,7 @@ window.saChoosesOwnClothes = (function() {
 						if (slave.butt > 3) {
 							wardrobeTastes.push({text: `and slips on some cutoffs that are sure to have men checking out ${his} ass.`, clothes: "cutoffs and a t-shirt"});
 						}
-						if (isClothingAccessible.entry("a bunny outfit")) {
+						if (isClothingAccessible.entry("a bunny outfit") === true) {
 							wardrobeTastes.push({text: `and slips into a bunny outfit that ${he} knows will have men lining up.`, clothes: "a bunny outfit"});
 						}
 						if (slave.boobs > 800) {
@@ -744,7 +744,7 @@ window.saChoosesOwnClothes = (function() {
 						if (slave.butt > 3) {
 							wardrobeTastes.push({text: `and slips on some cutoffs that shows off ${his} ass.`, clothes: "cutoffs and a t-shirt"});
 						}
-						if (isClothingAccessible.entry("a bunny outfit")) {
+						if (isClothingAccessible.entry("a bunny outfit") === true) {
 							wardrobeTastes.push({text: `and slips into a bunny outfit that hugs ${his} curves.`, clothes: "a bunny outfit"});
 						}
 						if (slave.boobs > 800) {
@@ -754,19 +754,19 @@ window.saChoosesOwnClothes = (function() {
 				}
 				if (slave.attrXX > 70) {
 					if (slave.attrKnown === 1) {
-						if (isClothingAccessible.entry("a slave gown")) {
+						if (isClothingAccessible.entry("a slave gown") === true) {
 							wardrobeTastes.push({text: `and wears a fashionable gown, since girls appreciate nice clothes.`, clothes: "a slave gown"});
 						}
 						wardrobeTastes.push({text: `and wears nothing but pretty lingerie to give the girls a show.`, clothes: "attractive lingerie"});
-						if (isClothingAccessible.entry("nice business attire")) {
+						if (isClothingAccessible.entry("nice business attire") === true) {
 							wardrobeTastes.push({text: `and wears a nice suit, since girls appreciate nice clothes.`, clothes: "nice business attire"});
 						}
 					} else {
-						if (isClothingAccessible.entry("a slave gown")) {
+						if (isClothingAccessible.entry("a slave gown") === true) {
 							wardrobeTastes.push({text: `and wears a fashionable gown.`, clothes: "a slave gown"});
 						}
 						wardrobeTastes.push({text: `and wears pretty lingerie that shows off ${his} body.`, clothes: "attractive lingerie"});
-						if (isClothingAccessible.entry("nice business attire")) {
+						if (isClothingAccessible.entry("nice business attire") === true) {
 							wardrobeTastes.push({text: `and wears a nice suit, the reasons not entirely clear to you.`, clothes: "nice business attire"});
 						}
 					}
@@ -783,12 +783,12 @@ window.saChoosesOwnClothes = (function() {
 
 				/* quirks n flaws */
 				if (slave.behavioralFlaw === "arrogant") {
-					if (isClothingAccessible.entry("a ball gown")) {
+					if (isClothingAccessible.entry("a ball gown") === true) {
 						wardrobeTastes.push({text: `and chooses a formal dress that makes ${him} feel like royalty.`, clothes: "a ball gown"});
 					}
 				} else if (slave.behavioralFlaw === "devout") {
 					wardrobeTastes.push({text: `and wears something more appropriate for a monastery than a whorehouse.`, clothes: "a penitent nuns habit"});
-					if (isClothingAccessible.entry("a burqa")) {
+					if (isClothingAccessible.entry("a burqa") === true) {
 						wardrobeTastes.push({text: `and chooses an incredibly restricting piece of religious garb.`, clothes: "a burqa"});
 					}
 				}
@@ -801,46 +801,46 @@ window.saChoosesOwnClothes = (function() {
 
 				if (slave.sexualFlaw === "shamefast") {
 					wardrobeTastes.push({text: `and chooses an outfit that covers ${him} up as much as possible.`, clothes: "a hijab and abaya"});
-					if (isClothingAccessible.entry("a burqa")) {
+					if (isClothingAccessible.entry("a burqa") === true) {
 						wardrobeTastes.push({text: `and chooses an outfit that covers ${him} up as much as possible.`, clothes: "a burqa"});
 					}
 				} else if (slave.sexualFlaw === "breeder") {
-					if (isClothingAccessible.entry("attractive lingerie for a pregnant woman")) {
+					if (isClothingAccessible.entry("attractive lingerie for a pregnant woman") === true) {
 						wardrobeTastes.push({text: `and wears lingerie designed to accommodate pregnancies, hoping that others get the hint.`, clothes: "attractive lingerie for a pregnant woman"});
 					}
 				} else if (slave.sexualFlaw === "malicious") {
-					if (isClothingAccessible.entry("a schutzstaffel uniform")) {
+					if (isClothingAccessible.entry("a schutzstaffel uniform") === true) {
 						wardrobeTastes.push({text: `and chooses an outfit that is commonly associated with wanton cruelty.`, clothes: "a schutzstaffel uniform"});
 						wardrobeTastes.push({text: `and chooses a skimpy outfit that is commonly associated with wanton cruelty.`, clothes: "a slutty schutzstaffel uniform"});
 					}
 				}
 
 				if (slave.sexualQuirk === "romantic") {
-					if (isClothingAccessible.entry("a halter top dress")) {
+					if (isClothingAccessible.entry("a halter top dress") === true) {
 						wardrobeTastes.push({text: `and dresses up like ${he}'s about to go on a date.`, clothes: "a halter top dress"});
 					}
 				} else if (slave.sexualQuirk === "tease") {
-					if (isClothingAccessible.entry("kitty lingerie")) {
+					if (isClothingAccessible.entry("kitty lingerie") === true) {
 						wardrobeTastes.push({text: `and wears a set of provocatively designed lingerie.`, clothes: "kitty lingerie"});
 					}
-					if (isClothingAccessible.entry("panties and pasties")) {
+					if (isClothingAccessible.entry("panties and pasties") === true) {
 						wardrobeTastes.push({text: `and wears the skimpiest outfit ${he} can find.`, clothes: "panties and pasties"});
 					}
 				}
 
 				/* age stuff */
 				if (slave.actualAge < 10) {
-					if (isClothingAccessible.entry("a ball gown")) {
+					if (isClothingAccessible.entry("a ball gown") === true) {
 						wardrobeTastes.push({text: `and puts on a pretty dress so ${he} can be a princess.`, clothes: "a ball gown"});
 					}
 					wardrobeTastes.push({text: `and dresses up like a cheerleader since ${he} thinks it looks cute.`, clothes: "a cheerleader outfit"});
-					if (isClothingAccessible.entry("a kimono")) {
+					if (isClothingAccessible.entry("a kimono") === true) {
 						wardrobeTastes.push({text: `and wraps ${himself} in a kimono, since it feels so good on ${his} skin.`, clothes: "a kimono"});
 					}
 				} else if (slave.actualAge < 18) {
 					wardrobeTastes.push({text: `and chooses an outfit that somewhat resembles one of ${his} school uniforms.`, clothes: "a schoolgirl outfit"});
 				} else if (slave.actualAge > 65) {
-					if (isClothingAccessible.entry("a Santa dress")) {
+					if (isClothingAccessible.entry("a Santa dress") === true) {
 						wardrobeTastes.push({text: `and chooses a dress that acknowledges ${his} advanced age while still looking sexy.`, clothes: "a Santa dress"});
 					}
 				}
@@ -851,20 +851,20 @@ window.saChoosesOwnClothes = (function() {
 						wardrobeTastes.push({text: `and wears restrictive latex to encourage others to dominate ${him}.`, clothes: "restrictive latex"});
 						wardrobeTastes.push({text: `and wears shibari ropes to encourage others to dominate ${him}.`, clothes: "shibari ropes"});
 					} else if (slave.fetish === "dom") {
-						if (isClothingAccessible.entry("nice business attire")) {
+						if (isClothingAccessible.entry("nice business attire") === true) {
 							wardrobeTastes.push({text: `and wears a handsome suit, since ${he} likes other slaves to look up to ${him}.`, clothes: "nice business attire"});
 						}
-						if (isClothingAccessible.entry("a latex catsuit")) {
+						if (isClothingAccessible.entry("a latex catsuit") === true) {
 							wardrobeTastes.push({text: `and wears a full body latex catsuit to look the part of the whip cracking dom.`, clothes: "a latex catsuit"});
 						}
 						wardrobeTastes.push({text: `and wears a scalemail bikini to make ${himself} look tough.`, clothes: "a scalemail bikini"});
 					} else if (slave.fetish === "masochist") {
 						wardrobeTastes.push({text: `and wears painfully restrictive bondage gear, since ${he} likes the torment.`, clothes: "uncomfortable straps"});
-						if (isClothingAccessible.entry("chains")) {
+						if (isClothingAccessible.entry("chains") === true) {
 							wardrobeTastes.push({text: `and wears painfully tight chains, since ${he} likes the torment.`, clothes: "chains"});
 						}
 					} else if (slave.fetish === "sadist") {
-						if (isClothingAccessible.entry("a slave gown")) {
+						if (isClothingAccessible.entry("a slave gown") === true) {
 							wardrobeTastes.push({text: `and wears an elegant gown, since ${he} thinks it makes ${him} look the part of the femme fatale.`, clothes: "a slave gown"});
 						}
 						wardrobeTastes.push({text: `and wears a scalemail bikini, since ${he} thinks it makes ${him} look fierce.`, clothes: "a scalemail bikini"});
@@ -877,21 +877,21 @@ window.saChoosesOwnClothes = (function() {
 						wardrobeTastes.push({text: `and wears nothing other than an apron, because ${he} likes to catch the eye without putting anything between cocks and ${his} rear end.`, clothes: "an apron"});
 					} else if (slave.fetish === "pregnancy") {
 						wardrobeTastes.push({text: `and wears a short maid dress, because ${he} wants to look motherly and fuckable at the same time.`, clothes: "a slutty maid outfit"});
-						if (isClothingAccessible.entry("a maternity dress") && canGetPregnant(slave)) {
+						if (isClothingAccessible.entry("a maternity dress") === true && canGetPregnant(slave)) {
 							wardrobeTastes.push({text: `and wears a maternity dress in the hope someone fills out its middle.`, clothes: "a maternity dress"});
 						}
 					} else if (slave.fetish === "boobs") {
 						wardrobeTastes.push({text: `and wears a cheerleader outfit, since ${he} loves the way it hugs ${his} tits as ${he} moves.`, clothes: "a cheerleader outfit"});
-						if (isClothingAccessible.entry("a monokini")) {
+						if (isClothingAccessible.entry("a monokini") === true) {
 							wardrobeTastes.push({text: `and wears a monokini, since ${he} loves how it leaves ${his} breasts totally bare.`, clothes: "a monokini"});
 						}
-						if (isClothingAccessible.entry("kitty lingerie")) {
+						if (isClothingAccessible.entry("kitty lingerie") === true) {
 							wardrobeTastes.push({text: `and chooses a lingerie set that leaves ${his} cleavage on public display.`, clothes: "kitty lingerie"});
 						}
-						if (isClothingAccessible.entry("pasties")) {
+						if (isClothingAccessible.entry("pasties") === true) {
 							wardrobeTastes.push({text: `and wears nothing but a pair of pasties to draw eyes straight to ${his} nipples.`, clothes: "pasties"});
 						}
-						if (isClothingAccessible.entry("a bra")) {
+						if (isClothingAccessible.entry("a bra") === true) {
 							wardrobeTastes.push({text: `and wears nothing but a bra in the hopes that the outlandish get up fixes eyes on ${his} chest.`, clothes: "a bra"});
 						}
 						wardrobeTastes.push({text: `and wears nothing but a pair of panties so ${his} tits can bounce freely.`, clothes: "panties"});
@@ -901,20 +901,20 @@ window.saChoosesOwnClothes = (function() {
 						wardrobeTastes.push({text: `and strangely opts for restrictive latex.`, clothes: "restrictive latex"});
 						wardrobeTastes.push({text: `and strangely opts for shibari ropes.`, clothes: "shibari ropes"});
 					} else if (slave.fetish === "dom") {
-						if (isClothingAccessible.entry("nice business attire")) {
+						if (isClothingAccessible.entry("nice business attire") === true) {
 							wardrobeTastes.push({text: `and wears a handsome suit; ${he} seems to think highly of ${himself} in it.`, clothes: "nice business attire"});
 						}
-						if (isClothingAccessible.entry("a latex catsuit")) {
+						if (isClothingAccessible.entry("a latex catsuit") === true) {
 							wardrobeTastes.push({text: `and wears a full body latex catsuit; there is a strange look on ${his} face as ${he} wears it.`, clothes: "a latex catsuit"});
 						}
 						wardrobeTastes.push({text: `and wears a scalemail bikini; ${he} keeps flexing and acting tough to ${himself}.`, clothes: "a scalemail bikini"});
 					} else if (slave.fetish === "masochist") {
 						wardrobeTastes.push({text: `and strangely opts for painfully restrictive bondage gear.`, clothes: "uncomfortable straps"});
-						if (isClothingAccessible.entry("chains")) {
+						if (isClothingAccessible.entry("chains") === true) {
 							wardrobeTastes.push({text: `and strangely opts for painfully tight chains.`, clothes: "chains"});
 						}
 					} else if (slave.fetish === "sadist") {
-						if (isClothingAccessible.entry("a slave gown")) {
+						if (isClothingAccessible.entry("a slave gown") === true) {
 							wardrobeTastes.push({text: `and wears an elegant gown for some reason.`, clothes: "a slave gown"});
 						}
 						wardrobeTastes.push({text: `and wears a scalemail bikini; an odd choice.`, clothes: "a scalemail bikini"});
@@ -927,21 +927,21 @@ window.saChoosesOwnClothes = (function() {
 						wardrobeTastes.push({text: `and wears nothing other than an apron, an odd choice; ${his} ass is completely exposed.`, clothes: "an apron"});
 					} else if (slave.fetish === "pregnancy") {
 						wardrobeTastes.push({text: `and wears a short maid dress; you frequently notice ${him} observing ${his} stomach.`, clothes: "a slutty maid outfit"});
-						if (isClothingAccessible.entry("a maternity dress") && canGetPregnant(slave)) {
+						if (isClothingAccessible.entry("a maternity dress") === true && canGetPregnant(slave)) {
 							wardrobeTastes.push({text: `and wears a maternity dress even though ${he} isn't pregnant.`, clothes: "a maternity dress"});
 						}
 					} else if (slave.fetish === "boobs") {
 						wardrobeTastes.push({text: `and wears a cheerleader outfit; ${he} seems to enjoy jiggling ${his} breasts in it.`, clothes: "a cheerleader outfit"});
-						if (isClothingAccessible.entry("a monokini")) {
+						if (isClothingAccessible.entry("a monokini") === true) {
 							wardrobeTastes.push({text: `and strangely decides to wear a monokini, which leaves ${his} breasts totally bare.`, clothes: "a monokini"});
 						}
-						if (isClothingAccessible.entry("kitty lingerie")) {
+						if (isClothingAccessible.entry("kitty lingerie") === true) {
 							wardrobeTastes.push({text: `and oddly chooses a lingerie set with a cleavage cutout in the bra.`, clothes: "kitty lingerie"});
 						}
-						if (isClothingAccessible.entry("pasties")) {
+						if (isClothingAccessible.entry("pasties") === true) {
 							wardrobeTastes.push({text: `and oddly opts for just a pair of pasties attached to ${his} nipples and one over ${his} crotch.`, clothes: "pasties"});
 						}
-						if (isClothingAccessible.entry("a bra")) {
+						if (isClothingAccessible.entry("a bra") === true) {
 							wardrobeTastes.push({text: `and oddly opts for nothing more than a bra.`, clothes: "a bra"});
 						}
 						wardrobeTastes.push({text: `and wears nothing but a pair of panties; ${he} seems to enjoy the way ${his} breasts bounce freely.`, clothes: "panties"});
@@ -954,7 +954,7 @@ window.saChoosesOwnClothes = (function() {
 				} else if (slave.energy > 60) {
 					wardrobeTastes.push({text: `and puts on some daring lingerie to draw attention to ${himself}.`, clothes: "attractive lingerie"});
 					wardrobeTastes.push({text: `and goes topless to draw attention to ${himself}.`, clothes: "panties"});
-					if (isClothingAccessible.entry("kitty lingerie")) {
+					if (isClothingAccessible.entry("kitty lingerie") === true) {
 						wardrobeTastes.push({text: `and puts on some decorative lingerie to draw attention to ${himself}.`, clothes: "kitty lingerie"});
 					}
 				}
@@ -963,15 +963,15 @@ window.saChoosesOwnClothes = (function() {
 				if (slave.belly >= 5000) {
 					wardrobeTastes.push({text: `and wears pretty lingerie to show off ${his} merchandise while giving ${his} protruding belly plenty of room to hang free.`, clothes: "attractive lingerie"});
 					wardrobeTastes.push({text: `and wears only panties. Something so easy to slip on is appreciable with such a big belly in the way.`, clothes: "panties"});
-					if (isClothingAccessible.entry("kitty lingerie")) {
+					if (isClothingAccessible.entry("kitty lingerie") === true) {
 						wardrobeTastes.push({text: `and wears cute lingerie to show off ${his} merchandise while giving ${his} protruding belly plenty of room to hang free.`, clothes: "kitty lingerie"});
 					}
-					if (isClothingAccessible.entry("a Santa dress")) {
+					if (isClothingAccessible.entry("a Santa dress") === true) {
 						wardrobeTastes.push({text: `and chooses a dress that pokes fun at ${his} rotund figure while still looking sexy.`, clothes: "a Santa dress"});
 					}
-					if (isClothingAccessible.entry("attractive lingerie for a pregnant woman") && slave.energy > 70) {
+					if (isClothingAccessible.entry("attractive lingerie for a pregnant woman") === true && slave.energy > 70) {
 						wardrobeTastes.push({text: `and wears pretty lingerie to show off ${his} merchandise and accentuate ${his} pregnancy while giving it plenty of room to hang free.`, clothes: "attractive lingerie for a pregnant woman"});
-					} else if (isClothingAccessible.entry("a maternity dress")) {
+					} else if (isClothingAccessible.entry("a maternity dress") === true) {
 						wardrobeTastes.push({text: `and wears a conservative dress with plenty of give for ${his} belly to stretch it.`, clothes: "a maternity dress"});
 					}
 					wardrobeTastes.push({text: `and wears string lingerie to look fun and fuckable while giving ${his} protruding belly plenty of room to hang free.`, clothes: "a string bikini"});
@@ -980,19 +980,19 @@ window.saChoosesOwnClothes = (function() {
 				}
 
 				if (slave.nationality === "Canadian") {
-					if (isClothingAccessible.entry("a mounty outfit")) {
+					if (isClothingAccessible.entry("a mounty outfit") === true) {
 						wardrobeTastes.push({text: `and chooses an outfit that makes ${him} feel oddly nostalgic.`, clothes: "a mounty outfit"});
 					}
 				} else if (slave.nationality === "Japanese") {
-					if (isClothingAccessible.entry("a kimono")) {
+					if (isClothingAccessible.entry("a kimono") === true) {
 						wardrobeTastes.push({text: `and chooses an outfit that makes ${him} feel oddly nostalgic.`, clothes: "a kimono"});
 					}
 				} else if (slave.nationality === "Korean") {
-					if (isClothingAccessible.entry("a hanbok")) {
+					if (isClothingAccessible.entry("a hanbok") === true) {
 						wardrobeTastes.push({text: `and chooses an outfit that makes ${him} feel oddly nostalgic.`, clothes: "a hanbok"});
 					}
 				} else if (slave.nationality === "Mongolian") {
-					if (isClothingAccessible.entry("a biyelgee costume")) {
+					if (isClothingAccessible.entry("a biyelgee costume") === true) {
 						wardrobeTastes.push({text: `and chooses an outfit that makes ${him} feel oddly nostalgic.`, clothes: "a biyelgee costume"});
 					}
 				}
diff --git a/src/js/itemAvailability.js b/src/js/itemAvailability.js
index c50d1231077fa042d8f1c5c102a5335a9fd08ad6..92a3f257d06871c9b04b22c603b74931c4efe0ef 100644
--- a/src/js/itemAvailability.js
+++ b/src/js/itemAvailability.js
@@ -162,7 +162,7 @@ window.isItemAccessible = function(string) {
 		case "cat tail":
 		case "fox tail":
 			return (V.toysBoughtButtPlugTails === 1);
-		// "Normal" things:
+			// "Normal" things:
 		case "an apron":
 		case "slutty jewelry":
 		case "clubslut netting":
@@ -209,25 +209,57 @@ window.isClothingAccessible = (function() {
 	/**
 	 * Checks whether clothing is accessible
 	 * @param {string} string Name of wearable item
-	 * @returns {boolean}
+	 * @param {string} category that item is in clothing, collar, etc
+	 * @param {App.Entity.SlaveState} slave
+	 * @returns {boolean|string} Returns true if item is accessible, and false if it is not.  If the slave param is set, it may sometimes return a string instead of false, explaining why the item can't be used with that slave.
 	 */
-	function entry(string, category="clothing") {
+	function entry(string, category = "clothing", slave) {
 		if (V.cheatMode === 1) {
 			return true;
 		}
-		let niceDB;
-		let harshDB;
-		if (["clothing", "clothes"].includes(category)) {
-			niceDB = App.Data.misc.niceClothes;
-			harshDB = App.Data.misc.harshClothes;
-		} else if (category === "collar") {
-			niceDB = App.Data.misc.niceCollars;
-			harshDB = App.Data.misc.harshCollars;
-		} else {
-			niceDB = App.Data.misc[category];
+		let niceDB = [];
+		let harshDB = [];
+		switch (category) {
+			case "clothing":
+			case "clothes":
+				niceDB = App.Data.misc.niceClothes;
+				harshDB = App.Data.misc.harshClothes;
+				break;
+			case "collar":
+				niceDB = App.Data.misc.niceCollars;
+				harshDB = App.Data.misc.harshCollars;
+				break;
+			case "bellyAccessory":
+				niceDB = App.Data.misc.bellyAccessories;
+				break;
+			case "buttplug":
+				niceDB = App.Data.misc.buttplugs;
+				break;
+			case "buttplugAttachment":
+				niceDB = App.Data.misc.buttplugAttachments;
+				break;
+			case "vaginalAccessory":
+				niceDB = App.Data.misc.vaginalAccessories;
+				break;
+			case "vaginalAttachment":
+				niceDB = App.Data.misc.vaginalAttachments;
+				break;
+			case "dickAccessory":
+				niceDB = App.Data.misc.vaginalAccessories;
+				break;
+			case "shoes":
+				niceDB = App.Data.misc.shoes;
+				break;
+			case "chastity":
+				niceDB = App.Data.misc.chastityDevices;
+				break;
+			default:
+				console.log(`made a category for ${category} automatically, may need to define this by hand`);
+				niceDB = App.Data.misc[category];
+				break;
 		}
 		let item = niceDB.find((i) => i.value === string);
-		if (!item && typeof harshDB !== undefined) {
+		if (!item && (typeof harshDB !== 'undefined')) {
 			item = harshDB.find((i) => i.value === string);
 		}
 		if (!item) {
@@ -235,7 +267,7 @@ window.isClothingAccessible = (function() {
 			console.log(string);
 			return false; /* couldn't be found */
 		}
-		return isAvailable(item);
+		return isAvailable(item, category, slave);
 	}
 	/**
 	 * Returns array of wearable clothing in format [name, value], basically player facing / game data.
@@ -254,38 +286,247 @@ window.isClothingAccessible = (function() {
 		});
 		return array;
 	}
-	function isAvailable(item) {
-		if (!(item.hasOwnProperty("unlock")) && !(item.hasOwnProperty("fs")) && !(item.hasOwnProperty("rs"))) {
+
+	function isAvailable(item, category, slave) {
+		if (slave) {
+			let slaveResults = isAvailableForSlave(item, category, slave);
+			if (slaveResults !== true) { // If they are true we pass this check but want to run the others.
+				return slaveResults;
+			}
+		}
+		if (!(item.hasOwnProperty("fs")) && !(item.hasOwnProperty("rs"))) {
 			// No restriction, this clothing item is available to everyone
 			return true;
 		}
 		if (item.hasOwnProperty("rs")) {
-			if (V.arcologies[0][item.rs] > 0) {
-				return true;
+			if (typeof item.rs === 'object' && item.rs !== null) {
+				let fail = false;
+				// Scan rs requirments one by one if they are an object
+				Object.keys(item.rs).forEach((requirement) => {
+					if (typeof item.rs[requirement] === 'object' && item.rs[requirement] !== null) {
+						let eitherCheck = 0;
+						if (requirement === "either") { // If we find the "either" nested object, we need to see if just one of the conditions in it are true.
+							Object.keys(item.rs.either).forEach((nestedRequirement) => {
+								if (typeof item.rs.either[nestedRequirement] === 'object' && item.rs.either[nestedRequirement] !== null) { // And yes sometimes even in either we have a nested object, to check V.PC mostly, so check for it.
+									let insideEitherCheck = 0;
+									Object.keys(item.rs.either[nestedRequirement]).forEach((insideNestedRequirement) => {
+										if (V[nestedRequirement][insideNestedRequirement] === item.rs.either[nestedRequirement][insideNestedRequirement]) {
+											insideEitherCheck++;
+										}
+									});
+									if (insideEitherCheck > 0) {
+										eitherCheck++;
+									}
+									if (V[nestedRequirement] === item.rs.either[nestedRequirement]) {
+										eitherCheck++;
+									}
+								}
+							});
+						} else {
+							Object.keys(item.rs.either).forEach((nestedRequirement) => { // Otherwise we are probably recording a nested V variable to be checked.
+								if (V[requirement][nestedRequirement] === item.rs[requirement][nestedRequirement]) {
+									eitherCheck++;
+								}
+							});
+						}
+						if (eitherCheck === 0) {
+							fail = true;
+						}
+					} else {
+						if (V[requirement] !== item.rs[requirement]) {
+							fail = true;
+						}
+					}
+				});
+				if (fail) {
+					return false;
+				}
+			} else { // string
+				if (V[item.rs] < 1) {
+					return false;
+				}
 			}
 		}
 		if (item.hasOwnProperty("fs")) {
-			if (V.arcologies[0][item.fs] > 0) {
-				return true;
+			if (!(V.arcologies[0][item.fs] > 0)) {
+				return false;
 			}
 		}
-		if (item.hasOwnProperty("unlock")) {
-			let keys = Object.keys(item.unlock);
-			for (let key in keys) {
-				if (keys[key] === "continent" && V.continent === item.unlock[keys[key]]) {
-					return true;
-				} else if (V[keys[key]] > 0 ) {
-					return true;
+		return true;
+	}
+
+	function isAvailableForSlave(item, category, slave) {
+		switch (category) {
+			case "clothing":
+			case "clothes":
+				break;
+			case "collar":
+				break;
+			case "bellyAccessory": {
+				switch (item.value) {
+					case "a support band": {
+						if (slave.belly > 10000) {
+							return true;
+						} else {
+							return `Slave belly too small for this`;
+						}
+					}
+					case "a small empathy belly":
+					case "a medium empathy belly":
+					case "a large empathy belly":
+					case "a huge empathy belly": {
+						if (slave.belly < 1500 && slave.weight < 130) {
+							return true;
+						} else {
+							return `Slave belly too big for this`;
+						}
+					}
+					default:
+						return true;
 				}
 			}
-			// special case where they must both be true
-			if (item.unlock.clothesBoughtSports && item.unlock.clothesBoughtCasual) {
-				if (V.clothesBoughtSports && V.clothesBoughtCasual) {
-					return true;
+			case "buttplug": {
+				switch (item.value) {
+					case "huge plug": {
+						if (slave.anus < 2) {
+							return `Slave's anus is too small for this right now`;
+						} else {
+							return true;
+						}
+					}
+					case "long plug":
+					case "long, large plug": {
+						if (!(slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) {
+							return "Elites frown on this";
+						} else {
+							return true;
+						}
+					}
+					case "long, huge plug": {
+						if (slave.anus < 2) {
+							return `Slave's anus is too small for this right now`;
+						} else if (!(slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) {
+							return "Elites frown on this";
+						} else {
+							return true;
+						}
+					}
+					default:
+						return true;
 				}
 			}
+			case "buttplugAttachment":
+				break;
+			case "vaginalAccessory": {
+				if (slave.vagina < 0) {
+					return false;
+				}
+				switch (item.value) {
+					case "huge dildo": {
+						if (slave.vagina < 2) {
+							return `Slave's vagina is too small for this right now`;
+						} else {
+							return true;
+						}
+					}
+					case "long dildo":
+					case "long, large dildo": {
+						if (!(slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) {
+							return "Elites frown on this";
+						} else {
+							return true;
+						}
+					}
+					case "long, huge dildo": {
+						if (slave.vagina < 2) {
+							return `Slave's vagina is too small for this right now`;
+						} else if (!(slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) {
+							return "Elites frown on this";
+						} else {
+							return true;
+						}
+					}
+					default:
+						return true;
+				}
+			}
+			case "vaginalAttachment": {
+				if (slave.vagina < 0) {
+					return false;
+				}
+				switch (item.value) {
+					case "vibrator":
+						if (slave.vaginalAccessory === "none") {
+							return "No vaginal accessory to attach it to";
+						} else if (slave.vaginalAccessory === "bullet vibrator" || slave.vaginalAccessory === "smart bullet vibrator") {
+							return "Vaginal accessory already vibrates";
+						} else {
+							return true;
+						}
+				}
+				break;
+			}
+			case "dickAccessory":
+				if (slave.dick < 1) {
+					return false;
+				}
+				return true;
+			case "shoes":
+				break;
+			case "chastity": {
+				switch (item.value) {
+					case "chastity belt":
+					case "combined chastity belt": {
+						if (slave.vagina > -1) {
+							return true;
+						} else {
+							return false;
+						}
+					}
+					case "chastity cage":
+					case "combined chastity cage": {
+						if (slave.dick > 0) {
+							return true;
+						} else {
+							return false;
+						}
+					}
+					case "genital chastity":
+					case "full chastity": {
+						if (slave.vagina > -1 && slave.dick > 0) {
+							return true;
+						} else {
+							return false;
+						}
+					}
+					case "choose own chastity": {
+						if (slave.choosesOwnChastity !== 1 && slave.devotion > 20 && slave.trust > 0) {
+							if (slave.choosesOwnClothes === 1) {
+								return "Slave is not choosing own clothing";
+							} else {
+								return true;
+							}
+						}
+						return false;
+					}
+					case "revoke choosing own chastity": {
+						if (slave.choosesOwnChastity > 0 && slave.devotion > 20 && slave.trust > 0) {
+							if (slave.choosesOwnClothes === 1) {
+								return "Slave is not choosing own clothing";
+							} else {
+								return true;
+							}
+						}
+						return false;
+					}
+					default:
+						return true;
+				}
+			}
+			default:
+				break;
 		}
-		return false;
+		return true;
 	}
 })();
 
@@ -308,8 +549,8 @@ window.addProsthetic = function(slave, prosthetic) {
 		if (limb > 0) {
 			let p = {
 				id: prosthetic,
-				arm: {left: new App.Entity.LimbState(), right: new App.Entity.LimbState()},
-				leg: {left: new App.Entity.LimbState(), right: new App.Entity.LimbState()}
+				arm: { left: new App.Entity.LimbState(), right: new App.Entity.LimbState() },
+				leg: { left: new App.Entity.LimbState(), right: new App.Entity.LimbState() }
 			};
 			p.arm.left.type = limb;
 			p.arm.right.type = limb;
@@ -317,7 +558,7 @@ window.addProsthetic = function(slave, prosthetic) {
 			p.leg.right.type = limb;
 			slave.readyProsthetics.push(p);
 		} else {
-			slave.readyProsthetics.push({id: prosthetic});
+			slave.readyProsthetics.push({ id: prosthetic });
 		}
 	}
 };
diff --git a/src/js/rulesAssistantOptions.js b/src/js/rulesAssistantOptions.js
index 65bb52811f031f5b92b3e6319515ff3e57f63eaf..7fa48dc20ea9087f572c70380b6edc56998499ba 100644
--- a/src/js/rulesAssistantOptions.js
+++ b/src/js/rulesAssistantOptions.js
@@ -2007,7 +2007,7 @@ window.rulesAssistantOptions = (function() {
 			setup.buttplugs.forEach(acc => {
 				if (acc.fs === undefined && acc.rs === undefined) {
 					accs.push([acc.name, acc.value]);
-				} else if (acc.rs === "buyBigPlugs" && V.toysBoughtButtPlugs === 1) {
+				} else if (acc.rs === "toysBoughtButtPlugs" && V.toysBoughtButtPlugs === 1) {
 					accs.push([`${acc.name} (Purchased)`, acc.value]);
 				}
 			});
@@ -2023,7 +2023,7 @@ window.rulesAssistantOptions = (function() {
 			setup.buttplugs.forEach(acc => {
 				if (acc.fs === undefined && acc.rs === undefined) {
 					accs.push([acc.name, acc.value]);
-				} else if (acc.rs === "buyBigPlugs" && V.toysBoughtButtPlugs === 1) {
+				} else if (acc.rs === "toysBoughtButtPlugs" && V.toysBoughtButtPlugs === 1) {
 					accs.push([`${acc.name} (Purchased)`, acc.value]);
 				}
 			});
@@ -2039,7 +2039,7 @@ window.rulesAssistantOptions = (function() {
 			setup.buttplugAttachments.forEach(acc => {
 				if (acc.fs === undefined && acc.rs === undefined) {
 					accs.push([acc.name, acc.value]);
-				} else if (acc.rs === "buyTails" && V.toysBoughtButtPlugTails === 1) {
+				} else if (acc.rs === "toysBoughtButtPlugTails" && V.toysBoughtButtPlugTails === 1) {
 					accs.push([`${acc.name} (Purchased)`, acc.value]);
 				}
 			});
diff --git a/src/js/wardrobeUse.js b/src/js/wardrobeUse.js
index 8949cd73066bf876e048c9e6e9c3c35a0a8259ae..cfa2d979c032238933028b42ab4e6b66d14bb2cc 100644
--- a/src/js/wardrobeUse.js
+++ b/src/js/wardrobeUse.js
@@ -5,9 +5,8 @@ App.UI.Wardrobe.clothes = function(slave) {
 		return;
 	}
 
-	const
-		{
-			// eslint-disable-next-line no-unused-vars
+	const {
+		// eslint-disable-next-line no-unused-vars
 			he, him, his, hers, himself, boy, He, His
 		} = getPronouns(slave);
 
@@ -23,15 +22,15 @@ App.UI.Wardrobe.clothes = function(slave) {
 
 	// Choose her own
 	if (slave.clothes !== `choosing her own clothes`) {
-		let choiceOptionsArray= [];
+		let choiceOptionsArray = [];
 		choiceOptionsArray.push({text: `Let ${him} choose`, updateSlave: {clothes: `choosing her own clothes`}});
-		label.appendChild(App.UI.Wardrobe.generateRows(choiceOptionsArray, "clothes", slave, true));
+		label.appendChild(App.UI.Wardrobe.generateRows(choiceOptionsArray, "clothes", slave, false));
 	}
 	el.appendChild(label);
 
 
-	let niceOptionsArray= [];
-	let harshOptionsArray= [];
+	let niceOptionsArray = [];
+	let harshOptionsArray = [];
 
 	let clothingOption;
 	// Nice clothes
@@ -54,7 +53,9 @@ App.UI.Wardrobe.clothes = function(slave) {
 		if (item.fs) {
 			clothingOption.FS = item.fs;
 		}
-		harshOptionsArray.push(clothingOption);
+		if (item.value !== "choosing her own clothes") {
+			harshOptionsArray.push(clothingOption);
+		}
 	});
 
 	// Sort
@@ -65,14 +66,14 @@ App.UI.Wardrobe.clothes = function(slave) {
 	let links = document.createElement('div');
 	links.className = "choices";
 	links.append(`Nice: `);
-	links.appendChild(App.UI.Wardrobe.generateRows(niceOptionsArray, "clothes", slave, false));
+	links.appendChild(App.UI.Wardrobe.generateRows(niceOptionsArray, "clothes", slave, true));
 	el.appendChild(links);
 
 	// Harsh options
 	links = document.createElement('div');
 	links.className = "choices";
 	links.append(`Harsh: `);
-	links.appendChild(App.UI.Wardrobe.generateRows(harshOptionsArray, "clothes", slave, false));
+	links.appendChild(App.UI.Wardrobe.generateRows(harshOptionsArray, "clothes", slave, true));
 	el.appendChild(links);
 
 	return jQuery('#clothes').empty().append(el);
@@ -95,15 +96,15 @@ App.UI.Wardrobe.collar = function(slave) {
 
 	// Choose her own
 	if (slave.collar !== `none`) {
-		let choiceOptionsArray= [];
+		let choiceOptionsArray = [];
 		choiceOptionsArray.push({text: `None`, updateSlave: {collar: `none`}});
-		label.appendChild(App.UI.Wardrobe.generateRows(choiceOptionsArray, "collar", slave, true));
+		label.appendChild(App.UI.Wardrobe.generateRows(choiceOptionsArray, "collar", slave, false));
 	}
 
 	el.appendChild(label);
 
-	let niceOptionsArray= [];
-	let harshOptionsArray= [];
+	let niceOptionsArray = [];
+	let harshOptionsArray = [];
 
 	let clothingOption;
 	// Nice collar
@@ -137,14 +138,14 @@ App.UI.Wardrobe.collar = function(slave) {
 	let links = document.createElement('div');
 	links.className = "choices";
 	links.append(`Nice: `);
-	links.appendChild(App.UI.Wardrobe.generateRows(niceOptionsArray, "collar", slave, false));
+	links.appendChild(App.UI.Wardrobe.generateRows(niceOptionsArray, "collar", slave, true));
 	el.appendChild(links);
 
 	// Harsh options
 	links = document.createElement('div');
 	links.className = "choices";
 	links.append(`Harsh: `);
-	links.appendChild(App.UI.Wardrobe.generateRows(harshOptionsArray, "collar", slave, false));
+	links.appendChild(App.UI.Wardrobe.generateRows(harshOptionsArray, "collar", slave, true));
 	el.appendChild(links);
 
 	return jQuery('#collar').empty().append(el);
@@ -170,7 +171,7 @@ App.UI.Wardrobe.armAccessory = function(slave) {
 	// Choose her own
 	if (slave.armAccessory !== "none") {
 		array.push({text: `None`, updateSlave: {armAccessory: `none`}});
-		label.appendChild(App.UI.Wardrobe.generateRows(array, "armAccessory", slave, true));
+		label.appendChild(App.UI.Wardrobe.generateRows(array, "armAccessory", slave, false));
 	}
 
 	el.appendChild(label);
@@ -181,7 +182,7 @@ App.UI.Wardrobe.armAccessory = function(slave) {
 		{text: "Hand gloves", updateSlave: {armAccessory: "hand gloves"}},
 		{text: "Elbow gloves", updateSlave: {armAccessory: "elbow gloves"}}
 	];
-	links.appendChild(App.UI.Wardrobe.generateRows(array, "armAccessory", slave, true));
+	links.appendChild(App.UI.Wardrobe.generateRows(array, "armAccessory", slave, false));
 	el.appendChild(links);
 
 	return jQuery('#armAccessory').empty().append(el);
@@ -198,10 +199,27 @@ App.UI.Wardrobe.shoes = function(slave) {
 			he, him, his, hers, himself, boy, He, His
 		} = getPronouns(slave);
 
-	let choiceOptionsArray= [];
-	choiceOptionsArray.push({text: `None`, updateSlave: {shoes: `none`}});
+	let el = document.createElement('div');
+
+	let label = document.createElement('div');
+	label.append(`Shoes: `);
+
+	let choice = document.createElement('span');
+	choice.style.fontWeight = "bold";
+	choice.textContent = (`${slave.shoes} `);
+	label.appendChild(choice);
+
+	/* We have "barefoot" in App.Data.Misc to cover for this
+	// Choose her own
+	if (slave.shoes !== `none`) {
+		let choiceOptionsArray = [];
+		choiceOptionsArray.push({text: `None`, updateSlave: {shoes: `none`}});
+		label.appendChild(App.UI.Wardrobe.generateRows(choiceOptionsArray, "shoes", slave, false));
+	}
+	*/
+	el.appendChild(label);
 
-	let optionsArray= [];
+	let optionsArray = [];
 
 	let clothingOption;
 	App.Data.misc.shoes.forEach(item => {
@@ -216,28 +234,12 @@ App.UI.Wardrobe.shoes = function(slave) {
 	});
 
 	// Sort
-	optionsArray = optionsArray.sort((a, b) => (a.text > b.text) ? 1 : -1);
-
-	let el = document.createElement('div');
-
-	let label = document.createElement('div');
-	label.append(`Shoes: `);
-
-	let choice = document.createElement('span');
-	choice.style.fontWeight = "bold";
-	choice.textContent = (`${slave.shoes} `);
-	label.appendChild(choice);
-
-	// Choose her own
-	if (slave.shoes !== `none`) {
-		label.appendChild(App.UI.Wardrobe.generateRows(choiceOptionsArray, "shoes", slave, true));
-	}
-	el.appendChild(label);
+	// No sort here since we want light -> advanced.  optionsArray = optionsArray.sort((a, b) => (a.text > b.text) ? 1 : -1);
 
 	// Options
 	let links = document.createElement('div');
 	links.className = "choices";
-	links.appendChild(App.UI.Wardrobe.generateRows(optionsArray, "shoes", slave));
+	links.appendChild(App.UI.Wardrobe.generateRows(optionsArray, "shoes", slave, true));
 	el.appendChild(links);
 
 	return jQuery('#shoes').empty().append(el);
@@ -248,9 +250,8 @@ App.UI.Wardrobe.legAccessory = function(slave) {
 		return;
 	}
 
-	const
-		{
-			// eslint-disable-next-line no-unused-vars
+	const {
+		// eslint-disable-next-line no-unused-vars
 			he, him, his, hers, himself, boy, He, His
 		} = getPronouns(slave);
 
@@ -269,7 +270,7 @@ App.UI.Wardrobe.legAccessory = function(slave) {
 	// Choose her own
 	if (slave.legAccessory !== "none") {
 		array.push({text: `None`, updateSlave: {legAccessory: `none`}});
-		label.appendChild(App.UI.Wardrobe.generateRows(array, "legAccessory", slave, true));
+		label.appendChild(App.UI.Wardrobe.generateRows(array, "legAccessory", slave, false));
 	}
 
 	el.appendChild(label);
@@ -280,17 +281,449 @@ App.UI.Wardrobe.legAccessory = function(slave) {
 		{text: "Short stockings", updateSlave: {legAccessory: "short stockings"}},
 		{text: "Long stockings", updateSlave: {legAccessory: "long stockings"}}
 	];
-	links.appendChild(App.UI.Wardrobe.generateRows(array, "legAccessory", slave, true));
+	links.appendChild(App.UI.Wardrobe.generateRows(array, "legAccessory", slave, false));
 	el.appendChild(links);
 
 	return jQuery('#legAccessory').empty().append(el);
 };
 
-App.UI.Wardrobe.generateRows = function(array, category, slave, ignoreAccessCheck="false") { // category should be in the form of slave.category, the thing we want to update.
+App.UI.Wardrobe.bellyAccessory = function(slave) {
+	if (slave.fuckdoll !== 0) {
+		return;
+	}
+
+	const {
+		// eslint-disable-next-line no-unused-vars
+			he, him, his, hers, himself, boy, He, His
+		} = getPronouns(slave);
+
+	let choiceOptionsArray = [];
+	choiceOptionsArray.push({text: `None`, updateSlave: {bellyAccessory: `none`}});
+
+	let optionsArray = [];
+
+	let clothingOption;
+	App.Data.misc.bellyAccessories.forEach(item => {
+		clothingOption = {
+			text: item.name,
+			updateSlave: {bellyAccessory: item.value}
+		};
+		if (item.fs) {
+			clothingOption.FS = item.fs;
+		}
+		if (item.value !== "none") {
+			// skip none in set, we set the link elsewhere.
+			optionsArray.push(clothingOption);
+		}
+	});
+	// Sort
+	// No sort here since we want small -> large.optionsArray = optionsArray.sort((a, b) => (a.text > b.text) ? 1 : -1);
+
+	let el = document.createElement('div');
+
+	let label = document.createElement('div');
+	label.append(`Belly accessory: `);
+
+	let choice = document.createElement('span');
+	choice.style.fontWeight = "bold";
+	choice.textContent = (`${slave.bellyAccessory} `);
+	label.appendChild(choice);
+
+	// Choose her own
+	if (slave.bellyAccessory !== `none`) {
+		label.appendChild(App.UI.Wardrobe.generateRows(choiceOptionsArray, "bellyAccessory", slave, false));
+	}
+
+	el.appendChild(label);
+
+	// Options
+	let links = document.createElement('div');
+	links.className = "choices";
+	links.appendChild(App.UI.Wardrobe.generateRows(optionsArray, "bellyAccessory", slave, true));
+	el.appendChild(links);
+
+	return jQuery('#bellyAccessory').empty().append(el);
+};
+
+App.UI.Wardrobe.buttplug = function(slave) {
+	if (slave.fuckdoll !== 0) {
+		return;
+	}
+
+	const {
+		// eslint-disable-next-line no-unused-vars
+			he, him, his, hers, himself, boy, He, His
+		} = getPronouns(slave);
+
+	let el = document.createElement('div');
+
+	let label = document.createElement('div');
+	label.append(`Anal accessory: `);
+
+	let choice = document.createElement('span');
+	choice.style.fontWeight = "bold";
+	choice.textContent = (`${slave.buttplug} `);
+	label.appendChild(choice);
+
+	if (slave.buttplug !== `none`) {
+		let choiceOptionsArray = [];
+		choiceOptionsArray.push({text: `None`, updateSlave: {buttplug: `none`}});
+		label.appendChild(App.UI.Wardrobe.generateRows(choiceOptionsArray, "buttplug", slave, false));
+	}
+	el.appendChild(label);
+
+	let optionsArray = [];
+
+	let clothingOption;
+	App.Data.misc.buttplugs.forEach(item => {
+		clothingOption = {
+			text: item.name,
+			updateSlave: {buttplug: item.value}
+		};
+		if (item.fs) {
+			clothingOption.FS = item.fs;
+		}
+
+		if (item.value !== "none") {
+			// skip none in set, we set the link elsewhere.
+			optionsArray.push(clothingOption);
+		}
+	});
+
+	// Sort
+	// No sort here since we want small -> large.  optionsArray = optionsArray.sort((a, b) => (a.text > b.text) ? 1 : -1);
+
+	// Options
+	let links = document.createElement('div');
+	links.className = "choices";
+	links.appendChild(App.UI.Wardrobe.generateRows(optionsArray, "buttplug", slave, true));
+	el.appendChild(links);
+
+	return jQuery('#buttplug').empty().append(el);
+};
+
+App.UI.Wardrobe.buttplugAttachment = function(slave) {
+	if (slave.fuckdoll !== 0) {
+		return;
+	} else if (slave.buttplug === "none") {
+		return jQuery('#buttplugAttachment').empty();
+	}
+
+	const {
+		// eslint-disable-next-line no-unused-vars
+			he, him, his, hers, himself, boy, He, His
+		} = getPronouns(slave);
+
+	let el = document.createElement('div');
+
+	let label = document.createElement('div');
+	label.append(`Anal accessory attachment: `);
+
+	let choice = document.createElement('span');
+	choice.style.fontWeight = "bold";
+	choice.textContent = (`${slave.buttplugAttachment} `);
+	label.appendChild(choice);
+
+	if (slave.buttplugAttachment !== `none`) {
+		let choiceOptionsArray = [];
+		choiceOptionsArray.push({text: `None`, updateSlave: {buttplugAttachment: `none`}});
+		label.appendChild(App.UI.Wardrobe.generateRows(choiceOptionsArray, "buttplugAttachment", slave, false));
+	}
+	el.appendChild(label);
+
+	let optionsArray = [];
+
+	let clothingOption;
+	App.Data.misc.buttplugAttachments.forEach(item => {
+		clothingOption = {
+			text: item.name,
+			updateSlave: {buttplugAttachment: item.value}
+		};
+		if (item.fs) {
+			clothingOption.FS = item.fs;
+		}
+
+		if (item.value !== "none") {
+			// skip none in set, we set the link elsewhere.
+			optionsArray.push(clothingOption);
+		}
+	});
+
+	// Sort
+	optionsArray = optionsArray.sort((a, b) => (a.text > b.text) ? 1 : -1);
+
+	// Options
+	let links = document.createElement('div');
+	links.className = "choices";
+	links.appendChild(App.UI.Wardrobe.generateRows(optionsArray, "buttplugAttachment", slave, true));
+	el.appendChild(links);
+
+	return jQuery('#buttplugAttachment').empty().append(el);
+};
+
+App.UI.Wardrobe.vaginalAccessory = function(slave) {
+	if (slave.fuckdoll !== 0) {
+		return;
+	}
+
+	const {
+		// eslint-disable-next-line no-unused-vars
+			he, him, his, hers, himself, boy, He, His
+		} = getPronouns(slave);
+
+	let el = document.createElement('div');
+
+	let label = document.createElement('div');
+	label.append(`Vaginal accessory: `);
+
+	let choice = document.createElement('span');
+	choice.style.fontWeight = "bold";
+	choice.textContent = (`${slave.vaginalAccessory} `);
+	label.appendChild(choice);
+
+	if (slave.vaginalAccessory !== `none`) {
+		let choiceOptionsArray = [];
+		choiceOptionsArray.push({text: `None`, updateSlave: {vaginalAccessory: `none`}});
+		label.appendChild(App.UI.Wardrobe.generateRows(choiceOptionsArray, "vaginalAccessory", slave, false));
+	}
+	el.appendChild(label);
+
+	let optionsArray = [];
+
+	let clothingOption;
+	App.Data.misc.vaginalAccessories.forEach(item => {
+		clothingOption = {
+			text: item.name,
+			updateSlave: {vaginalAccessory: item.value}
+		};
+		if (item.fs) {
+			clothingOption.FS = item.fs;
+		}
+
+		if (item.value !== "none") {
+			// skip none in set, we set the link elsewhere.
+			optionsArray.push(clothingOption);
+		}
+	});
+
+	// Sort
+	// No sort here since we want small -> large.  optionsArray = optionsArray.sort((a, b) => (a.text > b.text) ? 1 : -1);
+
+	// Options
+	let links = document.createElement('div');
+	links.className = "choices";
+	links.appendChild(App.UI.Wardrobe.generateRows(optionsArray, "vaginalAccessory", slave, true));
+	el.appendChild(links);
+
+	return jQuery('#vaginalAccessory').empty().append(el);
+};
+
+App.UI.Wardrobe.vaginalAttachment = function(slave) {
+	if (slave.fuckdoll !== 0) {
+		return;
+	} else if (slave.vaginalAccessory === "none") {
+		return jQuery('#vaginalAttachment').empty();
+	}
+
+	const {
+		// eslint-disable-next-line no-unused-vars
+			he, him, his, hers, himself, boy, He, His
+		} = getPronouns(slave);
+
+	let el = document.createElement('div');
+
+	let label = document.createElement('div');
+	label.append(`Vaginal accessory attachment: `);
+
+	let choice = document.createElement('span');
+	choice.style.fontWeight = "bold";
+	choice.textContent = (`${slave.vaginalAttachment} `);
+	label.appendChild(choice);
+
+	if (slave.vaginalAttachment !== `none`) {
+		let choiceOptionsArray = [];
+		choiceOptionsArray.push({text: `None`, updateSlave: {vaginalAttachment: `none`}});
+		label.appendChild(App.UI.Wardrobe.generateRows(choiceOptionsArray, "vaginalAttachment", slave, false));
+	}
+	el.appendChild(label);
+
+	let optionsArray = [];
+
+	let clothingOption;
+	App.Data.misc.vaginalAttachments.forEach(item => {
+		clothingOption = {
+			text: item.name,
+			updateSlave: {vaginalAttachment: item.value}
+		};
+		if (item.fs) {
+			clothingOption.FS = item.fs;
+		}
+
+		if (item.value !== "none") {
+			// skip none in set, we set the link elsewhere.
+			optionsArray.push(clothingOption);
+		}
+	});
+
+	// Sort
+	optionsArray = optionsArray.sort((a, b) => (a.text > b.text) ? 1 : -1);
+
+	// Options
+	let links = document.createElement('div');
+	links.className = "choices";
+	links.appendChild(App.UI.Wardrobe.generateRows(optionsArray, "vaginalAttachment", slave, true));
+	el.appendChild(links);
+
+	return jQuery('#vaginalAttachment').empty().append(el);
+};
+
+App.UI.Wardrobe.dickAccessory = function(slave) {
+	if (slave.fuckdoll !== 0) {
+		return;
+	}
+
+	const {
+		// eslint-disable-next-line no-unused-vars
+			he, him, his, hers, himself, boy, He, His
+		} = getPronouns(slave);
+
+	let el = document.createElement('div');
+
+	let label = document.createElement('div');
+	label.append(`Dick accessory: `);
+
+	let choice = document.createElement('span');
+	choice.style.fontWeight = "bold";
+	choice.textContent = (`${slave.dickAccessory} `);
+	label.appendChild(choice);
+
+	if (slave.dickAccessory !== `none`) {
+		let choiceOptionsArray = [];
+		choiceOptionsArray.push({text: `None`, updateSlave: {dickAccessory: `none`}});
+		label.appendChild(App.UI.Wardrobe.generateRows(choiceOptionsArray, "dickAccessory", slave, false));
+	}
+	el.appendChild(label);
+
+	let optionsArray = [];
+
+	let clothingOption;
+	App.Data.misc.dickAccessories.forEach(item => {
+		clothingOption = {
+			text: item.name,
+			updateSlave: {dickAccessory: item.value}
+		};
+		if (item.fs) {
+			clothingOption.FS = item.fs;
+		}
+
+		if (item.value !== "none") {
+			// skip none in set, we set the link elsewhere.
+			optionsArray.push(clothingOption);
+		}
+	});
+
+	// Sort
+	// No sort here since we want small -> large.  optionsArray = optionsArray.sort((a, b) => (a.text > b.text) ? 1 : -1);
+
+	// Options
+	let links = document.createElement('div');
+	links.className = "choices";
+	links.appendChild(App.UI.Wardrobe.generateRows(optionsArray, "dickAccessory", slave, true));
+	el.appendChild(links);
+
+	return jQuery('#dickAccessory').empty().append(el);
+};
+
+App.UI.Wardrobe.chastity = function(slave) {
+	if (slave.fuckdoll !== 0) {
+		return;
+	}
+
+	const {
+		// eslint-disable-next-line no-unused-vars
+		he,	him, his, hers, himself, boy, He, His
+	} = getPronouns(slave);
+
+	let el = document.createElement('div');
+
+	let label = document.createElement('div');
+	label.append(`Chastity devices: `);
+
+	let choice = document.createElement('span');
+	choice.style.fontWeight = "bold";
+	if (slave.choosesOwnChastity === 1) {
+		choice.textContent = `choosing ${his} own chastity `;
+	} else if (slave.chastityAnus === 1 && slave.chastityPenis === 1 && slave.chastityVagina === 1) {
+		choice.textContent = `full chastity `;
+	} else if (slave.chastityPenis === 1 && slave.chastityVagina === 1) {
+		choice.textContent = `genital chastity `;
+	} else if (slave.chastityAnus === 1 && slave.chastityPenis === 1) {
+		choice.textContent = `combined chastity cage `;
+	} else if (slave.chastityAnus === 1 && slave.chastityVagina === 1) {
+		choice.textContent = `combined chastity belt `;
+	} else if (slave.chastityVagina === 1) {
+		choice.textContent = `chastity belt `;
+	} else if (slave.chastityPenis === 1) {
+		choice.textContent = `chastity cage `;
+	} else if (slave.chastityAnus === 1) {
+		choice.textContent = `anal chastity `;
+	} else if (slave.chastityAnus === 0 && slave.chastityPenis === 0 && slave.chastityVagina === 0) {
+		choice.textContent = `none `;
+	} else {
+		choice.textContent = `THERE HAS BEEN AN ERROR `;
+	}
+	label.appendChild(choice);
+
+	if (slave.chastityAnus !== 0 || slave.chastityPenis !== 0 || slave.chastityVagina !== 0) {
+		let choiceOptionsArray = [];
+		choiceOptionsArray.push({
+			text: `None`,
+			updateSlave: {
+				choosesOwnChastity: 0,
+				chastityAnus: 0,
+				chastityPenis: 0,
+				chastityVagina: 0
+			}
+		});
+		label.appendChild(App.UI.Wardrobe.generateRows(choiceOptionsArray, "chastity", slave, false));
+	}
+	el.appendChild(label);
+
+	let optionsArray = [];
+
+	let clothingOption;
+	App.Data.misc.chastityDevices.forEach(item => {
+		clothingOption = {
+			text: item.name,
+			updateSlave: {}
+		};
+		Object.assign(clothingOption.updateSlave, item.updateSlave);
+		if (item.fs) {
+			clothingOption.FS = item.fs;
+		}
+		if (item.value !== "none") {
+			// skip none in set, we set the link elsewhere.
+			optionsArray.push(clothingOption);
+		}
+	});
+
+	// Sort
+	// skip sort for this one too. optionsArray = optionsArray.sort((a, b) => (a.text > b.text) ? 1 : -1);
+
+	// Options
+	let links = document.createElement('div');
+	links.className = "choices";
+	links.appendChild(App.UI.Wardrobe.generateRows(optionsArray, "chastity", slave, true));
+	el.appendChild(links);
+
+	return jQuery('#chastity').empty().append(el);
+};
+
+App.UI.Wardrobe.generateRows = function(array, category, slave, accessCheck = false) { // category should be in the form of slave.category, the thing we want to update.
 	let row = document.createElement('span');
 	for (let i = 0; i < array.length; i++) {
 		let link;
-		const separator  = document.createTextNode(` | `);
+		const separator = document.createTextNode(` | `);
 		const keys = Object.keys(array[i]);
 
 		// Test to see if there was a problem with the key
@@ -303,10 +736,25 @@ App.UI.Wardrobe.generateRows = function(array, category, slave, ignoreAccessChec
 				break;
 			}
 		}
-		if (ignoreAccessCheck === true || isClothingAccessible.entry(array[i].updateSlave[category], `${category}`)) {
+		// Some items will never be in App.data.misc, especially "none" if it falls in between harsh and nice data sets.  Trying to look it up would cause an error, which is what access check works around.
+		let unlocked = false;
+		if (accessCheck === true) {
+			if (Object.keys(array[i].updateSlave).length > 1 || category === "chastity") {
+				let text = array[i].text.toLowerCase(); // Yucky.  Sometimes for now updateSlave is an object since multiple values need to be set (chastity).  Compare using a lowercased name instead.
+				unlocked = isClothingAccessible.entry(text, `${category}`, slave, true);
+			} else {
+				unlocked = isClothingAccessible.entry(array[i].updateSlave[category], `${category}`, slave, true);
+			}
+		}
+		if (accessCheck === false || unlocked) {
+			if (i < array.length && i !== 0) { // start with separator (after first loop); can't after since the last loop may not have any text.
+				row.appendChild(separator);
+			}
 			// is it just text?
 			if (array[i].disabled) {
 				link = App.UI.DOM.disabledLink(array[i].text, [array[i].disabled]);
+			} else if (typeof unlocked === 'string') {
+				link = App.UI.DOM.disabledLink(array[i].text, [unlocked]);
 			} else {
 				link = document.createElement('span');
 
@@ -328,16 +776,13 @@ App.UI.Wardrobe.generateRows = function(array, category, slave, ignoreAccessChec
 
 				// add a note node if required
 				if (array[i].note) {
-					let note  = document.createElement('span');
+					let note = document.createElement('span');
 					note.textContent = (` ${array[i].note}`);
 					note.className = "note";
 					link.appendChild(note);
 				}
 			}
 			row.appendChild(link);
-			if (i < array.length-1) {
-				row.appendChild(separator);
-			}
 		}
 	}
 
@@ -361,203 +806,13 @@ App.UI.Wardrobe.refreshAll = function(slave) {
 	App.UI.Wardrobe.armAccessory(slave);
 	App.UI.Wardrobe.shoes(slave);
 	App.UI.Wardrobe.legAccessory(slave);
+	App.UI.Wardrobe.bellyAccessory(slave);
+	App.UI.Wardrobe.buttplug(slave);
+	App.UI.Wardrobe.buttplugAttachment(slave);
+	App.UI.Wardrobe.vaginalAccessory(slave);
+	App.UI.Wardrobe.vaginalAttachment(slave);
+	App.UI.Wardrobe.dickAccessory(slave);
+	App.UI.Wardrobe.chastity(slave);
+	App.Art.refreshSlaveArt(slave, 3, "artFrame");
 	return;
 };
-
-/*
-	<br>Collar: ''<span id="collar">slave.collar</span>.''
-	<<link "None">>slave.collar = "none";<</link>>
-	<br>&nbsp;&nbsp;&nbsp;&nbsp;//Nice://
-	<<link "Stylish leather">>slave.collar = "stylish leather";<</link>>
-	<<link "Satin choker">>slave.collar = "satin choker";<</link>>
-	<<link "Silken ribbon">>slave.collar = "silk ribbon";<</link>>
-	<<link "Heavy gold">>slave.collar = "heavy gold";<</link>>
-	<<link "Pretty jewelry">>slave.collar = "pretty jewelry";<</link>>
-	if ((V.seeAge !== 0)) {
-		<<link "Nice retirement counter">>slave.collar = "nice retirement counter";<</link>>
-	}
-	<<link "Bell">>slave.collar = "bell collar";<</link>>
-	<<link "Cowbell">>slave.collar = "leather with cowbell";<</link>>
-
-		//FS// <<link "Bowtie collar">>slave.collar = "bowtie";<</link>>
-	}
-
-		//FS// <<link "Ancient Egyptian">>slave.collar = "ancient Egyptian";<</link>>
-	}
-	<br>&nbsp;&nbsp;&nbsp;&nbsp;//Harsh://
-	<<link "Tight steel">>slave.collar = "tight steel";<</link>>
-	if ((V.seeAge !== 0)) {
-		<<link "Cruel retirement counter">>slave.collar = "cruel retirement counter";<</link>>
-	}
-	<<link "Uncomfortable leather">>slave.collar = "uncomfortable leather";<</link>>
-	if (slave.preg > -1 && (slave.ovaries === 1 |slave.mpreg === 1) && V.seePreg !== 0) {
-		<<link "Pregnancy biometrics">>slave.collar = "preg biometrics";<</link>>
-	}
-	<<link "Shock punishment">>slave.collar = "shock punishment";<</link>>
-	<<link "Dildo gag">>slave.collar = "dildo gag";<</link>>
-
-		if (slave.skill.oral > 50) {
-			<<link "Massive dildo gag">>slave.collar = "massive dildo gag";<</link>>
-		} else {
-			Massive dildo gag
-		}
-	}
-	<<link "Ball gag">>slave.collar = "ball gag";<</link>>
-	<<link "Bit gag">>slave.collar = "bit gag";<</link>>
-	<<link "Neck corset">>slave.collar = "neck corset";<</link>>
-	<<link "Porcelain mask">>slave.collar = "porcelain mask";<</link>>
-
-	if (hasAnyArms(slave)) {
-		<br>Arm accessory: ''<span id="armAccessory">slave.armAccessory</span>.''
-		<<link "None">>slave.armAccessory = "none";<</link>>
-		<<link "Hand gloves">>slave.armAccessory = "hand gloves";<</link>>
-		<<link "Elbow gloves">>slave.armAccessory = "elbow gloves";<</link>>
-	}
-
-	if (hasAnyLegs(slave)) {
-		<br>Shoes: ''<span id="shoes">slave.shoes</span>.''
-		<<link "Go barefoot">>slave.shoes = "none";<</link>>
-		<<link "Flats">>slave.shoes = "flats";<</link>>
-		<<link "Heels">>slave.shoes = "heels";<</link>>
-		<<link "Pumps">>slave.shoes = "pumps";<</link>>
-		<<link "Thigh boots">>slave.shoes = "boots";<</link>>
-		<<link "Painfully extreme heels">>slave.shoes = "extreme heels";<</link>>
-
-			<<link "Platforms">>slave.shoes = "platform shoes";<</link>>
-			<<link "Platform heels">>slave.shoes = "platform heels";<</link>>
-			<<link "Painfully extreme platform heels">>slave.shoes = "extreme platform heels";<</link>>
-		}
-
-		<br>Leg accessory: ''<span id="legAccessory">slave.legAccessory</span>.''
-		<<link "None">>slave.legAccessory = "none";<</link>>
-		<<link "Short stockings">>slave.legAccessory = "short stockings";<</link>>
-		<<link "Long stockings">>slave.legAccessory = "long stockings";<</link>>
-	}
-
-	<br>Torso accessory: ''<span id="bellyAccessory">slave.bellyAccessory</span>.''
-	<<link "None">>slave.bellyAccessory = "none";<</link>>
-	<<link "Tight corset">>slave.bellyAccessory = "a corset";<</link>>
-	if ((slave.breedingMark !== 1 |V.propOutcome === 0 |V.eugenicsFullControl === 1 |V.arcologies[0].FSRestart === "unset")) {
-		<<link "Extreme corset">>slave.bellyAccessory = "an extreme corset";<</link>>
-	}
-	if ((slave.belly > 10000)) {
-		<<link "Supportive band">>slave.bellyAccessory = "a support band";<</link>>
-	}
- // works for all of them
-		if (slave.belly < 1500 && slave.weight < 130) {
-			<<link "1st Trimester belly">>slave.bellyAccessory = "a small empathy belly";<</link>>
-			<<link "2nd Trimester belly">>slave.bellyAccessory = "a medium empathy belly";<</link>>
-			<<link "3rd Trimester belly">>slave.bellyAccessory = "a large empathy belly";<</link>>
-			<<link "3rd Trimester twins belly">>slave.bellyAccessory = "a huge empathy belly";<</link>>
-		} else {
-			V.His stomach is too big to fit an empathy belly around.
-		}
-	}
-
-	<br>Anal accessory: ''<span id="buttplug">slave.buttplug</span>.''
-	<<link "None">>slave.buttplug = "none", slave.buttplugAttachment = "none";<</link>>
-	<<link "Normal">>slave.buttplug = "plug";<</link>>
-
-		<<link "Long">>slave.buttplug = "long plug";<</link>>
-	}
-	<<link "Large">>slave.buttplug = "large plug";<</link>>
-
-		<<link "Long and large">>slave.buttplug = "long, large plug";<</link>>
-	}
-	if (slave.anus >= 2) {
-		<<link "Huge">>slave.buttplug = "huge plug";<</link>>
-
-			if ((slave.breedingMark !== 1 |V.propOutcome === 0 |V.eugenicsFullControl === 1 |V.arcologies[0].FSRestart === "unset")) {
-				<<link "Long and huge">>slave.buttplug = "long, huge plug";<</link>>
-			}
-		}
-	}
-	if (isItemAccessible("tail") && slave.buttplug !== "none") {
-		<br>
-		&nbsp;&nbsp;&nbsp;&nbsp;Anal accessory attachment: ''<span id="buttplugAttach">slave.buttplugAttachment</span>.''
-		<<link "None">>slave.buttplugAttachment = "none";<</link>>
-		if (V.toysBoughtButtPlugTails === 1) {
-			<<link "Tail">>slave.buttplugAttachment = "tail";<</link>>
-			<<link "Cat tail">>slave.buttplugAttachment = "cat tail";<</link>>
-			<<link "Fox tail">>slave.buttplugAttachment = "fox tail";<</link>>
-			<<link "Cow tail">>slave.buttplugAttachment = "cow tail";<</link>>
-		}
-	}
-
-	if (slave.vagina > -1) {
-		<br>Vaginal accessory: ''<span id="vaginalAccessory">slave.vaginalAccessory</span>.''
-		<<link "None">>slave.vaginalAccessory = "none";App.UI.SlaveInteract.refreshAll(slave);<</link>>
-
-			<<link "Bullet vibrator">>slave.vaginalAccessory = "bullet vibrator";<</link>>
-		}
-		if (isItemAccessible("smart bullet vibrator") && V.toysBoughtSmartVibes === 1) {
-			<<link "Smart bullet vibrator">>slave.vaginalAccessory = "smart bullet vibrator";<</link>>
-		}
-		<<link "Dildo">>slave.vaginalAccessory = "dildo";<</link>>
-
-			<<link "Long dildo">>slave.vaginalAccessory = "long dildo";<</link>>
-		}
-		<<link "Large dildo">>slave.vaginalAccessory = "large dildo";<</link>>
-
-			<<link "Large and long dildo">>slave.vaginalAccessory = "long, large dildo";<</link>>
-		}
-		if (slave.vagina >= 2) {
-			<<link "Huge dildo">>slave.vaginalAccessory = "huge dildo";<</link>>
-
-				<<link "Huge and long dildo">>slave.vaginalAccessory = "long, huge dildo";<</link>>
-			}
-		}
-		if (isItemAccessible("vibrator") && (slave.vaginalAccessory !== "none" && slave.vaginalAccessory !== "bullet vibrator" && slave.vaginalAccessory !== "smart bullet vibrator") && V.toysBoughtVaginalAttachments === 1) {
-			<br>
-			&nbsp;&nbsp;&nbsp;&nbsp;Vaginal accessory attachment:
-			''<span id="vaginalAttachment">slave.vaginalAttachment</span>.''
-			<<link "None">>slave.vaginalAttachment = "none";<</link>>
-			<<link "Vibrating dildo">>slave.vaginalAttachment = "vibrator";<</link>>
-		}
-	}
-
-	if (slave.dick > 0) {
-		<br>Dick accessory: ''<span id="dickAccessory">slave.dickAccessory</span>.''
-		<<link "None">>slave.dickAccessory = "none";App.UI.SlaveInteract.refreshAll(slave);<</link>>
-		if (isItemAccessible("bullet vibrator") && V.toysBoughtVaginalAttachments === 1) {
-			<<link "Bullet vibrator">>slave.dickAccessory = "bullet vibrator";<</link>>
-		}
-		if (isItemAccessible("smart bullet vibrator") && V.toysBoughtVaginalAttachments === 1) {
-			<<link "Smart bullet vibrator">>slave.dickAccessory = "smart bullet vibrator";<</link>>
-		}
-	}
-
-	<br>Chastity device: ''<span id="chastity">if (slave.chastityAnus === 1 && slave.chastityPenis === 1 && slave.chastityVagina === 1) {full chastity} else if (slave.chastityPenis === 1 && slave.chastityVagina === 1) {genital chastity} else if (slave.chastityAnus === 1 && slave.chastityPenis === 1) {combined chastity cage} else if (slave.chastityAnus === 1 && slave.chastityVagina === 1) {combined chastity belt} else if (slave.chastityVagina === 1) {chastity belt} else if (slave.chastityPenis === 1) {chastity cage} else if (slave.chastityAnus === 1) {anal chastity} else if (slave.chastityAnus === 0 && slave.chastityPenis === 0 && slave.chastityVagina === 0) {none} else {THERE HAS BEEN AN ERROR}</span>.''
-	<<link "None">>slave.chastityAnus = 0;slave.chastityPenis = 0;slave.chastityVagina = 0;App.UI.SlaveInteract.refreshAll(slave);<</link>>
-	<<link "Anal chastity">>slave.choosesOwnChastity = 0;slave.chastityAnus = 1;slave.chastityPenis = 0;slave.chastityVagina = 0;<<replace "#chastity">>anal chastityApp.UI.SlaveInteract.refreshAll(slave);<</link>>
-	if (slave.vagina > -1) {
-		<<link "Chastity belt">>slave.choosesOwnChastity = 0;slave.chastityAnus = 0;slave.chastityPenis = 0;slave.chastityVagina = 1;<<replace "#chastity">>Chastity beltApp.UI.SlaveInteract.refreshAll(slave);<</link>>
-		<<link "Combined chastity belt">>slave.choosesOwnChastity = 0;slave.chastityAnus = 1;slave.chastityPenis = 0;slave.chastityVagina = 1;<<replace "#chastity">>Combined chastity beltApp.UI.SlaveInteract.refreshAll(slave);<</link>>
-	}
-	if (slave.dick > 0) {
-		<<link "Chastity cage">>slave.choosesOwnChastity = 0;slave.chastityAnus = 0;slave.chastityPenis = 1;slave.chastityVagina = 0;<<replace "#chastity">>Chastity cageApp.UI.SlaveInteract.refreshAll(slave);<</link>>
-		<<link "Combined chastity cage">>slave.choosesOwnChastity = 0;slave.chastityAnus = 1;slave.chastityPenis = 1;slave.chastityVagina = 0;<<replace "#chastity">>Combined Chastity cageApp.UI.SlaveInteract.refreshAll(slave);<</link>>
-		if (slave.vagina > -1) {
-			<<link "Genital chastity">>slave.choosesOwnChastity = 0;slave.chastityAnus = 0;slave.chastityPenis = 1;slave.chastityVagina = 1;<<replace "#chastity">>Genital chastityApp.UI.SlaveInteract.refreshAll(slave);<</link>>
-			<<link "Full chastity">>slave.choosesOwnChastity = 0;slave.chastityAnus = 1;slave.chastityPenis = 1;slave.chastityVagina = 1;<<replace "#chastity">>Full chastityApp.UI.SlaveInteract.refreshAll(slave);<</link>>
-		}
-	}
-
-	if (V.arcologies[0].FSRestart !== "unset" && slave.devotion > 20 && slave.trust > 0 && slave.choosesOwnClothes === 1) {
-		<br>
-		if (slave.choosesOwnChastity === 1) {
-			r += `V.He is allowed to decide whether V.he to wear chastity devices. `;
-			[[Withdraw Privilege|Slave Interact][slave.choosesOwnChastity = 0]]
-		} else {
-			r += `V.He is not allowed to choose whether to wear chastity devices. `;
-			[[Allow Choice|Slave Interact][slave.choosesOwnChastity = 1]]
-		}
-	}
-
-} // CLOSES FUCKDOLL CHECK
-
-}	// CLOSES WARDROBE CHECK
-};
-
-</br>
-*/
diff --git a/src/uncategorized/longSlaveDescription.tw b/src/uncategorized/longSlaveDescription.tw
index ce246bfad8eb5a8c5e70d605a34f33abf3e1d1b0..6a891d6d78068667711eba0ad7f255cd74003e96 100644
--- a/src/uncategorized/longSlaveDescription.tw
+++ b/src/uncategorized/longSlaveDescription.tw
@@ -3,6 +3,7 @@
 <<run SlaveStatClamp($activeSlave)>>
 <<setLocalPronouns $activeSlave>>
 
+<span id="artFrame">
 /* 000-250-006 */
 <<if $seeImages == 1 && $eventDescription != 1>>
 	<<if $imageChoice == 1>>
@@ -12,6 +13,7 @@
 	<</if>>
 <</if>>
 /* 000-250-006 */
+</span>
 
 &nbsp;&nbsp;&nbsp;&nbsp;
 
diff --git a/src/uncategorized/slaveInteract.tw b/src/uncategorized/slaveInteract.tw
index 307d47c23b0b7b02695db8bc4d8457d1c0e37f18..5ee25d6a021d1132bb869602cdb59ea4f9601498 100644
--- a/src/uncategorized/slaveInteract.tw
+++ b/src/uncategorized/slaveInteract.tw
@@ -213,131 +213,37 @@
 		<script>App.UI.Wardrobe.legAccessory(V.activeSlave)</script>
 	<</if>>
 
-	<br>Torso accessory: ''<span id="bellyAccessory">$activeSlave.bellyAccessory</span>.''
-	<<link "None">><<set $activeSlave.bellyAccessory = "none">><<replace "#bellyAccessory">>$activeSlave.bellyAccessory<</replace>><</link>>
-	| <<link "Tight corset">><<set $activeSlave.bellyAccessory = "a corset">><<replace "#bellyAccessory">>$activeSlave.bellyAccessory<</replace>><</link>>
-	<<if ($activeSlave.breedingMark != 1 || $propOutcome == 0 || $eugenicsFullControl == 1 || $arcologies[0].FSRestart == "unset")>>
-		| <<link "Extreme corset">><<set $activeSlave.bellyAccessory = "an extreme corset">><<replace "#bellyAccessory">>$activeSlave.bellyAccessory<</replace>><</link>>
-	<</if>>
-	<<if ($activeSlave.belly > 10000)>>
-		| <<link "Supportive band">><<set $activeSlave.bellyAccessory = "a support band">><<replace "#bellyAccessory">>$activeSlave.bellyAccessory<</replace>><</link>>
-	<</if>>
-	<<if isItemAccessible("a small empathy belly")>> /* works for all of them */
-		<<if $activeSlave.belly < 1500 && $activeSlave.weight < 130>>
-			| <<link "1st Trimester belly">><<set $activeSlave.bellyAccessory = "a small empathy belly">><<replace "#bellyAccessory">>$activeSlave.bellyAccessory<</replace>><</link>>
-			| <<link "2nd Trimester belly">><<set $activeSlave.bellyAccessory = "a medium empathy belly">><<replace "#bellyAccessory">>$activeSlave.bellyAccessory<</replace>><</link>>
-			| <<link "3rd Trimester belly">><<set $activeSlave.bellyAccessory = "a large empathy belly">><<replace "#bellyAccessory">>$activeSlave.bellyAccessory<</replace>><</link>>
-			| <<link "3rd Trimester twins belly">><<set $activeSlave.bellyAccessory = "a huge empathy belly">><<replace "#bellyAccessory">>$activeSlave.bellyAccessory<</replace>><</link>>
-		<<else>>
-			| $His stomach is too big to fit an empathy belly around.
-		<</if>>
-	<</if>>
+	<span id="bellyAccessory"></span>
+	<script>App.UI.Wardrobe.bellyAccessory(V.activeSlave)</script>
+
+	<span id="buttplug"></span>
+	<script>App.UI.Wardrobe.buttplug(V.activeSlave)</script>
 
-	<br>Anal accessory: ''<span id="buttplug">$activeSlave.buttplug</span>.''
-	<<link "None">><<set $activeSlave.buttplug = "none", $activeSlave.buttplugAttachment = "none">><<replace "#buttplug">>$activeSlave.buttplug<</replace>><</link>>
-	| <<link "Normal">><<set $activeSlave.buttplug = "plug">><<replace "#buttplug">>$activeSlave.buttplug<</replace>><</link>>
-	<<if isItemAccessible("long plug") && ($activeSlave.breedingMark != 1 || $propOutcome == 0 || $eugenicsFullControl == 1 || $arcologies[0].FSRestart == "unset")>>
-		| <<link "Long">><<set $activeSlave.buttplug = "long plug">><<replace "#buttplug">>$activeSlave.buttplug<</replace>><</link>>
-	<</if>>
-	| <<link "Large">><<set $activeSlave.buttplug = "large plug">><<replace "#buttplug">>$activeSlave.buttplug<</replace>><</link>>
-	<<if isItemAccessible("long, large plug") && ($activeSlave.breedingMark != 1 || $propOutcome == 0 || $eugenicsFullControl == 1 || $arcologies[0].FSRestart == "unset")>>
-		| <<link "Long and large">><<set $activeSlave.buttplug = "long, large plug">><<replace "#buttplug">>$activeSlave.buttplug<</replace>><</link>>
-	<</if>>
-	<<if $activeSlave.anus >= 2>>
-		| <<link "Huge">><<set $activeSlave.buttplug = "huge plug">><<replace "#buttplug">>$activeSlave.buttplug<</replace>><</link>>
-		<<if isItemAccessible("long, huge plug")>>
-			<<if ($activeSlave.breedingMark != 1 || $propOutcome == 0 || $eugenicsFullControl == 1 || $arcologies[0].FSRestart == "unset")>>
-				| <<link "Long and huge">><<set $activeSlave.buttplug = "long, huge plug">><<replace "#buttplug">>$activeSlave.buttplug<</replace>><</link>>
-			<</if>>
-		<</if>>
-	<</if>>
 	<<if isItemAccessible("tail") && $activeSlave.buttplug != "none">>
-		<br>
-		&nbsp;&nbsp;&nbsp;&nbsp;Anal accessory attachment: ''<span id="buttplugAttach">$activeSlave.buttplugAttachment</span>.''
-		<<link "None">><<set $activeSlave.buttplugAttachment = "none">><<replace "#buttplugAttach">>$activeSlave.buttplugAttachment<</replace>><</link>>
-		<<if $toysBoughtButtPlugTails == 1>>
-			| <<link "Tail">><<set $activeSlave.buttplugAttachment = "tail">><<replace "#buttplugAttach">>$activeSlave.buttplugAttachment<</replace>><</link>>
-			| <<link "Cat tail">><<set $activeSlave.buttplugAttachment = "cat tail">><<replace "#buttplugAttach">>$activeSlave.buttplugAttachment<</replace>><</link>>
-			| <<link "Fox tail">><<set $activeSlave.buttplugAttachment = "fox tail">><<replace "#buttplugAttach">>$activeSlave.buttplugAttachment<</replace>><</link>>
-			| <<link "Cow tail">><<set $activeSlave.buttplugAttachment = "cow tail">><<replace "#buttplugAttach">>$activeSlave.buttplugAttachment<</replace>><</link>>
-		<</if>>
+		<span id="buttplugAttachment"></span>
+		<script>App.UI.Wardrobe.buttplugAttachment(V.activeSlave)</script>
 	<</if>>
 
 	<<if $activeSlave.vagina > -1>>
-		<br>Vaginal accessory: ''<span id="vaginalAccessory">$activeSlave.vaginalAccessory</span>.''
-		<<link "None">><<set $activeSlave.vaginalAccessory = "none">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><<run App.UI.SlaveInteract.refreshAll($activeSlave)>><</link>>
-		<<if isItemAccessible("bullet vibrator")>>
-			| <<link "Bullet vibrator">><<set $activeSlave.vaginalAccessory = "bullet vibrator">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><</link>>
-		<</if>>
-		<<if isItemAccessible("smart bullet vibrator") && $toysBoughtSmartVibes == 1>>
-			| <<link "Smart bullet vibrator">><<set $activeSlave.vaginalAccessory = "smart bullet vibrator">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><</link>>
-		<</if>>
-		| <<link "Dildo">><<set $activeSlave.vaginalAccessory = "dildo">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><</link>>
-		<<if isItemAccessible("long dildo") && ($activeSlave.breedingMark != 1 || $propOutcome == 0 || $eugenicsFullControl == 1 || $arcologies[0].FSRestart == "unset")>>
-			| <<link "Long dildo">><<set $activeSlave.vaginalAccessory = "long dildo">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><</link>>
-		<</if>>
-		| <<link "Large dildo">><<set $activeSlave.vaginalAccessory = "large dildo">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><</link>>
-		<<if isItemAccessible("long, large dildo") && ($activeSlave.breedingMark != 1 || $propOutcome == 0 || $eugenicsFullControl == 1 || $arcologies[0].FSRestart == "unset")>>
-			| <<link "Large and long dildo">><<set $activeSlave.vaginalAccessory = "long, large dildo">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><</link>>
-		<</if>>
-		<<if $activeSlave.vagina >= 2>>
-			| <<link "Huge dildo">><<set $activeSlave.vaginalAccessory = "huge dildo">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><</link>>
-			<<if isItemAccessible("long, huge dildo") && ($activeSlave.breedingMark != 1 || $propOutcome == 0 || $eugenicsFullControl == 1 || $arcologies[0].FSRestart == "unset")>>
-				| <<link "Huge and long dildo">><<set $activeSlave.vaginalAccessory = "long, huge dildo">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><</link>>
-			<</if>>
-		<</if>>
-		<<if isItemAccessible("vibrator") && ($activeSlave.vaginalAccessory != "none" && $activeSlave.vaginalAccessory != "bullet vibrator" && $activeSlave.vaginalAccessory != "smart bullet vibrator") && $toysBoughtVaginalAttachments == 1>>
-			<br>
-			&nbsp;&nbsp;&nbsp;&nbsp;Vaginal accessory attachment:
-			''<span id="vaginalAttachment">$activeSlave.vaginalAttachment</span>.''
-			<<link "None">><<set $activeSlave.vaginalAttachment = "none">><<replace "#vaginalAttachment">>$activeSlave.vaginalAttachment<</replace>><</link>>
-			| <<link "Vibrating dildo">><<set $activeSlave.vaginalAttachment = "vibrator">><<replace "#vaginalAttachment">>$activeSlave.vaginalAttachment<</replace>><</link>>
-		<</if>>
+		<span id="vaginalAccessory"></span>
+		<script>App.UI.Wardrobe.vaginalAccessory(V.activeSlave)</script>
+		<span id="vaginalAttachment"></span>
+		<script>App.UI.Wardrobe.vaginalAttachment(V.activeSlave)</script>
 	<</if>>
 
 	<<if $activeSlave.dick > 0>>
-		<br>Dick accessory: ''<span id="dickAccessory">$activeSlave.dickAccessory</span>.''
-		<<link "None">><<set $activeSlave.dickAccessory = "none">><<replace "#dickAccessory">>$activeSlave.dickAccessory<</replace>><<run App.UI.SlaveInteract.refreshAll($activeSlave)>><</link>>
-		<<if isItemAccessible("bullet vibrator") && $toysBoughtVaginalAttachments == 1>>
-			| <<link "Bullet vibrator">><<set $activeSlave.dickAccessory = "bullet vibrator">><<replace "#dickAccessory">>$activeSlave.dickAccessory<</replace>><</link>>
-		<</if>>
-		<<if isItemAccessible("smart bullet vibrator") && $toysBoughtVaginalAttachments == 1>>
-			| <<link "Smart bullet vibrator">><<set $activeSlave.dickAccessory = "smart bullet vibrator">><<replace "#dickAccessory">>$activeSlave.dickAccessory<</replace>><</link>>
-		<</if>>
+		<span id="dickAccessory"></span>
+		<script>App.UI.Wardrobe.dickAccessory(V.activeSlave)</script>
 	<</if>>
 
-	<br>Chastity device: ''<span id="chastity"><<if $activeSlave.chastityAnus == 1 && $activeSlave.chastityPenis == 1 && $activeSlave.chastityVagina == 1>>full chastity<<elseif $activeSlave.chastityPenis == 1 && $activeSlave.chastityVagina == 1>>genital chastity<<elseif $activeSlave.chastityAnus == 1 && $activeSlave.chastityPenis == 1>>combined chastity cage<<elseif $activeSlave.chastityAnus == 1 && $activeSlave.chastityVagina == 1>>combined chastity belt<<elseif $activeSlave.chastityVagina == 1>>chastity belt<<elseif $activeSlave.chastityPenis == 1>>chastity cage<<elseif $activeSlave.chastityAnus == 1>>anal chastity<<elseif $activeSlave.chastityAnus == 0 && $activeSlave.chastityPenis == 0 && $activeSlave.chastityVagina == 0>>none<<else>>THERE HAS BEEN AN ERROR<</if>></span>.''
-	<<link "None">><<set $activeSlave.chastityAnus = 0>><<set $activeSlave.chastityPenis = 0>><<set $activeSlave.chastityVagina = 0>><<replace "#chastity">>none<</replace>><<run App.UI.SlaveInteract.refreshAll($activeSlave)>><</link>>
-	| <<link "Anal chastity">><<set $activeSlave.choosesOwnChastity = 0>><<set $activeSlave.chastityAnus = 1>><<set $activeSlave.chastityPenis = 0>><<set $activeSlave.chastityVagina = 0>><<replace "#chastity">>anal chastity<</replace>><<run App.UI.SlaveInteract.refreshAll($activeSlave)>><</link>>
-	<<if $activeSlave.vagina > -1>>
-		| <<link "Chastity belt">><<set $activeSlave.choosesOwnChastity = 0>><<set $activeSlave.chastityAnus = 0>><<set $activeSlave.chastityPenis = 0>><<set $activeSlave.chastityVagina = 1>><<replace "#chastity">>Chastity belt<</replace>><<run App.UI.SlaveInteract.refreshAll($activeSlave)>><</link>>
-		| <<link "Combined chastity belt">><<set $activeSlave.choosesOwnChastity = 0>><<set $activeSlave.chastityAnus = 1>><<set $activeSlave.chastityPenis = 0>><<set $activeSlave.chastityVagina = 1>><<replace "#chastity">>Combined chastity belt<</replace>><<run App.UI.SlaveInteract.refreshAll($activeSlave)>><</link>>
-	<</if>>
-	<<if $activeSlave.dick > 0>>
-		| <<link "Chastity cage">><<set $activeSlave.choosesOwnChastity = 0>><<set $activeSlave.chastityAnus = 0>><<set $activeSlave.chastityPenis = 1>><<set $activeSlave.chastityVagina = 0>><<replace "#chastity">>Chastity cage<</replace>><<run App.UI.SlaveInteract.refreshAll($activeSlave)>><</link>>
-		| <<link "Combined chastity cage">><<set $activeSlave.choosesOwnChastity = 0>><<set $activeSlave.chastityAnus = 1>><<set $activeSlave.chastityPenis = 1>><<set $activeSlave.chastityVagina = 0>><<replace "#chastity">>Combined Chastity cage<</replace>><<run App.UI.SlaveInteract.refreshAll($activeSlave)>><</link>>
-		<<if $activeSlave.vagina > -1>>
-			| <<link "Genital chastity">><<set $activeSlave.choosesOwnChastity = 0>><<set $activeSlave.chastityAnus = 0>><<set $activeSlave.chastityPenis = 1>><<set $activeSlave.chastityVagina = 1>><<replace "#chastity">>Genital chastity<</replace>><<run App.UI.SlaveInteract.refreshAll($activeSlave)>><</link>>
-			| <<link "Full chastity">><<set $activeSlave.choosesOwnChastity = 0>><<set $activeSlave.chastityAnus = 1>><<set $activeSlave.chastityPenis = 1>><<set $activeSlave.chastityVagina = 1>><<replace "#chastity">>Full chastity<</replace>><<run App.UI.SlaveInteract.refreshAll($activeSlave)>><</link>>
-		<</if>>
-	<</if>>
-
-	<<if $arcologies[0].FSRestart != "unset" && $activeSlave.devotion > 20 && $activeSlave.trust > 0 && $activeSlave.choosesOwnClothes == 1>>
-		<br>
-		<<if $activeSlave.choosesOwnChastity == 1>>
-			$He is allowed to decide whether $he to wear chastity devices.
-			[[Withdraw Privilege|Slave Interact][$activeSlave.choosesOwnChastity = 0]]
-		<<else>>
-			$He is not allowed to choose whether to wear chastity devices.
-			[[Allow Choice|Slave Interact][$activeSlave.choosesOwnChastity = 1]]
-		<</if>>
-	<</if>>
+	<span id="chastity"></span>
+	<script>App.UI.Wardrobe.chastity(V.activeSlave)</script>
 
 <</if>> /* CLOSES FUCKDOLL CHECK */
 
 <</if>>	/* CLOSES WARDROBE CHECK */
 
-<br><br>__Physical Regimen:__
+<br>__Physical Regimen:__
 <span id="drugs"></span>
 <script>App.UI.SlaveInteract.drugs(V.activeSlave)</script>
 
diff --git a/src/uncategorized/wardrobe.tw b/src/uncategorized/wardrobe.tw
index c216f9526989329ee6f3102e3689bd4466b6d704..53018e6985ecf74b58f965c0469f7759183a3718 100644
--- a/src/uncategorized/wardrobe.tw
+++ b/src/uncategorized/wardrobe.tw
@@ -51,7 +51,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("a bunny outfit")>>
+<<if !isClothingAccessible.entry("a bunny outfit") === true>>
 	[[Order a shipment of bunny suits|Wardrobe][cashX(forceNeg(Math.trunc(7500 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtBunny = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(7500 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -66,7 +66,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("conservative clothing")>>
+<<if !isClothingAccessible.entry("conservative clothing") === true>>
 	[[Order a shipment of conservative clothes|Wardrobe][cashX(forceNeg(Math.trunc(7500 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtConservative = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(7500 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -83,7 +83,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("a bimbo outfit")>>
+<<if !isClothingAccessible.entry("a bimbo outfit") === true>>
 	[[Order a shipment of outfits suitable for bimbos|Wardrobe][cashX(forceNeg(Math.trunc(7500 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtBimbo = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(7500 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -98,7 +98,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("a courtesan dress")>>
+<<if !isClothingAccessible.entry("a courtesan dress") === true>>
 	[[Order a shipment of courtesan dresses|Wardrobe][cashX(forceNeg(Math.trunc(7500 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtCourtesan = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(7500 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -115,7 +115,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("chains")>>
+<<if !isClothingAccessible.entry("chains") === true>>
 	[[Order a shipment of chains|Wardrobe][cashX(forceNeg(Math.trunc(7500 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtChains = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(7500 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -130,7 +130,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("Western clothing")>>
+<<if !isClothingAccessible.entry("Western clothing") === true>>
 	[[Order a shipment of western outfits|Wardrobe][cashX(forceNeg(Math.trunc(7500 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtWestern = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(7500 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -147,7 +147,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("body oil")>>
+<<if !isClothingAccessible.entry("body oil") === true>>
 	[[Order a shipment of body oil|Wardrobe][cashX(forceNeg(Math.trunc(7500 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtOil = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(7500 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -162,7 +162,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("stretch pants and a crop-top")>>
+<<if !isClothingAccessible.entry("stretch pants and a crop-top") === true>>
 	[[Order a shipment of comfortable, rather stretchy, clothes|Wardrobe][cashX(forceNeg(Math.trunc(7500 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtLazyClothes = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(7500 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -179,7 +179,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("a chattel habit")>>
+<<if !isClothingAccessible.entry("a chattel habit") === true>>
 	[[Order a shipment of chattel habits|Wardrobe][cashX(forceNeg(Math.trunc(7500 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtHabit = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(7500 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -193,7 +193,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("a maternity dress")>>
+<<if !isClothingAccessible.entry("a maternity dress") === true>>
 	[[Order a shipment of maternity dresses|Wardrobe][cashX(forceNeg(Math.trunc(7500 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtMaternityDress = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(7500 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -210,7 +210,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("attractive lingerie for a pregnant woman")>>
+<<if !isClothingAccessible.entry("attractive lingerie for a pregnant woman") === true>>
 	[[Order a shipment of maternity lingerie|Wardrobe][cashX(forceNeg(Math.trunc(7500 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtMaternityLingerie = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(7500 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -248,7 +248,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("a toga")>>
+<<if !isClothingAccessible.entry("a toga") === true>>
 	[[Order a shipment of togas|Wardrobe][cashX(forceNeg(Math.trunc(7500 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtToga = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(7500 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -265,7 +265,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("a huipil")>>
+<<if !isClothingAccessible.entry("a huipil") === true>>
 	[[Order a shipment of huipil|Wardrobe][cashX(forceNeg(Math.trunc(7500 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtHuipil = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(7500 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -280,7 +280,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("a kimono")>>
+<<if !isClothingAccessible.entry("a kimono") === true>>
 	[[Order a shipment of kimonos|Wardrobe][cashX(forceNeg(Math.trunc(7500 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtKimono = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(7500 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -297,7 +297,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("harem gauze")>>
+<<if !isClothingAccessible.entry("harem gauze") === true>>
 	[[Order a shipment of harem outfits|Wardrobe][cashX(forceNeg(Math.trunc(7500 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtHarem = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(7500 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -312,7 +312,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("a slutty qipao")>>
+<<if !isClothingAccessible.entry("a slutty qipao") === true>>
 	[[Order a shipment of qipaos|Wardrobe][cashX(forceNeg(Math.trunc(7500 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtQipao = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(7500 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -333,7 +333,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("battlearmor")>>
+<<if !isClothingAccessible.entry("battlearmor") === true>>
 	[[Order a shipment of military themed clothing|Wardrobe][cashX(forceNeg(Math.trunc(5000 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtMilitary = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(5000 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -348,7 +348,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("a dirndl")>>
+<<if !isClothingAccessible.entry("a dirndl") === true>>
 	[[Order a shipment of cultural outfits|Wardrobe][cashX(forceNeg(Math.trunc(15000 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtCultural = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(15000 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -365,7 +365,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("a burqa")>>
+<<if !isClothingAccessible.entry("a burqa") === true>>
 	[[Order a shipment of burqas and similar garb|Wardrobe][cashX(forceNeg(Math.trunc(5000 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtMiddleEastern = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(5000 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -380,7 +380,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("jeans")>>
+<<if !isClothingAccessible.entry("jeans") === true>>
 	[[Order an extra large shipment of casual clothing|Wardrobe][cashX(forceNeg(Math.trunc(5000 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtCasual = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(5000 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -397,7 +397,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("a police uniform")>>
+<<if !isClothingAccessible.entry("a police uniform") === true>>
 	[[Order a shipment of professional garments|Wardrobe][cashX(forceNeg(Math.trunc(2500 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtCareer = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(2500 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -412,7 +412,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("a gothic lolita dress")>>
+<<if !isClothingAccessible.entry("a gothic lolita dress") === true>>
 	[[Order a shipment of professionally tailored dresses|Wardrobe][cashX(forceNeg(Math.trunc(15000 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtDresses = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(15000 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -429,7 +429,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("a cybersuit")>>
+<<if !isClothingAccessible.entry("a cybersuit") === true>>
 	[[Order a shipment of exotic bodysuits|Wardrobe][cashX(forceNeg(Math.trunc(7500 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtBodysuits = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(7500 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -444,7 +444,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("boyshorts")>>
+<<if !isClothingAccessible.entry("boyshorts") === true>>
 	[[Order a shipment of undergarments|Wardrobe][cashX(forceNeg(Math.trunc(5000 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtUnderwear = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(5000 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -461,7 +461,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("sport shorts and a sports bra")>>
+<<if !isClothingAccessible.entry("sport shorts and a sports bra") === true>>
 	[[Order a shipment of exercise wear|Wardrobe][cashX(forceNeg(Math.trunc(2500 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtSports = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(2500 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -476,7 +476,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("a one-piece swimsuit")>>
+<<if !isClothingAccessible.entry("a one-piece swimsuit") === true>>
 	[[Order a shipment of swimwear|Wardrobe][cashX(forceNeg(Math.trunc(3500 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtSwimwear = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(3500 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -493,7 +493,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("a nice pony outfit")>>
+<<if !isClothingAccessible.entry("a nice pony outfit") === true>>
 	[[Order a shipment of specialized latex ponygirl outfits|Wardrobe][cashX(forceNeg(Math.trunc(10000 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtPony = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(10000 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -508,7 +508,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("a schutzstaffel uniform")>>
+<<if !isClothingAccessible.entry("a schutzstaffel uniform") === true>>
 	[[Order a shipment of politically incorrect clothing|Wardrobe][cashX(forceNeg(Math.trunc(15000 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtPol = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(15000 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -525,7 +525,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("a Santa dress")>>
+<<if !isClothingAccessible.entry("a Santa dress") === true>>
 	[[Order a shipment of colorful and revealing costumes|Wardrobe][cashX(forceNeg(Math.trunc(7500 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtCostume = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(15000 * $upgradeMultiplierTrade))>></div>
 <<else>>
@@ -540,7 +540,7 @@ The room containing all the clothes and accessories you have available to dress
 		<<= SlaveArt(_model, 1, 0)>>
 	</div>
 <</if>>
-<<if !isClothingAccessible.entry("striped panties")>>
+<<if !isClothingAccessible.entry("striped panties") === true>>
 	[[Order a large crate of panties from Japan|Wardrobe][cashX(forceNeg(Math.trunc(2500 * $upgradeMultiplierTrade)), "capEx"), $clothesBoughtPantsu = 1]]
 	<div class="detail">Costs <<print cashFormat(Math.trunc(2500 * $upgradeMultiplierTrade))>></div>
 <<else>>