diff --git a/js/003-data/miscData.js b/js/003-data/miscData.js
index a071438fa1403f2536a219f110f0b648822b0579..a6aaed2b23ca32d19fa697eb2138e92c9b2639e1 100644
--- a/js/003-data/miscData.js
+++ b/js/003-data/miscData.js
@@ -2404,7 +2404,14 @@ App.Data.misc = {
 		},
 		{
 			name: "Dildo",
-			value: "dildo"
+			value: "dildo",
+			unlock: function(slave) {
+				if (slave.vagina < 0) {
+					return false;
+				} else {
+					return true;
+				}
+			}
 		},
 		{
 			name: "Long dildo",
@@ -2413,7 +2420,9 @@ App.Data.misc = {
 			unlock: function(slave) {
 				if (V.buyBigDildos > 0) {
 					if (slave) {
-						if (!(slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) {
+						if (slave.vagina < 0) {
+							return false;
+						} else if (!(slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) {
 							return "Elites frown on this";
 						} else {
 							return true;
@@ -2426,7 +2435,14 @@ App.Data.misc = {
 		},
 		{
 			name: "Large dildo",
-			value: "large dildo"
+			value: "large dildo",
+			unlock: function(slave) {
+				if (slave.vagina < 0) {
+					return false;
+				} else {
+					return true;
+				}
+			}
 		},
 		{
 			name: "Long, large dildo",
@@ -2435,7 +2451,9 @@ App.Data.misc = {
 			unlock: function(slave) {
 				if (V.buyBigDildos > 0) {
 					if (slave) {
-						if (!(slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) {
+						if (slave.vagina < 0) {
+							return false;
+						} else if (!(slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) {
 							return "Elites frown on this";
 						} else {
 							return true;
@@ -2451,7 +2469,9 @@ App.Data.misc = {
 			value: "huge dildo",
 			unlock: function(slave) {
 				if (slave) {
-					if (slave.vagina < 2) {
+					if (slave.vagina < 0) {
+						return false;
+					} else if (slave.vagina < 2) {
 						return `Slave's vagina is too small for this right now`;
 					} else {
 						return true;
@@ -2468,7 +2488,9 @@ App.Data.misc = {
 			unlock: function(slave) {
 				if (V.buyBigDildos > 0) {
 					if (slave) {
-						if (!(slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) {
+						if (slave.vagina < 0) {
+							return false;
+						} else if (!(slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) {
 							return "Elites frown on this";
 						} else if (slave.vagina < 2) {
 							return `Slave's vagina is too small for this right now`;
@@ -2491,7 +2513,9 @@ App.Data.misc = {
 			unlock: function(slave) {
 				if (V.toysBoughtVaginalAttachments > 0) {
 					if (slave) {
-						if (slave.vaginalAccessory === "none") {
+						if (slave.vagina < 0) {
+							return false;
+						} else 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";
@@ -2503,12 +2527,45 @@ App.Data.misc = {
 					}
 				}
 			}
-
 		}
 	],
 
 	dickAccessories: [
-		{name: "None", value: "none"}
+		{name: "None", value: "none"},
+		{
+			name: "Bullet vibrator",
+			value: "bullet vibrator",
+			unlock: function(slave) {
+				if (V.toysBoughtVaginalAttachments > 0) { // TODO: copying from old slave interact, is this correct?
+					if (slave) {
+						if (slave.dick < 1) {
+							return false;
+						} else {
+							return true;
+						}
+					} else {
+						return true;
+					}
+				}
+			}
+		},
+		{
+			name: "Smart bullet vibrator",
+			value: "smart bullet vibrator",
+			unlock: function(slave) {
+				if (V.toysBoughtVaginalAttachments > 0) { // TODO: copying from old slave interact, is this correct?
+					if (slave) {
+						if (slave.dick < 1) {
+							return false;
+						} else {
+							return true;
+						}
+					} else {
+						return true;
+					}
+				}
+			}
+		}
 	],
 
 	buttplugs: [{
diff --git a/src/js/wardrobeUse.js b/src/js/wardrobeUse.js
index f4e8cf0ceae1550e25460306f43a8709eaaf451b..bbc20aa061ad5d6f5582e37fd0fbafd8a1b0ed3c 100644
--- a/src/js/wardrobeUse.js
+++ b/src/js/wardrobeUse.js
@@ -584,6 +584,64 @@ App.UI.Wardrobe.vaginalAttachment = function(slave) {
 	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.generateRows = function(array, category, slave, accessCheck=false) { // category should be in the form of slave.category, the thing we want to update.
@@ -673,52 +731,16 @@ App.UI.Wardrobe.refreshAll = function(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);
 	return;
 };
 
 /*
-
-	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>.''
diff --git a/src/uncategorized/slaveInteract.tw b/src/uncategorized/slaveInteract.tw
index 71e840b7b1ed1935e60f643dd0fa5da835f48d79..7fa7ac7c331e4361acabfa6ae3f3042735e53512 100644
--- a/src/uncategorized/slaveInteract.tw
+++ b/src/uncategorized/slaveInteract.tw
@@ -232,14 +232,8 @@
 	<</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>.''