diff --git a/src/InputOutput/IHMImpl/Params/DownloadImpl/IHMInputOutputParamsDownloadClass.php b/src/InputOutput/IHMImpl/Params/DownloadImpl/IHMInputOutputParamsDownloadClass.php
index 9cbf585..8119f6a 100644
--- a/src/InputOutput/IHMImpl/Params/DownloadImpl/IHMInputOutputParamsDownloadClass.php
+++ b/src/InputOutput/IHMImpl/Params/DownloadImpl/IHMInputOutputParamsDownloadClass.php
@@ -74,7 +74,7 @@ class IHMInputOutputParamsDownloadClass extends IHMInputOutputParamsAbstractClas
 		//add params to output
 		foreach ($input->list as $param)
 		{
-			$paramInfo = $this->paramManager->addExistingParam($param->name, $this->paramsData);
+			$paramInfo = $this->paramManager->addExistingParam($param->paramid, $this->paramsData, $param->template_args);
 			switch ($param->type) {
 				case 0:
 					//scalar - nothing to do
diff --git a/src/InputOutput/IHMImpl/Params/PlotImpl/IHMInputOutputParamsPlotClass.php b/src/InputOutput/IHMImpl/Params/PlotImpl/IHMInputOutputParamsPlotClass.php
index a0671d6..9e7c1b7 100644
--- a/src/InputOutput/IHMImpl/Params/PlotImpl/IHMInputOutputParamsPlotClass.php
+++ b/src/InputOutput/IHMImpl/Params/PlotImpl/IHMInputOutputParamsPlotClass.php
@@ -646,7 +646,7 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass
 		foreach ($paramsData as $paramData)
 		{
 			//Param
-			$paramInfo = $this->paramManager->addExistingParam($paramData->{'param-id'}, $this->paramsData, $paramData->{'param-template-args'});
+			$paramInfo = $this->paramManager->addExistingParam($paramData->{'paramid'}, $this->paramsData, $paramData->{'template_args'});
 			
 			$paramInfo['indexes'] = array();
 			$dim1 = $paramData->{'param-dim-1'};
@@ -2081,7 +2081,7 @@ class IHMInputOutputParamsPlotClass extends IHMInputOutputParamsAbstractClass
 		
 		$instantParam = (Object)array(
 			"id" => 1,
-			"param-id" => $crtParam->{'param-id'},
+			"paramid" => $crtParam->{'paramid'},
 			"param-drawing-type" => "iserie",
 			"param-drawing-object" => (Object)array(
 					"iserie-tableonx" => true,
diff --git a/src/InputOutput/IHMImpl/Params/StatisticsImpl/IHMInputOutputParamsStatisticsClass.php b/src/InputOutput/IHMImpl/Params/StatisticsImpl/IHMInputOutputParamsStatisticsClass.php
index 5b8c4cd..7c245bf 100644
--- a/src/InputOutput/IHMImpl/Params/StatisticsImpl/IHMInputOutputParamsStatisticsClass.php
+++ b/src/InputOutput/IHMImpl/Params/StatisticsImpl/IHMInputOutputParamsStatisticsClass.php
@@ -38,7 +38,7 @@ class IHMInputOutputParamsStatisticsClass extends IHMInputOutputParamsAbstractCl
                 foreach ($paramFunctionAssociation as $param => $functions) {
                 
                      $paramInfo = $this->paramManager->addExistingParam($param, $this->paramsData);                     			
-			$paramsNode->addParam($paramInfo['id']);                     
+						$paramsNode->addParam($paramInfo['id']);                     
                      $outputParamNode = $catalogNode->addParam($paramInfo['id'],$paramInfo['indexes']);
                      foreach ($functions as $function) $outputParamNode->addFunction($function);                     
                 } 
diff --git a/src/InputOutput/IHMImpl/Tools/IHMExpressionParserClass.php b/src/InputOutput/IHMImpl/Tools/IHMExpressionParserClass.php
index c9c620c..79384ca 100644
--- a/src/InputOutput/IHMImpl/Tools/IHMExpressionParserClass.php
+++ b/src/InputOutput/IHMImpl/Tools/IHMExpressionParserClass.php
@@ -43,12 +43,15 @@ class IHMExpressionParserClass
 	private $aliasesArray;
 
 	private $functionsArray;
+	
+	private $templatedParamMgr = NULL;
 
 	/*
 	 * @brief Constructor
 	*/
 	function __construct()
 	{
+		$this->templatedParamMgr = new IHMParamTemplateClass();
 	}
 
 	/*
@@ -142,8 +145,13 @@ class IHMExpressionParserClass
 		
 		//keep only params id
 		$params = array();
-		foreach ($params_full as $param_full)
-			$params[] = $param_full["id"];
+		foreach ($params_full as $param_full) {
+			if (($templated_param_info = $this->templatedParamMgr->parseTemplatedParam($param_full["id"])) !== FALSE) {
+				$params[] = $templated_param_info;
+			}
+			else
+				$params[] = array("paramid" => $param_full["id"]);
+		}
 
 		return array("expression" => $translated, "params" => $params);
 	}
diff --git a/src/InputOutput/IHMImpl/Tools/IHMParamManagerClass.php b/src/InputOutput/IHMImpl/Tools/IHMParamManagerClass.php
index c5d9268..e30a89d 100644
--- a/src/InputOutput/IHMImpl/Tools/IHMParamManagerClass.php
+++ b/src/InputOutput/IHMImpl/Tools/IHMParamManagerClass.php
@@ -40,8 +40,12 @@ class IHMParamManagerClass
 	{
 		$paramsData->addProcessParamToCreate($paramId, $expression, $params, $sampling, $gap,$dateModif);
 
-		foreach ($params as $param)
-			$this->addExistingParam($param,$paramsData);
+		foreach ($params as $param) {
+			$template_args = NULL;
+			if (array_key_exists("template_args", $param))
+				$template_args = $param["template_args"];
+			$this->addExistingParam($param["paramid"],$paramsData,$template_args);
+		}
 
 		return true;
 	}
diff --git a/src/InputOutput/IHMImpl/Tools/IHMParamTemplateClass.php b/src/InputOutput/IHMImpl/Tools/IHMParamTemplateClass.php
index 7ce262d..5ae31c8 100644
--- a/src/InputOutput/IHMImpl/Tools/IHMParamTemplateClass.php
+++ b/src/InputOutput/IHMImpl/Tools/IHMParamTemplateClass.php
@@ -46,6 +46,72 @@ class IHMParamTemplateClass
 	}
 	
 	/*
+	 * 
+	 */
+	public function parseTemplatedParam($param_expression) {
+		$exploded_param_expression = explode('_',$param_expression);
+		
+		$tmp_paramid = "";
+		$real_param_id = "";
+		
+		foreach ($exploded_param_expression as $expression_part) {
+			//add one by one each part of the expression to check if it's a templated parameter
+			if ($tmp_paramid != "")
+				$tmp_paramid .= "_";
+			$tmp_paramid .= $expression_part;
+			if ($this->isTemplatedParam($tmp_paramid)) {
+				$real_param_id = $tmp_paramid;
+				break;
+			}
+		}
+		
+		if (empty($real_param_id))
+			return FALSE;
+		
+		$template_args_str = str_replace($real_param_id, "", $param_expression);
+		
+		if ($template_args_str == "")
+			//A templated param need at least one argument
+			return FALSE;
+		
+		$template_args_info = $this->paramTemplateList[$real_param_id];
+		
+		$args_format = "";
+		foreach ($template_args_info["arguments"] as $arg) {
+			$args_format .= "_";
+			switch($arg["type"]) {
+				case 'float' :
+				case 'double' :
+					$args_format .= "%f";
+					break;
+				case 'int' :
+					$args_format .= "%d";
+					break;
+				default:
+					$args_format .= "%s";
+			}
+		}
+		
+		$exploded_args = sscanf($template_args_str , $args_format);
+		
+		if ($exploded_args === -1)
+			return FALSE;
+		
+		$template_args = array();
+		$i = 0;
+		foreach ($template_args_info["arguments"] as $arg_key => $arg) {
+			$template_args[$arg_key] = $exploded_args[$i];
+			++$i;
+		}
+		
+		return array(
+			"paramid"       => $real_param_id,
+			"fullparamid" => $param_expression,
+			"template_args" => $template_args
+		);
+	}
+	
+	/*
 	 * @brief Get templated parameter id
 	*/
 	public function getTemplatedParamId($param_id, $template_args) {
diff --git a/src/Request/ParamsRequestImpl/ParamsRequestClass.php b/src/Request/ParamsRequestImpl/ParamsRequestClass.php
index 4480159..aba8af0 100644
--- a/src/Request/ParamsRequestImpl/ParamsRequestClass.php
+++ b/src/Request/ParamsRequestImpl/ParamsRequestClass.php
@@ -81,11 +81,22 @@ class ParamsRequestClass extends ProcessRequestClass
 					return false;
 				}
 				
+				libxml_use_internal_errors(true);
 				if (!$doc->schemaValidate(KernelConfigClass::getXSDRequestFilePath()))
 				{
-					$this->requestData->setLastErrorMessage('Params request XML file not valid for request '.$requestNode->getRealIndex());
+					$error_msg = "";
+					$errors = libxml_get_errors();
+					foreach ($errors as $error) {
+						if ($error_msg != "")
+							$error_msg .= PHP_EOL;
+						$error_msg .= 'XML error "'.$error->message.'" ['.$error->level.'] (Code '.$error->code.') in '.$error->file.' on line '.$error->line.' column '.$error->column;
+					}
+					libxml_clear_errors();
+					
+					$this->requestData->setLastErrorMessage('Params request XML file not valid for request '.$requestNode->getRealIndex().' ('.$error_msg.')');
 					return false;
 				}
+				libxml_use_internal_errors(false);
 			}
 		}
 
diff --git a/src/Request/ParamsRequestImpl/ParamsRequestDataClass.php b/src/Request/ParamsRequestImpl/ParamsRequestDataClass.php
index e43a514..76c8ff9 100644
--- a/src/Request/ParamsRequestImpl/ParamsRequestDataClass.php
+++ b/src/Request/ParamsRequestImpl/ParamsRequestDataClass.php
@@ -126,7 +126,10 @@ class ParamsRequestDataClass extends ProcessRequestDataClass
 		foreach ($getParams as $getParam)
 		{
 			$amdaParamNode = $newParam->addParamGet(ParamGetTypeEnum::AMDAPARAM);
-			$amdaParamNode->setParamName($getParam);
+			if (array_key_exists('template_args', $getParam))
+				$amdaParamNode->setParamName($getParam['fullparamid']);
+			else
+				$amdaParamNode->setParamName($getParam['paramid']);
 		}
 		$newParam->setProcess($expression);
 		$newParam->setOutput();
--
libgit2 0.21.2