diff --git a/src/SecExp/js/secExp.js b/src/SecExp/js/secExp.js
index 3818dcc0ed090fef530916d5823f1edab76ff24a..d3cff6963bb24c358c1b27df25683eed4981817c 100644
--- a/src/SecExp/js/secExp.js
+++ b/src/SecExp/js/secExp.js
@@ -408,9 +408,11 @@ App.SecExp.Check = (function() {
 			V.SecExp = {settings:{show:V.SecExp.settings.show}};
 		}
 
+		delete V.SecExp.army;
+
 		if (V.secExpEnabled > 0) {
 			V.SecExp.core = V.SecExp.core || {};
-			V.SecExp.army = V.SecExp.army || {};
+
 			V.SecExp.core.trade = V.SecExp.core.trade || 0;
 			if (passage() === "Acquisition" || V.SecExp.core.trade === 0) {
 				const V = State.variables;
@@ -462,58 +464,54 @@ App.SecExp.Check = (function() {
 				V.SecExp.settings.battle.enabled = V.battlesEnabled;
 				delete V.battlesEnabled;
 			}
-				delete V.SecExp.battle;
-				V.SecExp.settings.battle.major = V.SecExp.settings.battle.major || {};
-				V.SecExp.settings.battle.frequency = V.SecExp.settings.battle.frequency || 1;
-				if (jsDef(V.battleFrequency)) {
-					V.SecExp.settings.battle.frequency = V.battleFrequency;
-					delete V.battleFrequency;
-				}
-				V.SecExp.settings.battle.force = V.SecExp.settings.battle.force || 0;
-				if (jsDef(V.forceBattle)) {
-					V.SecExp.settings.battle.force = V.forceBattle;
-					delete V.forceBattle;
-				}
+			delete V.SecExp.battle;
 
-				if (jsDef(V.readiness)) {
-					if(V.readiness === 10) {
-						V.sectionInFirebase = 1;
-					}
-					delete V.readiness;
+			V.SecExp.settings.battle.major = V.SecExp.settings.battle.major || {};
+			V.SecExp.settings.battle.frequency = V.SecExp.settings.battle.frequency || 1;
+			if (jsDef(V.battleFrequency)) {
+				V.SecExp.settings.battle.frequency = V.battleFrequency;
+				delete V.battleFrequency;
+			}
+			V.SecExp.settings.battle.force = V.SecExp.settings.battle.force || 0;
+			if (jsDef(V.forceBattle)) {
+				V.SecExp.settings.battle.force = V.forceBattle;
+				delete V.forceBattle;
+			}
+
+			if (jsDef(V.readiness)) {
+				if(V.readiness === 10) {
+					V.sectionInFirebase = 1;
 				}
+				delete V.readiness;
+			}
 
-				V.SecExp.settings.unitDescriptions = V.SecExp.settings.unitDescriptions || 0;
+			V.SecExp.settings.unitDescriptions = V.SecExp.settings.unitDescriptions || 0;
 
-				V.SecExp.settings.battle.allowSlavePrestige = V.SecExp.settings.battle.allowSlavePrestige || 1;
-				if (jsDef(V.allowPrestigeFromBattles)) {
-					V.SecExp.settings.battle.allowSlavePrestige = V.allowPrestigeFromBattles;
-					delete V.allowPrestigeFromBattles;
-				}
+			V.SecExp.settings.battle.allowSlavePrestige = V.SecExp.settings.battle.allowSlavePrestige || 1;
+			if (jsDef(V.allowPrestigeFromBattles)) {
+				V.SecExp.settings.battle.allowSlavePrestige = V.allowPrestigeFromBattles;
+				delete V.allowPrestigeFromBattles;
+			}
 
-				V.SecExp.settings.battle.major.enabled = V.SecExp.settings.battle.major.enabled || 1;
-				if (jsDef(V.majorBattlesEnabled)) {
-					V.SecExp.settings.battle.major.enabled = V.majorBattlesEnabled;
-					delete V.majorBattlesEnabled;
-				}
+			V.SecExp.settings.battle.major.enabled = V.SecExp.settings.battle.major.enabled || 1;
+			if (jsDef(V.majorBattlesEnabled)) {
+				V.SecExp.settings.battle.major.enabled = V.majorBattlesEnabled;
+				delete V.majorBattlesEnabled;
+			}
 
-				if (V.SecExp.settings.battle.major.enabled > 0) {
-					V.SecExp.settings.battle.major.gameOver = V.SecExp.settings.battle.major.gameOver || 1;
-					if (jsDef(V.majorBattleGameOver)) {
-						V.SecExp.settings.battle.major.gameOver = V.majorBattleGameOver;
-						delete V.majorBattleGameOver;
-					}
-					V.SecExp.settings.battle.major.force = V.SecExp.settings.battle.major.force || 0;
-					if (jsDef(V.forceMajorBattle)) {
-						V.SecExp.settings.battle.major.force = V.forceMajorBattle;
-						delete V.forceMajorBattle;
-					}
+			V.SecExp.settings.battle.major.gameOver = V.SecExp.settings.battle.major.gameOver || 1;
+			if (jsDef(V.majorBattleGameOver)) {
+				V.SecExp.settings.battle.major.gameOver = V.majorBattleGameOver;
+				delete V.majorBattleGameOver;
+			}
+			V.SecExp.settings.battle.major.force = V.SecExp.settings.battle.major.force || 0;
+			if (jsDef(V.forceMajorBattle)) {
+				V.SecExp.settings.battle.major.force = V.forceMajorBattle;
+				delete V.forceMajorBattle;
+			}
 
-					V.SecExp.settings.battle.major.mult = V.SecExp.settings.battle.major.mult || 1;
-					if (jsDef(V.majorBattleMult)) {
-						V.SecExp.settings.battle.major.mult = V.majorBattleMult;
-						delete V.majorBattleMult;
-					}
-				}
+			delete V.majorBattleMult;
+			delete V.SecExp.settings.battle.major.mult;
 
 			V.SecExp.settings.rebellion = V.SecExp.settings.rebellion || {};
 			V.SecExp.settings.rebellion.enabled = V.SecExp.settings.rebellion.enabled || 1;
@@ -522,22 +520,22 @@ App.SecExp.Check = (function() {
 				delete V.rebellionsEnabled;
 			}
 
-				V.SecExp.settings.rebellion.force = V.SecExp.settings.rebellion.force || 0;
-				if (jsDef(V.forceRebellion)) {
-					V.SecExp.settings.rebellion.force = V.forceRebellion;
-					delete V.forceRebellion;
-				}
-				V.SecExp.settings.rebellion.gameOver = V.SecExp.settings.rebellion.gameOver || 1;
-				if (jsDef(V.rebellionGameOver)) {
-					V.SecExp.settings.rebellion.gameOver = V.rebellionGameOver;
-					delete V.rebellionGameOver;
-				}
+			V.SecExp.settings.rebellion.force = V.SecExp.settings.rebellion.force || 0;
+			if (jsDef(V.forceRebellion)) {
+				V.SecExp.settings.rebellion.force = V.forceRebellion;
+				delete V.forceRebellion;
+			}
+			V.SecExp.settings.rebellion.gameOver = V.SecExp.settings.rebellion.gameOver || 1;
+			if (jsDef(V.rebellionGameOver)) {
+				V.SecExp.settings.rebellion.gameOver = V.rebellionGameOver;
+				delete V.rebellionGameOver;
+			}
 
-				V.SecExp.settings.rebellion.speed = V.SecExp.settings.rebellion.speed || 1;
-				if (jsDef(V.rebellionSpeed)) {
-					V.SecExp.settings.rebellion.speed = V.rebellionSpeed;
-					delete V.rebellionSpeed;
-				}
+			V.SecExp.settings.rebellion.speed = V.SecExp.settings.rebellion.speed || 1;
+			if (jsDef(V.rebellionSpeed)) {
+				V.SecExp.settings.rebellion.speed = V.rebellionSpeed;
+				delete V.rebellionSpeed;
+			}
 
 			if (V.SecExp.settings.battle.enabled + V.SecExp.settings.rebellion.enabled > 0) {
 				V.SecExp.settings.showStats = V.SecExp.settings.showStats || 0;
diff --git a/src/SecExp/widgets/miscSecExpWidgets.tw b/src/SecExp/widgets/miscSecExpWidgets.tw
index 35f83a4f6fb4811af7392ddaa41023c5587cb21d..33318b5a23398af041fd7bd46d523ee04144a553 100644
--- a/src/SecExp/widgets/miscSecExpWidgets.tw
+++ b/src/SecExp/widgets/miscSecExpWidgets.tw
@@ -251,9 +251,13 @@
 <</widget>>
 
 <<widget "replenishAllUnits">>
-	<<set _hasLossesM = 0>>
-	<<set _hasLossesS = 0>>
-	<<set _hasLossesMe = 0>>
+	<<set _hasLossesBots = 0, _hasLossesM = 0>>
+	<<set _hasLossesS = 0, _hasLossesMe = 0>>
+
+	<<if $secBots.troops < $secBots.maxTroops && $cash >= 500>>
+		<<set _hasLossesBots = 1>>
+		<<break>>
+	<</if>>
 
 	<<for _i = 0; _i < $militiaUnits.length; _i++>>
 		<<if $militiaUnits[_i].troops < $militiaUnits[_i].maxTroops && $militiaFreeManpower > 0>>
@@ -276,9 +280,12 @@
 		<</if>>
 	<</for>>
 
-	<<if _hasLossesM == 1 && $militiaFreeManpower > 0 || _hasLossesS == 1 && $menials > 0 || _hasLossesMe == 1 && $mercFreeManpower > 0>>
-
+	<<if _hasLossesBots == 1 || _hasLossesM == 1 || _hasLossesS == 1 || _hasLossesMe == 1>>
 		<br><br><<link "Replenish all units">>
+			<<if _hasLossesBots == 1>>
+					<<run cashX(-((_$secBots.maxTroops - $secBots.troops) * 500), "securityExpansion")>>
+					<<set $secBots.troops = $secBots.maxTroops>>
+			<</if>>
 
 			<<if _hasLossesM == 1>>
 				<<for _i = 0; _i < $militiaUnits.length; _i++>>
@@ -349,7 +356,7 @@
 			<</if>>
 
 		<</link>>
-		 //Will replenish units as long as manpower is available
+		//Will replenish units as long as requirements are meet.//<br>
 	<</if>>
 
-<</widget>>
\ No newline at end of file
+<</widget>>
diff --git a/src/data/backwardsCompatibility/updateCustomSlaveOrder.js b/src/data/backwardsCompatibility/updateCustomSlaveOrder.js
new file mode 100644
index 0000000000000000000000000000000000000000..79bd6a4bf60318eb4caf1243a127062fe9dd1b56
--- /dev/null
+++ b/src/data/backwardsCompatibility/updateCustomSlaveOrder.js
@@ -0,0 +1,43 @@
+/** Update custom slave orders (customSlave/huskSlave).
+ * @param {App.Entity.CustomSlaveOrder} customSlaveOrder
+ */
+App.Update.CustomSlaveOrder = function(customSlaveOrder) {
+	if (!customSlaveOrder.hasOwnProperty("leg")) {
+		if (jsDef(customSlaveOrder.amp) && customSlaveOrder.amp === 1) {
+			customSlaveOrder.leg = {left: null, right: null};
+		} else {
+			customSlaveOrder.leg = {left: new App.Entity.LimbState(), right: new App.Entity.LimbState()};
+		}
+	}
+
+	if (!customSlaveOrder.hasOwnProperty("arm")) {
+		if (jsDef(customSlaveOrder.amp) && customSlaveOrder.amp === 1) {
+			customSlaveOrder.arm = {left: null, right: null};
+		} else {
+			customSlaveOrder.arm = {left: new App.Entity.LimbState(), right: new App.Entity.LimbState()};
+		}
+	}
+
+	if (customSlaveOrder.hasOwnProperty("amp")) {
+		delete customSlaveOrder.amp;
+	}
+
+	if (!customSlaveOrder.hasOwnProperty("skill")) {
+		customSlaveOrder.skill = {whore: 15, combat: 0};
+	}
+
+	if (customSlaveOrder.hasOwnProperty("whoreSkills")) {
+		customSlaveOrder.skill.whore = customSlaveOrder.whoreSkills;
+		delete customSlaveOrder.whoreSkills;
+	}
+
+	if (customSlaveOrder.hasOwnProperty("combatSkills")) {
+		customSlaveOrder.skill.combat = customSlaveOrder.combatSkills;
+		delete customSlaveOrder.combatSkills;
+	}
+
+	if (V.releaseID < 1059) {
+		customSlaveOrder.eye = new App.Entity.EyeState();
+		delete customSlaveOrder.eyes;
+	}
+};
diff --git a/src/data/backwardsCompatibility/updateSlaveObject.js b/src/data/backwardsCompatibility/updateSlaveObject.js
index fed2177e63f0c516129eabbb8850a15d7df63b03..020a52e8b04690a79f104c393ccfc57fdb9c7820 100644
--- a/src/data/backwardsCompatibility/updateSlaveObject.js
+++ b/src/data/backwardsCompatibility/updateSlaveObject.js
@@ -101,7 +101,7 @@ App.Update.Slave = function(slave) {
 		}
 	}
 	if (slave.prestigeDesc !== undefined && slave.prestigeDesc !== 0) { slave.prestigeDesc = pronounReplacer(slave.prestigeDesc); }
-	if (slave.prestigeDesc !== undefined && slave.prestigeDesc !== 0) { // This must be defined first, hence the previous line.
+	if (slave.pornPrestigeDesc !== undefined && slave.pornPrestigeDesc !== 0) { // This must be defined first, hence the previous line.
 		if (V.releaseID < 1050 && slave.prestigeDesc !== undefined && slave.prestigeDesc !== 0) { /* BC absolutely FUCKED this */
 			switch (slave.porn.fameType) {
 				case "generic":
@@ -617,6 +617,13 @@ App.Update.Slave = function(slave) {
 		delete slave.sclerae;
 	}
 
+	if (slave.eyes !== undefined) {delete slave.eyes;}
+	if (slave.eyeColor !== undefined) {delete slave.eyeColor;}
+	if (slave.eyesImplant !== undefined) {delete slave.eyesImplant;}
+	if (slave.origEye !== undefined) {delete slave.origEye;}
+	if (slave.pupil !== undefined) {delete slave.pupil;}
+	if (slave.sclerae !== undefined) {delete slave.sclerae;}
+
 	if (slave.origin === "Shortly after birth, $he was sealed in an aging tank until $he was of age. $He knows only of the terror that awaits $him should $he not obey $his master.") {
 		slave.tankBaby = 2;
 	} else if (slave.origin === "Shortly after birth, $he was sealed in an aging tank until $he was of age. $He knows nothing of the world outside of what the tank imprinted $him with.") {
diff --git a/src/js/DefaultRules.js b/src/js/DefaultRules.js
index f4ed47570a9be9fd38ef7068d8080bd4ba1f51b9..c4a1f9af801c806f0edef532249d8b3c863c7d9c 100644
--- a/src/js/DefaultRules.js
+++ b/src/js/DefaultRules.js
@@ -1514,6 +1514,10 @@ window.DefaultRules = (function() {
 		}
 	}
 
+	/**
+	 * @param {App.Entity.SlaveState} slave
+	 * @param {App.RA.RuleSetters} rule
+	 */
 	function ProcessDiet(slave, rule) {
 		// Diet Setting
 		if ((rule.diet !== undefined && rule.diet !== null) || rule.weight !== null) {
@@ -1537,9 +1541,27 @@ window.DefaultRules = (function() {
 					r += `<br>${slave.slaveName} is on drugs designed to expand major body parts, so ${he}'s been put on a fattening diet to provide ${his} body as much fuel for growth as possible.`;
 				}
 			} else {
-				if (rule.weight !== null) {
+				// priority to growing/loosing muscles, then general body mass, then rest of the diets
+				if (!isAmputee(slave) && (App.RA.shallShrink(slave.muscles, rule.muscles, 8) || App.RA.shallGrow(slave.muscles, rule.muscles, 2))) {
+					if (App.RA.shallShrink(slave.muscles, rule.muscles, 8)) {
+						if ((slave.diet !== "slimming")) {
+							slave.diet = "slimming";
+							r += `<br>${slave.slaveName} has been put on a slimming exercise regime.`;
+						}
+					} else if (App.RA.shallGrow(slave.muscles, rule.muscles, 2)) {
+						if ((slave.diet !== "muscle building")) {
+							slave.diet = "muscle building";
+							r += `<br>${slave.slaveName} has been put on a muscle building exercise regime.`;
+						}
+					} else {
+						if ((slave.diet !== "healthy")) {
+							slave.diet = "healthy";
+							r += `<br>${slave.slaveName} is at the target weight, so ${his} diet has been normalized.`;
+						}
+					}
+				} else if (rule.weight !== null && (slave.weight > rule.weight.max || slave.weight < rule.weight.min)) {
 					if (slave.weight > rule.weight.max) {
-						if (slave.diet !== "restricted" ) {
+						if (slave.diet !== "restricted") {
 							slave.diet = "restricted";
 							r += `<br>${slave.slaveName} is too fat so ${his} diet has been set to restricted.`;
 						}
@@ -1548,23 +1570,6 @@ window.DefaultRules = (function() {
 							slave.diet = "fattening";
 							r += `<br>${slave.slaveName} is too skinny so ${his} diet has been set to fattening.`;
 						}
-					} else if ((rule.muscles !== undefined) && (rule.muscles !== null) && !isAmputee(slave)) {
-						if (App.RA.shallShrink(slave.muscles, rule.muscles, 8)) {
-							if ((slave.diet !== "slimming")) {
-								slave.diet = "slimming";
-								r += `<br>${slave.slaveName} has been put on a slimming exercise regime.`;
-							}
-						} else if (App.RA.shallGrow(slave.muscles, rule.muscles, 2)) {
-							if ((slave.diet !== "muscle building")) {
-								slave.diet = "muscle building";
-								r += `<br>${slave.slaveName} has been put on a muscle building exercise regime.`;
-							}
-						} else {
-							if ((slave.diet !== "healthy")) {
-								slave.diet = "healthy";
-								r += `<br>${slave.slaveName} is at the target weight, so ${his} diet has been normalized.`;
-							}
-						}
 					} else {
 						if ((slave.diet !== "healthy")) {
 							slave.diet = "healthy";
@@ -1582,23 +1587,6 @@ window.DefaultRules = (function() {
 							slave.diet = "fattening";
 							r += `<br>${slave.slaveName} is too skinny so ${his} diet has been set to fattening.`;
 						}
-					} else if ((rule.muscles !== undefined) && (rule.muscles !== null) && !isAmputee(slave)) {
-						if (App.RA.shallShrink(slave.muscles, rule.muscles, 8)) {
-							if ((slave.diet !== "slimming")) {
-								slave.diet = "slimming";
-								r += `<br>${slave.slaveName} has been put on a slimming exercise regime.`;
-							}
-						} else if (App.RA.shallGrow(slave.muscles, rule.muscles, 2)) {
-							if ((slave.diet !== "muscle building")) {
-								slave.diet = "muscle building";
-								r += `<br>${slave.slaveName} has been put on a muscle building exercise regime.`;
-							}
-						} else {
-							if ((slave.diet !== "healthy")) {
-								slave.diet = "healthy";
-								r += `<br>${slave.slaveName} is at the target weight, so ${his} diet has been normalized.`;
-							}
-						}
 					} else {
 						if ((slave.diet !== "healthy")) {
 							slave.diet = "healthy";
@@ -1663,23 +1651,6 @@ window.DefaultRules = (function() {
 					}
 				}
 			}
-		} else if ((rule.muscles !== undefined) && (rule.muscles !== null) && !isAmputee(slave)) { // no diet rule, muscles only
-			if (App.RA.shallShrink(slave.muscles, rule.muscles, 8)) {
-				if ((slave.diet !== "slimming")) {
-					slave.diet = "slimming";
-					r += `<br>${slave.slaveName} has been put on a slimming exercise regime.`;
-				}
-			} else if (App.RA.shallGrow(slave.muscles, rule.muscles, 2)) {
-				if ((slave.diet !== "muscle building")) {
-					slave.diet = "muscle building";
-					r += `<br>${slave.slaveName} has been put on a muscle building exercise regime.`;
-				}
-			} else {
-				if ((slave.diet !== "healthy")) {
-					slave.diet = "healthy";
-					r += `<br>${slave.slaveName} has achieved the target musculature, so ${his} exercise regime has been normalized.`;
-				}
-			}
 		}
 
 		if (slave.drugs === "appetite suppressors" && slave.diet !== "restricted") {
diff --git a/src/js/surgery.js b/src/js/surgery.js
index c06a812f3ce54dc7c03fc827f7bd9201d021f105..66ab1e64a132a3a7467186e3f42361e8e07ed672 100644
--- a/src/js/surgery.js
+++ b/src/js/surgery.js
@@ -169,9 +169,10 @@ App.Medicine.Surgery.ListHelpers = class {
 	 * @param {string} name
 	 * @param {number} implantType
 	 * @param {number} size
+	 * @param {number} [implantPrice=0]
 	 * @returns {App.Medicine.Surgery.Procedure}
 	 */
-	replaceImplants(name, implantType, size) {
+	replaceImplants(name, implantType, size, implantPrice = 0) {
 		return App.Medicine.Surgery.makeOption(this._keys.changeImplant, `${capFirstChar(name)} implants`,
 			size - this._slave.boobsImplant,
 			`replace ${this._pronouns.his} ${this._bodyPart} implants with ${name}${this._showCCs ? ` (${size}cc)` : ''} ones`,
@@ -179,7 +180,7 @@ App.Medicine.Surgery.ListHelpers = class {
 				slave[this._bodyPart] += size - slave[`${this._bodyPart}Implant`];
 				slave[`${this._bodyPart}Implant`] = size;
 				slave[`${this._bodyPart}ImplantType`] = implantType;
-			}, this._V.surgeryCost, 10, this._bodyPart
+			}, this._V.surgeryCost + implantPrice, 10, this._bodyPart
 		);
 	}
 
@@ -248,6 +249,19 @@ App.Medicine.Surgery.sizingProcedures = function() {
 		butt: buttSizingProcedures
 	};
 
+	/**
+	 * for implants that we potentially order abroad :)
+	 * @param {App.Medicine.Surgery.Procedure} op
+	 */
+	function _advFillablePriceModifier(op) {
+		if (V.ImplantProductionUpgrade !== 1) {
+			op.costs += 10000;
+			op.label += " (special order)";
+			op.description += " (special order)";
+		}
+		return op;
+	}
+
 	/**
 	 * Returns list of available surgeries targeted at changing size of the given body part
 	 * @param {string} bodyPart
@@ -286,17 +300,20 @@ App.Medicine.Surgery.sizingProcedures = function() {
 		const types = App.Medicine.Keys.Surgery.Target.breast; // shortcuts
 		const helper = new App.Medicine.Surgery.ListHelpers(slave, "boobs", types, pronouns, V.showBoobCCs);
 
+		const areStringsInstalled = slave.boobsImplantType === 1;
+		const curSize = slave.boobsImplant;
+
 		let r = [];
 		if (options.augmentation) {
 			if (slave.boobs > 50000) {
 				r.push(App.Medicine.Surgery.makeImpossibleOption(types.fillUp, "Increase boobs", `<em>${His} breasts are as large as ${he} can physically support</em>`));
-			} else if (slave.boobsImplant > 10000 && !largeImplantsAvailable && slave.boobsImplantType !== 1) {
+			} else if (curSize > 10000 && !largeImplantsAvailable && !areStringsInstalled) {
 				r.push(App.Medicine.Surgery.makeImpossibleOption(types.fillUp, "Increase boobs", `<em>${His} implants are filled to capacity</em>`));
 			} else if (slave.indentureRestrictions >= 2) {
 				r.push(App.Medicine.Surgery.makeImpossibleOption(types.installImplant, "Change boob size", `<em>${His} indenture forbids elective surgery</em>`));
 			} else if (slave.breastMesh === 1) {
 				r.push(App.Medicine.Surgery.makeImpossibleOption(types.installImplant, "Put implants", `<em>${His} supportive mesh implant blocks implantation</em>`));
-			} else if (slave.boobsImplant === 0) {
+			} else if (curSize === 0) {
 				if (options.strings) {
 					r.push(helper.installImplants("string", 1, 400));
 				}
@@ -305,58 +322,72 @@ App.Medicine.Surgery.sizingProcedures = function() {
 				}
 				r.push(helper.installImplants("standard", 0, 400));
 				r.push(helper.installImplants("small", 0, 200));
-			} else if (slave.boobsImplant > 10000 && slave.boobsImplantType !== 1 && advancedFillableImplantsAvailable) {
+			} else if (curSize > 10000 && !areStringsInstalled && advancedFillableImplantsAvailable) {
 				r.push(helper.fillUp(1000));
-			} else if (slave.boobsImplant > 9800 && slave.boobsImplantType !== 1 && advancedFillableImplantsAvailable) {
+			} else if (curSize > 9800 && !areStringsInstalled && advancedFillableImplantsAvailable) {
 				r.push(helper.replaceImplants("hyper fillable", 0, 11000));
-			} else if (slave.boobsImplant > 2000 && slave.boobsImplantType !== 1) {
+			} else if (curSize > 2000 && !areStringsInstalled) {
 				r.push(helper.fillUp(400));
-			} else if (slave.boobsImplant > 1800 && slave.boobsImplantType !== 1) {
+			} else if (curSize > 1800 && !areStringsInstalled) {
 				r.push(App.Medicine.Surgery.makeImpossibleOption(types.fillUp, "Add inert filler", `<em>${His} implants are filled to capacity</em>`));
-
-				const advancedFillable = helper.replaceImplants("advanced fillable", 0, 2200);
-				if (!advancedFillableImplantsAvailable) {
-					advancedFillable.costs += 10000;
-					advancedFillable.label += " (special order)";
-					advancedFillable.description += " (special order)";
-				}
-				r.push(advancedFillable);
-			} else if (slave.boobsImplant > 600 && slave.boobsImplantType !== 1) {
+				r.push(_advFillablePriceModifier(helper.replaceImplants("advanced fillable", 0, 2200)));
+			} else if (curSize > 600 && !areStringsInstalled) {
 				r.push(helper.fillUp(200));
-			} else if (slave.boobsImplant > 400 && slave.boobsImplantType !== 1) {
+			} else if (curSize > 400 && !areStringsInstalled) {
 				r.push(helper.replaceImplants("fillable", 0, 800));
-			} else if (slave.boobsImplant > 200 && slave.boobsImplantType !== 1) {
+			} else if (curSize > 200 && !areStringsInstalled) {
 				r.push(helper.replaceImplants("large", 0, 600));
-			} else if (slave.boobsImplant > 0 && slave.boobsImplantType !== 1) {
+			} else if (curSize > 0 && !areStringsInstalled) {
 				r.push(helper.replaceImplants("standard", 0, 400));
 				r.push(helper.replaceImplants("large", 0, 600));
 			}
 		}
 
-		if (options.reduction && (slave.boobs > 300 || slave.boobsImplant > 0)) {
-			if (slave.boobsImplant > 0) {
-				if (slave.boobsImplantType === 1 && slave.boobsImplant > 400) {
-					if (slave.boobsImplant > 8000) {
+		if (options.replace && slave.indentureRestrictions < 2 && curSize > 0) {
+			if (!areStringsInstalled && curSize < 600) {
+				r.push(helper.replaceImplants("string", 1, 400));
+			} else if (areStringsInstalled){
+				// we have engorged string implants, suggest replacing with normal implants of similar size
+				if (curSize > 10000) {
+					if (largeImplantsAvailable) {
+						if (slave.boobs < 50000) {
+							r.push(helper.replaceImplants("hyper fillable", 0, Math.round(curSize / 1000) * 1000));
+						}
+					}
+				} else if (curSize > 2200) {
+					r.push(_advFillablePriceModifier(helper.replaceImplants("advanced fillable", 0, Math.round(curSize / 400) * 400)));
+				} else if (curSize > 400) {
+					r.push(helper.replaceImplants("fillable", 0, Math.round(curSize / 200) * 200));
+				} else {
+					r.push(helper.replaceImplants("standard", 0, 400));
+				}
+			}
+		}
+
+		if (options.reduction && (slave.boobs > 300 || curSize > 0)) {
+			if (curSize > 0) {
+				if (areStringsInstalled && curSize > 400) {
+					if (curSize > 8000) {
 						r.push(helper.drain(1000));
-					} else if (slave.boobsImplant > 5000) {
+					} else if (curSize > 5000) {
 						r.push(helper.drain(750));
-					} else if (slave.boobsImplant > 2000) {
+					} else if (curSize > 2000) {
 						r.push(helper.drain(500));
-					} else if (slave.boobsImplant > 1000) {
+					} else if (curSize > 1000) {
 						r.push(helper.drain(250));
-					} else if (slave.boobsImplant > 500) {
+					} else if (curSize > 500) {
 						r.push(helper.drain(100));
 					}
 				}
 				r.push(helper.removeImplants());
 			}
-			if ((slave.boobs > 300) && (slave.boobsImplant === 0) && slave.indentureRestrictions < 2) {
+			if ((slave.boobs > 300) && (curSize === 0) && slave.indentureRestrictions < 2) {
 				r.push(helper.reduce("reduce", 200));
 				if (slave.boobs < 675) {
 					r.push(helper.reduce("slightly reduce", 25));
 				}
 			}
-			if ((slave.boobsImplant === 0) && slave.indentureRestrictions < 2 && (slave.breedingMark !== 1 || V.propOutcome !== 1 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) {
+			if ((curSize === 0) && slave.indentureRestrictions < 2 && (slave.breedingMark !== 1 || V.propOutcome !== 1 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) {
 				if (slave.boobs >= 7000) {
 					r.push(App.Medicine.Surgery.makeOption(types.reduction, "Mastectomy", 300 - slave.boobs,
 						"perform mastectomy",
@@ -394,6 +425,9 @@ App.Medicine.Surgery.sizingProcedures = function() {
 		const types = App.Medicine.Keys.Surgery.Target.butt; // shortcuts
 		const helper = new App.Medicine.Surgery.ListHelpers(slave, "butt", types, pronouns, false);
 
+		const areStringsInstalled = slave.buttImplantType === 1;
+		const curSize = slave.buttImplant;
+
 		let r = [];
 
 		if (options.augmentation) {
@@ -401,20 +435,20 @@ App.Medicine.Surgery.sizingProcedures = function() {
 				r.push(App.Medicine.Surgery.makeImpossibleOption(types.installImplant, "Change butt size", `<em>${His} indenture forbids elective surgery</em>`));
 			} else if (slave.butt > 19) {
 				r.push(App.Medicine.Surgery.makeImpossibleOption(types.fillUp, "Increase butt", `<em>${His} butt is as large as it can possibly get</em>`));
-			} else if (slave.butt > 7 && !largeImplantsAvailable && thisArcology.FSAssetExpansionist === "unset" && slave.buttImplantType !== 1) {
+			} else if (slave.butt > 7 && !largeImplantsAvailable && thisArcology.FSAssetExpansionist === "unset" && !areStringsInstalled) {
 				r.push(App.Medicine.Surgery.makeImpossibleOption(types.installImplant, "Increase butt", `<em>${His} butt is as large as ${he} can physically support</em>`));
-			} else if (slave.buttImplant > 7 && !largeImplantsAvailable && slave.buttImplantType !== 1) {
+			} else if (curSize > 7 && !largeImplantsAvailable && !areStringsInstalled) {
 				r.push(App.Medicine.Surgery.makeImpossibleOption(types.installImplant, "Increase butt", `<em>${His} butt implants are filled to capacity</em>`));
-			} else if (slave.buttImplant === 0) {
+			} else if (curSize === 0) {
 				r.push(helper.installImplants("standard", 0, 1));
 				if (options.strings) {
 					r.push(helper.installImplants("string", 1, 1));
 				}
-			} else if (slave.buttImplant === 1 && slave.buttImplantType !== 1) {
+			} else if (curSize === 1 && !areStringsInstalled) {
 				r.push(helper.replaceImplants("bigger", 0, 2));
-			} else if (slave.buttImplant === 2 && slave.buttImplantType !== 1) {
+			} else if (curSize === 2 && !areStringsInstalled) {
 				r.push(helper.replaceImplants("fillable", 0, 3));
-			} else if (slave.buttImplant === 4 && slave.buttImplantType !== 1) {
+			} else if (curSize === 4 && !areStringsInstalled) {
 				r.push(App.Medicine.Surgery.makeImpossibleOption(types.fillUp, "Increase size", `<em>${His} implants are filled to capacity</em>`));
 				const advancedFillable = helper.replaceImplants("advanced fillable", 0, 5);
 				if (!advancedFillableImplantsAvailable) {
@@ -423,23 +457,44 @@ App.Medicine.Surgery.sizingProcedures = function() {
 					advancedFillable.description += " (special order)";
 				}
 				r.push(advancedFillable);
-			} else if (slave.buttImplant === 8 && slave.buttImplantType !== 1 && advancedFillableImplantsAvailable) {
+			} else if (curSize === 8 && !areStringsInstalled && largeImplantsAvailable) {
 				r.push(helper.replaceImplants("hyper fillable", 0, 9));
-			} else if (slave.buttImplant > 2 && slave.buttImplantType !== 1) {
+			} else if (curSize > 2 && !areStringsInstalled) {
 				r.push(helper.fillUp(1));
 			}
 		}
 
+		if (options.replace && slave.indentureRestrictions < 2 && curSize > 0) {
+			if (!areStringsInstalled && curSize === 1) {
+				r.push(helper.replaceImplants("string", 1, 1));
+			} else if (areStringsInstalled) {
+				// we have engorged string implants, suggest replacing with normal implants of similar size
+				if (curSize >= 9) {
+					if (largeImplantsAvailable) {
+						r.push(helper.replaceImplants("hyper fillable", 0, curSize));
+					}
+				} else if (curSize >= 5) {
+					r.push(_advFillablePriceModifier(helper.replaceImplants("advanced fillable", 0, curSize)));
+				} else if (curSize >= 3) {
+					r.push(helper.replaceImplants("fillable", 0, curSize));
+				} else if (curSize === 2) {
+					r.push(helper.replaceImplants("big", 0, curSize));
+				} else {
+					r.push(helper.replaceImplants("standard", 0, curSize));
+				}
+			}
+		}
+
 		if (options.reduction) {
-			if (slave.buttImplant > 0) {
+			if (curSize > 0) {
 				if (slave.indentureRestrictions < 2) {
-					if (slave.buttImplantType === 1 && slave.buttImplant > 1) {
+					if (areStringsInstalled && curSize > 1) {
 						r.push(helper.drain(1));
 					}
 					r.push(helper.removeImplants());
 				}
 			}
-			if ((slave.butt > 1) && (slave.buttImplant === 0)) {
+			if ((slave.butt > 1) && (curSize === 0)) {
 				if (slave.indentureRestrictions < 2) {
 					r.push(helper.reduce("reduce", 1));
 				}
diff --git a/src/npc/databases/dSlavesDatabase.tw b/src/npc/databases/dSlavesDatabase.tw
index 9e4d448b7f0e993d67470dcabff688184035264e..ef9a7808118b5f1f603bdbbc63493fbd82e86840 100644
--- a/src/npc/databases/dSlavesDatabase.tw
+++ b/src/npc/databases/dSlavesDatabase.tw
@@ -530,7 +530,7 @@
 /*Increased nipples and areolae, changed eye color, added mute -BoneyM*/
 
 <<set _HS = App.Entity.SlaveState.makeSkeleton()>>
-<<set _HS.slaveName = "Box", _HS.birthName = "Box", _HS.origin = "When you took $him from $his previous owner, $he was locked into a beautiful rosewood box lined with red velvet, crying.", _HS.ID = _i++, _HS.birthWeek = random(0,51), _HS.actualAge = 21, _HS.physicalAge = 21, _HS.visualAge = 21, _HS.ovaryAge = 21, _HS.devotion = -75, _HS.weight = 20, _HS.eyes = -2, _HS.override_Brow_H_Color = 1, _HS.override_Arm_H_Color = 1, _HS.override_Pubic_H_Color = 1, _HS.eyebrowHColor = "blonde", _HS.pubicHColor = "blonde", _HS.underArmHColor = "blonde", _HS.origSkin = "pale", _HS.origHColor = "golden blonde", _HS.hStyle = "long", _HS.boobs = 400, _HS.butt = 2, _HS.vagina = 1, _HS.vaginaLube = 1, _HS.anus = 1, _HS.ovaries = 1, _HS.skill.vaginal = 15, _HS.skill.oral = 15, _HS.skill.anal = 15, _HS.intelligence = -50, _HS.attrXY = 40, _HS.fetishKnown = 1, _HS.custom.desc = "$His amputation sites have titanium rings that go through to the bone. $He has been chemically blinded.">>
+<<set _HS.slaveName = "Box", _HS.birthName = "Box", _HS.origin = "When you took $him from $his previous owner, $he was locked into a beautiful rosewood box lined with red velvet, crying.", _HS.ID = _i++, _HS.birthWeek = random(0,51), _HS.actualAge = 21, _HS.physicalAge = 21, _HS.visualAge = 21, _HS.ovaryAge = 21, _HS.devotion = -75, _HS.weight = 20, _HS.override_Brow_H_Color = 1, _HS.override_Arm_H_Color = 1, _HS.override_Pubic_H_Color = 1, _HS.eyebrowHColor = "blonde", _HS.pubicHColor = "blonde", _HS.underArmHColor = "blonde", _HS.origSkin = "pale", _HS.origHColor = "golden blonde", _HS.hStyle = "long", _HS.boobs = 400, _HS.butt = 2, _HS.vagina = 1, _HS.vaginaLube = 1, _HS.anus = 1, _HS.ovaries = 1, _HS.skill.vaginal = 15, _HS.skill.oral = 15, _HS.skill.anal = 15, _HS.intelligence = -50, _HS.attrXY = 40, _HS.fetishKnown = 1, _HS.custom.desc = "$His amputation sites have titanium rings that go through to the bone. $He has been chemically blinded.">>
 <<run App.Utils.removeHeroLimbs(_HS, "all"), eyeSurgery(_HS, "both", "blind")>>
 <<set $heroSlaves.push(_HS)>>
 /* put some of $his custom description in $his origin (box stuff), tagged as amp, lowered obedience, increased weight but lowered health, changed skin color from white to pale */
diff --git a/src/npc/slaveStats.tw b/src/npc/slaveStats.tw
index 63725a368253c8636019e6da1c9750d715dcd84d..3dca1aae144a9f395d5797d3cfa80014c213bbbf 100644
--- a/src/npc/slaveStats.tw
+++ b/src/npc/slaveStats.tw
@@ -206,7 +206,7 @@ Income: <<= num($activeSlave.lastWeeksRepIncome)>>
 		Override: $activeSlave.override_Pubic_H_Color
 
 		<br><br>Eyes:
-		<br>Eyes: <<print JSON.stringify($activeSlave.eyes)>>
+		<br>Eyes: <<print JSON.stringify($activeSlave.eye)>>
 		<br>Override: $activeSlave.override_Eye_Color
 		<br>eyewear: $activeSlave.eyewear
 
diff --git a/src/uncategorized/BackwardsCompatibility.tw b/src/uncategorized/BackwardsCompatibility.tw
index 23354d1442f6c9a5fea5d2266ef27885b9a2725e..2efb59b9f0b5d3eddf411622099adfeb6b0024ed 100644
--- a/src/uncategorized/BackwardsCompatibility.tw
+++ b/src/uncategorized/BackwardsCompatibility.tw
@@ -113,45 +113,6 @@
 	<<set $scarDesign = {primary: "generic", local: "generic"}>>
 <</if>>
 
-<<if !$customSlave.hasOwnProperty("leg")>>
-	<<if (def $customSlave.amp) && ($customSlave.amp === 1)>>
-		<<set $customSlave.leg = {left: null, right: null}>>
-	<<else>>
-		<<set $customSlave.leg = {left: new App.Entity.LimbState(), right: new App.Entity.LimbState()}>>
-	<</if>>
-<</if>>
-
-<<if !$customSlave.hasOwnProperty("arm")>>
-	<<if (def $customSlave.amp) && ($customSlave.amp === 1)>>
-		<<set $customSlave.arm = {left: null, right: null}>>
-	<<else>>
-		<<set $customSlave.arm = {left: new App.Entity.LimbState(), right: new App.Entity.LimbState()}>>
-	<</if>>
-<</if>>
-
-<<if $customSlave.hasOwnProperty("amp")>>
-	<<run delete $customSlave.amp>>
-<</if>>
-
-<<if !$customSlave.hasOwnProperty("skill")>>
-	<<set $customSlave.skill = {whore: 15, combat: 0}>>
-<</if>>
-
-<<if $customSlave.hasOwnProperty("whoreSkills")>>
-	<<set $customSlave.skill.whore = $customSlave.whoreSkills>>
-	<<run delete $customSlave.whoreSkills>>
-<</if>>
-
-<<if $customSlave.hasOwnProperty("combatSkills")>>
-	<<set $customSlave.skill.combat = $customSlave.combatSkills>>
-	<<run delete $customSlave.combatSkills>>
-<</if>>
-
-<<if $releaseID < 1059>>
-	<<set $customSlave.eye = new App.Entity.EyeState()>>
-	<<run delete $customSlave.eyes>>
-<</if>>
-
 <<if def $servantMilkersJobs>>
 	<<unset $servantMilkersJobs>>
 <</if>>
@@ -1366,6 +1327,9 @@
 <<if ndef $huskSlave>>
 	<<set $huskSlave = new App.Entity.CustomSlaveOrder()>>
 <</if>>
+<<run App.Update.CustomSlaveOrder($huskSlave)>>
+<<run App.Update.CustomSlaveOrder($customSlave)>>
+
 <<if ndef $pedo_mode>>
 	<<set $pedo_mode = 0>>
 <</if>>