diff --git a/src/markets/specificMarkets/customSlaveMarket.js b/src/markets/specificMarkets/customSlaveMarket.js
index b1a887b4b5cc385bdb1823c9ab81c4070740f2f7..9c83fae59bf7975883d074ff05cc2e38860936f9 100644
--- a/src/markets/specificMarkets/customSlaveMarket.js
+++ b/src/markets/specificMarkets/customSlaveMarket.js
@@ -8,11 +8,19 @@ App.Markets["Custom Slave"] = function() {
 	el.append(muscles());
 	el.append(lips());
 	el.append(voice());
+	el.append(height());
+	el.append(weight());
+	el.append(face());
+	// Ethnicity
+	// Skin tone
+	el.append(boobs());
+	el.append(butt());
+	el.append(sex());
 
 	return el;
 
 	function intro() {
-		const {heA} = getPronouns(assistant.pronouns().main).appendSuffix('A');
+		const { heA } = getPronouns(assistant.pronouns().main).appendSuffix('A');
 		let r = [];
 		if (V.customSlaveOrdered === 0) {
 			r.push(`You work up a new slave order for posting where slave merchants can work to fulfill it.`);
@@ -36,19 +44,19 @@ App.Markets["Custom Slave"] = function() {
 		const select = document.createElement("select");
 		for (let i = 0; i < ages.length; i++) {
 			const high = ages[i];
-			const low = ages[i-1] || (ages[i] - 1); // First element of array has nothing before it, obviously, so display low as one less than high.
+			const low = ages[i - 1] || (ages[i] - 1); // First element of array has nothing before it, obviously, so display low as one less than high.
 			if (low < V.minimumSlaveAge) {
 				continue;
 			} else if (high > V.retirementAge) {
 				const option = document.createElement("option");
-				option.text = `${low+1}+`;
-				option.value = low+1;
+				option.text = `${low + 1}+`;
+				option.value = low + 1;
 				select.append(option);
 				break;
 			}
 
 			const option = document.createElement("option");
-			option.text = `${low+1}-${high}`;
+			option.text = `${low + 1}-${high}`;
 			option.value = high;
 			select.append(option);
 		}
@@ -64,13 +72,13 @@ App.Markets["Custom Slave"] = function() {
 			const highIndex = ages.indexOf(slave.age);
 
 			if (highIndex === 0) {
-				return `${(ages[highIndex]-1)}-${ages[highIndex]} years old. `;
+				return `${(ages[highIndex] - 1)}-${ages[highIndex]} years old. `;
 			} else if (highIndex === ages.length) {
 				// Highest possible number
 				return `${ages[highIndex]}+ years old. `;
 			} else {
 				// Lower age should be the previous number in the array, +1
-				return `${(ages[highIndex-1])+1}-${ages[highIndex]} years old. `;
+				return `${(ages[highIndex - 1]) + 1}-${ages[highIndex]} years old. `;
 			}
 		}
 	}
@@ -152,7 +160,7 @@ App.Markets["Custom Slave"] = function() {
 
 	function voice() {
 		const el = document.createElement("div");
-		const slaveProperty = "lips";
+		const slaveProperty = "voice";
 		const choices = new Map([
 			["3", "High, girly"],
 			["2", "Feminine"],
@@ -172,6 +180,33 @@ App.Markets["Custom Slave"] = function() {
 					} else {
 						return `${text} voice.`;
 					}
+				} else {
+					return `Voice is unimportant.`;
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function height() {
+		const el = document.createElement("div");
+		const slaveProperty = "heightMod";
+		const choices = new Map([
+			["greatly below average", "Petite"],
+			["below average", "Short"],
+			["normal", "Average height"],
+			["above average", "Tall"],
+			["greatly above average", "Very tall"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.heightMod === value) {
+					return `${text}.`;
 				}
 			}
 		}
@@ -179,6 +214,142 @@ App.Markets["Custom Slave"] = function() {
 		return el;
 	}
 
+	function weight() {
+		const el = document.createElement("div");
+		const slaveProperty = "weight";
+		const choices = new Map([
+			["200", "Immobile"],
+			["150", "Very Fat"],
+			["100", "Fat"],
+			["50", "Chubby"],
+			["15", "Plush"],
+			["0", "Average"],
+			["-15", "Thin"],
+			["-50", "Very thin"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.weight >= Number(value)) {
+					return `${text}.`;
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function face() {
+		const el = document.createElement("div");
+		const slaveProperty = "face";
+		const choices = new Map([
+			["55", "Very attractive"],
+			["15", "Attractive"],
+			["0", "Average"],
+			["-15", "Unattractive"],
+			["-55", "Very unattractive"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.face >= Number(value)) {
+					return `${text}.`;
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function sex() {
+		const el = document.createElement("div");
+		const slaveProperty = "sex";
+		const choices = new Map([
+			["3", "Both"],
+			["2", "Male"],
+			["1", "Female"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			switch (slave.sex) {
+				case 3:
+					return `Female (cock & balls options not applied).`;
+				case 2:
+					return `Male (pussy options not applied).`;
+				case 1:
+					return `Futanari (clit options not applied).`;
+			}
+		}
+
+		return el;
+	}
+
+	//TODO: function ethnicity
+
+	//TODO: function skinTone
+
+	function boobs() {
+		const el = document.createElement("div");
+		const slaveProperty = "boobs";
+		const choices = new Map([
+			["6000", "Massive"],
+			["2100", "Giant"],
+			["1400", "Huge"],
+			["800", "Big"],
+			["500", "Healthy"],
+			["200", "Flat"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.boobs >= Number(value)) {
+					if (slave.boobs <= 200) {
+						return `${text} chest.`;
+					} else {
+						return `${text} breasts.`;
+					}
+				}
+			}
+		}
+
+		return el;
+	}
+
+	function butt() {
+		const el = document.createElement("div");
+		const slaveProperty = "butt";
+		const choices = new Map([
+			["8", "Massive"],
+			["5", "Huge"],
+			["3", "Healthy"],
+			["1", "Flat"],
+		]);
+
+		createDescription(el, description, slaveProperty);
+		el.append(choicesMaker(slaveProperty, choices, description));
+
+		function description() {
+			for (const [value, text] of choices) {
+				if (slave.butt >= Number(value)) {
+					return `${text} buttocks.`;
+				}
+			}
+		}
+
+		return el;
+	}
 
 	/**
 	 *