diff --git a/devTools/types/FC/facilities.d.ts b/devTools/types/FC/facilities.d.ts
index e31140fcb24828f1ffa064abec3e206e52e19d57..e2f030c57488d4c2e119e0fb288289e76585e64e 100644
--- a/devTools/types/FC/facilities.d.ts
+++ b/devTools/types/FC/facilities.d.ts
@@ -1,5 +1,6 @@
 declare namespace FC {
 	namespace Facilities {
+		export type Facility = InstanceType<typeof App.Entity.Facilities.Facility>;
 		export type Animal = InstanceType<typeof App.Entity.Animal>;
 
 		interface Pit {
diff --git a/src/004-base/facility.js b/src/004-base/facility.js
index 26f7eff13e2c4f0abe06f8015468de96db7b70f4..d4ef66b608f6f0e7d03f19bd3230af663fcdc5f2 100644
--- a/src/004-base/facility.js
+++ b/src/004-base/facility.js
@@ -267,6 +267,15 @@ App.Entity.Facilities.Facility = class {
 		return res !== undefined ? res : 'the ' + this.genericName;
 	}
 
+	set name(newName) {
+		const stateObj = V[this.desc.baseName];
+		if (stateObj && typeof stateObj === "object") {
+			stateObj.name = newName;
+		} else {
+			V[this.desc.baseName + "Name"] = newName;
+		}
+	}
+
 	/** @returns {string} */
 	get nameCaps() {
 		return capFirstChar(this.name);
diff --git a/src/facilities/facilities.css b/src/facilities/facilities.css
new file mode 100644
index 0000000000000000000000000000000000000000..0c64d4f6e5edb051153508cde6dc4708d0f2abae
--- /dev/null
+++ b/src/facilities/facilities.css
@@ -0,0 +1,3 @@
+.facility-rename {
+	margin-top: 1em;
+}
diff --git a/src/facilities/farmyard/farmyard.js b/src/facilities/farmyard/farmyard.js
index 51c3e7de30c4b68302ba905b342c649da583324b..0c51e6a6676479a35766a14cca9694772af441b2 100644
--- a/src/facilities/farmyard/farmyard.js
+++ b/src/facilities/farmyard/farmyard.js
@@ -1,38 +1,46 @@
 App.Facilities.Farmyard.farmyard = function() {
 	const frag = new DocumentFragment();
 
+	const introDiv = document.createElement("div");
+	const expandDiv = document.createElement("div");
+	const menialsDiv = document.createElement("div");
+	const rulesDiv = document.createElement("div");
+	const upgradesDiv = document.createElement("div");
+	const animalsDiv = document.createElement("div");
+
 	V.nextButton = "Back to Main";
 	V.nextLink = "Main";
 	V.returnTo = "Farmyard";
 	V.encyclopedia = "Farmyard";
 
-	const farmyardNameCaps = capFirstChar(V.farmyardName);
+	frag.append(intro(), expand(), menials());
 
-	App.UI.DOM.appendNewElement("div", frag, intro(), "farmyard-intro");
-	App.UI.DOM.appendNewElement("div", frag, expand(), "farmyard-expand");
-	App.UI.DOM.appendNewElement("div", frag, menials(), "farmyard-menials");
-	App.UI.DOM.appendNewElement("div", frag, rules(), "farmyard-rules");
-	App.UI.DOM.appendNewElement("div", frag, upgrades(), "farmyard-upgrades");
-	App.UI.DOM.appendNewElement("div", frag, animals(), "farmyard-animals");
 	App.UI.DOM.appendNewElement("div", frag, App.UI.SlaveList.stdFacilityPage(App.Entity.facilities.farmyard), "farmyard-slaves");
-	App.UI.DOM.appendNewElement("div", frag, rename(), "farmyard-rename");
 
 	App.UI.SlaveList.ScrollPosition.restore();
 
+	frag.appendChild(App.Facilities.rename(App.Entity.facilities.farmyard, () => {
+		App.UI.DOM.replace(introDiv, intro);
+		App.UI.DOM.replace(expandDiv, expand);
+		App.UI.DOM.replace(menialsDiv, menials);
+		App.UI.DOM.replace(rulesDiv, rules);
+		App.UI.DOM.replace(upgradesDiv, upgrades);
+		App.UI.DOM.replace(animalsDiv, animals);
+	}));
+
 	return frag;
 
 
 
 	function intro() {
-		const frag = new DocumentFragment();
+		introDiv.classList.add("farmyard-intro", "scene-intro");
 
-		const desc = App.UI.DOM.makeElement("div", null, "scene-intro");
+		const desc = App.UI.DOM.appendNewElement("div", introDiv, `${capFirstChar(V.farmyardName)} is an oasis of growth in the midst of the jungle of steel and concrete that is ${V.arcologies[0].name}. Animals are kept in pens, tended to by your slaves, while ${V.farmyardUpgrades.hydroponics
+			? `rows of hydroponics equipment`
+			: `makeshift fields`} grow crops. `);
 		const link = App.UI.DOM.makeElement("div", null, "indent");
 
 		const count = App.Entity.facilities.farmyard.totalEmployeesCount;
-		const farmyardNameCaps = capFirstChar(V.farmyardName);
-
-		desc.append(`${farmyardNameCaps} is an oasis of growth in the midst of the jungle of steel and concrete that is ${V.arcologies[0].name}. Animals are kept in pens, tended to by your slaves, while ${V.farmyardUpgrades.hydroponics ? `rows of hydroponics equipment` : `makeshift fields`} grow crops. `);
 
 		switch (V.farmyardDecoration) {
 			case "Roman Revivalist":
@@ -116,13 +124,13 @@ App.Facilities.Farmyard.farmyard = function() {
 		}
 
 		if (count > 2) {
-			desc.append(` ${farmyardNameCaps} is bustling with activity. Farmhands are hurrying about, on their way to feed animals and maintain farming equipment.`);
+			desc.append(` ${capFirstChar(V.farmyardName)} is bustling with activity. Farmhands are hurrying about, on their way to feed animals and maintain farming equipment.`);
 		} else if (count) {
-			desc.append(` ${farmyardNameCaps} is working steadily. Farmhands are moving about, looking after the animals and crops.`);
+			desc.append(` ${capFirstChar(V.farmyardName)} is working steadily. Farmhands are moving about, looking after the animals and crops.`);
 		} else if (S.Farmer) {
 			desc.append(` ${S.Farmer.slaveName} is alone in ${V.farmyardName}, and has nothing to do but look after the animals and crops.`);
 		} else {
-			desc.append(` ${farmyardNameCaps} is empty and quiet.`);
+			desc.append(` ${capFirstChar(V.farmyardName)} is empty and quiet.`);
 		}
 
 		link.append(App.UI.DOM.passageLink(`Decommission ${V.farmyardName}`, "Main", () => {
@@ -159,18 +167,17 @@ App.Facilities.Farmyard.farmyard = function() {
 			};
 
 			clearAnimalsPurchased();
-			// @ts-ignore
 			App.Arcology.cellUpgrade(V.building, App.Arcology.Cell.Manufacturing, "Farmyard", "Manufacturing");
 		}));
 
 		desc.append(link);
-		frag.append(desc);
+		introDiv.appendChild(desc);
 
-		return frag;
+		return introDiv;
 	}
 
 	function expand() {
-		const frag = new DocumentFragment();
+		expandDiv.classList.add("farmyard-expand");
 
 		const desc = document.createElement("div");
 		const link = App.UI.DOM.makeElement("div", null, "indent");
@@ -193,23 +200,21 @@ App.Facilities.Farmyard.farmyard = function() {
 
 		link.append(note);
 		desc.append(link);
-		frag.append(desc);
+		expandDiv.appendChild(desc);
 
 		if (App.Entity.facilities.farmyard.totalEmployeesCount) {
-			App.UI.DOM.appendNewElement("div", frag, removeFacilityWorkers("farmyard"), "indent");
+			App.UI.DOM.appendNewElement("div", expandDiv, removeFacilityWorkers("farmyard"), "indent");
 		}
 
-		return frag;
+		return expandDiv;
 	}
 
 	function menials() {
-		const frag = new DocumentFragment();
+		menialsDiv.classList.add("farmyard-menials");
 
-		frag.append(transferMenials());
-		frag.append(buyMenials());
-		frag.append(houseMenials());
+		menialsDiv.append(transferMenials(), buyMenials(), houseMenials());
 
-		return frag;
+		return menialsDiv;
 	}
 
 	function transferMenials() {
@@ -227,7 +232,7 @@ App.Facilities.Farmyard.farmyard = function() {
 		}
 
 		if (farmMenialsSpace) {
-			frag.append(`You ${menials ? `own ${num(menials)}` : `don't own any`} free menial slaves. ${farmyardNameCaps} can house ${farmMenialsSpace} menial slaves total, with ${farmMenialsSpace - farmMenials} free spots. `);
+			frag.append(`You ${menials ? `own ${num(menials)}` : `don't own any`} free menial slaves. ${capFirstChar(V.farmyardName)} can house ${farmMenialsSpace} menial slaves total, with ${farmMenialsSpace - farmMenials} free spots. `);
 		}
 
 		if (farmMenialsSpace && farmMenials < farmMenialsSpace) {
@@ -264,9 +269,9 @@ App.Facilities.Farmyard.farmyard = function() {
 				}));
 			}
 		} else if (!farmMenialsSpace) {
-			frag.append(`${farmyardNameCaps} cannot currently house any menial slaves. `);
+			frag.append(`${capFirstChar(V.farmyardName)} cannot currently house any menial slaves. `);
 		} else {
-			frag.append(`${farmyardNameCaps} has all the menial slaves it can currently house assigned to it. `);
+			frag.append(`${capFirstChar(V.farmyardName)} has all the menial slaves it can currently house assigned to it. `);
 		}
 
 		if (farmMenials) {
@@ -363,7 +368,7 @@ App.Facilities.Farmyard.farmyard = function() {
 	}
 
 	function rules() {
-		const frag = new DocumentFragment();
+		rulesDiv.classList.add("farmyard-rules");
 
 		if (App.Entity.facilities.farmyard.employeesIDs().size > 0) {	// TODO: redo this with V.farmyardShowgirls
 			if (V.farmyardShows && (V.canine || V.hooved || V.feline)) {
@@ -375,7 +380,7 @@ App.Facilities.Farmyard.farmyard = function() {
 					["farmyardShows", "farmyardBreeding", "farmyardRestraints"]
 				);
 
-				frag.append(rule);
+				rulesDiv.append(rule);
 
 				if (V.seeBestiality) {
 					if (V.farmyardBreeding) {
@@ -387,7 +392,7 @@ App.Facilities.Farmyard.farmyard = function() {
 							["farmyardBreeding", "farmyardRestraints"]
 						);
 
-						frag.append(rule);
+						rulesDiv.append(rule);
 
 						if (V.farmyardRestraints) {
 							const rule = makeRule(
@@ -398,7 +403,7 @@ App.Facilities.Farmyard.farmyard = function() {
 								["farmyardRestraints"]
 							);
 
-							frag.append(rule);
+							rulesDiv.append(rule);
 						} else {
 							const rule = makeRule(
 								'are being restrained',
@@ -408,7 +413,7 @@ App.Facilities.Farmyard.farmyard = function() {
 								[]
 							);
 
-							frag.append(rule);
+							rulesDiv.append(rule);
 						}
 					} else {
 						const rule = makeRule(
@@ -419,7 +424,7 @@ App.Facilities.Farmyard.farmyard = function() {
 							["farmyardRestraints"]
 						);
 
-						frag.append(rule);
+						rulesDiv.append(rule);
 					}
 				}
 			} else {
@@ -431,7 +436,7 @@ App.Facilities.Farmyard.farmyard = function() {
 					["farmyardBreeding", "farmyardRestraints"]
 				);
 
-				frag.append(rule);
+				rulesDiv.append(rule);
 			}
 		}
 
@@ -467,12 +472,10 @@ App.Facilities.Farmyard.farmyard = function() {
 			return frag;
 		}
 
-		return frag;
+		return rulesDiv;
 	}
 
 	function upgrades() {
-		const frag = new DocumentFragment();
-
 		const farmyardUpgrades = V.farmyardUpgrades;
 
 		const pumpCost = Math.trunc(5000 * V.upgradeMultiplierArcology);
@@ -490,15 +493,15 @@ App.Facilities.Farmyard.farmyard = function() {
 				"pump"
 			);
 
-			desc.append(`${farmyardNameCaps} is currently using the basic water pump that it came with.`);
+			desc.append(`${capFirstChar(V.farmyardName)} is currently using the basic water pump that it came with.`);
 
-			frag.append(desc, upgrade);
+			upgradesDiv.append(desc, upgrade);
 		} else {
 			const desc = document.createElement("div");
 
 			desc.append(`The water pump in ${V.farmyardName} is a more efficient model, slightly improving the amount of crops it produces.`);
 
-			frag.append(desc);
+			upgradesDiv.append(desc);
 
 			if (!farmyardUpgrades.fertilizer) {
 				const upgrade = createUpgrade(
@@ -508,13 +511,13 @@ App.Facilities.Farmyard.farmyard = function() {
 					"fertilizer"
 				);
 
-				frag.append(upgrade);
+				upgradesDiv.append(upgrade);
 			} else {
 				const desc = document.createElement("div");
 
-				desc.append(`${farmyardNameCaps} is using a higher-quality fertilizer, moderately increasing the amount of crops it produces and raising slightly raising upkeep costs.`);
+				desc.append(`${capFirstChar(V.farmyardName)} is using a higher-quality fertilizer, moderately increasing the amount of crops it produces and raising slightly raising upkeep costs.`);
 
-				frag.append(desc);
+				upgradesDiv.append(desc);
 
 				if (!farmyardUpgrades.hydroponics) {
 					const upgrade = createUpgrade(
@@ -524,13 +527,13 @@ App.Facilities.Farmyard.farmyard = function() {
 						"hydroponics"
 					);
 
-					frag.append(upgrade);
+					upgradesDiv.append(upgrade);
 				} else {
 					const desc = document.createElement("div");
 
-					desc.append(`${farmyardNameCaps} is outfitted with an advanced hydroponics system, reducing the amount of water your crops consume and thus moderately reducing upkeep costs.`);
+					desc.append(`${capFirstChar(V.farmyardName)} is outfitted with an advanced hydroponics system, reducing the amount of water your crops consume and thus moderately reducing upkeep costs.`);
 
-					frag.append(desc);
+					upgradesDiv.append(desc);
 
 					if (!farmyardUpgrades.seeds) {
 						const upgrade = createUpgrade(
@@ -540,13 +543,13 @@ App.Facilities.Farmyard.farmyard = function() {
 							"seeds"
 						);
 
-						frag.append(upgrade);
+						upgradesDiv.append(upgrade);
 					} else {
 						const desc = document.createElement("div");
 
-						desc.append(`${farmyardNameCaps} is using genetically modified seeds, significantly increasing the amount of crops it produces and moderately increasing upkeep costs.`);
+						desc.append(`${capFirstChar(V.farmyardName)} is using genetically modified seeds, significantly increasing the amount of crops it produces and moderately increasing upkeep costs.`);
 
-						frag.append(desc);
+						upgradesDiv.append(desc);
 
 						if (!farmyardUpgrades.machinery) {
 							const upgrade = createUpgrade(
@@ -556,13 +559,13 @@ App.Facilities.Farmyard.farmyard = function() {
 								"machinery"
 							);
 
-							frag.append(upgrade);
+							upgradesDiv.append(upgrade);
 						} else {
 							const desc = document.createElement("div");
 
 							desc.append(`The machinery in ${V.farmyardName} has been upgraded, and is more efficient, significantly increasing crop yields and significantly decreasing upkeep costs.`);
 
-							frag.append(desc);
+							upgradesDiv.append(desc);
 						}
 					}
 				}
@@ -589,12 +592,10 @@ App.Facilities.Farmyard.farmyard = function() {
 			return desc;
 		}
 
-		return frag;
+		return upgradesDiv;
 	}
 
 	function animals() {
-		const frag = new DocumentFragment();
-
 		const baseCost = Math.trunc(5000 * V.upgradeMultiplierArcology);
 		const upgradedCost = Math.trunc(10000 * V.upgradeMultiplierArcology);
 
@@ -799,29 +800,9 @@ App.Facilities.Farmyard.farmyard = function() {
 			removeHousing.append(removeHousingNote);
 		}
 
-		frag.append(kennels, stables, cages, removeHousing);
-
-		return frag;
-	}
-
-	function rename() {
-		const frag = new DocumentFragment();
-
-		const renameDiv = App.UI.DOM.makeElement("div", null, "farmyard-rename");
-		const renameNote = App.UI.DOM.makeElement("span", null, "note");
-
-		renameDiv.append(`Rename ${V.farmyardName}: `);
-		renameNote.append(` Use a noun or similar short phrase`);
-
-		renameDiv.append(App.UI.DOM.makeTextBox(V.farmyardName, newName => {
-			V.farmyardName = newName;
-		}));
+		animalsDiv.append(kennels, stables, cages, removeHousing);
 
-		renameDiv.append(renameNote);
-
-		frag.append(renameDiv);
-
-		return frag;
+		return animalsDiv;
 	}
 
 	function clearAnimalsPurchased() {
diff --git a/src/facilities/pit/pit.js b/src/facilities/pit/pit.js
index 3b3b20e784bf0b1aaef5f2cc5d8d66b181a5d3d7..af755da26c28da46baf9a07e80299fa8c20bbeb9 100644
--- a/src/facilities/pit/pit.js
+++ b/src/facilities/pit/pit.js
@@ -19,7 +19,9 @@ App.Facilities.Pit.pit = function() {
 		App.UI.DOM.appendNewElement("div", frag, App.UI.SlaveList.listSJFacilitySlaves(App.Entity.facilities.pit, passage(), false, {assign: "Select a slave to fight", remove: "Cancel a slave's fight", transfer: null}), "pit-assign");
 	}
 
-	frag.appendChild(rename());
+	frag.appendChild(App.Facilities.rename(App.Entity.facilities.pit, () => {
+		App.UI.DOM.replace(introDiv, intro);
+	}));
 
 	return frag;
 
@@ -392,22 +394,6 @@ App.Facilities.Pit.pit = function() {
 
 		return scheduledDiv;
 	}
-
-	function rename() {
-		const renameDiv = App.UI.DOM.makeElement("div", `Rename ${V.pit.name}: `, ["pit-rename"]);
-		const renameNote = App.UI.DOM.makeElement("span", ` Use a noun or similar short phrase`, ["note"]);
-
-		renameDiv.append(App.UI.DOM.makeTextBox(V.pit.name, newName => {
-			V.pit.name = newName;
-
-			App.UI.DOM.replace(renameDiv, rename);
-			App.UI.DOM.replace(introDiv, intro);
-		}));
-
-		renameDiv.append(renameNote);
-
-		return renameDiv;
-	}
 };
 
 App.Facilities.Pit.init = function() {
diff --git a/src/facilities/utils.js b/src/facilities/utils.js
new file mode 100644
index 0000000000000000000000000000000000000000..1cc245bb0519e05eefa5696cc1523687a6b4488a
--- /dev/null
+++ b/src/facilities/utils.js
@@ -0,0 +1,25 @@
+/**
+ * Adds a new "Rename Facility" textbox.
+ *
+ * Allows the use of custom handler functions.
+ * @param {App.Entity.Facilities.Facility} facility The entity form of the facility. Typical denoted as `App.Entity.facilities.*`.
+ * @param {function():void} [handler] Any custom function to be run upon entering a new name.
+ */
+App.Facilities.rename = function rename(facility, handler) {
+	const renameDiv = App.UI.DOM.makeElement("div", `Rename ${facility.name}: `, ["facility-rename"]);
+	const renameNote = App.UI.DOM.makeElement("span", ` Use a noun or similar short phrase`, ["note"]);
+
+	renameDiv.appendChild(App.UI.DOM.makeTextBox(facility.name, newName => {
+		facility.name = newName;
+
+		App.UI.DOM.replace(renameDiv, App.Facilities.rename(facility));
+
+		if (handler) {
+			handler();
+		}
+	}));
+
+	renameDiv.appendChild(renameNote);
+
+	return renameDiv;
+};