diff --git a/js/003-data/slaveWearData.js b/js/003-data/slaveWearData.js
index a8d755dffc0ec3c21130dd29e9b6225d36615bcc..da4c2b53a72792d9b667ef507a855a516ed8b8ad 100644
--- a/js/003-data/slaveWearData.js
+++ b/js/003-data/slaveWearData.js
@@ -1,18 +1,15 @@
 /**
  * @typedef {object} itemFS
- * @property {FC.FutureSociety} unlocks
- * @property {Set<FC.FutureSociety>} [fsLoves] FS loves to see this outfit.
- * @property {Set<FC.FutureSociety>} [fsTolerates] FS tolerates this outfit.
- * @property {Set<FC.FutureSociety>} [fsHates] FS hates to see this outfit.
+ * @property {FC.FutureSociety} [unlocks] Automatically unlocked with this FS.
+ * @property {Set<FC.FutureSociety>} [loves] FS loves to see this outfit.
+ * @property {Set<FC.FutureSociety>} [tolerates] FS tolerates this outfit.
+ * @property {Set<FC.FutureSociety>} [hates] FS hates to see this outfit.
  */
 
 /**
  * @typedef {object} clothes
  * @property {string} name
- * @property {itemFS} [fs] Automatically unlocked with this FS.
- * @property {Set<FC.FutureSociety>} [fsLoves] FS loves to see this outfit.
- * @property {Set<FC.FutureSociety>} [fsTolerates] FS tolerates this outfit.
- * @property {Set<FC.FutureSociety>} [fsHates] FS hates to see this outfit.
+ * @property {itemFS} [fs]
  * @property {boolean} [requirements]
  * @property {0|1|2|3|4} [exposure] 0: Modest, 1: Acceptable, 2: Slutty, 3: Humiliating (exposes genitals), 4: Might as well be nude
  * @property {boolean} [harsh]
@@ -26,8 +23,10 @@ App.Data.clothes = new Map([
 	["attractive lingerie for a pregnant woman",
 		{
 			name: "Maternity lingerie",
-			fs: {unlocks: "FSRepopulationFocus"},
-			fsLoves: new Set(["FSIntellectualDependency"]),
+			fs: {
+				unlocks: "FSRepopulationFocus",
+				loves: new Set(["FSIntellectualDependency"]),
+			},
 			get requirements() { return V.boughtItem.clothing.maternityLingerie === 1; },
 			exposure: 2
 		}
@@ -35,8 +34,10 @@ App.Data.clothes = new Map([
 	["a bunny outfit",
 		{
 			name: "Bunny outfit",
-			fs: {unlocks: "FSGenderFundamentalist"},
-			fsLoves: new Set(["FSGenderFundamentalist"]),
+			fs: {
+				unlocks: "FSGenderFundamentalist",
+				loves: new Set(["FSGenderFundamentalist"]),
+			},
 			get requirements() { return V.boughtItem.clothing.bunny === 1; },
 			exposure: 1
 		}
@@ -44,8 +45,10 @@ App.Data.clothes = new Map([
 	["body oil",
 		{
 			name: "Body oil",
-			fs: {unlocks: "FSPhysicalIdealist"},
-			fsLoves: new Set(["FSPhysicalIdealist"]),
+			fs: {
+				unlocks: "FSPhysicalIdealist",
+				loves: new Set(["FSPhysicalIdealist"]),
+			},
 			get requirements() { return V.boughtItem.clothing.oil === 1; },
 			exposure: 4
 		}
@@ -53,8 +56,10 @@ App.Data.clothes = new Map([
 	["a chattel habit",
 		{
 			name: "Chattel habit",
-			fs: {unlocks: "FSChattelReligionist"},
-			fsLoves: new Set(["FSChattelReligionist"]),
+			fs: {
+				unlocks: "FSChattelReligionist",
+				loves: new Set(["FSChattelReligionist"]),
+			},
 			get requirements() { return V.boughtItem.clothing.habit === 1; },
 			exposure: 3
 		}
@@ -62,8 +67,10 @@ App.Data.clothes = new Map([
 	["conservative clothing",
 		{
 			name: "Conservative clothing",
-			fs: {unlocks: "FSPaternalist"},
-			fsLoves: new Set(["FSPaternalist"]),
+			fs: {
+				unlocks: "FSPaternalist",
+				loves: new Set(["FSPaternalist"]),
+			},
 			get requirements() { return V.boughtItem.clothing.conservative === 1; },
 			exposure: 0
 		}
@@ -71,8 +78,10 @@ App.Data.clothes = new Map([
 	["harem gauze",
 		{
 			name: "Harem gauze",
-			fs: {unlocks: "FSArabianRevivalist"},
-			fsLoves: new Set(["FSArabianRevivalist"]),
+			fs: {
+				unlocks: "FSArabianRevivalist",
+				loves: new Set(["FSArabianRevivalist"]),
+			},
 			get requirements() { return V.boughtItem.clothing.harem === 1; },
 			exposure: 1
 		}
@@ -80,8 +89,10 @@ App.Data.clothes = new Map([
 	["a huipil",
 		{
 			name: "Huipil",
-			fs: {unlocks: "FSAztecRevivalist"},
-			fsLoves: new Set(["FSAztecRevivalist"]),
+			fs: {
+				unlocks: "FSAztecRevivalist",
+				loves: new Set(["FSAztecRevivalist"]),
+			},
 			get requirements() { return V.boughtItem.clothing.huipil === 1; },
 			exposure: 0
 		}
@@ -89,8 +100,10 @@ App.Data.clothes = new Map([
 	["a kimono",
 		{
 			name: "Kimono",
-			fs: {unlocks: "FSEdoRevivalist"},
-			fsLoves: new Set(["FSEdoRevivalist"]),
+			fs: {
+				unlocks: "FSEdoRevivalist",
+				loves: new Set(["FSEdoRevivalist"]),
+			},
 			get requirements() { return (V.boughtItem.clothing.kimono === 1 || V.continent === "Japan"); },
 			exposure: 0
 		}
@@ -106,8 +119,10 @@ App.Data.clothes = new Map([
 	["a slutty qipao",
 		{
 			name: "Qipao (slutty)",
-			fs: {unlocks: "FSChineseRevivalist"},
-			fsLoves: new Set(["FSChineseRevivalist"]),
+			fs: {
+				unlocks: "FSChineseRevivalist",
+				loves: new Set(["FSChineseRevivalist"]),
+			},
 			get requirements() { return V.boughtItem.clothing.qipao === 1; },
 			exposure: 2
 		}
@@ -147,8 +162,10 @@ App.Data.clothes = new Map([
 	["a toga",
 		{
 			name: "Toga",
-			fs: {unlocks: "FSRomanRevivalist"},
-			fsLoves: new Set(["FSRomanRevivalist"]),
+			fs: {
+				unlocks: "FSRomanRevivalist",
+				loves: new Set(["FSRomanRevivalist"]),
+			},
 			get requirements() { return V.boughtItem.clothing.toga === 1; },
 			exposure: 1
 		}
@@ -156,8 +173,10 @@ App.Data.clothes = new Map([
 	["Western clothing",
 		{
 			name: "Western clothing",
-			fs: {unlocks: "FSPastoralist"},
-			fsLoves: new Set(["FSPastoralist"]),
+			fs: {
+				unlocks: "FSPastoralist",
+				loves: new Set(["FSPastoralist"]),
+			},
 			get requirements() { return V.boughtItem.clothing.western === 1; },
 			exposure: 3
 		}
@@ -165,8 +184,10 @@ App.Data.clothes = new Map([
 	["a courtesan dress",
 		{
 			name: "Courtesan dress",
-			fs: {unlocks: "FSSlaveProfessionalism"},
-			fsLoves: new Set(["FSSlaveProfessionalism"]),
+			fs: {
+				unlocks: "FSSlaveProfessionalism",
+				loves: new Set(["FSSlaveProfessionalism"]),
+			},
 			get requirements() { return V.boughtItem.clothing.courtesan === 1; },
 			exposure: 1
 		}
@@ -174,8 +195,10 @@ App.Data.clothes = new Map([
 	["a bimbo outfit",
 		{
 			name: "Bimbo outfit",
-			fs: {unlocks: "FSIntellectualDependency"},
-			fsLoves: new Set(["FSIntellectualDependency"]),
+			fs: {
+				unlocks: "FSIntellectualDependency",
+				loves: new Set(["FSIntellectualDependency"]),
+			},
 			get requirements() { return V.boughtItem.clothing.bimbo === 1; },
 			exposure: 2
 		}
@@ -319,7 +342,9 @@ App.Data.clothes = new Map([
 			name: "Nice business attire",
 			get requirements() { return V.boughtItem.clothing.career === 1; },
 			exposure: 0,
-			fsLoves: new Set(["FSMaturityPreferentialist"]),
+			fs: {
+				loves: new Set(["FSMaturityPreferentialist"])
+			},
 		}
 	],
 	["a nice nurse outfit",
@@ -341,7 +366,9 @@ App.Data.clothes = new Map([
 			name: "Maid (nice)",
 			get requirements() { return V.boughtItem.clothing.career === 1 || V.PC.career === "servant" || V.PC.career === "handmaiden" || V.PC.career === "child servant"; },
 			exposure: 0,
-			fsLoves: new Set(["FSMaturityPreferentialist"]),
+			fs: {
+				loves: new Set(["FSMaturityPreferentialist"])
+			},
 		}
 	],
 	["a ball gown",
@@ -657,14 +684,14 @@ App.Data.clothes = new Map([
 		{
 			name: "Bangles",
 			exposure: 3,
-			fsLoves: new Set(["FSEgyptianRevivalist"])
+			fs: {loves: new Set(["FSEgyptianRevivalist"])}
 		}
 	],
 	["clubslut netting",
 		{
 			name: "Clubslut netting",
 			exposure: 3,
-			fsLoves: new Set(["FSBodyPurist", "FSIntellectualDependency"]),
+			fs: {loves: new Set(["FSBodyPurist", "FSIntellectualDependency"])},
 		}
 	],
 	["cutoffs and a t-shirt",
@@ -677,14 +704,14 @@ App.Data.clothes = new Map([
 		{
 			name: "Bodysuit",
 			exposure: 1,
-			fsLoves: new Set(["FSBodyPurist"]),
+			fs: {loves: new Set(["FSBodyPurist"])},
 		}
 	],
 	["a cheerleader outfit",
 		{
 			name: "Cheerleader",
 			exposure: 2,
-			fsLoves: new Set(["FSGenderFundamentalist", "FSYouthPreferentialist"]),
+			fs: {loves: new Set(["FSGenderFundamentalist", "FSYouthPreferentialist"])},
 		}
 	],
 	["a fallen nuns habit",
@@ -703,14 +730,14 @@ App.Data.clothes = new Map([
 		{
 			name: "Leotard",
 			exposure: 1,
-			fsLoves: new Set(["FSBodyPurist"]),
+			fs: {loves: new Set(["FSBodyPurist"])},
 		}
 	],
 	["a slutty maid outfit",
 		{
 			name: "Maid (slutty)",
 			exposure: 2,
-			fsLoves: new Set(["FSSlaveProfessionalism", "FSIntellectualDependency"]),
+			fs: {loves: new Set(["FSSlaveProfessionalism", "FSIntellectualDependency"])},
 		}
 	],
 	["a mini dress",
@@ -754,14 +781,14 @@ App.Data.clothes = new Map([
 		{
 			name: "Schoolgirl",
 			exposure: 1,
-			fsLoves: new Set(["FSGenderFundamentalist", "FSYouthPreferentialist"]),
+			fs: {loves: new Set(["FSGenderFundamentalist", "FSYouthPreferentialist"])},
 		}
 	],
 	["a slutty outfit",
 		{
 			name: "Slutty outfit",
 			exposure: 2,
-			fsLoves: new Set(["FSIntellectualDependency"]),
+			fs: {loves: new Set(["FSIntellectualDependency"])},
 		}
 	],
 	["spats and a tank top",
@@ -774,7 +801,7 @@ App.Data.clothes = new Map([
 		{
 			name: "String bikini",
 			exposure: 3,
-			fsLoves: new Set(["FSBodyPurist", "FSIntellectualDependency"]),
+			fs: {loves: new Set(["FSBodyPurist", "FSIntellectualDependency"])},
 		}
 	],
 	["a succubus outfit",
@@ -787,7 +814,9 @@ App.Data.clothes = new Map([
 		{
 			name: "Suit (slutty)",
 			exposure: 2,
-			fsLoves: new Set(["FSMaturityPreferentialist", "FSSlaveProfessionalism"]),
+			fs: {
+				loves: new Set(["FSMaturityPreferentialist", "FSSlaveProfessionalism"])
+			},
 		}
 	],
 
@@ -802,21 +831,23 @@ App.Data.clothes = new Map([
 		{
 			name: "Haltertop dress",
 			exposure: 0,
-			fsLoves: new Set(["FSBodyPurist", "FSSlaveProfessionalism"]),
+			fs: {loves: new Set(["FSBodyPurist", "FSSlaveProfessionalism"])},
 		}
 	],
 	["a slave gown",
 		{
 			name: "Slave gown",
 			exposure: 0,
-			fsLoves: new Set(["FSBodyPurist"]),
+			fs: {loves: new Set(["FSBodyPurist"])},
 		}
 	],
 	["chains",
 		{
 			name: "Chains",
-			fs: {unlocks: "FSDegradationist"},
-			fsLoves: new Set(["FSDegradationist"]),
+			fs: {
+				unlocks: "FSDegradationist",
+				loves: new Set(["FSDegradationist"]),
+			},
 			get requirements() { return V.boughtItem.clothing.chains === 1; },
 			exposure: 4,
 			harsh: true
@@ -827,7 +858,7 @@ App.Data.clothes = new Map([
 			name: "Go naked",
 			exposure: 4,
 			harsh: true,
-			fsLoves: new Set(["FSPhysicalIdealist", "FSIntellectualDependency"]),
+			fs: {loves: new Set(["FSPhysicalIdealist", "FSIntellectualDependency"])},
 		}
 	],
 	["a penitent nuns habit",
@@ -842,7 +873,7 @@ App.Data.clothes = new Map([
 			name: "Restrictive latex",
 			exposure: 3,
 			harsh: true,
-			fsLoves: new Set(["FSBodyPurist"]),
+			fs: {loves: new Set(["FSBodyPurist"])},
 		}
 	],
 	["shibari ropes",
@@ -850,7 +881,7 @@ App.Data.clothes = new Map([
 			name: "Shibari ropes",
 			exposure: 4,
 			harsh: true,
-			fsLoves: new Set(["FSDegradationist"]),
+			fs: {loves: new Set(["FSDegradationist"])},
 		}
 	],
 	["uncomfortable straps",
@@ -858,14 +889,14 @@ App.Data.clothes = new Map([
 			name: "Uncomfortable straps",
 			exposure: 3,
 			harsh: true,
-			fsLoves: new Set(["FSDegradationist"]),
+			fs: {loves: new Set(["FSDegradationist"])},
 		}
 	]
 ]);
 /**
  * @typedef {object} slaveWear
  * @property {string} name
- * @property {itemFS} [fs] Automatically unlocked with this FS.
+ * @property {itemFS} [fs]
  * @property {boolean} [requirements]
  * @property {boolean} [harsh]
  */
@@ -1098,7 +1129,7 @@ App.Data.slaveWear = {
 /**
  * @typedef {object} slaveShoes
  * @property {string} name
- * @property {itemFS} [fs] Automatically unlocked with this FS.
+ * @property {itemFS} [fs]
  * @property {boolean} [requirements]
  * @property {boolean} [harsh]
  * @property {number} heelHeight height in cm.  Over 4cm they may totter.  21cm and over (8 inch heels) will be painful/extreme
@@ -1189,7 +1220,7 @@ App.Data.shoes = new Map([ // TODO: add lift property
 /**
  * @typedef {object} slaveButtplugs
  * @property {string} name
- * @property {itemFS} [fs] Automatically unlocked with this FS.
+ * @property {itemFS} [fs]
  * @property {boolean} [requirements]
  * @property {0|1|2|3} width
  * @property {0|1|2} length
@@ -1261,7 +1292,7 @@ App.Data.buttplug = new Map([
 /**
  * @typedef {object} vaginalAccessories
  * @property {string} name
- * @property {itemFS} [fs] Automatically unlocked with this FS.
+ * @property {itemFS} [fs]
  * @property {boolean} [requirements]
  * @property {0|1|2|3} width
  * @property {0|1|2} length