Index: binaries/data/mods/public/audio/interface/alarm/alarm_alert_0.xml
===================================================================
--- binaries/data/mods/public/audio/interface/alarm/alarm_alert_0.xml	(revision 0)
+++ binaries/data/mods/public/audio/interface/alarm/alarm_alert_0.xml	(working copy)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8" standalone="no" ?>
+<SoundGroup>
+	<Omnipresent>1</Omnipresent>
+	<HeardBy>owner</HeardBy>
+	<Gain>0.25</Gain>
+	<Pitch>1</Pitch>
+	<Priority>100</Priority>
+	<ConeGain>1</ConeGain>
+	<ConeInner>360</ConeInner>
+	<ConeOuter>360</ConeOuter>
+	<Looping>0</Looping>
+	<RandOrder>1</RandOrder>
+	<RandGain>1</RandGain>
+	<GainUpper>0.25</GainUpper>
+	<GainLower>0.2</GainLower>
+	<RandPitch>1</RandPitch>
+	<PitchUpper>1.1</PitchUpper>
+	<PitchLower>0.9</PitchLower>
+	<Threshold>1</Threshold>
+	<Decay>3</Decay>
+	<Replacement>alarmalert0.ogg</Replacement>
+	<Path>audio/interface/alarm/</Path>
+	<Sound>alarmalert0.ogg</Sound>
+</SoundGroup>
Index: binaries/data/mods/public/audio/interface/alarm/alarm_alert_1.xml
===================================================================
--- binaries/data/mods/public/audio/interface/alarm/alarm_alert_1.xml	(revision 0)
+++ binaries/data/mods/public/audio/interface/alarm/alarm_alert_1.xml	(working copy)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8" standalone="no" ?>
+<SoundGroup>
+	<Omnipresent>1</Omnipresent>
+	<HeardBy>owner</HeardBy>
+	<Gain>0.25</Gain>
+	<Pitch>1</Pitch>
+	<Priority>100</Priority>
+	<ConeGain>1</ConeGain>
+	<ConeInner>360</ConeInner>
+	<ConeOuter>360</ConeOuter>
+	<Looping>0</Looping>
+	<RandOrder>1</RandOrder>
+	<RandGain>1</RandGain>
+	<GainUpper>0.25</GainUpper>
+	<GainLower>0.2</GainLower>
+	<RandPitch>1</RandPitch>
+	<PitchUpper>1.1</PitchUpper>
+	<PitchLower>0.9</PitchLower>
+	<Threshold>1</Threshold>
+	<Decay>3</Decay>
+	<Replacement>alarmalert1.ogg</Replacement>
+	<Path>audio/interface/alarm/</Path>
+	<Sound>alarmalert1.ogg</Sound>
+</SoundGroup>
Index: binaries/data/mods/public/audio/interface/alarm/alarm_alert_2.xml
===================================================================
--- binaries/data/mods/public/audio/interface/alarm/alarm_alert_2.xml	(revision 0)
+++ binaries/data/mods/public/audio/interface/alarm/alarm_alert_2.xml	(working copy)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8" standalone="no" ?>
+<SoundGroup>
+	<Omnipresent>1</Omnipresent>
+	<HeardBy>owner</HeardBy>
+	<Gain>0.25</Gain>
+	<Pitch>1</Pitch>
+	<Priority>100</Priority>
+	<ConeGain>1</ConeGain>
+	<ConeInner>360</ConeInner>
+	<ConeOuter>360</ConeOuter>
+	<Looping>0</Looping>
+	<RandOrder>1</RandOrder>
+	<RandGain>1</RandGain>
+	<GainUpper>0.25</GainUpper>
+	<GainLower>0.2</GainLower>
+	<RandPitch>1</RandPitch>
+	<PitchUpper>1.1</PitchUpper>
+	<PitchLower>0.9</PitchLower>
+	<Threshold>1</Threshold>
+	<Decay>3</Decay>
+	<Replacement>alarmalert2.ogg</Replacement>
+	<Path>audio/interface/alarm/</Path>
+	<Sound>alarmalert2.ogg</Sound>
+</SoundGroup>
Index: binaries/data/mods/public/gui/session/input.js
===================================================================
--- binaries/data/mods/public/gui/session/input.js	(revision 14215)
+++ binaries/data/mods/public/gui/session/input.js	(working copy)
@@ -1844,6 +1844,12 @@
 			case "back-to-work":
 				backToWork();
 				break;
