diff --git a/src/004-base/facility.js b/src/004-base/facility.js
index e7ee3b917e044a04abc91478acc48fe6f5394748..164512d72f6428e295216beb99071e409f97174e 100644
--- a/src/004-base/facility.js
+++ b/src/004-base/facility.js
@@ -258,7 +258,11 @@ App.Entity.Facilities.ManagingJob = class extends App.Entity.Facilities.Job {
 
 	/** @returns {App.Entity.SlaveState} */
 	get currentEmployee() {
-		const obj = State.variables[capFirstChar(this.desc.position)];
+		let obj = slaveStateById(V[`${capFirstChar(this.desc.position)}ID`]);
+		// TODO Remove when all facility head migrate to IDs
+		if (!obj) {
+			obj = V[capFirstChar(this.desc.position)];
+		}
 		return obj === undefined || obj === 0 ? null : obj;
 	}
 
diff --git a/src/js/assignJS.js b/src/js/assignJS.js
index 3524622ddee6a712d65ca75f03c8accbcf0fa225..a9b182499f72a9f08cdc424732ff8d5029342599 100644
--- a/src/js/assignJS.js
+++ b/src/js/assignJS.js
@@ -22,13 +22,26 @@ globalThis.assignJob = function(slave, job) {
 	removeJob(slave, slave.assignment, true);
 	const idx = V.slaveIndices[slave.ID];
 
-	const uniqueJob = function(propName) {
-		// this helper makes sure global references ($HeadGirl, etc) are set correctly
-		if (V[propName] !== 0 && V[propName].ID !== slave.ID) {
-			removeJob(V[propName], job, true);
+	/**
+	 * this helper makes sure global references ($HeadGirl, etc) or global IDs ($AttendantID, etc) are set correctly
+	 * @param {string} propName
+	 */
+	function uniqueJob(propName) {
+		if (App.Data.defaultGameStateVariables.hasOwnProperty(propName)) {
+			// TODO remove this branch when all special slaves migrate to IDs
+			if (V[propName] !== 0 && V[propName].ID !== slave.ID) {
+				removeJob(V[propName], job, true);
+			}
+			V[propName] = slave;
+		} else {
+			const specialIDProp = `${propName}ID`;
+			const prevAssigneeID = V[specialIDProp];
+			if (prevAssigneeID !== slave.ID) {
+				removeJob(slaveStateById(prevAssigneeID), job, true);
+			}
+			V[specialIDProp] = slave.ID;
 		}
-		V[propName] = slave;
-	};
+	}
 
 	/* Tracking for the following cases: */
 	if (oldJob !== job && V.assignmentRecords[slave.ID] !== job && oldJob !== "rest") { // Check that there is a real change happening. Sometimes when you send someone to a classroom or something, this fires twice.