diff --git a/htdocs/comm/mailing/fiche.php b/htdocs/comm/mailing/fiche.php
index 296fda46d2963ca96f309a8fc3f54418cd087fc9..7f668a021e619df5d824b2a6d1a2aa0ff80df344 100644
--- a/htdocs/comm/mailing/fiche.php
+++ b/htdocs/comm/mailing/fiche.php
@@ -40,7 +40,13 @@ $id=(GETPOST('mailid','int') ? GETPOST('mailid','int') : GETPOST('id','int'));
 $action=GETPOST('action','alpha');
 $confirm=GETPOST('confirm','alpha');
 $urlfrom=GETPOST('urlfrom');
-$message = '';
+
+$mesg='';
+if (isset($_SESSION['DolMessage']))
+{
+	$mesg=$_SESSION['DolMessage'];
+	unset($_SESSION['DolMessage']);
+}
 
 $object=new Mailing($db);
 $result=$object->fetch($id);
@@ -140,14 +146,14 @@ if ($action == 'sendallconfirmed' && $confirm == 'yes')
 	{
 		// Pour des raisons de securite, on ne permet pas cette fonction via l'IHM,
 		// on affiche donc juste un message
-		$message='<div class="warning">'.$langs->trans("MailingNeedCommand").'</div>';
-		$message.='<br><textarea cols="70" rows="'.ROWS_2.'" wrap="soft">php ./scripts/emailings/mailing-send.php '.$object->id.'</textarea>';
-		$message.='<br><br><div class="warning">'.$langs->trans("MailingNeedCommand2").'</div>';
+		$mesg='<div class="warning">'.$langs->trans("MailingNeedCommand").'</div>';
+		$mesg.='<br><textarea cols="70" rows="'.ROWS_2.'" wrap="soft">php ./scripts/emailings/mailing-send.php '.$object->id.'</textarea>';
+		$mesg.='<br><br><div class="warning">'.$langs->trans("MailingNeedCommand2").'</div>';
 		$action='';
 	}
 	else if ($conf->global->MAILING_LIMIT_SENDBYWEB < 0)
 	{
-		$message='<div class="warning">'.$langs->trans("NotEnoughPermissions").'</div>';
+		$mesg='<div class="warning">'.$langs->trans("NotEnoughPermissions").'</div>';
 		$action='';
 	}
 	else
@@ -363,9 +369,8 @@ if ($action == 'sendallconfirmed' && $confirm == 'yes')
 			dol_syslog($db->error());
 			dol_print_error($db);
 		}
-		$message='';
+		
 		$action = '';
-
 	}
 }
 
@@ -379,7 +384,7 @@ if ($action == 'send' && empty($_POST["cancel"]))
 	$object->sendto = $_POST["sendto"];
 	if (! $object->sendto)
 	{
-		$message='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->trans("MailTo")).'</div>';
+		$mesg='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->trans("MailTo")).'</div>';
 		$error++;
 	}
 
