diff --git a/js/003-data/slaveWearData.js b/js/003-data/slaveWearData.js
index 914e054700767da66a43ad64d585854bb83bb9dc..1dd06b299ea3efcf163bc4903b647c2797bb904a 100644
--- a/js/003-data/slaveWearData.js
+++ b/js/003-data/slaveWearData.js
@@ -1,1233 +1,1190 @@
 /**
  * @typedef {object} clothes
  * @property {string} name
- * @property {string} value
  * @property {FC.FutureSociety} [fs] Automatically unlocked with this FS.
  * @property {boolean} [requirements]
  * @property {0|1|2} [exposure] 0: Modest, 1: Slutty, 2: Humiliating (exposes genitals)
+ * @property {boolean} [harsh]
  */
 
 /**
- * @typedef {Array<clothes>} clothesCategory
+ * @type {Map.<string, clothes>} clothesCategory
  */
-
-/** @type {Object.<string, clothesCategory>} */
-App.Data.clothes = {
-
-	nice: [
+App.Data.clothes = new Map([
+	["attractive lingerie for a pregnant woman",
 		{
 			name: "Maternity lingerie",
-			value: "attractive lingerie for a pregnant woman",
 			fs: "FSRepopulationFocus",
 			get requirements() { return V.boughtItem.clothing.maternityLingerie === 1; },
 			exposure: 1
-		},
+		}],
+	["a bunny outfit",
 		{
 			name: "Bunny outfit",
-			value: "a bunny outfit",
 			fs: "FSGenderFundamentalist",
 			get requirements() { return V.boughtItem.clothing.bunny === 1; },
 			exposure: 0
-		},
+		}],
+	["body oil",
 		{
 			name: "Body oil",
-			value: "body oil",
 			fs: "FSPhysicalIdealist",
 			get requirements() { return V.boughtItem.clothing.oil === 1; },
 			exposure: 2
-		},
+		}],
+	["a chattel habit",
 		{
 			name: "Chattel habit",
-			value: "a chattel habit",
 			fs: "FSChattelReligionist",
 			get requirements() { return V.boughtItem.clothing.habit === 1; },
 			exposure: 2
-		},
+		}],
+	["conservative clothing",
 		{
 			name: "Conservative clothing",
-			value: "conservative clothing",
 			fs: "FSPaternalist",
 			get requirements() { return V.boughtItem.clothing.conservative === 1; },
 			exposure: 0
-		},
+		}],
+	["harem gauze",
 		{
 			name: "Harem gauze",
-			value: "harem gauze",
 			fs: "FSArabianRevivalist",
 			get requirements() { return V.boughtItem.clothing.harem === 1; },
 			exposure: 2
-		},
+		}],
+	["a huipil",
 		{
 			name: "Huipil",
-			value: "a huipil",
 			fs: "FSAztecRevivalist",
 			get requirements() { return V.boughtItem.clothing.huipil === 1; },
 			exposure: 0
-		},
+		}],
+	["a kimono",
 		{
 			name: "Kimono",
-			value: "a kimono",
 			fs: "FSEdoRevivalist",
 			get requirements() { return (V.boughtItem.clothing.kimono === 1 || V.continent === "Japan"); },
 			exposure: 0
-		},
+		}],
+	["a maternity dress",
 		{
 			name: "Maternity dress",
-			value: "a maternity dress",
 			fs: "FSRepopulationFocus",
 			get requirements() { return V.boughtItem.clothing.maternityDress === 1; },
 			exposure: 0,
-		},
+		}],
+	["a slutty qipao",
 		{
 			name: "Qipao (slutty)",
-			value: "a slutty qipao",
 			fs: "FSChineseRevivalist",
 			get requirements() { return V.boughtItem.clothing.qipao === 1; },
 			exposure: 1
-		},
+		}],
+	["a long qipao",
 		{
 			name: "Qipao (long)",
-			value: "a long qipao",
 			fs: "FSChineseRevivalist",
 			get requirements() { return V.boughtItem.clothing.cultural === 1; },
 			exposure: 0
-		},
+		}],
+	["Imperial Plate",
 		{
 			name: "Imperial Plate",
-			value: "Imperial Plate",
 			fs: "FSNeoImperialist",
 			get requirements() { return V.boughtItem.clothing.imperialarmor === 1; },
 			exposure: 0
-		},
+		}],
+	["a tight Imperial bodysuit",
 		{
 			name: "Imperial Bodysuit",
-			value: "a tight Imperial bodysuit",
 			fs: "FSNeoImperialist",
 			get requirements() { return V.boughtItem.clothing.imperialsuit === 1; },
 			exposure: 1
-		},
+		}],
+	["stretch pants and a crop-top",
 		{
 			name: "Stretch pants and a crop-top",
-			value: "stretch pants and a crop-top",
 			fs: "FSHedonisticDecadence",
 			get requirements() { return V.boughtItem.clothing.lazyClothes === 1; },
 			exposure: 0
-		},
+		}],
+	["a toga",
 		{
 			name: "Toga",
-			value: "a toga",
 			fs: "FSRomanRevivalist",
 			get requirements() { return V.boughtItem.clothing.toga === 1; },
 			exposure: 0
-		},
+		}],
+	["Western clothing",
 		{
 			name: "Western clothing",
-			value: "Western clothing",
 			fs: "FSPastoralist",
 			get requirements() { return V.boughtItem.clothing.western === 1; },
 			exposure: 2
-		},
+		}],
+	["a courtesan dress",
 		{
 			name: "Courtesan dress",
-			value: "a courtesan dress",
 			fs: "FSSlaveProfessionalism",
 			get requirements() { return V.boughtItem.clothing.courtesan === 1; },
 			exposure: 0
-		},
+		}],
+	["a bimbo outfit",
 		{
 			name: "Bimbo outfit",
-			value: "a bimbo outfit",
 			fs: "FSIntellectualDependency",
 			get requirements() { return V.boughtItem.clothing.bimbo === 1; },
 			exposure: 1
-		},
+		}],
+	["petite admi outfit",
 		{
 			name: "Petite admi outfit",
-			value: "petite admi outfit",
 			fs: "FSPetiteAdmiration",
 			get requirements() { return V.boughtItem.clothing.petite === 1; },
 			exposure: 0
-		},
+		}],
+	["battlearmor",
 		{
 			name: "Battlearmor",
-			value: "battlearmor",
 			get requirements() { return V.boughtItem.clothing.military === 1; },
 			exposure: 0
-		},
+		}],
+	["a military uniform",
 		{
 			name: "Military uniform",
-			value: "a military uniform",
 			get requirements() { return V.boughtItem.clothing.military === 1; },
 			exposure: 0
-		},
+		}],
+	["a red army uniform",
 		{
 			name: "Red Army uniform",
-			value: "a red army uniform",
 			get requirements() { return V.boughtItem.clothing.military === 1; },
 			exposure: 0
-		},
+		}],
+	["battledress",
 		{
 			name: "Battledress",
-			value: "battledress",
 			get requirements() { return V.boughtItem.clothing.military === 1; },
 			exposure: 0
-		},
+		}],
+	["a biyelgee costume",
 		{
 			name: "Biyelgee costume",
-			value: "a biyelgee costume",
 			get requirements() { return V.boughtItem.clothing.cultural === 1; },
 			exposure: 0
-		},
+		}],
+	["a dirndl",
 		{
 			name: "Dirndl",
-			value: "a dirndl",
 			get requirements() { return V.boughtItem.clothing.cultural === 1; },
 			exposure: 0
-		},
+		}],
+	["lederhosen",
 		{
 			name: "Lederhosen",
-			value: "lederhosen",
 			get requirements() { return V.boughtItem.clothing.cultural === 1; },
 			exposure: 0
-		},
+		}],
+	["a mounty outfit",
 		{
 			name: "Mounty outfit",
-			value: "a mounty outfit",
 			get requirements() { return V.boughtItem.clothing.cultural === 1; },
 			exposure: 0
-		},
+		}],
+	["a hanbok",
 		{
 			name: "Hanbok",
-			value: "a hanbok",
 			get requirements() { return V.boughtItem.clothing.cultural === 1; },
 			exposure: 0
-		},
+		}],
+	["a burqa",
 		{
 			name: "Burqa",
-			value: "a burqa",
 			get requirements() { return V.boughtItem.clothing.middleEastern === 1 || V.continent === "the Middle East"; },
 			exposure: 0
-		},
+		}],
+	["a niqab and abaya",
 		{
 			name: "Niqab and abaya",
-			value: "a niqab and abaya",
 			get requirements() { return V.boughtItem.clothing.middleEastern === 1 || V.continent === "the Middle East"; },
 			exposure: 0
-		},
+		}],
+	["a hijab and blouse",
 		{
 			name: "Hijab and blouse",
-			value: "a hijab and blouse",
 			get requirements() { return (V.boughtItem.clothing.conservative === 1 || V.continent === "the Middle East"); },
 			exposure: 0
-		},
+		}],
+	["a burkini",
 		{
 			name: "Burkini",
-			value: "a burkini",
 			get requirements() { return V.boughtItem.clothing.swimwear === 1 && (V.boughtItem.clothing.swimwear === 1 || V.continent === "the Middle East"); },
 			exposure: 0
-		},
+		}],
+	["a Santa dress",
 		{
 			name: "Santa dress",
-			value: "a Santa dress",
 			get requirements() { return V.boughtItem.clothing.costume === 1; },
 			exposure: 1
-		},
+		}],
 
+	["a klan robe",
 		{
 			name: "Klan robe",
-			value: "a klan robe",
 			get requirements() { return V.boughtItem.clothing.pol === 1; },
 			exposure: 0
-		},
+		}],
+	["a slutty klan robe",
 		{
 			name: "Slutty klan robe",
-			value: "a slutty klan robe",
 			get requirements() { return V.boughtItem.clothing.pol === 1; },
 			exposure: 1
-		},
+		}],
+	["a schutzstaffel uniform",
 		{
 			name: "Schutzstaffel uniform",
-			value: "a schutzstaffel uniform",
 			get requirements() { return V.boughtItem.clothing.pol === 1; },
 			exposure: 0
-		},
+		}],
+	["a slutty schutzstaffel uniform",
 		{
 			name: "Slutty schutzstaffel uniform",
-			value: "a slutty schutzstaffel uniform",
 			get requirements() { return V.boughtItem.clothing.pol === 1; },
 			exposure: 1
-		},
+		}],
 
