diff --git a/src/npc/descriptions/career.js b/src/npc/descriptions/career.js
new file mode 100644
index 0000000000000000000000000000000000000000..2224b10e803cfc7909255ea961b0094ea112afd1
--- /dev/null
+++ b/src/npc/descriptions/career.js
@@ -0,0 +1,209 @@
+/**
+ * @param {App.Entity.SlaveState} slave
+ * @returns {string}
+ */
+App.Desc.career = function(slave) {
+	const r = [];
+	const careersArray = [];
+	const {
+		he, him, his, hers, himself, boy, He, His
+	} = getPronouns(slave);
+	const career = convertCareer(slave);
+
+	if (slave.fuckdoll === 0) {
+		if (slave.career !== 0) {
+			if (slave.career === "a slave") {
+				r.push(`${He} was a slave long before you obtained ${him}.`);
+			} else if (slave.career === "a slave since birth") {
+				r.push(`${He}'s been your slave ${his} entire life.`);
+			} else if (slave.career === "a meat toilet" || slave.career === "a cum dump") {
+				r.push(`${He} sees ${him}self as a cum receptacle.`);
+			} else if (slave.career === "a dairy cow") {
+				r.push(`${He}'s been broken into the belief that ${he} is nothing more than a cow to be milked and bred.`);
+			} else if (slave.career === "a breeding bull") {
+				r.push(`${He}'s been broken into the belief that ${he} is nothing more than a bull destined to fill fertile wombs with calves.`);
+			} else if (slave.career === "a breeder") {
+				r.push(`Before you obtained ${him}, ${he} was a breeding slave.`);
+			} else if (slave.career === "a bioreactor") {
+				r.push(`${He} has spent time as a cow in an industrial dairy, an experience that marked ${him} deeply.`);
+			} else {
+				r.push(`Before ${he} was a slave, ${he} was`);
+				if (setup.bodyguardCareers.includes(slave.career)) {
+					r.push(`${career}, giving ${him} potential as a Bodyguard.`);
+				} else if (setup.wardenessCareers.includes(slave.career)) {
+					r.push(`${career}, giving ${him} potential as a Wardeness for`);
+					if (V.cellblock === 0) {
+						r.push(`a Cellblock.`);
+					} else {
+						r.push(`${V.cellblockName}.`);
+					}
+				} else if (setup.attendantCareers.includes(slave.career)) {
+					r.push(`${career}, giving ${him} potential as an Attendant for`);
+					if (V.spa === 0) {
+						r.push(`a Spa.`);
+					} else {
+						r.push(`${V.spaName}.`);
+					}
+				} else if (setup.matronCareers.includes(slave.career)) {
+					r.push(`${career}, giving ${him} potential as a Matron for`);
+					if (V.nursery === 0 && V.nurseryNannies === 0) {
+						r.push(`a Nursery.`);
+					} else {
+						r.push(`${V.nurseryName}.`);
+					}
+				} else if (setup.nurseCareers.includes(slave.career)) {
+					r.push(`${career}, giving ${him} potential as a Nurse for`);
+					if (V.clinic === 0) {
+						r.push(`a Clinic.`);
+					} else {
+						r.push(`${V.clinicName}.`);
+					}
+				} else if (setup.schoolteacherCareers.includes(slave.career)) {
+					r.push(`${career}, giving ${him} potential as a Schoolteacher for`);
+					if (V.schoolroom === 0) {
+						r.push(`a Schoolroom.`);
+					} else {
+						r.push(`${V.schoolroomName}.`);
+					}
+				} else if (setup.stewardessCareers.includes(slave.career)) {
+					r.push(`${career}, giving ${him} potential as a Stewardess for`);
+					if (V.servantsQuarters === 0) {
+						r.push(`a Servant's Quarters.`);
+					} else {
+						r.push(`${V.servantsQuartersName}.`);
+					}
+				} else if (setup.milkmaidCareers.includes(slave.career)) {
+					r.push(`${career}, giving ${him} potential as a Milkmaid for`);
+					if (V.dairy === 0) {
+						r.push(`a Dairy.`);
+					} else {
+						r.push(`${V.dairyName}.`);
+					}
+				} else if (setup.farmerCareers.includes(slave.career)) {
+					r.push(`${career}, giving ${him} potential as a Farmer for`);
+					if (V.farmyard === 0) {
+						r.push(`a Farmyard.`);
+					} else {
+						r.push(`${V.farmyardName}.`);
+					}
+				} else if (setup.madamCareers.includes(slave.career)) {
+					r.push(`${career}, giving ${him} potential as a Madam for`);
+					if (V.brothel === 0) {
+						r.push(`a Brothel.`);
+					} else {
+						r.push(`${V.brothelName}.`);
+					}
+				} else if (setup.DJCareers.includes(slave.career)) {
+					r.push(`${career}, giving ${him} potential as a DJ for`);
+					if (V.club === 0) {
+						r.push(`a Club.`);
+					} else {
+						r.push(`${V.clubName}.`);
+					}
+				} else if (setup.HGCareers.includes(slave.career)) {
+					r.push(`${career}, giving ${him} potential as a Head Girl.`);
+				} else if (setup.recruiterCareers.includes(slave.career)) {
+					r.push(`${career}, giving ${him} potential as a recruiter.`);
+				} else if (setup.entertainmentCareers.includes(slave.career)) {
+					r.push(`${career}, giving ${him} a slight edge at entertainment.`);
+				} else if (setup.whoreCareers.includes(slave.career)) {
+					r.push(`${career}, giving ${him} a slight edge at sexual commerce.`);
+				} else if (setup.gratefulCareers.includes(slave.career)) {
+					r.push(`${career}, so ${he} can remember what it's like`);
+					if (slave.career === "prisoner") {
+						r.push(`no one looking out for you.`);
+					} else {
+						r.push(`to have the freedom to starve.`);
+					}
+				} else if (setup.menialCareers.includes(slave.career)) {
+					r.push(`${career}, giving ${him} experience following orders.`);
+				} else if (setup.servantCareers.includes(slave.career)) {
+					r.push(`${career}, giving ${him} a slight edge in housekeeping.`);
+				} else {
+					r.push(`${career}.`);
+				}
+			}
+		}
+		if (V.week - slave.weekAcquired >= 20 && slave.skill.entertainment >= 100) {
+			if (!setup.entertainmentCareers.includes(slave.career)) {
+				r.push(`${He} has gotten enough experience to be as charismatic as any professional`);
+				if (slave.counter.oral + slave.counter.anal + slave.counter.vaginal + slave.counter.mammary + slave.counter.penetrative > 1000) {
+					r.push(`entertainer, and has been fucked so many times that a free sex worker could teach ${him} nothing.`);
+				} else {
+					r.push(`entertainer.`);
+				}
+			}
+		} else if ((slave.counter.oral + slave.counter.anal + slave.counter.vaginal + slave.counter.mammary + slave.counter.penetrative > 1000)) {
+			if (!setup.whoreCareers.includes(slave.career)) {
+				r.push(`${He} has been fucked so many times that a free sex worker could teach ${him} nothing.`);
+			}
+		}
+	}
+
+
+	if (slave.skill.headGirl >= V.masteredXP) {
+		careersArray.push("Head Girl");
+	}
+	if (slave.skill.recruiter >= V.masteredXP) {
+		careersArray.push("Recruiter");
+	}
+	if (slave.skill.bodyguard >= V.masteredXP) {
+		careersArray.push("Bodyguard");
+	}
+	if (slave.skill.madam >= V.masteredXP) {
+		careersArray.push("Madam");
+	}
+	if (slave.skill.DJ >= V.masteredXP) {
+		careersArray.push("DJ");
+	}
+	if (slave.skill.nurse >= V.masteredXP) {
+		careersArray.push("Nurse");
+	}
+	if (slave.skill.teacher >= V.masteredXP) {
+		careersArray.push("Schoolteacher");
+	}
+	if (slave.skill.attendant >= V.masteredXP) {
+		careersArray.push("Attendant");
+	}
+	if (slave.skill.matron >= V.masteredXP) {
+		careersArray.push("Matron");
+	}
+	if (slave.skill.stewardess >= V.masteredXP) {
+		careersArray.push("Stewardess");
+	}
+	if (slave.skill.milkmaid >= V.masteredXP) {
+		careersArray.push("Milkmaid");
+	}
+	if (slave.skill.farmer >= V.masteredXP) {
+		careersArray.push("Farmer");
+	}
+	if (slave.skill.wardeness >= V.masteredXP) {
+		careersArray.push("Wardeness");
+	}
+	if (slave.skill.servant >= V.masteredXP) {
+		careersArray.push("Servant");
+	}
+	if (slave.skill.entertainer >= V.masteredXP) {
+		careersArray.push("Entertainer");
+	}
+	if (slave.skill.whore >= V.masteredXP) {
+		careersArray.push("Whore");
+	}
+	if (careersArray.length > 0) {
+		r.push(`${He} has working experience as a`);
+		if (careersArray.length > 2) {
+			for (let j = 0; j < careersArray.length; j++) {
+				if (j < careersArray.length - 1) {
+					r.push(`${careersArray[j]},`);
+				} else {
+					r.push(`and ${careersArray[j]}.`);
+				}
+			}
+		} else if (careersArray.length > 1) {
+			r.push(`${careersArray[1]} and ${careersArray[0]}.`);
+		} else {
+			r.push(`${careersArray[0]}.`);
+		}
+	}
+	return r.join(" ");
+};
diff --git a/src/uncategorized/longSlaveDescription.tw b/src/uncategorized/longSlaveDescription.tw
index a6ca37ef333f52cf95cf7631bf651eccab3e6221..75fea3a756d7564cad0d2736d6fb01009f7641d0 100644
--- a/src/uncategorized/longSlaveDescription.tw
+++ b/src/uncategorized/longSlaveDescription.tw
@@ -433,141 +433,7 @@ is
 	<</if>>
 <</if>>
 