@@ -387,7 +392,7 @@ if ($action == 'send' && empty($_POST["cancel"]))
 	{
 		// Le message est-il en html
 		$msgishtml=-1;	// Inconnu par defaut
-		if (preg_match('/[\s\t]*<html>/i',$message)) $msgishtml=1;
+		if (preg_match('/[\s\t]*<html>/i',$object->body)) $msgishtml=1;
 
 		// Pratique les substitutions sur le sujet et message
 		$object->sujet=make_substitutions($object->sujet,$object->substitutionarrayfortest);
@@ -419,11 +424,11 @@ if ($action == 'send' && empty($_POST["cancel"]))
 		$result=$mailfile->sendfile();
 		if ($result)
 		{
-			$message='<div class="ok">'.$langs->trans("MailSuccessfulySent",$mailfile->getValidAddress($object->email_from,2),$mailfile->getValidAddress($object->sendto,2)).'</div>';
+			$mesg='<div class="ok">'.$langs->trans("MailSuccessfulySent",$mailfile->getValidAddress($object->email_from,2),$mailfile->getValidAddress($object->sendto,2)).'</div>';
 		}
 		else
 		{
-			$message='<div class="error">'.$langs->trans("ResultKo").'<br>'.$mailfile->error.' '.$result.'</div>';
+			$mesg='<div class="error">'.$langs->trans("ResultKo").'<br>'.$mailfile->error.' '.$result.'</div>';
 		}
 
 		$action='';
@@ -433,8 +438,6 @@ if ($action == 'send' && empty($_POST["cancel"]))
 // Action add emailing
 if ($action == 'add')
 {
-	$message='';
-
 	$object->email_from     = trim($_POST["from"]);
 	$object->email_replyto  = trim($_POST["replyto"]);
 	$object->email_errorsto = trim($_POST["errorsto"]);
@@ -444,21 +447,21 @@ if ($action == 'add')
 	$object->bgcolor        = trim($_POST["bgcolor"]);
 	$object->bgimage        = trim($_POST["bgimage"]);
 
-	if (! $object->titre) $message.=($message?'<br>':'').$langs->trans("ErrorFieldRequired",$langs->trans("MailTitle"));
-	if (! $object->sujet) $message.=($message?'<br>':'').$langs->trans("ErrorFieldRequired",$langs->trans("MailTopic"));
-	if (! $object->body)  $message.=($message?'<br>':'').$langs->trans("ErrorFieldRequired",$langs->trans("MailBody"));
+	if (! $object->titre) $mesg.=($mesg?'<br>':'').$langs->trans("ErrorFieldRequired",$langs->trans("MailTitle"));
+	if (! $object->sujet) $mesg.=($mesg?'<br>':'').$langs->trans("ErrorFieldRequired",$langs->trans("MailTopic"));
+	if (! $object->body)  $mesg.=($mesg?'<br>':'').$langs->trans("ErrorFieldRequired",$langs->trans("MailBody"));
 
-	if (! $message)
+	if (! $mesg)
 	{
 		if ($object->create($user) >= 0)
 		{
 			Header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
 			exit;
 		}
-		$message=$object->error;
+		$mesg=$object->error;
 	}
 
-	$message='<div class="error">'.$message.'</div>';
+	$mesg='<div class="error">'.$mesg.'</div>';
 	$action="create";
 }
 
@@ -472,20 +475,20 @@ if ($action == 'settitre' || $action == 'setemail_from' || $actino == 'setreplyt
 	else if ($action == 'setemail_replyto')		$object->email_replyto  = trim(GETPOST('email_replyto','alpha'));
 	else if ($action == 'setemail_errorsto')	$object->email_errorsto = trim(GETPOST('email_errorsto','alpha'));
 
-	else if ($action == 'settitre' && empty($object->titre))		$message.=($message?'<br>':'').$langs->trans("ErrorFieldRequired",$langs->transnoentities("MailTitle"));
-	else if ($action == 'setfrom' && empty($object->email_from))	$message.=($message?'<br>':'').$langs->trans("ErrorFieldRequired",$langs->transnoentities("MailFrom"));
+	else if ($action == 'settitre' && empty($object->titre))		$mesg.=($mesg?'<br>':'').$langs->trans("ErrorFieldRequired",$langs->transnoentities("MailTitle"));
+	else if ($action == 'setfrom' && empty($object->email_from))	$mesg.=($mesg?'<br>':'').$langs->trans("ErrorFieldRequired",$langs->transnoentities("MailFrom"));
 
-	if (! $message)
+	if (! $mesg)
 	{
 		if ($object->update($user) >= 0)
 		{
 			Header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
 			exit;
 		}
-		$message=$object->error;
+		$mesg=$object->error;
 	}
 
-	$message='<div class="error">'.$message.'</div>';
+	$mesg='<div class="error">'.$mesg.'</div>';
 	$action="";
 }
 
@@ -504,7 +507,7 @@ if (! empty($_POST['addfile']))
 	$action="edit";
 }
 