+	["nice business attire",
 		{
 			name: "Nice business attire",
-			value: "nice business attire",
 			get requirements() { return V.boughtItem.clothing.career === 1; },
 			exposure: 0
-		},
+		}],
+	["a nice nurse outfit",
 		{
 			name: "Nurse (nice)",
-			value: "a nice nurse outfit",
 			get requirements() { return V.boughtItem.clothing.career === 1; },
 			exposure: 0
-		},
+		}],
+	["a police uniform",
 		{
 			name: "Police uniform",
-			value: "a police uniform",
 			get requirements() { return V.boughtItem.clothing.career === 1; },
 			exposure: 0
-		},
+		}],
+	["a nice maid outfit",
 		{
 			name: "Maid (nice)",
-			value: "a nice maid outfit",
 			get requirements() { return V.boughtItem.clothing.career === 1 || V.PC.career === "servant" || V.PC.career === "handmaiden" || V.PC.career === "child servant"; },
 			exposure: 0
-		},
+		}],
 
+	["a ball gown",
 		{
 			name: "Ballgown",
-			value: "a ball gown",
 			get requirements() { return V.boughtItem.clothing.dresses === 1; },
 			exposure: 0
-		},
+		}],
+	["a gothic lolita dress",
 		{
 			name: "Gothic lolita dress",
-			value: "a gothic lolita dress",
 			get requirements() { return V.boughtItem.clothing.dresses === 1; },
 			exposure: 0
-		},
+		}],
 
+	["a cybersuit",
 		{
 			name: "Cybersuit",
-			value: "a cybersuit",
 			get requirements() { return V.boughtItem.clothing.bodysuits === 1; },
 			exposure: 0
-		},
+		}],
+	["a latex catsuit",
 		{
 			name: "Latex catsuit",
-			value: "a latex catsuit",
 			get requirements() { return V.boughtItem.clothing.bodysuits === 1; },
 			exposure: 0
-		},
+		}],
 
+	["a button-up shirt and panties",
 		{
 			name: "Button-up shirt and panties",
-			value: "a button-up shirt and panties",
 			get requirements() { return V.boughtItem.clothing.casual === 1; },
 			exposure: 1
-		},
+		}],
+	["a button-up shirt",
 		{
 			name: "Button-up shirt",
-			value: "a button-up shirt",
 			get requirements() { return V.boughtItem.clothing.casual === 1; },
 			exposure: 2
-		},
+		}],
+	["cutoffs",
 		{
 			name: "Cutoffs",
-			value: "cutoffs",
 			get requirements() { return V.boughtItem.clothing.casual === 1; },
 			exposure: 0
-		},
+		}],
+	["jeans",
 		{
 			name: "Jeans",
-			value: "jeans",
 			get requirements() { return V.boughtItem.clothing.casual === 1; },
 			exposure: 1
-		},
+		}],
+	["leather pants and a tube top",
 		{
 			name: "Leather pants and a tube top",
-			value: "leather pants and a tube top",
 			get requirements() { return V.boughtItem.clothing.casual === 1; },
 			exposure: 0
-		},
+		}],
+	["leather pants",
 		{
 			name: "Leather pants",
-			value: "leather pants",
 			get requirements() { return V.boughtItem.clothing.casual === 1; },
 			exposure: 1
-		},
+		}],
+	["an oversized t-shirt",
 		{
 			name: "Oversized t-shirt",
-			value: "an oversized t-shirt",
 			get requirements() { return V.boughtItem.clothing.casual === 1; },
 			exposure: 1
-		},
+		}],
+	["a sweater and cutoffs",
 		{
 			name: "Sweater and cutoffs",
-			value: "a sweater and cutoffs",
 			get requirements() { return V.boughtItem.clothing.casual === 1; },
 			exposure: 0
-		},
+		}],
+	["a sweater and panties",
 		{
 			name: "Sweater and panties",
-			value: "a sweater and panties",
 			get requirements() { return V.boughtItem.clothing.casual === 1; },
 			exposure: 1
-		},
+		}],
+	["a sweater",
 		{
 			name: "Sweater",
-			value: "a sweater",
 			get requirements() { return V.boughtItem.clothing.casual === 1; },
 			exposure: 2
-		},
+		}],
+	["a t-shirt and jeans",
 		{
 			name: "T-shirt and jeans",
-			value: "a t-shirt and jeans",
 			get requirements() { return V.boughtItem.clothing.casual === 1; },
 			exposure: 0
-		},
+		}],
+	["a t-shirt and panties",
 		{
 			name: "T-shirt and panties",
-			value: "a t-shirt and panties",
 			get requirements() { return V.boughtItem.clothing.casual === 1; },
 			exposure: 1
-		},
+		}],
+	["a t-shirt",
 		{
 			name: "T-shirt",
-			value: "a t-shirt",
 			get requirements() { return V.boughtItem.clothing.casual === 1; },
 			exposure: 2
-		},
+		}],
+	["a tank-top and panties",
 		{
 			name: "Tank-top and panties",
-			value: "a tank-top and panties",
 			get requirements() { return V.boughtItem.clothing.casual === 1; },
 			exposure: 1
-		},
+		}],
+	["a tank-top",
 		{
 			name: "Tank-top",
-			value: "a tank-top",
 			get requirements() { return V.boughtItem.clothing.casual === 1; },
 			exposure: 2
-		},
+		}],
+	["a tube top",
 		{
 			name: "Tube top",
-			value: "a tube top",
 			get requirements() { return V.boughtItem.clothing.casual === 1; },
 			exposure: 2
-		},
+		}],
 
+	["boyshorts",
 		{
 			name: "Boyshorts",
-			value: "boyshorts",
 			get requirements() { return V.boughtItem.clothing.underwear === 1; },
 			exposure: 1
-		},
+		}],
+	["a bra",
 		{
 			name: "Bra",
-			value: "a bra",
 			get requirements() { return V.boughtItem.clothing.underwear === 1; },
 			exposure: 2
-		},
+		}],
+	["kitty lingerie",
 		{
 			name: "Kitty lingerie",
-			value: "kitty lingerie",
 			get requirements() { return V.boughtItem.clothing.underwear === 1; },
 			exposure: 1
-		},
+		}],
+	["panties and pasties",
 		{
 			name: "Panties and pasties",
-			value: "panties and pasties",
 			get requirements() { return V.boughtItem.clothing.underwear === 1; },
 			exposure: 1
-		},
+		}],
+	["a skimpy loincloth",
 		{
 			name: "Skimpy loincloth",
-			value: "a skimpy loincloth",
 			get requirements() { return V.boughtItem.clothing.underwear === 1; },
 			exposure: 2
-		},
+		}],
+	["a thong",
 		{
 			name: "Thong",
-			value: "a thong",
 			get requirements() { return V.boughtItem.clothing.underwear === 1; },
 			exposure: 2
-		},
+		}],
+	["pasties",
 		{
 			name: "Pasties",
-			value: "pasties",
 			get requirements() { return V.boughtItem.clothing.underwear === 1; },
 			exposure: 2
-		},
+		}],
 
+	["leather pants and pasties",
 		{
 			name: "Leather pants and pasties",
-			value: "leather pants and pasties",
 			get requirements() { return V.boughtItem.clothing.underwear === 1 && V.boughtItem.clothing.casual === 1; },
 			exposure: 1,
-		},
+		}],
+	["a t-shirt and thong",
 		{
 			name: "T-shirt and thong",
-			value: "a t-shirt and thong",
 			get requirements() { return V.boughtItem.clothing.underwear === 1 && V.boughtItem.clothing.casual === 1; },
 			exposure: 1,
-		},
+		}],
+	["a tube top and thong",
 		{
 			name: "Tube top and thong",
-			value: "a tube top and thong",
 			get requirements() { return V.boughtItem.clothing.underwear === 1 && V.boughtItem.clothing.casual === 1; },
 			exposure: 1,
-		},
+		}],
+	["an oversized t-shirt and boyshorts",
 		{
 			name: "Oversized t-shirt and boyshorts",
-			value: "an oversized t-shirt and boyshorts",
 			get requirements() { return V.boughtItem.clothing.underwear === 1 && V.boughtItem.clothing.casual === 1; },
 			exposure: 0,
-		},
+		}],
+	["sport shorts and a sports bra",
 		{
 			name: "Sport shorts and a sports bra",
-			value: "sport shorts and a sports bra",
 			get requirements() { return V.boughtItem.clothing.sports === 1; },
 			exposure: 1,
-		},
+		}],
+	["sport shorts",
 		{
 			name: "Sport shorts",
-			value: "sport shorts",
 			get requirements() { return V.boughtItem.clothing.sports === 1; },
 			exposure: 1
-		},
+		}],
+	["a sports bra",
 		{
 			name: "Sports bra",
-			value: "a sports bra",
 			get requirements() { return V.boughtItem.clothing.sports === 1; },
 			exposure: 2
-		},
+		}],
+	["sport shorts and a t-shirt",
 		{
 			name: "Sport shorts and a t-shirt",
-			value: "sport shorts and a t-shirt",
 			get requirements() { return V.boughtItem.clothing.sports === 1 && V.boughtItem.clothing.casual === 1; },
 			exposure: 0
-		},
+		}],
+	["a nice pony outfit",
 		{
 			name: "Pony outfit (nice)",
-			value: "a nice pony outfit",
 			get requirements() { return V.boughtItem.clothing.pony === 1; },
 			exposure: 0
-		},
+		}],
+	["a slutty pony outfit",
 		{
 			name: "Pony outfit (slutty)",
-			value: "a slutty pony outfit",
 			get requirements() { return V.boughtItem.clothing.pony === 1; },
 			exposure: 1
-		},
-
+		}],
+	["a monokini",
 		{
 			name: "Monokini",
-			value: "a monokini",
 			get requirements() { return V.boughtItem.clothing.swimwear === 1; },
 			exposure: 2
-		},
+		}],
+	["a one-piece swimsuit",
 		{
 			name: "One-piece swimsuit",
-			value: "a one-piece swimsuit",
 			get requirements() { return V.boughtItem.clothing.swimwear === 1; },
 			exposure: 0
-		},
+		}],
 
