diff --git a/src/uncategorized/generateXXSlave.tw b/src/uncategorized/generateXXSlave.tw
index 52049f274b0b1fe16c76d4d04e1f18f4cd034654..62267a2ebadf2fcf04fe9a4b905d1653c9b51daf 100644
--- a/src/uncategorized/generateXXSlave.tw
+++ b/src/uncategorized/generateXXSlave.tw
@@ -5,47 +5,8 @@
 <<set WombInit($activeSlave)>>
 <<set $activeSlave.vaginaLube = 1, $activeSlave.ovaries = 1, $activeSlave.canRecruit = 1>>
 
-<<if $activeSlaveOneTimeMaxAge > 998>>
-	<<if $pedo_mode == 1>>
-		<<set $activeSlaveOneTimeMaxAge = 18>>
-	<<else>>
-		<<set $activeSlaveOneTimeMaxAge = 42>>
-	<</if>>
-<<elseif $pedo_mode == 1 && $one_time_age_overrides_pedo_mode == 0 && $activeSlaveOneTimeMaxAge > 18>>
-	<<set $activeSlaveOneTimeMaxAge = 18>>
-<</if>>
-<<if $retirementAge < $activeSlaveOneTimeMaxAge>>
-	<<set $activeSlaveOneTimeMaxAge = ($retirementAge-1)>>
-<</if>>
-<<if $activeSlaveOneTimeMinAge < $minimumSlaveAge>>
-	<<set $activeSlaveOneTimeMinAge = $minimumSlaveAge>>
-<<elseif $pedo_mode == 1 && $one_time_age_overrides_pedo_mode == 0>>
-	<<set $activeSlaveOneTimeMinAge = $minimumSlaveAge>>
-<</if>>
-<<if $activeSlaveOneTimeMaxAge < $activeSlaveOneTimeMinAge>>
-	<<set $activeSlaveOneTimeMaxAge = $activeSlaveOneTimeMinAge>>
-<</if>>
-<<if ($activeSlaveOneTimeMaxAge >= 30) && ($arcologies[0].FSMaturityPreferentialist != "unset")>>
-	<<set $activeSlaveOneTimeMaxAge = ($activeSlaveOneTimeMaxAge + 10)>>
-<</if>>
-<<set $activeSlave.actualAge = random($activeSlaveOneTimeMinAge,$activeSlaveOneTimeMaxAge)>>
-<<set _secondAgeRoll = random($activeSlaveOneTimeMinAge,$activeSlaveOneTimeMaxAge)>>
-<<if ($arcologies[0].FSYouthPreferentialist != "unset") && ($arcologies[0].FSYouthPreferentialist >= random(1,100))>>
-	<<set $activeSlave.actualAge = Math.min($activeSlave.actualAge, _secondAgeRoll)>>
-<<elseif ($arcologies[0].FSMaturityPreferentialist != "unset") && ($arcologies[0].FSMaturityPreferentialist >= random(1,100))>>
-	<<set $activeSlave.actualAge = Math.max($activeSlave.actualAge, _secondAgeRoll)>>
-<</if>>
-<<if $activeSlave.actualAge >= $retirementAge>>
-	<<set $activeSlave.actualAge = ($retirementAge-2)>>
-<</if>>
-<<set $activeSlaveOneTimeMinAge = 0>>
-<<set $activeSlaveOneTimeMaxAge = 999>>
-<<set $one_time_age_overrides_pedo_mode = 0>>
-<<set $activeSlave.visualAge = $activeSlave.actualAge>>
-<<set $activeSlave.physicalAge = $activeSlave.actualAge>>
-<<set $activeSlave.ovaryAge = $activeSlave.actualAge>>
-<<set $activeSlave.age = $activeSlave.actualAge>> /*compatibility*/
-<<set $activeSlave.pubertyAgeXX = $fertilityAge>>
+<<GenerateAge $activeSlave>>
+
 <<if $activeSlave.ovaries == 1>>
 	<<if $activeSlave.physicalAge >= $activeSlave.pubertyAgeXX>>
 		<<set $activeSlave.pubertyXX = 1>>
@@ -55,16 +16,7 @@
 <<else>>
 	<<set $activeSlave.pubertyXX = 0>>
 <</if>>
