diff --git a/BondageClub/Assets/Female3DCG/Female3DCG.js b/BondageClub/Assets/Female3DCG/Female3DCG.js
index 732c902d64..eea6cd153d 100644
--- a/BondageClub/Assets/Female3DCG/Female3DCG.js
+++ b/BondageClub/Assets/Female3DCG/Female3DCG.js
@@ -1093,65 +1093,24 @@ var AssetFemale3DCG = [
 			},
 			{
 				Name: "BartenderVest",
-				InventoryID: 1225,
-				Value: -1,
-				BuyGroup: "BartenderVest",
-				ParentItem: "SuitBartenderVest",
-				DynamicGroupName: "Suit",
-				Gender: "F",
-				Prerequisite: ["HasBreasts"],
-				Priority: 27,
-				Top: 182,
-				Left: 125,
-				DefaultColor: ["#893939", "#897E66"],
-				PoseMapping: {
-					...AssetPoseMapping.Cloth
+				CopyConfig: {
+					GroupName: "Suit",
+					AssetName: "BartenderVest",
+					BuyGroup: true,
 				},
-				Layer: [
-					{
-						Name: "Vest",
-						PoseMapping: {
-							BackBoxTie: "BackBoxTie",
-							BackCuffs: "BackBoxTie",
-							BackElbowTouch: "BackBoxTie",
-							OverTheHead: "OverTheHead",
-							TapedHands: "BackBoxTie",
-							Yoked: "Yoked",
-							AllFours: "AllFours",
-							Hogtied: "Hogtied",
-						},
-						AllowColorize: true,
-					},
-					{
-						Name: "Buttons",
-						ParentGroup: {},
-						PoseMapping: {
-							BackBoxTie: "BackBoxTie",
-							BackCuffs: "BackBoxTie",
-							BackElbowTouch: "BackBoxTie",
-							OverTheHead: "OverTheHead",
-							TapedHands: "BackBoxTie",
-							Yoked: "Yoked",
-							AllFours: PoseType.HIDE,
-							Hogtied: PoseType.HIDE,
-						},
-						AllowColorize: true,
-					},
-					{
-						Name: "BHog",
-						PoseMapping: {
-							BackBoxTie: PoseType.HIDE,
-							BackCuffs: PoseType.HIDE,
-							BackElbowTouch: PoseType.HIDE,
-							OverTheHead: PoseType.HIDE,
-							TapedHands: PoseType.HIDE,
-							Yoked: PoseType.HIDE,
-							AllFours: "Hogtied",
-							Hogtied: "Hogtied",
-						},
-						CopyLayerColor: "Buttons",
-					},
-				],
+				Value: -1,
+				DynamicGroupName: "Suit",
+			},
+			{
+				Name: "BartenderVestM",
+				CopyConfig: {
+					GroupName: "Suit",
+					AssetName: "BartenderVestM",
+					BuyGroup: true,
+				},
+				Value: -1,
+				DynamicGroupName: "Suit",
+				Priority: 27,
 			},
 			{
 				Name: "TennisShirt1",
@@ -3787,69 +3746,6 @@ var AssetFemale3DCG = [
 					{ Name: "Buttons", AllowColorize: true },
 				],
 			},
-			{
-				Name: "BartenderVestM",
-				InventoryID: 1225,
-				Value: -1,
-				BuyGroup: "BartenderVest",
-				ParentItem: "SuitBartenderVestM",
-				DynamicGroupName: "Suit",
-				Gender: "M",
-				Prerequisite: ["HasFlatChest"],
-				Priority: 27,
-				Top: 182,
-				Left: 125,
-				DefaultColor: ["#606060", "Default"],
-				PoseMapping: {
-					...AssetPoseMapping.Cloth
-				},
-				Layer: [
-					{
-						Name: "Vest",
-						PoseMapping: {
-							BackBoxTie: "BackBoxTie",
-							BackCuffs: "BackBoxTie",
-							BackElbowTouch: "BackBoxTie",
-							OverTheHead: "OverTheHead",
-							TapedHands: "BackBoxTie",
-							Yoked: "Yoked",
-							AllFours: "AllFours",
-							Hogtied: "Hogtied",
-						},
-						AllowColorize: true,
-					},
-					{
-						Name: "Buttons",
-						ParentGroup: {},
-						PoseMapping: {
-							BackBoxTie: "BackBoxTie",
-							BackCuffs: "BackBoxTie",
-							BackElbowTouch: "BackBoxTie",
-							OverTheHead: "OverTheHead",
-							TapedHands: "BackBoxTie",
-							Yoked: "BackBoxTie",
-							AllFours: PoseType.HIDE,
-							Hogtied: PoseType.HIDE,
-						},
-						AllowColorize: true,
-					},
-					{
-						Name: "BHog",
-						ParentGroup: {},
-						PoseMapping: {
-							BackBoxTie: PoseType.HIDE,
-							BackCuffs: PoseType.HIDE,
-							BackElbowTouch: PoseType.HIDE,
-							OverTheHead: PoseType.HIDE,
-							TapedHands: PoseType.HIDE,
-							Yoked: PoseType.HIDE,
-							AllFours: "Hogtied",
-							Hogtied: "Hogtied",
-						},
-						CopyLayerColor: "Buttons",
-					},
-				],
-			},
 		],
 		Color: [
 			"Default",
@@ -5465,8 +5361,6 @@ var AssetFemale3DCG = [
 				InventoryID: 1225,
 				Value: 12,
 				BuyGroup: "BartenderVest",
-				ParentItem: "SuitBartenderVest",
-				DynamicGroupName: "Suit",
 				Gender: "F",
 				Prerequisite: ["HasBreasts"],
 				Priority: 29,
@@ -5474,33 +5368,26 @@ var AssetFemale3DCG = [
 				Left: 125,
 				DefaultColor: ["#893939", "#897E66"],
 				PoseMapping: {
-					...AssetPoseMapping.Cloth
+					...AssetPoseMapping.Cloth,
+					BackBoxTie: "BackBoxTie",
+					BackCuffs: "BackBoxTie",
+					BackElbowTouch: "BackBoxTie",
+					OverTheHead: "OverTheHead",
+					TapedHands: "BackBoxTie",
+					Yoked: "Yoked",
+					AllFours: "AllFours",
+					Hogtied: "Hogtied",
 				},
+				InheritPoseMappingFields: true,
 				Layer: [
 					{
 						Name: "Vest",
-						PoseMapping: {
-							BackBoxTie: "BackBoxTie",
-							BackCuffs: "BackBoxTie",
-							BackElbowTouch: "BackBoxTie",
-							OverTheHead: "OverTheHead",
-							TapedHands: "BackBoxTie",
-							Yoked: "Yoked",
-							AllFours: "AllFours",
-							Hogtied: "Hogtied",
-						},
 						AllowColorize: true,
 					},
 					{
 						Name: "Buttons",
 						ParentGroup: {},
 						PoseMapping: {
-							BackBoxTie: "BackBoxTie",
-							BackCuffs: "BackBoxTie",
-							BackElbowTouch: "BackBoxTie",
-							OverTheHead: "OverTheHead",
-							TapedHands: "BackBoxTie",
-							Yoked: "Yoked",
 							AllFours: PoseType.HIDE,
 							Hogtied: PoseType.HIDE,
 						},
@@ -5509,6 +5396,8 @@ var AssetFemale3DCG = [
 					{
 						Name: "BHog",
 						PoseMapping: {
+							BaseLower: PoseType.HIDE,
+							BaseUpper: PoseType.HIDE,
 							BackBoxTie: PoseType.HIDE,
 							BackCuffs: PoseType.HIDE,
 							BackElbowTouch: PoseType.HIDE,
@@ -5564,33 +5453,26 @@ var AssetFemale3DCG = [
 				Left: 125,
 				DefaultColor: ["#606060", "Default"],
 				PoseMapping: {
-					...AssetPoseMapping.Cloth
+					...AssetPoseMapping.Cloth,
+					BackBoxTie: "BackBoxTie",
+					BackCuffs: "BackBoxTie",
+					BackElbowTouch: "BackBoxTie",
+					OverTheHead: "OverTheHead",
+					TapedHands: "BackBoxTie",
+					Yoked: "Yoked",
+					AllFours: "AllFours",
+					Hogtied: "Hogtied",
 				},
+				InheritPoseMappingFields: true,
 				Layer: [
 					{
 						Name: "Vest",
-						PoseMapping: {
-							BackBoxTie: "BackBoxTie",
-							BackCuffs: "BackBoxTie",
-							BackElbowTouch: "BackBoxTie",
-							OverTheHead: "OverTheHead",
-							TapedHands: "BackBoxTie",
-							Yoked: "Yoked",
-							AllFours: "AllFours",
-							Hogtied: "Hogtied",
-						},
 						AllowColorize: true,
 					},
 					{
 						Name: "Buttons",
 						ParentGroup: {},
 						PoseMapping: {
-							BackBoxTie: "BackBoxTie",
-							BackCuffs: "BackBoxTie",
-							BackElbowTouch: "BackBoxTie",
-							OverTheHead: "OverTheHead",
-							TapedHands: "BackBoxTie",
-							Yoked: "BackBoxTie",
 							AllFours: PoseType.HIDE,
 							Hogtied: PoseType.HIDE,
 						},
@@ -5600,6 +5482,8 @@ var AssetFemale3DCG = [
 						Name: "BHog",
 						ParentGroup: {},
 						PoseMapping: {
+							BaseLower: PoseType.HIDE,
+							BaseUpper: PoseType.HIDE,
 							BackBoxTie: PoseType.HIDE,
 							BackCuffs: PoseType.HIDE,
 							BackElbowTouch: PoseType.HIDE,
@@ -10889,12 +10773,12 @@ var AssetFemale3DCG = [
 				Left: 75,
 				Random: true,
 				Extended: true,
-				DefaultColor: ["#F2AADC","#F2AADC"],
+				DefaultColor: ["#F2AADC", "#F2AADC"],
 				PoseMapping: {
-							...AssetPoseMapping.Garters,
-							Hogtied: PoseType.HIDE,
-							AllFours: PoseType.HIDE,
-						},
+					...AssetPoseMapping.Garters,
+					Hogtied: PoseType.HIDE,
+					AllFours: PoseType.HIDE,
+				},
 				Layer: [
 					{
 						Name: "GarterR",
@@ -28378,13 +28262,7 @@ var AssetFemale3DCG = [
 				AllowTighten: true,
 				DrawLocks: false,
 				Audio: "MetalClose",
-				DefaultColor: [
-					"#AAB7B9",
-					"#707070",
-					"#AAB7B9",
-					"#AAB7B9",
-					"#A89B80",
-				],
+				DefaultColor: ["#AAB7B9", "#707070", "#AAB7B9", "#AAB7B9", "#A89B80"],
 				Layer: [
 					{
 						Name: "Belt",
@@ -29461,13 +29339,7 @@ var AssetFemale3DCG = [
 				AllowTighten: true,
 				DrawLocks: false,
 				Audio: "MetalClose",
-				DefaultColor: [
-					"#AAB7B9",
-					"#707070",
-					"#AAB7B9",
-					"#AAB7B9",
-					"#A89B80",
-				],
+				DefaultColor: ["#AAB7B9", "#707070", "#AAB7B9", "#AAB7B9", "#A89B80"],
 				Layer: [
 					{
 						Name: "Belt",
@@ -34883,13 +34755,7 @@ var AssetFemale3DCG = [
 				AllowTighten: true,
 				DrawLocks: false,
 				Audio: "MetalClose",
-				DefaultColor: [
-					"#AAB7B9",
-					"#707070",
-					"#AAB7B9",
-					"#AAB7B9",
-					"#A89B80",
-				],
+				DefaultColor: ["#AAB7B9", "#707070", "#AAB7B9", "#AAB7B9", "#A89B80"],
 				Layer: [
 					{
 						Name: "Belt",
@@ -51657,7 +51523,7 @@ var AssetFemale3DCG = [
 				AllowLock: true,
 				DrawLocks: false,
 				Extended: true,
-				Audio: "MetalClose", 
+				Audio: "MetalClose",
 				DefaultColor: ["#808D90", "#819F9F", "#8E8D89", "#808D90", "#877C66"],
 				Hide: ["Glasses", "Jewelry"],
 				Block: [
diff --git a/BondageClub/Assets/Female3DCG/Female3DCGExtended.js b/BondageClub/Assets/Female3DCG/Female3DCGExtended.js
index 700e907d06..ef2b621db6 100644
--- a/BondageClub/Assets/Female3DCG/Female3DCGExtended.js
+++ b/BondageClub/Assets/Female3DCG/Female3DCGExtended.js
@@ -4667,9 +4667,9 @@ var AssetFemale3DCGExtended = {
 					Name: "Handcuffs",
 					Key: "h",
 					Options: [
-						{ 
+						{
 							// None
-							Property: {}
+							Property: {},
 						},
 						{
 							// Front
@@ -9741,7 +9741,7 @@ var AssetFemale3DCGExtended = {
 						},
 						{
 							// Neck cuff
-							Property: {Difficulty: 30},
+							Property: { Difficulty: 30 },
 						},
 					],
 				},
@@ -12781,9 +12781,9 @@ var AssetFemale3DCGExtended = {
 					Name: "Handcuffs",
 					Key: "h",
 					Options: [
-						{ 
+						{
 							// None
-							Property: {}
+							Property: {},
 						},
 						{
 							// Front
diff --git a/BondageClub/Screens/Character/Relog/Relog.js b/BondageClub/Screens/Character/Relog/Relog.js
index ea633f3cfc..67494d25bc 100644
--- a/BondageClub/Screens/Character/Relog/Relog.js
+++ b/BondageClub/Screens/Character/Relog/Relog.js
@@ -107,6 +107,5 @@ function RelogKeyDown(event) {
  * @type {ScreenFunctions["Exit"]}
  */
 function RelogExit() {
-	// eslint-disable-next-line no-self-assign
-	window.location = window.location;
+	window.location.reload();
 }
diff --git a/BondageClub/Screens/Room/AsylumBedroom/AsylumBedroom.js b/BondageClub/Screens/Room/AsylumBedroom/AsylumBedroom.js
index 76e5870c34..86483d26a6 100644
--- a/BondageClub/Screens/Room/AsylumBedroom/AsylumBedroom.js
+++ b/BondageClub/Screens/Room/AsylumBedroom/AsylumBedroom.js
@@ -46,6 +46,7 @@ function AsylumBedroomClick() {
 	if (MouseIn(750, 0, 500, 1000)) CharacterSetCurrent(Player);
 	if (MouseIn(1885, 25, 90, 90) && (LogValue("Isolated", "Asylum") < CurrentTime) && Player.CanWalk()) CommonSetScreen("Room", "AsylumEntrance");
 	if (MouseIn(1885, 145, 90, 90)) InformationSheetLoadCharacter(Player);
-	// eslint-disable-next-line no-self-assign
-	if (MouseIn(1885, 265, 90, 90) && ((LogValue("Committed", "Asylum") >= CurrentTime) || (LogValue("Isolated", "Asylum") >= CurrentTime))) window.location = window.location;
+	if (MouseIn(1885, 265, 90, 90) && ((LogValue("Committed", "Asylum") >= CurrentTime) || (LogValue("Isolated", "Asylum") >= CurrentTime))) {
+		window.location.reload();
+	}
 }
diff --git a/BondageClub/Screens/Room/MainHall/MainHall.js b/BondageClub/Screens/Room/MainHall/MainHall.js
index ed4b62db5e..e0939070ec 100644
--- a/BondageClub/Screens/Room/MainHall/MainHall.js
+++ b/BondageClub/Screens/Room/MainHall/MainHall.js
@@ -463,8 +463,7 @@ function MainHallClick() {
 	if ((MouseX >= 1885) && (MouseX < 1975) && (MouseY >= 25) && (MouseY < 115)) {
 		if (window.confirm(TextGet("ExitConfirm"))) {
 			ServerAccountUpdate.SyncToServer();
-			// eslint-disable-next-line no-self-assign
-			window.location = window.location;
+			window.location.reload();
 		}
 	}
 
diff --git a/BondageClub/Scripts/Typedef.d.ts b/BondageClub/Scripts/Typedef.d.ts
index 524a759954..e05ff62f18 100644
--- a/BondageClub/Scripts/Typedef.d.ts
+++ b/BondageClub/Scripts/Typedef.d.ts
@@ -4386,7 +4386,7 @@ interface PreferenceExtensionsSettingItem {
 	 * Called when the extension screen is about to exit.
 	 *
 	 * Happens either through a click of the exit button, or the ESC key.
-	 * This will **not** be called if a disconnect happens, so clean up should be 
+	 * This will **not** be called if a disconnect happens, so clean up should be
 	 * done in {@link PreferenceExtensionsSettingItem.unload}.
 	 *
 	 * @returns {boolean | void} If you have some validation that needs to happen