diff --git a/js/utils.js b/js/utils.js
index 6c7d7f8cfee61be92ca2324cea2623b14b713a17..1ae61021a84ecd78a35bc5f0c424cad0cf95c5b4 100644
--- a/js/utils.js
+++ b/js/utils.js
@@ -157,6 +157,14 @@ function capFirstChar(string) {
 	return string.charAt(0).toUpperCase() + string.substr(1);
 }
 
+/**
+ * @param {string} string
+ * @returns {string}
+ */
+function uncapFirstChar(string) {
+	return string.charAt(0).toLowerCase() + string.substr(1);
+}
+
 /**
  * @param {string} word
  * @returns {string}
diff --git a/src/events/intro/customizeSlaveTrade/customizeSlaveTrade.css b/src/events/intro/customizeSlaveTrade/customizeSlaveTrade.css
new file mode 100644
index 0000000000000000000000000000000000000000..7e521dc1f36ff9226170a7cd55d0588263437658
--- /dev/null
+++ b/src/events/intro/customizeSlaveTrade/customizeSlaveTrade.css
@@ -0,0 +1,61 @@
+.customize-slave-trade-ul {
+    list-style-type: none;
+    content: '';
+    width: 100%;
+    display: inline-block;
+}
+
+.customize-slave-trade-li-container {
+	float: right;
+	width: 5em;
+	text-align: left;
+}
+
+.customize-slave-trade-li {
+    text-align: center;
+    display: inline-block;
+    padding: 2px;
+    width: 15em;
+}
+
+span.plusButton {
+	display: inline-block;
+	line-height: 25px;
+	width: 20px;
+	text-align: center;
+	border: 1px solid rgba(0, 139, 0, 0.3);
+	background: rgba(0, 139, 0, 0.2);
+	margin: 2px;
+}
+
+span.minusButton {
+	display: inline-block;
+	line-height: 25px;
+	width: 20px;
+	text-align: center;
+	border: 1px solid rgba(184, 0, 0, 0.3);
+	background: rgba(184, 0, 0, 0.2);
+	margin: 2px;
+}
+
+span.zeroButton {
+	display: inline-block;
+	line-height: 25px;
+	width: 20px;
+	text-align: center;
+	border: 1px solid rgba(0, 0, 255, 0.3);
+	background: rgba(0, 0, 255, 0.2);
+	margin: 2px;
+}
+
+span.plusButton:hover { background: rgba(0, 139, 0, 0.4); }
+span.minusButton:hover { background: rgba(184, 0, 0, 0.4); }
+span.zeroButton:hover { background: rgba(0, 0, 255, 0.4); }
+
+span.plusButton > a { display: block; }
+span.minusButton > a { display: block; }
+span.zeroButton > a { display: block; }
+
+span.plusButton > a:hover { text-decoration: none; }
+span.minusButton > a:hover { text-decoration: none; }
+span.zeroButton > a:hover { text-decoration: none; }
\ No newline at end of file
diff --git a/src/events/intro/customizeSlaveTrade/customizeSlaveTrade.js b/src/events/intro/customizeSlaveTrade/customizeSlaveTrade.js
new file mode 100644
index 0000000000000000000000000000000000000000..186861aa9b5fda008e21ce435cb40a4ec17bc156
--- /dev/null
+++ b/src/events/intro/customizeSlaveTrade/customizeSlaveTrade.js
@@ -0,0 +1,425 @@
+App.UI.CustomSlaveTrade = function() {
+	const frag = new DocumentFragment();
+	let span = document.createElement("span");
+	let baseControlsFilter = "all";
+	App.UI.DOM.appendNewElement("p", frag, `When civilization turned upon itself, some countries readily took to enslaving their own. Others were raided by their neighbors for their desirable, and profitable, citizens. Which nationalities were most affected by the booming slave trade, and thus, likely to appear in your local slave markets?`);
+	App.UI.DOM.appendNewElement("p", frag, `+ to increase pop. – to reduce pop. 0 to remove entirely`, "bold");
+
+	span.id = "pop-control";
+	span.append(baseNationalitiesControls());
+	frag.append(span);
+
+	return frag;
+
+	function baseNationalitiesControls() {
+		const frag = new DocumentFragment();
+		let p = document.createElement("p");
+		let destination;
+		let div;
+		let array;
+		let list;
+		let span;
+		const nationalitiesCheck = App.UI.nationalitiesCheck();
+
+		if (hashSum(V.nationalities) < 1) {
+			App.UI.DOM.appendNewElement("div", p, `You cannot be a slaveowner without a slave trade. Please add nationalities to continue.`, "note");
+		} else {
+			destination = (V.customWA === 0) ? "Intro Summary" : "Extreme Intro";
+			App.UI.DOM.appendNewElement(
+				"div",
+				p,
+				App.UI.DOM.passageLink(
+					"Confirm customization",
+					destination,
+					() => baseControlsFilter = undefined
+				)
+			);
+		}
+		frag.append(p);
+
+		App.UI.DOM.appendNewElement("p", frag, App.UI.nationalitiesDisplay());
+
+		p = document.createElement("p");
+
+		/* Fine control tweaking of populations */
+		App.UI.DOM.appendNewElement("div", p, `Adjust slave populations:`);
+
+		p.append(sectionBreak());
+
+		/* Filter controls */
+		div = document.createElement("div");
+		App.UI.DOM.appendNewElement("span", div, `Filter by Race: `);
+		array = [];
+		for (let i = 0; i < setup.filterRaces.length; i++) {
+			const race = setup.filterRaces[i];
+			if (baseControlsFilter === uncapFirstChar(race).replace(/[ -]/g, '')) {
+				array.push(
+					App.UI.DOM.disabledLink(
+						race,
+						["currently selected race"]
+					)
+				);
+			} else {
+				array.push(
+					App.UI.DOM.link(
+						race,
+						() => {
+							baseControlsFilter = uncapFirstChar(setup.filterRaces[i]).replace(/[ -]/g, '');
+							refresh();
+						}
+					)
+				);
+			}
+		}
+		div.append(App.UI.DOM.generateLinksStrip(array));
+		p.append(div);
+
+		div = document.createElement("div");
+		App.UI.DOM.appendNewElement("span", div, `Filter by Region: `);
+		array = [];
+		for (let i = 0; i < setup.filterRegions.length; i++) {
+			const region = setup.filterRegions[i];
+			if (baseControlsFilter === uncapFirstChar(region).replace(/[ -]/g, '')) {
+				array.push(
+					App.UI.DOM.disabledLink(
+						region,
+						["currently selected region"]
+					)
+				);
+			} else {
+				array.push(
+					App.UI.DOM.link(
+						region,
+						() => {
+							baseControlsFilter = uncapFirstChar(setup.filterRegions[i]).replace(/[ -]/g, '');
+							refresh();
+						}
+					)
+				);
+			}
+		}
+		div.append(App.UI.DOM.generateLinksStrip(array));
+		p.append(div);
+
+		p.append(sectionBreak());
+
+		div = document.createElement("div");
+		div.style.whiteSpace = "nowrap";
+		div.style.float = "left";
+
+		/* Unfiltered pop controls */
+		list = document.createElement("UL");
+		list.classList.add("customize-slave-trade-ul");
+		if (baseControlsFilter === "all") {
+			for (let i = 0; i < setup.baseNationalities.length; i++) {
+				const nation = setup.baseNationalities[i];
+				const li = document.createElement("LI");
+				li.classList.add("customize-slave-trade-li");
+				li.append(nation);
+
+				span = document.createElement("span");
+				span.classList.add("customize-slave-trade-li-container");
+				App.UI.DOM.appendNewElement(
+					"span",
+					span,
+					App.UI.DOM.link(
+						`+`,
+						() => {
+							hashPush(V.nationalities, setup.baseNationalities[i]);
+							refresh();
+						}
+					),
+					"plusButton"
+				);
+				if (nationalitiesCheck[nation]) {
+					App.UI.DOM.appendNewElement(
+						"span",
+						span,
+						App.UI.DOM.link(
+							`-`,
+							() => {
+								V.nationalities[setup.baseNationalities[i]] -= 1;
+								if (V.nationalities[setup.baseNationalities[i]] <= 0) {
+									delete V.nationalities[setup.baseNationalities[i]];
+								}
+								refresh();
+							}
+						),
+						"minusButton"
+					);
+				}
+				if (V.nationalities[nation] > 1) {
+					App.UI.DOM.appendNewElement(
+						"span",
+						span,
+						App.UI.DOM.link(
+							`0`,
+							() => {
+								delete V.nationalities[setup.baseNationalities[i]];
+								refresh();
+							}
+						),
+						"zeroButton"
+					);
+				}
+				li.append(span);
+				list.append(li);
+			}
+			p.append(list);
+			App.UI.DOM.appendNewElement("div", p, `By dominant race/ethnicity (hover over the name to see the nationalities affected):`);
+			list = document.createElement("UL");
+			list.classList.add("customize-slave-trade-ul");
+			for (const race of setup.filterRaces) {
+				const racialNationalities = setup.baseNationalities.filter(function(n) {
+					let races = setup.raceSelector[n] || setup.raceSelector[''];
+					return races[uncapFirstChar(race)] * 3.5 > hashSum(races);
+				});
+
+				if (racialNationalities.length > 0) {
+					const li = document.createElement("LI");
+					li.classList.add("customize-slave-trade-li");
+					li.title = racialNationalities.length > 0 ? racialNationalities.join(", ") : "(none)";
+					li.append(race);
+					span = document.createElement("span");
+					span.classList.add("customize-slave-trade-li-container");
+					App.UI.DOM.appendNewElement(
+						"span",
+						span,
+						App.UI.DOM.link(
+							`+`,
+							() => {
+								setup.baseNationalities.filter(function(n) {
+									let races = setup.raceSelector[n] || setup.raceSelector[''];
+									return races[uncapFirstChar(race)] * 3.5 > hashSum(races);
+								}).forEach(function(n) { hashPush(V.nationalities, n); });
+								refresh();
+							}
+						),
+						"plusButton"
+					);
+					App.UI.DOM.appendNewElement(
+						"span",
+						span,
+						App.UI.DOM.link(
+							`0`,
+							() => {
+								setup.baseNationalities.filter(function(n) {
+									let races = setup.raceSelector[n] || setup.raceSelector[''];
+									return races[uncapFirstChar(race)] * 3.5 > hashSum(races);
+								}).forEach(function(n) { delete V.nationalities[n]; });
+
+								refresh();
+							}
+						),
+						"zeroButton"
+					);
+					li.append(span);
+					list.append(li);
+				}
+			}
+		} else {
+			/* Filtered pop controls */
+			const controlsNationality = setup[baseControlsFilter + 'Nationalities'];
+			const keys = Object.keys(controlsNationality);
+			for (let i = 0; i < keys.length; i++) {
+				const li = document.createElement("LI");
+				li.classList.add("customize-slave-trade-li");
+				const nation = keys[i];
+				li.append(nation);
+				span = document.createElement("span");
+				span.classList.add("customize-slave-trade-li-container");
+				App.UI.DOM.appendNewElement(
+					"span",
+					span,
+					App.UI.DOM.link(
+						`+`,
+						() => {
+							hashPush(V.nationalities, keys[i]);
+							refresh();
+						}
+					),
+					"plusButton"
+				);
+
+				if (nationalitiesCheck[nation]) {
+					App.UI.DOM.appendNewElement(
+						"span",
+						span,
+						App.UI.DOM.link(
+							`-`,
+							() => {
+								V.nationalities[keys[i]] -= 1;
+								if (V.nationalities[keys[i]] <= 0) {
+									delete V.nationalities[keys[i]];
+								}
+								refresh();
+							}
+						),
+						"minusButton"
+					);
+				}
+				if (V.nationalities[nation] > 1) {
+					App.UI.DOM.appendNewElement(
+						"span",
+						span,
+						App.UI.DOM.link(
+							`0`,
+							() => {
+								delete V.nationalities[keys[i]];
+								refresh();
+							}
+						),
+						"zeroButton"
+					);
+				}
+				li.append(span);
+				list.append(li);
+			}
+		}
+		p.append(list);
+		frag.append(p);
+
+		div = document.createElement("div");
+
+		div.append(
+			App.UI.DOM.link(
+				"Reset filters",
+				() => {
+					baseControlsFilter = "all";
+					refresh();
+				}
+			)
+		);
+
+		div.append(" | ");
+
+		div.append(
+			App.UI.DOM.link(
+				"Clear all nationalities",
+				() => {
+					V.nationalities = {};
+					refresh();
+				}
+			)
+		);
+
+		frag.append(div);
+
+		frag.append(sectionBreak());
+
+		div = document.createElement("div");
+		div.append(`Vanilla presets: `);
+		div.append(generatePresetLinks("Vanilla"));
+		frag.append(div);
+
+		div = document.createElement("div");
+		div.append(`Mod presets: `);
+		div.append(generatePresetLinks("Mod"));
+		frag.append(div);
+
+		p = document.createElement("p");
+		App.UI.DOM.appendNewElement(
+			"span",
+			p,
+			App.UI.DOM.link(
+				"Export Settings",
+				() => {
+					settingsExport();
+				}
+			)
+		);
+		p.append(" | ");
+		App.UI.DOM.appendNewElement(
+			"span",
+			p,
+			App.UI.DOM.link(
+				"Import Settings",
+				() => {
+					settingsImport();
+				}
+			)
+		);
+		frag.append(p);
+		div = document.createElement("div");
+		div.id = "importExportArea";
+		frag.append(div);
+
+		return frag;
+	}
+
+	function sectionBreak() {
+		const hr = document.createElement("hr");
+		hr.style.margin = "0";
+		return hr;
+	}
+
+	function refresh() {
+		return jQuery('#pop-control').empty().append(baseNationalitiesControls());
+	}
+
+	function settingsExport() {
+		let textArea = document.createElement("textarea");
+		textArea.value = JSON.stringify(V.nationalities);
+		$("#importExportArea").html(textArea);
+	}
+
+	function settingsImport() {
+		let textArea = document.createElement("textarea");
+		let button = document.createElement("button");
+		button.name = "Load";
+		button.innerHTML = "Load";
+		button.onclick = () => {
+			V.nationalities = JSON.parse(textArea.value);
+			State.display(State.passage);
+		};
+
+		$("#importExportArea").html("").append(textArea).append(button);
+	}
+
+	function generatePresetLinks(group) {
+		let links = [];
+		for (const [name, nationalities] of App.Data.NationalityPresets[group]) {
+			links.push(
+				App.UI.DOM.link(
+					name,
+					() => {
+						V.nationalities = nationalities;
+						refresh();
+					}
+				)
+			);
+		}
+		return App.UI.DOM.generateLinksStrip(links);
+	}
+};
+
+App.UI.nationalitiesDisplay = function() {
+	const p = document.createElement("p");
+
+	/* Generates cloned array of V.nationalities, removing duplicates and then sorting */
+	const nationalitiesCheck = App.UI.nationalitiesCheck();
+
+	/* Prints distribution of V.nationalities, using nationalitiesCheck to render array */
+	let percentPerPoint = 100.0 / hashSum(V.nationalities);
+	let len = Object.keys(nationalitiesCheck).length;
+	let j = 0;
+	for (const nation in nationalitiesCheck) {
+		const span = document.createElement("span");
+		span.append(`${nation} `);
+		App.UI.DOM.appendNewElement("span", span, (V.nationalities[nation] * percentPerPoint).toFixed(2), "orange");
+		j++;
+		if (j < len) {
+			span.append(` | `);
+		}
+		p.append(span);
+	}
+	return p;
+};
+
+App.UI.nationalitiesCheck = function() {
+	return Object.assign(
+		{
+			// Player can add custom nations here.
+		},
+		V.nationalities);
+};
diff --git a/src/events/intro/customizeSlaveTrade/customizeSlaveTrade.tw b/src/events/intro/customizeSlaveTrade/customizeSlaveTrade.tw
new file mode 100644
index 0000000000000000000000000000000000000000..3d00a9c55e166cb6a97fb6d76e3983fbe98d0aba
--- /dev/null
+++ b/src/events/intro/customizeSlaveTrade/customizeSlaveTrade.tw
@@ -0,0 +1,10 @@
+:: Customize Slave Trade [nobr]
+
+<<if ndef $nationalities>>
+	<<set $nationalities = {}>>
+<</if>>
+<<if ndef $customWA>>
+	<<set $customWA = 0>>
+<</if>>
+<<includeDOM App.UI.CustomSlaveTrade()>>
+
diff --git a/src/events/intro/initNationalities.js b/src/events/intro/initNationalities.js
index b6a93a5c228d88da1f984d310430313884930610..4ec5a805b35db22e4de6316c3469664797a33450 100644
--- a/src/events/intro/initNationalities.js
+++ b/src/events/intro/initNationalities.js
@@ -544,8 +544,6 @@ App.Intro.initNationalities = function() {
 
 	/* Nationalities Setup */
 
-	delete V.nationalitiesCheck; /* Removes unique nationalities array to avoid var bloat */
-
 	if (!V.customVariety) {
 		/* If non-custom variety, empties or defines $nationalities */
 		V.nationalities = {};
diff --git a/src/events/intro/introSummary.tw b/src/events/intro/introSummary.tw
index 8f268af067f0a75cddb306aebc34e958ed2ecaca..b687c9ffb8db6b3c90e2b52542ae774b74554bda 100644
--- a/src/events/intro/introSummary.tw
+++ b/src/events/intro/introSummary.tw
@@ -239,18 +239,9 @@ You may review your settings before clicking "Continue" to begin.<br>
 		.customButton("Adjust the slave trade", () => {V.customWA = 0; V.customVariety = 1}, "Customize Slave Trade")
 		.customButton("Stop customizing", () => {delete V.customVariety})>>
 
-		<<if ndef $nationalitiesCheck>> /* NGP: regenerate $nationalitiesCheck from previous game's $nationalities array */
-			<div id="SilentlyButWithStyle" style="display: none;"><<include "Customize Slave Trade">></div>
-		<</if>>
 		<<run _options.addOption("").addCustomElement(`
 			<hr style="margin:0">
-			<<set _len = Object.keys($nationalitiesCheck).length>>
-			<<set _j = 0>>
-			<<for _nation, _i range $nationalitiesCheck>>
-				<<print _nation>> @@.orange;<<print (($nationalities[_nation]/hashSum($nationalities))*100).toFixed(2)>>%@@
-				<<set _j++>>
-				<<if _j < _len>> |	<</if>>
-			<</for>>
+			<<includeDOM App.UI.nationalitiesDisplay()>>
 			<br style="clear:both"><hr style="margin:0">
 		`)>>
 	<</if>> /* closes $customVariety is defined */
diff --git a/src/gui/css/mainStyleSheet.css b/src/gui/css/mainStyleSheet.css
index 62228ef762102cadf8c9868598463a9a9d739419..5e81eb57fc2ce7ccb4f0f8d5d275f347a5a52bf7 100644
--- a/src/gui/css/mainStyleSheet.css
+++ b/src/gui/css/mainStyleSheet.css
@@ -136,48 +136,6 @@ img.paperdoll {
 	margin-left: 0;
 }
 
-span.plusButton {
-	display: inline-block;
-	line-height: 25px;
-	width: 20px;
-	text-align: center;
-	border: 1px solid rgba(0, 139, 0, 0.3);
-	background: rgba(0, 139, 0, 0.2);
-	margin: 2px 0;
-}
-
-span.minusButton {
-	display: inline-block;
-	line-height: 25px;
-	width: 20px;
-	text-align: center;
-	border: 1px solid rgba(184, 0, 0, 0.3);
-	background: rgba(184, 0, 0, 0.2);
-	margin: 2px 0;
-}
-
-span.zeroButton {
-	display: inline-block;
-	line-height: 25px;
-	width: 20px;
-	text-align: center;
-	border: 1px solid rgba(0, 0, 255, 0.3);
-	background: rgba(0, 0, 255, 0.2);
-	margin: 2px 0;
-}
-
-span.plusButton:hover { background: rgba(0, 139, 0, 0.4); }
-span.minusButton:hover { background: rgba(184, 0, 0, 0.4); }
-span.zeroButton:hover { background: rgba(0, 0, 255, 0.4); }
-
-span.plusButton > a { display: block; }
-span.minusButton > a { display: block; }
-span.zeroButton > a { display: block; }
-
-span.plusButton > a:hover { text-decoration: none; }
-span.minusButton > a:hover { text-decoration: none; }
-span.zeroButton > a:hover { text-decoration: none; }
-
 /* Colors are made as css classes, to allow them to be changed for a light color scheme (for example). */
 /* a version is for this case: <span class="-.."><a>text</a></span> */
 .link, .link a { color: var(--link-color) } /* link color */
diff --git a/src/js/customizeSlaveTrade.js b/src/js/customizeSlaveTrade.js
deleted file mode 100644
index ad9d5cfe0dda86f41119954fb7c5463fbde10d00..0000000000000000000000000000000000000000
--- a/src/js/customizeSlaveTrade.js
+++ /dev/null
@@ -1,28 +0,0 @@
-App.CustomSlaveTrade = {
-	export: function() {
-		let textArea = document.createElement("textarea");
-		textArea.value = JSON.stringify(V.nationalities);
-		$("#importExportArea").html(textArea);
-	},
-
-	import: function() {
-		let textArea = document.createElement("textarea");
-		let button = document.createElement("button");
-		button.name = "Load";
-		button.innerHTML = "Load";
-		button.onclick = () => {
-			V.nationalities = JSON.parse(textArea.value);
-			State.display(State.passage);
-		};
-
-		$("#importExportArea").html("").append(textArea).append(button);
-	},
-
-	generatePresetLinks: function(group) {
-		let links = [];
-		for (const [name, nationalities] of App.Data.NationalityPresets[group]) {
-			links.push(App.UI.link(name, () => V.nationalities = nationalities, [], passage()));
-		}
-		return links.join(" | ");
-	}
-};
diff --git a/src/pregmod/basenationalitiesControls.tw b/src/pregmod/basenationalitiesControls.tw
deleted file mode 100644
index db31d717d44317bde8a815bd28e0deb7b3476eac..0000000000000000000000000000000000000000
--- a/src/pregmod/basenationalitiesControls.tw
+++ /dev/null
@@ -1,168 +0,0 @@
-:: Basenationalities Controls [nobr]
-
-<<if hashSum($nationalities) < 1>>
-	//You cannot be a slaveowner without a slave trade. Please add nationalities to continue.//
-<<else>>
-	<<link "Confirm customization">>
-		<<unset $baseControlsFilter>>
-		<<if $customWA == 0>>
-			<<goto "Intro Summary">>
-		<<else>>
-			<<goto "Extreme Intro">>
-		<</if>>
-	<</link>>
-<</if>>
-<br>
-
-/* Generates cloned array of $nationalities, removing duplicates and then sorting */
-<<set $nationalitiesCheck = Object.assign({}, $nationalities)>>
-
-/* Prints distribution of $nationalities, using $nationalitiesCheck to render array */
-<<set _percentPerPoint = 100.0 / hashSum($nationalities)>>
-<<set _len = Object.keys($nationalitiesCheck).length>>
-<<set _j = 0>>
-<<for _nation, _i range $nationalitiesCheck>>
-	_nation @@.orange;<<= ($nationalities[_nation] * _percentPerPoint).toFixed(2)>>%@@
-	<<set _j++>>
-	<<if _j < _len>> | <</if>>
-<</for>>
-<<unset _percentPerPoint>>
-<br><br>
-
-/* Fine control tweaking of populations */
-Adjust slave populations:
-<br style="clear:both"><hr style="margin:0">
-
-/* Filter controls */
-Filter by Race:
-<<for _i = 0; _i < setup.filterRaces.length; _i++>>
-	<<set _race = setup.filterRaces[_i]>>
-	<<if $baseControlsFilter == _race.toLowerCase().replace(/[ -]/g, '')>>
-		<<print _race>>
-	<<else>>
-		<<print "
-			<<link _race>>
-				<<set $baseControlsFilter = setup.filterRaces[" + _i + "].toLowerCase().replace(/[ -]/g, '')>>
-				<<replace '#PopControl'>><<include 'Basenationalities Controls'>><</replace>>
-			<</link>>
-		">>
-	<</if>>
-	<<if _i < setup.filterRaces.length-1>>
-		|
-	<</if>>
-<</for>>
-<br>
-Filter by Region:
-<<for _i = 0; _i < setup.filterRegions.length; _i++>>
-	<<set _region = setup.filterRegions[_i]>>
-	<<if $baseControlsFilter == _region.toLowerCase().replace(/[ -]/g, '')>>
-		<<print _region>>
-	<<else>>
-		<<print "
-			<<link _region>>
-				<<set $baseControlsFilter = setup.filterRegions[" + _i + "].toLowerCase().replace(/[ -]/g, '')>>
-				<<replace '#PopControl'>><<include 'Basenationalities Controls'>><</replace>>
-			<</link>>
-		">>
-	<</if>>
-	<<if _i < setup.filterRegions.length-1>>
-		|
-	<</if>>
-<</for>>
-<br style="clear:both"><hr style="margin:0">
-
-<div style="white-space: nowrap">
-/* Unfiltered pop controls */
-<<if $baseControlsFilter == "all">>
-	<<for _i = 0; _i < setup.baseNationalities.length; _i++>>
-		<div style="float: left;">
-		<<set _nation = setup.baseNationalities[_i]>>
-		<<print "
-		_nation
-			@@.plusButton;<<link '+'>>
-				<<set hashPush($nationalities, setup.baseNationalities["+_i+"])>>
-				<<replace '#PopControl'>><<include 'Basenationalities Controls'>><</replace>>
-			<</link>>@@
-		">>
-		<<if def $nationalitiesCheck[_nation]>>
-			<<print "
-				@@.minusButton;<<link '–'>>
-					<<set $nationalities[setup.baseNationalities["+_i+"]] -= 1>>
-					<<if $nationalities[setup.baseNationalities["+_i+"]] <= 0>>
-						<<set delete $nationalities[setup.baseNationalities["+_i+"]]>>
-					<</if>>
-					<<replace '#PopControl'>><<include 'Basenationalities Controls'>><</replace>>
-				<</link>>@@
-			">>
-		<</if>>
-		<<if $nationalities[_nation] > 1 >>
-			<<print "
-				@@.zeroButton;<<link '0'>>
-					<<set delete $nationalities[setup.baseNationalities["+_i+"]]>>
-					<<replace '#PopControl'>><<include 'Basenationalities Controls'>><</replace>>
-				<</link>>@@
-			">>
-		<</if>>
-		<<if _i < setup.baseNationalities.length-1>>|&nbsp;<</if>>
-		</div>
-	<</for>>
-	<div style="clear: both;">By dominant race/ethnicity (hover over the name to see the nationalities affected):</div>
-	<<for _race range setup.filterRaces>>
-		<<set _racialNationalities = setup.baseNationalities.filter(function(n) {
-			var races = setup.raceSelector[n] || setup.raceSelector[''];
-			return races[_race.toLowerCase()] * 3.5 > hashSum(races); })>>
-		<<if _racialNationalities.length > 0>>
-			<<= "<div style='float: left; width: 13em; padding: 0 5px;' title='"
-				+ (_racialNationalities.length > 0 ? _racialNationalities.join(", ") : "(none)")
-				+"'>_race @@.plusButton; <<link '+'>>
-				<<run setup.baseNationalities.filter(function(n) {
-						var races = setup.raceSelector[n] || setup.raceSelector[''];
-						return races['" + _race.toLowerCase() + "'] * 3.5 > hashSum(races); }).forEach(function(n) { hashPush($nationalities, n);})>>
-				<<replace '#PopControl'>><<include 'Basenationalities Controls'>><</replace>>
-			<</link>>@@ @@.zeroButton;<<link '0'>>
-				<<run setup.baseNationalities.filter(function(n) {
-						var races = setup.raceSelector[n] || setup.raceSelector[''];
-						return races['" + _race.toLowerCase() + "'] * 3.5 > hashSum(races); }).forEach(function(n) { delete $nationalities[n]; })>>
-				<<replace '#PopControl'>><<include 'Basenationalities Controls'>><</replace>>
-			<</link>>@@</div>">>
-		<</if>>
-	<</for>>
-<<else>>
-/* Filtered pop controls */
-	<<set _controlsNationality = setup[$baseControlsFilter+'Nationalities']>>
-	<<set _keys = Object.keys(_controlsNationality)>>
-	<<for _i = 0; _i < _keys.length; _i++>>
-		<div style="float: left;">
-		<<set _nation = _keys[_i]>>
-		<<print "
-		_nation
-			@@.plusButton;<<link '+'>>
-				<<set hashPush($nationalities, _keys[" + _i + "])>>
-				<<replace '#PopControl'>><<include 'Basenationalities Controls'>><</replace>>
-			<</link>>@@
-		">>
-		<<if def $nationalitiesCheck[_nation]>>
-			<<print "
-				@@.minusButton;<<link '–'>>
-					<<set $nationalities[_keys["+_i+"]] -= 1>>
-					<<if $nationalities[_keys["+_i+"]] <= 0>>
-						<<set delete $nationalities[_keys["+_i+"]]>>
-					<</if>>
-					<<replace '#PopControl'>><<include 'Basenationalities Controls'>><</replace>>
-				<</link>>@@
-			">>
-			<</if>>
-		<<if $nationalities[_nation] > 1 >>
-			<<print "
-				@@.zeroButton;<<link '0'>>
-					<<set delete $nationalities[_keys["+_i+"]]>>
-					<<replace '#PopControl'>><<include 'Basenationalities Controls'>><</replace>>
-				<</link>>@@
-			">>
-		<</if>>
-		<<if _i < _keys.length-1>>|&nbsp;<</if>>
-		</div>
-	<</for>>
-<</if>>
-<div style="clear: both; height: 0;"></div>
-</div>
diff --git a/src/pregmod/customizeSlaveTrade.tw b/src/pregmod/customizeSlaveTrade.tw
deleted file mode 100644
index 9d402df398b7a97c822b348f99c6148e40482ef4..0000000000000000000000000000000000000000
--- a/src/pregmod/customizeSlaveTrade.tw
+++ /dev/null
@@ -1,36 +0,0 @@
-:: Customize Slave Trade [nobr]
-
-<<if ndef $nationalities>>
-	<<set $nationalities = {}>>
-<</if>>
-<<if ndef $baseControlsFilter>>
-	<<set $baseControlsFilter = "all">>
-<</if>>
-<<if ndef $customWA>>
-	<<set $customWA = 0>>
-<</if>>
-<p>
-	When civilization turned upon itself, some countries readily took to enslaving their own. Others were raided by their neighbors for their desirable, and profitable, citizens. Which nationalities were most affected by the booming slave trade, and thus, likely to appear in your local slave markets?
-</p>
-<p style="font-weight:Bold">
-	+ to increase pop. – to reduce pop. 0 to remove entirely
-</p>
-<span id="PopControl">
-	<<include "Basenationalities Controls">>
-</span>
-<div>
-	[[Reset filters|passage()][$baseControlsFilter = "all"]] | [[Clear all nationalities|passage()][$nationalities = {}]]
-</div>
-<br style="clear:both"><hr style="margin:0">
-<div>
-	Vanilla presets:
-	<<= App.CustomSlaveTrade.generatePresetLinks("Vanilla")>>
-</div>
-<div>
-	Mod presets:
-	<<= App.CustomSlaveTrade.generatePresetLinks("Mod")>>
-</div>
-<p>
-	<<link "Export Settings">><<script>>App.CustomSlaveTrade.export()<</script>><</link>> | <<link "Import Settings">><<script>>App.CustomSlaveTrade.import()<</script>><</link>>
-</p>
-<div id="importExportArea"></div>