diff --git a/src/budget/budget.js b/src/budget/budget.js
index d6a1c43d2383654f477a4edf00032b849ce09402..0439e8e0cc63bb811344b19943fa70a3fde2d94f 100644
--- a/src/budget/budget.js
+++ b/src/budget/budget.js
@@ -8,6 +8,12 @@ App.Budget.table = function(budgetType) {
 	const income = (budgetType === "cash") ? "lastWeeksCashIncome" : "lastWeeksRepIncome";
 	const expenses = (budgetType === "cash") ? "lastWeeksCashExpenses" : "lastWeeksRepExpenses";
 
+	// Make the total 0 first, otherwise it gets counted as part of the new total
+	V[income].Total = 0;
+	V[income].Total = hashSum(V[income]);
+	V[expenses].Total = 0;
+	V[expenses].Total = hashSum(V[expenses]);
+
 	const tableDiv = document.createElement("div");
 	tableDiv.classList.add("budget");
 
@@ -382,21 +388,17 @@ App.Budget.table = function(budgetType) {
 
 		App.UI.DOM.appendNewElement("div", tableDiv, "Tracked totals");
 
-		// Make the total 0 first, otherwise it gets counted as part of the new total
-		V[income].Total = 0;
-		V[income].Total = hashSum(V[income]);
-		App.UI.DOM.appendNewElement("div", tableDiv, formatColorDOM(Math.trunc(V[income].Total)), ["number", "final-result"]);
-		V[expenses].Total = 0;
-		V[expenses].Total = hashSum(V[expenses]);
-		App.UI.DOM.appendNewElement("div", tableDiv, formatColorDOM(Math.trunc(V[expenses].Total)),
+		App.UI.DOM.appendNewElement("div", tableDiv, formatNumber(Math.trunc(V[income].Total)), ["number",
+			"final-result"]);
+		App.UI.DOM.appendNewElement("div", tableDiv, formatNumber(Math.trunc(V[expenses].Total)),
 			["number", "final-result"]);
-		App.UI.DOM.appendNewElement("div", tableDiv, formatColorDOM(Math.trunc(V[income].Total + V[expenses].Total)),
+		App.UI.DOM.appendNewElement("div", tableDiv, formatNumber(Math.trunc(V[income].Total + V[expenses].Total)),
 			["number", "final-result"]);
 
 		if (budgetType === "cash") {
 			App.UI.DOM.appendNewElement("div", tableDiv, `Expenses budget for week ${V.week + 1}`);
 			tableDiv.append(document.createElement("div"));
-			App.UI.DOM.appendNewElement("div", tableDiv, formatColorDOM(-V.costs), ["number"]);
+			App.UI.DOM.appendNewElement("div", tableDiv, formatNumber(-V.costs), ["number"]);
 			tableDiv.append(document.createElement("div"));
 		}
 
@@ -404,16 +406,17 @@ App.Budget.table = function(budgetType) {
 		tableDiv.append(document.createElement("div"));
 		tableDiv.append(document.createElement("div"));
 		if (budgetType === "cash") {
-			App.UI.DOM.appendNewElement("div", tableDiv, formatColorDOM(V.cash - V.cashLastWeek), ["number"]);
+			App.UI.DOM.appendNewElement("div", tableDiv, formatNumber(V.cash - V.cashLastWeek), ["number"]);
 		} else {
-			App.UI.DOM.appendNewElement("div", tableDiv, formatColorDOM(V.rep - V.repLastWeek), ["number"]);
+			App.UI.DOM.appendNewElement("div", tableDiv, formatNumber(V.rep - V.repLastWeek), ["number"]);
 		}
 
 		if (
 			(budgetType === "cash" && (V.cash - V.cashLastWeek) === (V.lastWeeksCashIncome.Total + V.lastWeeksCashExpenses.Total)) ||
 			(budgetType === "rep" && (V.rep - V.repLastWeek) === (V.lastWeeksRepIncome.Total + V.lastWeeksRepExpenses.Total))
 		) {
-			App.UI.DOM.appendNewElement("div", tableDiv, `The books are balanced, ${properTitle()}!`, ["green", "last-row"]);
+			App.UI.DOM.appendNewElement("div", tableDiv, `The books are balanced, ${properTitle()}!`, ["green",
+				"last-row"]);
 			tableDiv.append(document.createElement("div"));
 			tableDiv.append(document.createElement("div"));
 			tableDiv.append(document.createElement("div"));
@@ -422,11 +425,11 @@ App.Budget.table = function(budgetType) {
 			tableDiv.append(document.createElement("div"));
 			tableDiv.append(document.createElement("div"));
 			if (budgetType === "cash") {
-				App.UI.DOM.appendNewElement("div", tableDiv, formatColorDOM(
+				App.UI.DOM.appendNewElement("div", tableDiv, formatNumber(
 					(V.cash - V.cashLastWeek) - (V.lastWeeksCashIncome.Total + V.lastWeeksCashExpenses.Total)
 				), ["number"]);
 			} else {
-				App.UI.DOM.appendNewElement("div", tableDiv, formatColorDOM(
+				App.UI.DOM.appendNewElement("div", tableDiv, formatNumber(
 					(V.rep - V.repLastWeek) - (V.lastWeeksRepIncome.Total + V.lastWeeksRepExpenses.Total)
 				), ["number"]);
 			}
@@ -444,11 +447,11 @@ App.Budget.table = function(budgetType) {
 		const r = [];
 		if (V[income][category] || V[expenses][category] || V.showAllEntries[budgetType === "cash" ? "costsBudget" : "repBudget"]) {
 			r.push(App.UI.DOM.appendNewElement("div", tableDiv, node, ["entry"]));
-			r.push(App.UI.DOM.appendNewElement("div", tableDiv, formatColorDOM(V[income][category]),
+			r.push(App.UI.DOM.appendNewElement("div", tableDiv, formatNumber(V[income][category]),
 				["number", "entry"]));
-			r.push(App.UI.DOM.appendNewElement("div", tableDiv, formatColorDOM(-Math.abs(V[expenses][category])),
+			r.push(App.UI.DOM.appendNewElement("div", tableDiv, formatNumber(-Math.abs(V[expenses][category])),
 				["number", "entry"]));
-			r.push(App.UI.DOM.appendNewElement("div", tableDiv, formatColorDOM(V[income][category] + V[expenses][category]),
+			r.push(App.UI.DOM.appendNewElement("div", tableDiv, formatNumber(V[income][category] + V[expenses][category]),
 				["number", "entry"]));
 		}
 		return r;
@@ -463,9 +466,9 @@ App.Budget.table = function(budgetType) {
 		const r = [];
 		if (groupIn || groupEx || V.showAllEntries[budgetType === "cash" ? "costsBudget" : "repBudget"]) {
 			r.push(App.UI.DOM.appendNewElement("div", tableDiv, title, ["group"]));
-			r.push(App.UI.DOM.appendNewElement("div", tableDiv, formatColorDOM(groupIn), ["group", "number"]));
-			r.push(App.UI.DOM.appendNewElement("div", tableDiv, formatColorDOM(groupEx), ["group", "number"]));
-			r.push(App.UI.DOM.appendNewElement("div", tableDiv, formatColorDOM(groupIn + groupEx),
+			r.push(App.UI.DOM.appendNewElement("div", tableDiv, formatNumber(groupIn), ["group", "number"]));
+			r.push(App.UI.DOM.appendNewElement("div", tableDiv, formatNumber(groupEx), ["group", "number"]));
+			r.push(App.UI.DOM.appendNewElement("div", tableDiv, formatNumber(groupIn + groupEx),
 				["group", "number"]));
 		}
 		return r;
@@ -504,12 +507,12 @@ App.Budget.table = function(budgetType) {
 		}
 	}
 
-	function formatColorDOM(num, invert = false) {
+	function formatNumber(num, invert = false) {
 		if (invert) {
 			num = -1 * num;
 		}
 		let span = document.createElement('span');
-		span.textContent = (budgetType === "cash") ? cashFormat(num) : num;
+		span.append(budgetType === "cash" ? cashFormat(num) : repFormat(num, V.assistant.power < 3));
 		if (num === 0) {
 			// num overwrites gray, so we don't use it here.
 			span.classList.add("gray");
diff --git a/src/budget/repBudget.js b/src/budget/repBudget.js
index f3a1be735b4c0eee337340735e5f31cb08134efb..1e1c0a01f2cbbf9e94f5b52e8ceea86668fbe33d 100644
--- a/src/budget/repBudget.js
+++ b/src/budget/repBudget.js
@@ -23,7 +23,13 @@ App.Budget.rep = function() {
 	 * @returns {HTMLParagraphElement}
 	 */
 	function intro() {
-		return App.UI.DOM.makeElement("p", `Reputation is a difficult thing to quantify, ${properTitle()}. Here you see an overview of topics that interest people in the arcology, and in turn, reflect on your own reputation. Much like a finance report, you can see here how your choices last week moved you closer to or further from your goals, and head any issues off before they get worse.`, "scene-intro");
+		const p = document.createElement("p");
+		p.classList.add("scene-intro");
+		p.append(`Reputation is a difficult thing to quantify, ${properTitle()}. Here you see an overview of topics that interest people in the arcology, and in turn, reflect on your own reputation. Much like a finance report, you can see here how your choices last week moved you closer to or further from your goals, and head any issues off before they get worse.`);
+		if (V.assistant.power >= 3) {
+			p.append(" Thanks to my powerful power computer system I can track reputation changes to an unprecedented degree.");
+		}
+		return p;
 	}
 
 	/**
diff --git a/src/js/economyJS.js b/src/js/economyJS.js
index 95886e2f86c4630d6d6eb4337697f7f260c0d67e..2033a3ddbb07f07846f643125f8ae25e139c15a2 100644
--- a/src/js/economyJS.js
+++ b/src/js/economyJS.js
@@ -2597,7 +2597,7 @@ globalThis.cashX = function(cost, what, who) {
  */
 globalThis.repX = function(rep, what, who) {
 	if (!Number.isFinite(rep)) {
-		V.lastWeeksRepErrors.push(`Expected a finite number for ${what}, but got ${repFormat(rep)}`);
+		V.lastWeeksRepErrors.push(`Expected a finite number for ${what}, but got ${rep}`);
 		return 0;
 	}
 
@@ -2627,14 +2627,14 @@ globalThis.repX = function(rep, what, who) {
 			// switch over to the net amount gained for the rest of the logic
 			rep = curvedRep;
 		} else {
-			V.lastWeeksRepErrors.push(`Unknown place "${what}" gained you ${repFormat(rep)}`);
+			V.lastWeeksRepErrors.push(`Unknown place "${what}" gained you ${rep}`);
 		}
 	} else if (rep < 0) { // EXPENSES
 		// record the action
 		if (typeof V.lastWeeksRepExpenses[what] !== 'undefined') {
 			V.lastWeeksRepExpenses[what] += rep;
 		} else {
-			V.lastWeeksRepErrors.push(`Unknown place "${what}" cost you ${repFormat(rep)}`);
+			V.lastWeeksRepErrors.push(`Unknown place "${what}" cost you ${rep}`);
 		}
 
 		// record the slave, if available
diff --git a/src/js/utilsUnits.js b/src/js/utilsUnits.js
index 1082f861a7e56c94d194171c5aa938e09d57db5c..76e56352048feafb3d5e592f6020d62b3bd5767b 100644
--- a/src/js/utilsUnits.js
+++ b/src/js/utilsUnits.js
@@ -355,45 +355,50 @@ globalThis.cashFormatColor = function(s = 0, invert = false) {
 /**
  * Formats the given number as reputation.
  *
- * Positive values returns in green, negative values return in red.
  * @param {number} s The number to format.
- * @returns {string} Returns a given number of reputation as a string.
+ * @param {boolean} [fuzzy] Only show an approximate value.
+ * @returns {string} Returns a string of the number formatted as a currency.
  */
-globalThis.repFormat = function(s = 0) {
-	if (V.cheatMode === 1 || V.debugMode === 1) {
-		if (s > 0) {
-			return `<span class="green">${commaNum(Math.round(s * 100) / 100)} rep</span>`;
-		} else if (s < 0) {
-			return `<span class="red">${commaNum(Math.round(s * 100) / 100)} rep</span>`;
-		} else {
-			return `${commaNum(Math.round(s * 100) / 100)} rep`;
-		}
+globalThis.repFormat = function(s, fuzzy = true) {
+	if (!fuzzy || V.cheatMode === 1 || V.debugMode === 1) {
+		return `${commaNum(Math.round(s * 100) / 100)}`;
 	} else {
-		/* In order to calculate just how much any one category matters so we can show a "fuzzy" symbolic value to the player, we need to know how "busy" reputation was this week. To calculate this, I ADD income to expenses. Why? 100 - 100 and 10000 - 10000 BOTH are 0, but a +50 event matters a lot more in the first case than the second. I exclude overflow and curving from the calculation because it's not a "real" expense for our purposes, and divide by half just to make percentages a bit easier. */
-		let weight = s / (((V.lastWeeksRepIncome.Total - V.lastWeeksRepExpenses.Total) + (V.lastWeeksRepExpenses.overflow + V.lastWeeksRepExpenses.curve)) / 2);
+		// In order to calculate just how much any one category matters, so we can show a "fuzzy" symbolic value to the
+		// player, we need to know how "busy" reputation was this week. To calculate this, I ADD income to expenses.
+		// Why? 100 - 100 and 10000 - 10000 BOTH are 0, but a +50 event matters a lot more in the first case than the
+		// second. I exclude overflow and curving from the calculation because it's not a "real" expense for our
+		// purposes, and divide by half just to make percentages a bit easier.
+		// Curving is recorded on the income to keep the numbers correct.
+		const cleanGain = V.lastWeeksRepIncome.Total + V.lastWeeksRepIncome.curve;
+		const cleanLoss = V.lastWeeksRepExpenses.Total + V.lastWeeksRepExpenses.overflow;
+		const movement = cleanGain - cleanLoss;
+		const weight = s / Math.abs(movement / 2);
+		// \u2212 = Mathematical minus sign
+		let r;
 		if (weight > 0.60) {
-			return `<span class="green">+++++ rep</span>`;
+			r = `+++++`;
 		} else if (weight > 0.45) {
-			return `<span class="green">++++ rep</span>`;
+			r = `++++`;
 		} else if (weight > 0.30) {
-			return `<span class="green">+++ rep</span>`;
+			r = `+++`;
 		} else if (weight > 0.15) {
-			return `<span class="green">++ rep</span>`;
+			r = `++`;
 		} else if (weight > 0.0) {
-			return `<span class="green">+ rep</span>`;
+			r = `+`;
 		} else if (weight === 0) {
-			return "0 rep";
+			r = "0";
 		} else if (weight < -0.60) {
-			return `<span class="red">&minus;&minus;&minus;&minus;&minus; rep</span>`;
+			r = "\u2212\u2212\u2212\u2212\u2212";
 		} else if (weight < -0.45) {
-			return `<span class="red">&minus;&minus;&minus;&minus; rep</span>`;
+			r = `\u2212\u2212\u2212\u2212`;
 		} else if (weight < -0.30) {
-			return `<span class="red">&minus;&minus;&minus; rep</span>`;
+			r = `\u2212\u2212\u2212`;
 		} else if (weight < -0.15) {
-			return `<span class="red">&minus;&minus; rep</span>`;
+			r = `\u2212\u2212`;
 		} else if (weight < 0) {
-			return `<span class="red">&minus; rep</span>`;
+			r = `\u2212`;
 		}
+		return r;
 	}
 };