-// Action update emailing
+// Action remove file
 if (! empty($_POST["removedfile"]))
 {
 	$upload_dir = $conf->mailing->dir_output . "/" . get_exdir($object->id,2,0,1);
@@ -530,20 +533,20 @@ if ($action == 'update' && empty($_POST["removedfile"]) && empty($_POST["cancel"
 		$object->bgcolor        = trim($_POST["bgcolor"]);
 		$object->bgimage        = trim($_POST["bgimage"]);
 
-		if (! $object->sujet) $message.=($message?'<br>':'').$langs->trans("ErrorFieldRequired",$langs->trans("MailTopic"));
-		if (! $object->body)  $message.=($message?'<br>':'').$langs->trans("ErrorFieldRequired",$langs->trans("MailBody"));
+		if (! $object->sujet) $mesg.=($mesg?'<br>':'').$langs->trans("ErrorFieldRequired",$langs->trans("MailTopic"));
+		if (! $object->body)  $mesg.=($mesg?'<br>':'').$langs->trans("ErrorFieldRequired",$langs->trans("MailBody"));
 
-		if (! $message)
+		if (! $mesg)
 		{
 			if ($object->update($user) >= 0)
 			{
 				Header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
 				exit;
 			}
-			$message=$object->error;
+			$mesg=$object->error;
 		}
 
-		$message='<div class="error">'.$message.'</div>';
+		$mesg='<div class="error">'.$mesg.'</div>';
 		$action="edit";
 	}
 	else
@@ -557,7 +560,9 @@ if ($action == 'confirm_valid' && $confirm == 'yes')
 {
 	if ($object->id > 0)
 	{
-		$object->valid($user);
+		$object->valid($user);
+		
+		$_SESSION['DolMessage']='<div class="ok">'.$langs->trans("MailingSuccessfullyValidated").'</div>';
 
 		Header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
 		exit;
@@ -639,7 +644,7 @@ if ($action == 'create')
 
 	print_fiche_titre($langs->trans("NewMailing"));
 
-	dol_htmloutput_mesg($message);
+	dol_htmloutput_mesg($mesg);
 
 	print '<table class="border" width="100%">';
 	print '<tr><td width="25%" class="fieldrequired">'.$langs->trans("MailTitle").'</td><td><input class="flat" name="titre" size="40" value="'.$_POST['titre'].'"></td></tr>';
@@ -697,8 +702,6 @@ else
 
 		dol_fiche_head($head, 'card', $langs->trans("Mailing"), 0, 'email');
 
-		dol_htmloutput_mesg($message);
-
 		// Confirmation de la validation du mailing
 		if ($action == 'valid')
 		{
@@ -914,7 +917,14 @@ else
 
 				if (($object->statut <= 1 && $user->rights->mailing->creer) || $user->rights->mailing->supprimer)
 				{
-					print '<a class="butActionDelete" href="'.$_SERVER['PHP_SELF'].'?action=delete&amp;id='.$object->id.(! empty($urlfrom) ? '&urlfrom='.$urlfrom : '').'">'.$langs->trans("DeleteMailing").'</a>';
+					if ($object->statut > 0 && (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! $user->rights->mailing->mailing_advance->delete))
+					{
+						print '<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->transnoentitiesnoconv("NotEnoughPermissions")).'">'.$langs->trans("DeleteMailing").'</a>';
+					}
+					else
+					{
+						print '<a class="butActionDelete" href="'.$_SERVER['PHP_SELF'].'?action=delete&amp;id='.$object->id.(! empty($urlfrom) ? '&urlfrom='.$urlfrom : '').'">'.$langs->trans("DeleteMailing").'</a>';
+					}
 				}
 
 				print '<br><br></div>';
@@ -1001,10 +1011,7 @@ else
 			 * Mailing en mode edition
 			 */
 
-		    $mesgs=array();
-		    if ($mesg)    $mesgs[]=$mesg;
-		    if ($message) $message[]=$message;
-			dol_htmloutput_mesg('',$mesgs);
+			dol_htmloutput_mesg($mesg);
 
 			print '<table class="border" width="100%">';
 
diff --git a/htdocs/core/lib/emailing.lib.php b/htdocs/core/lib/emailing.lib.php
index d6df5f0804e45796bba96f906af99a8c6162c311..da677daf1b47d557d0dd599a44ec56db51710541 100644
--- a/htdocs/core/lib/emailing.lib.php
+++ b/htdocs/core/lib/emailing.lib.php
@@ -29,7 +29,7 @@
  */
 function emailing_prepare_head($object)
 {
-	global $langs, $conf;
+	global $user, $langs, $conf;
 
 	$h = 0;
 	$head = array();
@@ -38,6 +38,10 @@ function emailing_prepare_head($object)
 	$head[$h][1] = $langs->trans("MailCard");
 	$head[$h][2] = 'card';
 	$h++;
+	
+	if (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! $user->rights->mailing->mailing_advance->recipient) {
+		return $head;
+	}
 
 	$head[$h][0] = DOL_URL_ROOT."/comm/mailing/cibles.php?id=".$object->id;
 	$head[$h][1] = $langs->trans("MailRecipients");
diff --git a/htdocs/core/modules/modMailing.class.php b/htdocs/core/modules/modMailing.class.php
index 9f7f337e5bbb3708261bfea381d1e6b9f7d2a79b..3044dbfd7eb8fed507274ebb7f4ba22fe5e10bda 100644
--- a/htdocs/core/modules/modMailing.class.php
+++ b/htdocs/core/modules/modMailing.class.php
@@ -97,20 +97,36 @@ class modMailing extends DolibarrModules
 		$this->rights[$r][3] = 0;
 		$this->rights[$r][4] = 'valider';
 		
-		$r++;
-		$this->rights[$r][0] = 228;
-		$this->rights[$r][1] = 'Envoyer les mailings';
-		$this->rights[$r][2] = 'w';
-		$this->rights[$r][3] = 0;
-		$this->rights[$r][4] = 'mailing_advance';		// Visible if option MAIN_USE_ADVANCED_PERMS is on
-		$this->rights[$r][5] = 'send';
-		
 		$r++;
 		$this->rights[$r][0] = 229;
 		$this->rights[$r][1] = 'Supprimer les mailings';
 		$this->rights[$r][2] = 'd';
 		$this->rights[$r][3] = 0;
 		$this->rights[$r][4] = 'supprimer';
+		
+		$r++;
+		$this->rights[$r][0] = 237;
+		$this->rights[$r][1] = 'View recipients and info';
+		$this->rights[$r][2] = 'r';
+		$this->rights[$r][3] = 0;
+		$this->rights[$r][4] = 'mailing_advance';		// Visible if option MAIN_USE_ADVANCED_PERMS is on
+		$this->rights[$r][5] = 'recipient';
+		
+		$r++;
+		$this->rights[$r][0] = 238;
+		$this->rights[$r][1] = 'Manually send mailings';
+		$this->rights[$r][2] = 'w';
+		$this->rights[$r][3] = 0;
+		$this->rights[$r][4] = 'mailing_advance';		// Visible if option MAIN_USE_ADVANCED_PERMS is on
+		$this->rights[$r][5] = 'send';
+		
+		$r++;
+		$this->rights[$r][0] = 239;
+		$this->rights[$r][1] = 'Delete mailings after validation and/or sent';
+		$this->rights[$r][2] = 'd';
+		$this->rights[$r][3] = 0;
+		$this->rights[$r][4] = 'mailing_advance';		// Visible if option MAIN_USE_ADVANCED_PERMS is on
+		$this->rights[$r][5] = 'delete';
 
 	}
 
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index d9505beb391527a7ddc171fa3a29ab3922984220..17203d54f064459ad82f45e1cdd29dc3074a8d25 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -327,6 +327,7 @@ UrlGenerationParameters=Parameters to secure URLs
 SecurityTokenIsUnique=Use a unique securekey parameter for each URL
 EnterRefToBuildUrl=Enter reference for object %s
 GetSecuredUrl=Get calculated URL
+ButtonHideUnauthorized=Hide buttons unauthorized (instead of seeing gray)
 
 # Modules
 Module0Name=Users & groups
@@ -553,11 +554,9 @@ Permission221=Read emailings
 Permission222=Create/modify emailings (topic, recipients...)
 Permission223=Validate emailings (allows sending)
 Permission229=Delete emailings
-Permission231=Define mode of payment
-Permission232=Create/modify supplier invoices
-Permission233=Validate supplier invoices
-Permission234=Delete supplier invoices
-Permission236=Export supplier invoices
+Permission237=View recipients and info
+Permission238=Manually send mailings
+Permission239=Delete mailings after validation or sent
 Permission241=Read categories
 Permission242=Create/modify categories
 Permission243=Delete categories
diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang
index 06cad77935545ea0d9beacf4792132f91d23fde1..79aac5a7cf4fe0bbc84a5c289cd7e5879699698f 100644
--- a/htdocs/langs/fr_FR/admin.lang
+++ b/htdocs/langs/fr_FR/admin.lang
@@ -328,6 +328,7 @@ UrlGenerationParameters=Sécurisation des URLs
 SecurityTokenIsUnique=Utiliser un paramètre securekey unique pour chaque URL ?
 EnterRefToBuildUrl=Entrez la référence pour l'objet %s
 GetSecuredUrl=Obtenir l'URL calculée
+ButtonHideUnauthorized=Cacher les boutons non autorisés (au lieu de les voir grisés)
 
 # Modules= undefined
 Module0Name= Utilisateurs & groupes
@@ -551,11 +552,9 @@ Permission221= Consulter les mailings
 Permission222= Créer/modifier les mailings (sujet, destinataires, etc.)
 Permission223= Valider les mailings (permet leur envoi)
 Permission229= Supprimer les mailings
-Permission231= Définir le mode de règlement
-Permission232= Créer/modifier les factures fournisseurs
-Permission233= Valider les factures fournisseurs
-Permission234= Supprimer les factures fournisseurs
-Permission236= Exporter les factures fournisseurs et attributs
+Permission237= Visualiser les destinataires et les infos
+Permission238= Envoyer les mailings manuellement
+Permission239= Supprimer les mailings après leur validation ou leur envoi
 Permission241= Lire les catégories
 Permission242= Créer/modifier les catégories
 Permission243= Supprimer les catégories