diff --git a/src/004-base/facility.js b/src/004-base/facility.js
index 1298e01d2001f7ef8cc026f1952a01b00120c284..047d6f8f3b46bd67a79c57a827eb4bf027f4d386 100644
--- a/src/004-base/facility.js
+++ b/src/004-base/facility.js
@@ -106,6 +106,7 @@ App.Entity.Facilities.Job = class {
 
 	/**
 	 * @callback assignmentCallback
+	 * @param {App.Entity.SlaveState} slave the slave whose assignment changes
 	 * @param {string} assignment new assignment
 	 * @returns {void}
 	 */
@@ -524,6 +525,29 @@ App.Entity.Facilities.FacilitySingleJob = class extends App.Entity.Facilities.Jo
 		return `<<link "${linkText}" "Assign">><<set $assignTo = "${this.facility.genericName}", $i = ${i}${psg}>>${linkAction}<</link>>`;
 	}
 
+	/**
+	 * @param {number} i slave index
+	 * @param {string} [targetPassage] passage to go to
+	 * @param {assignmentCallback} [callback]
+	 * @param {string} [linkText]
+	 * @returns {HTMLAnchorElement}
+	 */
+	assignmentLinkElement(i, targetPassage, callback, linkText) {
+		linkText = linkText || this.desc.position;
+		return App.UI.DOM.assignmentLink(State.variables.slaves[i], this.desc.assignment, "Assign",
+			(slave, assignment) => {
+				if (callback) {
+					callback(slave, assignment);
+				}
+				// Set up environment for the "Assign" passage
+				const V = State.variables;
+				V.i = V.slaveIndices[slave.ID];
+				V.activeSlave = slave;
+				V.assignTo = this.facility.genericName;
+				V.returnTo = targetPassage ? targetPassage : passage();
+			}, linkText);
+	}
+
 	/** @returns {number[]} */
 	employeesIndices() {
 		const V = State.variables;
diff --git a/src/js/utilsDOM.js b/src/js/utilsDOM.js
index 094cd5751c84e2db12a32d47243c62faddeb3d1e..7e597d555194f4cccb4e376b41693432f2fad7dc 100644
--- a/src/js/utilsDOM.js
+++ b/src/js/utilsDOM.js
@@ -42,18 +42,19 @@ App.UI.DOM.passageLink = function(linkText, passage, handler, tooltip = '', elem
  * @param {App.Entity.SlaveState} slave
  * @param {string} assignment
  * @param {string} [passage] passage to go to
- * @param {assignmentCallback} [callback]
+ * @param {assignmentCallback} [action] action that changes slave state. The default one is a call to assignJob()
  * @param {string} [linkText]
  * @returns {HTMLAnchorElement}
  */
-App.UI.DOM.assignmentLink = function(slave, assignment, passage, callback, linkText) {
+App.UI.DOM.assignmentLink = function(slave, assignment, passage, action, linkText) {
 	let res = document.createElement("a");
 	res.textContent = linkText;
 	res.onclick = (e) => {
 		e.preventDefault();
-		assignJob(slave, assignment);
-		if (callback) {
-			callback(this.desc.assignment);
+		if (action) {
+			action(slave, assignment);
+		} else {
+			assignJob(slave, assignment);
 		}
 		if (passage !== '') {
 			SugarCube.Engine.play(passage);