+			case "increase-alert-level":
+				increaseAlertLevel();
+				break;
+			case "alert-end":
+				endOfAlert();
+				break;
 			default:
 				break;
 			}
@@ -2106,6 +2112,26 @@
 	
 }
 
+function increaseAlertLevel()
+{
+	var raisers = g_Selection.toList().filter(function(e) {
+		var state = GetEntityState(e);
+		return (state && state.alertRaiser && state.alertRaiser.canIncreaseLevel);
+	});
+	
+	Engine.PostNetworkCommand({"type": "increase-alert-level", "entities": raisers});	
+}
+
+function endOfAlert()
+{
+	var raisers = g_Selection.toList().filter(function(e) {
+		var state = GetEntityState(e);
+		return (state && state.alertRaiser && state.alertRaiser.hasRaisedAlert);
+	});
+	
+	Engine.PostNetworkCommand({"type": "alert-end", "entities": raisers});
+}
+
 function clearSelection()
 {
 	if(inputState==INPUT_BUILDING_PLACEMENT || inputState==INPUT_BUILDING_WALL_PATHING)
Index: binaries/data/mods/public/gui/session/utility_functions.js
===================================================================
--- binaries/data/mods/public/gui/session/utility_functions.js	(revision 14215)
+++ binaries/data/mods/public/gui/session/utility_functions.js	(working copy)
@@ -302,6 +302,23 @@
 		    "icon": "production.png"
 		});
 	}
+	
+	if(entState.alertRaiser)
+	{
+		if(entState.alertRaiser.canIncreaseLevel)
+			commands.push({
+					"name": "increase-alert-level",
+					"tooltip": "Raise the alert ! Or raise it again to protect more units.",
+					"icon": "bell_level1.png"
+				});
+		
+		if(entState.alertRaiser.hasRaisedAlert)
+			commands.push({
+					"name": "alert-end",
+					"tooltip": "End of alert.",
+					"icon": "bell_level0.png"
+				});
+	}
 
 	return commands;
 }
