diff --git a/devNotes/VersionChangeLog-Premod+LoliMod.txt b/devNotes/VersionChangeLog-Premod+LoliMod.txt
index e2db0c09185630c826508cb22196371029e34714..53c837e06d063c244b6c323ff5ef0a3307ae4154 100644
--- a/devNotes/VersionChangeLog-Premod+LoliMod.txt
+++ b/devNotes/VersionChangeLog-Premod+LoliMod.txt
@@ -4768,4 +4768,7 @@ Pregmod 0.10.3.0
 	
 	173
 	-The Hippolyta Acedemy added
-	-fixes
\ No newline at end of file
+	-fixes
+	
+	174
+	-added SFanon's eye and hair autosurgery settings
\ No newline at end of file
diff --git a/devNotes/twine JS b/devNotes/twine JS
index abc7d484d9bc5841618bed053a8a319bfa0f25c1..5e636e75288d0938339699bbae7f94a32fbbcb3b 100644
--- a/devNotes/twine JS	
+++ b/devNotes/twine JS	
@@ -1,5 +1,5 @@
 /*:: StoryJS [script]*/
- 
+
 /*config.history.tracking = false;*/
 window.variableAsNumber = function(x, defaultValue, minValue, maxValue) {
 	x = Number(x)
@@ -18,7 +18,7 @@ window.isSexuallyPure = function(slave) {
 	if (!slave) {
 		return null;
 	}
-	if (slave.vagina < 1 && slave.anus < 1 && !slave.analCount && !slave.vaginalCount && !slave.oralCount) {
+	if (slave.vagina < 1 && slave.anus < 1 && !slave.analCount && !slave.vaginalCount && !slave.oralCount && !slave.mammaryCount && !slave.penetrativeCount) {
 		return true;
 	} else {
 		return false;
@@ -143,9 +143,9 @@ Mousetrap.bind("x", function () {
 Mousetrap.bind("z", function () {
 	$("#story-caption #SFMButton a.macro-link").trigger("click");
 });
-Mousetrap.bind("d", function () { 		
-	$("#story-caption #edictButton a.macro-link").trigger("click"); 			
-}); 
+Mousetrap.bind("d", function () {
+	$("#story-caption #edictButton a.macro-link").trigger("click");
+});
 Mousetrap.bind("shift+s", function () {
 	$("#story-caption #securityHQ a.macro-link").trigger("click");
 });
@@ -969,6 +969,10 @@ window.lastSurgeryRuleFor = function(slave, rules, what) {
 	return null;
 };
 
+window.lastEyesSurgeryRule = function(slave, rules) {
+	return lastSurgeryRuleFor(slave, rules, "eyes");
+}
+
 window.lastLactationSurgeryRule = function(slave, rules) {
 	return lastSurgeryRuleFor(slave, rules, "lactation");
 }
@@ -989,6 +993,14 @@ window.lastButtSurgeryRule = function(slave, rules) {
 	return lastSurgeryRuleFor(slave, rules, "butt");
 };
 
+window.lastHairSurgeryRule = function(slave, rules) {
+	return lastSurgeryRuleFor(slave, rules, "hair");
+}
+
+window.lastBodyHairSurgeryRule = function(slave, rules) {
+	return lastSurgeryRuleFor(slave, rules, "bodyhair");
+}
+
 window.milkAmount = function(slave) {
 	var milk;
 	var calcs;
@@ -1100,7 +1112,7 @@ window.mergeRules = function(rules) {
             );
 
             if (applies)
-            {	
+            {
 
             	//Objects in JS in operaions "=" pass by reference, so we need completly new object to avoid mess up previous rules.
             	if ("object" == typeof rules[i][prop] && "object" != typeof combinedRule[prop])
@@ -1109,14 +1121,14 @@ window.mergeRules = function(rules) {
             	//If we already have object - now we will process it's properties, but object itself should be skiped.
             	if ("object" != typeof combinedRule[prop])
                 	combinedRule[prop] = rules[i][prop];
-            
+
             	/*Some properties of rules now have second level properties. We need to check it, and change ones in combinedRule. (Good example - growth drugs. Breasts, butt, etc...) */
             	if ( "object" == typeof rules[i][prop])
     	        {
 	            	for (var subprop in rules[i][prop])
     	        	{
     	           		var subapplies = (
-            	    	combinedRule[prop][subprop] === undefined           
+            	    	combinedRule[prop][subprop] === undefined
                 			|| (rules[i][prop][subprop] !== "no default setting")
 	            		);
 
diff --git a/src/js/storyJS.tw b/src/js/storyJS.tw
index d02f0d9e964f9d22eaa673415b38ae85563d2808..e61daf30868948dba4bd5652951162c94590fed4 100644
--- a/src/js/storyJS.tw
+++ b/src/js/storyJS.tw
@@ -1,5 +1,5 @@
 :: StoryJS [script]
- 
+
 /*config.history.tracking = false;*/
 window.variableAsNumber = function(x, defaultValue, minValue, maxValue) {
 	x = Number(x)
@@ -18,7 +18,7 @@ window.isSexuallyPure = function(slave) {
 	if (!slave) {
 		return null;
 	}
-	if (slave.vagina < 1 && slave.anus < 1 && !slave.analCount && !slave.vaginalCount && !slave.oralCount) {
+	if (slave.vagina < 1 && slave.anus < 1 && !slave.analCount && !slave.vaginalCount && !slave.oralCount && !slave.mammaryCount && !slave.penetrativeCount) {
 		return true;
 	} else {
 		return false;
@@ -143,9 +143,9 @@ Mousetrap.bind("x", function () {
 Mousetrap.bind("z", function () {
 	$("#story-caption #SFMButton a.macro-link").trigger("click");
 });
-Mousetrap.bind("d", function () { 		
-	$("#story-caption #edictButton a.macro-link").trigger("click"); 			
-}); 
+Mousetrap.bind("d", function () {
+	$("#story-caption #edictButton a.macro-link").trigger("click");
+});
 Mousetrap.bind("shift+s", function () {
 	$("#story-caption #securityHQ a.macro-link").trigger("click");
 });
@@ -969,6 +969,10 @@ window.lastSurgeryRuleFor = function(slave, rules, what) {
 	return null;
 };
 
+window.lastEyesSurgeryRule = function(slave, rules) {
+	return lastSurgeryRuleFor(slave, rules, "eyes");
+}
+
 window.lastLactationSurgeryRule = function(slave, rules) {
 	return lastSurgeryRuleFor(slave, rules, "lactation");
 }
@@ -989,6 +993,14 @@ window.lastButtSurgeryRule = function(slave, rules) {
 	return lastSurgeryRuleFor(slave, rules, "butt");
 };
 
+window.lastHairSurgeryRule = function(slave, rules) {
+	return lastSurgeryRuleFor(slave, rules, "hair");
+}
+
+window.lastBodyHairSurgeryRule = function(slave, rules) {
+	return lastSurgeryRuleFor(slave, rules, "bodyhair");
+}
+
 window.milkAmount = function(slave) {
 	var milk;
 	var calcs;
@@ -1100,7 +1112,7 @@ window.mergeRules = function(rules) {
             );
 
             if (applies)
-            {	
+            {
 
             	//Objects in JS in operaions "=" pass by reference, so we need completly new object to avoid mess up previous rules.
             	if ("object" == typeof rules[i][prop] && "object" != typeof combinedRule[prop])
@@ -1109,14 +1121,14 @@ window.mergeRules = function(rules) {
             	//If we already have object - now we will process it's properties, but object itself should be skiped.
             	if ("object" != typeof combinedRule[prop])
                 	combinedRule[prop] = rules[i][prop];
-            
+
             	/*Some properties of rules now have second level properties. We need to check it, and change ones in combinedRule. (Good example - growth drugs. Breasts, butt, etc...) */
             	if ( "object" == typeof rules[i][prop])
     	        {
 	            	for (var subprop in rules[i][prop])
     	        	{
     	           		var subapplies = (
-            	    	combinedRule[prop][subprop] === undefined           
+            	    	combinedRule[prop][subprop] === undefined
                 			|| (rules[i][prop][subprop] !== "no default setting")
 	            		);
 
diff --git a/src/uncategorized/autosurgerySettings.tw b/src/uncategorized/autosurgerySettings.tw
index 5873a2e8b4e550924ab61a250e8fc0234419d975..a2b1d6ab0b43792c53d6c42c6beb427b678fc2f3 100644
--- a/src/uncategorized/autosurgerySettings.tw
+++ b/src/uncategorized/autosurgerySettings.tw
@@ -6,6 +6,45 @@
 
 //The autosurgery can accept the following guidelines. If results outside these guidelines are desired, deactivating the autosurgery and planning surgical interventions manually is recommended.//
 
+<br><br>
+Vision correction:
+<span id = "eyes">
+	<<if ($currentRule.surgery.eyes == "no default setting")>>
+		''no default setting.''
+	<<elseif ($currentRule.surgery.eyes == 1)>>
+		''fixed.''
+	<<else>>
+		''blurred.''
+	<</if>>
+
+	<br>
+
+	<<if ($currentRule.surgery.eyes !== "no default setting")>>
+		<<link "No default setting">>
+			<<set $currentRule.surgery.eyes = "no default setting">>
+			<<RASurgeryChangeEyes>>
+		<</link>> |
+	<<else>>
+		No default setting |
+	<</if>>
+	<<if ($currentRule.surgery.eyes !== 1)>>
+		<<link "Corrected">>
+			<<set $currentRule.surgery.eyes = 1>>
+			<<RASurgeryChangeEyes>>
+		<</link>> |
+	<<else>>
+		Corrected |
+	<</if>>
+	<<if ($currentRule.surgery.eyes !== -1)>>
+		<<link "Blurred">>
+			<<set $currentRule.surgery.eyes = -1>>
+			<<RASurgeryChangeEyes>>
+		<</link>>
+	<<else>>
+		Blurred
+	<</if>>
+</span>
+
 <br><br>
 
 Lactation drug implants:
@@ -389,3 +428,81 @@ Orifice tightening:
 	Virginity
 <</if>>
 </span>
+
+<br><br>bodyhair:
+<span id = "bodyhair">
+<<if ($currentRule.surgery.bodyhair == 2)>>
+	''Removal''
+<<elseif ($currentRule.surgery.bodyhair == 1)>>
+	''Keep''
+<<else>>
+	''No default setting.''
+<</if>>
+
+<br>
+<<if ($currentRule.surgery.bodyhair != 0)>>
+	<<link "No default setting">>
+	<<set $currentRule.surgery.bodyhair = 0>>
+	<<RASurgeryBodyHair>>
+	<</link>> |
+<<else>>
+	No default setting |
+<</if>>
+
+<<if ($currentRule.surgery.bodyhair != 1)>>
+	<<link "Keep">>
+	<<set $currentRule.surgery.bodyhair = 1>>
+	<<RASurgeryBodyHair>>
+	<</link>> |
+<<else>>
+	Keep |
+<</if>>
+
+<<if ($currentRule.surgery.bodyhair != 2)>>
+	<<link "Removal">>
+	<<set $currentRule.surgery.bodyhair = 2>>
+	<<RASurgeryBodyHair>>
+	<</link>>
+<<else>>
+	Removal
+<</if>>
+</span>
+
+<br><br>hair:
+<span id = "hair">
+<<if ($currentRule.surgery.hair == 2)>>
+	''Removal''
+<<elseif ($currentRule.surgery.hair == 1)>>
+	''Keep''
+<<else>>
+	''No default setting.''
+<</if>>
+
+<br>
+<<if ($currentRule.surgery.hair != 0)>>
+	<<link "No default setting">>
+	<<set $currentRule.surgery.hair = 0>>
+	<<RASurgeryHair>>
+	<</link>> |
+<<else>>
+	No default setting |
+<</if>>
+
+<<if ($currentRule.surgery.hair != 1)>>
+	<<link "Keep">>
+	<<set $currentRule.surgery.hair = 1>>
+	<<RASurgeryBodyHair>>
+	<</link>> |
+<<else>>
+	Keep |
+<</if>>
+
+<<if ($currentRule.surgery.hair != 2)>>
+	<<link "Removal">>
+	<<set $currentRule.surgery.hair = 2>>
+	<<RASurgeryHair>>
+	<</link>>
+<<else>>
+	Removal
+<</if>>
+</span>
\ No newline at end of file
diff --git a/src/uncategorized/rulesAutosurgery.tw b/src/uncategorized/rulesAutosurgery.tw
index 043aaf5d458cb9e92d516e7d96354104b6020ff5..785114dda082bed47dd690cf57dd85808779f60c 100644
--- a/src/uncategorized/rulesAutosurgery.tw
+++ b/src/uncategorized/rulesAutosurgery.tw
@@ -35,6 +35,18 @@
 			<<if _temp != null>>
 				<<set $thisSurgery.boobs = _temp.surgery.boobs>>
 			<</if>>
+			<<set _temp = lastEyeSurgeryRule($slaves[$i], $defaultRules)>>
+			<<if _temp != null>>
+				<<set $thisSurgery.eye = _temp.surgery.eye>>
+			<</if>>
+			<<set _temp = lastBodyHairSurgeryRule($slaves[$i], $defaultRules)>>
+			<<if _temp != null>>
+				<<set $thisSurgery.bodyhair = _temp.surgery.bodyhair>>
+			<</if>>
+			<<set _temp = lastHairSurgeryRule($slaves[$i], $defaultRules)>>
+			<<if _temp != null>>
+				<<set $thisSurgery.hair = _temp.surgery.hair>>
+			<</if>>
 			<<if ($thisSurgery.hips !== "no default setting") && ($thisSurgery.butt !== "no default setting")>>
 				<<if $slaves[$i].hips < -1>>
 					<<if $thisSurgery.butt > 2>>
@@ -61,7 +73,7 @@
 <</if>>
 
 <<if ndef $thisSurgery>>
-	<<set $thisSurgery = {lactation: "no default setting", cosmetic: 0, accent: "no default setting", shoulders: "no default setting", shouldersImplant: "no default setting", boobs: "no default setting", hips: "no default setting", hipsImplant: "no default setting", butt: "no default setting", faceShape: "no default setting", lips: "no default setting", holes: 0}>>
+	<<set $thisSurgery = {eyes: "no default setting", lactation: "no default setting", cosmetic: 0, accent: "no default setting", shoulders: "no default setting", shouldersImplant: "no default setting", boobs: "no default setting", hips: "no default setting", hipsImplant: "no default setting", butt: "no default setting", faceShape: "no default setting", lips: "no default setting", holes: 0,bodyhair: 0, hair: 0}>>
 <</if>>
 
 <<set $seed = 0>>
@@ -70,7 +82,13 @@
 <<if ($slaves[$i].health <= 20)>>
 	<<set $seed = 1>>
 <<else>>
-<<if ($slaves[$i].lactation == 2) && ($thisSurgery.lactation == 0)>>
+<<if ($slaves[$i].eyes == -1) && ($thisSurgery.eyes == 1)>>
+	<<set $surgeries.push("surgery to correct her vision"), $slaves[$i].eyes = 1, $cash -= $surgeryCost>>
+	<<if $PC.medicine >= 100>><<set $slaves[$i].health -= 5>><<else>><<set $slaves[$i].health -= 10>><</if>>
+<<elseif ($slaves[$i].eyes != -1) && ($thisSurgery.eyes == -1)>>
+	<<set $surgeries.push("surgery to blur her vision"), $slaves[$i].eyes = -1, $cash -= $surgeryCost>>
+	<<if $PC.medicine >= 100>><<set $slaves[$i].health -= 5>><<else>><<set $slaves[$i].health -= 10>><</if>>
+<<elseif ($slaves[$i].lactation == 2) && ($thisSurgery.lactation == 0)>>
 	<<set $surgeries.push("surgery to remove her lactation implants"), $slaves[$i].lactation = 0, $cash -= $surgeryCost>>
 	<<if $PC.medicine >= 100>><<set $slaves[$i].health -= 5>><<else>><<set $slaves[$i].health -= 10>><</if>>
 <<elseif $slaves[$i].lactation != 2 && $thisSurgery.lactation>>
@@ -302,6 +320,15 @@
 		<<set $cash -= $surgeryCost>>
 		<<if $PC.medicine >= 100>><<set $slaves[$i].health -= 5>><<else>><<set $slaves[$i].health -= 10>><</if>>
 	<</if>>
+<<elseif (($slaves[$i].underArmHStyle != "bald" && $slaves[$i].underArmHStyle != "hairless") || ($slaves[$i].pubicHStyle != "bald" && $slaves[$i].pubicHStyle != "hairless")) && ($thisSurgery.bodyhair == 2)>>
+	<<set $surgeries.push("body hair removal")>>
+	<<if $slaves[$i].underArmHStyle != "hairless">><<set $slaves[$i].underArmHStyle = "bald">><</if>>
+	<<if $slaves[$i].pubicHStyle != "hairless">><<set $slaves[$i].pubicHStyle = "bald">><</if>>
+	<<set $cash -= $surgeryCost>>
+<<elseif ($slaves[$i].bald == 0 || $slaves[$i].hStyle != "bald") && ($thisSurgery.hair == 2)>>
+	<<set $surgeries.push("hair removal")>>
+	<<set $slaves[$i].hStyle = "bald", $slaves[$i].bald = 1>>
+	<<set $cash -= $surgeryCost>>
 <<else>>
 
 <<set $seed = 1>>
diff --git a/src/utility/raWidgets.tw b/src/utility/raWidgets.tw
index 6669868d1cb13d94fdffdfd6465ae5d196bb44dd..5221186b90699a8b68b5b7adcee1f08ec81a325d 100644
--- a/src/utility/raWidgets.tw
+++ b/src/utility/raWidgets.tw
@@ -2323,6 +2323,49 @@ Your brand design is ''$brandDesign.''
 <</replace>>
 <</widget>>
 
+
+/%
+ Call as <<RASurgeryChangeEyes>>
+%/
+<<widget "RASurgeryChangeEyes">>
+<<replace #eyes>>
+	<<if ($currentRule.surgery.eyes == "no default setting")>>
+		''no default setting.''
+	<<elseif ($currentRule.surgery.eyes == 1)>>
+		''fixed.''
+	<<else>>
+		''blurred.''
+	<</if>>
+
+	<br>
+
+	<<if ($currentRule.surgery.eyes !== "no default setting")>>
+		<<link "No default setting">>
+			<<set $currentRule.surgery.eyes = "no default setting">>
+			<<RASurgeryChangeEyes>>
+		<</link>> |
+	<<else>>
+		No default setting |
+	<</if>>
+	<<if ($currentRule.surgery.eyes !== 1)>>
+		<<link "Corrected">>
+			<<set $currentRule.surgery.eyes = 1>>
+			<<RASurgeryChangeEyes>>
+		<</link>> |
+	<<else>>
+		Corrected |
+	<</if>>
+	<<if ($currentRule.surgery.eyes !== -1)>>
+		<<link "Blurred">>
+			<<set $currentRule.surgery.eyes = -1>>
+			<<RASurgeryChangeEyes>>
+		<</link>>
+	<<else>>
+		Blurred
+	<</if>>
+<</replace>>
+<</widget>>
+
 /%
  Call as <<RASurgeryChangeLactation>>
 %/
@@ -2718,6 +2761,93 @@ Your brand design is ''$brandDesign.''
 <</replace>>
 <</widget>>
 
+/%
+ Call as <<RASurgeryBodyHair>>
+%/
+<<widget "RASurgeryBodyHair">>
+<<replace #bodyhair>>
+	<<if ($currentRule.surgery.bodyhair == 2)>>
+		''Removal''
+	<<elseif ($currentRule.surgery.bodyhair == 1)>>
+		''Keep''
+	<<else>>
+		''No default setting.''
+	<</if>>
+
+	<br>
+	<<if ($currentRule.surgery.bodyhair != 0)>>
+		<<link "No default setting">>
+		<<set $currentRule.surgery.bodyhair = 0>>
+		<<RASurgeryBodyHair>>
+		<</link>> |
+	<<else>>
+		No default setting |
+	<</if>>
+
+	<<if ($currentRule.surgery.bodyhair != 1)>>
+		<<link "Keep">>
+		<<set $currentRule.surgery.bodyhair = 1>>
+		<<RASurgeryBodyHair>>
+		<</link>> |
+	<<else>>
+		Keep |
+	<</if>>
+
+	<<if ($currentRule.surgery.bodyhair != 2)>>
+		<<link "Removal">>
+		<<set $currentRule.surgery.bodyhair = 2>>
+		<<RASurgeryBodyHair>>
+		<</link>>
+	<<else>>
+		Removal
+	<</if>>
+<</replace>>
+<</widget>>
+
+
+/%
+ Call as <<RASurgeryHair>>
+%/
+<<widget "RASurgeryHair">>
+<<replace #hair>>
+	<<if ($currentRule.surgery.hair == 2)>>
+		''Removal''
+	<<elseif ($currentRule.surgery.hair == 1)>>
+		''Keep''
+	<<else>>
+		''No default setting.''
+	<</if>>
+
+	<br>
+	<<if ($currentRule.surgery.hair != 0)>>
+		<<link "No default setting">>
+		<<set $currentRule.surgery.hair = 0>>
+		<<RASurgeryHair>>
+		<</link>> |
+	<<else>>
+		No default setting |
+	<</if>>
+
+	<<if ($currentRule.surgery.hair != 1)>>
+		<<link "Keep">>
+		<<set $currentRule.surgery.hair = 1>>
+		<<RASurgeryHair>>
+		<</link>> |
+	<<else>>
+		Keep |
+	<</if>>
+
+	<<if ($currentRule.surgery.hair != 2)>>
+		<<link "Removal">>
+		<<set $currentRule.surgery.hair = 2>>
+		<<RASurgeryHair>>
+		<</link>>
+	<<else>>
+		Removal
+	<</if>>
+<</replace>>
+<</widget>>
+
 /%
  % Call as <<RAFacilityRemove SlaveObject RuleObject>>
  %/
@@ -3532,9 +3662,9 @@ Your brand design is ''$brandDesign.''
 			<<set $args[0].drugs = "no drugs">>
 			<br>$args[0].slaveName's body has met all relevant growth targets, so her pharmaceutical regime has been ended.
 			<<break>>
-		<</if>>	
+		<</if>>
 	<<else>>
-		<<if $arcologies[0].FSAssetExpansionistResearch == 1>>	
+		<<if $arcologies[0].FSAssetExpansionistResearch == 1>>
 			<<set _hyper = "hyper ">>
 		<<else>>
 			<<set _hyper = "">>
@@ -4033,10 +4163,10 @@ Your brand design is ''$brandDesign.''
 		<br>$args[0].slaveName is ready to birth, so her labor has been stimulated.
 	<<elseif _combinedRule.pregSpeed == "fast" && $args[0].pregControl == "speed up" && $args[0].health <= -50>>
 		<<set $args[0].pregControl = "none">>
-		<br>$args[0].slaveName is on rapid gestation agents and dangerously unhealthy, so her agent regimen has been stopped. 
+		<br>$args[0].slaveName is on rapid gestation agents and dangerously unhealthy, so her agent regimen has been stopped.
 	<<elseif _combinedRule.pregSpeed == "suppress" && $args[0].pregControl == "labor supressors" && $args[0].health <= -50>>
 		<<set $args[0].pregControl = "none">>
-		<br>$args[0].slaveName is on labor supression agents and unhealthy, so her agent regimen has been stopped. 
+		<br>$args[0].slaveName is on labor supression agents and unhealthy, so her agent regimen has been stopped.
 	<</if>>
 <</if>>