Index: binaries/data/mods/public/simulation/components/GarrisonHolder.js
===================================================================
--- binaries/data/mods/public/simulation/components/GarrisonHolder.js	(révision 14049)
+++ binaries/data/mods/public/simulation/components/GarrisonHolder.js	(copie de travail)
@@ -16,6 +16,11 @@
 	"<element name='EjectEntitiesOnDestroy' a:help='Whether the entity should eject or kill all garrisoned entities on destroy'>" +
 		"<data type='boolean'/>" +
 	"</element>" +
+	"<optional>" +
+		"<element name='EjectSwimmingEntitiesOnDestroy' a:help='Whether the entity should eject garrisoned entities which can swim on destroy'>" +
+			"<data type='boolean'/>" +
+		"</element>" +
+	"</optional>" +
 	"<element name='BuffHeal' a:help='Number of hit points that will be restored to this holder&apos;s garrisoned units each second'>" +
 		"<ref name='nonNegativeDecimal'/>" +
 	"</element>" +
@@ -82,6 +87,11 @@
 	return this.template.EjectEntitiesOnDestroy == "true";
 };
 
+GarrisonHolder.prototype.EjectSwimmingEntitiesOnDestroy = function()
+{
+	return (this.template.EjectSwimmingEntitiesOnDestroy ? (this.template.EjectSwimmingEntitiesOnDestroy == "true") : false);
+};
+
 /**
  * Set this entity to allow or disallow garrisoning in
  * Every component calling this function should do it with its own ID, and as long as one
@@ -537,9 +547,22 @@
 	var cmpPosition = Engine.QueryInterface(this.entity, IID_Position);
 	// Eject the units which can be ejected (if not in world, it generally means this holder
 	// is inside a holder which kills its entities, so do not eject)
-	if (cmpPosition.IsInWorld() && this.EjectEntitiesOnDestroy())
-		this.PerformEject(entities, true);
+	if (cmpPosition.IsInWorld())
+	{
+		if( this.EjectEntitiesOnDestroy())
+			this.PerformEject(entities, true);
+		else if( this.EjectSwimmingEntitiesOnDestroy())
+		{
+			for each (var entity in entities)
+			{
+				var cmpUnitAI = Engine.QueryInterface(entity, IID_UnitAI);
+				if (cmpUnitAI && cmpUnitAI.CanSwim())
+					this.PerformEject([entity], false);  // not force in case no spawn point possible
+			}
 
+		}
+	}
+
 	// And destroy all remaining entities
 	for each (var entity in entities)
 	{
Index: binaries/data/mods/public/simulation/components/UnitAI.js
===================================================================
--- binaries/data/mods/public/simulation/components/UnitAI.js	(révision 14049)
+++ binaries/data/mods/public/simulation/components/UnitAI.js	(copie de travail)
@@ -2610,6 +2610,14 @@
 	return true;
 };
 
+UnitAI.prototype.CanSwim = function()
+{
+	var cmpIdentity = Engine.QueryInterface(this.entity, IID_Identity);
+	if (!cmpIdentity)
+		return false;
+	return cmpIdentity.HasClass("Female") || cmpIdentity.HasClass("Infantry");
+};
+
 UnitAI.prototype.OnCreate = function()
 {
 	if (this.IsAnimal())
Index: binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_bireme.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_bireme.xml	(révision 14049)
+++ binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_bireme.xml	(copie de travail)
@@ -34,6 +34,7 @@
     <Max>20</Max>
     <EjectHealth>0</EjectHealth>
     <EjectEntitiesOnDestroy>false</EjectEntitiesOnDestroy>
+    <EjectSwimmingEntitiesOnDestroy>true</EjectSwimmingEntitiesOnDestroy>
     <List datatype="tokens">Support Infantry Cavalry</List>
     <BuffHeal>1</BuffHeal>
     <LoadingRange>10</LoadingRange>
Index: binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_fishing.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_fishing.xml	(révision 14049)
+++ binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_fishing.xml	(copie de travail)
@@ -23,6 +23,7 @@
     <Max>1</Max>
     <EjectHealth>0</EjectHealth>
     <EjectEntitiesOnDestroy>false</EjectEntitiesOnDestroy>
+    <EjectSwimmingEntitiesOnDestroy>true</EjectSwimmingEntitiesOnDestroy>
     <List datatype="tokens">Support Infantry</List>
     <BuffHeal>1</BuffHeal>
     <LoadingRange>10</LoadingRange>
Index: binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_merchant.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_merchant.xml	(révision 14049)
+++ binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_merchant.xml	(copie de travail)
@@ -15,6 +15,7 @@
     <Max>15</Max>
     <EjectHealth>0</EjectHealth>
     <EjectEntitiesOnDestroy>false</EjectEntitiesOnDestroy>
+    <EjectSwimmingEntitiesOnDestroy>true</EjectSwimmingEntitiesOnDestroy>
     <List datatype="tokens">Support Infantry Cavalry</List>
     <BuffHeal>1</BuffHeal>
     <LoadingRange>10</LoadingRange>
Index: binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_quinquereme.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_quinquereme.xml	(révision 14049)
+++ binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_quinquereme.xml	(copie de travail)
@@ -42,6 +42,7 @@
     <Max>50</Max>
     <EjectHealth>0</EjectHealth>
     <EjectEntitiesOnDestroy>false</EjectEntitiesOnDestroy>
+    <EjectSwimmingEntitiesOnDestroy>true</EjectSwimmingEntitiesOnDestroy>
     <List datatype="tokens">Support Infantry Cavalry Siege</List>
     <BuffHeal>1</BuffHeal>
     <LoadingRange>10</LoadingRange>
Index: binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_trireme.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_trireme.xml	(révision 14049)
+++ binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_trireme.xml	(copie de travail)
@@ -34,6 +34,7 @@
     <Max>30</Max>
     <EjectHealth>0</EjectHealth>
     <EjectEntitiesOnDestroy>false</EjectEntitiesOnDestroy>
+    <EjectSwimmingEntitiesOnDestroy>true</EjectSwimmingEntitiesOnDestroy>
     <List datatype="tokens">Support Infantry Cavalry Siege</List>
     <BuffHeal>1</BuffHeal>
     <LoadingRange>10</LoadingRange>
