diff --git a/css/interaction/export.css b/css/interaction/export.css
index d54575954576d2049ff25d425cc8a7b9d21871b9..5fe2a1109fa2dd87edbeec36d69cdcd77bc9e4ca 100644
--- a/css/interaction/export.css
+++ b/css/interaction/export.css
@@ -1,6 +1,7 @@
-div.output {
+.export-field {
 	width: 100vw;
 	max-width: 100%;
 	word-break: break-all;
 	white-space: normal;
+	height: 80vh;
 }
diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js
index 920978bc9d64cd0d87b7009cfe35f20095660dbe..4dd106647c51a291caf6eb313b1e517ee14d5c1f 100644
--- a/src/js/DefaultRules.js
+++ b/src/js/DefaultRules.js
@@ -1663,7 +1663,7 @@ globalThis.DefaultRules = function(slave) {
 					message(`${slave.slaveName} has been put on a muscle building exercise regime.`, sourceRecord.muscles.val);
 				}
 			} else if (!isAmputee(slave) && ["slimming", "muscle building"].includes(slave.diet)) {
-				message(`${slave.slaveName} is at the target musculature, so ${his} diet has been normalized.`, sourceRecord.muscles.val);
+				message(`${slave.slaveName} is at the target musculature, so ${his} diet has been normalized.`, sourceRecord.diet);
 				dietRule(slave, rule);
 			} else {
 				dietRule(slave, rule);
diff --git a/src/js/reminder.js b/src/js/reminder.js
index 719581a6c7434f8bd0134a6c26d71c862349ad93..595923d3a6df429fb23bdf014ef99d61b21ca14f 100644
--- a/src/js/reminder.js
+++ b/src/js/reminder.js
@@ -1,6 +1,9 @@
 App.Reminders = (function() {
-	const displayDiv = document.createElement("div");
-	const addDiv = document.createElement("div");
+	/**
+	 *  @type {Array<function():void>}
+	 */
+	let activeViewRefreshers = [];
+
 	return {
 		add: add,
 		list: list,
@@ -8,6 +11,7 @@ App.Reminders = (function() {
 		slaveDisplay: slaveDisplay,
 		slaveLink: slaveLink,
 		dialog: dialog,
+		clear: clearActive,
 	};
 
 	/**
@@ -15,10 +19,11 @@ App.Reminders = (function() {
 	 * @param {number} week
 	 * @param {string} [category]
 	 * @param {number} [slaveID]
+	 * @returns {boolean} Whether a reminder was actually added or we aborted.
 	 */
 	function add(message, week, category = "manual", slaveID = 0) {
 		if (message === "" || message === null) {
-			return;
+			return false;
 		}
 		const entry = {message: message, week: week, category: category};
 		if (slaveID) {
@@ -32,6 +37,7 @@ App.Reminders = (function() {
 		} else {
 			V.reminders.splice(index, 0, entry);
 		}
+		return true;
 	}
 
 	/**
@@ -52,28 +58,23 @@ App.Reminders = (function() {
 
 		const outerSpan = document.createElement("span");
 
-		function replace() {
-			App.UI.DOM.replace(outerSpan, list({maxFuture, filter, link}));
-			App.Utils.scheduleSidebarRefresh();
-		}
-
 		/**
 		 * @param {FC.ReminderEntry} entry
 		 */
 		function clearEntry(entry) {
 			V.reminders.splice(V.reminders.indexOf(entry), 1);
-			replace();
+			refreshActive();
 		}
 
 		// We only want to remove visible entries
 		function clearOverdue() {
 			V.reminders = V.reminders.filter(e => e.week >= V.week || e.week > V.week + maxFuture || !filter(e));
-			replace();
+			refreshActive();
 		}
 
 		function clearAll() {
 			V.reminders = V.reminders.filter(e => e.week > V.week + maxFuture || !filter(e));
-			replace();
+			refreshActive();
 		}
 
 		let overdue = 0;
@@ -126,25 +127,27 @@ App.Reminders = (function() {
 	}
 
 	/**
-	 * @param {function():void} refresh
 	 * @param {string} [category]
 	 * @param {number} [slaveID]
 	 * @returns {HTMLDivElement}
 	 */
-	function addField(refresh, category, slaveID) {
-		jQuery(addDiv).empty();
+	function addField(category, slaveID) {
+		const addDiv = document.createElement("div");
 
 		let entry = "";
 		let week = 0;
 
 		addDiv.append(
-			App.UI.DOM.makeTextBox("", v => { entry = v; }),
-			" in ", App.UI.DOM.makeTextBox(0, v => { week = v; }, true), " weeks.",
+			App.UI.DOM.makeTextBox("", v => {
+				entry = v;
+			}),
+			" in ", App.UI.DOM.makeTextBox(0, v => {
+				week = v;
+			}, true), " weeks.",
 			" ", App.UI.DOM.link("Add", () => {
-				add(entry, V.week + week, category, slaveID);
-				refresh();
-				App.Utils.scheduleSidebarRefresh();
-				jQuery(addDiv).append(addField(refresh, category, slaveID));
+				if (add(entry, V.week + week, category, slaveID)) {
+					refreshActive();
+				}
 			})
 		);
 
@@ -153,10 +156,22 @@ App.Reminders = (function() {
 
 	/**
 	 * @param {boolean} [link=false] show passage links
+	 * @param {HTMLElement} [displayDiv] Only to be used by the refresh functionality
 	 * @returns {HTMLElement}
 	 */
-	function fullDisplay(link) {
-		jQuery(displayDiv).empty();
+	function fullDisplay(link, displayDiv) {
+		if (displayDiv) {
+			// If displayDiv is given, it either is currently being shown or the tree it belonged to was removed from
+			// the page. In that case we don't need to refresh it ever again.
+			if (!displayDiv.isConnected) {
+				return null;
+			}
+			jQuery(displayDiv).empty();
+		} else {
+			displayDiv = document.createElement("div");
+		}
+		activeViewRefreshers.push(() => fullDisplay(link, displayDiv));
+
 		displayDiv.append(App.UI.DOM.makeElement("h2", "Reminders"));
 
 		const listEl = list({link});
@@ -165,17 +180,27 @@ App.Reminders = (function() {
 		}
 
 		displayDiv.append(App.UI.DOM.makeElement("h3", "Add new"));
-		displayDiv.append(App.UI.DOM.makeElement("p", addField(() => fullDisplay(link))));
+		displayDiv.append(App.UI.DOM.makeElement("p", addField()));
 
 		return displayDiv;
 	}
 
 	/**
 	 * @param {number} slaveID
+	 * @param {HTMLElement} [displayDiv] Only to be used by the refresh functionality
 	 * @returns {HTMLElement}
 	 */
-	function slaveDisplay(slaveID) {
-		jQuery(displayDiv).empty();
+	function slaveDisplay(slaveID, displayDiv) {
+		if (displayDiv) {
+			if (!displayDiv.isConnected) {
+				return null;
+			}
+			jQuery(displayDiv).empty();
+		} else {
+			displayDiv = document.createElement("div");
+		}
+		activeViewRefreshers.push(() => slaveDisplay(slaveID, displayDiv));
+
 		displayDiv.append(App.UI.DOM.makeElement("h2", `Reminders for ${SlaveFullName(getSlave(slaveID))}`));
 
 		const listEl = list({filter: e => e.slaveID === slaveID});
@@ -184,7 +209,7 @@ App.Reminders = (function() {
 		}
 
 		displayDiv.append(App.UI.DOM.makeElement("h3", "Add new"));
-		displayDiv.append(App.UI.DOM.makeElement("p", addField(() => slaveDisplay(slaveID), "slave", slaveID)));
+		displayDiv.append(App.UI.DOM.makeElement("p", addField("slave", slaveID)));
 
 		return displayDiv;
 	}
@@ -211,4 +236,18 @@ App.Reminders = (function() {
 		$(Dialog.body()).empty().append(slaveID ? slaveDisplay(slaveID) : fullDisplay(showLinks));
 		Dialog.open();
 	}
+
+	function refreshActive() {
+		console.log(activeViewRefreshers.length);
+		const ars = activeViewRefreshers;
+		activeViewRefreshers = [];
+		for (const refresher of ars) {
+			refresher();
+		}
+		App.Utils.scheduleSidebarRefresh();
+	}
+
+	function clearActive() {
+		activeViewRefreshers = [];
+	}
 })();
diff --git a/src/npc/importSlave.js b/src/npc/importSlave.js
index 857a98725c745601d9b322bef5626ed2904c1a6d..675d24968595a78d4dbcee11a0a569c9f692778e 100644
--- a/src/npc/importSlave.js
+++ b/src/npc/importSlave.js
@@ -26,6 +26,6 @@ App.UI.SlaveInteract.importSlave = function() {
 App.UI.SlaveInteract.exportSlave = function(slave) {
 	const el = new DocumentFragment();
 	App.UI.DOM.appendNewElement("p", el, `Copy the following block of code for importing: `, "note");
-	App.UI.DOM.appendNewElement("code", el, toJson(slave));
+	App.UI.DOM.appendNewElement("textarea", el, toJson(slave), ["export-field"]);
 	return el;
 };
diff --git a/src/zz1-last/setupEventHandlers.js b/src/zz1-last/setupEventHandlers.js
index 44e3eb0ff12766cd4d9cd3e22cc761cfe6d0f20f..896ed386a423cbfecb38f5b1ab0d3a56fe463e76 100644
--- a/src/zz1-last/setupEventHandlers.js
+++ b/src/zz1-last/setupEventHandlers.js
@@ -14,6 +14,7 @@ $(document).on(":passageinit", () => {
 		delete V.passageSwitchHandler;
 	}
 	App.UI.Tabs.clear();
+	App.Reminders.clear();
 	profileEvents.passageinit();
 });