diff --git a/src/js/datatypeCleanupJS.js b/src/js/datatypeCleanupJS.js
index 1da0b6d9ea36550b2f8765ca78012a6d72c784f6..5614cf2288be2bd6047637c67b43c20f92d70aaa 100644
--- a/src/js/datatypeCleanupJS.js
+++ b/src/js/datatypeCleanupJS.js
@@ -2113,6 +2113,26 @@ App.Entity.Utils.RARuleDatatypeCleanup = function() {
 		moveProperties(set, 'surgery_', 'surgery');
 	}
 
+	/**
+	 * @param {App.RA.RuleSetters} set
+	 */
+	function correctStringValues(set) {
+		for (const [k, v] of Object.entries(set)) {
+			if (typeof v !== 'string') {
+				continue;
+			}
+			if (v === "null") {
+				set[k] = null;
+			}
+			if (k === 'assignment' || k === 'clothes') {
+				continue;
+			}
+			if (v[0].toLowerCase() !== v[0]) {
+				set[k] = v.charAt(0).toLowerCase() + v.substr(1);
+			}
+		}
+	}
+
 	/** @param {App.RA.RuleSetters} set */
 	function cleanupSetters(set) {
 		settersSchemeCleanup(set);
@@ -2160,6 +2180,8 @@ App.Entity.Utils.RARuleDatatypeCleanup = function() {
 		transformValues(set.surgery, ['butt', 'boobs', 'lips'], ensureNumTarget);
 
 		set.growth.intensity = Math.clamp(+set.growth.intensity, 0, 1) || 0;
+
+		correctStringValues(set);
 	}
 }();
 
diff --git a/src/js/rulesAssistantOptions.js b/src/js/rulesAssistantOptions.js
index caef5a7ec8f548ac6b40ea165c036111f6c3f0ce..d1f19b35858359d1829b953a8c4d3eead0b3366e 100644
--- a/src/js/rulesAssistantOptions.js
+++ b/src/js/rulesAssistantOptions.js
@@ -7,6 +7,7 @@
 
 window.rulesAssistantOptions = (function() {
 	"use strict";
+	const noDefaultSetting = {value: "!NDS!", text: "no default setting"};
 	let V;
 	/** @type {App.RA.Rule} */
 	let current_rule;
@@ -192,7 +193,7 @@ window.rulesAssistantOptions = (function() {
 			/** @private */
 			this._capitalizeShortcuts = capitalizeShortcuts;
 			if (allowNullValue) {
-				this.appendChild(new ListItem("No default setting", null));
+				this.appendChild(new ListItem(capFirstChar(noDefaultSetting.text), null));
 			}
 			data.forEach(item => this.appendChild(this._createListItem(...item)));
 		}
@@ -305,15 +306,15 @@ window.rulesAssistantOptions = (function() {
 			// now add options
 			if (allowNullValue) {
 				let nullOpt = document.createElement("option");
-				nullOpt.value = null;
-				nullOpt.text = "No default setting";
+				nullOpt.value = noDefaultSetting.value;
+				nullOpt.text = capFirstChar(noDefaultSetting.text);
 				this.value.appendChild(nullOpt);
 			}
 			for (const dr of data) {
-				const dv = Array.isArray(dr) && dr.length > 1 ? [dr[1], dr[0]] : [dr, dr];
+				const dv = Array.isArray(dr) ? (dr.length > 1 ? [dr[1], dr[0]] : [dr[0], dr[0]]) : [dr, dr];
 				let opt = document.createElement("option");
 				opt.value = dv[0];
-				opt.text = dv[1];
+				opt.text = capFirstChar(dv[1]);
 				this.value.appendChild(opt);
 			}
 			this.value.onchange = () => {
@@ -323,11 +324,11 @@ window.rulesAssistantOptions = (function() {
 		}
 
 		getData() {
-			return this.value.value;
+			return this.value.value === noDefaultSetting.value ? null : this.value.value;
 		}
 
 		setValue(what) {
-			this.value.value = what;
+			this.value.value = what === null ? noDefaultSetting.value : what;
 		}
 
 		inputEdited() {
@@ -346,7 +347,7 @@ window.rulesAssistantOptions = (function() {
 			super(prefix, data, allowNullValue, textinput, capitalizeShortcuts);
 			this.values = new Map();
 			if (allowNullValue) {
-				this.values.set(null, "no default setting");
+				this.values.set(noDefaultSetting.value, noDefaultSetting.text);
 			}
 			data.forEach(d => {
 				if (Array.isArray(d) && d.length > 1) {
@@ -714,7 +715,7 @@ window.rulesAssistantOptions = (function() {
 
 		render(element) {
 			const greeting = document.createElement("p");
-			greeting.innerHTML = `<em>${properTitle()}, I will review your slaves and make changes that will have a beneficial effect. Apologies, ${properTitle()}, but this function is... not fully complete. It may have some serious limitations. Please use the 'no default setting' option to identify areas I should not address.</em>`;
+			greeting.innerHTML = `<em>${properTitle()}, I will review your slaves and make changes that will have a beneficial effect. Apologies, ${properTitle()}, but this function is... not fully complete. It may have some serious limitations. Please use the '${noDefaultSetting.text}' option to identify areas I should not address.</em>`;
 			element.appendChild(greeting);
 			return element;
 		}
@@ -1844,7 +1845,7 @@ window.rulesAssistantOptions = (function() {
 			super();
 			this.sublists = [];
 			const pairs = [
-				["No default setting", () => this.nds()],
+				[capFirstChar(noDefaultSetting.text), () => this.nds()],
 				["Girlish figure", () => this.girlish()],
 				["Stacked figure", () => this.stacked()],
 				["Huge but functional", () => this.huge()],
@@ -2237,7 +2238,7 @@ window.rulesAssistantOptions = (function() {
 		constructor() {
 			// TODO: better data structure?
 			const pairs = [
-				["No default setting", {cum: null, milk: null}],
+				[capFirstChar(noDefaultSetting.text), {cum: null, milk: null}],
 				["Normal Diet", {cum: 0, milk: 0}],
 				["Cum Added", {cum: 1, milk: 0}],
 				["Milk Added", {cum: 0, milk: 1}],
@@ -2509,7 +2510,7 @@ window.rulesAssistantOptions = (function() {
 	class LensesList extends Element {
 		constructor() {
 			super(current_rule.set.eyeColor);
-			this.appendChild(new OptionsItem("No default setting", () => this.setValue(null)));
+			this.appendChild(new OptionsItem(capFirstChar(noDefaultSetting.text), () => this.setValue(null)));
 			this.colorlist = new LensesColorList();
 			this.shapelist = new LensesShapeList();
 			this.appendChild(this.colorlist);