diff --git a/htdocs/ecm/index.php b/htdocs/ecm/index.php
index 577bbda7ebf608cfdc1d73be6ade8371117cfb03..974620705da70fcea5847854829e2556e4d3a0c5 100644
--- a/htdocs/ecm/index.php
+++ b/htdocs/ecm/index.php
@@ -121,12 +121,12 @@ $userstatic = new User($db);
 // Ajout rubriques automatiques
 $rowspan=0;
 $sectionauto=array();
-if ($conf->societe->enabled)  { $rowspan++; $sectionauto[]=array('test'=>$conf->societe->enabled, 'label'=>$langs->trans("ThirdParties"), 'desc'=>$langs->trans("ECMDocsByThirdParties")); }
-if ($conf->propal->enabled)   { $rowspan++; $sectionauto[]=array('test'=>$conf->propal->enabled,  'label'=>$langs->trans("Proposals"),    'desc'=>$langs->trans("ECMDocsByProposals")); }
-if ($conf->commande->enabled) { $rowspan++; $sectionauto[]=array('test'=>$conf->commande->enabled,'label'=>$langs->trans("Orders"),       'desc'=>$langs->trans("ECMDocsByOrders")); }
-if ($conf->contrat->enabled)  { $rowspan++; $sectionauto[]=array('test'=>$conf->contrat->enabled, 'label'=>$langs->trans("Contracts"),    'desc'=>$langs->trans("ECMDocsByContracts")); }
-if ($conf->facture->enabled)  { $rowspan++; $sectionauto[]=array('test'=>$conf->facture->enabled, 'label'=>$langs->trans("Invoices"),     'desc'=>$langs->trans("ECMDocsByInvoices")); }
-if ($conf->produit->enabled)  { $rowspan++; $sectionauto[]=array('test'=>$conf->produit->enabled, 'label'=>$langs->trans("ProductsAndServices"),     'desc'=>$langs->trans("ECMDocsByProducts")); }
+if ($conf->societe->enabled)  { $rowspan++; $sectionauto[]=array('module'=>'company', 'test'=>$conf->societe->enabled, 'label'=>$langs->trans("ThirdParties"), 'desc'=>$langs->trans("ECMDocsByThirdParties")); }
+if ($conf->propal->enabled)   { $rowspan++; $sectionauto[]=array('module'=>'propal',  'test'=>$conf->propal->enabled,  'label'=>$langs->trans("Prop"),    'desc'=>$langs->trans("ECMDocsByProposals")); }
+if ($conf->commande->enabled) { $rowspan++; $sectionauto[]=array('module'=>'order',   'test'=>$conf->commande->enabled,'label'=>$langs->trans("Orders"),       'desc'=>$langs->trans("ECMDocsByOrders")); }
+if ($conf->contrat->enabled)  { $rowspan++; $sectionauto[]=array('module'=>'contract','test'=>$conf->contrat->enabled, 'label'=>$langs->trans("Contracts"),    'desc'=>$langs->trans("ECMDocsByContracts")); }
+if ($conf->facture->enabled)  { $rowspan++; $sectionauto[]=array('module'=>'invoice', 'test'=>$conf->facture->enabled, 'label'=>$langs->trans("Invoices"),     'desc'=>$langs->trans("ECMDocsByInvoices")); }
+if ($conf->produit->enabled)  { $rowspan++; $sectionauto[]=array('module'=>'product', 'test'=>$conf->produit->enabled, 'label'=>$langs->trans("ProductsAndServices"),     'desc'=>$langs->trans("ECMDocsByProducts")); }
 
 
 //***********************
@@ -160,18 +160,26 @@ print '</td><td width="50%" valign="top">';
 print '<form method="post" action="'.DOL_URL_ROOT.'/ecm/search.php">';
 print '<table class="noborder" width="100%">';
 print "<tr class=\"liste_titre\">";
-print '<td colspan="3">'.$langs->trans("ECMSearchByEntity").'</td></tr>';
-
-
+print '<td colspan="4">'.$langs->trans("ECMSearchByEntity").'</td></tr>';
 
 $buthtml='<td rowspan="'.$rowspan.'"><input type="submit" value="'.$langs->trans("Search").'" class="button"></td>';
 $butshown=0;