Index: binaries/data/mods/public/simulation/components/AlertRaiser.js
===================================================================
--- binaries/data/mods/public/simulation/components/AlertRaiser.js	(revision 0)
+++ binaries/data/mods/public/simulation/components/AlertRaiser.js	(working copy)
@@ -0,0 +1,117 @@
+function AlertRaiser() {}
+
+AlertRaiser.prototype.Schema = 	
+	"<element name='MaximumLevel'><data type='nonNegativeInteger'/></element>" +
+	"<element name='Range'><data type='nonNegativeInteger'/></element>";
+
+AlertRaiser.prototype.Init = function() 
+{
+    this.level = 0;
+	
+	// Remember the units ordered to garrison
+	this.garrisonedUnits = [];
+	this.walkingUnits = [];
+};
+
+AlertRaiser.prototype.GetLevel = function()
+{
+	return this.level;
+};
+
+AlertRaiser.prototype.HasRaisedAlert = function()
+{
+	return this.level > 0;
+};
+
+AlertRaiser.prototype.CanIncreaseLevel = function()
+{
+	return this.template.MaximumLevel > this.level;
+};
+
+AlertRaiser.prototype.SoundAlert = function()
+{
+	var alertString = "alert" + this.level;
+	PlaySound(alertString, this.entity);
+};
+
+AlertRaiser.prototype.IncreaseAlertLevel = function()
+{
+	if(!this.CanIncreaseLevel())
+		return false;
+	
+	// Find units owned by this unit's player
+	var players = [];
+	var cmpOwnership = Engine.QueryInterface(this.entity, IID_Ownership);
+	if (cmpOwnership)
+		players = [cmpOwnership.GetOwner()];
+		
+	this.level++;
+	this.SoundAlert();
+	
+	// Select units to put under alert
+	// If an alert has already been raised, only give orders to the units who don't already have orders.
+	var rangeMan = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
+	var level = this.GetLevel();
+	var units = rangeMan.ExecuteQuery(this.entity, 0, this.template.Range, players, IID_UnitAI).filter( function(e){
+		var cmpUnitAI = Engine.QueryInterface(e, IID_UnitAI);
+		return (!cmpUnitAI.IsUnderAlert() && !cmpUnitAI.IsDomestic() && cmpUnitAI.ReactsToAlert(level));
+		});
+	
+	for each(unit in units)
+	{
+		var cmpUnitAI = Engine.QueryInterface(unit, IID_UnitAI);
+		cmpUnitAI.ReplaceOrder("Alert", {"raiser": this.entity, "force": true});
+		this.walkingUnits.push(unit);
+	}
+	
+	return true;
+};
+
+AlertRaiser.prototype.OnUnitGarrisonedAfterAlert = function(msg)
+{
+	this.garrisonedUnits.push({"holder": msg.holder, "unit": msg.unit});
+	
+	var index = this.walkingUnits.indexOf(msg.unit);
+	if (index != -1)
+		this.walkingUnits.splice(index, 1);
+	
+}
+
+AlertRaiser.prototype.EndOfAlert = function()
+{
+	this.level = 0;
+	this.SoundAlert();
+	
+	// First, handle units not yet garrisoned
+	for each(unit in this.walkingUnits)
+	{
+		var cmpUnitAI = Engine.QueryInterface(unit, IID_UnitAI);
+		
+		cmpUnitAI.ResetAlert();
+			
+		if (cmpUnitAI.HasWorkOrders())
+			cmpUnitAI.BackToWork();
+		else
+			cmpUnitAI.ReplaceOrder("Stop", undefined);
+	}
+	this.walkingUnits = [];
+	
+	// Then, eject garrisoned units
+	for each(slot in this.garrisonedUnits)
+	{
+		var cmpGarrisonHolder = Engine.QueryInterface(slot.holder, IID_GarrisonHolder);
+		var cmpUnitAI = Engine.QueryInterface(slot.unit, IID_UnitAI);
+		
+		if(cmpGarrisonHolder && cmpGarrisonHolder.PerformEject([slot.unit], true))
+		{
+			cmpUnitAI.ResetAlert();				
+			if (cmpUnitAI.HasWorkOrders())
+				cmpUnitAI.BackToWork();
+		}
+	}
+	this.garrisonedUnits = [];
+	
+	return true;
+};
+
+Engine.RegisterComponentType(IID_AlertRaiser, "AlertRaiser", AlertRaiser);
Index: binaries/data/mods/public/simulation/components/GarrisonHolder.js
===================================================================
--- binaries/data/mods/public/simulation/components/GarrisonHolder.js	(revision 14215)
+++ binaries/data/mods/public/simulation/components/GarrisonHolder.js	(working copy)
@@ -247,6 +247,11 @@
 		cmpAura.ApplyGarrisonBonus(this.entity);	
 
 	Engine.PostMessage(this.entity, MT_GarrisonedUnitsChanged, {});
+	
+	var cmpUnitAI = Engine.QueryInterface(entity, IID_UnitAI);
+	if (cmpUnitAI && cmpUnitAI.GetAlertRaiser())
+		Engine.PostMessage(cmpUnitAI.GetAlertRaiser(), MT_UnitGarrisonedAfterAlert, {"holder": this.entity, "unit": entity});
+	
 	return true;
 };
 
Index: binaries/data/mods/public/simulation/components/GuiInterface.js
===================================================================
--- binaries/data/mods/public/simulation/components/GuiInterface.js	(revision 14215)
+++ binaries/data/mods/public/simulation/components/GuiInterface.js	(working copy)
@@ -350,6 +350,7 @@
 			"state": cmpUnitAI.GetCurrentState(),
 			"orders": cmpUnitAI.GetOrders(),
 			"hasWorkOrders": cmpUnitAI.HasWorkOrders(),
+			"isUnderAlert": cmpUnitAI.IsUnderAlert(),
 		};
 		// Add some information needed for ungarrisoning
 		if (cmpUnitAI.isGarrisoned && ret.player !== undefined)
@@ -378,6 +379,16 @@
 			"healableClasses": cmpHeal.GetHealableClasses(),
 		};
 	}
