Index: binaries/data/mods/public/simulation/components/ProductionQueue.js
===================================================================
--- binaries/data/mods/public/simulation/components/ProductionQueue.js	(révision 18021)
+++ binaries/data/mods/public/simulation/components/ProductionQueue.js	(copie de travail)
@@ -139,30 +139,41 @@ ProductionQueue.prototype.CalculateEntit
  */
 ProductionQueue.prototype.GetTechnologiesList = function()
 {
 	if (!this.template.Technologies)
 		return [];
-	
+
 	var string = this.template.Technologies._string;
 	if (!string)
 		return [];
-	
+
 	var cmpTechnologyManager = QueryOwnerInterface(this.entity, IID_TechnologyManager);
 	if (!cmpTechnologyManager)
 		return [];
 	
 	var cmpPlayer = QueryOwnerInterface(this.entity);
 	var cmpIdentity = Engine.QueryInterface(this.entity, IID_Identity);
 	if (!cmpPlayer || !cmpIdentity)
 		return [];
 
 	var techs = string.split(/\s+/);
+
+	// Remove any technologies that can't be searched by this civ (after capture for example)
+	let  techsCivChecked = [];
+	for (let tech of techs)
+	{
+		let reqs = cmpTechnologyManager.GetTechnologyTemplate(tech).requirements || null;
+		if (cmpTechnologyManager.CheckTechnologyRequirements(reqs, true))
+			techsCivChecked.push(tech);
+	}
+	techs = techsCivChecked;
+
 	var techList = [];
 	var superseded = {}; // Stores the tech which supersedes the key
 
 	var disabledTechnologies = cmpPlayer.GetDisabledTechnologies();
-	
+
 	// Add any top level technologies to an array which corresponds to the displayed icons
 	// Also store what a technology is superceded by in the superceded object {"tech1":"techWhichSupercedesTech1", ...}
 	for (var i in techs)
 	{
 		var tech = techs[i];
@@ -172,11 +183,11 @@ ProductionQueue.prototype.GetTechnologie
 		if (!template.supersedes || techs.indexOf(template.supersedes) === -1)
 			techList.push(tech);
 		else
 			superseded[template.supersedes] = tech;
 	}
-	
+
 	// Now make researched/in progress techs invisible
 	for (var i in techList)
 	{
 		var tech = techList[i];
 		while (this.IsTechnologyResearchedOrInProgress(tech))
@@ -184,30 +195,30 @@ ProductionQueue.prototype.GetTechnologie
 			tech = superseded[tech];
 		}
 		
 		techList[i] = tech;
 	}
-	
+
 	var ret = [];
-	
+
 	// This inserts the techs into the correct positions to line up the technology pairs
 	for (var i = 0; i < techList.length; i++)
 	{
 		var tech = techList[i];
 		if (!tech)
 		{
 			ret[i] = undefined;
 			continue;
 		}
-		
+
 		var template = cmpTechnologyManager.GetTechnologyTemplate(tech);
 		if (template.top)
 			ret[i] = {"pair": true, "top": template.top, "bottom": template.bottom};
 		else
 			ret[i] = tech;
 	}
-	
+
 	return ret;
 };
 
 ProductionQueue.prototype.IsTechnologyResearchedOrInProgress = function(tech)
 {
Index: binaries/data/mods/public/simulation/components/TechnologyManager.js
===================================================================
--- binaries/data/mods/public/simulation/components/TechnologyManager.js	(révision 18021)
+++ binaries/data/mods/public/simulation/components/TechnologyManager.js	(copie de travail)
@@ -83,12 +83,12 @@ TechnologyManager.prototype.CanProduce =
 	var cmpTempManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TemplateManager);
 	var template = cmpTempManager.GetTemplate(templateName);
 
 	if (template.Identity && template.Identity.RequiredTechnology)
 		return this.IsTechnologyResearched(template.Identity.RequiredTechnology);
-	else
-		return true; // If there is no required technology then this entity can be produced
+	// If there is no required technology then this entity can be produced
+	return true;
 };
 
 TechnologyManager.prototype.IsTechnologyResearched = function(tech)
 {
 	return (this.researchedTechs[tech] !== undefined);
@@ -122,73 +122,71 @@ TechnologyManager.prototype.CanResearch
 		return false;
 
 	return this.CheckTechnologyRequirements(template.requirements || null);
 };
 