+	["a striped bra",
 		{
 			name: "Striped bra",
-			value: "a striped bra",
 			get requirements() { return V.boughtItem.clothing.pantsu === 1 || V.continent === "Japan"; },
 			exposure: 2
-		},
+		}],
+	["striped panties",
 		{
 			name: "Striped panties",
-			value: "striped panties",
 			get requirements() { return V.boughtItem.clothing.pantsu === 1 || V.continent === "Japan"; },
 			exposure: 1,
-		},
+		}],
+	["striped underwear",
 		{
 			name: "Striped underwear",
-			value: "striped underwear",
 			get requirements() { return V.boughtItem.clothing.pantsu === 1 || V.continent === "Japan"; },
 			exposure: 1,
-		},
+		}],
 
-		// "Normal" things:
+	// "Normal" things:
+	["an apron",
 		{
 			name: "Apron",
-			value: "an apron",
 			exposure: 1,
-		},
+		}],
+	["slutty jewelry",
 		{
 			name: "Bangles",
-			value: "slutty jewelry",
 			exposure: 2
-		},
+		}],
+	["clubslut netting",
 		{
 			name: "Clubslut netting",
-			value: "clubslut netting",
 			exposure: 2
-		},
+		}],
+	["cutoffs and a t-shirt",
 		{
 			name: "Cutoffs and a t-shirt",
-			value: "cutoffs and a t-shirt",
 			exposure: 0
-		},
+		}],
+	["a comfortable bodysuit",
 		{
 			name: "Bodysuit",
-			value: "a comfortable bodysuit",
 			exposure: 0
-		},
+		}],
+	["a cheerleader outfit",
 		{
 			name: "Cheerleader",
-			value: "a cheerleader outfit",
 			exposure: 1
-		},
+		}],
+	["a fallen nuns habit",
 		{
 			name: "Fallen nun",
-			value: "a fallen nuns habit",
 			exposure: 2
-		},
+		}],
+	["a hijab and abaya",
 		{
 			name: "Hijab and abaya",
-			value: "a hijab and abaya",
 			exposure: 0
-		},
+		}],
+	["a leotard",
 		{
 			name: "Leotard",
-			value: "a leotard",
 			exposure: 0
-		},
+		}],
+	["a slutty maid outfit",
 		{
 			name: "Maid (slutty)",
-			value: "a slutty maid outfit",
 			exposure: 1
-		},
+		}],
+	["a mini dress",
 		{
 			name: "Mini dress",
-			value: "a mini dress",
 			exposure: 0
-		},
+		}],
+	["attractive lingerie",
 		{
 			name: "Nice lingerie",
-			value: "attractive lingerie",
 			exposure: 1
-		},
+		}],
+	["a slutty nurse outfit",
 		{
 			name: "Nurse (slutty)",
-			value: "a slutty nurse outfit",
 			exposure: 1
-		},
+		}],
+	["overalls",
 		{
 			name: "Overalls",
-			value: "overalls",
 			exposure: 0
-		},
+		}],
+	["panties",
 		{
 			name: "Panties",
-			value: "panties",
 			exposure: 1
-		},
+		}],
+	["a scalemail bikini",
 		{
 			name: "Scalemail bikini",
-			value: "a scalemail bikini",
 			exposure: 1
-		},
+		}],
+	["a schoolgirl outfit",
 		{
 			name: "Schoolgirl",
-			value: "a schoolgirl outfit",
 			exposure: 1
-		},
+		}],
+	["a slutty outfit",
 		{
 			name: "Slutty outfit",
-			value: "a slutty outfit",
 			exposure: 1
-		},
+		}],
+	["spats and a tank top",
 		{
 			name: "Spats and a tank top",
-			value: "spats and a tank top",
 			exposure: 0
-		},
+		}],
+	["a string bikini",
 		{
 			name: "String bikini",
-			value: "a string bikini",
 			exposure: 2
-		},
+		}],
+	["a succubus outfit",
 		{
 			name: "Succubus costume",
-			value: "a succubus outfit",
 			exposure: 2
-		},
+		}],
+	["slutty business attire",
 		{
 			name: "Suit (slutty)",
-			value: "slutty business attire",
 			exposure: 1,
-		},
+		}],
 
