diff --git a/htdocs/admin/expedition.php b/htdocs/admin/expedition.php
index 2719ef96b6d2668c7c808adf1c788da7f630470a..217b920b8c3f72157634a7321e60c79c9aad7e08 100644
--- a/htdocs/admin/expedition.php
+++ b/htdocs/admin/expedition.php
@@ -58,7 +58,7 @@ if ($action == 'specimen')
 	//$exp->fetch_commande();
 
 	// Charge le modele
-	$dir = DOL_DOCUMENT_ROOT . "/core/modules/expedition/pdf/";
+	$dir = DOL_DOCUMENT_ROOT . "/core/modules/expedition/doc/";
 	$file = "pdf_expedition_".$modele.".modules.php";
 	if (file_exists($dir.$file))
 	{
@@ -483,7 +483,7 @@ clearstatcache();
 
 foreach ($conf->file->dol_document_root as $dirroot)
 {
-	$dir = $dirroot . "/core/modules/expedition/pdf/";
+	$dir = $dirroot . "/core/modules/expedition/doc/";
 
 	if (is_dir($dir))
 	{
diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php
index 52c68848b15687663fa67b40504ba6d9274d88a1..2b9e28c07a9a98e1da5f3f73f35a5d65e628e092 100644
--- a/htdocs/core/class/html.formfile.class.php
+++ b/htdocs/core/class/html.formfile.class.php
@@ -247,7 +247,7 @@ class FormFile
                 if (is_array($genallowed)) $modellist=$genallowed;
                 else
                 {
-                    include_once(DOL_DOCUMENT_ROOT.'/core/modules/expedition/pdf/ModelePdfExpedition.class.php');
+                    include_once(DOL_DOCUMENT_ROOT.'/core/modules/expedition/doc/ModelePdfExpedition.class.php');
                     $modellist=ModelePDFExpedition::liste_modeles($this->db);
                 }
             }
diff --git a/htdocs/core/modules/expedition/pdf/ModelePdfExpedition.class.php b/htdocs/core/modules/expedition/doc/ModelePdfExpedition.class.php
similarity index 65%
rename from htdocs/core/modules/expedition/pdf/ModelePdfExpedition.class.php
rename to htdocs/core/modules/expedition/doc/ModelePdfExpedition.class.php
index 2ba0f1883b853ea444145b01e8a5d06af800f0f5..8b6fea4ae37013a4f5418805aba551e681e6e240 100644
--- a/htdocs/core/modules/expedition/pdf/ModelePdfExpedition.class.php
+++ b/htdocs/core/modules/expedition/doc/ModelePdfExpedition.class.php
@@ -19,7 +19,7 @@
  */
 
 /**
- *  \file       htdocs/core/modules/expedition/pdf/ModelePdfExpedition.class.php
+ *  \file       htdocs/core/modules/expedition/doc/ModelePdfExpedition.class.php
  *  \ingroup    shipping
  *  \brief      Fichier contenant la classe mere de generation des expeditions
  */
@@ -65,46 +65,60 @@ abstract class ModelePdfExpedition extends CommonDocGenerator
 function expedition_pdf_create($db, $object, $modele, $outputlangs)
 {
 	global $conf,$langs;
-	$langs->load("sendings");
 
-	$dir = "/core/modules/expedition/pdf/";
-	$modelisok=0;
+	$langs->load("sendings");
 
-	// Positionne modele sur le nom du modele de commande a utiliser
-	$file = "pdf_expedition_".$modele.".modules.php";
+	// Increase limit for PDF build
+	$err=error_reporting();
+	error_reporting(0);
+	@set_time_limit(120);
+	error_reporting($err);
 
-	// On verifie l'emplacement du modele
-	$file = dol_buildpath($dir.$file);
+	$dir = "/core/modules/expedition/";
+	$srctemplatepath='';
 
-	if ($modele && file_exists($file)) $modelisok=1;
+	// Positionne le modele sur le nom du modele a utiliser
+	if (! dol_strlen($modele))
+	{
+	    if (! empty($conf->global->EXPEDITION_ADDON_PDF))
+	    {
+	        $modele = $conf->global->EXPEDITION_ADDON_PDF;
+	    }
+	    else
+	    {
+	        $modele = 'rouget';
+	    }
+	}
 
-    // Si model pas encore bon
-	if (! $modelisok)
+	// If selected modele is a filename template (then $modele="modelname:filename")
+	$tmp=explode(':',$modele,2);
+	if (! empty($tmp[1]))
 	{
-		if ($conf->global->EXPEDITION_ADDON_PDF) $modele = $conf->global->EXPEDITION_ADDON_PDF;
-      	$file = "pdf_expedition_".$modele.".modules.php";
-      	// On verifie l'emplacement du modele
-		$file = dol_buildpath($dir.$file);
-    	if (file_exists($file)) $modelisok=1;
-    }
+	    $modele=$tmp[0];
+	    $srctemplatepath=$tmp[1];
+	}
 
-    // Si model pas encore bon
-	if (! $modelisok)
+	// Search template file
+	$file=''; $classname=''; $filefound=0;
+	foreach(array('doc','pdf') as $prefix)
 	{
-		$liste=ModelePDFExpedition::liste_modeles($db);
-        $modele=key($liste);        // Renvoie premiere valeur de cle trouve dans le tableau
-      	$file = "pdf_expedition_".$modele.".modules.php";
-      	// On verifie l'emplacement du modele
-		$file = dol_buildpath($dir.$file);
-    	if (file_exists($file)) $modelisok=1;
+	    $file = $prefix."_expedition_".$modele.".modules.php";
+
+	    // On verifie l'emplacement du modele
+	    $file = dol_buildpath($dir.'doc/'.$file);
+
+	    if (file_exists($file))
+	    {
+	        $filefound=1;
+	        $classname=$prefix.'_expedition_'.$modele;
+	        break;
+	    }
 	}
 
 	// Charge le modele
-    if ($modelisok)
+	if ($filefound)
 	{
-	    dol_syslog("expedition_pdf_create ".$modele);
-		$classname = "pdf_expedition_".$modele;
-		require_once($file);
+	    require_once($file);
 
 		$obj = new $classname($db);
 
@@ -132,16 +146,9 @@ function expedition_pdf_create($db, $object, $modele, $outputlangs)
 	}
 	else
 	{
-        if (! $conf->global->EXPEDITION_ADDON_PDF)
-        {
-			print $langs->trans("Error")." ".$langs->trans("Error_EXPEDITION_ADDON_PDF_NotDefined");
-        }
-        else
-        {
-    		print $langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists",$dir.$file);
-        }
-		return 0;
-   }
+		dol_print_error('',$langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists",$dir.$file));
+		return -1;
+    }
 }
 
 ?>
diff --git a/htdocs/core/modules/expedition/pdf/pdf_expedition_merou.modules.php b/htdocs/core/modules/expedition/doc/pdf_expedition_merou.modules.php
similarity index 99%
rename from htdocs/core/modules/expedition/pdf/pdf_expedition_merou.modules.php
rename to htdocs/core/modules/expedition/doc/pdf_expedition_merou.modules.php
index c7159277e892797f047df14fcea9936dffc3961f..9d14713d57a4c40023dbad6ed2871d0d49d313d9 100644
--- a/htdocs/core/modules/expedition/pdf/pdf_expedition_merou.modules.php
+++ b/htdocs/core/modules/expedition/doc/pdf_expedition_merou.modules.php
@@ -19,12 +19,12 @@
  */
 
 /**
- *	\file       htdocs/core/modules/expedition/pdf/pdf_expedition_merou.modules.php
+ *	\file       htdocs/core/modules/expedition/doc/pdf_expedition_merou.modules.php
  *	\ingroup    expedition
  *	\brief      Fichier de la classe permettant de generer les bordereaux envoi au modele Merou
  */
 
-require_once DOL_DOCUMENT_ROOT."/core/modules/expedition/pdf/ModelePdfExpedition.class.php";
+require_once DOL_DOCUMENT_ROOT."/core/modules/expedition/doc/ModelePdfExpedition.class.php";
 require_once DOL_DOCUMENT_ROOT."/contact/class/contact.class.php";
 require_once(DOL_DOCUMENT_ROOT."/core/lib/company.lib.php");
 require_once(DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php');
diff --git a/htdocs/core/modules/expedition/pdf/pdf_expedition_rouget.modules.php b/htdocs/core/modules/expedition/doc/pdf_expedition_rouget.modules.php
similarity index 99%
rename from htdocs/core/modules/expedition/pdf/pdf_expedition_rouget.modules.php
rename to htdocs/core/modules/expedition/doc/pdf_expedition_rouget.modules.php
index 85de36612cba4ecc0924797cdd7575b47aa628b0..cc4e3c716e815b4f744cf57c0c8df4359132c8fd 100644
--- a/htdocs/core/modules/expedition/pdf/pdf_expedition_rouget.modules.php
+++ b/htdocs/core/modules/expedition/doc/pdf_expedition_rouget.modules.php
@@ -19,12 +19,12 @@
  */
 
 /**
- *	\file       htdocs/core/modules/expedition/pdf/pdf_expedition_rouget.modules.php
+ *	\file       htdocs/core/modules/expedition/doc/pdf_expedition_rouget.modules.php
  *	\ingroup    expedition
  *	\brief      Fichier de la classe permettant de generer les bordereaux envoi au modele Rouget
  */
 
-require_once DOL_DOCUMENT_ROOT."/core/modules/expedition/pdf/ModelePdfExpedition.class.php";
+require_once DOL_DOCUMENT_ROOT."/core/modules/expedition/doc/ModelePdfExpedition.class.php";
 require_once(DOL_DOCUMENT_ROOT."/core/lib/company.lib.php");
 require_once(DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php');
 
diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php
index 4571d8bdd6b1773cfb163f91d71c03517acd2c25..820a8921a6c2991e0c3c2483e1f29c0701f79a35 100644
--- a/htdocs/install/upgrade2.php
+++ b/htdocs/install/upgrade2.php
@@ -1754,7 +1754,7 @@ function migrate_modeles($db,$langs,$conf)
 
     if (! empty($conf->expedition->enabled))
     {
-        include_once(DOL_DOCUMENT_ROOT.'/core/modules/expedition/pdf/ModelePdfExpedition.class.php');
+        include_once(DOL_DOCUMENT_ROOT.'/core/modules/expedition/doc/ModelePdfExpedition.class.php');
         $modellist=ModelePDFExpedition::liste_modeles($db);
         if (count($modellist)==0)
         {
diff --git a/test/phpunit/BuildDocTest.php b/test/phpunit/BuildDocTest.php
index c1b0512144780f1d0882a90362ee1114e6ab900a..10857fa5e0fca1dc286fd3a373d7a0dc45a2ab81 100644
--- a/test/phpunit/BuildDocTest.php
+++ b/test/phpunit/BuildDocTest.php
@@ -43,15 +43,15 @@ require_once dirname(__FILE__).'/../../htdocs/core/modules/propale/pdf_propale_a
 require_once dirname(__FILE__).'/../../htdocs/core/modules/propale/pdf_propale_jaune.modules.php';
 require_once dirname(__FILE__).'/../../htdocs/core/modules/project/pdf/pdf_baleine.modules.php';
 require_once dirname(__FILE__).'/../../htdocs/core/modules/fichinter/pdf_soleil.modules.php';
-require_once dirname(__FILE__).'/../../htdocs/core/modules/expedition/pdf/pdf_expedition_merou.modules.php';
-require_once dirname(__FILE__).'/../../htdocs/core/modules/expedition/pdf/pdf_expedition_rouget.modules.php';
+require_once dirname(__FILE__).'/../../htdocs/core/modules/expedition/doc/pdf_expedition_merou.modules.php';
+require_once dirname(__FILE__).'/../../htdocs/core/modules/expedition/doc/pdf_expedition_rouget.modules.php';
 // Mother classes of pdf generators
 require_once dirname(__FILE__).'/../../htdocs/core/modules/facture/modules_facture.php';
 require_once dirname(__FILE__).'/../../htdocs/core/modules/commande/modules_commande.php';
 require_once dirname(__FILE__).'/../../htdocs/core/modules/propale/modules_propale.php';
 require_once dirname(__FILE__).'/../../htdocs/core/modules/project/modules_project.php';
 require_once dirname(__FILE__).'/../../htdocs/core/modules/fichinter/modules_fichinter.php';
-require_once dirname(__FILE__).'/../../htdocs/core/modules/expedition/pdf/ModelePdfExpedition.class.php';
+require_once dirname(__FILE__).'/../../htdocs/core/modules/expedition/doc/ModelePdfExpedition.class.php';
 
 if (empty($user->id))
 {