-<<if $activeSlave.fuckdoll == 0>>
-	<<if $activeSlave.career != 0>>
-		<<if $activeSlave.career == "a slave">>
-			$He was a slave long before you obtained $him.
-		<<elseif $activeSlave.career == "a slave since birth">>
-			$He's been your slave $his entire life.
-		<<elseif $activeSlave.career == "a meat toilet" || $activeSlave.career == "a cum dump">>
-			$He sees $himself as a cum receptacle.
-		<<elseif $activeSlave.career == "a dairy cow">>
-			$He's been broken into the belief that $he is nothing more than a cow to be milked and bred.
-		<<elseif $activeSlave.career == "a breeding bull">>
-			$He's been broken into the belief that $he is nothing more than a bull destined to fill fertile wombs with calves.
-		<<elseif $activeSlave.career == "a breeder">>
-			Before you obtained $him, $he was a breeding slave.
-		<<elseif $activeSlave.career == "a bioreactor">>
-			$He has spent time as a cow in an industrial dairy, an experience that marked $him deeply.
-		<<else>>
-			Before $he was a slave, $he was
-			<<if setup.bodyguardCareers.includes($activeSlave.career)>>
-				<<= convertCareer($activeSlave)>>, giving $him potential as a Bodyguard.
-			<<elseif setup.wardenessCareers.includes($activeSlave.career)>>
-				<<= convertCareer($activeSlave)>>, giving $him potential as a Wardeness for <<if $cellblock == 0>>a Cellblock<<else>>$cellblockName<</if>>.
-			<<elseif setup.attendantCareers.includes($activeSlave.career)>>
-				<<= convertCareer($activeSlave)>>, giving $him potential as an Attendant for <<if $spa == 0>>a Spa<<else>>$spaName<</if>>.
-			<<elseif setup.matronCareers.includes($activeSlave.career)>>
-				<<= convertCareer($activeSlave)>>, giving $him potential as a Matron for <<if $nursery == 0 && $nurseryNannies == 0>>a Nursery<<else>>$nurseryName<</if>>.
-			<<elseif setup.nurseCareers.includes($activeSlave.career)>>
-				<<= convertCareer($activeSlave)>>, giving $him potential as a Nurse for <<if $clinic == 0>>a Clinic<<else>>$clinicName<</if>>.
-			<<elseif setup.schoolteacherCareers.includes($activeSlave.career)>>
-				<<= convertCareer($activeSlave)>>, giving $him potential as a Schoolteacher for <<if $schoolroom == 0>>a Schoolroom<<else>>$schoolroomName<</if>>.
-			<<elseif setup.stewardessCareers.includes($activeSlave.career)>>
-				<<= convertCareer($activeSlave)>>, giving $him potential as a Stewardess for <<if $servantsQuarters == 0>>a Servant's Quarters<<else>>$servantsQuartersName<</if>>.
-			<<elseif setup.milkmaidCareers.includes($activeSlave.career)>>
-				<<= convertCareer($activeSlave)>>, giving $him potential as a Milkmaid for <<if $dairy == 0>>a Dairy<<else>>$dairyName<</if>>.
-			<<elseif setup.farmerCareers.includes($activeSlave.career)>>
-				<<= convertCareer($activeSlave)>>, giving $him potential as a Farmer for <<if $farmyard == 0>>a Farmyard<<else>>$farmyardName<</if>>.
-			<<elseif setup.madamCareers.includes($activeSlave.career)>>
-				<<= convertCareer($activeSlave)>>, giving $him potential as a Madam for <<if $brothel == 0>>a Brothel<<else>>$brothelName<</if>>.
-			<<elseif setup.DJCareers.includes($activeSlave.career)>>
-				<<= convertCareer($activeSlave)>>, giving $him potential as a DJ for <<if $club == 0>>a Club<<else>>$clubName<</if>>.
-			<<elseif setup.HGCareers.includes($activeSlave.career)>>
-				<<= convertCareer($activeSlave)>>, giving $him potential as a Head Girl.
-			<<elseif setup.recruiterCareers.includes($activeSlave.career)>>
-				<<= convertCareer($activeSlave)>>, giving $him potential as a recruiter.
-			<<elseif setup.entertainmentCareers.includes($activeSlave.career)>>
-				<<= convertCareer($activeSlave)>>, giving $him a slight edge at entertainment.
-			<<elseif setup.whoreCareers.includes($activeSlave.career)>>
-				<<= convertCareer($activeSlave)>>, giving $him a slight edge at sexual commerce.
-			<<elseif setup.gratefulCareers.includes($activeSlave.career)>>
-				<<= convertCareer($activeSlave)>>, so $he can remember what it's like <<if $activeSlave.career == "prisoner">>no one looking out for you<<else>>to have the freedom to starve<</if>>.
-			<<elseif setup.menialCareers.includes($activeSlave.career)>>
-				<<= convertCareer($activeSlave)>>, giving $him experience following orders.
-			<<elseif setup.servantCareers.includes($activeSlave.career)>>
-				<<= convertCareer($activeSlave)>>, giving $him a slight edge in housekeeping.
-			<<else>>
-				<<= convertCareer($activeSlave)>>.
-			<</if>>
-		<</if>>
-	<</if>>
-	<<if ($week-$activeSlave.weekAcquired >= 20) && ($activeSlave.skill.entertainment >= 100)>>
-		<<if setup.entertainmentCareers.includes($activeSlave.career)>><<else>>
-			$He has gotten enough experience to be as charismatic as any professional entertainer<<if ($activeSlave.counter.oral + $activeSlave.counter.anal + $activeSlave.counter.vaginal + $activeSlave.counter.mammary + $activeSlave.counter.penetrative > 1000)>>, and has been fucked so many times that a free sex worker could teach $him nothing<</if>>.
-		<</if>>
-	<<elseif ($activeSlave.counter.oral + $activeSlave.counter.anal + $activeSlave.counter.vaginal + $activeSlave.counter.mammary + $activeSlave.counter.penetrative > 1000)>>
-		<<if setup.whoreCareers.includes($activeSlave.career)>><<else>>
-			$He has been fucked so many times that a free sex worker could teach $him nothing.
-		<</if>>
-	<</if>>
-<</if>>
-
-<<set _careers = []>>
-<<if ($activeSlave.skill.headGirl >= $masteredXP)>>
-	<<set _careers.push("Head Girl")>>
-<</if>>
-<<if ($activeSlave.skill.recruiter >= $masteredXP)>>
-	<<set _careers.push("Recruiter")>>
-<</if>>
-<<if ($activeSlave.skill.bodyguard >= $masteredXP)>>
-	<<set _careers.push("Bodyguard")>>
-<</if>>
-<<if ($activeSlave.skill.madam >= $masteredXP)>>
-	<<set _careers.push("Madam")>>
-<</if>>
-<<if ($activeSlave.skill.DJ >= $masteredXP)>>
-	<<set _careers.push("DJ")>>
-<</if>>
-<<if ($activeSlave.skill.nurse >= $masteredXP)>>
-	<<set _careers.push("Nurse")>>
-<</if>>
-<<if ($activeSlave.skill.teacher >= $masteredXP)>>
-	<<set _careers.push("Schoolteacher")>>
-<</if>>
-<<if ($activeSlave.skill.attendant >= $masteredXP)>>
-	<<set _careers.push("Attendant")>>
-<</if>>
-<<if ($activeSlave.skill.matron >= $masteredXP)>>
-	<<set _careers.push("Matron")>>
-<</if>>
-<<if ($activeSlave.skill.stewardess >= $masteredXP)>>
-	<<set _careers.push("Stewardess")>>
-<</if>>
-<<if ($activeSlave.skill.milkmaid >= $masteredXP)>>
-	<<set _careers.push("Milkmaid")>>
-<</if>>
-<<if ($activeSlave.skill.farmer >= $masteredXP)>>
-	<<set _careers.push("Farmer")>>
-<</if>>
-<<if ($activeSlave.skill.wardeness >= $masteredXP)>>
-	<<set _careers.push("Wardeness")>>
-<</if>>
-<<if ($activeSlave.skill.servant >= $masteredXP)>>
-	<<set _careers.push("Servant")>>
-<</if>>
-<<if ($activeSlave.skill.entertainer >= $masteredXP)>>
-	<<set _careers.push("Entertainer")>>
-<</if>>
-<<if ($activeSlave.skill.whore >= $masteredXP)>>
-	<<set _careers.push("Whore")>>
-<</if>>
-<<if _careers.length > 0>>
-	$He has working experience as a
-	<<if _careers.length > 2>>
-		<<for _j = 0; _j < _careers.length; _j++>>
-			<<if _j < _careers.length-1>>
-				<<print _careers[_j]>>,
-			<<else>>
-				and <<print _careers[_j]>>.
-			<</if>>
-		<</for>>
-	<<elseif _careers.length > 1>>
-		_careers[1] and <<print _careers[0]>>.
-	<<else>>
-		<<print _careers[0]>>.
-	<</if>>
-<</if>>
+<<= App.Desc.career($activeSlave)>>
 
 <<if $activeSlave.prestige > 0>>
 	<<if $activeSlave.prestigeDesc>>$activeSlave.prestigeDesc<</if>>