-if ($conf->societe->enabled)  { print "<tr $bc[0]><td>".$langs->trans("ThirdParty").':</td><td><input type="text" name="sf_ref" class="flat" size="18"></td>'.($butshown?'':$buthtml).'</tr>'; $butshown++; }
-if ($conf->contrat->enabled)  { print "<tr $bc[0]><td>".$langs->trans("Contrat").':</td><td><input type="text" name="sf_ref" class="flat" size="18"></td>'.($butshown?'':$buthtml).'</tr>'; $butshown++; }
-if ($conf->propal->enabled)   { print "<tr $bc[0]><td>".$langs->trans("Proposal").':</td><td><input type="text" name="sf_ref" class="flat" size="18"></td>'.($butshown?'':$buthtml).'</tr>'; $butshown++; }
-if ($conf->commande->enabled) { print "<tr $bc[0]><td>".$langs->trans("Order").':</td><td><input type="text" name="sf_ref" class="flat" size="18"></td>'.($butshown?'':$buthtml).'</tr>'; $butshown++; }
-if ($conf->facture->enabled)  { print "<tr $bc[0]><td>".$langs->trans("Invoice").':</td><td><input type="text" name="sf_ref" class="flat" size="18"></td>'.($butshown?'':$buthtml).'</tr>'; $butshown++; }
-if ($conf->produit->enabled)  { print "<tr $bc[0]><td>".$langs->trans("ProductsAndServices").':</td><td><input type="text" name="sf_ref" class="flat" size="18"></td>'.($butshown?'':$buthtml).'</tr>'; $butshown++; }
+foreach($sectionauto as $section)
+{
+	if (! $section['test']) continue;
+	if ($butshown % 2 == 0) print '<tr '. $bc[0].'>';
+	print "<td>".$section['label'].':</td>';
+	print '<td';
+	if ($butshown % 2 == 1) print ' align="right"';
+	print '>';
+	print '<input type="text" name="search_'.$section['module'].'" class="flat" size="6">';
+	print '</td>';
+	if ($butshown % 2 == 1) print '</tr>';
+	$butshown++;
+}
+if ($butshown % 2 == 1) print '<td>&nbsp;</td><td>&nbsp;</td></tr>';
+
+print '<tr '. $bc[0].'><td colspan="4" align="center"><input type="submit" class="button" value="'.$langs->trans("Search").'"></td></tr>';
 print "</table></form><br>";
 //print $langs->trans("ECMAutoOrgDesc");
 	
diff --git a/htdocs/html.formfile.class.php b/htdocs/html.formfile.class.php
index d6f7e1e692f7242d9ffbc7702a81c543af47b125..819af96fbdc3a8c2b0d4e88388688ea0163b7401 100644
--- a/htdocs/html.formfile.class.php
+++ b/htdocs/html.formfile.class.php
@@ -373,9 +373,10 @@ class FormFile
      * 		\param		param				Parameters on sort links
      * 		\param		forcedownload		Mime type is forced to 'application/binary' to have a download
      * 		\param		relativepath		Relative path of docs (autodefined if not provided)
+     * 		\param		permtodelete		Permission to delete
      *		\return		int					<0 if KO, nb of files shown if OK
      */
-    function list_of_documents($filearray,$object,$modulepart,$param,$forcedownload=0,$relativepath='')
+    function list_of_documents($filearray,$object,$modulepart,$param,$forcedownload=0,$relativepath='',$permtodelete=1)
     {
     	global $user, $conf, $langs;
     	global $bc;
@@ -422,7 +423,10 @@ class FormFile
 				print '<td align="center">'.dolibarr_print_date($file['date'],"dayhour").'</td>';
 				print '<td align="right">';
 				//print '&nbsp;'; 
-				print '<a href="'.$url.'?id='.$object->id.'&amp;section='.$_REQUEST["section"].'&amp;action=delete&urlfile='.urlencode($file['name']).'">'.img_delete().'</a>';
+				if ($permtodelete)
+					print '<a href="'.$url.'?id='.$object->id.'&amp;section='.$_REQUEST["section"].'&amp;action=delete&urlfile='.urlencode($file['name']).'">'.img_delete().'</a>';
+				else
+					print '&nbsp;';
 				print "</td></tr>\n";
 			}
 		}
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index fb7a1dae6de4ac977944a12a9228538d7fdf53c4..2e3ebfab4843254c9c59522f0454b99e6c043fcd 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -412,6 +412,9 @@ Permission2401=Read actions (events or tasks) linked to his account
 Permission2402=Create/modify/delete actions (events or tasks) linked to his account
 Permission2403=Read actions (events or tasks) of others
 Permission2405=Create/modify/delete actions (events or tasks) of others
