diff --git a/src/endWeek/reports/cellblockReport.js b/src/endWeek/reports/cellblockReport.js
index 610c1e38100edc55f9ba88b9baba282bf5486022..1ed19b9469201145a2ca09a7fadca1b164a22df8 100644
--- a/src/endWeek/reports/cellblockReport.js
+++ b/src/endWeek/reports/cellblockReport.js
@@ -5,28 +5,32 @@ App.EndWeek.cellblockReport = function() {
 	const el = new DocumentFragment();
 	let r;
 
-	_slaves = App.Utils.sortedEmployees(App.Entity.facilities.cellblock);
-	_DL = _slaves.length, _SL = V.slaves.length, _brokenSlaves = 0, _idleBonus = 0, _softenedQuirks = 0, _trustMalus = 0, _FLsFetish = 0;
+	const slaves = App.Utils.sortedEmployees(App.Entity.facilities.cellblock);
+	const _DL = slaves.length;
+	let _brokenSlaves = 0, _idleBonus = 0, _softenedQuirks = 0, _trustMalus = 0, _FLsFetish = 0, _devBonus;
 
 	if (V.cellblockDecoration !== "standard") {
 		_devBonus = 1;
 	} else {
 		_devBonus = 0;
 	}
-	_cellblockNameCaps = capFirstChar(V.cellblockName);
-	V.flSex = App.EndWeek.getFLSex(App.Entity.facilities.cellblock);
-		r.push(` /* FIXME: should be local, passed as a parameter to saRules */`);
+	const _cellblockNameCaps = capFirstChar(V.cellblockName);
+	V.flSex = App.EndWeek.getFLSex(App.Entity.facilities.cellblock);/* FIXME: should be local, passed as a parameter to saRules */
 
 	if (S.Wardeness) {
-		<<setLocalPronouns S.Wardeness>>
+		const {
+			He, His,
+			he, his, him, wife
+		} = getPronouns(S.Wardeness);
+		r = [];
 
 		if (S.Wardeness.health.condition < -80) {
 			improveCondition(S.Wardeness, 20);
-		} else if ((S.Wardeness.health.condition < -40)) {
+		} else if (S.Wardeness.health.condition < -40) {
 			improveCondition(S.Wardeness, 15);
-		} else if ((S.Wardeness.health.condition < 0)) {
+		} else if (S.Wardeness.health.condition < 0) {
 			improveCondition(S.Wardeness, 10);
-		} else if ((S.Wardeness.health.condition < 90)) {
+		} else if (S.Wardeness.health.condition < 90) {
 			improveCondition(S.Wardeness, 7);
 		}
 		if (S.Wardeness.devotion <= 60) {
@@ -44,38 +48,49 @@ App.EndWeek.cellblockReport = function() {
 		}
 		if (S.Wardeness.fetishStrength <= 95) {
 			if (S.Wardeness.fetish !== "sadist") {
-				if (fetishChangeChance(S.Wardeness) > random(0,100)) {
-					_FLsFetish = 1, S.Wardeness.fetishKnown = 1, S.Wardeness.fetish = "sadist";
+				if (fetishChangeChance(S.Wardeness) > random(0, 100)) {
+					_FLsFetish = 1;
+					S.Wardeness.fetishKnown = 1;
+					S.Wardeness.fetish = "sadist";
 				}
 			} else if (S.Wardeness.fetishKnown === 0) {
-				_FLsFetish = 1, S.Wardeness.fetishKnown = 1;
+				_FLsFetish = 1;
+				S.Wardeness.fetishKnown = 1;
 			} else {
-				_FLsFetish = 2, S.Wardeness.fetishStrength += 4;
+				_FLsFetish = 2;
+				S.Wardeness.fetishStrength += 4;
 			}
 		}
-		if (S.Wardeness.energy > 95) || (S.Wardeness.fetish === "sadist") {
-			_devBonus++, _trustMalus++, _idleBonus++;
+		if (S.Wardeness.energy > 95 || S.Wardeness.fetish === "sadist") {
+			_devBonus++;
+			_trustMalus++;
+			_idleBonus++;
 		}
-		&nbsp;&nbsp;&nbsp;&nbsp;
-	V.SlaveFullName(S.Wardeness)
-		r.push(` is serving as the Wardeness.`);
+		// &nbsp;&nbsp;&nbsp;&nbsp;
+		r.push(`${SlaveFullName(S.Wardeness)} is serving as the Wardeness.`);
 		if (S.Wardeness.relationship === -3 && S.Wardeness.devotion > 50) {
-			_devBonus++, _trustMalus++, _idleBonus++;
-			r.push(`As your ${V.wife}, ${he} tries ${his} best to break the disobedient slaves to your will.`);
+			_devBonus++;
+			_trustMalus++;
+			_idleBonus++;
+			r.push(`As your ${wife}, ${he} tries ${his} best to break the disobedient slaves to your will.`);
 		}
 		if (_FLsFetish === 1) {
 			r.push(`One day ${he} demands obedience. The next day ${he} strikes a slave when it isn't given. The next, ${he} seems more excited than embarrassed when beating a prisoner. Soon, ${he}'s looking for an excuse to punish. ${He}'s <span class="pink">become more of a sadist.</span>`);
-		} else if ((_FLsFetish === 2)) {
+		} else if (_FLsFetish === 2) {
 			r.push(`Being not only allowed but encouraged to get off while punishing prisoners <span class="lightsalmon">deepens ${his} sadism.</span>`);
 		}
 		if (setup.wardenessCareers.includes(S.Wardeness.career)) {
-			_devBonus++, _trustMalus++, _idleBonus++;
+			_devBonus++;
+			_trustMalus++;
+			_idleBonus++;
 			r.push(`${He} has experience with detecting security issues and grinding down potential miscreants from ${his} life before ${he} was a slave, making ${him} more effective.`);
 		} else if (S.Wardeness.skill.wardeness >= V.masteredXP) {
-			_devBonus++, _trustMalus++, _idleBonus++;
+			_devBonus++;
+			_trustMalus++;
+			_idleBonus++;
 			r.push(`${He} has experience with detecting security issues and grinding down potential miscreants from working for you, making ${him} more effective.`);
 		} else {
-			S.Wardeness.skill.wardeness += random(1,Math.ceil((S.Wardeness.intelligence+S.Wardeness.intelligenceImplant)/15) + 8);
+			S.Wardeness.skill.wardeness += random(1, Math.ceil((S.Wardeness.intelligence + S.Wardeness.intelligenceImplant) / 15) + 8);
 		}
 		if (S.Wardeness.fetish === "sadist") {
 			r.push(`${He} uses the prisoners to gratify ${his} sadism, terrifying them and quickly breaking their resistance.`);
@@ -83,253 +98,260 @@ App.EndWeek.cellblockReport = function() {
 			r.push(`${He} is so sexually depraved that ${he} constantly molests the prisoners, breaking them to a life of servitude.`);
 		}
 		if (S.Wardeness.sexualFlaw === "malicious" || S.Wardeness.sexualFlaw === "abusive") {
-			_devBonus++, _trustMalus += 2, _idleBonus += 2;
+			_devBonus++;
+			_trustMalus += 2;
+			_idleBonus += 2;
 			r.push(`Sexual abuse of prisoners has become an end for ${him}, not a means. ${He} inspires ${his} prisoners to do everything possible to qualify to get away from ${him}, even as ${he} slowly grinds away their interest in sex to do it.`);
 		} else if (S.Wardeness.sexualQuirk === "caring") {
-			_devBonus--, _trustMalus--, _idleBonus--;
+			_devBonus--;
+			_trustMalus--;
+			_idleBonus--;
 			r.push(`${His} kindness sometimes shows through ${his} tough facade, letting prisoners get off easier than they should.`);
 		}
-		if (S.Wardeness.dick > 2) && (canPenetrate(S.Wardeness)) {
-			_devBonus++, _trustMalus++, _idleBonus++;
+		if (S.Wardeness.dick > 2 && canPenetrate(S.Wardeness)) {
+			_devBonus++;
+			_trustMalus++;
+			_idleBonus++;
 			r.push(`${His} molestation of the prisoners is more varied and effective because ${he} has a dick to fuck them with.`);
 		}
 		if (S.Wardeness.muscles > 35) {
-			_devBonus++, _trustMalus++, _idleBonus++;
+			_devBonus++;
+			_trustMalus++;
+			_idleBonus++;
 			r.push(`${He} is strong enough to restrain anyone that tries anything with ${his} own hands.`);
 		}
 		if (S.Wardeness.devotion > 95) {
-			_devBonus++, _trustMalus++, _idleBonus++;
+			_devBonus++;
+			_trustMalus++;
+			_idleBonus++;
 			r.push(`${His} devotion to you is so absolute that ${he} sees breaking bitches for your service as a noble calling.`);
 		}
-		<<for _slave range _slaves>>
-			if (S.Wardeness.rivalryTarget === _slave.ID) {
-				r.push(`${He} greatly enjoys breaking ${his} `);
-	V.rivalryTerm(S.Wardeness)
-		r.push(`,${  _${slave.slaveName}}'s will.`);
-				_slave.devotion++, _slave.trust -= 3;
-				if (random(1,100) > 30) {
-					S.Wardeness.rivalry++, _slave.rivalry++;
+		App.Events.addNode(el, r, "div", "indent");
+		for (const slave of slaves) {
+			r = [];
+			if (S.Wardeness.rivalryTarget === slave.ID) {
+				r.push(`${He} greatly enjoys breaking ${his} ${rivalryTerm(S.Wardeness)}, ${slave.slaveName}'s will.`);
+				slave.devotion++;
+				slave.trust -= 3;
+				if (random(1, 100) > 30) {
+					S.Wardeness.rivalry++;
+					slave.rivalry++;
 				}
-			} else if (S.Wardeness.relationshipTarget === _slave.ID) {
-				r.push(`${He} hates having to break ${his} `);
-	V.relationshipTerm(S.Wardeness)
-		r.push(`,${  _${slave.slaveName}}, but ${his} devotion to you wins out in the end.`);
-				_slave.devotion++, _slave.trust -= 3;
-				if (random(1,100) >= 50) {
-					r.push(`${His} and${  _${slave.slaveName}}'s relationship has been shattered by these events.`);
-					S.Wardeness.relationship = 0, S.Wardeness.relationshipTarget = 0 _slave.relationship = 0, _slave.relationshipTarget = 0;
+			} else if (S.Wardeness.relationshipTarget === slave.ID) {
+				r.push(`${He} hates having to break ${his} ${relationshipTerm(S.Wardeness)}, ${slave.slaveName}, but ${his} devotion to you wins out in the end.`);
+				slave.devotion++;
+				slave.trust -= 3;
+				if (random(1, 100) >= 50) {
+					r.push(`${His} and ${slave.slaveName}'s relationship has been shattered by these events.`);
+					S.Wardeness.relationship = 0;
+					S.Wardeness.relationshipTarget = 0;
+					slave.relationship = 0;
+					slave.relationshipTarget = 0;
 				}
-			} else if (areRelated(S.Wardeness, _slave)) {
-				<<setLocalPronouns _slave 2>>
-				r.push(`${He} shows ${his} `);
-	V.relativeTerm(S.Wardeness,_slave)
-		r.push(`${  _${slave.slaveName}} no mercy, making sure ${_he2} understands ${_his2} place.`);
-				_slave.devotion++, _slave.trust--;
+			} else if (areRelated(S.Wardeness, slave)) {
+				const {he2, his2} = getPronouns(slave).appendSuffix("2");
+				r.push(`${He} shows ${his} ${relativeTerm(S.Wardeness, slave)} ${slave.slaveName} no mercy, making sure ${he2} understands ${his2} place.`);
+				slave.devotion++;
+				slave.trust--;
 			}
-		<</for>>
+			App.Events.addNode(el, r, "div", "indent");
+		}
 		if (_DL < V.cellblock && !slaveResting(S.Wardeness)) {
-			_seed = random(1,10)+((V.cellblock-_DL)*(random(150,170)+(_idleBonus*10)));
+			const _seed = random(1, 10) + ((V.cellblock - _DL) * (random(150, 170) + (_idleBonus * 10)));
 			cashX(_seed, "cellblock", S.Wardeness);
-			<br>&nbsp;&nbsp;&nbsp;&nbsp;Since ${he} doesn't have enough prisoners to manage to keep ${him} busy, ${he} works on citizens' slaves, earning <span class="yellowgreen">
-	V.cashFormat(_seed)
-		r.push(`.</span>`);
+			App.Events.addNode(el, [`Since ${he} doesn't have enough prisoners to manage to keep ${him} busy, ${he} works on citizens' slaves, earning <span class="yellowgreen"> ${cashFormat(_seed)}.</span>`], "div", "indent");
 		}
-		if (_DL > 0) {<br><br>
-	}
 	}
 
 	if (_DL > 0) {
-		&nbsp;&nbsp;&nbsp;&nbsp;
-	if (_DL === 1) {''One slave is being confined in V.cellblockName until they are willing to obey.''
-	} else {''_DL slaves are being confined in V.cellblockName until they are willing to obey.''
-	}
+		if (_DL === 1) {
+			App.UI.DOM.appendNewElement("div", el, `One slave is being confined in ${V.cellblockName} until they are willing to obey.`, "indent");
+		} else {
+			App.UI.DOM.appendNewElement("div", el, `${_DL} slaves are being confined in ${V.cellblockName} until they are willing to obey.`, "indent");
+		}
 	}
 
+
 	if (S.Wardeness) {
-		V.i = V.slaveIndices[V.WardenessID];
-		r.push(` /* apply following SA passages to facility leader */`);
+		const slave = S.Wardeness;
+		/* apply following SA passages to facility leader */
 		if (V.showEWD !== 0) {
-			<br><br>
-			/* 000-250-006 */
+			const wardenessEntry = App.UI.DOM.appendNewElement("div", el, '', "slave-report");
 			if (V.seeImages && V.seeReportImages) {
-			<div class="imageRef tinyImg">
-				r.push(`${V.SlaveArt(${S.Wardeness}}, 0, 0)`);
-			</div>
+				App.UI.DOM.appendNewElement("div", wardenessEntry, App.Art.SlaveArtElement(slave, 0, 0), ["imageRef", "tinyImg"]);
 			}
-			/* 000-250-006 */
-			<<includeDOM App.EndWeek.favoriteIcon(slave)>>
-			<span class='slave-name'>
-	V.SlaveFullName(slave)</span> is serving as the Wardeness in V.cellblockName.
-			<br>&nbsp;&nbsp;&nbsp;&nbsp;
-			r.push(`${V.App.SlaveAssignment.choosesOwnClothes(slave)}`);
-			tired(slave);
-			<<includeDOM App.SlaveAssignment.rules(slave)>>
-			r.push(`${V.App.SlaveAssignment.diet(slave)}`);
-			<<includeDOM App.SlaveAssignment.longTermEffects(slave)>>
-			r.push(`${V.App.SlaveAssignment.drugs(slave)}`);
-			r.push(`${V.App.SlaveAssignment.relationships(slave)}`);
-			r.push(`${V.App.SlaveAssignment.rivalries(slave)}`);
-			<br>&nbsp;&nbsp;&nbsp;&nbsp;
-	V.App.SlaveAssignment.devotion(slave)
+			wardenessEntry.append(App.EndWeek.favoriteIcon(slave), " ");
+			App.Events.addNode(
+				wardenessEntry,
+				[
+					App.UI.DOM.makeElement("span", SlaveFullName(slave), "slave-name"),
+					`is serving as the Wardeness in ${V.cellblockName}`,
+					App.SlaveAssignment.standardSlaveReport(slave, false),
+				]
+			);
 		} else {
-			App.SlaveAssignment.choosesOwnClothes(slave);
-			tired(slave);
-			App.SlaveAssignment.rules(slave);
-			App.SlaveAssignment.diet(slave);
-			App.SlaveAssignment.longTermEffects(slave);
-			App.SlaveAssignment.drugs(slave);
-			App.SlaveAssignment.relationships(slave);
-			App.SlaveAssignment.rivalries(slave);
-			App.SlaveAssignment.devotion(slave);
+			App.SlaveAssignment.standardSlaveReport(slave, true);
 		}
 	}
 
-	<<for _slave range _slaves>>
-		V.i = V.slaveIndices[_slave.ID];
-		<<setLocalPronouns _slave>>
-		if (_slave.devotion <= 20) {
-			if (_slave.trust >= -20) {
-				if ((_slave.hears === -1 && _slave.earwear !== "hearing aids") || (_slave.hears === 0 && _slave.earwear === "muffling ear plugs") ||(_slave.hears === -2)) {
-					_slave.devotion -= 2, _slave.trust -= 2;
+	for (const slave of slaves) {
+		const {He} = getPronouns(slave);
+		if (slave.devotion <= 20) {
+			if (slave.trust >= -20) {
+				if (
+					(slave.hears === -1 && slave.earwear !== "hearing aids") ||
+					(slave.hears === 0 && slave.earwear === "muffling ear plugs") ||
+					(slave.hears === -2)
+				) {
+					slave.devotion -= 2;
+					slave.trust -= 2;
 				} else {
-					_slave.devotion -= 4, _slave.trust -= 4;
+					slave.devotion -= 4;
+					slave.trust -= 4;
 				}
 			} else {
-				_slave.devotion++;
+				slave.devotion++;
 			}
 		}
 		switch (V.cellblockDecoration) {
-		case "Paternalist":
-			_slave.rules.living = "normal";
-			if (_slave.inflation > 0) {
-				deflate(_slave);
-			}
-		case "Pastoralist":
-			_slave.rules.living = "spare";
-			if (_slave.inflation === 0) {
-				if (_slave.pregKnown === 0 && _slave.bellyImplant < 1500) {
-					_slave.inflation = 2, _slave.inflationType = "milk", _slave.inflationMethod = 1;
-				} else {
-					_slave.inflation = 1, _slave.inflationType = "milk", _slave.inflationMethod = 1;
+			case "Paternalist":
+				slave.rules.living = "normal";
+				if (slave.inflation > 0) {
+					deflate(slave);
 				}
-				SetBellySize(_slave);
-			}
-		case "Hedonistic":
-			_slave.rules.living = "spare";
-			if (_slave.weight < 200) {
-				if (_slave.weightDirection === 1) {
-					_slave.weight += 5;
-				} else if (_slave.weightDirection === -1) {
-					_slave.weight += 1;
-				} else {
-					_slave.weight += 3;
+				break;
+			case "Pastoralist":
+				slave.rules.living = "spare";
+				if (slave.inflation === 0) {
+					if (slave.pregKnown === 0 && slave.bellyImplant < 1500) {
+						slave.inflation = 2;
+						slave.inflationType = "milk";
+						slave.inflationMethod = 1;
+					} else {
+						slave.inflation = 1;
+						slave.inflationType = "milk";
+						slave.inflationMethod = 1;
+					}
+					SetBellySize(slave);
 				}
-			}
-			if (_slave.muscles > -100) {
-				_slave.muscles -= 2;
-			}
-			if (_slave.inflation === 0) {
-				if (_slave.pregKnown === 0 && _slave.bellyImplant < 1500) {
-					_slave.inflation = 3, _slave.inflationType = "food", _slave.inflationMethod = 1;
-				} else {
-					_slave.inflation = 1, _slave.inflationType = "food", _slave.inflationMethod = 1;
+				break;
+			case "Hedonistic":
+				slave.rules.living = "spare";
+				if (slave.weight < 200) {
+					if (slave.weightDirection === 1) {
+						slave.weight += 5;
+					} else if (slave.weightDirection === -1) {
+						slave.weight += 1;
+					} else {
+						slave.weight += 3;
+					}
+				}
+				if (slave.muscles > -100) {
+					slave.muscles -= 2;
+				}
+				if (slave.inflation === 0) {
+					if (slave.pregKnown === 0 && slave.bellyImplant < 1500) {
+						slave.inflation = 3;
+						slave.inflationType = "food";
+						slave.inflationMethod = 1;
+					} else {
+						slave.inflation = 1;
+						slave.inflationType = "food";
+						slave.inflationMethod = 1;
+					}
+					SetBellySize(slave);
+				}
+				break;
+			default:
+				slave.rules.living = "spare";
+				if (slave.inflation > 0) {
+					deflate(slave);
 				}
-				SetBellySize(_slave);
-			}
-		default:
-			_slave.rules.living = "spare";
-			if (_slave.inflation > 0) {
-				deflate(_slave);
-			}
 		}
 		if (V.cellblockUpgrade === 1) {
-			if (_slave.behavioralFlaw !== "none") && (_slave.behavioralQuirk === "none") {
-				SoftenBehavioralFlaw(_slave);
-				_slave.devotion -= 10, _softenedQuirks++;
-			} else if ((_slave.sexualFlaw !== "none") && (_slave.sexualQuirk === "none")) {
-				SoftenSexualFlaw(_slave);
-				_slave.devotion -= 10, _softenedQuirks++;
+			if (slave.behavioralFlaw !== "none" && slave.behavioralQuirk === "none") {
+				SoftenBehavioralFlaw(slave);
+				slave.devotion -= 10;
+				_softenedQuirks++;
+			} else if (slave.sexualFlaw !== "none" && slave.sexualQuirk === "none") {
+				SoftenSexualFlaw(slave);
+				slave.devotion -= 10;
+				_softenedQuirks++;
 			}
 		}
-		_slave.devotion += _devBonus, _slave.trust -= _trustMalus;
-		if (S.Wardeness) && (S.Wardeness.sexualFlaw === "malicious") && (_slave.energy >= 2) {
-			_slave.energy -= 2;
+		slave.devotion += _devBonus;
+		slave.trust -= _trustMalus;
+		if (S.Wardeness && S.Wardeness.sexualFlaw === "malicious" && slave.energy >= 2) {
+			slave.energy -= 2;
 		}
-		if (_slave.health.condition < -80) {
-			improveCondition(_slave, 20);
-		} else if ((_slave.health.condition < -40)) {
-			improveCondition(_slave, 15);
-		} else if ((_slave.health.condition < 0)) {
-			improveCondition(_slave, 10);
-		} else if ((_slave.health.condition < 40)) {
-			improveCondition(_slave, 7);
-		} else if ((_slave.health.condition < 100)) {
-			improveCondition(_slave, 3);
+		if (slave.health.condition < -80) {
+			improveCondition(slave, 20);
+		} else if (slave.health.condition < -40) {
+			improveCondition(slave, 15);
+		} else if (slave.health.condition < 0) {
+			improveCondition(slave, 10);
+		} else if (slave.health.condition < 40) {
+			improveCondition(slave, 7);
+		} else if (slave.health.condition < 100) {
+			improveCondition(slave, 3);
 		}
+
 		if (V.showEWD !== 0) {
-			<br><br>
-			/* 000-250-006 */
+			const slaveEntry = App.UI.DOM.appendNewElement("div", el, '', "slave-report");
 			if (V.seeImages && V.seeReportImages) {
-			<div class="imageRef tinyImg">
-				r.push(`${V.SlaveArt(_slave}, 0, 0)`);
-			</div>
+				App.UI.DOM.appendNewElement("div", slaveEntry, App.Art.SlaveArtElement(slave, 0, 0), ["imageRef", "tinyImg"]);
 			}
-			/* 000-250-006 */
-			<<includeDOM App.EndWeek.favoriteIcon(_slave)>>
-			<span class='slave-name'>
-	V.SlaveFullName(_slave)</span>
-			if (_slave.choosesOwnAssignment === 2) {
-				r.push(`${V.App.SlaveAssignment.choosesOwnJob(_slave)}`);
+			slaveEntry.append(App.EndWeek.favoriteIcon(slave), " ");
+			r = [];
+			r.push(App.UI.DOM.makeElement("span", SlaveFullName(slave), "slave-name"));
+			if (slave.choosesOwnAssignment === 2) {
+				r.push(`${App.SlaveAssignment.choosesOwnJob(slave)}`);
 			} else {
 				r.push(`is confined in ${V.cellblockName}.`);
 			}
-			<br>&nbsp;&nbsp;&nbsp;&nbsp;${He} 
-	V.App.SlaveAssignment.stayConfined(_slave)
-			<br>&nbsp;&nbsp;&nbsp;
-			<<includeDOM App.SlaveAssignment.rules(_slave)>>
-			r.push(`${V.App.SlaveAssignment.diet(_slave)}`);
-			<<includeDOM App.SlaveAssignment.longTermEffects(_slave)>>
-			r.push(`${V.App.SlaveAssignment.drugs(_slave)}`);
-			r.push(`${V.App.SlaveAssignment.relationships(_slave)}`);
-			r.push(`${V.App.SlaveAssignment.rivalries(_slave)}`);
-			<br>&nbsp;&nbsp;&nbsp;&nbsp;
-	V.App.SlaveAssignment.devotion(_slave)
+			App.Events.addNode(slaveEntry, r, "div");
+
+			r = [];
+			r.push(He);
+			r.push(App.SlaveAssignment.stayConfined(slave));
+
+			if (slave.choosesOwnAssignment === 2) {
+				r.push(App.SlaveAssignment.choosesOwnJob(slave));
+			} else {
+				r.push(`is confined in ${V.cellblockName}.`);
+			}
+			r.push(App.SlaveAssignment.standardSlaveReport(slave, false));
+			App.Events.addNode(slaveEntry, r, "div", "indent");
 		} else {
-			<<silently>>
-			App.SlaveAssignment.choosesOwnJob(_slave);
-			App.SlaveAssignment.stayConfined(_slave);
-			App.SlaveAssignment.rules(_slave);
-			App.SlaveAssignment.diet(_slave);
-			App.SlaveAssignment.longTermEffects(_slave);
-			App.SlaveAssignment.drugs(_slave);
-			App.SlaveAssignment.relationships(_slave);
-			App.SlaveAssignment.rivalries(_slave);
-			App.SlaveAssignment.devotion(_slave);
-			<</silently>>
+			// discard return values silently
+			App.SlaveAssignment.choosesOwnJob(slave);
+			App.SlaveAssignment.stayConfined(slave);
+			App.SlaveAssignment.standardSlaveReport(slave, true);
 		}
-	<</for>>
-	if (_softenedQuirks) || (_brokenSlaves) {
-		<br><br>&nbsp;&nbsp;&nbsp;&nbsp;
+	}
+	if (_softenedQuirks || _brokenSlaves) {
+		// <br><br>&nbsp;&nbsp;&nbsp;&nbsp;
 		if (_softenedQuirks > 0) {
-			_cellblockNameCaps's advanced compliance systems successfully softened
+			r.push(`${_cellblockNameCaps}'s advanced compliance systems successfully softened`);
 			if (_softenedQuirks === 1) {
 				r.push(`one slave's mental flaw into an <span class="green">appealing quirk,</span> though the constant correction caused them <span class="mediumorchid">considerable anguish.</span>`);
 			} else {
-				_softenedQuirks slaves' mental flaws into <span class="green">appealing quirks,</span> though the constant correction caused them <span class="mediumorchid">considerable anguish.</span>
+				r.push(`${_softenedQuirks} slaves' mental flaws into <span class="green">appealing quirks,</span> though the constant correction caused them <span class="mediumorchid">considerable anguish.</span>`);
 			}
 		}
 		if (_brokenSlaves > 0) {
 			if (_brokenSlaves === 1) {
 				r.push(`One slave is now willing to <span class="hotpink">do as they're told</span> and has been released.`);
 			} else {
-				_brokenSlaves slaves are now willing to <span class="hotpink">do as they're told</span> and have been released.
+				r.push(`${_brokenSlaves} slaves are now willing to <span class="hotpink">do as they're told</span> and have been released.`);
 			}
 			if (V.cellblockDecoration !== "standard") {
-				<br><br>&nbsp;&nbsp;&nbsp;&nbsp;_cellblockNameCaps's V.cellblockDecoration atmosphere <span class="hotpink">had an impact on them while they were</span> imprisoned.
+				App.Events.addNode(el, r, "p", "indent");
+				r = [];
+				r.push(`${_cellblockNameCaps}'s ${V.cellblockDecoration} atmosphere <span class="hotpink">had an impact on them while they were</span> imprisoned.`);
 			}
 		}
+		App.Events.addNode(el, r, "p", "indent");
 	}
-	if (_DL > 0 || S.Wardeness) {
-		<br><br>
-	}
-};
\ No newline at end of file
+	return el;
+};
diff --git a/src/endWeek/reportsTW/cellblockReport.tw b/src/endWeek/reportsTW/cellblockReport.tw
index bce62060aab12817cd65981eb38d46657d915d0e..7982248f27c1b82c67f742f925b2cec4f66f0de7 100644
--- a/src/endWeek/reportsTW/cellblockReport.tw
+++ b/src/endWeek/reportsTW/cellblockReport.tw
@@ -2,4 +2,4 @@
 
 /* This passage probably isn't really necessary but it helps organize the profiler output.
  * TODO: Once all the facility reports look like this, we should probably get rid of these intermediate passages. */
-<<includeDOM App.EndWeek.cellBlockReport()>>
+<<includeDOM App.EndWeek.cellblockReport()>>