-<<set $activeSlave.pubertyAgeXY = $potencyAge>>
-<<if $activeSlave.balls > 0>>
-	<<if $activeSlave.physicalAge >= $activeSlave.pubertyAgeXY>>
-		<<set $activeSlave.pubertyXY = 1>>
-	<<else>>
-		<<set $activeSlave.pubertyXY = 0>>
-	<</if>>
-<<else>>
-	<<set $activeSlave.pubertyXY = 0>>
-<</if>>
+<<set $activeSlave.pubertyXY = 0>>
 
 <<set $activeSlave.ID = $IDNumber++>>
 <<set $activeSlave.weekAcquired = $week>>
diff --git a/src/uncategorized/generateXYSlave.tw b/src/uncategorized/generateXYSlave.tw
index efe7351b5152d9468db6ed485602ef3716f4e3c0..adf72da7e55556292e1915d17dbb5f3a8d50aeea 100644
--- a/src/uncategorized/generateXYSlave.tw
+++ b/src/uncategorized/generateXYSlave.tw
@@ -5,47 +5,8 @@
 <<set WombInit($activeSlave)>>
 <<set $activeSlave.genes = "XY", $activeSlave.hLength = 10, $activeSlave.prostate = 1, $activeSlave.canRecruit = 1>>
 
-<<if $activeSlaveOneTimeMaxAge > 998>>
-	<<if $pedo_mode == 1>>
-		<<set $activeSlaveOneTimeMaxAge = 18>>
-	<<else>>
-		<<set $activeSlaveOneTimeMaxAge = 42>>
-	<</if>>
-<<elseif $pedo_mode == 1 && $one_time_age_overrides_pedo_mode == 0 && $activeSlaveOneTimeMaxAge > 18>>
-	<<set $activeSlaveOneTimeMaxAge = 18>>
-<</if>>
-<<if $retirementAge < $activeSlaveOneTimeMaxAge>>
-	<<set $activeSlaveOneTimeMaxAge = ($retirementAge-1)>>
-<</if>>
-<<if $activeSlaveOneTimeMinAge < $minimumSlaveAge>>
-	<<set $activeSlaveOneTimeMinAge = $minimumSlaveAge>>
-<<elseif $pedo_mode == 1 && $one_time_age_overrides_pedo_mode == 0>>
-	<<set $activeSlaveOneTimeMinAge = $minimumSlaveAge>>
-<</if>>
-<<if $activeSlaveOneTimeMaxAge < $activeSlaveOneTimeMinAge>>
-	<<set $activeSlaveOneTimeMaxAge = $activeSlaveOneTimeMinAge>>
-<</if>>
-<<if ($activeSlaveOneTimeMaxAge >= 30) && ($arcologies[0].FSMaturityPreferentialist != "unset")>>
-	<<set $activeSlaveOneTimeMaxAge = ($activeSlaveOneTimeMaxAge + 10)>>
-<</if>>
-<<set $activeSlave.actualAge = random($activeSlaveOneTimeMinAge,$activeSlaveOneTimeMaxAge)>>
-<<set _secondAgeRoll = random($activeSlaveOneTimeMinAge,$activeSlaveOneTimeMaxAge)>>
-<<if ($arcologies[0].FSYouthPreferentialist != "unset") && ($arcologies[0].FSYouthPreferentialist >= random(1,100))>>
-	<<set $activeSlave.actualAge = Math.min($activeSlave.actualAge, _secondAgeRoll)>>
-<<elseif ($arcologies[0].FSMaturityPreferentialist != "unset") && ($arcologies[0].FSMaturityPreferentialist >= random(1,100))>>
-	<<set $activeSlave.actualAge = Math.max($activeSlave.actualAge, _secondAgeRoll)>>
-<</if>>
-<<if $activeSlave.actualAge >= $retirementAge>>
-	<<set $activeSlave.actualAge = ($retirementAge-2)>>
-<</if>>
-<<set $activeSlaveOneTimeMinAge = 0>>
-<<set $activeSlaveOneTimeMaxAge = 999>>
-<<set $one_time_age_overrides_pedo_mode = 0>>
-<<set $activeSlave.visualAge = $activeSlave.actualAge>>
-<<set $activeSlave.physicalAge = $activeSlave.actualAge>>
-<<set $activeSlave.ovaryAge = $activeSlave.actualAge>>
-<<set $activeSlave.age = $activeSlave.actualAge>> /*compatibility*/
-<<set $activeSlave.pubertyAgeXX = $fertilityAge>>
+<<GenerateAge $activeSlave>>
+
 <<if $activeSlave.ovaries == 1>>
 	<<if $activeSlave.physicalAge >= $activeSlave.pubertyAgeXX>>
 		<<set $activeSlave.pubertyXX = 1>>