-		/*
-		{
-			name: "Let them choose",
-			value: "choosing her own clothes"
-		},
-		*/
+	/*
+	["choosing her own clothes",
+{
+		name: "Let them choose",
+	}],
+	*/
+	["a halter top dress",
 		{
 			name: "Haltertop dress",
-			value: "a halter top dress",
 			exposure: 0
-		},
+		}],
+	["a slave gown",
 		{
 			name: "Slave gown",
-			value: "a slave gown",
 			exposure: 0
-		}
-	],
-
-	harsh: [
+		}],
+	["chains",
 		{
 			name: "Chains",
-			value: "chains",
 			fs: "FSDegradationist",
 			get requirements() { return V.boughtItem.clothing.chains === 1; },
-			exposure: 2
-		},
+			exposure: 2,
+			harsh: true
+		}],
+	["no clothing",
 		{
 			name: "Go naked",
-			value: "no clothing",
-			exposure: 2
-		},
+			exposure: 2,
+			harsh: true
+		}],
+	["a penitent nuns habit",
 		{
 			name: "Penitent nun",
-			value: "a penitent nuns habit",
 			exposure: 1,
-		},
+			harsh: true
+		}],
+	["restrictive latex",
 		{
 			name: "Restrictive latex",
-			value: "restrictive latex",
 			exposure: 2
-		},
+		}],
+	["shibari ropes",
 		{
 			name: "Shibari ropes",
-			value: "shibari ropes",
-			exposure: 2
-		},
+			exposure: 2,
+			harsh: true
+		}],
+	["uncomfortable straps",
 		{
 			name: "Uncomfortable straps",
-			value: "uncomfortable straps",
-			exposure: 2
+			exposure: 2,
+			harsh: true
 		}
-	],
-};
+	]
+]);
 /**
  * @typedef {object} slaveWear
  * @property {string} name
- * @property {string} value
  * @property {FC.FutureSociety} [fs] Automatically unlocked with this FS.
  * @property {boolean} [requirements]
+ * @property {boolean} [harsh]
  */
 
 /**
- * @typedef {Array<slaveWear>|Array<slaveWearChastity>} slaveWearCategory
+ * @typedef {Map<string, slaveWear|slaveWearChastity>} slaveWearCategory
  */
 
 /** @type {Object.<string, slaveWearCategory>} */
 App.Data.slaveWear = {
-	niceCollars: [
-		{
-			name: "Stylish leather",
-			value: "stylish leather"
-		},
-		{
-			name: "Satin choker",
-			value: "satin choker"
-		},
-		{
-			name: "Silken ribbon",
-			value: "silk ribbon"
-		},
-		{
-			name: "Heavy gold",
-			value: "heavy gold"
-		},
-		{
-			name: "Pretty jewelry",
-			value: "pretty jewelry"
-		},
-		{
-			name: "Nice retirement counter",
-			value: "nice retirement counter",
-			get requirements() {
-				return V.seeAge === 1;
+	collars: new Map([
+		["stylish leather", {name: "Stylish leather"}],
+		["satin choker", {name: "Satin choker"}],
+		["silk ribbon", {name: "Silken ribbon"}],
+		["heavy gold", {name: "Heavy gold"}],
+		["pretty jewelry", {name: "Pretty jewelry"}],
+		["nice retirement counter",
+			{
+				name: "Nice retirement counter",
+				get requirements() {
+					return V.seeAge === 1;
+				}
 			}
-		},
-		{
-			name: "Pregnancy biometrics",
-			value: "preg biometrics",
-			get requirements() {
-				return V.seePreg === 1;
+		],
+		["preg biometrics",
+			{
+				name: "Pregnancy biometrics",
+				get requirements() {
+					return V.seePreg === 1;
+				}
 			}
-		},
-		{
-			name: "Bell",
-			value: "bell collar"
-		},
-		{
-			name: "Cowbell",
-			value: "leather with cowbell"
-		},
-		{
-			name: "Bowtie collar",
-			value: "bowtie",
-			fs: "FSGenderFundamentalist",
-			get requirements() {
-				return V.boughtItem.clothing.bunny === 1;
+		],
+		["bell collar", {name: "Bell"}],
+		["leather with cowbell", {name: "Cowbell"}],
+		["bowtie",
+			{
+				name: "Bowtie collar",
+				fs: "FSGenderFundamentalist",
+				get requirements() {
+					return V.boughtItem.clothing.bunny === 1;
+				}
 			}
-		},
-		{
-			name: "Neck tie",
-			value: "neck tie",
-			fs: "FSPaternalist",
-			get requirements() {
-				return V.boughtItem.clothing.conservative === 1;
+		],
+		["neck tie",
+			{
+				name: "Neck tie",
+				fs: "FSPaternalist",
+				get requirements() {
+					return V.boughtItem.clothing.conservative === 1;
+				}
 			}
-		},
-		{
-			name: "Ancient Egyptian",
-			value: "ancient Egyptian",
-			fs: "FSEgyptianRevivalist",
-			get requirements() {
-				return V.boughtItem.clothing.egypt === 1;
+		],
+		["ancient Egyptian",
+			{
+				name: "Ancient Egyptian",
+				fs: "FSEgyptianRevivalist",
+				get requirements() {
+					return V.boughtItem.clothing.egypt === 1;
+				}
 			}
-		},
-	],
-
-	harshCollars: [
-		{
-			name: "Tight steel",
-			value: "tight steel"
-		},
-		{
-			name: "Cruel retirement counter",
-			value: "cruel retirement counter",
-			get requirements() {
-				return V.seeAge === 1;
+		],
+		["tight steel",
+			{
+				name: "Tight steel",
+				harsh: true
 			}
-		},
-		{
-			name: "Uncomfortable leather",
-			value: "uncomfortable leather"
-		},
-		{
-			name: "Shock punishment",
-			value: "shock punishment"
-		},
-		{
-			name: "Neck corset",
-			value: "neck corset"
-		},
-	],
-
-	faceAccessory: [
-		{
-			name: "Porcelain mask",
-			value: "porcelain mask"
-		},
-		{
-			name: "Cat ears",
-			value: "cat ears"
-		},
-	],
-
-	mouthAccessory: [
-		{
-			name: "Ball gag",
-			value: "ball gag"
-		},
-		{
-			name: "Bit gag",
-			value: "bit gag"
-		},
-		{
-			name: "Ring gag",
-			value: "ring gag"
-		},
-		{
-			name: "Massive dildo gag",
-			value: "massive dildo gag",
-			get requirements() {
-				return V.boughtItem.toys.gags === 1;
+		],
+		["cruel retirement counter",
+			{
+				name: "Cruel retirement counter",
+				get requirements() {
+					return V.seeAge === 1;
+				},
+				harsh: true
 			}
-		},
-		{
-			name: "Dildo gag",
-			value: "dildo gag"
-		},
-	],
-
-	shoes: [
-		{
-			name: "Barefoot",
-			value: "none"
-		},
-		{
-			name: "Flats",
-			value: "flats"
-		},
-		{
-			name: "Heels",
-			value: "heels"
-		},
-		{
-			name: "Pumps",
-			value: "pumps"
-		},
-		{
-			name: "Thigh boots",
-			value: "boots"
-		},
-		{
-			name: "Painfully extreme heels",
-			value: "extreme heels"
-		},
-		{
-			name: "Platforms",
-			value: "platform shoes",
-			fs: "FSStatuesqueGlorification",
-			get requirements() {
-				return (V.boughtItem.shoes.heels === 1);
+		],
+		["uncomfortable leather",
+			{
+				name: "Uncomfortable leather",
+				harsh: true
 			}
-		},
-		{
-			name: "Platform heels",
-			value: "platform heels",
-			fs: "FSStatuesqueGlorification",
-			get requirements() {
-				return (V.boughtItem.shoes.heels === 1);
+		],
+		["shock punishment",
+			{
+				name: "Shock punishment",
+				harsh: true
 			}
-		},
-		{
-			name: "Painfully extreme platform heels",
-			value: "extreme platform heels",
-			fs: "FSStatuesqueGlorification",
-			get requirements() {
-				return (V.boughtItem.shoes.heels === 1);
+		],
+		["neck corset",
+			{
+				name: "Neck corset",
+				harsh: true
 			}
-		}
-	],
+		],
+	]),
 
-	bellyAccessories: [
-		{
-			name: "None",
-			value: "none"
-		},
-		{
-			name: "Tight corset",
-			value: "a corset"
-		},
-		{
-			name: "Extreme corset",
-			value: "an extreme corset"
-		},
-		{
-			name: "Supportive band",
-			value: "a support band"
-		},
-		{
-			name: "1st Trimester belly",
-			value: "a small empathy belly",
-			fs: "FSRepopulationFocus",
-			get requirements() {
-				return V.boughtItem.clothing.belly === 1;
-			}
-		},
-		{
-			name: "2nd Trimester belly",
-			value: "a medium empathy belly",
-			fs: "FSRepopulationFocus",
-			get requirements() {
-				return V.boughtItem.clothing.belly === 1;
-			}
-		},
-		{
-			name: "3rd Trimester belly",
-			value: "a large empathy belly",
-			fs: "FSRepopulationFocus",
-			get requirements() {
-				return V.boughtItem.clothing.belly === 1;
-			}
-		},
-		{
-			name: "3rd Trimester twins belly",
-			value: "a huge empathy belly",
-			fs: "FSRepopulationFocus",
-			get requirements() {
-				return V.boughtItem.clothing.belly === 1;
-			}
-		}
-	],
+	faceAccessory: new Map([
+		["porcelain mask", {name: "Porcelain mask"}],
+		["cat ears", {name: "Cat ears"}],
+	]),
 
-	vaginalAccessories: [
-		{
-			name: "None",
-			value: "none"
-		},
-		{
-			name: "Bullet vibrator",
-			value: "bullet vibrator"
-		},
-		{
-			name: "Smart bullet vibrator",
-			value: "smart bullet vibrator",
-			get requirements() {
-				return V.boughtItem.toys.smartVibes === 1;
-			}
-		},
-		{
-			name: "Dildo",
-			value: "dildo"
-		},
-		{
-			name: "Long dildo",
-			value: "long dildo",
-			get requirements() {
-				return V.boughtItem.toys.dildos === 1;
-			}
-		},
-		{
-			name: "Large dildo",
-			value: "large dildo"
-		},
-		{
-			name: "Long, large dildo",
-			value: "long, large dildo",
-			get requirements() {
-				return V.boughtItem.toys.dildos === 1;
-			}
-		},
-		{
-			name: "Huge dildo",
-			value: "huge dildo",
-			get requirements() {
-				return V.boughtItem.toys.dildos === 1;
-			}
-		},
-		{
-			name: "Long, huge dildo",
-			value: "long, huge dildo",
-			get requirements() {
-				return V.boughtItem.toys.dildos === 1;
-			}
-		}
-	],
+	mouthAccessory: new Map([
+		["ball gag", {name: "Ball gag"}],
+		["bit gag", {name: "Bit gag"}],
+		["ring gag", {name: "Ring gag"}],
+		["massive dildo gag",
+			{
+				name: "Massive dildo gag",
+				get requirements() {
+					return V.boughtItem.toys.gags === 1;
+				}
+			}],
+		["dildo gag", {name: "Dildo gag"}],
+	]),
 
-	vaginalAttachments: [
-		{
-			name: "None",
-			value: "none"
-		},
-		{
-			name: "Vibrating attachment",
-			value: "vibrator",
-			get requirements() {
-				return V.boughtItem.toys.vaginalAttachments === 1;
+	shoes: new Map([
+		["none", {name: "Barefoot"}],
+		["flats", {name: "Flats"}],
+		["heels", {name: "Heels"}],
+		["pumps", {name: "Pumps"}],
+		["boots", {name: "Thigh boots"}],
+		["extreme heels", {name: "Painfully extreme heels"}],
+		["platform shoes",
+			{
+				name: "Platforms",
+				fs: "FSStatuesqueGlorification",
+				get requirements() {
+					return (V.boughtItem.shoes.heels === 1);
+				}
+			}],
+		["platform heels",
+			{
+				name: "Platform heels",
+				fs: "FSStatuesqueGlorification",
+				get requirements() {
+					return (V.boughtItem.shoes.heels === 1);
+				}
+			}],
+		["extreme platform heels",
+			{
+				name: "Painfully extreme platform heels",
+				fs: "FSStatuesqueGlorification",
+				get requirements() {
+					return (V.boughtItem.shoes.heels === 1);
+				}
 			}
-		},
-		{
-			name: "Smart vibrating attachment",
-			value: "smart vibrator",
-			get requirements() {
-				return V.boughtItem.toys.smartVaginalAttachments === 1;
-			}
-		}
-	],
+		],
+	]),
 
-	dickAccessories: [
-		{
-			name: "None",
-			value: "none"
-		},
-		{
-			name: "Bullet vibrator",
-			value: "bullet vibrator"
-		},
-		{
-			name: "Smart bullet vibrator",
-			value: "smart bullet vibrator",
-			get requirements() {
-				return V.boughtItem.toys.smartVibes === 1;
+	bellyAccessories: new Map([
+		["none",
+			{
+				name: "None",
+			}],
+		["a corset",
+			{
+				name: "Tight corset",
+			}],
+		["an extreme corset",
+			{
+				name: "Extreme corset",
+			}],
+		["a support band",
+			{
+				name: "Supportive band",
+			}],
+		["a small empathy belly",
+			{
+				name: "1st Trimester belly",
+				fs: "FSRepopulationFocus",
+				get requirements() {
+					return V.boughtItem.clothing.belly === 1;
+				}
+			}],
+		["a medium empathy belly",
+			{
+				name: "2nd Trimester belly",
+				fs: "FSRepopulationFocus",
+				get requirements() {
+					return V.boughtItem.clothing.belly === 1;
+				}
+			}],
+		["a large empathy belly",
+			{
+				name: "3rd Trimester belly",
+				fs: "FSRepopulationFocus",
+				get requirements() {
+					return V.boughtItem.clothing.belly === 1;
+				}
+			}],
+		["a huge empathy belly",
+			{
+				name: "3rd Trimester twins belly",
+				fs: "FSRepopulationFocus",
+				get requirements() {
+					return V.boughtItem.clothing.belly === 1;
+				}
 			}
-		}
-	],
+		]
+	]),
 
-	buttplugs: [
-		{
-			name: "None",
-			value: "none"
-		},
-		{
-			name: "Standard plug",
-			value: "plug"
-		},
-		{
-			name: "Long plug",
-			value: "long plug",
-			get requirements() {
-				return V.boughtItem.toys.buttPlugs === 1;
-			}
-		},
-		{
-			name: "Large plug",
-			value: "large plug"
-		},
-		{
-			name: "Long, large plug",
-			value: "long, large plug",
-			get requirements() {
-				return V.boughtItem.toys.buttPlugs === 1;
-			}
-		},
-		{
-			name: "Huge plug",
-			value: "huge plug",
-		},
-		{
-			name: "Long, huge plug",
-			value: "long, huge plug",
-			get requirements() {
-				return V.boughtItem.toys.buttPlugs === 1;
+	vaginalAccessories: new Map([
+		["none", {name: "None"}],
+		["bullet vibrator", {name: "Bullet vibrator"}],
+		["smart bullet vibrator",
+			{
+				name: "Smart bullet vibrator",
+				get requirements() {
+					return V.boughtItem.toys.smartVibes === 1;
+				}
+			}],
+		["dildo", {name: "Dildo"}],
+		["long dildo",
+			{
+				name: "Long dildo",
+				get requirements() {
+					return V.boughtItem.toys.dildos === 1;
+				}
+			}],
+		["large dildo", {name: "Large dildo"}],
+		["long, large dildo",
+			{
+				name: "Long, large dildo",
+				get requirements() {
+					return V.boughtItem.toys.dildos === 1;
+				}
+			}],
+		["huge dildo",
+			{
+				name: "Huge dildo",
+				get requirements() {
+					return V.boughtItem.toys.dildos === 1;
+				}
+			}],
+		["long, huge dildo",
+			{
+				name: "Long, huge dildo",
+				get requirements() {
+					return V.boughtItem.toys.dildos === 1;
+				}
 			}
-		}
-	],
+		]
+	]),
 
-	buttplugAttachments: [
-		{
-			name: "None",
-			value: "none"
-		},
-		{
-			name: "Tail",
-			value: "tail",
-			get requirements() {
-				return V.boughtItem.toys.buttPlugTails === 1;
+	vaginalAttachments: new Map([
+		["none",
+			{
+				name: "None",
+			}],
+		["vibrator",
+			{
+				name: "Vibrating attachment",
+				get requirements() {
+					return V.boughtItem.toys.vaginalAttachments === 1;
+				}
+			}],
+		["smart vibrator",
+			{
+				name: "Smart vibrating attachment",
+				get requirements() {
+					return V.boughtItem.toys.smartVaginalAttachments === 1;
+				}
 			}
-		},
-		{
-			name: "Fox tail",
-			value: "fox tail",
-			get requirements() {
-				return V.boughtItem.toys.buttPlugTails === 1;
+		]
+	]),
+
+	dickAccessories: new Map([
+		["none",
+			{
+				name: "None",
+			}],
+		["bullet vibrator",
+			{
+				name: "Bullet vibrator",
+			}],
+		["smart bullet vibrator",
+			{
+				name: "Smart bullet vibrator",
+				get requirements() {
+					return V.boughtItem.toys.smartVibes === 1;
+				}
 			}
-		},
-		{
-			name: "Cat tail",
-			value: "cat tail",
-			get requirements() {
-				return V.boughtItem.toys.buttPlugTails === 1;
+		]
+	]),
+
+	buttplugs: new Map([
+		["none",
+			{
+				name: "None",
+			}],
+		["plug",
+			{
+				name: "Standard plug",
+			}],
+		["long plug",
+			{
+				name: "Long plug",
+				get requirements() {
+					return V.boughtItem.toys.buttPlugs === 1;
+				}
+			}],
+		["large plug",
+			{
+				name: "Large plug",
+			}],
+		["long, large plug",
+			{
+				name: "Long, large plug",
+				get requirements() {
+					return V.boughtItem.toys.buttPlugs === 1;
+				}
+			}],
+		["huge plug",
+			{
+				name: "Huge plug",
+			}],
+		["long, huge plug",
+			{
+				name: "Long, huge plug",
+				get requirements() {
+					return V.boughtItem.toys.buttPlugs === 1;
+				}
 			}
-		},
-		{
-			name: "Cow tail",
-			value: "cow tail",
-			get requirements() {
-				return V.boughtItem.toys.buttPlugTails === 1;
+		]
+	]),
+
+	buttplugAttachments: new Map([
+		["none",
+			{
+				name: "None",
+			}],
+		["tail",
+			{
+				name: "Tail",
+				get requirements() {
+					return V.boughtItem.toys.buttPlugTails === 1;
+				}
+			}],
+		["fox tail",
+			{
+				name: "Fox tail",
+				get requirements() {
+					return V.boughtItem.toys.buttPlugTails === 1;
+				}
+			}],
+		["cat tail",
+			{
+				name: "Cat tail",
+				get requirements() {
+					return V.boughtItem.toys.buttPlugTails === 1;
+				}
+			}],
+		["cow tail",
+			{
+				name: "Cow tail",
+				get requirements() {
+					return V.boughtItem.toys.buttPlugTails === 1;
+				}
 			}
-		}
-	],
-	/**
-	 * @typedef {object} slaveWearChastity
-	 * @property {string} name
-	 * @property {string} value
-	 * @property {object} updateSlave
-	 * @property {string} [fs]
-	 */
+		]
+	]),
+};
+/**
+ * @typedef {object} slaveWearChastity
+ * @property {string} name
+ * @property {string} value
+ * @property {object} updateSlave
+ * @property {FC.FutureSociety} [fs]
+ */
 
-	/** @type {Array<slaveWearChastity>} */
-	chastityDevices: [
-		// '.value' must be a string, so using update slave so I can update multiple values.
+/** @type {Map<string, slaveWearChastity>} */
+App.Data.slaveWear.chastityDevices = new Map([
+	// '.value' must be a string, so using update slave so I can update multiple values.
+	["none",
 		{
 			name: "None",
-			value: "none",
 			updateSlave: {
 				choosesOwnChastity: 0,
 				chastityAnus: 0,
 				chastityPenis: 0,
 				chastityVagina: 0
 			},
-		},
+		}
+	],
+	["anal chastity",
 		{
 			name: "Anal chastity",
-			value: "anal chastity",
 			updateSlave: {
 				choosesOwnChastity: 0,
 				chastityAnus: 1,
 				chastityPenis: 0,
 				chastityVagina: 0
 			}
-		},
+		}
+	],
+	["chastity belt",
 		{
 			name: "Chastity belt",
-			value: "chastity belt",
 			updateSlave: {
 				choosesOwnChastity: 0,
 				chastityAnus: 0,
 				chastityPenis: 0,
 				chastityVagina: 1
 			},
-		},
+		}
+	],
+	["combined chastity belt",
 		{
 			name: "Combined chastity belt",
-			value: "combined chastity belt",
 			updateSlave: {
 				choosesOwnChastity: 0,
 				chastityAnus: 1,
 				chastityPenis: 0,
 				chastityVagina: 1
 			},
-		},
+		}
+	],
+	["chastity cage",
 		{
 			name: "Chastity cage",
-			value: "chastity cage",
 			updateSlave: {
 				choosesOwnChastity: 0,
 				chastityAnus: 0,
 				chastityPenis: 1,
 				chastityVagina: 0
 			},
-		},
+		}
+	],
+	["combined chastity cage",
 		{
 			name: "Combined chastity cage",
-			value: "combined chastity cage",
 			updateSlave: {
 				choosesOwnChastity: 0,
 				chastityAnus: 1,
 				chastityPenis: 1,
 				chastityVagina: 0
 			},
-		},
+		}
+	],
+	["genital chastity",
 		{
 			name: "Genital chastity",
-			value: "genital chastity",
 			updateSlave: {
 				choosesOwnChastity: 0,
 				chastityAnus: 0,
 				chastityPenis: 1,
 				chastityVagina: 1
 			},
-		},
+		}
+	],
+	["full chastity",
 		{
 			name: "Full chastity",
-			value: "full chastity",
 			updateSlave: {
 				choosesOwnChastity: 0,
 				chastityAnus: 1,
 				chastityPenis: 1,
 				chastityVagina: 1
 			},
-		},
+		}
+	],
+	["choose own chastity",
 		{
 			name: "Choose own chastity",
-			value: "choose own chastity",
 			fs: "FSRestart",
 			updateSlave: {
 				choosesOwnChastity: 1
 			},
-		},
+		}
+	],
+	["revoke choosing own chastity",
 		{
 			name: "Revoke choosing own chastity",
-			value: "revoke choosing own chastity",
 			fs: "FSRestart",
 			updateSlave: {
 				choosesOwnChastity: 0
 			},
-		},
-	],
-};
+		}
+	]
+]);
diff --git a/src/endWeek/saClothes.js b/src/endWeek/saClothes.js
index 86e649ac224b047bf2f4b5ca6a45a5756e78f60f..6c1e1da8432a5ce0bc24c2c042dfb77dbf33c0d4 100644
--- a/src/endWeek/saClothes.js
+++ b/src/endWeek/saClothes.js
@@ -287,7 +287,7 @@ App.SlaveAssignment.clothes = (function() {
 						r.push(`${He} pretends to be embarrassed by ${his} clearly exposed breasts but <span class="hotpink">secretly gets off on it.</span>`);
 						slave.devotion += 1;
 					}
-				} else if (slave.fetish === "humiliation" && clothingExposureAmount(slave.clothes) === 2) {
+				} else if (slave.fetish === "humiliation" && App.Data.clothes.get(slave.clothes).exposure === 2) {
 					if (slave.fetishKnown === 0) {
 						r.push(`${He} pretends to be embarrassed by ${his} extremely revealing clothing but seems to get off on it. <span class="lightcoral">${He}'s into humiliation.</span>`);
 						slave.fetishKnown = 1;
@@ -324,7 +324,7 @@ App.SlaveAssignment.clothes = (function() {
 
 		// humiliating clothing effects
 		if (slave.fetishKnown === 0 || slave.fetish === "none") {
-			if (clothingExposureAmount(slave.clothes) === 2) {
+			if (App.Data.clothes.get(slave.clothes).exposure === 2) {
 				if (fetishChangeChance(slave) > jsRandom(0, 100)) {
 					r.push(`Surprisingly, ${he} takes to ${his} extremely revealing clothing, and gets an obvious thrill from it. <span class="lightcoral">${He}'s become a humiliation fetishist!</span>`);
 					slave.fetish = "humiliation";
diff --git a/src/events/eventUtils.js b/src/events/eventUtils.js
index 1d944f7c58b5c3eb659a6aec90bc8a6794c7bdad..b8a9df8934acf8860d3ed8b22d143739862bb0ac 100644
--- a/src/events/eventUtils.js
+++ b/src/events/eventUtils.js
@@ -1,5 +1,5 @@
 App.Events.drawEventArt = (function() {
-	const validSingleOutfits = App.Data.clothes.nice.map(c => c.value).concat(App.Data.clothes.harsh.map(c => c.value));
+	const validSingleOutfits = Array.from(App.Data.clothes.keys());
 
 	/** draw event art, with the option to dress the slave in a particular way
 	 * @param {Node} node - DOM node to attach art to
diff --git a/src/facilities/wardrobe/wardrobeShopping.js b/src/facilities/wardrobe/wardrobeShopping.js
index 42616aafc38a02692d34b6abc2d2040c7024cf10..61ea7a3255594f42449cc912a883ece530f03827 100644
--- a/src/facilities/wardrobe/wardrobeShopping.js
+++ b/src/facilities/wardrobe/wardrobeShopping.js
@@ -8,8 +8,7 @@ App.UI.WardrobeShopping = function() {
 	let r = [];
 	r.push(`The room containing all the clothes and accessories you have available to dress your slaves in, as well as the supplies and tools your tailor needs to resize them to better fit your slaves. Several mirrors are set up for a slave to try on outfits should they be allowed to dress themselves. The selection includes`);
 	const ownItAll = (
-		App.Data.clothes.nice.every((i) => isItemAccessible.entry(i.value, "clothing")) &&
-		App.Data.clothes.harsh.every((i) => isItemAccessible.entry(i.value, "clothing"))
+		App.Data.clothes.every((i) => isItemAccessible.entry(i.value, "clothing"))
 	);
 	if (ownItAll) {
 		r.push(`outfits from all manner of cultures and societies; not a single style eludes you.`);
diff --git a/src/interaction/siWardrobe.js b/src/interaction/siWardrobe.js
index 4ce4801f5b08a48e24b9c62445e1c99dfbd6f1ad..b1b24ec85bc0048c42b79a5347094ae33ea3fbc0 100644
--- a/src/interaction/siWardrobe.js
+++ b/src/interaction/siWardrobe.js
@@ -41,7 +41,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) {
 			// Choose her own
 			if (slave.clothes !== `choosing her own clothes`) {
 				let choiceOptionsArray = [];
-				choiceOptionsArray.push({ text: ` Let ${him} choose`, updateSlave: { clothes: `choosing her own clothes`, choosesOwnClothes: 1 } });
+				choiceOptionsArray.push({text: ` Let ${him} choose`, updateSlave: {clothes: `choosing her own clothes`, choosesOwnClothes: 1}});
 				label.appendChild(generateRows(choiceOptionsArray, "clothes", false));
 			}
 			el.appendChild(label);
@@ -50,30 +50,22 @@ App.UI.SlaveInteract.wardrobe = function(slave) {
 			let niceOptionsArray = [];
 			let harshOptionsArray = [];
 
-			// Nice clothes
-			App.Data.clothes.nice.forEach(item => {
-				niceOptionsArray.push(
-					{
-						text: item.name,
-						updateSlave: { clothes: item.value, choosesOwnClothes: 0 },
-						FS: item.fs,
-						exposure: item.exposure,
-					}
-				);
-			});
-			// Harsh clothes
-			App.Data.clothes.harsh.forEach(item => {
-				if (item.value !== "choosing her own clothes") {
-					harshOptionsArray.push(
-						{
-							text: item.name,
-							updateSlave: { clothes: item.value, choosesOwnClothes: 0 },
-							FS: item.fs,
-							exposure: item.exposure,
-						}
-					);
+			for (const [key, object] of App.Data.clothes) {
+				if (key === "choosing her own clothes") {
+					continue;
 				}
-			});
+				const reshapedItem = {
+					text: object.name,
+					updateSlave: {clothes: key, choosesOwnClothes: 0},
+					FS: object.fs,
+					exposure: object.exposure,
+				};
+				if (object.harsh) {
+					harshOptionsArray.push(reshapedItem);
+				} else {
+					niceOptionsArray.push(reshapedItem);
+				}
+			}
 
 			// Sort
 			niceOptionsArray = niceOptionsArray.sort((a, b) => (a.text > b.text) ? 1 : -1);
@@ -111,7 +103,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) {
 		// Choose her own
 		if (slave.collar !== `none`) {
 			let choiceOptionsArray = [];
-			choiceOptionsArray.push({ text: ` None`, updateSlave: { collar: `none` } });
+			choiceOptionsArray.push({text: ` None`, updateSlave: {collar: `none`}});
 			label.appendChild(generateRows(choiceOptionsArray, "collar", false));
 		}
 
@@ -120,25 +112,18 @@ App.UI.SlaveInteract.wardrobe = function(slave) {
 		let niceOptionsArray = [];
 		let harshOptionsArray = [];
 
-		let clothingOption;
-		// Nice collar
-		App.Data.slaveWear.niceCollars.forEach(item => {
-			clothingOption = {
-				text: item.name,
-				updateSlave: { collar: item.value },
-				FS: item.fs
-			};
-			niceOptionsArray.push(clothingOption);
-		});
-		// Harsh collar
-		App.Data.slaveWear.harshCollars.forEach(item => {
-			clothingOption = {
-				text: item.name,
-				updateSlave: { collar: item.value },
-				FS: item.fs
+		for (const [key, object] of App.Data.slaveWear.collars) {
+			const reshapedItem = {
+				text: object.name,
+				updateSlave: {collar: key},
+				FS: object.fs,
 			};
-			harshOptionsArray.push(clothingOption);
-		});
+			if (object.harsh) {
+				harshOptionsArray.push(reshapedItem);
+			} else {
+				niceOptionsArray.push(reshapedItem);
+			}
+		}
 
 		// Sort
 		niceOptionsArray = niceOptionsArray.sort((a, b) => (a.text > b.text) ? 1 : -1);
@@ -174,7 +159,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) {
 		// Choose her own
 		if (slave.faceAccessory !== `none`) {
 			let choiceOptionsArray = [];
-			choiceOptionsArray.push({ text: ` None`, updateSlave: { faceAccessory: `none` } });
+			choiceOptionsArray.push({text: ` None`, updateSlave: {faceAccessory: `none`}});
 			label.appendChild(generateRows(choiceOptionsArray, "faceAccessory", false));
 		}
 
@@ -182,15 +167,14 @@ App.UI.SlaveInteract.wardrobe = function(slave) {
 
 		let array = [];
 
-		let clothingOption;
-		App.Data.slaveWear.faceAccessory.forEach(item => {
-			clothingOption = {
-				text: item.name,
-				updateSlave: { faceAccessory: item.value },
-				FS: item.fs
+		for (const [key, object] of App.Data.slaveWear.faceAccessory) {
+			const reshapedItem = {
+				text: object.name,
+				updateSlave: {faceAccessory: key},
+				FS: object.fs,
 			};
-			array.push(clothingOption);
-		});
+			array.push(reshapedItem);
+		}
 
 		// Sort
 		array = array.sort((a, b) => (a.text > b.text) ? 1 : -1);
@@ -229,7 +213,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) {
 		// Choose her own
 		if (slave.mouthAccessory !== `none`) {
 			let choiceOptionsArray = [];
-			choiceOptionsArray.push({ text: ` None`, updateSlave: { mouthAccessory: `none` } });
+			choiceOptionsArray.push({text: ` None`, updateSlave: {mouthAccessory: `none`}});
 			label.appendChild(generateRows(choiceOptionsArray, "mouthAccessory", false));
 		}
 
@@ -237,16 +221,14 @@ App.UI.SlaveInteract.wardrobe = function(slave) {
 
 		let array = [];
 
-		let clothingOption;
-		// mouthAccessory
-		App.Data.slaveWear.mouthAccessory.forEach(item => {
-			clothingOption = {
-				text: item.name,
-				updateSlave: { mouthAccessory: item.value },
-				FS: item.fs
+		for (const [key, object] of App.Data.slaveWear.mouthAccessory) {
+			const reshapedItem = {
+				text: object.name,
+				updateSlave: {mouthAccessory: key},
+				FS: object.fs,
 			};
-			array.push(clothingOption);
-		});
+			array.push(reshapedItem);
+		}
 
 		// Sort
 		array = array.sort((a, b) => (a.text > b.text) ? 1 : -1);
@@ -274,7 +256,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) {
 
 		// Choose her own
 		if (slave.armAccessory !== "none") {
-			array.push({ text: ` None`, updateSlave: { armAccessory: `none` } });
+			array.push({text: ` None`, updateSlave: {armAccessory: `none`}});
 			label.appendChild(generateRows(array, "armAccessory", false));
 		}
 
@@ -283,8 +265,8 @@ App.UI.SlaveInteract.wardrobe = function(slave) {
 		let links = document.createElement('div');
 		links.className = "choices";
 		array = [
-			{ text: "Hand gloves", updateSlave: { armAccessory: "hand gloves" } },
-			{ text: "Elbow gloves", updateSlave: { armAccessory: "elbow gloves" } }
+			{text: "Hand gloves", updateSlave: {armAccessory: "hand gloves"}},
+			{text: "Elbow gloves", updateSlave: {armAccessory: "elbow gloves"}}
 		];
 		links.appendChild(generateRows(array, "armAccessory", false));
 		el.appendChild(links);
@@ -314,15 +296,14 @@ App.UI.SlaveInteract.wardrobe = function(slave) {
 
 		let optionsArray = [];
 
-		let clothingOption;
-		App.Data.slaveWear.shoes.forEach(item => {
-			clothingOption = {
-				text: item.name,
-				updateSlave: { shoes: item.value },
-				FS: item.fs
+		for (const [key, object] of App.Data.slaveWear.shoes) {
+			const reshapedItem = {
+				text: object.name,
+				updateSlave: {shoes: key},
+				FS: object.fs,
 			};
-			optionsArray.push(clothingOption);
-		});
+			optionsArray.push(reshapedItem);
+		}
 
 		// Sort
 		// No sort here since we want light -> advanced. optionsArray = optionsArray.sort((a, b) => (a.text > b.text) ? 1 : -1);
@@ -359,7 +340,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) {
 
 		// Choose her own
 		if (slave.legAccessory !== "none") {
-			array.push({ text: ` None`, updateSlave: { legAccessory: `none` } });
+			array.push({text: ` None`, updateSlave: {legAccessory: `none`}});
 			label.appendChild(generateRows(array, "legAccessory", false));
 		}
 
@@ -368,8 +349,8 @@ App.UI.SlaveInteract.wardrobe = function(slave) {
 		let links = document.createElement('div');
 		links.className = "choices";
 		array = [
-			{ text: "Short stockings", updateSlave: { legAccessory: "short stockings" } },
-			{ text: "Long stockings", updateSlave: { legAccessory: "long stockings" } }
+			{text: "Short stockings", updateSlave: {legAccessory: "short stockings"}},
+			{text: "Long stockings", updateSlave: {legAccessory: "long stockings"}}
 		];
 		links.appendChild(generateRows(array, "legAccessory", false));
 		el.appendChild(links);
@@ -379,22 +360,23 @@ App.UI.SlaveInteract.wardrobe = function(slave) {
 
 	function bellyAccessory() {
 		let choiceOptionsArray = [];
-		choiceOptionsArray.push({ text: ` None`, updateSlave: { bellyAccessory: `none` } });
+		choiceOptionsArray.push({text: ` None`, updateSlave: {bellyAccessory: `none`}});
 
 		let optionsArray = [];
 
-		let clothingOption;
-		App.Data.slaveWear.bellyAccessories.forEach(item => {
-			clothingOption = {
-				text: item.name,
-				updateSlave: { bellyAccessory: item.value },
-				FS: item.fs
-			};
-			if (item.value !== "none") {
+		for (const [key, object] of App.Data.slaveWear.bellyAccessories) {
+			if (key === "none") {
 				// skip none in set, we set the link elsewhere.
-				optionsArray.push(clothingOption);
+				continue;
 			}
-		});
+			const reshapedItem = {
+				text: object.name,
+				updateSlave: {bellyAccessory: key},
+				FS: object.fs,
+			};
+			optionsArray.push(reshapedItem);
+		}
+
 		// Sort
 		// No sort here since we want small -> large.optionsArray = optionsArray.sort((a, b) => (a.text > b.text) ? 1 : -1);
 
@@ -442,25 +424,25 @@ App.UI.SlaveInteract.wardrobe = function(slave) {
 
 		if (slave.buttplug !== `none`) {
 			let choiceOptionsArray = [];
-			choiceOptionsArray.push({ text: ` None`, updateSlave: { buttplug: `none`, buttplugAttachment: `none` } });
+			choiceOptionsArray.push({text: ` None`, updateSlave: {buttplug: `none`, buttplugAttachment: `none`}});
 			label.appendChild(generateRows(choiceOptionsArray, "buttplug", false));
 		}
 		el.appendChild(label);
 
 		let optionsArray = [];
 
-		let clothingOption;
-		App.Data.slaveWear.buttplugs.forEach(item => {
-			clothingOption = {
-				text: item.name,
-				updateSlave: { buttplug: item.value },
-				FS: item.fs
-			};
-			if (item.value !== "none") {
+		for (const [key, object] of App.Data.slaveWear.buttplugs) {
+			if (key === "none") {
 				// skip none in set, we set the link elsewhere.
-				optionsArray.push(clothingOption);
+				continue;
 			}
-		});
+			const reshapedItem = {
+				text: object.name,
+				updateSlave: {buttplug: key},
+				FS: object.fs,
+			};
+			optionsArray.push(reshapedItem);
+		}
 
 		// Sort
 		// No sort here since we want small -> large. optionsArray = optionsArray.sort((a, b) => (a.text > b.text) ? 1 : -1);
@@ -489,25 +471,25 @@ App.UI.SlaveInteract.wardrobe = function(slave) {
 
 		if (slave.buttplugAttachment !== `none`) {
 			let choiceOptionsArray = [];
-			choiceOptionsArray.push({ text: ` None`, updateSlave: { buttplugAttachment: `none` } });
+			choiceOptionsArray.push({text: ` None`, updateSlave: {buttplugAttachment: `none`}});
 			label.appendChild(generateRows(choiceOptionsArray, "buttplugAttachment", false));
 		}
 		el.appendChild(label);
 
 		let optionsArray = [];
 
-		let clothingOption;
-		App.Data.slaveWear.buttplugAttachments.forEach(item => {
-			clothingOption = {
-				text: item.name,
-				updateSlave: { buttplugAttachment: item.value },
-				FS: item.fs
-			};
-			if (item.value !== "none") {
+		for (const [key, object] of App.Data.slaveWear.buttplugAttachment) {
+			if (key === "none") {
 				// skip none in set, we set the link elsewhere.
-				optionsArray.push(clothingOption);
+				continue;
 			}
-		});
+			const reshapedItem = {
+				text: object.name,
+				updateSlave: {buttplugAttachment: key},
+				FS: object.fs,
+			};
+			optionsArray.push(reshapedItem);
+		}
 
 		// Sort
 		optionsArray = optionsArray.sort((a, b) => (a.text > b.text) ? 1 : -1);
@@ -535,25 +517,25 @@ App.UI.SlaveInteract.wardrobe = function(slave) {
 
 		if (slave.vaginalAccessory !== `none`) {
 			let choiceOptionsArray = [];
-			choiceOptionsArray.push({ text: ` None`, updateSlave: { vaginalAccessory: `none` } });
+			choiceOptionsArray.push({text: ` None`, updateSlave: {vaginalAccessory: `none`}});
 			label.appendChild(generateRows(choiceOptionsArray, "vaginalAccessory", false));
 		}
 		el.appendChild(label);
 
 		let optionsArray = [];
 
-		let clothingOption;
-		App.Data.slaveWear.vaginalAccessories.forEach(item => {
-			clothingOption = {
-				text: item.name,
-				updateSlave: { vaginalAccessory: item.value },
-				FS: item.fs
-			};
-			if (item.value !== "none") {
+		for (const [key, object] of App.Data.slaveWear.vaginalAccessories) {
+			if (key === "none") {
 				// skip none in set, we set the link elsewhere.
-				optionsArray.push(clothingOption);
+				continue;
 			}
-		});
+			const reshapedItem = {
+				text: object.name,
+				updateSlave: {vaginalAccessory: key},
+				FS: object.fs,
+			};
+			optionsArray.push(reshapedItem);
+		}
 
 		// Sort
 		// No sort here since we want small -> large. optionsArray = optionsArray.sort((a, b) => (a.text > b.text) ? 1 : -1);
@@ -582,25 +564,25 @@ App.UI.SlaveInteract.wardrobe = function(slave) {
 
 		if (slave.vaginalAttachment !== `none`) {
 			let choiceOptionsArray = [];
-			choiceOptionsArray.push({ text: ` None`, updateSlave: { vaginalAttachment: `none` } });
+			choiceOptionsArray.push({text: ` None`, updateSlave: {vaginalAttachment: `none`}});
 			label.appendChild(generateRows(choiceOptionsArray, "vaginalAttachment", false));
 		}
 		el.appendChild(label);
 
 		let optionsArray = [];
 
-		let clothingOption;
-		App.Data.slaveWear.vaginalAttachments.forEach(item => {
-			clothingOption = {
-				text: item.name,
-				updateSlave: { vaginalAttachment: item.value },
-				FS: item.fs
-			};
-			if (item.value !== "none") {
+		for (const [key, object] of App.Data.slaveWear.vaginalAttachments) {
+			if (key === "none") {
 				// skip none in set, we set the link elsewhere.
-				optionsArray.push(clothingOption);
+				continue;
 			}
-		});
+			const reshapedItem = {
+				text: object.name,
+				updateSlave: {vaginalAttachments: key},
+				FS: object.fs,
+			};
+			optionsArray.push(reshapedItem);
+		}
 
 		// Sort
 		optionsArray = optionsArray.sort((a, b) => (a.text > b.text) ? 1 : -1);
@@ -626,25 +608,25 @@ App.UI.SlaveInteract.wardrobe = function(slave) {
 
 		if (slave.dickAccessory !== `none`) {
 			let choiceOptionsArray = [];
-			choiceOptionsArray.push({ text: ` None`, updateSlave: { dickAccessory: `none` } });
+			choiceOptionsArray.push({text: ` None`, updateSlave: {dickAccessory: `none`}});
 			label.appendChild(generateRows(choiceOptionsArray, "dickAccessory", false));
 		}
 		el.appendChild(label);
 
 		let optionsArray = [];
 
-		let clothingOption;
-		App.Data.slaveWear.dickAccessories.forEach(item => {
-			clothingOption = {
-				text: item.name,
-				updateSlave: { dickAccessory: item.value },
-				FS: item.fs
-			};
-			if (item.value !== "none") {
+		for (const [key, object] of App.Data.slaveWear.dickAccessories) {
+			if (key === "none") {
 				// skip none in set, we set the link elsewhere.
-				optionsArray.push(clothingOption);
+				continue;
 			}
-		});
+			const reshapedItem = {
+				text: object.name,
+				updateSlave: {dickAccessory: key},
+				FS: object.fs,
+			};
+			optionsArray.push(reshapedItem);
+		}
 
 		// Sort
 		// No sort here since we want small -> large. optionsArray = optionsArray.sort((a, b) => (a.text > b.text) ? 1 : -1);
@@ -708,19 +690,20 @@ App.UI.SlaveInteract.wardrobe = function(slave) {
 
 		let optionsArray = [];
 
-		let clothingOption;
-		App.Data.slaveWear.chastityDevices.forEach(item => {
-			clothingOption = {
-				text: item.name,
-				updateSlave: {},
-				FS: item.fs
-			};
-			Object.assign(clothingOption.updateSlave, item.updateSlave);
-			if (item.value !== "none") {
+		for (const [key, object] of App.Data.slaveWear.chastityDevices) {
+			if (key === "none") {
 				// skip none in set, we set the link elsewhere.
-				optionsArray.push(clothingOption);
+				continue;
 			}
-		});
+			const reshapedItem = {
+				text: object.name,
+				updateSlave: {},
+				FS: object.fs,
+			};
+			Object.assign(reshapedItem.updateSlave, object.updateSlave);
+			optionsArray.push(reshapedItem);
+		}
+
 
 		// Sort
 		// skip sort for this one too. optionsArray = optionsArray.sort((a, b) => (a.text > b.text) ? 1 : -1);
@@ -948,7 +931,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) {
 				/* assuming nice clothes, could actually add some sort of check to make sure. */
 				/* which clothes have these is decided in miscData.js */
 				let clothTooltip = Cloth + "";
-				switch (clothingExposureAmount(cloth)) {
+				switch (App.Data.clothes.get(slave.clothes).exposure) {
 					case 2:
 						clothTooltip += ", it's humiliating";
 						break;
diff --git a/src/js/eventSelectionJS.js b/src/js/eventSelectionJS.js
index 023a2f5bb5b352daf0d27e0717cdcb50238587b1..515862748cd1c3cc9abb1342c45f37d726d94c9c 100644
--- a/src/js/eventSelectionJS.js
+++ b/src/js/eventSelectionJS.js
@@ -618,7 +618,7 @@ globalThis.generateRandomEventPoolStandard = function(eventSlave) {
 					if (eventSlave.trust > 20) {
 						if (eventSlave.rules.speech !== "restrictive") {
 							if (eventSlave.choosesOwnClothes !== 1) {
-								if (clothingExposureAmount(eventSlave.clothes) === 0) {
+								if (App.Data.clothes.get(slave.clothes).exposure === 0) {
 									V.RESSevent.push("modest clothes");
 								}
 							}
diff --git a/src/js/itemAvailability.js b/src/js/itemAvailability.js
index 513b80631beacf93c47fd10f8c3fe53645947928..e4ebc60638326b7b90c0e299fd75f4a7fafc9fdf 100644
--- a/src/js/itemAvailability.js
+++ b/src/js/itemAvailability.js
@@ -15,51 +15,45 @@ globalThis.isItemAccessible = (function() {
 		if (V.cheatMode === 1) {
 			return true;
 		}
-		let niceDB = [];
-		let harshDB = [];
+		let selectedDB;
 		switch (category) {
 			case "clothing":
 			case "clothes":
-				niceDB = App.Data.clothes.nice;
-				harshDB = App.Data.clothes.harsh;
+				selectedDB = App.Data.clothes;
 				break;
 			case "collar":
-				niceDB = App.Data.slaveWear.niceCollars;
-				harshDB = App.Data.slaveWear.harshCollars;
+				selectedDB = App.Data.slaveWear.collars;
 				break;
 			case "bellyAccessory":
-				niceDB = App.Data.slaveWear.bellyAccessories;
+				selectedDB = App.Data.slaveWear.bellyAccessories;
 				break;
 			case "buttplug":
-				niceDB = App.Data.slaveWear.buttplugs;
+				selectedDB = App.Data.slaveWear.buttplugs;
 				break;
 			case "buttplugAttachment":
-				niceDB = App.Data.slaveWear.buttplugAttachments;
+				selectedDB = App.Data.slaveWear.buttplugAttachments;
 				break;
 			case "vaginalAccessory":
-				niceDB = App.Data.slaveWear.vaginalAccessories;
+				selectedDB = App.Data.slaveWear.vaginalAccessories;
 				break;
 			case "vaginalAttachment":
-				niceDB = App.Data.slaveWear.vaginalAttachments;
+				selectedDB = App.Data.slaveWear.vaginalAttachments;
 				break;
 			case "dickAccessory":
-				niceDB = App.Data.slaveWear.vaginalAccessories;
+				selectedDB = App.Data.slaveWear.dickAccessories;
 				break;
 			case "shoes":
-				niceDB = App.Data.slaveWear.shoes;
+				selectedDB = App.Data.slaveWear.shoes;
 				break;
 			case "chastity":
-				niceDB = App.Data.slaveWear.chastityDevices;
+				selectedDB = App.Data.slaveWear.chastityDevices;
 				break;
 			default:
 				console.log(`made a category for ${category} automatically, may need to define this by hand`);
-				niceDB = App.Data.slaveWear[category];
+				selectedDB = App.Data.slaveWear[category];
 				break;
 		}
-		let item = niceDB.find((i) => i.value === string);
-		if (!item && (typeof harshDB !== 'undefined')) {
-			item = harshDB.find((i) => i.value === string);
-		}
+		const item = selectedDB.get(string);
 		if (!item) {
 			console.log(`${string} is not a registered piece of clothing! Check App.Data.slaveWear.${category}`);
 			return false; /* couldn't be found */
@@ -68,20 +62,22 @@ globalThis.isItemAccessible = (function() {
 	}
 	/**
 	 * Returns array of wearable clothing in format [name, value], basically player facing / game data.
-	 * @param {Array} db Array to look in (such as App.Data.clothes.nice)
+	 * @param {Map} map Map to look in (such as App.Data.clothes)
+	 * @param {string} [filter]
+	 * @param {any} [filterValue]
 	 * @returns {Array}
 	 */
-	function array(db) {
+	function array(map, filter, filterValue) {
 		const array = [];
-		db.forEach((i) => {
-			if (V.cheatMode || isAvailable(i)) {
-				let name = i.name;
-				if (i.fs) {
-					name = `${i.name} (FS)`;
-				}
-				array.push([name, i.value]);
+		for (const [key, obj] of map) {
+			if (filter && filterValue !== (obj[filter] || false)) {
+				continue;
 			}
-		});
+			if (V.cheatMode || isAvailable(obj)) {
+				const name = (obj.fs) ? `${obj.name} (FS)` : obj.name;
+				array.push([name, obj.value]);
+			}
+		}
 		return array;
 	}
 
diff --git a/src/js/rulesAssistantOptions.js b/src/js/rulesAssistantOptions.js
index b6b68cb5862a099ff2684632c98d6b30ee5ea167..05cef44ec3440524a876022eef9788934c62259f 100644
--- a/src/js/rulesAssistantOptions.js
+++ b/src/js/rulesAssistantOptions.js
@@ -1806,11 +1806,11 @@ globalThis.rulesAssistantOptions = (function() {
 			];
 			super("Clothes", items);
 
-			const nClothes = isItemAccessible.array(App.Data.clothes.nice);
+			const nClothes = isItemAccessible.array(App.Data.clothes, "harsh", !true);
 			nClothes.sort(function(a, b) { if (a[0] < b[0]) { return -1; } if (a[0] > b[0]) { return 1; } return 0; });
 			this._nice = new ListSubSection(this, "Nice", nClothes);
 
-			const hClothes = isItemAccessible.array(App.Data.clothes.harsh);
+			const hClothes = isItemAccessible.array(App.Data.clothes, "harsh", true);
 			hClothes.sort(function(a, b) { if (a[0] < b[0]) { return -1; } if (a[0] > b[0]) { return 1; } return 0; });
 
 			this._harsh = new ListSubSection(this, "Harsh", hClothes);
@@ -1833,11 +1833,11 @@ globalThis.rulesAssistantOptions = (function() {
 			];
 			super("Collar", items);
 
-			const niceCollars = isItemAccessible.array(App.Data.slaveWear.niceCollars);
+			const niceCollars = isItemAccessible.array(App.Data.slaveWear.collars, "harsh", false);
 			niceCollars.sort(function(a, b) { if (a[0] < b[0]) { return -1; } if (a[0] > b[0]) { return 1; } return 0; });
 			this._nice = new ListSubSection(this, "Nice", niceCollars);
 
-			const harshCollars = isItemAccessible.array(App.Data.slaveWear.harshCollars);
+			const harshCollars = isItemAccessible.array(App.Data.slaveWear.collars, "harsh", true);
 			harshCollars.sort(function(a, b) { if (a[0] < b[0]) { return -1; } if (a[0] > b[0]) { return 1; } return 0; });
 			this._harsh = new ListSubSection(this, "Harsh", harshCollars);
 
diff --git a/src/js/statsChecker/statsChecker.js b/src/js/statsChecker/statsChecker.js
index f19ee1234a3284373a3b0c866680e6ec1a30c458..8ec3c729225ba3f06044d7bd1777b8a9be5bfd26 100644
--- a/src/js/statsChecker/statsChecker.js
+++ b/src/js/statsChecker/statsChecker.js
@@ -472,7 +472,7 @@ globalThis.bimboScore = function(slave) {
 	if (slave.skin === "sun tanned" || slave.skin === "spray tanned") {
 		degree++;
 	}
-	if (clothingExposureAmount(slave.clothes) > 0) {
+	if (App.Data.clothes.get(slave.clothes).exposure > 0) {
 		degree++;
 	}
 
diff --git a/src/js/utilsFC.js b/src/js/utilsFC.js
index c07b6d9804672c6c7454f66e3f26e8ef6ad18221..ff6d0c4e524222a00017bf18f4d4e6397c2e8f64 100644
--- a/src/js/utilsFC.js
+++ b/src/js/utilsFC.js
@@ -3085,12 +3085,3 @@ App.Utils.alphabetizeIterable = function(iterable) {
 	return clonedArray.sort(compare);
 };
 
-/**
- * 
- * @param {string} clothing 
- * @returns {0|1|2}
- */
-globalThis.clothingExposureAmount = function(clothing) {
-	const clothes = App.Data.clothes.nice.concat(App.Data.clothes.harsh).find(c => c.value === clothing);
-	return (clothes) ? clothes.exposure : 0;
-};