+	
+	var cmpAlertRaiser = Engine.QueryInterface(ent, IID_AlertRaiser);
+	if(cmpAlertRaiser)
+	{
+		ret.alertRaiser = {
+			"level": cmpAlertRaiser.GetLevel(),
+			"canIncreaseLevel": cmpAlertRaiser.CanIncreaseLevel(),
+			"hasRaisedAlert": cmpAlertRaiser.HasRaisedAlert(),
+		};
+	}
 
 	ret.visibility = cmpRangeManager.GetLosVisibility(ent, player, false);
 
Index: binaries/data/mods/public/simulation/components/interfaces/AlertRaiser.js
===================================================================
--- binaries/data/mods/public/simulation/components/interfaces/AlertRaiser.js	(revision 0)
+++ binaries/data/mods/public/simulation/components/interfaces/AlertRaiser.js	(working copy)
@@ -0,0 +1 @@
+Engine.RegisterInterface("AlertRaiser");
\ No newline at end of file
Index: binaries/data/mods/public/simulation/components/interfaces/GarrisonHolder.js
===================================================================
--- binaries/data/mods/public/simulation/components/interfaces/GarrisonHolder.js	(revision 14215)
+++ binaries/data/mods/public/simulation/components/interfaces/GarrisonHolder.js	(working copy)
@@ -4,3 +4,6 @@
 // sent to the current entity whenever the garrisoned units change.
 Engine.RegisterMessageType("GarrisonedUnitsChanged");
 
+// Message of the form { "holder": this.entity, "unit" : unit } sent to the AlertRaiser
+// which ordered the unit "unit" to garrison.
+Engine.RegisterMessageType("UnitGarrisonedAfterAlert");
Index: binaries/data/mods/public/simulation/components/UnitAI.js
===================================================================
--- binaries/data/mods/public/simulation/components/UnitAI.js	(revision 14215)
+++ binaries/data/mods/public/simulation/components/UnitAI.js	(working copy)
@@ -3,6 +3,9 @@
 UnitAI.prototype.Schema =
 	"<a:help>Controls the unit's movement, attacks, etc, in response to commands from the player.</a:help>" +
 	"<a:example/>" +
+	"<element name='AlertReactiveLevel'>" +
+		"<data type='nonNegativeInteger'/>" +
+	"</element>" +
 	"<element name='DefaultStance'>" +
 		"<choice>" +
 			"<value>violent</value>" +
@@ -664,6 +667,22 @@
 		this.SetNextState("INDIVIDUAL.AUTOGARRISON");
 	},
 
+    "Order.Alert": function(msg) {
+		this.alertRaiser = this.order.data.raiser;
+		
+		// Find a target to garrison into, if we don't already have one
+		if(!this.garrisoningTarget)
+		{
+			var nearby = this.FindNearbyGarrisonHolder();
+			if (nearby)
+				this.garrisoningTarget = nearby;
+			else
+				this.FinishOrder();
+		}
+		
+		this.ReplaceOrder("Garrison", {"target": this.garrisoningTarget});
+    },	
+	
 	"Order.Cheering": function(msg) {
 		this.SetNextState("INDIVIDUAL.CHEERING");
 	},
