diff --git a/htdocs/comm/mailing/class/mailing.class.php b/htdocs/comm/mailing/class/mailing.class.php
index 4bc9639ffa36e4864ffeef39176d464d5464409b..0fd8d7d3785826b2accc14239d9a98bf3b69e232 100644
--- a/htdocs/comm/mailing/class/mailing.class.php
+++ b/htdocs/comm/mailing/class/mailing.class.php
@@ -57,6 +57,8 @@ class Mailing extends CommonObject
 
 	var $date_creat;
 	var $date_valid;
+	
+	var $extraparams=array();
 
 
 	/**
@@ -64,7 +66,7 @@ class Mailing extends CommonObject
      *
      *  @param      DoliDb		$db      Database handler
 	 */
-	function Mailing($db)
+	function __construct($db)
 	{
 		$this->db = $db;
 
@@ -176,14 +178,15 @@ class Mailing extends CommonObject
 	function fetch($rowid)
 	{
 		$sql = "SELECT m.rowid, m.titre, m.sujet, m.body, m.bgcolor, m.bgimage";
-		$sql .= ", m.email_from, m.email_replyto, m.email_errorsto";
-		$sql .= ", m.statut, m.nbemail";
-		$sql .= ", m.fk_user_creat, m.fk_user_valid";
-		$sql .= ", m.date_creat";
-		$sql .= ", m.date_valid";
-		$sql .= ", m.date_envoi";
-		$sql .= " FROM ".MAIN_DB_PREFIX."mailing as m";
-		$sql .= " WHERE m.rowid = ".$rowid;
+		$sql.= ", m.email_from, m.email_replyto, m.email_errorsto";
+		$sql.= ", m.statut, m.nbemail";
+		$sql.= ", m.fk_user_creat, m.fk_user_valid";
+		$sql.= ", m.date_creat";
+		$sql.= ", m.date_valid";
+		$sql.= ", m.date_envoi";
+		$sql.= ", m.extraparams";
+		$sql.= " FROM ".MAIN_DB_PREFIX."mailing as m";
+		$sql.= " WHERE m.rowid = ".$rowid;
 
 		dol_syslog(get_class($this)."::fetch sql=".$sql);
 		$result=$this->db->query($sql);
@@ -193,26 +196,28 @@ class Mailing extends CommonObject
 			{
 				$obj = $this->db->fetch_object($result);
 
-				$this->id                 = $obj->rowid;
-				$this->ref                = $obj->rowid;
-				$this->statut             = $obj->statut;
-				$this->nbemail            = $obj->nbemail;
-				$this->titre              = $obj->titre;
-				$this->sujet              = $obj->sujet;
-				$this->body               = $obj->body;
-				$this->bgcolor            = $obj->bgcolor;
-				$this->bgimage            = $obj->bgimage;
-
-				$this->email_from         = $obj->email_from;
-				$this->email_replyto      = $obj->email_replyto;
-				$this->email_errorsto     = $obj->email_errorsto;
-
-				$this->user_creat         = $obj->fk_user_creat;
-				$this->user_valid         = $obj->fk_user_valid;
-
-				$this->date_creat         = $this->db->jdate($obj->date_creat);
-				$this->date_valid         = $this->db->jdate($obj->date_valid);
-				$this->date_envoi         = $this->db->jdate($obj->date_envoi);
+				$this->id				= $obj->rowid;
+				$this->ref				= $obj->rowid;
+				$this->statut			= $obj->statut;
+				$this->nbemail			= $obj->nbemail;
+				$this->titre			= $obj->titre;
+				$this->sujet			= $obj->sujet;
+				$this->body				= $obj->body;
+				$this->bgcolor			= $obj->bgcolor;
+				$this->bgimage			= $obj->bgimage;
+
+				$this->email_from		= $obj->email_from;
+				$this->email_replyto	= $obj->email_replyto;
+				$this->email_errorsto	= $obj->email_errorsto;
+
+				$this->user_creat		= $obj->fk_user_creat;
+				$this->user_valid		= $obj->fk_user_valid;
+
+				$this->date_creat		= $this->db->jdate($obj->date_creat);
+				$this->date_valid		= $this->db->jdate($obj->date_valid);
+				$this->date_envoi		= $this->db->jdate($obj->date_envoi);
+				
+				$this->extraparams		= (array) json_decode($obj->extraparams, true);
 
 				return 1;
 			}
diff --git a/htdocs/comm/mailing/fiche.php b/htdocs/comm/mailing/fiche.php
index 858396d9f36d9172dd255afc067aefc5ec01641e..1f9ba3a9e2d7d663e1e3a20bfa3b5d12fdfa734d 100644
--- a/htdocs/comm/mailing/fiche.php
+++ b/htdocs/comm/mailing/fiche.php
@@ -30,6 +30,7 @@ require_once(DOL_DOCUMENT_ROOT."/core/class/CMailFile.class.php");
 require_once(DOL_DOCUMENT_ROOT."/core/lib/functions2.lib.php");
 require_once(DOL_DOCUMENT_ROOT."/comm/mailing/class/mailing.class.php");
 require_once(DOL_DOCUMENT_ROOT."/core/class/html.formother.class.php");
+require_once(DOL_DOCUMENT_ROOT."/core/class/extrafields.class.php");
 
 $langs->load("mails");
 
@@ -41,10 +42,17 @@ $confirm=GETPOST('confirm','alpha');
 $message = '';
 
 $object=new Mailing($db);
+$result=$object->fetch($id);
 
+$extrafields = new ExtraFields($db);
+
+// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array
+include_once(DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php');
+$hookmanager=new HookManager($db);
+$hookmanager->initHooks(array('mailingcard'));
 
 // Tableau des substitutions possibles
-$substitutionarray=array(
+$object->substitutionarray=array(
     '__ID__' => 'IdRecord',
     '__EMAIL__' => 'EMail',
     '__LASTNAME__' => 'Lastname',
@@ -60,8 +68,8 @@ $substitutionarray=array(
 );
 if ($conf->global->MAILING_EMAIL_UNSUBSCRIBE)
 {
-    $substitutionarray=array_merge(
-        $substitutionarray,
+    $object->substitutionarray=array_merge(
+        $object->substitutionarray,
         array(
             '__CHECK_READ__' => 'CheckMail',
             '__UNSUSCRIBE__' => 'Unsubscribe'
@@ -69,7 +77,7 @@ if ($conf->global->MAILING_EMAIL_UNSUBSCRIBE)
     );
 }
 
-$substitutionarrayfortest=array(
+$object->substitutionarrayfortest=array(
     '__ID__' => 'TESTIdRecord',
     '__EMAIL__' => 'TESTEMail',
     '__LASTNAME__' => 'TESTLastname',
@@ -85,8 +93,8 @@ $substitutionarrayfortest=array(
 );
 if ($conf->global->MAILING_EMAIL_UNSUBSCRIBE)
 {
-    $substitutionarrayfortest=array_merge(
-        $substitutionarrayfortest,
+    $object->substitutionarrayfortest=array_merge(
+        $object->substitutionarrayfortest,
         array(
             '__CHECK_READ__' => 'TESTCheckMail',
             '__UNSUSCRIBE__' => 'TESTUnsubscribe'
@@ -94,6 +102,13 @@ if ($conf->global->MAILING_EMAIL_UNSUBSCRIBE)
     );
 }
 
+/*
+ * Actions
+ */
+
+$parameters=array();
+$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action);    // Note that $action and $object may have been modified by some hooks
+
 // Action clone object
 if ($action == 'confirm_clone' && $confirm == 'yes')
 {
@@ -103,7 +118,7 @@ if ($action == 'confirm_clone' && $confirm == 'yes')
 	}
 	else
 	{
-		$result=$object->createFromClone($id,$_REQUEST["clone_content"],$_REQUEST["clone_receivers"]);
+		$result=$object->createFromClone($object->id,$_REQUEST["clone_content"],$_REQUEST["clone_receivers"]);
 		if ($result > 0)
 		{
 			header("Location: ".$_SERVER['PHP_SELF'].'?id='.$result);
@@ -125,7 +140,7 @@ 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 '.$id.'</textarea>';
+		$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>';
 		$action='';
 	}
@@ -136,8 +151,6 @@ if ($action == 'sendallconfirmed' && $confirm == 'yes')
 	}
 	else
 	{
-		$result=$object->fetch($id);
-
 		$upload_dir = $conf->mailing->dir_output . "/" . get_exdir($object->id,2,0,1);
 
 		if ($object->statut == 0)
@@ -358,8 +371,6 @@ if ($action == 'sendallconfirmed' && $confirm == 'yes')
 // Action send test emailing
 if ($action == 'send' && empty($_POST["cancel"]))
 {
-	$result=$object->fetch($id);
-
 	$error=0;
 
 	$upload_dir = $conf->mailing->dir_output . "/" . get_exdir($object->id,2,0,1);
@@ -378,8 +389,8 @@ if ($action == 'send' && empty($_POST["cancel"]))
 		if (preg_match('/[\s\t]*<html>/i',$message)) $msgishtml=1;
 
 		// Pratique les substitutions sur le sujet et message
-		$object->sujet=make_substitutions($object->sujet,$substitutionarrayfortest,$langs);
-		$object->body=make_substitutions($object->body,$substitutionarrayfortest,$langs);
+		$object->sujet=make_substitutions($object->sujet,$object->substitutionarrayfortest,$langs);
+		$object->body=make_substitutions($object->body,$object->substitutionarrayfortest,$langs);
 
 		$arr_file = array();
 		$arr_mime = array();
@@ -453,8 +464,6 @@ if ($action == 'add')
 // Action update description of emailing
 if ($action == 'settitre' || $action == 'setemail_from' || $actino == 'setreplyto' || $action == 'setemail_errorsto')
 {
-	$object->fetch($id);
-
 	$upload_dir = $conf->mailing->dir_output . "/" . get_exdir($object->id,2,0,1);
 
 	if ($action == 'settitre')					$object->titre          = trim(GETPOST('titre','alpha'));
@@ -484,8 +493,6 @@ if ($action == 'settitre' || $action == 'setemail_from' || $actino == 'setreplyt
  */
 if (! empty($_POST['addfile']))
 {
-	$object->fetch($id);
-
 	$upload_dir = $conf->mailing->dir_output . "/" . get_exdir($object->id,2,0,1);
 
 	require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php");
@@ -499,8 +506,6 @@ if (! empty($_POST['addfile']))
 // Action update emailing
 if (! empty($_POST["removedfile"]))
 {
-	$object->fetch($id);
-
 	$upload_dir = $conf->mailing->dir_output . "/" . get_exdir($object->id,2,0,1);
 
 	require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php");
@@ -515,8 +520,6 @@ if ($action == 'update' && empty($_POST["removedfile"]) && empty($_POST["cancel"
 {
 	require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php");
 
-	$object->fetch($id);
-
 	$isupload=0;
 
 	if (! $isupload)
@@ -551,7 +554,7 @@ if ($action == 'update' && empty($_POST["removedfile"]) && empty($_POST["cancel"
 // Action confirmation validation
 if ($action == 'confirm_valid' && $confirm == 'yes')
 {
-	if ($object->fetch($id) >= 0)
+	if ($object->id > 0)
 	{
 		$object->valid($user);
 
@@ -567,7 +570,7 @@ if ($action == 'confirm_valid' && $confirm == 'yes')
 // Resend
 if ($action == 'confirm_reset' && $confirm == 'yes')
 {
-	if ($object->fetch($id) >= 0)
+	if ($object->id > 0)
 	{
 		$db->begin();
 
@@ -598,8 +601,6 @@ if ($action == 'confirm_reset' && $confirm == 'yes')
 // Action confirmation suppression
 if ($action == 'confirm_delete' && $confirm == 'yes')
 {
-	$object->fetch($id);
-
 	if ($object->delete($object->id))
 	{
 		Header("Location: liste.php");
@@ -618,6 +619,9 @@ if (! empty($_POST["cancel"]))
  * View
  */
 
+// fetch optionals attributes and labels
+$extralabels=$extrafields->fetch_name_optionals_label('mailing');
+
 $help_url='EN:Module_EMailing|FR:Module_Mailing|ES:M&oacute;dulo_Mailing';
 llxHeader('',$langs->trans("Mailing"),$help_url);
 
@@ -639,6 +643,21 @@ if ($action == 'create')
 	print '<tr><td width="25%" class="fieldrequired">'.$langs->trans("MailTitle").'</td><td><input class="flat" name="titre" size="40" value="'.$_POST['titre'].'"></td></tr>';
 	print '<tr><td width="25%" class="fieldrequired">'.$langs->trans("MailFrom").'</td><td><input class="flat" name="from" size="40" value="'.$conf->global->MAILING_EMAIL_FROM.'"></td></tr>';
 	print '<tr><td width="25%">'.$langs->trans("MailErrorsTo").'</td><td><input class="flat" name="errorsto" size="40" value="'.(!empty($conf->global->MAILING_EMAIL_ERRORSTO)?$conf->global->MAILING_EMAIL_ERRORSTO:$conf->global->MAIN_MAIL_ERRORS_TO).'"></td></tr>';
+	
+	// Other attributes
+	$parameters=array();
+	$reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action);    // Note that $action and $object may have been modified by hook
+	if (empty($reshook) && ! empty($extrafields->attribute_label))
+	{
+		foreach($extrafields->attribute_label as $key=>$label)
+		{
+			$value=(isset($_POST["options_".$key])?$_POST["options_".$key]:$object->array_options["options_".$key]);
+			print '<tr><td>'.$label.'</td><td colspan="3">';
+			print $extrafields->showInputField($key,$value);
+			print '</td></tr>'."\n";
+		}
+	}
+	
 	print '</table>';
 	print '</br><br>';
 
@@ -649,7 +668,7 @@ if ($action == 'create')
 	print '</td></tr>';
 	print '<tr><td width="25%" class="fieldrequired" valign="top">'.$langs->trans("MailMessage").'<br>';
 	print '<br><i>'.$langs->trans("CommonSubstitutions").':<br>';
-	foreach($substitutionarray as $key => $val)
+	foreach($object->substitutionarray as $key => $val)
 	{
 		print $key.' = '.$langs->trans($val).'<br>';
 	}
@@ -668,7 +687,7 @@ if ($action == 'create')
 }
 else
 {
-	if ($object->fetch($id) >= 0)
+	if ($object->id > 0)
 	{
 		$upload_dir = $conf->mailing->dir_output . "/" . get_exdir($object->id,2,0,1);
 
@@ -784,6 +803,20 @@ else
 				print $nbemail;
 			}
 			print '</td></tr>';
+			
+			// Other attributes
+			$parameters=array();
+			$reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action);    // Note that $action and $object may have been modified by hook
+			if (empty($reshook) && ! empty($extrafields->attribute_label))
+			{
+				foreach($extrafields->attribute_label as $key=>$label)
+				{
+					$value=(isset($_POST["options_".$key])?$_POST["options_".$key]:$object->array_options["options_".$key]);
+					print '<tr><td>'.$label.'</td><td colspan="3">';
+					print $extrafields->showInputField($key,$value);
+					print "</td></tr>\n";
+				}
+			}
 
 			print '</table>';
 
@@ -894,7 +927,7 @@ else
 				$formmail->withcancel=1;
 				$formmail->withdeliveryreceipt=0;
 				// Tableau des substitutions
-				$formmail->substit=$substitutionarrayfortest;
+				$formmail->substit=$object->substitutionarrayfortest;
 				// Tableau des parametres complementaires du post
 				$formmail->param["action"]="send";
 				$formmail->param["models"]="body";
@@ -986,6 +1019,20 @@ else
 				print $nbemail;
 			}
 			print '</td></tr>';
+			
+			// Other attributes
+			$parameters=array();
+			$reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action);    // Note that $action and $object may have been modified by hook
+			if (empty($reshook) && ! empty($extrafields->attribute_label))
+			{
+				foreach($extrafields->attribute_label as $key=>$label)
+				{
+					$value=(isset($_POST["options_".$key])?$_POST["options_".$key]:$object->array_options["options_".$key]);
+					print '<tr><td>'.$label.'</td><td colspan="3">';
+					print $extrafields->showInputField($key,$value);
+					print "</td></tr>\n";
+				}
+			}
 
 			print '</table>';
 			print "</div>";
@@ -1049,21 +1096,10 @@ else
 			// Message
 			print '<tr><td width="25%" valign="top">'.$langs->trans("MailMessage").'<br>';
 			print '<br><i>'.$langs->trans("CommonSubstitutions").':<br>';
-			print '__ID__ = '.$langs->trans("IdRecord").'<br>';
-			print '__EMAIL__ = '.$langs->trans("EMail").'<br>';
-            if ($conf->global->MAILING_EMAIL_UNSUBSCRIBE)
-            {
-    			print '__CHECK_READ__ = '.$langs->trans("CheckRead").'<br>';
-	    		print '__UNSUSCRIBE__ = '.$langs->trans("MailUnsubcribe").'<br>';
-            }
-            print '__MAILTOEMAIL__ = '.$langs->trans("MailtoEMail").'<br>';
-			print '__LASTNAME__ = '.$langs->trans("Lastname").'<br>';
-			print '__FIRSTNAME__ = '.$langs->trans("Firstname").'<br>';
-			print '__OTHER1__ = '.$langs->trans("Other").'1<br>';
-			print '__OTHER2__ = '.$langs->trans("Other").'2<br>';
-			print '__OTHER3__ = '.$langs->trans("Other").'3<br>';
-			print '__OTHER4__ = '.$langs->trans("Other").'4<br>';
-			print '__OTHER5__ = '.$langs->trans("Other").'5<br>';
+			foreach($object->substitutionarray as $key => $val)
+			{
+				print $key.' = '.$langs->trans($val).'<br>';
+			}
 			print '</i></td>';
 			print '<td colspan="3">';
 			// Editeur wysiwyg
diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php
index 2914a1aecd1eef2a1bb162c8b28727782ea43e2e..32f4634e40e148eba0929b01199c5e76d75da0ba 100644
--- a/htdocs/core/class/conf.class.php
+++ b/htdocs/core/class/conf.class.php
@@ -52,13 +52,11 @@ class Conf
 	public $smart_menu;
 
 	public $modules					= array();	// List of activated modules
-	public $modules_parts			= array('js'=>array(),'triggers'=>array(),'login'=>array(),'substitutions'=>array(),'menus'=>array(),'theme'=>array(),'tpl'=>array(),'barcode'=>array(),'models'=>array());	// List of modules parts
+	public $modules_parts			= array('js'=>array(),'triggers'=>array(),'login'=>array(),'substitutions'=>array(),'menus'=>array(),'theme'=>array(),'tpl'=>array(),'barcode'=>array(),'models'=>array(),'hooks'=>array());	// List of modules parts
 
 	// TODO Remove thoose arrays with generic module_parts
 	public $tabs_modules			= array();
 	public $sms_engine_modules		= array();
-	// TODO Remove thoose arrays with generic module_parts
-	public $hooks_modules			= array();
 	public $societe_modules	        = array();
 
 	var $logbuffer					= array();
@@ -202,7 +200,7 @@ class Conf
 				}
 				$i++;
 			}
-
+			
 		    $db->free($resql);
 		}
 		//var_dump($this->modules);
diff --git a/htdocs/core/class/doleditor.class.php b/htdocs/core/class/doleditor.class.php
index 4f16862c82ef4bf3007e878daf516e079ec34271..d6d1bd8653980fa5d1c91bd01c537526f722739f 100644
--- a/htdocs/core/class/doleditor.class.php
+++ b/htdocs/core/class/doleditor.class.php
@@ -176,7 +176,7 @@ class DolEditor
                             /* should be editor=CKEDITOR.replace but what if serveral editors ? */
                             CKEDITOR.replace(\''.$this->htmlname.'\',
             					{
-            						customConfig : \''.dol_buildpath('/theme/'.$conf->theme.'/ckeditor/config.js',1).'\',
+            						customConfig : ckeditorConfig,
             						toolbar: \''.$this->toolbarname.'\',
             						toolbarStartupExpanded: '.($this->toolbarstartexpanded ? 'true' : 'false').',
             						width: '.($this->width ? '\''.$this->width.'\'' : '\'\'').',
@@ -201,8 +201,8 @@ class DolEditor
             	{
                     $out.= ','."\n";
                     // To use filemanager with old fckeditor (GPL)
-                    $out.= '    filebrowserBrowseUrl : \''.DOL_URL_ROOT.'/core/filemanagerdol/browser/default/browser.php?Connector='.DOL_URL_ROOT.'/core/filemanagerdol/connectors/php/connector.php\',';
-                    $out.= '    filebrowserImageBrowseUrl : \''.DOL_URL_ROOT.'/core/filemanagerdol/browser/default/browser.php?Type=Image&Connector='.DOL_URL_ROOT.'/core/filemanagerdol/connectors/php/connector.php\',';
+                    $out.= '    filebrowserBrowseUrl : ckeditorFilebrowserBrowseUrl,';
+                    $out.= '    filebrowserImageBrowseUrl : ckeditorFilebrowserImageBrowseUrl,';
                     //$out.= '    filebrowserUploadUrl : \''.DOL_URL_ROOT.'/includes/fckeditor/editor/filemanagerdol/connectors/php/upload.php?Type=File\',';
                     //$out.= '    filebrowserImageUploadUrl : \''.DOL_URL_ROOT.'/includes/fckeditor/editor/filemanagerdol/connectors/php/upload.php?Type=Image\',';
                     $out.= "\n";
diff --git a/htdocs/core/class/hookmanager.class.php b/htdocs/core/class/hookmanager.class.php
index a7f0edd173f3653ec08ca9664f6c006892dd67c0..46230d678b228ab1c03996810d210bdfe6999e8c 100755
--- a/htdocs/core/class/hookmanager.class.php
+++ b/htdocs/core/class/hookmanager.class.php
@@ -70,14 +70,14 @@ class HookManager
 		global $conf;
 
 		// Test if there is hooks to manage
-        if (! is_array($conf->hooks_modules) || empty($conf->hooks_modules)) return;
+        if (! is_array($conf->modules_parts['hooks']) || empty($conf->modules_parts['hooks'])) return;
 
         // For backward compatibility
 		if (! is_array($arraycontext)) $arraycontext=array($arraycontext);
 
 		$this->contextarray=array_unique(array_merge($arraycontext,$this->contextarray));    // All contexts are concatenated
 
-		foreach($conf->hooks_modules as $module => $hooks)
+		foreach($conf->modules_parts['hooks'] as $module => $hooks)
 		{
 			if ($conf->$module->enabled)
 			{
diff --git a/htdocs/core/js/editinplace.js b/htdocs/core/js/editinplace.js
index 7748b73fce6d4bbdbf1e0e155ea2189dfa285f62..bf94a47749aa67d2f8578829f8dccd9bac8991b1 100644
--- a/htdocs/core/js/editinplace.js
+++ b/htdocs/core/js/editinplace.js
@@ -80,7 +80,13 @@ $(document).ready(function() {
 		indicator	: indicatorInPlace,
 		ckeditor	: {
 			customConfig: ckeditorConfig,
-			toolbar: $('#ckeditor_toolbar').val()
+			toolbar: $('#ckeditor_toolbar').val(),
+			filebrowserBrowseUrl : ckeditorFilebrowserBrowseUrl,
+			filebrowserImageBrowseUrl : ckeditorFilebrowserImageBrowseUrl,
+			filebrowserWindowWidth : '900',
+            filebrowserWindowHeight : '500',
+            filebrowserImageWindowWidth : '900',
+            filebrowserImageWindowHeight : '500'
 		},
 		submitdata	: function(result, settings) {
 			return getParameters(this, 'ckeditor');
diff --git a/htdocs/install/mysql/migration/3.2.0-3.3.0.sql b/htdocs/install/mysql/migration/3.2.0-3.3.0.sql
index a67d2bcf9e7cebf7d0b8a590ecbfbb43f5599d5c..a6790fd71062634b4be7348e19e000c951b46450 100755
--- a/htdocs/install/mysql/migration/3.2.0-3.3.0.sql
+++ b/htdocs/install/mysql/migration/3.2.0-3.3.0.sql
@@ -34,4 +34,5 @@ INSERT INTO llx_c_input_reason (rowid,code,label,active) VALUES (10, 'SRC_EMPLOY
 ALTER TABLE llx_commande_fournisseur CHANGE COLUMN date_cloture date_approve datetime;
 ALTER TABLE llx_commande_fournisseur CHANGE COLUMN fk_user_cloture fk_user_approve integer;
 
-ALTER TABLE llx_mailing MODIFY COLUMN body mediumtext;
\ No newline at end of file
+ALTER TABLE llx_mailing MODIFY COLUMN body mediumtext;
+ALTER TABLE llx_mailing ADD COLUMN extraparams varchar(255);
\ No newline at end of file
diff --git a/htdocs/install/mysql/tables/llx_mailing.sql b/htdocs/install/mysql/tables/llx_mailing.sql
index aad9949d2d9b312ab7d46561e0988735efa56cf8..0656a1e83aaa8dd84800a86eb0bed70d76750b18 100644
--- a/htdocs/install/mysql/tables/llx_mailing.sql
+++ b/htdocs/install/mysql/tables/llx_mailing.sql
@@ -46,6 +46,7 @@ create table llx_mailing
   fk_user_creat		integer,                             -- user creator
   fk_user_valid		integer,                             -- user validator
   fk_user_appro		integer,                             -- not used
+  extraparams		varchar(255),						 -- for stock other parameters with json format
   joined_file1		varchar(255),
   joined_file2		varchar(255),
   joined_file3		varchar(255),
diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php
index 0678797c8aa2701f5a18a4840f56a81c91110b98..4e1e373782e46d679c33913348355de5eaec2ca5 100644
--- a/htdocs/main.inc.php
+++ b/htdocs/main.inc.php
@@ -978,7 +978,6 @@ function top_htmlhead($head, $title='', $disablejs=0, $disablehead=0, $arrayofjs
                 print 'var cancelInPlace = \''.$langs->trans('Cancel').'\';'."\n";
                 print 'var submitInPlace = \''.$langs->trans('Ok').'\';'."\n";
                 print 'var indicatorInPlace = \'<img src="'.DOL_URL_ROOT."/theme/".$conf->theme."/img/working.gif".'">\';'."\n";
-                print 'var ckeditorConfig = \''.dol_buildpath('/theme/'.$conf->theme.'/ckeditor/config.js',1).'\';'."\n";
                 print '</script>'."\n";
                 print '<script type="text/javascript" src="'.DOL_URL_ROOT.'/core/js/editinplace.js"></script>'."\n";
                 print '<script type="text/javascript" src="'.DOL_URL_ROOT.'/includes/jquery/plugins/jeditable/jquery.jeditable.ckeditor.js"></script>'."\n";
@@ -1019,7 +1018,12 @@ function top_htmlhead($head, $title='', $disablejs=0, $disablehead=0, $arrayofjs
                 }
                 else
                 {
-                    print '<script type="text/javascript">var CKEDITOR_BASEPATH = \''.DOL_URL_ROOT.'/includes/ckeditor/\';</script>'."\n";
+                    print '<script type="text/javascript">';
+                    print 'var CKEDITOR_BASEPATH = \''.DOL_URL_ROOT.'/includes/ckeditor/\';'."\n";
+                    print 'var ckeditorConfig = \''.dol_buildpath('/theme/'.$conf->theme.'/ckeditor/config.js',1).'\';'."\n";
+                    print 'var ckeditorFilebrowserBrowseUrl = \''.DOL_URL_ROOT.'/core/filemanagerdol/browser/default/browser.php?Connector='.DOL_URL_ROOT.'/core/filemanagerdol/connectors/php/connector.php\';'."\n";
+                    print 'var ckeditorFilebrowserImageBrowseUrl = \''.DOL_URL_ROOT.'/core/filemanagerdol/browser/default/browser.php?Type=Image&Connector='.DOL_URL_ROOT.'/core/filemanagerdol/connectors/php/connector.php\';'."\n";
+                    print '</script>'."\n";
                     print '<script type="text/javascript" src="'.DOL_URL_ROOT.'/includes/ckeditor/ckeditor_basic.js"></script>'."\n";
                 }
             }