@@ -55,6 +16,7 @@
 <<else>>
 	<<set $activeSlave.pubertyXX = 0>>
 <</if>>
+
 <<set $activeSlave.ID = $IDNumber++>>
 <<set $activeSlave.weekAcquired = $week>>
 
@@ -425,7 +387,6 @@
 <</if>>
 <<set $activeSlave.scrotum = $activeSlave.balls>>
 
-<<set $activeSlave.pubertyAgeXY = $potencyAge>>
 <<if $activeSlave.balls > 0>>
 	<<if $activeSlave.physicalAge >= $activeSlave.pubertyAgeXY>>
 		<<set $activeSlave.pubertyXY = 1>>
diff --git a/src/utility/slaveGenerationWidgets.tw b/src/utility/slaveGenerationWidgets.tw
index 611eada41f621b11d3df9d28bbf007bbdbe0ef1d..473168f67ca857d7b8cb395a4cc6a4c01c51f1e8 100644
--- a/src/utility/slaveGenerationWidgets.tw
+++ b/src/utility/slaveGenerationWidgets.tw
@@ -954,3 +954,51 @@
 <</if>>
 
 <</widget>>
+
+/* Call as <<GenerateAge slave>> */
+<<widget "GenerateAge">>
+
+<<if $activeSlaveOneTimeMaxAge > 998>>
+	<<if $pedo_mode == 1>>
+		<<set $activeSlaveOneTimeMaxAge = 18>>
+	<<else>>
+		<<set $activeSlaveOneTimeMaxAge = 42>>
+	<</if>>
+<<elseif $pedo_mode == 1 && $one_time_age_overrides_pedo_mode == 0 && $activeSlaveOneTimeMaxAge > 18>>
+	<<set $activeSlaveOneTimeMaxAge = 18>>
+<</if>>
+<<if $retirementAge < $activeSlaveOneTimeMaxAge>>
+	<<set $activeSlaveOneTimeMaxAge = ($retirementAge-1)>>
+<</if>>
+<<if $activeSlaveOneTimeMinAge < $minimumSlaveAge>>
+	<<set $activeSlaveOneTimeMinAge = $minimumSlaveAge>>
+<<elseif $pedo_mode == 1 && $one_time_age_overrides_pedo_mode == 0>>
+	<<set $activeSlaveOneTimeMinAge = $minimumSlaveAge>>
+<</if>>
+<<if $activeSlaveOneTimeMaxAge < $activeSlaveOneTimeMinAge>>
+	<<set $activeSlaveOneTimeMaxAge = $activeSlaveOneTimeMinAge>>
+<</if>>
+<<if ($activeSlaveOneTimeMaxAge >= 30) && ($arcologies[0].FSMaturityPreferentialist != "unset")>>
+	<<set $activeSlaveOneTimeMaxAge = ($activeSlaveOneTimeMaxAge + 10)>>
+<</if>>
+<<set $args[0].actualAge = random($activeSlaveOneTimeMinAge,$activeSlaveOneTimeMaxAge)>>
+<<set _secondAgeRoll = random($activeSlaveOneTimeMinAge,$activeSlaveOneTimeMaxAge)>>
+<<if ($arcologies[0].FSYouthPreferentialist != "unset") && ($arcologies[0].FSYouthPreferentialist >= random(1,100))>>
+	<<set $args[0].actualAge = Math.min($args[0].actualAge, _secondAgeRoll)>>
+<<elseif ($arcologies[0].FSMaturityPreferentialist != "unset") && ($arcologies[0].FSMaturityPreferentialist >= random(1,100))>>
+	<<set $args[0].actualAge = Math.max($args[0].actualAge, _secondAgeRoll)>>
+<</if>>
+<<if $args[0].actualAge >= $retirementAge>>
+	<<set $args[0].actualAge = ($retirementAge-2)>>
+<</if>>
+<<set $activeSlaveOneTimeMinAge = 0>>
+<<set $activeSlaveOneTimeMaxAge = 999>>
+<<set $one_time_age_overrides_pedo_mode = 0>>
+<<set $args[0].visualAge = $args[0].actualAge>>
+<<set $args[0].physicalAge = $args[0].actualAge>>
+<<set $args[0].ovaryAge = $args[0].actualAge>>
+<<set $args[0].age = $args[0].actualAge>> /*compatibility*/
+<<set $args[0].pubertyAgeXX = $fertilityAge>>
+<<set $args[0].pubertyAgeXY = $potencyAge>>
+
+<</widget>>