-// Private function for checking a set of requirements is met
-TechnologyManager.prototype.CheckTechnologyRequirements = function(reqs)
+/**
+ * Private function for checking a set of requirements is met
+ * @param reqs Object of technology requirements as given by the technology template
+ * @param civonly A boolean set to true if only the civ requirement is checked
+ *
+ * @return true if the requirements are checked
+ * false otherwise
+ */
+TechnologyManager.prototype.CheckTechnologyRequirements = function(reqs, civonly)
 {
 	// If there are no requirements then all requirements are met
 	if (!reqs)
 		return true;
 
-	if (reqs.tech)
-	{
-		return this.IsTechnologyResearched(reqs.tech);
-	}
-	else if (reqs.all)
+	if (reqs.all)
 	{
 		for (var i = 0; i < reqs.all.length; i++)
 		{
-			if (!this.CheckTechnologyRequirements(reqs.all[i]))
+			if (!this.CheckTechnologyRequirements(reqs.all[i], civonly))
 				return false;
 		}
 		return true;
 	}
-	else if (reqs.any)
+	if (reqs.any)
 	{
 		for (var i = 0; i < reqs.any.length; i++)
 		{
-			if (this.CheckTechnologyRequirements(reqs.any[i]))
+			if (this.CheckTechnologyRequirements(reqs.any[i], civonly))
 				return true;
 		}
 		return false;
 	}
-	else if (reqs.class)
+	if (reqs.civ)
+	{
+		let cmpPlayer = Engine.QueryInterface(this.entity, IID_Player);
+		return cmpPlayer && cmpPlayer.GetCiv() == reqs.civ;
+	}
+	if (reqs.notciv)
+	{
+		let cmpPlayer = Engine.QueryInterface(this.entity, IID_Player);
+		return (cmpPlayer && cmpPlayer.GetCiv() == reqs.notciv);
+	}
+	if (civonly)
+		return true;
+	if (reqs.tech)
+		return this.IsTechnologyResearched(reqs.tech);
+	if (reqs.class)
 	{
 		if (reqs.numberOfTypes)
 		{
 			if (this.typeCountsByClass[reqs.class])
 				return (reqs.numberOfTypes <= Object.keys(this.typeCountsByClass[reqs.class]).length);
-			else
-				return false;
+			return false;
 		}
-		else if (reqs.number)
+		if (reqs.number)
 		{
 			if (this.classCounts[reqs.class])
 				return (reqs.number <= this.classCounts[reqs.class]);
-			else
-				return false;
-		}
-	}
-	else if (reqs.civ)
-	{
-		var cmpPlayer = Engine.QueryInterface(this.entity, IID_Player);
-		if (cmpPlayer && cmpPlayer.GetCiv() == reqs.civ)
-			return true;
-		else 
 			return false;
+		}
 	}
-	else if (reqs.notciv)
-	{
-		var cmpPlayer = Engine.QueryInterface(this.entity, IID_Player);
-		if (cmpPlayer && cmpPlayer.GetCiv() == reqs.notciv)
-			return false;
-		else
-			return true;
-	}
-
 	// The technologies requirements are not a recognised format
 	error("Bad requirements " + uneval(reqs));
 	return false;
 };
 
Index: binaries/data/mods/public/simulation/data/technologies/persians/training_conscription_cavalry.json
===================================================================
--- binaries/data/mods/public/simulation/data/technologies/persians/training_conscription_cavalry.json	(révision 18021)
+++ binaries/data/mods/public/simulation/data/technologies/persians/training_conscription_cavalry.json	(copie de travail)
@@ -9,6 +9,6 @@
 	"researchTime": 40,
 	"tooltip": "Faster batch training speed for the Stables.",
 	"modifications": [{"value": "ProductionQueue/BatchTimeModifier", "add": -0.1}],
 	"affects": ["Stables"],
 	"soundComplete": "interface/alarm/alarm_upgradearmory.xml"
-}
\ Pas de fin de ligne à la fin du fichier
+}