@@ -2383,13 +2402,47 @@
 				},
 
 				"MoveCompleted": function() {
-					this.SetNextState("GARRISONED");
+					if(this.IsUnderAlert())
+					{
+						// check that we can garrison in the building we're supposed to garrison in
+						var cmpGarrisonHolder = Engine.QueryInterface(this.garrisoningTarget, IID_GarrisonHolder);
+						if (!cmpGarrisonHolder || cmpGarrisonHolder.IsFull())
+						{
+							// Try to find another nearby building
+							var nearby = this.FindNearbyGarrisonHolder();
+							if (nearby)
+							{
+								this.garrisoningTarget = nearby;
+								if (this.MoveToTarget(this.garrisoningTarget))
+									this.SetNextState("APPROACHING");
+							}
+							else
+								this.FinishOrder();
+						}
+						else
+							this.SetNextState("GARRISONED");
+					}
+					else
+						this.SetNextState("GARRISONED");
 				},
 			},
 
 			"GARRISONED": {
 				"enter": function() {
-					var target = this.order.data.target;
+					// Target is not handled the same way with Alert and direct garrisoning
+					if(this.order.data.target)
+						var target = this.order.data.target;
+					else
+					{	
+						if(!this.garrisoningTarget)
+						{
+							// We've been unable to find a target nearby, so give up
+							this.FinishOrder();
+							return true;
+						}
+						var target = this.garrisoningTarget;
+					}
+
 					var cmpGarrisonHolder = Engine.QueryInterface(target, IID_GarrisonHolder);
 
 					// Check that we can garrison here
@@ -2712,6 +2765,10 @@
 	// Queue of remembered works
 	this.workOrders = [];
 
+	// "Town Bell" behaviour
+	this.alertRaiser = undefined;
+	this.garrisoningTarget = undefined;
+
 	// For preventing increased action rate due to Stop orders or target death.
 	this.lastAttacked = undefined;
 	this.lastHealed = undefined;
@@ -2719,6 +2776,21 @@
 	this.SetStance(this.template.DefaultStance);
 };
 
+UnitAI.prototype.ReactsToAlert = function(level)
+{
+	return this.template.AlertReactiveLevel <= level;
+};
+
+UnitAI.prototype.IsUnderAlert = function()
+{
+	return this.garrisoningTarget != undefined;
+};
+
+UnitAI.prototype.ResetAlert = function()
+{
+	this.garrisoningTarget = undefined;
+};
+
 UnitAI.prototype.IsFormationController = function()
 {
 	return (this.template.FormationController == "true");
@@ -3318,6 +3390,11 @@
 	this.workOrders = orders;
 };
 
+UnitAI.prototype.GetAlertRaiser = function()
+{
+	return this.alertRaiser;
+};
+
 UnitAI.prototype.TimerHandler = function(data, lateness)
 {
 	// Reset the timer
@@ -3504,7 +3581,7 @@
 	var players = [];
 	var cmpOwnership = Engine.QueryInterface(this.entity, IID_Ownership);
 	if (cmpOwnership)
-		players.push(cmpOwnership.GetOwner());
+		players = [cmpOwnership.GetOwner()];
 
 	// Ships are unable to reach land dropsites and shouldn't attempt to do so.
 	var excludeLand = Engine.QueryInterface(this.entity, IID_Identity).HasClass("Ship");
@@ -3542,7 +3619,7 @@
 	var players = [];
 	var cmpOwnership = Engine.QueryInterface(this.entity, IID_Ownership);
 	if (cmpOwnership)
-		players.push(cmpOwnership.GetOwner());
+		players = [cmpOwnership.GetOwner()];
 
 	var rangeMan = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
 	var nearby = rangeMan.ExecuteQuery(this.entity, 0, range, players, IID_Foundation);
@@ -3562,6 +3639,34 @@
 };
 
 /**
+ * Returns the entity ID of the nearest building in which the unit can garrison,
+ * or undefined if none can be found close enough.
+ */
+UnitAI.prototype.FindNearbyGarrisonHolder = function()
+{
+	var range = 128; // TODO: what's a sensible number?
+
+	// Find buildings owned by this unit's player
+	var players = [];
+	var cmpOwnership = Engine.QueryInterface(this.entity, IID_Ownership);
+	if (cmpOwnership)
+		players = [cmpOwnership.GetOwner()];
+
+	var rangeMan = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
+	var nearby = rangeMan.ExecuteQuery(this.entity, 0, range, players, IID_GarrisonHolder);
+	for each (var ent in nearby)
+	{
+        var cmpGarrisonHolder = Engine.QueryInterface(ent, IID_GarrisonHolder);
+		// We only want to garrison in buildings, not in moving units like ships,...
+		var cmpUnitAI = Engine.QueryInterface(ent, IID_UnitAI);
+        if (!cmpUnitAI && cmpGarrisonHolder.AllowedToGarrison(this.entity) && !cmpGarrisonHolder.IsFull())
+		    return ent;
+	}
+
+	return undefined;
+};
+
+/**
  * Play a sound appropriate to the current entity.
  */
 UnitAI.prototype.PlaySound = function(name)
Index: binaries/data/mods/public/simulation/helpers/Commands.js
===================================================================
--- binaries/data/mods/public/simulation/helpers/Commands.js	(revision 14215)
+++ binaries/data/mods/public/simulation/helpers/Commands.js	(working copy)
@@ -399,6 +399,24 @@
 				notifyUnloadFailure(player, garrisonHolder)
 		}
 		break;
