diff --git a/devTools/types/FC/arcology.d.ts b/devTools/types/FC/arcology.d.ts
index 35660ea4796b78d23a93a49010d2c34efabba2eb..a0a48a7315e75a7a456de13732e266dd562d6423 100644
--- a/devTools/types/FC/arcology.d.ts
+++ b/devTools/types/FC/arcology.d.ts
@@ -198,6 +198,7 @@ declare namespace FC {
 		hackingEconomicTarget: number;
 		hackingReputationTarget: number;
 		hackingReputation: number;
+		weeks: number;
 	}
 
 	type ArcologyStateFSPeculiarities = {
diff --git a/js/002-config/fc-js-init.js b/js/002-config/fc-js-init.js
index 8050993cbf9fe9e92e8bfdf055bd86bfb9709408..9b806d761748742271f8ecd3ecd3b012beba8768 100644
--- a/js/002-config/fc-js-init.js
+++ b/js/002-config/fc-js-init.js
@@ -18,6 +18,7 @@ App.Art = {};
 App.Budget = {};
 App.Corporate = {};
 App.Data = {};
+App.Data.Arcology = {};
 App.Data.FCTV = {};
 App.Data.HeroSlaves = {};
 App.Data.Medicine = {};
diff --git a/js/003-data/arcologyData.js b/js/003-data/arcologyData.js
new file mode 100644
index 0000000000000000000000000000000000000000..6b0b17d9efa8ed3af45f453b87556e042d069445
--- /dev/null
+++ b/js/003-data/arcologyData.js
@@ -0,0 +1,2 @@
+App.Data.Arcology.Terrain = ["marine", "marine", "oceanic", "ravine", "rural", "rural", "rural", "urban", "urban"];
+App.Data.Arcology.Continents = ["Africa", "Asia", "Asia", "Australia", "Western Europe", "Southern Europe", "Central Europe", "Eastern Europe", "Scandinavia", "Japan", "North America", "North America", "South America", "the Middle East"];
diff --git a/js/003-data/slaveBody.js b/js/003-data/slaveBody.js
index 951fdced4045256fef715924a736c935cee6398d..7739c26772281023fe09101af8746e3810d0baf0 100644
--- a/js/003-data/slaveBody.js
+++ b/js/003-data/slaveBody.js
@@ -128,3 +128,5 @@ App.Data.Slave.Ears = {
 	normal: {title: ""},
 	...App.Data.Slave.FancyEars
 };
+
+App.Data.Slave.Races = ["amerindian", "asian", "black", "indo-aryan", "latina", "malay", "middle eastern", "mixed race", "pacific islander", "semitic", "southern european", "white"];
diff --git a/src/arcologyBuilding/presets.js b/src/arcologyBuilding/presets.js
index 058d31aa4cf56e9004a2d4707c0f18208133ddb9..711c2c265026f5e8586e64270e95cd2240e12df3 100644
--- a/src/arcologyBuilding/presets.js
+++ b/src/arcologyBuilding/presets.js
@@ -291,17 +291,23 @@ App.Arcology.upgrades = function(building) {
 			const div = document.createElement("div");
 			div.classList.add("choices");
 			const cost = upgrade.cost * V.upgradeMultiplierArcology;
-			div.append(`...${upgrade.desc}. `, App.UI.DOM.makeElement("span", `This huge project will cost ${cashFormat(cost)} `, "note"),
-				App.UI.DOM.passageLink(`Build ${upgrade.name}`, passage(), () => {
-					if (building.usedUpgrades.length === 0) {
-						// the first major upgrade gives skill, successive ones not, mainly because there might be a
-						// different number depending on layout.
-						V.PC.skill.engineering++;
-					}
-					building.usedUpgrades.push(upgrade.id);
-					upgrade.apply();
-					cashX(-cost, "capEx");
-				}));
+			div.append(
+				makePurchase(`...${upgrade.desc}`, cost, "capEx", {
+					notes: [`This huge project will cost ${cashFormat(cost)}`],
+					handler: () => {
+						if (building.usedUpgrades.length === 0) {
+							// the first major upgrade gives skill, successive ones not, mainly because there might be a
+							// different number depending on layout.
+							V.PC.skill.engineering++;
+						}
+						building.usedUpgrades.push(upgrade.id);
+						upgrade.apply();
+						cashX(-cost, "capEx");
+
+						App.UI.reload();
+					},
+				}),
+			);
 			outerDiv.append(div);
 			count++;
 		}
diff --git a/src/arcologyBuilding/purchaseArcology.js b/src/arcologyBuilding/purchaseArcology.js
new file mode 100644
index 0000000000000000000000000000000000000000..c5bfdf13a743f7073816ccffb074b436d7b9e3d5
--- /dev/null
+++ b/src/arcologyBuilding/purchaseArcology.js
@@ -0,0 +1,24 @@
+App.Arcology.purchase = function() {
+	const div = document.createElement("div");
+	const linkDiv = document.createElement("div");
+
+	div.append(linkDiv);
+	linkDiv.append(
+		`You can also purchase a new arcology to move to in a new location. You will once again become an unknown figure with no reputation of any kind.`,
+		App.UI.DOM.makeElement("div", App.UI.DOM.link(`See arcologies`, () => {
+			App.UI.DOM.replace(linkDiv, purchase());
+		}), ['indent']),
+	);
+
+	function purchase() {
+		const frag = new DocumentFragment();
+
+		const h3 = App.UI.DOM.makeElement("h3", `Purchase an arcology`);
+
+		frag.append(h3, App.Intro.generateEstablishedArcologies());
+
+		return frag;
+	}
+
+	return div;
+};
diff --git a/src/data/backwardsCompatibility/backwardsCompatibility.js b/src/data/backwardsCompatibility/backwardsCompatibility.js
index 25d8480fd39029426d9097a35ff77a4a10a53383..e5a404219016f570c37765c9e1f55bd9cd027fd5 100644
--- a/src/data/backwardsCompatibility/backwardsCompatibility.js
+++ b/src/data/backwardsCompatibility/backwardsCompatibility.js
@@ -107,8 +107,8 @@ App.Update.backwardsCompatibility = function() {
 		div = App.UI.DOM.appendNewElement("div", f, `Updating mods... `);
 		App.Update.mods(div);
 
-		div = App.UI.DOM.appendNewElement("div", f, `Checking for old arcology locations... `);
-		App.Update.arcologyLocation(div);
+		div = App.UI.DOM.appendNewElement("div", f, `Updating arcology information... `);
+		App.Update.arcology(div);
 
 		div = App.UI.DOM.appendNewElement("div", f, `Cleaning up old FCNN headlines... `);
 		App.Update.FCNN(div);
@@ -1663,7 +1663,7 @@ App.Update.RAassistantData = function(node) {
 	node.append(`Done!`);
 };
 
-App.Update.arcologyLocation = function(node) {
+App.Update.arcology = function(node) {
 	if (V.continent === "Europe") {
 		const prompt = App.UI.DOM.appendNewElement('div', node);
 		prompt.id = "location-prompt"; // so we can replace the whole prompt later after the user clicks a link
@@ -1675,7 +1675,7 @@ App.Update.arcologyLocation = function(node) {
 			"Scandinavia",
 			"Central Europe"
 		];
-		prompt.append(`General Arcology location detected: Europe. Please specify exact location of arcology. Currently selected: ${V.continent}. Other Possibilities: `,
+		prompt.append(`General Arcology location detected: Europe. Please specify exact location of arcology. Currently selected: ${V.continent}. Other possibilities: `,
 			App.UI.DOM.generateLinksStrip(altLocations.map(l => makeLinkForLocation(l))));
 	} else {
 		node.append(`Done!`);
@@ -1687,6 +1687,10 @@ App.Update.arcologyLocation = function(node) {
 			App.UI.DOM.replace("#location-prompt", `Arcology location specified at ${l}.`);
 		});
 	}
+
+	if (!("weeks" in V.arcologies[0])) {
+		V.arcologies[0].weeks = V.week;
+	}
 };
 
 App.Update.oldVersions = function(node) {
diff --git a/src/endWeek/nextWeek/nextWeek.js b/src/endWeek/nextWeek/nextWeek.js
index a3108a7a97304502e6fdf7fdf1e3cbbd18aa44a4..fb6d28411b122aaba13f8db3000a9465e0057f6a 100644
--- a/src/endWeek/nextWeek/nextWeek.js
+++ b/src/endWeek/nextWeek/nextWeek.js
@@ -306,6 +306,7 @@ App.EndWeek.nextWeek = function() {
 	}
 
 	V.week++;
+	V.arcologies[0].weeks++;
 
 	if (V.playerSurgery > 0) {
 		V.playerSurgery--;
diff --git a/src/events/intro/arcologySelection.js b/src/events/intro/arcologySelection.js
index 70e79b634c7ee08e8363536af1f3fcf0d79c802d..0210540a39457fb64eb9de22839917cafd9c8bb8 100644
--- a/src/events/intro/arcologySelection.js
+++ b/src/events/intro/arcologySelection.js
@@ -1,4 +1,5 @@
-App.Intro.generateEstablishedArcologies = function() {
+/** @param {number} [price] */
+App.Intro.generateEstablishedArcologies = function(price) {
 	/* setup */
 	const fsAllowed = {
 		FSGenderRadicalist: () => V.seeDicks !== 0,
@@ -6,9 +7,6 @@ App.Intro.generateEstablishedArcologies = function() {
 		FSDegradationist: () => V.seeExtreme !== 0
 	};
 	const allowedFS = App.Data.FutureSociety.playerFSNames.filter(fs => !(fs in fsAllowed) || fsAllowed[fs]());
-	const terrainTypes = ["marine", "marine", "oceanic", "ravine", "rural", "rural", "rural", "urban", "urban"];
-	const continents = ["Africa", "Asia", "Asia", "Australia", "Western Europe", "Southern Europe", "Central Europe", "Eastern Europe", "Scandinavia", "Japan", "North America", "North America", "South America", "the Middle East"];
-	const races = ["amerindian", "asian", "black", "indo-aryan", "latina", "malay", "middle eastern", "mixed race", "pacific islander", "semitic", "southern european", "white"];
 
 	let targets = 4;
 	if (V.PC.career === "arcology owner") {
@@ -16,26 +14,32 @@ App.Intro.generateEstablishedArcologies = function() {
 	}
 
 	/* generation */
-	const fragment = document.createDocumentFragment();
+	const div = document.createElement("div");
 	for (let i = 0; i < targets; i++) {
-		fragment.append(arcologyCard());
+		div.append(arcologyCard());
 	}
-	return fragment;
+	return div;
 
 	function arcologyCard() {
-		const arcology = generateArcology();
 		const div = document.createElement("div");
-		div.classList.add("card");
-
-		div.append(App.UI.DOM.passageLink(arcology.name, "Intro Summary", () => {
-			V.targetArcology = arcology;
-			V.terrain = arcology.terrain;
-			V.continent = arcology.continent;
-			V.language = arcology.language;
-			arcology.apply();
-		}));
+		const arcology = generateArcology();
+		const sectionPrice = {
+			"penthouse": 10_000_000,
+			"shops": 1_000_000,
+			"apartments": 500_000,
+			"markets": 250_000,
+			"manufacturing": 100_000,
+		};
+		const rows = (/** @type {App.Arcology.Section} */ section) => section.rows
+			.reduce((acc, cur) => acc + cur.length * sectionPrice[section.id], 0);
+		const _price = price ?? arcology.building.sections
+			.reduce((acc, cur) => acc + rows(cur), 10_000_000); // base price of ¤10,000,000
 
-		div.append(" is an established arcology located in a Free City ");
+		div.classList.add("card");
+		div.append(
+			App.UI.DOM.makeElement("span", arcology.name, ['bold']),
+			` is an established arcology located in a Free City `,
+		);
 		if (arcology.terrain === "urban") {
 			div.append(`carved out of an urban area of ${arcology.continent}.`);
 		} else if (arcology.terrain === "rural") {
@@ -134,7 +138,7 @@ App.Intro.generateEstablishedArcologies = function() {
 				innerDiv.append(App.UI.DOM.makeElement("span", `Neo-Imperialism,`, ["intro", "question"]), " adopting old world customs and remodeling them under an absolutist Imperial fist.");
 				break;
 			case "FSAztecRevivalist":
-				innerDiv.append(App.UI.DOM.makeElement("span", `Aztec Revivalism,`, ["intro", "question"]), " which aspires to reach the heights of the Aztec Empire at it's peak.");
+				innerDiv.append(App.UI.DOM.makeElement("span", `Aztec Revivalism,`, ["intro", "question"]), " which aspires to reach the heights of the Aztec Empire at its peak.");
 				innerDiv.append(App.UI.DOM.makeElement("div", "It has an established lingua franca: Nahuatl."));
 				break;
 			case "FSEgyptianRevivalist":
@@ -177,9 +181,66 @@ App.Intro.generateEstablishedArcologies = function() {
 			default:
 				innerDiv.append(App.UI.DOM.makeElement("span", `Multiculturalism,`, ["intro", "question"]), " a celebration of the total liberty that was the original purpose of the Free Cities.");
 		}
-		div.append(innerDiv);
-		div.append(App.UI.DOM.makeElement("span", arcology.building.render(), "intro"));
+
+		div.append(
+			innerDiv,
+			App.UI.DOM.makeElement("div", arcology.building.render(), ["intro"]),
+			App.UI.DOM.makeElement("div", makePurchase(`Purchase ${arcology.name}`, _price, "capEx", {
+				handler: () => {
+					V.targetArcology = arcology;
+					V.terrain = arcology.terrain;
+					V.continent = arcology.continent;
+					V.language = arcology.language;
+					V.building = arcology.building;
+					V.weatherCladding = 0;
+					V.rep = 0;
+
+					if (V.secExpEnabled) {
+						V.SecExp.core.authority = 0;
+					}
+
+					arcology.apply();
+
+					if (passage() === "Takeover Target") {
+						Engine.play("Intro Summary");
+					} else {
+						updatePlayerArcology();
+						Engine.play("Main");
+					}
+				},
+				prereqs: [
+					[
+						V.rival.state === 0 || V.rival.state > 2,
+						`Your inter-arcology war is preventing you from leaving ${arcology.name}.`
+					],
+					[
+						V.daughtersVictory !== 1,
+						`You cannot leave ${arcology.name} behind while the Daughters of Liberty are still a threat.`
+					],
+				],
+			}), ['center']),
+		);
+
 		return div;
+
+		function updatePlayerArcology() {
+			V.arcologies[0].name = arcology.name;
+			V.arcologies[0].weeks = 1;
+
+			updateFS();
+		}
+
+		function updateFS() {
+			const {fs} = arcology;
+
+			App.Data.FutureSociety.fsNames.forEach(f => {
+				FutureSocieties.remove(f);
+			});
+
+			if (fs) {
+				V.arcologies[0][fs] = arcology.FSProgress;
+			}
+		}
 	}
 
 	function generateArcology() {
@@ -189,8 +250,8 @@ App.Intro.generateEstablishedArcologies = function() {
 		arcology.FSProgress = either(10, 30, 50);
 		arcology.prosperity = either(40, 50, 60);
 		arcology.citizens = random(-1, 1);
-		arcology.terrain = terrainTypes.random();
-		arcology.continent = continents.random();
+		arcology.terrain = App.Data.Arcology.Terrain.random();
+		arcology.continent = App.Data.Arcology.Continents.random();
 		arcology.language = getLanguage();
 
 		const env = {terrain: arcology.terrain, established: true, fs: arcology.fs};
@@ -203,7 +264,7 @@ App.Intro.generateEstablishedArcologies = function() {
 		function getFS() {
 			const type = allowedFS.pluck();
 			if (type === "FSSupremacist" || type === "FSSubjugationist") {
-				arcology.race = races.random();
+				arcology.race = App.Data.Slave.Races.random();
 			}
 			return type;
 		}
diff --git a/src/events/intro/takeoverTarget.js b/src/events/intro/takeoverTarget.js
index ae52407a0cde46d8da4457b2195fec3ee10056c5..7923d6a0fc0a2b6f9769a3920682115f6bfa313f 100644
--- a/src/events/intro/takeoverTarget.js
+++ b/src/events/intro/takeoverTarget.js
@@ -1,7 +1,7 @@
 App.Intro.takeoverTarget = function() {
-	//	:: Takeover Target [nobr]
 	const node = new DocumentFragment();
-	let r = [];
+	const r = [];
+
 	r.push(`Before you deploy the`);
 	if (V.PC.rumor === "wealth") {
 		r.push(`financial reserves that`);
@@ -9,7 +9,8 @@ App.Intro.takeoverTarget = function() {
 		r.push(`carefully constructed plan that`);
 	} else if (V.PC.rumor === "force") {
 		r.push(`mercenaries and`);
-		if (V.continent === "Eastern Europe") { // maskirovka//
+		if (V.continent === "Eastern Europe") {
+			r.push(`maskirovka`);
 		} else {
 			r.push(`cover plan`);
 		}
@@ -40,7 +41,7 @@ App.Intro.takeoverTarget = function() {
 	r.push(App.UI.DOM.makeElement("div", `Which arcology will you target?`, ["intro", "question"]));
 	App.Events.addParagraph(node, r);
 
-	const card = App.UI.DOM.appendNewElement("div", node, null, "card");
+	const card = App.UI.DOM.appendNewElement("div", node, null, ["card"]);
 	card.append(App.UI.DOM.passageLink(
 		"A newly constructed arcology",
 		"Terrain Intro",
@@ -49,6 +50,6 @@ App.Intro.takeoverTarget = function() {
 	App.UI.DOM.appendNewElement("div", card, `With many new arcologies being constructed, you will be able to select which area of the world and type of Free City you'd like your target arcology to be located in.`, ["indent", "note"]);
 	App.UI.DOM.appendNewElement("div", card, `Recommended for new players.`, ["indent", "note"]);
 
-	node.append(App.Intro.generateEstablishedArcologies());
+	node.append(App.Intro.generateEstablishedArcologies(0));
 	return node;
 };
diff --git a/src/gui/options/options.js b/src/gui/options/options.js
index 839d5b98459b711e0f669ecc3c23192b85c9a217..bf76a673f17cacc1f439b12685dbc288625701db 100644
--- a/src/gui/options/options.js
+++ b/src/gui/options/options.js
@@ -132,15 +132,16 @@ App.UI.optionsPassage = function() {
 			App.UI.DOM.appendNewElement("h3", el, `NEW GAME PLUS`);
 			App.UI.DOM.appendNewElement("div", el, `You can begin a new game with up to five (or more) of your current slaves, although starting resources other than these slaves will be reduced.`);
 			App.UI.DOM.appendNewElement("div", el, App.UI.DOM.link(
-				"Activate New Game Plus.",
+				"Activate New Game Plus",
 				() => {
 					V.ui = "start";
 				},
 				[],
 				"New Game Plus"
-			));
+			), ["indent"]);
+			App.UI.DOM.appendNewElement("div", el, App.Arcology.purchase());
 		} else {
-			App.UI.DOM.appendNewElement("div", el, `New Game Plus is not available because this game was not started with a compatible version.`, "note");
+			App.UI.DOM.appendNewElement("div", el, `New Game Plus is not available because this game was not started with a compatible version.`, ["note"]);
 		}
 		return el;
 	}
diff --git a/src/gui/sideBar.js b/src/gui/sideBar.js
index 41914c8fb846785776dd6b67e9d2bb52d758eb3a..34c3c3232c0bba9b330a82567c6cc4f02e629040 100644
--- a/src/gui/sideBar.js
+++ b/src/gui/sideBar.js
@@ -37,7 +37,7 @@ App.Utils.userButton = function(nextButton = V.nextButton, nextLink = V.nextLink
 			link.id = "endWeekButton";
 			el.append(link);
 			el.append(" ");
-			App.UI.DOM.appendNewElement("span", el, App.UI.Hotkeys.hotkeys("endWeek"), "hotkey");
+			App.UI.DOM.appendNewElement("span", el, App.UI.Hotkeys.hotkeys("endWeek"), ["hotkey"]);
 		} else {
 			if (nextButton !== " ") {
 				link = App.UI.DOM.passageLink(
@@ -48,7 +48,7 @@ App.Utils.userButton = function(nextButton = V.nextButton, nextLink = V.nextLink
 				link.id = "nextButton";
 				el.append(link);
 				el.append(" ");
-				App.UI.DOM.appendNewElement("span", el, App.UI.Hotkeys.hotkeys("nextLink"), "hotkey");
+				App.UI.DOM.appendNewElement("span", el, App.UI.Hotkeys.hotkeys("nextLink"), ["hotkey"]);
 			}
 		}
 	}
diff --git a/src/gui/storyCaption.js b/src/gui/storyCaption.js
index 2a71195f1cdea4453ad9fd47642c623f0e20643e..324ca31d9da14b8cc5086f67173357268056e159 100644
--- a/src/gui/storyCaption.js
+++ b/src/gui/storyCaption.js
@@ -85,7 +85,12 @@ App.UI.storyCaption = function() {
 	function week() {
 		const fragment = new DocumentFragment();
 		const div = document.createElement("div");
-		App.UI.DOM.appendNewElement("span", fragment, App.UI.DOM.spanWithTooltip(`Week ${V.week}`, capFirstChar(years(V.week))), ['bold']);
+		const tooltip = document.createElement("div");
+		App.UI.DOM.appendNewElement("div", tooltip, capFirstChar(years(V.week)));
+		if (V.arcologies[0].weeks !== V.week) {
+			App.UI.DOM.appendNewElement("div", tooltip, `${capFirstChar(years(V.arcologies[0].weeks))} in ${V.arcologies[0].name}`);
+		}
+		App.UI.DOM.appendNewElement("span", fragment, App.UI.DOM.spanWithTooltip(`Week ${V.week}`, tooltip, ['bold']));
 		fragment.append(div);
 		App.UI.DOM.appendNewElement("div", fragment, `Week of ${asDateString(V.week)}`);
 
diff --git a/src/js/economyJS.js b/src/js/economyJS.js
index 0503f223f79cb18a851768ead67c5e7bc3a20458..cc933bbe478745748e4fd244463b06cc93e4397a 100644
--- a/src/js/economyJS.js
+++ b/src/js/economyJS.js
@@ -1489,8 +1489,8 @@ globalThis.NPCSexSupply = function(lowerDemandLeft, lowerTotalDemand, middleDema
 	if (NPCSexSupply.lowerClass > lowerTotalDemand * (0.3 - V.sexSupplyBarriers.lowerClass / 20)) { // Checking if NPCs are supplying more than the standard minimum share of supply
 		if (lowerClassNPCRatio >= lowerClassOptimalRatio + 0.05) { // NPCs provide more than they really care to and some wish to stop providing sexual services, max reduction of 10% of previous
 			NPCSexSupply.lowerClass -= Math.min(NPCSexSupply.lowerClass - Math.trunc((NPCSexSupply.lowerClass * 4 + lowerClassOptimal) / 5), Math.trunc(NPCSexSupply.lowerClass * 0.1));
-		} else if (lowerClassNPCRatio <= lowerClassOptimalRatio - 0.05) { // NPCs see business opportunities and provide more sexual services, minimum increse of 500, max of 10% of previous
-			NPCSexSupply.lowerClass += Math.trunc(Math.clamp((NPCSexSupply.lowerClass * 4 + lowerClassOptimal) / 5 - NPCSexSupply.lowerClass, 500, NPCSexSupply.lowerClass * 0.1) * (1 - V.sexSupplyBarriers.lowerClass / 5)); // Slow down NPC growth through beauraucracy
+		} else if (lowerClassNPCRatio <= lowerClassOptimalRatio - 0.05) { // NPCs see business opportunities and provide more sexual services, minimum increase of 500, max of 10% of previous
+			NPCSexSupply.lowerClass += Math.trunc(Math.clamp((NPCSexSupply.lowerClass * 4 + lowerClassOptimal) / 5 - NPCSexSupply.lowerClass, 500, NPCSexSupply.lowerClass * 0.1) * (1 - V.sexSupplyBarriers.lowerClass / 5)); // Slow down NPC growth through bureaucracy
 		} else {
 			NPCSexSupply.lowerClass = Math.trunc(NPCSexSupply.lowerClass * (1 + normalRandInt(0, 20) / 1000)); // Some random fluxuations whenever the NPC supply is roughly on target.
 		}
@@ -2627,11 +2627,12 @@ globalThis.supplyPoliciesReport = function(NPCclass) {
  * @returns {DocumentFragment}
  */
 globalThis.ownershipReport = function(short) {
-	const fragment = document.createDocumentFragment();
-	let cssClass;
-	let warning = false;
+	const fragment = new DocumentFragment();
 	const ownership = V.arcologies[0].ownership;
 	const minority = V.arcologies[0].minority;
+	let cssClass;
+	let warning = false;
+
 	if (ownership <= minority + 5) {
 		cssClass = 'warning';
 		warning = true;
@@ -2640,8 +2641,10 @@ globalThis.ownershipReport = function(short) {
 	} else if (ownership >= minority) {
 		cssClass = 'yellow';
 	}
+
 	if (short === true) {
 		const span = document.createElement("span");
+
 		span.className = cssClass;
 		span.append(`${ownership}%`);
 		if (V.assistant.power >= 1 && ownership < 100) {
@@ -2649,18 +2652,19 @@ globalThis.ownershipReport = function(short) {
 		}
 		fragment.append("(", span, ")");
 	} else {
-		fragment.append("You own ", App.UI.DOM.makeElement("span", `${ownership}%`, "bold"),
+		fragment.append("You own ", App.UI.DOM.makeElement("span", `${ownership}%`, ["bold"]),
 			` of ${V.arcologies[0].name}, `);
 		if (minority > 0) {
-			fragment.append("against ", App.UI.DOM.makeElement("span", `${minority}%`, "bold"),
+			fragment.append("against ", App.UI.DOM.makeElement("span", `${minority}%`, ["bold"]),
 				" owned by the second most significant holder.");
 		} else {
 			fragment.append("and there are no other significant holders.");
 		}
 		if (warning) {
-			App.UI.DOM.appendNewElement("span", fragment, " A dangerously narrow margin of control.", "warning");
+			App.UI.DOM.appendNewElement("span", fragment, " A dangerously narrow margin of control.", ["warning"]);
 		}
 	}
+
 	return fragment;
 };
 
diff --git a/src/neighbor/neighborDisplay.js b/src/neighbor/neighborDisplay.js
index abae89e2f7c7815ea3416e5a226adb701607ded8..68b35bfb33b5611b0ca3184eda19d353cce5946c 100644
--- a/src/neighbor/neighborDisplay.js
+++ b/src/neighbor/neighborDisplay.js
@@ -11,7 +11,7 @@ App.Neighbor.Display = class {
 	 * @returns {Element}
 	 */
 	render() {
-		const container = document.createElement("div");
+		const container = App.UI.DOM.makeElement("div", null, ["margin-top"]);
 		container.id = this.containerID;
 
 		function makeSortLink(/** @type {string} */ title, /** @type {string} */ mode) {