diff --git a/htdocs/core/modules/facture/modules_facture.php b/htdocs/core/modules/facture/modules_facture.php
index a87a2ed7016b53524776b5ec16ff53a568056845..c2f19ba3d169588d75e9134d41f8a463aa50b36d 100644
--- a/htdocs/core/modules/facture/modules_facture.php
+++ b/htdocs/core/modules/facture/modules_facture.php
@@ -135,7 +135,7 @@ abstract class ModeleNumRefFactures
  *	@param   	DoliDB		$db  			Database handler
  *	@param   	Object		$object			Object invoice
  *	@param	    string		$message		message
- *	@param	    string		$modele			Force le modele a utiliser ('' to not force)
+ *	@param	    string		$modele			Force template to use ('' to not force)
  *	@param		Translate	$outputlangs	objet lang a utiliser pour traduction
  *  @param      int			$hidedetails    Hide details of lines
  *  @param      int			$hidedesc       Hide description
diff --git a/htdocs/core/modules/supplier_invoice/modules_facturefournisseur.php b/htdocs/core/modules/supplier_invoice/modules_facturefournisseur.php
index a45a2d8b9581aec6b363b89d3b90f2990d4ed45c..11d0cddffe52c16410ca845497e43495da5d95e3 100755
--- a/htdocs/core/modules/supplier_invoice/modules_facturefournisseur.php
+++ b/htdocs/core/modules/supplier_invoice/modules_facturefournisseur.php
@@ -58,38 +58,69 @@ abstract class ModelePDFSuppliersInvoices extends CommonDocGenerator
  *
  *	@param	    DoliDB		$db  			objet base de donnee
  *	@param	    Object		$object			object supplier invoice
- *	@param	    string		$model			force le modele a utiliser ('' to not force)
+ *	@param	    string		$modele			Force template to use ('' to not force)
  *	@param		Translate	$outputlangs	objet lang a utiliser pour traduction
  *  @return     int         				0 if KO, 1 if OK
  */
-function supplier_invoice_pdf_create($db, $object, $model, $outputlangs)
+function supplier_invoice_pdf_create($db, $object, $modele, $outputlangs)
 {
-	global $conf, $langs;
+	global $conf, $user, $langs;
 
 	$langs->load("suppliers");
 
-	$dir = DOL_DOCUMENT_ROOT."/core/modules/supplier_invoice/pdf/";
+	$error=0;
+	
+	// Increase limit for PDF build
+    $err=error_reporting();
+    error_reporting(0);
+    @set_time_limit(120);
+    error_reporting($err);
+	
+	$dir = "/core/modules/supplier_invoice/";
+    $srctemplatepath='';
 
 	// Positionne modele sur le nom du modele de invoice fournisseur a utiliser
-	if (! dol_strlen($model))
+	if (! dol_strlen($modele))
 	{
 		if (! empty($conf->global->INVOICE_SUPPLIER_ADDON_PDF))
 		{
-			$model = $conf->global->INVOICE_SUPPLIER_ADDON_PDF;
+			$modele = $conf->global->INVOICE_SUPPLIER_ADDON_PDF;
 		}
 		else
 		{
-		    $model = 'canelle';
-			//print $langs->trans("Error")." ".$langs->trans("Error_INVOICE_SUPPLIER_ADDON_PDF_NotDefined");
-			//return 0;
+		    $modele = 'canelle';
 		}
 	}
+	
+    // If selected modele is a filename template (then $modele="modelname:filename")
+	$tmp=explode(':',$modele,2);
+    if (! empty($tmp[1]))
+    {
+        $modele=$tmp[0];
+        $srctemplatepath=$tmp[1];
+    }
+    	
+	// Search template file
+	$file=''; $classname=''; $filefound=0;
+	foreach(array('doc','pdf') as $prefix)
+	{
+        $file = $prefix."_".$modele.".modules.php";
+
+        // On verifie l'emplacement du modele
+        $file = dol_buildpath($dir.'pdf/'.$file);	// TODO rename into doc/
+
+        if (file_exists($file))
+	    {
+	        $filefound=1;
+	        $classname=$prefix.'_'.$modele;
+	        break;
+	    }
+	}
+
 	// Charge le modele
-	$file = "pdf_".$model.".modules.php";
-	if (file_exists($dir.$file))
+	if ($filefound)
 	{
-		$classname = "pdf_".$model;
-		require_once($dir.$file);
+		require_once($file);
 
 		$obj = new $classname($db,$object);
 
@@ -103,6 +134,14 @@ function supplier_invoice_pdf_create($db, $object, $model, $outputlangs)
 			// we delete preview files
         	require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php");
 			dol_delete_preview($object);
+			
+			// Appel des triggers
+			include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php");
+			$interface=new Interfaces($db);
+			$result=$interface->run_triggers('BILL_BUILDDOC',$object,$user,$langs,$conf);
+			if ($result < 0) { $error++; $this->errors=$interface->errors; }
+			// Fin appel triggers
+			
 			return 1;
 		}
 		else
@@ -115,7 +154,7 @@ function supplier_invoice_pdf_create($db, $object, $model, $outputlangs)
 	}
 	else
 	{
-		print $langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists",$dir.$file);
+		print $langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists",$file);
 		return 0;
 	}
 }