diff --git a/src/markets/specificMarkets/schoolFutanari.js b/src/markets/specificMarkets/schoolFutanari.js
index df008cb4ffc9258106df203b78469f29fe21b846..dbcfc77bb7851e9367a31cb1eaceb137cd74f107 100644
--- a/src/markets/specificMarkets/schoolFutanari.js
+++ b/src/markets/specificMarkets/schoolFutanari.js
@@ -161,9 +161,9 @@ App.Markets.TFS = function() {
 		App.UI.DOM.appendNewElement("p", el, `The Sisters offer a member selected for sale into slavery for inspection via video call. The feed is of an exhausted futa, fast asleep. Whatever ceremonies the Sisters perform before releasing a member into slavery, they seem to have tired her out. There are indistinct but obviously sexual sounds audible in the background; it sounds like an orgy with a very large number of participants is going on nearby.`);
 	}
 	let costMod = 0.8;
-	if (V.HA.schoolSale !== 0) {
+	if (V.TFS.schoolSale !== 0) {
 		costMod = costMod * 0.5;
-	} else if (V.HA.schoolUpgrade !== 0) {
+	} else if (V.TFS.schoolUpgrade !== 0) {
 		costMod = costMod * 0.8;
 	}
 	el.append(
diff --git a/src/markets/specificMarkets/schools.js b/src/markets/specificMarkets/schools.js
index e6b5c8154a1ff2d41ac059fb9bce5c96d1689869..4d756131e97982c2b2e7d132c5df0b9fd8d9b294 100644
--- a/src/markets/specificMarkets/schools.js
+++ b/src/markets/specificMarkets/schools.js
@@ -19,9 +19,9 @@ App.Markets.GRI = function() {
 
 	App.UI.DOM.appendNewElement("p", el, `GRI offers a fresh graduate for inspection via video call. The interview takes place in the graduate's bare-metal holding cell. Disturbingly, it is strongly reminiscent of an enclosure for a lab animal, only scaled up to contain a lab animal of human dimensions.`);
 	let costMod = 1;
-	if (V.HA.schoolSale !== 0) {
+	if (V.GRI.schoolSale !== 0) {
 		costMod = 0.5;
-	} else if (V.HA.schoolUpgrade !== 0) {
+	} else if (V.GRI.schoolUpgrade !== 0) {
 		costMod = 0.8;
 	}
 	el.append(
@@ -49,9 +49,9 @@ App.Markets.LDE = function() {
 
 	App.UI.DOM.appendNewElement("p", el, `L'École des Enculées offers a fresh graduate for inspection via video call. The interview takes place in the dormitory for the oldest class of girls. Absurdly sexual squeals repeatedly interrupt the call, making it very clear that someone close by the interviewee is experiencing a strong combination of anal pain and anal pleasure.`);
 	let costMod = 1;
-	if (V.HA.schoolSale !== 0) {
+	if (V.LDE.schoolSale !== 0) {
 		costMod = 0.5;
-	} else if (V.HA.schoolUpgrade !== 0) {
+	} else if (V.LDE.schoolUpgrade !== 0) {
 		costMod = 0.8;
 	}
 	el.append(
@@ -80,9 +80,9 @@ App.Markets.NUL = function() {
 
 	App.UI.DOM.appendNewElement("p", el, `Nueva Universidad de Libertad offers a fresh graduate for inspection via video call. The interview takes place in said graduate's dormitory. The room is sparse and utilitarian, and immaculately clean. Likely by design, it looks like the set from an old sci-fi movie.`);
 	let costMod = 1;
-	if (V.HA.schoolSale !== 0) {
+	if (V.NUL.schoolSale !== 0) {
 		costMod = 0.5;
-	} else if (V.HA.schoolUpgrade !== 0) {
+	} else if (V.NUL.schoolUpgrade !== 0) {
 		costMod = 0.8;
 	}
 	el.append(
@@ -117,9 +117,9 @@ App.Markets.SCP = function() {
 	App.UI.DOM.appendNewElement("p", el, `St. Claver Preparatory offers a fresh graduate for inspection via video call. The interview takes place in a very obviously medical office, with medical supply robots wheeling past its glass walls and nurses hurrying to and fro.
 	`);
 	let costMod = 1;
-	if (V.HA.schoolSale !== 0) {
+	if (V.SCP.schoolSale !== 0) {
 		costMod = 0.5;
-	} else if (V.HA.schoolUpgrade !== 0) {
+	} else if (V.SCP.schoolUpgrade !== 0) {
 		costMod = 0.8;
 	}
 	el.append(
@@ -151,13 +151,13 @@ App.Markets.TCR = function() {
 	}
 	App.UI.DOM.appendNewElement("p", el, r.join(" "));
 	let costMod = 1;
-	if (V.HA.schoolSale !== 0) {
+	if (V.TCR.schoolSale !== 0) {
 		costMod = 0.5;
-	} else if (V.HA.schoolUpgrade !== 0) {
+	} else if (V.TCR.schoolUpgrade !== 0) {
 		costMod = 0.8;
 	}
 	el.append(
-		App.Markets.purchaseFramework("TCR", {costMod:costMod}, "cow", "cattle")
+		App.Markets.purchaseFramework("TCR", {costMod:costMod, sTitleSingular: "cow", sTitlePlural: "cattle"})
 	);
 
 	return el;
@@ -187,9 +187,9 @@ App.Markets.TGA = function() {
 
 	App.UI.DOM.appendNewElement("p", el, `The Gymnasium-Academy offers a fresh graduate for inspection via video call. The interview takes place in an office overlooking an expansive workout room, in which a large number of naked, fit young bodies are performing punishing workout routines.`);
 	let costMod = 1;
-	if (V.HA.schoolSale !== 0) {
+	if (V.TGA.schoolSale !== 0) {
 		costMod = 0.5;
-	} else if (V.HA.schoolUpgrade !== 0) {
+	} else if (V.TGA.schoolUpgrade !== 0) {
 		costMod = 0.8;
 	}
 	el.append(
@@ -251,9 +251,9 @@ App.Markets.TSS = function() {
 
 	App.UI.DOM.appendNewElement("p", el, `The Slavegirl School offers a fresh graduate for inspection via video call. The interview takes place in a faculty member's office. Absurdly, it's barely distinguishable from an office at any traditional institution of higher education. The only giveaway is the profusion of sex toys on the desk and the pornography on the walls.`);
 	let costMod = 1;
-	if (V.HA.schoolSale !== 0) {
+	if (V.TSS.schoolSale !== 0) {
 		costMod = 0.5;
-	} else if (V.HA.schoolUpgrade !== 0) {
+	} else if (V.TSS.schoolUpgrade !== 0) {
 		costMod = 0.8;
 	}
 	el.append(
@@ -269,9 +269,9 @@ App.Markets.TUO = function() {
 
 	App.UI.DOM.appendNewElement("p", el, `The Utopian Orphanage offers a fresh graduate for inspection. The interview takes place in the girl's private room, where she showcases her education and wits.`);
 	let costMod = 1;
-	if (V.HA.schoolSale !== 0) {
+	if (V.TUO.schoolSale !== 0) {
 		costMod = 0.6;
-	} else if (V.HA.schoolUpgrade !== 0) {
+	} else if (V.TUO.schoolUpgrade !== 0) {
 		costMod = 1.2;
 	}
 	el.append(