+	
+	case "increase-alert-level":
+		for each (var raiser in entities)
+		{
+			var cmpAlertRaiser = Engine.QueryInterface(raiser, IID_AlertRaiser);
+			if (!cmpAlertRaiser || !cmpAlertRaiser.IncreaseAlertLevel())
+				notifyAlertFailure(player);
+		}
+		break;
+	
+	case "alert-end":
+		for each (var raiser in entities)
+		{
+			var cmpAlertRaiser = Engine.QueryInterface(raiser, IID_AlertRaiser);
+			if (cmpAlertRaiser)
+				cmpAlertRaiser.EndOfAlert();
+		}
+		break;
 
 	case "formation":
 		GetFormationUnitAIs(entities, player, cmd.name).forEach(function(cmpUnitAI) {
@@ -538,6 +556,17 @@
 }
 
 /**
+ * Sends a GUI notification about Alerts that failed to be raised
+ */
+function notifyAlertFailure(player)
+{
+	var cmpPlayer = QueryPlayerIDInterface(player, IID_Player);
+	var notification = {"player": cmpPlayer.GetPlayerID(), "message": "You can't raise the alert to a higher level !" };
+	var cmpGUIInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
+	cmpGUIInterface.PushNotification(notification);
+}
+
+/**
  * Get some information about the formations used by entities.
  * The entities must have a UnitAI component.
  */
Index: binaries/data/mods/public/simulation/templates/special/formation.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/special/formation.xml	(revision 14215)
+++ binaries/data/mods/public/simulation/templates/special/formation.xml	(working copy)
@@ -14,6 +14,7 @@
     <TurnRate>6.0</TurnRate>
   </Position>
   <UnitAI>
+	<AlertReactiveLevel>2</AlertReactiveLevel>
     <DefaultStance>aggressive</DefaultStance>
     <FleeDistance>12.0</FleeDistance>
     <FormationController>true</FormationController>
Index: binaries/data/mods/public/simulation/templates/template_structure_civic_civil_centre.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_structure_civic_civil_centre.xml	(revision 14215)
+++ binaries/data/mods/public/simulation/templates/template_structure_civic_civil_centre.xml	(working copy)
@@ -91,6 +91,9 @@
       <constructed>interface/complete/building/complete_civ_center.xml</constructed>
       <attack>attack/weapon/arrowfly.xml</attack>
       <death>attack/destruction/building_collapse_large.xml</death>
+	  <alert0>interface/alarm/alarm_alert_0.xml</alert0>
+	  <alert1>interface/alarm/alarm_alert_1.xml</alert1>
+	  <alert2>interface/alarm/alarm_alert_2.xml</alert2>
     </SoundGroups>
   </Sound>
   <TerritoryInfluence>
@@ -98,6 +101,10 @@
     <Radius>140</Radius>
     <Weight>65536</Weight>
   </TerritoryInfluence>
+  <AlertRaiser>
+    <MaximumLevel>2</MaximumLevel>
+    <Range>140</Range>
+  </AlertRaiser>
   <Vision>
     <Range>90</Range>
   </Vision>
Index: binaries/data/mods/public/simulation/templates/template_unit.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit.xml	(revision 14215)
+++ binaries/data/mods/public/simulation/templates/template_unit.xml	(working copy)
@@ -99,6 +99,7 @@
     <HeightOffset>5.0</HeightOffset>
   </StatusBars>
   <UnitAI>
+    <AlertReactiveLevel>2</AlertReactiveLevel>
     <DefaultStance>aggressive</DefaultStance>
     <FleeDistance>12.0</FleeDistance>
     <FormationController>false</FormationController>
Index: binaries/data/mods/public/simulation/templates/template_unit_support_female_citizen.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_support_female_citizen.xml	(revision 14215)
+++ binaries/data/mods/public/simulation/templates/template_unit_support_female_citizen.xml	(working copy)
@@ -86,6 +86,9 @@
   <Stamina>
     <Max>500</Max>
   </Stamina>
+  <UnitAI>
+    <AlertReactiveLevel>1</AlertReactiveLevel>
+  </UnitAI>
   <UnitMotion>
     <WalkSpeed>8.0</WalkSpeed>
     <Run>
