diff --git a/src/data/backwardsCompatibility/BackwardsCompatibility.tw b/src/data/backwardsCompatibility/BackwardsCompatibility.tw
index a2f875078ffb081bc498c29cfd5e21cee2f56807..7c5f0ca9f4261fe12bc19c1a1dc5ae50ad69c38d 100644
--- a/src/data/backwardsCompatibility/BackwardsCompatibility.tw
+++ b/src/data/backwardsCompatibility/BackwardsCompatibility.tw
@@ -7,42 +7,4 @@
 
 /* resetOnNGPlus contains half of the variables we need, but we use it politely here instead of forcing it so it fills in holes instead of overwriting data */
 <<run App.Update.setNonexistantProperties(V, App.Data.resetOnNGPlus)>>
-
-<div>
-	<<= App.Update.oldVersions()>>
-</div>
-
-<div>
-	<<= App.Update.genePoolRecords()>>
-</div>
-
-<div>
-	<<= App.Update.globalVariables()>>
-</div>
-
-<div>
-	<<= App.Update.slaveVariables()>>
-</div>
-
-<div>
-	<<= App.Update.slaveRecords()>>
-</div>
-
-<div>
-	<<= App.Update.RAassistantData()>>
-</div>
-
-/* Sec Exp */
-<div>
-	<<= App.SecExp.Check.general()>>
-	<<if $secExpEnabled == 1>>
-		<br> <<include "SecExpBackwardCompatibility">>
-	<</if>>
-</div>
-<div>
-	<<= App.Update.autoshred()>>
-</div>
-/* leave this at the bottom of BC */
-<div>
-	<<= App.Update.cleanUp()>>
-</div>
+<<= App.Update.backwardsCompatibility()>>
\ No newline at end of file
diff --git a/src/data/backwardsCompatibility/backwardsCompatibility.js b/src/data/backwardsCompatibility/backwardsCompatibility.js
index af6491d0340b5714dc2ac2567efebc7c072ecefa..e7b44c351e4c3a69ef1f852e8015188788a5619b 100644
--- a/src/data/backwardsCompatibility/backwardsCompatibility.js
+++ b/src/data/backwardsCompatibility/backwardsCompatibility.js
@@ -51,6 +51,45 @@ App.Update.setExistantProperties = function(obj, array) {
 	}
 };
 
+App.Update.backwardsCompatibility = function() {
+	const backup = State.variables.clone();
+	let r = "";
+	try {
+		r += `<div>`;
+		r += App.Update.oldVersions();
+		r += `</div><div>`;
+		r += App.Update.genePoolRecords();
+		r += `</div><div>`;
+		r += App.Update.globalVariables();
+		r += `</div><div>`;
+		r += App.Update.slaveVariables();
+		r += `</div><div>`;
+		r += App.Update.slaveRecords();
+		r += `</div><div>`;
+		r += App.Update.RAassistantData();
+		r += `</div><div>`;
+
+		/* Sec Exp */
+		r += App.SecExp.Check.general();
+		r += `</div><div>`;
+		if (V.secExpEnabled === 1) {
+			r += `include "SecExpBackwardCompatibility"`;
+		}
+		r += `</div><div>`;
+		r += App.Update.autoshred();
+		/* leave this at the bottom of BC */
+		r += `</div><div>`;
+		r += App.Update.cleanUp();
+		r += `</div>`;
+	} catch (error) {
+		r += `print an error message that says backcompat failed and was reversed, please report it to us`;
+		V = backup;
+		throw (error); // rethrow the exception to Sugarcube so we get a fancy stack trace
+	}
+	console.log(r);
+	return r;
+};
+
 App.Update.globalVariables = function() {
 	let r = `Setting missing global variables... `;
 	if (Array.isArray(V.nationalities)) {