+Permission2500=Read documents
+Permission2501=Submit or delete documents
+Permission2515=Setup documents directories
 DictionnaryCompanyType=Company types
 DictionnaryCompanyJuridicalType=Juridical kinds of company
 DictionnaryProspectLevel=Prospect potential level
diff --git a/htdocs/langs/en_US/errors.lang b/htdocs/langs/en_US/errors.lang
index 107bb349b4331d77ad4f5400388c73f6268bc6ee..3af5dd0b5bf24e2112cd39e0a67982d30e718934 100644
--- a/htdocs/langs/en_US/errors.lang
+++ b/htdocs/langs/en_US/errors.lang
@@ -2,6 +2,7 @@
 ErrorDuplicateTrigger=A trigger file with class nam '<b>%s</b>' is present sevaral times. Remove duplicate trigger file in directory '<b>%s</b>'.
 ErrorFailToDeleteFile=Failed to remove file '<b>%s</b>'.
 ErrorFailToCreateFile=Failed to create file '<b>%s</b>'.
+ErrorFailToRenameDir=Failed to rename directory '<b>%s</b>' into '<b>%s</b>'.
 ErrorThisContactIsAlreadyDefinedAsThisType=This contact is already defined as contact for this type.
 ErrorCashAccountAcceptsOnlyCashMoney=This bank account is a cash account, so it accepts payments of type cash only.
 ErrorFromToAccountsMustDiffers=Source and targets bank accounts must be different.
diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang
index cc45a9063ad1c32af53aac859201d8cbdbbe70dd..52d79aae62ead16eb4fb9e46f3d8e8121494962b 100644
--- a/htdocs/langs/fr_FR/admin.lang
+++ b/htdocs/langs/fr_FR/admin.lang
@@ -410,6 +410,9 @@ Permission2401=Lire les actions (
 Permission2402=Creer/modifier/supprimer les actions (�v�nements ou t�ches) li�es � son compte
 Permission2403=Lire les actions (�v�nements ou t�ches) des autres
 Permission2405=Creer/modifier/supprimer les actions (�v�nements ou t�ches) pour les autres
+Permission2500=Consulter les documents
+Permission2501=Soumettre ou supprimer des documents
+Permission2515=Administrer les rubriques de documents
 DictionnaryCompanyType=Types de soci�t�s
 DictionnaryCompanyJuridicalType=Formes juridiques
 DictionnaryProspectLevel=Niveau de potentiel des prospects
diff --git a/htdocs/langs/fr_FR/errors.lang b/htdocs/langs/fr_FR/errors.lang
index f81b1bd3f1db2a4b1371666374b52df22f4077d6..5bfeda2056ee9ff387cd98b9d5a63f8058eabc45 100644
--- a/htdocs/langs/fr_FR/errors.lang
+++ b/htdocs/langs/fr_FR/errors.lang
@@ -2,6 +2,7 @@
 ErrorDuplicateTrigger=Un fichier trigger de classe '<b>%s</b>' est present plusieurs fois. Supprimer le doublon du r�pertoire '<b>%s</b>'.
 ErrorFailToCreateFile=Echec de la cr�ation du fichier '<b>%s</b>'.
 ErrorFailToDeleteFile=Echec de l'effacement du fichier '<b>%s</b>'.
+ErrorFailToRenameDir=Echec du renommage du r�pertoire '<b>%s</b>' en '<b>%s</b>'.
 ErrorThisContactIsAlreadyDefinedAsThisType=Ce contact est d�j� d�fini comme contact pour ce type.
 ErrorCashAccountAcceptsOnlyCashMoney=Ce compte bancaire est de type caisse et n'accepte que les mode de r�glement de type <b>esp�ce</b>.
 ErrorFromToAccountsMustDiffers=Le compte source et destination doivent etre diff�rents.