diff --git a/src/js/DefaultRules.tw b/src/js/DefaultRules.tw
index 2f79ad354c2ed8d87cc1df71b154b042865437ac..3bdf83d9f78cbb872625f2df26bf33f39fa8ef1a 100644
--- a/src/js/DefaultRules.tw
+++ b/src/js/DefaultRules.tw
@@ -286,9 +286,6 @@ window.DefaultRules = (function() {
 					case "work as a servant":
 						r += `<br>${slave.slaveName} has been automatically assigned to work in ${V.servantsQuartersName}.`;
 						break;
-					case "work as a servant":
-						r += `<br>${slave.slaveName} has been automatically assigned to work in ${V.servantsQuartersName}.`;
-						break;
 					case "learn in the schoolroom":
 						r += `<br>${slave.slaveName} has been automatically assigned to study in ${V.schoolroomName}.`;
 						break;
@@ -931,7 +928,7 @@ window.DefaultRules = (function() {
 		// Asset Growth 
 		const growth_drugs = new Set(["breast injections", "intensive breast injections", "breast redistributors", "butt injections", "intensive butt injections", "butt redistributors", "lip injections", "lip atrophiers", "penis enhancement", "intensive penis enhancement", "penis atrophiers", "testicle enhancement", "intensive testicle enhancement", "testicle atrophiers", "hyper breast injections", "hyper butt injections", "hyper penis enhancement", "hyper testicle enhancement"]);
 		if ((slave.drugs == "super fertility drugs" || slave.drugs == "fertility drugs") && isFertile(slave)) {
-			r += `<br>slave.slaveName is on slave.drugs and will not be considered for drug enhancement until that regime is complete.`;
+			r += `<br>${slave.slaveName} is on ${slave.drugs} and will not be considered for drug enhancement until that regime is complete.`;
 			return;
 		} else if ((rule.growth_boobs == "no default setting" && rule.growth_butt == "no default setting" && rule.growth_lips == "no default setting" && rule.growth_dick == "no default setting" && rule.growth_dick == "no default setting" && rule.growth_balls == "no default setting")) {
 			return;
diff --git a/src/js/rulesAssistantOptions.tw b/src/js/rulesAssistantOptions.tw
index a2a355f5a20770f9dfa4f99db8e86dd2b36283df..f848ceaacf3b744f544c72cccf3cc579155d487f 100644
--- a/src/js/rulesAssistantOptions.tw
+++ b/src/js/rulesAssistantOptions.tw
@@ -181,7 +181,6 @@ window.rulesAssistantOptions = (function() {
 				value.setAttribute("type", "text");
 				value.classList.add("rajs-value"); // 
 				// call the variable binding when the input field is no longer being edited, and when the enter key is pressed
-				value.onfocusout = () => { this.inputEdited(); };
 				value.onblur = () => {this.inputEdited(); };
 				value.onkeypress = (e) => { if (returnP(e)) this.inputEdited(); };
 			} else {
@@ -468,6 +467,7 @@ window.rulesAssistantOptions = (function() {
 	class ApplicationLog extends Element {
 		render() {
 			const elem = document.createElement("div");
+			clearSummaryCache();
 			elem.innerHTML = V.slaves.map(slave => DefaultRules(slave)).join("");
 			return elem;
 		}
@@ -476,7 +476,7 @@ window.rulesAssistantOptions = (function() {
 	class RenameField extends Element {
 		constructor(root) {
 			super();
-			this.element.onfocusout = () => changeName(this.element.value, root);
+			this.element.onblur = () => changeName(this.element.value, root);
 			this.element.onkeypress = (e) => { if (returnP(e)) changeName(this.element.value, root); };
 		}
 
@@ -660,7 +660,7 @@ window.rulesAssistantOptions = (function() {
 			min.setAttribute("type", "text");
 			min.value = "" + data.value[0];
 			min.onkeypress = e => { if (returnP(e)) this.setmin(min.value); };
-			min.onfocusout = e => this.setmin(min.value);
+			min.onblur = e => this.setmin(min.value);
 			this.min = min;
 			elem.appendChild(min);
 
@@ -674,7 +674,7 @@ window.rulesAssistantOptions = (function() {
 			max.setAttribute("type", "text");
 			max.value = "" + data.value[1];
 			max.onkeypress = e => { if (returnP(e)) this.setmax(max.value); };
-			max.onfocusout = e => this.setmax(max.value);
+			max.onblur = e => this.setmax(max.value);
 			this.max = max;
 			elem.appendChild(max);
 
@@ -733,7 +733,7 @@ window.rulesAssistantOptions = (function() {
 			input.setAttribute("type", "text");
 			input.value = JSON.stringify(data.value);
 			input.onkeypress = e => { if (returnP(e)) this.setValue(input); };
-			input.onfocusout = e => this.setValue(input);
+			input.onblur = e => this.setValue(input);
 			this.input = input;
 			elem.appendChild(input);
 
@@ -772,14 +772,14 @@ window.rulesAssistantOptions = (function() {
 			if (V.club > 0) items.push("Club");
 			if (V.arcade > 0) items.push("Arcade");
 			if (V.dairy > 0) items.push("Dairy");
-			if (V.servantQuarters > 0) items.push("Servant Quarters");
+			if (V.servantsQuarters > 0) items.push("Servant Quarters");
 			if (V.masterSuite > 0) items.push("Master Suite");
 			if (V.schoolroom > 0) items.push("Schoolroom");
 			if (V.spa > 0) items.push("Spa");
 			if (V.clinic > 0) items.push("Clinic");
 			if (V.cellblock > 0) items.push("Cellblock");
 			items.forEach(
-				i => this.appendChild(new ButtonItem(i, this.getAttribute(i), current_rule.condition.assignment.includes(i))));
+				i => this.appendChild(new ButtonItem(i, this.getAttribute(i), current_rule.condition.assignment.includes(this.getAttribute(i)))));
 		}
 
 		onchange() {
@@ -1185,10 +1185,10 @@ window.rulesAssistantOptions = (function() {
 	class LeggingsList extends List {
 		constructor() {
 			const items = [
-				"no default settings",
-				"none",
-				"short stockings",
-				"long stockings",
+				["no default settings"],
+				["none"],
+				["short stockings"],
+				["long stockings"],
 			];
 			super("Leg accessory", items);
 			this.setValue(current_rule.set.legAccessory);
diff --git a/src/js/slaveSummaryWidgets.tw b/src/js/slaveSummaryWidgets.tw
new file mode 100644
index 0000000000000000000000000000000000000000..d203af4331c8e9da9dbc2783854d5016b376ca08
--- /dev/null
+++ b/src/js/slaveSummaryWidgets.tw
@@ -0,0 +1,10 @@
+:: Slave Summary Widgets JS [script]
+
+window.clearSummaryCache = function clearSummaryCache(slave) {
+	if (!slave)
+		setup.summaryCache = {};
+	else if (slave instanceof Object && slave.ID !== Infinity && slave.ID !== -Infinity)
+		setup.summaryCache[slave.ID] = undefined;
+	else
+		setup.summaryCache[slave] = undefined;
+};
diff --git a/src/pregmod/widgets/slaveSummaryWidgets.tw b/src/pregmod/widgets/slaveSummaryWidgets.tw
index 66f01f09b50a41f5a6e914c899083f9cdab678d9..3a0877f83de0b8730d748a80a8c2514c8cc1faed 100644
--- a/src/pregmod/widgets/slaveSummaryWidgets.tw
+++ b/src/pregmod/widgets/slaveSummaryWidgets.tw
@@ -25,13 +25,7 @@
 <</widget>>
 
 <<widget "ClearSummaryCache">>
-<<if !$args[0]>>
-	<<set setup.summaryCache = {}>>
-<<elseif _.isObject($args[0]) && _.isFinite($args[0].ID)>>
-	<<set setup.summaryCache[$args[0].ID] = undefined>>
-<<else>>
-	<<set setup.summaryCache[$args[0]] = undefined>>
-<</if>>
+	<<run clearSummaryCache($args[0])>>
 <</widget>>
 
 <<widget "SlaveSummaryUncached">>