diff --git a/src/SecExp/SecExpBackwardCompatibility.tw b/src/SecExp/SecExpBackwardCompatibility.tw
index 1a84a94631cb15b3dfc87a2ed7ace04b0ea7efba..063e79d6b0f03cc1e2b4fb6d50279b17b0af28a2 100644
--- a/src/SecExp/SecExpBackwardCompatibility.tw
+++ b/src/SecExp/SecExpBackwardCompatibility.tw
@@ -821,6 +821,12 @@
 <<if ndef $rebellingID>>
 <<set $rebellingID = []>>
 <</if>>
+<<if ndef $saveValid>>
+<<set $saveValid = 0>>
+<</if>>
+<<if ndef $lastSelection>>
+<<set $lastSelection = []>>
+<</if>>
 
 /* statistics */
 <<if ndef $baseBribePerAttacker>>
@@ -944,6 +950,7 @@
 	<<if $arcologyUpgrade.drones == 0>>
 		<<set $secBots = {
 		active: 0,
+		ID: -1,
 		isDeployed: 0,
 		troops: 0,
 		maxTroops: 0,
@@ -951,6 +958,7 @@
 	<<elseif $arcologyUpgrade.drones == 1>>
 		<<set $secBots = {
 		active: 1,
+		ID: -1,
 		isDeployed: 0,
 		troops: 30,
 		maxTroops: 30,
diff --git a/src/SecExp/attackOptions.tw b/src/SecExp/attackOptions.tw
index bf7c2e15d3665d2138b6486ee792d00a8705e9d8..e0ddd9e1b7efe98898b4b4ee5b6bf558d1abb2ce 100644
--- a/src/SecExp/attackOptions.tw
+++ b/src/SecExp/attackOptions.tw
@@ -250,6 +250,7 @@ With your current readiness level you can <<if $deployedUnits > 0>>still send <s
 				<<set $deployableUnits-->>
 				<<set $deployedUnits++>>
 				<<set $deployingBots = 1>>
+				<<set $saveValid = 0>>
 				<<goto "attackOptions">>
 			<</link>>
 		<</if>>
@@ -263,6 +264,7 @@ With your current readiness level you can <<if $deployedUnits > 0>>still send <s
 				<<set $militiaUnits[_i].isDeployed = 1>>
 				<<set $deployableUnits-->>
 				<<set $deployedUnits++>>
+				<<set $saveValid = 0>>
 				<<goto "attackOptions">>
 			<</link>>
 		<</if>>
@@ -278,6 +280,7 @@ With your current readiness level you can <<if $deployedUnits > 0>>still send <s
 				<<set $slaveUnits[_i].isDeployed = 1>>
 				<<set $deployableUnits-->>
 				<<set $deployedUnits++>>
+				<<set $saveValid = 0>>
 				<<goto "attackOptions">>
 			<</link>>
 		<</if>>
@@ -293,6 +296,7 @@ With your current readiness level you can <<if $deployedUnits > 0>>still send <s
 				<<set $mercUnits[_i].isDeployed = 1>>
 				<<set $deployableUnits-->>
 				<<set $deployedUnits++>>
+				<<set $saveValid = 0>>
 				<<goto "attackOptions">>
 			<</link>>
 		<</if>>
@@ -317,6 +321,7 @@ Units about to be deployed:
 				<<set $deployableUnits++>>
 				<<set $deployedUnits-->>
 				<<set $deployingBots = 0>>
+				<<set $saveValid = 0>>
 				<<goto "attackOptions">>
 			<</link>>
 		<</if>>
@@ -330,6 +335,7 @@ Units about to be deployed:
 				<<set $militiaUnits[_i].isDeployed = 0>>
 				<<set $deployableUnits++>>
 				<<set $deployedUnits-->>
+				<<set $saveValid = 0>>
 				<<goto "attackOptions">>
 			<</link>>
 		<</if>>
@@ -345,6 +351,7 @@ Units about to be deployed:
 				<<set $slaveUnits[_i].isDeployed = 0>>
 				<<set $deployableUnits++>>
 				<<set $deployedUnits-->>
+				<<set $saveValid = 0>>
 				<<goto "attackOptions">>
 			<</link>>
 		<</if>>
@@ -360,6 +367,7 @@ Units about to be deployed:
 				<<set $mercUnits[_i].isDeployed = 0>>
 				<<set $deployableUnits++>>
 				<<set $deployedUnits-->>
+				<<set $saveValid = 0>>
 				<<goto "attackOptions">>
 			<</link>>
 		<</if>>
@@ -391,6 +399,109 @@ Units about to be deployed:
 	<</if>>
 	<br>//Some upgrades will be able to support the troops even if the security force does not intervene directly in the fight.//
 <</if>>
+
+<br><br>	
+
+<<if $lastSelection.length > 0>>
+	<<link "Restore saved roster">>
+		<<set $deployableUnits = $readiness * 2>>
+		<<set $deployedUnits = 0>>
+		<<for _i = 0; _i < $lastSelection.length; _i++>>
+			<<if $lastSelection[_i] == -1>>
+				<<set $secBots.isDeployed = 1>>
+			<<else>>
+				<<for _j = 0; _j < $militiaUnits.length; _j++>>
+					<<if $lastSelection[_i] == $militiaUnits[_j].ID>>
+						<<set $militiaUnits[_j].isDeployed = 1>>
+						<<set $deployableUnits-->>
+						<<set $deployedUnits++>>
+						<<break>>
+					<</if>>
+				<</for>>
+				<<for _j = 0; _j < $slaveUnits.length; _j++>>
+					<<if $lastSelection[_i] == $slaveUnits[_j].ID>>
+						<<set $slaveUnits[_j].isDeployed = 1>>
+						<<set $deployableUnits-->>
+						<<set $deployedUnits++>>
+						<<break>>
+					<</if>>
+				<</for>>
+				<<for _j = 0; _j < $mercUnits.length; _j++>>
+					<<if $lastSelection[_i] == $mercUnits[_j].ID>>
+						<<set $mercUnits[_j].isDeployed = 1>>
+						<<set $deployableUnits-->>
+						<<set $deployedUnits++>>
+						<<break>>
+					<</if>>
+				<</for>>
+			<</if>>
+		<</for>>
+		<<set $saveValid = 1>>
+		<<goto "attackOptions">>
+	<</link>>
+<<else>>
+	Restore saved roster
+<</if>>
+|
+<<if $saveValid != 1>>
+	<<link "Save current roster">>
+		<<if $secBots.isDeployed == 1>>
+			<<set _tmp = -1>>
+			<<set $lastSelection.push(_tmp)>>
+		<</if>>
+		<<for _i = 0; _i < $militiaUnits.length; _i++>>
+			<<if $militiaUnits[_i].isDeployed == 1>>
+				<<set $lastSelection.push($militiaUnits[_i].ID)>>
+			<</if>>
+		<</for>>
+		<<for _i = 0; _i < $slaveUnits.length; _i++>>
+			<<if $slaveUnits[_i].isDeployed == 1>>
+				<<set $lastSelection.push($slaveUnits[_i].ID)>>
+			<</if>>
+		<</for>>
+		<<for _i = 0; _i < $mercUnits.length; _i++>>
+			<<if $mercUnits[_i].isDeployed == 1>>
+				<<set $lastSelection.push($mercUnits[_i].ID)>>
+			<</if>>
+		<</for>>
+		<<set $saveValid = 1>>
+		<<goto "attackOptions">>
+	<</link>>
+<<else>>
+	Save current roster
+<</if>>
+|
+<<if $deployedUnits > 0>>
+	<<link "Clear current roster">>
+		<<set $secBots.isDeployed = 0>>
+		<<for _i = 0; _i < $militiaUnits.length; _i++>>
+			<<set $militiaUnits[_i].isDeployed = 0>>
+		<</for>>
+		<<for _i = 0; _i < $slaveUnits.length; _i++>>
+			<<set $slaveUnits[_i].isDeployed = 0>>
+		<</for>>
+		<<for _i = 0; _i < $mercUnits.length; _i++>>
+			<<set $mercUnits[_i].isDeployed = 0>>
+		<</for>>
+		<<set $saveValid = 0>>
+		<<set $deployableUnits = $readiness * 2>>
+		<<set $deployedUnits = 0>>
+		<<goto "attackOptions">>
+	<</link>>
+<<else>>
+	Clear current roster
+<</if>>
+|
+<<if $lastSelection.length > 0>>
+	<<link "Clear saved roster">>
+		<<unset $lastSelection>>
+		<<set $lastSelection = []>>
+		<<set $saveValid = 0>>
+		<<goto "attackOptions">>
+	<</link>>
+<<else>>
+	Clear saved roster
+<</if>>
 		
 <br><br>
 
diff --git a/src/SecExp/secInit.tw b/src/SecExp/secInit.tw
index ded13968eaeea850d10073aacad11d8b72bf6acf..4cf11973a3bdf77dd4232ee3be34c7fe826677d0 100644
--- a/src/SecExp/secInit.tw
+++ b/src/SecExp/secInit.tw
@@ -283,6 +283,8 @@
 <<set $SFdef = 0>>
 <<set $SFhp = 0>>
 <<set $rebellingID = []>>
+<<set $saveValid = 0>>
+<<set $lastSelection = []>>
 
 /* statistics */
 <<set $baseBribePerAttacker = 5>>
@@ -327,6 +329,7 @@
 
 <<set $secBots = {
 	active: 0,
+	ID: -1,
 	isDeployed: 0,
 	troops: 0,
 	maxTroops: 0,
diff --git a/src/SecExp/widgets/miscSecExpWidgets.tw b/src/SecExp/widgets/miscSecExpWidgets.tw
index e93bcbf5451dab4f61d8380092ea19e1af5020c3..61ee758a58fc7141371b4b7eaef63300d0177adf 100644
--- a/src/SecExp/widgets/miscSecExpWidgets.tw
+++ b/src/SecExp/widgets/miscSecExpWidgets.tw
@@ -226,6 +226,9 @@
 <</widget>>
 
 <<widget "fixBrokenUnits">>
+	<<if ndef $secBots.ID>>
+		<<set $secBots.ID = -1>>
+	<</if>>
 	<<if $secBots.maxTroops < 30>>
 		<br>Fixed security bots wrong max troop count.
 		<<set $secBots.maxTroops = 30>>
diff --git a/src/SecExp/widgets/unitsWidgets.tw b/src/SecExp/widgets/unitsWidgets.tw
index deb3a61134fd4f42de044155d247e9dbe7f6fb3d..61029b7278450ea8632f4c4c170da83c4ea7283b 100644
--- a/src/SecExp/widgets/unitsWidgets.tw
+++ b/src/SecExp/widgets/unitsWidgets.tw
@@ -176,5 +176,6 @@
 			<<set _newID = $mercUnits[_i].ID + 1>>
 		<</if>>
 	<</for>>
+	
 	<<set $args[0].ID = _newID>>
 <</widget>>
\ No newline at end of file
diff --git a/src/uncategorized/barracks.tw b/src/uncategorized/barracks.tw
index 70e421db9049dd757ea57a3c69703a1e24202c78..5f566b0a8b002573a3ca9ed0bce1927ada77286c 100644
--- a/src/uncategorized/barracks.tw
+++ b/src/uncategorized/barracks.tw
@@ -27,6 +27,8 @@ As you enter the main bay of the armory, lined with modern arms and armor and a
 		The heavier sets of powered armor have Roman standards mounted on their backs, and officers' helmets are distinguished by horsehair crests.
 	<<case "Shorn Ones">>
 		The bigger sets of power armor are adorned with multiple ornaments and painted with symbols of the gods and victory.
+	<<case "Imperial Guards">>
+		Their prototype armor is equipped with the latest weapons and their Imperial Chinese war banner strikes fear into the foes.
 	<<case "Medjay">>
 		The gear is accented with bronze and animal skins. Some of the heavier armored helmets even have faceplates styled after Pharaonic death masks.
 	<<case "Samurai">>
@@ -37,20 +39,36 @@ As you enter the main bay of the armory, lined with modern arms and armor and a
 		All the armor includes a modernized version of a white surcoat emblazoned with the symbol of the new faith.
 	<<case "Immortals">>
 		The lighting in the bay has been lowered, and the gear is styled to be menacing. There's a sense of leashed danger here.
+	<<case "Vast Legions">>
+		Their bulky, heavily armored prototype armor strikes terror into foes and cuases the earth to shake when they walk.
+	<<case "Surgical Corps">>
+		Their protoype armor is equipped with the latest medical equipment.
+	<<case "Inglorious Bitches">>
+		Their garish neon pink protoype armor shines brightly.
+	<<case "Thousand Sons">>
+		Their protoype armor is designed to preserve a sample of the wearer's genetic material in the event of death.		
+	<<case "Guardians of the Unborn">>
+		Their gear is designed to be accommodating to pregnant women and even includes a special kit incase a baby needs delivering and they're the only ones around.
+	<<case "Shadowed Hand">>
+		Their armor prominently displays the symbol of the Societal Elite and is designed to make it perfectly clear that they mean business.
 	<<case "Asgardians">>
 		Their armor has been modified to allow the wearers' muscular arms to remain visible, and the heavier armor seems to be equipped with capes.
+	<<case "Tasters">>
+		Their armor has been modified to handle all sorts of waistlines. They contain numerous pockets and containers; it's not unusual to see a merc offering someone a needed pickmeup.	
 	<<case "Knights of the Blood">>
-		Their gear is adorned with the badges and ensigns of racialist societies, and posters from the same sources are visible on the walls.
-	<<case "Rangers">>
-		Their gear has a heavy Western influence; everyone carries heavy revolvers everywhere, and the armor sports rope lariats for lassoing 'cattle.'	
+		Their gear is adorned with the badges and ensigns of racialist societies, and posters from the same sources are visible on the walls.		
+	<<case "Knights of the Purge">>
+		Their prototype armor is equipped with the latest weapons.
 	<<case "Wardens">>
 		Their gear is designed to take their foes alive and relatively unharmed, though lethal force can be applied if need be.
-	<<case "Shadowed Hand">>
-		Their armor prominently displays the symbol of the Societal Elite and is designed to make it perfectly clear that they mean business.
-	<<case "Guardians of the Unborn">>
-		Their gear is designed to be accommodating to pregnant women and even includes a special kit incase a baby needs delivering and they're the only ones around.
-	<<case "Tasters">>
-		Their armor has been modified to handle all sorts of waistlines. They contain numerous pockets and containers; it's not unusual to see a merc offering someone a needed pickmeup.
+	<<case "Purifiers">>
+		Their prototype armor is equipped with a cleansing flamethrower. In addition to sriking fear into their foes it also cooks a mean stake.
+	<<case "Abstemious">>
+		Their sleek prototype armor is equipped with advanced restraining weapons.
+	<<case "Rangers">>
+		Their gear has a heavy Western influence; everyone carries heavy revolvers everywhere, and the armor sports rope lariats for lassoing 'cattle.'	
+	<<default>>
+		Their armor has been modified to help them blend into whatever AO they find themsleves in. Insignias are clearly visable and displayed with obvious pride.
 	<</switch>>
 <</if>>
 There are doors to magazines, armories, and training areas to all sides, and muffled gunfire can be heard from the latter.
@@ -134,7 +152,7 @@ You head up a deck, to the staff area, and up one more, to look into the living
 
 <<if $mercenariesHelpCorp > 0>>
 	<br><br>
-	As you leave, a squad moves thunderously into the bay, fresh from a slave raid on behalf of your corporation. Most of their captures have been dropped off with the corporate receivers, but they've been given a pretty girl who isn't a good training prospect for the corporate brand, a common reward. The squad looks after their weapons and armor first, an inviolable rule, and as they do, they leave their naked slave standing in the middle of the bay, ignored. She isn't even bound, but she's standing nude and alone amongst modern mercenaries, and she knows there's nothing she can do. So, she does her best to cover herself with her hands, and she cries.
+	As you leave, a squad moves thunderously into the bay, fresh from a slave raid on behalf of your corporation. Most of their captures have been dropped off with the corporate receivers, but they've been given a pretty girl who isn't a good training prospect for the corporate brand, a common reward. The squad looks after their weapons and armor first, an inviolable rule, and as they do, they leave their naked slave standing in the middle of the bay, ignored. She isn't even bound, but she's standing nude and alone amongst modern mercenaries, so she knows that resistance is futile. So she does the only thing left available to her,try to cover herself with her hands and cry.
 <</if>>
 
 <br><br>
diff --git a/src/uncategorized/costsReport.tw b/src/uncategorized/costsReport.tw
index 38e882a01f5bb6a3d8e879996170d89403c095c1..d2276402f2d95f2264f608e6bb3993337a0fe5d7 100644
--- a/src/uncategorized/costsReport.tw
+++ b/src/uncategorized/costsReport.tw
@@ -209,6 +209,7 @@
 <<if $PC.actualAge >= $IsInPrimePC && $PC.actualAge < $IsPastPrimePC>>
 <br>
 <br>
+<<if ($personalAttention == "trading") || ($personalAttention == "warfare") || ($personalAttention == "slaving") || ($personalAttention == "engineering") || ($personalAttention == "medicine")>>
 <<set _cost = 10000*$AgeEffectOnTrainerPricingPC>>	
 <<switch $personalAttention>>
 <br>
@@ -226,6 +227,7 @@
 trainer fees: <<print cashFormat(_cost)>>
 <br>
 <</if>>
+<</if>>
 
 <br>
 
diff --git a/src/uncategorized/genericPlotEvents.tw b/src/uncategorized/genericPlotEvents.tw
index e5bd67de94cb3227758c5026b8e9b0ad589a6bad..5bde5625f633fbb38e6db7e50af11c6e2a5998a2 100644
--- a/src/uncategorized/genericPlotEvents.tw
+++ b/src/uncategorized/genericPlotEvents.tw
@@ -48,7 +48,7 @@ The firm promptly pays @@.yellowgreen; a large compensation@@ for potentially ru
 
 It's been a good few weeks, getting settled in as owner of $arcologies[0].name. The power of being overlord of this great building and everyone in it is incredible, but so is the responsibility. It's a good thing you have ample opportunities for stress relief. You're going to need them after today. There's a nasty disturbance on a business level of the arcology. Normally, the arcology's public safety drones would suppress this kind of nonsense, but $assistantName program is suggesting that you resolve the dispute.
 <br><br>
-As you step off the elevator, you hear female shouting. Apparently one of $arcologies[0].name's few remaining strip joints has closed. It was a topless bar and strip club all in one, but the owner is packing up his things. He's explaining to a crowd of his angry former employees that he can't make ends meet. The price of a slave whore is barely higher than that of a lapdance from a free stripper; it's not surprising. It looks like the girls are on the verge of trashing the place.
+As you step off the elevator, you hear female shouting. Apparently one of $arcologies[0].name's few remaining strip joints has closed. It was a topless bar and strip club all in one, but the owner is packing up his things. He's explaining to a crowd of his angry former employees that he can't make ends meet.As the price of a slave whore is barely higher than that of a lapdance from a free stripper; it's not surprising. It looks like the girls are on the verge of trashing the place.
 
 <<case "strip club aftermath">>