diff --git a/ChangeLog b/ChangeLog
index 294c09a6997340f578070e58891a757c8129423e..7c1b893fc129188c3142ce135e480b2ee7f41f18 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -7,6 +7,8 @@ For users:
 - New: Some performance enhancements.
 - New: Can attach files onto trip and expenses modules.
 - New: Add option MAIN_PDF_TITLE_BACKGROUND_COLOR
+- New: Can define a hierarchical responsible on user
+- New: Merge tab customer and prospect
 
 For developers:
 - System of menu managers has been rewritten to reduce code to do same things. 
diff --git a/build/makepack-howto.txt b/build/makepack-howto.txt
index a8a9471cc1bc3b92feb7a53fab20a81999dbf0f1..fad028cfbf6ff40192d7f38cac7730a1a60f480e 100644
--- a/build/makepack-howto.txt
+++ b/build/makepack-howto.txt
@@ -33,11 +33,11 @@ complete release of Dolibarr, step by step.
 
 - Check all files are commited.
 - Update version/info in /ChangeLog and /filefunc.inc.php
-- Update version number with x.x.x-y in htdocs/filefunc.inc.php
-- Update version number with x.x.x-y in build/makepack-dolibarr.pl
-- Update version number with x.x.x-y in build/debian/changelog
-- Update version number with x.x.x-y in build/exe/doliwamp/doliwamp.iss
-- Update version number with x.x.x-y in build/rpm/*.spec
+- Update version number with x.x.x in htdocs/filefunc.inc.php
+- Update version number with x.x.x in build/makepack-dolibarr.pl
+- Update version number with x.x.x in build/debian/changelog
+- Update version number with x.x.x in build/exe/doliwamp/doliwamp.iss
+- Update version number with x.x.x in build/rpm/*.spec
 - Update PAD files.
 - Commit all changes.
 - Add a Tag (DOLIBARR_x_y)
diff --git a/build/pad/pad_dolibarr.xml b/build/pad/pad_dolibarr.xml
index e8c88ca8968281f7023e0c8e791a9174fb7c02f5..dd80e1ef53cce76f28aafc261e9d6a6691eeffbf 100644
--- a/build/pad/pad_dolibarr.xml
+++ b/build/pad/pad_dolibarr.xml
@@ -35,9 +35,9 @@
 	<Program_Info>
 		<Program_Name>Dolibarr</Program_Name>
 		<Program_Version>3.3.0</Program_Version>
-		<Program_Release_Month>08</Program_Release_Month>
-		<Program_Release_Day>10</Program_Release_Day>
-		<Program_Release_Year>2012</Program_Release_Year>
+		<Program_Release_Month>02</Program_Release_Month>
+		<Program_Release_Day>17</Program_Release_Day>
+		<Program_Release_Year>2013</Program_Release_Year>
 		<Program_Cost_Dollars />
 		<Program_Cost_Other_Code />
 		<Program_Cost_Other />
diff --git a/build/pad/pad_doliwamp.xml b/build/pad/pad_doliwamp.xml
index e20d9563559356b5d5ba92fdf9db1f60ca5844c6..148c4a4e79bd1f56ef85f0480810852163dc7e78 100644
--- a/build/pad/pad_doliwamp.xml
+++ b/build/pad/pad_doliwamp.xml
@@ -35,9 +35,9 @@
 	<Program_Info>
 		<Program_Name>DoliWamp</Program_Name>
 		<Program_Version>3.3.0</Program_Version>
-		<Program_Release_Month>08</Program_Release_Month>
-		<Program_Release_Day>10</Program_Release_Day>
-		<Program_Release_Year>2012</Program_Release_Year>
+		<Program_Release_Month>02</Program_Release_Month>
+		<Program_Release_Day>17</Program_Release_Day>
+		<Program_Release_Year>2013</Program_Release_Year>
 		<Program_Cost_Dollars />
 		<Program_Cost_Other_Code />
 		<Program_Cost_Other />
diff --git a/build/rpm/dolibarr_fedora.spec b/build/rpm/dolibarr_fedora.spec
index bade1a83e44dacc67b41adc97ba35e2145d7cc40..95b3fc0f1792acaa4acefaf51a58e7fff1b4e9da 100755
--- a/build/rpm/dolibarr_fedora.spec
+++ b/build/rpm/dolibarr_fedora.spec
@@ -333,5 +333,5 @@ fi
 
 
 %changelog
-* Mon Jan 14 2013 Laurent Destailleur 3.4.0-0.1.a
+* Sun Feb 17 2013 Laurent Destailleur 3.4.0-0.1.a
 - Initial version (#723326)
diff --git a/build/rpm/dolibarr_generic.spec b/build/rpm/dolibarr_generic.spec
index 11aa33f55df92dab4b80507bfd6a9decf06328f9..cee4ab9f6ec64d8028bcf319c1909d5dff699cf1 100755
--- a/build/rpm/dolibarr_generic.spec
+++ b/build/rpm/dolibarr_generic.spec
@@ -522,5 +522,5 @@ fi
 
 
 %changelog
-* Mon Jan 14 2013 Laurent Destailleur 3.4.0-0.1.a
+* Sun Feb 17 2013 Laurent Destailleur 3.4.0-0.1.a
 - Initial version (#723326)
diff --git a/build/rpm/dolibarr_mandriva.spec b/build/rpm/dolibarr_mandriva.spec
index cb9162cdbb3ed90e846f449c36a5e38de9d055e1..62758af82b48dff7cbe1e078881c66fb22b5a60f 100755
--- a/build/rpm/dolibarr_mandriva.spec
+++ b/build/rpm/dolibarr_mandriva.spec
@@ -322,5 +322,5 @@ fi
 
 
 %changelog
-* Mon Jan 14 2013 Laurent Destailleur 3.4.0-0.1.a
+* Sun Feb 17 2013 Laurent Destailleur 3.4.0-0.1.a
 - Initial version (#723326)
diff --git a/build/rpm/dolibarr_opensuse.spec b/build/rpm/dolibarr_opensuse.spec
index 46644f201bac4465e7850b0e2a5dc6182e199528..eb2bbc859f436cd306fe53f3764083e79728e899 100755
--- a/build/rpm/dolibarr_opensuse.spec
+++ b/build/rpm/dolibarr_opensuse.spec
@@ -333,5 +333,5 @@ fi
 
 
 %changelog
-* Mon Jan 14 2013 Laurent Destailleur 3.4.0-0.1.a
+* Sun Feb 17 2013 Laurent Destailleur 3.4.0-0.1.a
 - Initial version (#723326)
diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php
index 0eea1c6f5d7cf4acbd34ab660b7da458b5c72584..8e9c75e24239a7f70842a8e2a00e727ef128f09a 100644
--- a/htdocs/adherents/class/adherent.class.php
+++ b/htdocs/adherents/class/adherent.class.php
@@ -51,7 +51,7 @@ class Adherent extends CommonObject
     var $login;
     var $pass;
     var $societe;
-    var $adresse;
+    //var $adresse;
     var $address;
     var $cp;
     var $zip;
@@ -429,7 +429,7 @@ class Adherent extends CommonObject
         $sql.= ", login="   .($this->login?"'".$this->db->escape($this->login)."'":"null");
         $sql.= ", societe=" .($this->societe?"'".$this->db->escape($this->societe)."'":"null");
         $sql.= ", fk_soc="  .($this->fk_soc > 0?"'".$this->fk_soc."'":"null");
-        $sql.= ", adresse=" .($this->address?"'".$this->db->escape($this->address)."'":"null");
+        $sql.= ", address=" .($this->address?"'".$this->db->escape($this->address)."'":"null");
         $sql.= ", cp="      .($this->zip?"'".$this->db->escape($this->zip)."'":"null");
         $sql.= ", ville="   .($this->town?"'".$this->db->escape($this->town)."'":"null");
         $sql.= ", pays="          .($this->country_id>0?"'".$this->country_id."'":"null");
@@ -1019,7 +1019,7 @@ class Adherent extends CommonObject
     {
         global $langs;
 
-        $sql = "SELECT d.rowid, d.civilite, d.prenom as firstname, d.nom as lastname, d.societe, d.fk_soc, d.statut, d.public, d.adresse as address, d.cp as zip, d.ville as town, d.note,";
+        $sql = "SELECT d.rowid, d.civilite, d.prenom as firstname, d.nom as lastname, d.societe, d.fk_soc, d.statut, d.public, d.address, d.cp as zip, d.ville as town, d.note,";
         $sql.= " d.email, d.phone, d.phone_perso, d.phone_mobile, d.login, d.pass,";
         $sql.= " d.photo, d.fk_adherent_type, d.morphy, d.entity,";
         $sql.= " d.datec as datec,";
@@ -1065,7 +1065,7 @@ class Adherent extends CommonObject
                 $this->pass				= $obj->pass;
                 $this->societe			= $obj->societe;
                 $this->fk_soc			= $obj->fk_soc;
-                $this->adresse			= $obj->address;	// deprecated
+                //$this->adresse			= $obj->address;	// deprecated
                 $this->address			= $obj->address;
                 $this->cp				= $obj->zip;		// deprecated
                 $this->zip				= $obj->zip;
@@ -1824,7 +1824,7 @@ class Adherent extends CommonObject
         if ($this->login && ! empty($conf->global->LDAP_MEMBER_FIELD_LOGIN))      $info[$conf->global->LDAP_MEMBER_FIELD_LOGIN] = $this->login;
         if ($this->pass && ! empty($conf->global->LDAP_MEMBER_FIELD_PASSWORD))    $info[$conf->global->LDAP_MEMBER_FIELD_PASSWORD] = $this->pass;	// this->pass = mot de passe non crypte
         if ($this->poste && ! empty($conf->global->LDAP_MEMBER_FIELD_TITLE))      $info[$conf->global->LDAP_MEMBER_FIELD_TITLE] = $this->poste;
-        if ($this->adresse && ! empty($conf->global->LDAP_MEMBER_FIELD_ADDRESS))  $info[$conf->global->LDAP_MEMBER_FIELD_ADDRESS] = $this->adresse;
+        if ($this->address && ! empty($conf->global->LDAP_MEMBER_FIELD_ADDRESS))  $info[$conf->global->LDAP_MEMBER_FIELD_ADDRESS] = $this->address;
         if ($this->cp && ! empty($conf->global->LDAP_MEMBER_FIELD_ZIP))           $info[$conf->global->LDAP_MEMBER_FIELD_ZIP] = $this->cp;
         if ($this->ville && ! empty($conf->global->LDAP_MEMBER_FIELD_TOWN))       $info[$conf->global->LDAP_MEMBER_FIELD_TOWN] = $this->ville;
         if ($this->country_code && ! empty($conf->global->LDAP_MEMBER_FIELD_COUNTRY))     $info[$conf->global->LDAP_MEMBER_FIELD_COUNTRY] = $this->country_code;
diff --git a/htdocs/adherents/fiche.php b/htdocs/adherents/fiche.php
index f84990b94e514eeccaec2cee2b6111c311621794..d1c8beb6426e001e5a10690ab677948a489dc144 100644
--- a/htdocs/adherents/fiche.php
+++ b/htdocs/adherents/fiche.php
@@ -259,7 +259,7 @@ if ($action == 'update' && ! $_POST["cancel"] && $user->rights->adherent->creer)
 		$object->pass        = trim($_POST["pass"]);
 
 		$object->societe     = trim($_POST["societe"]);
-		$object->adresse     = trim($_POST["address"]);    // deprecated
+		//$object->adresse     = trim($_POST["address"]);    // deprecated
 		$object->address     = trim($_POST["address"]);
 		$object->cp          = trim($_POST["zipcode"]);    // deprecated
 		$object->zip         = trim($_POST["zipcode"]);
@@ -440,7 +440,7 @@ if ($action == 'add' && $user->rights->adherent->creer)
 	$object->firstname   = $prenom;
 	$object->lastname    = $nom;
 	$object->societe     = $societe;
-	$object->adresse     = $address; // deprecated
+	//$object->adresse     = $address; // deprecated
 	$object->address     = $address;
 	$object->cp          = $zip;     // deprecated
 	$object->zip         = $zip;
diff --git a/htdocs/adherents/liste.php b/htdocs/adherents/liste.php
index 2363a3529d2b121e4aad0f91c918c63032051a34..b19fcae8d854c4d6c458f337a249b75752177cff 100644
--- a/htdocs/adherents/liste.php
+++ b/htdocs/adherents/liste.php
@@ -104,7 +104,7 @@ if ($sall)
 	$sql.=" AND (";
 	if (is_numeric($sall)) $sql.= "d.rowid = ".$sall." OR ";
 	$sql.=" d.prenom LIKE '%".$sall."%' OR d.nom LIKE '%".$sall."%' OR d.societe LIKE '%".$sall."%'";
-	$sql.=" OR d.email LIKE '%".$sall."%' OR d.login LIKE '%".$sall."%' OR d.adresse LIKE '%".$sall."%'";
+	$sql.=" OR d.email LIKE '%".$sall."%' OR d.login LIKE '%".$sall."%' OR d.address LIKE '%".$sall."%'";
 	$sql.=" OR d.ville LIKE '%".$sall."%' OR d.note LIKE '%".$sall."%')";
 }
 if ($type > 0)
diff --git a/htdocs/adherents/type.php b/htdocs/adherents/type.php
index 369f925bc7e6308cb261353369b6712f458d9bc7..eaddb4866c47dfef702704f8163258a5309d628d 100644
--- a/htdocs/adherents/type.php
+++ b/htdocs/adherents/type.php
@@ -416,7 +416,7 @@ if ($rowid > 0)
 		if ($sall)
 		{
 		    $sql.= " AND (d.prenom LIKE '%".$sall."%' OR d.nom LIKE '%".$sall."%' OR d.societe LIKE '%".$sall."%'";
-		    $sql.= " OR d.email LIKE '%".$sall."%' OR d.login LIKE '%".$sall."%' OR d.adresse LIKE '%".$sall."%'";
+		    $sql.= " OR d.email LIKE '%".$sall."%' OR d.login LIKE '%".$sall."%' OR d.address LIKE '%".$sall."%'";
 		    $sql.= " OR d.ville LIKE '%".$sall."%' OR d.note LIKE '%".$sall."%')";
 		}
 		if ($status != '')
diff --git a/htdocs/admin/mailing.php b/htdocs/admin/mailing.php
index 54203dd7ae1a779e9502b11a0226b76a3c18795d..ea5c9b7bbb41f600cb1842ba488b372a42f6ba46 100644
--- a/htdocs/admin/mailing.php
+++ b/htdocs/admin/mailing.php
@@ -105,6 +105,24 @@ print_fiche_titre($langs->trans("MailingSetup"),$linkback,'setup');
 
 dol_htmloutput_mesg($mesg);
 
+
+if (! empty($conf->use_javascript_ajax))
+{
+	print "\n".'<script type="text/javascript">';
+	print '$(document).ready(function () {
+            $("#generate_token").click(function() {
+            	$.get( "'.DOL_URL_ROOT.'/core/ajax/security.php", {
+            		action: \'getrandompassword\',
+            		generic: true
+				},
+				function(token) {
+					$("#MAILING_EMAIL_UNSUBSCRIBE_KEY").val(token);
+				});
+            });
+    });';
+	print '</script>';
+}
+
 print '<br>';
 print '<form method="post" action="'.$_SERVER["PHP_SELF"].'">';
 print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
@@ -155,7 +173,9 @@ print '</td></tr>';
 $var=!$var;
 print '<tr '.$bc[$var].'><td>';
 print $langs->trans("ActivateCheckReadKey").'</td><td>';
-print '<input size="32" type="text" name="MAILING_EMAIL_UNSUBSCRIBE_KEY" '.$readonly.' value="'.$conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY.'">';
+print '<input size="32" type="text" name="MAILING_EMAIL_UNSUBSCRIBE_KEY" id="MAILING_EMAIL_UNSUBSCRIBE_KEY" '.$readonly.' value="'.$conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY.'">';
+if (! empty($conf->use_javascript_ajax))
+	print '&nbsp;'.img_picto($langs->trans('Generate'), 'refresh', 'id="generate_token" class="linkobject"');
 print '</td></tr>';
 
 print '</table>';
diff --git a/htdocs/comm/action/index.php b/htdocs/comm/action/index.php
index dc48f407c030ff56ace3f81156f742fe60fdfde1..cbf8ef0840ed7111315b5b16513abd1c7f6712b0 100644
--- a/htdocs/comm/action/index.php
+++ b/htdocs/comm/action/index.php
@@ -941,7 +941,7 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventa
     print '<div id="dayevent_'.sprintf("%04d",$year).sprintf("%02d",$month).sprintf("%02d",$day).'" class="dayevent">'."\n";
     $curtime = dol_mktime(0, 0, 0, $month, $day, $year);
     print '<table class="nobordernopadding" width="100%">';
-    print '<tr style="background: #EEEEEE"><td align="left" nowrap="nowrap">';
+    print '<tr><td align="left" nowrap="nowrap">';
     print '<a href="'.DOL_URL_ROOT.'/comm/action/index.php?';
     print 'action=show_day&day='.str_pad($day, 2, "0", STR_PAD_LEFT).'&month='.str_pad($month, 2, "0", STR_PAD_LEFT).'&year='.$year;
     print $newparam;
@@ -960,7 +960,7 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventa
         print '</a>';
     }
     print '</td></tr>';
-    print '<tr height="'.$minheight.'"><td valign="top" colspan="2" nowrap="nowrap">';
+    print '<tr height="'.$minheight.'"><td valign="top" colspan="2" nowrap="nowrap" style="padding-bottom: 2px;">';
 
     //$curtime = dol_mktime (0, 0, 0, $month, $day, $year);
     $i=0; $nummytasks=0; $numother=0; $numbirthday=0; $numical=0; $numicals=array();
@@ -1004,8 +1004,9 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventa
 
                     // Show rect of event
                     print '<div id="event_'.$ymd.'_'.$i.'" class="event '.$cssclass.'">';
-                    print '<table class="cal_event" style="background: #'.$color.'; -moz-border-radius:4px;" width="100%"><tr>';
-                    print '<td nowrap="nowrap">';
+                    print '<ul class="cal_event"><li class="cal_event">';
+                    print '<table class="cal_event" style="background: #'.$color.'; -moz-border-radius:4px; background: -webkit-gradient(linear, left top, left bottom, from(#'.$color.'), to(#'.dol_color_minus($color,2).')); " width="100%"><tr>';
+                    print '<td nowrap="nowrap" class="cal_event">';
                     if ($event->type_code == 'BIRTHDAY') // It's a birthday
                     {
                         print $event->getNomUrl(1,$maxnbofchar,'cal_event','birthday','contact');
@@ -1130,6 +1131,7 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventa
                     if ($event->type_code != 'BIRTHDAY' && $event->type_code != 'ICALEVENT') print $event->getLibStatut(3,1);
                     else print '&nbsp;';
                     print '</td></tr></table>';
+                    print '</li></ul>';
                     print '</div>';
                     $i++;
                 }
@@ -1174,4 +1176,13 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventa
     print '</div>'."\n";
 }
 
+function dol_color_minus($color, $minus)
+{
+	$newcolor=$color;
+	$newcolor[0]=((hexdec($newcolor[0])-$minus)<0)?0:dechex((hexdec($newcolor[0])-$minus));
+	$newcolor[2]=((hexdec($newcolor[2])-$minus)<0)?0:dechex((hexdec($newcolor[2])-$minus));
+	$newcolor[4]=((hexdec($newcolor[4])-$minus)<0)?0:dechex((hexdec($newcolor[4])-$minus));
+	return $newcolor;
+}
+
 ?>
diff --git a/htdocs/comm/action/listactions.php b/htdocs/comm/action/listactions.php
index e5165d9f6466611f295d007045ba6b326550c438..b25a955abd03dd9a70ad4f9ce435f62b0ee55569 100644
--- a/htdocs/comm/action/listactions.php
+++ b/htdocs/comm/action/listactions.php
@@ -143,6 +143,7 @@ if ($socid) $param.="&socid=".$socid;
 if ($showbirthday) $param.="&showbirthday=1";
 if ($pid) $param.="&projectid=".$pid;
 if ($type) $param.="&type=".$type;
+if ($actioncode) $param.="&actioncode=".$actioncode;
 
 $sql = "SELECT s.nom as societe, s.rowid as socid, s.client,";
 $sql.= " a.id, a.datep as dp, a.datep2 as dp2,";
diff --git a/htdocs/comm/fiche.php b/htdocs/comm/fiche.php
index 397fb9da8353982e6c1f3f2e2b12b083b1bb1f8c..fcecbf0a552d50747e41f6c68e42c4c184323edd 100644
--- a/htdocs/comm/fiche.php
+++ b/htdocs/comm/fiche.php
@@ -386,29 +386,32 @@ if ($id > 0)
 	}
 	
 	// Level of prospect
-	print '<tr><td nowrap>';
-	print '<table width="100%" class="nobordernopadding"><tr><td nowrap>';
-	print $langs->trans('ProspectLevelShort');
-	print '<td>';
-	if ($action != 'editlevel' && $user->rights->societe->creer) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editlevel&amp;socid='.$object->id.'">'.img_edit($langs->trans('Modify'),1).'</a></td>';
-	print '</tr></table>';
-	print '</td><td colspan="3">';
-	if ($action == 'editlevel')
-		$formcompany->form_prospect_level($_SERVER['PHP_SELF'].'?socid='.$object->id,$object->fk_prospectlevel,'prospect_level_id',1);
-	else
-		print $object->getLibProspLevel();
-	print "</td>";
-	print '</tr>';
-	
-	// Status
-	print '<tr><td>'.$langs->trans("StatusProsp").'</td><td colspan="2">'.$object->getLibProspCommStatut(4).'</td>';
-	print '<td>';
-	if ($object->stcomm_id != -1) print '<a href="fiche.php?socid='.$object->id.'&amp;stcomm=-1&amp;action=cstc">'.img_action(0,-1).'</a>';
-	if ($object->stcomm_id !=  0) print '<a href="fiche.php?socid='.$object->id.'&amp;stcomm=0&amp;action=cstc">'.img_action(0,0).'</a>';
-	if ($object->stcomm_id !=  1) print '<a href="fiche.php?socid='.$object->id.'&amp;stcomm=1&amp;action=cstc">'.img_action(0,1).'</a>';
-	if ($object->stcomm_id !=  2) print '<a href="fiche.php?socid='.$object->id.'&amp;stcomm=2&amp;action=cstc">'.img_action(0,2).'</a>';
-	if ($object->stcomm_id !=  3) print '<a href="fiche.php?socid='.$object->id.'&amp;stcomm=3&amp;action=cstc">'.img_action(0,3).'</a>';
-	print '</td></tr>';
+	if ($object->client == 2 || $object->client == 3)
+	{
+		print '<tr><td nowrap>';
+		print '<table width="100%" class="nobordernopadding"><tr><td nowrap>';
+		print $langs->trans('ProspectLevel');
+		print '<td>';
+		if ($action != 'editlevel' && $user->rights->societe->creer) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editlevel&amp;socid='.$object->id.'">'.img_edit($langs->trans('Modify'),1).'</a></td>';
+		print '</tr></table>';
+		print '</td><td colspan="3">';
+		if ($action == 'editlevel')
+			$formcompany->form_prospect_level($_SERVER['PHP_SELF'].'?socid='.$object->id,$object->fk_prospectlevel,'prospect_level_id',1);
+		else
+			print $object->getLibProspLevel();
+		print "</td>";
+		print '</tr>';
+		
+		// Status
+		print '<tr><td>'.$langs->trans("StatusProsp").'</td><td colspan="2">'.$object->getLibProspCommStatut(4).'</td>';
+		print '<td>';
+		if ($object->stcomm_id != -1) print '<a href="fiche.php?socid='.$object->id.'&amp;stcomm=-1&amp;action=cstc">'.img_action(0,-1).'</a>';
+		if ($object->stcomm_id !=  0) print '<a href="fiche.php?socid='.$object->id.'&amp;stcomm=0&amp;action=cstc">'.img_action(0,0).'</a>';
+		if ($object->stcomm_id !=  1) print '<a href="fiche.php?socid='.$object->id.'&amp;stcomm=1&amp;action=cstc">'.img_action(0,1).'</a>';
+		if ($object->stcomm_id !=  2) print '<a href="fiche.php?socid='.$object->id.'&amp;stcomm=2&amp;action=cstc">'.img_action(0,2).'</a>';
+		if ($object->stcomm_id !=  3) print '<a href="fiche.php?socid='.$object->id.'&amp;stcomm=3&amp;action=cstc">'.img_action(0,3).'</a>';
+		print '</td></tr>';
+	}
 
 	// Sales representative
 	include DOL_DOCUMENT_ROOT.'/societe/tpl/linesalesrepresentative.tpl.php';
diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php
index cc34443a62252af313233087b211773e371bbb36..90c37aaaa6f590c5ecdcee6a17ce3e7b223f6db0 100644
--- a/htdocs/comm/propal.php
+++ b/htdocs/comm/propal.php
@@ -79,12 +79,12 @@ $result = restrictedArea($user, 'propal', $id);
 
 $object = new Propal($db);
 
-// Load object
 // Load object
 if ($id > 0 || ! empty($ref))
 {
 	$ret=$object->fetch($id, $ref);
-	$ret=$object->fetch_thirdparty();
+	if ($ret > 0) $ret=$object->fetch_thirdparty();
+	if ($ret < 0) dol_print_error('',$object->error);
 }
 
 // Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array
diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php
index 90ba3f93690408e4bcfb3576c67db0130de4906a..230e696bf10712ac605b50d5cac6e34a1c09b88b 100644
--- a/htdocs/comm/propal/class/propal.class.php
+++ b/htdocs/comm/propal/class/propal.class.php
@@ -90,7 +90,7 @@ class Propal extends CommonObject
     var $fk_delivery_address;		// deprecated (for compatibility)
     var $fk_address;
     var $address_type;
-    var $adresse;
+    var $address;
     var $availability_id;
     var $availability_code;
     var $demand_reason_id;
@@ -789,7 +789,7 @@ class Propal extends CommonObject
                 if (! $error && $this->fk_delivery_address)
                 {
                     $sql = "UPDATE ".MAIN_DB_PREFIX."propal";
-                    $sql.= " SET fk_adresse_livraison = ".$this->fk_delivery_address;
+                    $sql.= " SET fk_delivery_address = ".$this->fk_delivery_address;
                     $sql.= " WHERE ref = '".$this->ref."'";
                     $sql.= " AND entity = ".$conf->entity;
 
@@ -985,7 +985,7 @@ class Propal extends CommonObject
         $sql.= ", p.note as note_private, p.note_public";
         $sql.= ", p.fk_projet, p.fk_statut";
         $sql.= ", p.fk_user_author, p.fk_user_valid, p.fk_user_cloture";
-        $sql.= ", p.fk_adresse_livraison";
+        $sql.= ", p.fk_delivery_address";
         $sql.= ", p.fk_availability";
         $sql.= ", p.fk_input_reason";
         $sql.= ", p.fk_cond_reglement";
@@ -1049,8 +1049,8 @@ class Propal extends CommonObject
                 $this->demand_reason_id     = $obj->fk_input_reason;
                 $this->demand_reason_code   = $obj->demand_reason_code;
                 $this->demand_reason        = $obj->demand_reason;
-                $this->fk_delivery_address  = $obj->fk_adresse_livraison;	// TODO obsolete
-                $this->fk_address  			= $obj->fk_adresse_livraison;
+                //$this->fk_delivery_address  = $obj->fk_adresse_livraison;	// TODO obsolete
+                $this->fk_address  			= $obj->fk_delivery_address;
 
                 $this->mode_reglement_id    = $obj->fk_mode_reglement;
                 $this->mode_reglement_code  = $obj->mode_reglement_code;
diff --git a/htdocs/comm/prospect/list.php b/htdocs/comm/prospect/list.php
index 69aaab9e68e1284e2f6948f334caa92f11937c70..302c47e2d1ef12dbc828020861de202aec30d1ac 100755
--- a/htdocs/comm/prospect/list.php
+++ b/htdocs/comm/prospect/list.php
@@ -389,6 +389,7 @@ if ($resql)
 		$prospectstatic->id=$obj->rowid;
 		$prospectstatic->nom=$obj->nom;
         $prospectstatic->status=$obj->status;
+        $prospectstatic->fk_prospectlevel=$obj->fk_prospectlevel;
 		print $prospectstatic->getNomUrl(1,'prospect');
         print '</td>';
         print "<td>".$obj->zip."&nbsp;</td>";
@@ -398,7 +399,7 @@ if ($resql)
 		print '<td align="center">'.dol_print_date($db->jdate($obj->datec)).'</td>';
 		// Level
 		print '<td align="center">';
-		print $prospectstatic->LibLevel($obj->fk_prospectlevel);
+		print $prospectstatic->getLibProspLevel();
 		print "</td>";
 		// Statut
 		print '<td align="center" nowrap="nowrap">';
@@ -419,7 +420,7 @@ if ($resql)
 		print '</td>';
 
         print '<td align="right">';
-		print $prospectstatic->getLibStatut(3);
+		print $prospectstatic->LibStatut($prospectstatic->status,3);
         print '</td>';
 
         $parameters=array('obj' => $obj);
diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php
index 335757c59d65fcc6aa4c8917f7e5fa4aa8922c2f..15a428410023c32cf1bd0eed412c1ff166c6360c 100644
--- a/htdocs/commande/class/commande.class.php
+++ b/htdocs/commande/class/commande.class.php
@@ -66,7 +66,7 @@ class Commande extends CommonOrder
     var $demand_reason_id;
     var $demand_reason_code;
     var $fk_delivery_address;
-    var $adresse;
+    var $address;
     var $date;				// Date commande
     var $date_commande;		// Date commande (deprecated)
     var $date_livraison;	// Date livraison souhaitee
@@ -631,7 +631,7 @@ class Commande extends CommonOrder
 
         $sql = "INSERT INTO ".MAIN_DB_PREFIX."commande (";
         $sql.= " ref, fk_soc, date_creation, fk_user_author, fk_projet, date_commande, source, note, note_public, ref_client, ref_int";
-        $sql.= ", model_pdf, fk_cond_reglement, fk_mode_reglement, fk_availability, fk_input_reason, date_livraison, fk_adresse_livraison";
+        $sql.= ", model_pdf, fk_cond_reglement, fk_mode_reglement, fk_availability, fk_input_reason, date_livraison, fk_delivery_address";
         $sql.= ", remise_absolue, remise_percent";
         $sql.= ", entity";
         $sql.= ")";
@@ -1240,7 +1240,7 @@ class Commande extends CommonOrder
         $sql.= ', c.date_commande';
         $sql.= ', c.date_livraison';
         $sql.= ', c.fk_projet, c.remise_percent, c.remise, c.remise_absolue, c.source, c.facture as billed';
-        $sql.= ', c.note as note_private, c.note_public, c.ref_client, c.ref_ext, c.ref_int, c.model_pdf, c.fk_adresse_livraison, c.extraparams';
+        $sql.= ', c.note as note_private, c.note_public, c.ref_client, c.ref_ext, c.ref_int, c.model_pdf, c.fk_delivery_address, c.extraparams';
         $sql.= ', p.code as mode_reglement_code, p.libelle as mode_reglement_libelle';
         $sql.= ', cr.code as cond_reglement_code, cr.libelle as cond_reglement_libelle, cr.libelle_facture as cond_reglement_libelle_doc';
         $sql.= ', ca.code as availability_code';
@@ -1301,7 +1301,7 @@ class Commande extends CommonOrder
                 $this->demand_reason_id		= $obj->fk_input_reason;
                 $this->demand_reason_code	= $obj->demand_reason_code;
                 $this->date_livraison		= $this->db->jdate($obj->date_livraison);
-                $this->fk_delivery_address	= $obj->fk_adresse_livraison;
+                $this->fk_delivery_address	= $obj->fk_delivery_address;
 
                 $this->extraparams			= (array) json_decode($obj->extraparams, true);
 
diff --git a/htdocs/compta/dons/class/don.class.php b/htdocs/compta/dons/class/don.class.php
index e4ee40df7c32a593fa84b40b7e7e616b2f0c2122..4942c8f3f7ecd72fdb2007e162a738b05f97c108 100644
--- a/htdocs/compta/dons/class/don.class.php
+++ b/htdocs/compta/dons/class/don.class.php
@@ -42,7 +42,7 @@ class Don extends CommonObject
     var $prenom;
     var $nom;
     var $societe;
-    var $adresse;
+    var $address;
     var $cp;
     var $ville;
     var $pays;
@@ -188,7 +188,7 @@ class Don extends CommonObject
         $this->amount = 100;
         $this->public = 1;
         $this->societe = 'The Company';
-        $this->adresse = 'Twist road';
+        $this->address = 'Twist road';
         $this->cp = '99999';
         $this->ville = 'Town';
         $this->note_public='SPECIMEN';
@@ -217,7 +217,7 @@ class Don extends CommonObject
             }
         }
 
-        if (dol_strlen(trim($this->adresse)) == 0)
+        if (dol_strlen(trim($this->address)) == 0)
         {
             $error_string[$err] = "L'adresse saisie est invalide";
             $err++;
@@ -297,7 +297,7 @@ class Don extends CommonObject
         global $conf;
 
         // Clean parameters
-        $this->address=($this->address>0?$this->address:$this->adresse);
+        $this->address=($this->address>0?$this->address:$this->address);
         $this->zip=($this->zip>0?$this->zip:$this->cp);
         $this->town=($this->town>0?$this->town:$this->ville);
         $this->country_id=($this->country_id>0?$this->country_id:$this->fk_pays);
@@ -313,7 +313,7 @@ class Don extends CommonObject
         $sql.= ", prenom";
         $sql.= ", nom";
         $sql.= ", societe";
-        $sql.= ", adresse";
+        $sql.= ", address";
         $sql.= ", cp";
         $sql.= ", ville";
         $sql.= ", pays";
@@ -334,7 +334,7 @@ class Don extends CommonObject
         $sql.= ", '".$this->db->escape($this->prenom)."'";
         $sql.= ", '".$this->db->escape($this->nom)."'";
         $sql.= ", '".$this->db->escape($this->societe)."'";
-        $sql.= ", '".$this->db->escape($this->adresse)."'";
+        $sql.= ", '".$this->db->escape($this->address)."'";
         $sql.= ", '".$this->db->escape($this->zip)."'";
         $sql.= ", '".$this->db->escape($this->town)."'";
         $sql.= ", '".$this->db->escape($this->country)."'"; // TODO use country_id
@@ -382,7 +382,7 @@ class Don extends CommonObject
     function update($user)
     {
         // Clean parameters
-        $this->address=($this->address>0?$this->address:$this->adresse);
+        $this->address=($this->address>0?$this->address:$this->address);
         $this->zip=($this->zip>0?$this->zip:$this->cp);
         $this->town=($this->town>0?$this->town:$this->ville);
         $this->country_id=($this->country_id>0?$this->country_id:$this->fk_pays);
@@ -394,7 +394,7 @@ class Don extends CommonObject
         $sql .= ",prenom = '".$this->db->escape($this->prenom)."'";
         $sql .= ",nom='".$this->db->escape($this->nom)."'";
         $sql .= ",societe='".$this->db->escape($this->societe)."'";
-        $sql .= ",adresse='".$this->db->escape($this->address)."'";
+        $sql .= ",address='".$this->db->escape($this->address)."'";
         $sql .= ",cp='".$this->db->escape($this->zip)."'";
         $sql .= ",ville='".$this->db->escape($this->town)."'";
         $sql .= ",pays='".$this->db->escape($this->country)."'"; // TODO use country_id
@@ -463,7 +463,7 @@ class Don extends CommonObject
         global $conf;
 
         $sql = "SELECT d.rowid, d.datec, d.tms as datem, d.datedon,";
-        $sql.= " d.prenom, d.nom, d.societe, d.amount, d.fk_statut, d.adresse, d.cp, d.ville, d.pays, d.public, d.amount, d.fk_paiement, d.note, cp.libelle, d.email, d.phone, d.phone_mobile, d.fk_don_projet,";
+        $sql.= " d.prenom, d.nom, d.societe, d.amount, d.fk_statut, d.address, d.cp, d.ville, d.pays, d.public, d.amount, d.fk_paiement, d.note, cp.libelle, d.email, d.phone, d.phone_mobile, d.fk_don_projet,";
         $sql.= " p.title as project_label";
         $sql.= " FROM ".MAIN_DB_PREFIX."don as d";
         $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."projet as p ON p.rowid = d.fk_don_projet";
@@ -487,7 +487,7 @@ class Don extends CommonObject
                 $this->nom            = $obj->nom;
                 $this->societe        = $obj->societe;
                 $this->statut         = $obj->fk_statut;
-                $this->adresse        = $obj->adresse;
+                $this->address        = $obj->address;
                 $this->cp             = $obj->cp;
                 $this->ville          = $obj->ville;
                 $this->zip            = $obj->cp;
diff --git a/htdocs/compta/dons/fiche.php b/htdocs/compta/dons/fiche.php
index 6ba13a1963167b51ac713d764c74da5aba3f5f3a..5ea563fbf146bd73ec6c0d841e8cca57b9645024 100644
--- a/htdocs/compta/dons/fiche.php
+++ b/htdocs/compta/dons/fiche.php
@@ -88,7 +88,7 @@ if ($action == 'update')
 		$don->prenom      = $_POST["prenom"];
 		$don->nom         = $_POST["nom"];
 		$don->societe     = $_POST["societe"];
-		$don->adresse     = $_POST["adresse"];
+		$don->address     = $_POST["address"];
 		$don->amount      = price2num($_POST["amount"]);
 		$don->cp          = $_POST["zipcode"];
 		$don->ville       = $_POST["town"];
@@ -140,7 +140,7 @@ if ($action == 'add')
 		$don->prenom      = $_POST["prenom"];
 		$don->nom         = $_POST["nom"];
 		$don->societe     = $_POST["societe"];
-		$don->adresse     = $_POST["adresse"];
+		$don->address     = $_POST["address"];
 		$don->amount      = price2num($_POST["amount"]);
 		$don->cp          = $_POST["zipcode"];
 		$don->ville       = $_POST["town"];
@@ -300,7 +300,7 @@ if ($action == 'create')
 	print "<tr>".'<td>'.$langs->trans("Firstname").'</td><td><input type="text" name="prenom" value="'.$_POST["prenom"].'" size="40"></td></tr>';
 	print "<tr>".'<td>'.$langs->trans("Lastname").'</td><td><input type="text" name="nom" value="'.$_POST["nom"].'" size="40"></td></tr>';
 	print "<tr>".'<td>'.$langs->trans("Address").'</td><td>';
-	print '<textarea name="adresse" wrap="soft" cols="40" rows="3">'.$_POST["adresse"].'</textarea></td></tr>';
+	print '<textarea name="address" wrap="soft" cols="40" rows="3">'.$_POST["address"].'</textarea></td></tr>';
 
     // Zip / Town
     print '<tr><td>'.$langs->trans("Zip").' / '.$langs->trans("Town").'</td><td>';
@@ -390,7 +390,7 @@ if (! empty($id) && $action == 'edit')
 	print "<tr>".'<td>'.$langs->trans("Firstname").'</td><td><input type="text" name="prenom" size="40" value="'.$don->prenom.'"></td></tr>';
 	print "<tr>".'<td>'.$langs->trans("Lastname").'</td><td><input type="text" name="nom" size="40" value="'.$don->nom.'"></td></tr>';
 	print "<tr>".'<td>'.$langs->trans("Address").'</td><td>';
-	print '<textarea name="adresse" wrap="soft" cols="40" rows="'.ROWS_3.'">'.$don->adresse.'</textarea></td></tr>';
+	print '<textarea name="address" wrap="soft" cols="40" rows="'.ROWS_3.'">'.$don->address.'</textarea></td></tr>';
 
     // Zip / Town
     print '<tr><td>'.$langs->trans("Zip").' / '.$langs->trans("Town").'</td><td>';
@@ -485,7 +485,7 @@ if (! empty($id) && $action != 'edit')
 	print "<tr>".'<td>'.$langs->trans("Company").'</td><td>'.$don->societe.'</td></tr>';
 	print "<tr>".'<td>'.$langs->trans("Firstname").'</td><td>'.$don->prenom.'</td></tr>';
 	print "<tr>".'<td>'.$langs->trans("Lastname").'</td><td>'.$don->nom.'</td></tr>';
-	print "<tr>".'<td>'.$langs->trans("Address").'</td><td>'.dol_nl2br($don->adresse).'</td></tr>';
+	print "<tr>".'<td>'.$langs->trans("Address").'</td><td>'.dol_nl2br($don->address).'</td></tr>';
 
 	// Zip / Town
 	print "<tr>".'<td>'.$langs->trans("Zip").' / '.$langs->trans("Town").'</td><td>'.$don->cp.($don->cp && $don->ville?' / ':'').$don->ville.'</td></tr>';
diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php
index bccac8d8354222aed45928c156cedc1959434383..212429be67e2bb00992540a098a08a5624b30d5a 100644
--- a/htdocs/compta/facture.php
+++ b/htdocs/compta/facture.php
@@ -1915,14 +1915,6 @@ if ($action == 'create')
     print $desc;
     print '</td></tr>'."\n";
 
-    // Deposit
-    print '<tr height="18"><td width="16px" valign="middle">';
-    print '<input type="radio" name="type" value="3"'.(GETPOST('type')==3?' checked="checked"':'').'>';
-    print '</td><td valign="middle">';
-    $desc=$form->textwithpicto($langs->trans("InvoiceDeposit"),$langs->transnoentities("InvoiceDepositDesc"),1);
-    print $desc;
-    print '</td></tr>'."\n";
-
     // Proforma
     if (! empty($conf->global->FACTURE_USE_PROFORMAT))
     {
@@ -1934,7 +1926,18 @@ if ($action == 'create')
         print '</td></tr>'."\n";
     }
 
-	if ($socid>0)
+    if (empty($origin))
+    {
+	    // Deposit
+	    print '<tr height="18"><td width="16px" valign="middle">';
+	    print '<input type="radio" name="type" value="3"'.(GETPOST('type')==3?' checked="checked"':'').'>';
+	    print '</td><td valign="middle">';
+	    $desc=$form->textwithpicto($langs->trans("InvoiceDeposit"),$langs->transnoentities("InvoiceDepositDesc"),1);
+	    print $desc;
+	    print '</td></tr>'."\n";
+    }
+
+    if ($socid > 0)
 	{
 	    // Replacement
 	    print '<tr height="18"><td valign="middle">';
@@ -1959,8 +1962,11 @@ if ($action == 'create')
 	    $desc=$form->textwithpicto($text,$langs->transnoentities("InvoiceReplacementDesc"),1);
 	    print $desc;
 	    print '</td></tr>'."\n";
+	}
 
-	    // Credit note
+    if (empty($origin) && $socid > 0)
+    {
+    	// Credit note
 	    print '<tr height="18"><td valign="middle">';
 	    print '<input type="radio" name="type" value="2"'.(GETPOST('type')==2?' checked=true':'');
 	    if (! $optionsav) print ' disabled="disabled"';
@@ -1984,11 +1990,12 @@ if ($action == 'create')
 	    $desc=$form->textwithpicto($text,$langs->transnoentities("InvoiceAvoirDesc"),1);
 	    print $desc;
 	    print '</td></tr>'."\n";
-	}
+    }
+
 	print '</table>';
 	print '</td></tr>';
 
-	if($socid>0)
+	if ($socid > 0)
 	{
 		// Discounts for third party
 		print '<tr><td>'.$langs->trans('Discounts').'</td><td colspan="2">';
diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php
index 14c8630e1e51b923da1743efdc2d3393858255db..411de5d5fcd5433fce7a08a63058cbcfb69e89ca 100644
--- a/htdocs/contact/class/contact.class.php
+++ b/htdocs/contact/class/contact.class.php
@@ -520,7 +520,7 @@ class Contact extends CommonObject
 				$this->prenom			= $obj->firstname;		// TODO deprecated
 
 				$this->address			= $obj->address;
-				$this->adresse			= $obj->address; 		// TODO deprecated
+				//$this->adresse			= $obj->address; 		// TODO deprecated
 				$this->cp				= $obj->zip;			// TODO deprecated
 				$this->zip				= $obj->zip;
 				$this->ville			= $obj->town;			// TODO deprecated
diff --git a/htdocs/contact/fiche.php b/htdocs/contact/fiche.php
index 9097584bfb521762eba6518b687f2fe48b1eb999..2926ec75b75df64b5d77b0582a5944e9e51c4c55 100644
--- a/htdocs/contact/fiche.php
+++ b/htdocs/contact/fiche.php
@@ -383,7 +383,7 @@ else
 							});
 
 							$("#copyaddressfromsoc").click(function() {
-								$(\'textarea[name="address"]\').text("'.dol_escape_js($objsoc->address).'");
+								$(\'textarea[name="address"]\').val("'.dol_escape_js($objsoc->address).'");
 								$(\'input[name="zipcode"]\').val("'.dol_escape_js($objsoc->zip).'");
 								$(\'input[name="town"]\').val("'.dol_escape_js($objsoc->town).'");
 								$(\'select[name="country_id"]\').val("'.dol_escape_js($objsoc->country_id).'");
diff --git a/htdocs/core/admin_extrafields.inc.php b/htdocs/core/admin_extrafields.inc.php
index 46ed7d0c051a7f7c312e0a350eb9eb770e141cca..975fa94d30830c439a908ada72e3246507a41897 100644
--- a/htdocs/core/admin_extrafields.inc.php
+++ b/htdocs/core/admin_extrafields.inc.php
@@ -28,6 +28,7 @@ $extrasize=GETPOST('size');
 if (GETPOST('type')=='double' && strpos($extrasize,',')===false) $extrasize='24,8';
 if (GETPOST('type')=='date')     $extrasize='';
 if (GETPOST('type')=='datetime') $extrasize='';
+if (GETPOST('type')=='select')    $extrasize='';
 
 
 // Add attribute
@@ -58,13 +59,29 @@ if ($action == 'add')
             $mesg=$langs->trans("ErrorSizeTooLongForIntType",$maxsizeint);
             $action = 'create';
         }
+        if (GETPOST('type')=='select' && !GETPOST('param'))
+        {
+        	$error++;
+        	$langs->load("errors");
+        	$mesg=$langs->trans("ErrorNoValueForSelectType");
+        	$action = 'create';
+        }
 
 	    if (! $error)
 	    {
     		// Type et taille non encore pris en compte => varchar(255)
     		if (isset($_POST["attrname"]) && preg_match("/^\w[a-zA-Z0-9-_]*$/",$_POST['attrname']))
     		{
-                $result=$extrafields->addExtraField($_POST['attrname'],$_POST['label'],$_POST['type'],$_POST['pos'],$extrasize,$elementtype,(GETPOST('unique')?1:0),(GETPOST('required')?1:0));
+    			// Construct array for parameter (value of select list)
+    			$parameters = GETPOST('param');
+    			$parameters_array = explode("\r\n",$parameters);
+    			foreach($parameters_array as $param_ligne)
+    			{
+    				list($key,$value) = explode(',',$param_ligne);
+    				$params['options'][$key] = $value;
+    			}  			 
+    			
+                $result=$extrafields->addExtraField($_POST['attrname'],$_POST['label'],$_POST['type'],$_POST['pos'],$extrasize,$elementtype,(GETPOST('unique')?1:0),(GETPOST('required')?1:0),$default_value,$params);
     			if ($result > 0)
     			{
     				header("Location: ".$_SERVER["PHP_SELF"]);
@@ -119,7 +136,16 @@ if ($action == 'update')
 	    {
             if (isset($_POST["attrname"]) && preg_match("/^\w[a-zA-Z0-9-_]*$/",$_POST['attrname']))
     		{
-    			$result=$extrafields->update($_POST['attrname'],$_POST['label'],$_POST['type'],$extrasize,$elementtype,(GETPOST('unique')?1:0),(GETPOST('required')?1:0));
+    			$pos = GETPOST('pos','int');
+    			// Construct array for parameter (value of select list)
+    			$parameters = GETPOST('param');
+    			$parameters_array = explode("\r\n",$parameters);
+    			foreach($parameters_array as $param_ligne)
+    			{
+    				list($key,$value) = explode(',',$param_ligne);
+    				$params['options'][$key] = $value;
+    			}
+    			$result=$extrafields->update($_POST['attrname'],$_POST['label'],$_POST['type'],$extrasize,$elementtype,(GETPOST('unique')?1:0),(GETPOST('required')?1:0),$pos,$params);
     			if ($result > 0)
     			{
     				header("Location: ".$_SERVER["PHP_SELF"]);
diff --git a/htdocs/core/class/CMailFile.class.php b/htdocs/core/class/CMailFile.class.php
index 9165b08267918c7455f2b8881a7308695411c38d..a9337c87b8be474e27fccf38593a1109dfaeb669 100644
--- a/htdocs/core/class/CMailFile.class.php
+++ b/htdocs/core/class/CMailFile.class.php
@@ -1020,7 +1020,7 @@ class CMailFile
 	/**
 	 * Return an address for SMTP protocol
 	 *
-	 * @param	string		$adresses		Example: 'John Doe <john@doe.com>' or 'john@doe.com'
+	 * @param	string		$address		Example: 'John Doe <john@doe.com>' or 'john@doe.com'
 	 * @param	int			$format			0=auto, 1=emails with <>, 2=emails without <>, 3=auto + label between "
 	 * @param	int			$encode			1=Encode name to RFC2822
 	 * @return	string						If format 0: '<john@doe.com>' or 'John Doe <john@doe.com>' or '=?UTF-8?B?Sm9obiBEb2U=?= <john@doe.com>'
@@ -1028,13 +1028,13 @@ class CMailFile
 	 *										If format 2: 'john@doe.com'
 	 *										If format 3: '<john@doe.com>' or '"John Doe" <john@doe.com>' or '"=?UTF-8?B?Sm9obiBEb2U=?=" <john@doe.com>'
 	 */
-	function getValidAddress($adresses,$format,$encode='')
+	function getValidAddress($address,$format,$encode='')
 	{
 		global $conf;
 
 		$ret='';
 
-		$arrayaddress=explode(',',$adresses);
+		$arrayaddress=explode(',',$address);
 
 		// Boucle sur chaque composant de l'adresse
 		foreach($arrayaddress as $val)
diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php
index 5c9b8d9312258a9cf048e4d8d2b883fab5d08c73..8184e186999de785eb26ed84ea258c88ed8da17a 100644
--- a/htdocs/core/class/commonobject.class.php
+++ b/htdocs/core/class/commonobject.class.php
@@ -964,7 +964,7 @@ abstract class CommonObject
      */
     function setDeliveryAddress($id)
     {
-    	$fieldname = 'fk_adresse_livraison';
+    	$fieldname = 'fk_delivery_address';
     	if ($this->element == 'delivery' || $this->element == 'shipping') $fieldname = 'fk_address';
 
     	$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element." SET ".$fieldname." = ".$id;
@@ -1023,7 +1023,7 @@ abstract class CommonObject
 
     /**
      *  Save a new position (field rang) for details lines.
-     *  You can choose to ser position for lines with already a position or lines wihtout any position defined.
+     *  You can choose to set position for lines with already a position or lines without any position defined.
      *  Call this function only for table that contains a field fk_parent_line.
      *
      * 	@param		boolean		$renum			true to renum all already ordered lines, false to renum only not already ordered lines.
@@ -1064,7 +1064,7 @@ abstract class CommonObject
 			// counter that parents.
 			$rows=array();
 
-			// We frist search all lines that are parent lines (for multilevel details lines)
+			// We first search all lines that are parent lines (for multilevel details lines)
 			$sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.$this->table_element_line;
 			$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
 			$sql.= ' AND fk_parent_line IS NULL';
@@ -1080,10 +1080,10 @@ abstract class CommonObject
 				{
 					$row = $this->db->fetch_row($resql);
 					$rows[] = $row[0];	// Add parent line into array rows
-					$childrens = $this->getChildrensOfLine($row[0]);
-					if (! empty($childrens))
+					$childrens = $this->getChildrenOfLine($row[0]);
+					if (! empty($children))
 					{
-						foreach($childrens as $child)
+						foreach($children as $child)
 						{
 							array_push($rows, $child);
 						}
@@ -1108,12 +1108,12 @@ abstract class CommonObject
 	}
 
 	/**
-	 * 	Get childrens of line
+	 * 	Get children of line
 	 *
 	 * 	@param	int		$id		Id of parent line
-	 * 	@return	array			Array with list of child lines id
+	 * 	@return	array			Array with list of children lines id
 	 */
-	function getChildrensOfLine($id)
+	function getChildrenOfLine($id)
 	{
 		$rows=array();
 
@@ -1122,7 +1122,7 @@ abstract class CommonObject
 		$sql.= ' AND fk_parent_line = '.$id;
 		$sql.= ' ORDER BY rang ASC';
 
-		dol_syslog(get_class($this)."::getChildrenOfLines search children lines for line ".$id." sql=".$sql, LOG_DEBUG);
+		dol_syslog(get_class($this)."::getChildrenOfLine search children lines for line ".$id." sql=".$sql, LOG_DEBUG);
 		$resql = $this->db->query($sql);
 		if ($resql)
 		{
diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php
index 799200ca5bf94571e68f2bb394ccc26ccc3ae9f0..4f583a667f9a6c1ff9f9b08fc12e6bd6ae33ef0a 100755
--- a/htdocs/core/class/extrafields.class.php
+++ b/htdocs/core/class/extrafields.class.php
@@ -38,6 +38,8 @@ class ExtraFields
 	var $attribute_label;
 	// Tableau contenant le nom des champs en clef et la taille de ces champs en value
 	var $attribute_size;
+	// Tableau contenant le nom des choix en clef et la valeur de ces choix en value
+	var $attribute_choice;
 	// Array to store if attribute is unique or not
 	var $attribute_unique;
 	// Array to store if attribute is required or not
@@ -56,7 +58,8 @@ class ExtraFields
 		'boolean'=>'Boolean',
 		'price'=>'ExtrafieldPrice',
 		'phone'=>'ExtrafieldPhone',
-		'mail'=>'ExtrafieldMail'
+		'mail'=>'ExtrafieldMail',
+		'select' => 'ExtrafieldSelect'
 	);
 
 	/**
@@ -87,20 +90,22 @@ class ExtraFields
      *  @param  string	$elementtype        Element type ('member', 'product', 'company', ...)
      *  @param	int		$unique				Is field unique or not
      *  @param	int		$required			Is field required or not
+     *  @param  array	$param				Params for field 
      *  @return int      					<=0 if KO, >0 if OK
      */
-    function addExtraField($attrname, $label, $type, $pos, $size, $elementtype, $unique=0, $required=0)
+    function addExtraField($attrname, $label, $type, $pos, $size, $elementtype, $unique=0, $required=0,$default_value='', $param=0)
 	{
         if (empty($attrname)) return -1;
         if (empty($label)) return -1;
 
+        
         // Create field into database
-        $result=$this->create($attrname,$type,$size,$elementtype, $unique, $required);
+        $result=$this->create($attrname,$type,$size,$elementtype, $unique, $required, $default_value,$param);
         $err1=$this->errno;
         if ($result > 0 || $err1 == 'DB_ERROR_COLUMN_ALREADY_EXISTS')
         {
         	// Add declaration of field into table
-            $result2=$this->create_label($attrname,$label,$type,$pos,$size,$elementtype, $unique, $required);
+            $result2=$this->create_label($attrname,$label,$type,$pos,$size,$elementtype, $unique, $required, $param);
             $err2=$this->errno;
             if ($result2 > 0 || ($err1 == 'DB_ERROR_COLUMN_ALREADY_EXISTS' && $err2 == 'DB_ERROR_RECORD_ALREADY_EXISTS'))
             {
@@ -126,12 +131,15 @@ class ExtraFields
      *  @param  string	$elementtype        Element type ('member', 'product', 'company', 'contact', ...)
      *  @param	int		$unique				Is field unique or not
      *  @param	int		$required			Is field required or not
+     *  @param  string  $default_value		Default value for field
+     *  @param  array	$param				Params for field  (ex for select list : array('options'=>array('value'=>'label of option'))
+     *  
      *  @return int      	           		<=0 if KO, >0 if OK
 	 */
-	private function create($attrname, $type='varchar', $length=255, $elementtype='member', $unique=0, $required=0)
+	private function create($attrname, $type='varchar', $length=255, $elementtype='member', $unique=0, $required=0, $default_value='',$param='')
 	{
         $table=$elementtype.'_extrafields';
-
+        
         // Special case for not normalized table names
         if ($elementtype == 'member')  $table='adherent_extrafields';
         elseif ($elementtype == 'company') $table='societe_extrafields';
@@ -151,11 +159,20 @@ class ExtraFields
 			}elseif($type=='mail') {
 				$typedb='varchar';
 				$lengthdb='128';
+			} elseif ($type=='select') {
+				$typedb='text';
+				$lengthdb='';
 			} else {
 				$typedb=$type;
 				$lengthdb=$length;
 			}
-			$field_desc = array('type'=>$typedb, 'value'=>$lengthdb, 'null'=>($required?'NOT NULL':'NULL'));
+			$field_desc = array(
+				'type'=>$typedb, 
+				'value'=>$lengthdb, 
+				'null'=>($required?'NOT NULL':'NULL'),
+				'default' => $default_value
+			);
+			
 			$result=$this->db->DDLAddField(MAIN_DB_PREFIX.$table, $attrname, $field_desc);
 			if ($result > 0)
 			{
@@ -190,19 +207,33 @@ class ExtraFields
 	 *  @param  string	$elementtype        Element type ('member', 'product', 'company', ...)
      *  @param	int		$unique				Is field unique or not
      *  @param	int		$required			Is field required or not
+     *  @param  array	$param				Params for field  (ex for select list : array('options' => array(value'=>'label of option')) )
 	 *  @return	int							<=0 if KO, >0 if OK
 	 */
-	private function create_label($attrname, $label='', $type='', $pos=0, $size=0, $elementtype='member', $unique=0, $required=0)
+	private function create_label($attrname, $label='', $type='', $pos=0, $size=0, $elementtype='member', $unique=0, $required=0,$param)
 	{
 		global $conf;
 
 		// Clean parameters
 		if (empty($pos)) $pos=0;
 
-
+		
 		if (isset($attrname) && $attrname != '' && preg_match("/^\w[a-zA-Z0-9-_]*$/",$attrname))
 		{
-			$sql = "INSERT INTO ".MAIN_DB_PREFIX."extrafields(name, label, type, pos, size, entity, elementtype, fieldunique, fieldrequired)";
+			if(is_array($param) and count($param) > 0)
+			{
+				$params = $this->db->escape(serialize($param));
+			}
+			elseif (strlen($param) > 0)
+			{
+				$params = trim($param);
+			}
+			else
+			{
+				$params='';
+			}
+			
+			$sql = "INSERT INTO ".MAIN_DB_PREFIX."extrafields(name, label, type, pos, size, entity, elementtype, fieldunique, fieldrequired, param)";
 			$sql.= " VALUES('".$attrname."',";
 			$sql.= " '".$this->db->escape($label)."',";
 			$sql.= " '".$type."',";
@@ -211,7 +242,8 @@ class ExtraFields
 			$sql.= " ".$conf->entity.",";
             $sql.= " '".$elementtype."',";
             $sql.= " '".$unique."',";
-            $sql.= " '".$required."'";
+            $sql.= " '".$required."',";
+            $sql.= " '".$params."'";
             $sql.=')';
 
 			dol_syslog(get_class($this)."::create_label sql=".$sql);
@@ -311,9 +343,11 @@ class ExtraFields
      *  @param  string	$elementtype        Element type ('member', 'product', 'company', 'contact', ...)
      *  @param	int		$unique				Is field unique or not
      *  @param	int		$required			Is field required or not
+     *  @param	int		$pos				Position of attribute
+     *  @param  array	$param				Params for field  (ex for select list : array('options' => array(value'=>'label of option')) )
 	 * 	@return	int							>0 if OK, <=0 if KO
 	 */
-	function update($attrname,$label,$type,$length,$elementtype,$unique=0,$required=0)
+	function update($attrname,$label,$type,$length,$elementtype,$unique=0,$required=0,$pos,$param='')
 	{
         $table=$elementtype.'_extrafields';
 
@@ -336,6 +370,9 @@ class ExtraFields
 			}elseif($type=='mail') {
 				$typedb='varchar';
 				$lengthdb='128';
+			} elseif ($type=='select') {
+				$typedb='text';
+				$lengthdb='';
 			} else {
 				$typedb=$type;
 				$lengthdb=$length;
@@ -346,7 +383,7 @@ class ExtraFields
 			{
 				if ($label)
 				{
-					$result=$this->update_label($attrname,$label,$type,$length,$elementtype,$unique,$required);
+					$result=$this->update_label($attrname,$label,$type,$length,$elementtype,$unique,$required,$pos,$param);
 				}
 				if ($result > 0)
 				{
@@ -392,9 +429,11 @@ class ExtraFields
      *  @param  string	$elementtype		Element type ('member', 'product', 'company', ...)
      *  @param	int		$unique				Is field unique or not
      *  @param	int		$required			Is field required or not
+     *  @param	int		$pos				Position of attribute
+     *  @param  array	$param				Params for field  (ex for select list : array('options' => array(value'=>'label of option')) )
      *  @return	int							<=0 if KO, >0 if OK
      */
-	private function update_label($attrname,$label,$type,$size,$elementtype,$unique=0,$required=0)
+	private function update_label($attrname,$label,$type,$size,$elementtype,$unique=0,$required=0,$pos=0,$param='')
 	{
 		global $conf;
 		dol_syslog(get_class($this)."::update_label ".$attrname.", ".$label.", ".$type.", ".$size.", ".$elementtype.", ".$unique.", ".$required);
@@ -402,7 +441,12 @@ class ExtraFields
 		if (isset($attrname) && $attrname != '' && preg_match("/^\w[a-zA-Z0-9-_]*$/",$attrname))
 		{
 			$this->db->begin();
-
+			
+			if(is_array($param) && count($param) > 0)
+			{
+				$param = serialize($param);
+			}
+				
 			$sql_del = "DELETE FROM ".MAIN_DB_PREFIX."extrafields";
 			$sql_del.= " WHERE name = '".$attrname."'";
 			$sql_del.= " AND entity = ".$conf->entity;
@@ -418,7 +462,9 @@ class ExtraFields
 			$sql.= " size,";
 			$sql.= " elementtype,";
 			$sql.= " fieldunique,";
-			$sql.= " fieldrequired";
+			$sql.= " fieldrequired,";
+			$sql.= " pos,";
+			$sql.= " param";
 			$sql.= ") VALUES (";
 			$sql.= "'".$attrname."',";
 			$sql.= " ".$conf->entity.",";
@@ -427,7 +473,9 @@ class ExtraFields
 			$sql.= " '".$size."',";
             $sql.= " '".$elementtype."',";
             $sql.= " '".$unique."',";
-            $sql.= " '".$required."'";
+            $sql.= " '".$required."',";
+            $sql.= " '".$pos."',";
+            $sql.= " '".$param."'";
             $sql.= ")";
 			dol_syslog(get_class($this)."::update_label sql=".$sql);
 			$resql2=$this->db->query($sql);
@@ -480,7 +528,7 @@ class ExtraFields
 		if (!$forceload && !empty($conf->global->MAIN_EXTRAFIELDS_DISABLED))
 			return $array_name_label;
 
-		$sql = "SELECT rowid,name,label,type,size,elementtype,fieldunique,fieldrequired";
+		$sql = "SELECT rowid,name,label,type,size,elementtype,fieldunique,fieldrequired,param,pos";
 		$sql.= " FROM ".MAIN_DB_PREFIX."extrafields";
 		$sql.= " WHERE entity = ".$conf->entity;
 		if ($elementtype) $sql.= " AND elementtype = '".$elementtype."'";
@@ -502,6 +550,8 @@ class ExtraFields
                     $this->attribute_elementtype[$tab->name]=$tab->elementtype;
                     $this->attribute_unique[$tab->name]=$tab->fieldunique;
                     $this->attribute_required[$tab->name]=$tab->fieldrequired;
+                    $this->attribute_param[$tab->name]=unserialize($tab->param);
+                    $this->attribute_pos[$tab->name]=$tab->pos;
 				}
 			}
 			return $array_name_label;
@@ -531,6 +581,7 @@ class ExtraFields
         $elementtype=$this->attribute_elementtype[$key];
         $unique=$this->attribute_unique[$key];
         $required=$this->attribute_required[$key];
+        $param=$this->attribute_param[$key];
         if ($type == 'date')
         {
             $showsize=10;
@@ -593,6 +644,15 @@ class ExtraFields
         {
         	$out='<input type="text" name="options_'.$key.'"  size="6" value="'.price($value).'"> '.$langs->getCurrencySymbol($conf->currency);
         }
+        elseif ($type == 'select')
+        {
+        	$out='<select name="options_'.$key.'">';
+        	foreach ($param['options'] as $key=>$value )
+        	{
+        		$out.='<option value="'.$key.'">'.$value.'</option>';
+        	}
+        	$out.='</select>';
+        }
         // Add comments
 	    if ($type == 'date') $out.=' (YYYY-MM-DD)';
         elseif ($type == 'datetime') $out.=' (YYYY-MM-DD HH:MM:SS)';
@@ -617,6 +677,7 @@ class ExtraFields
         $elementtype=$this->attribute_elementtype[$key];
         $unique=$this->attribute_unique[$key];
         $required=$this->attribute_required[$key];
+        $params=$this->attribute_param[$key];
         if ($type == 'date')
         {
             $showsize=10;
@@ -649,6 +710,10 @@ class ExtraFields
         {
         	$value=price($value).' '.$langs->getCurrencySymbol($conf->currency);
         }
+        elseif ($type == 'select')
+        {
+        	$value=$params['options'][$value];
+        }
         else
         {
             $showsize=round($size);
diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php
index 28dee6f93832eeb7bdbeea0c8898c8265f2b6362..2d46eec81dcfb9c71b57176ab74444bf6424c3e8 100644
--- a/htdocs/core/class/html.form.class.php
+++ b/htdocs/core/class/html.form.class.php
@@ -689,7 +689,7 @@ class Form
             {
                 //$minLength = (is_numeric($conf->global->COMPANY_USE_SEARCH_TO_SELECT)?$conf->global->COMPANY_USE_SEARCH_TO_SELECT:2);
                 $out.= ajax_combobox($htmlname, $event, $conf->global->COMPANY_USE_SEARCH_TO_SELECT);
-				/*              
+				/*
 				if ($selected && empty($selected_input_value))
                 {
                 	require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
@@ -876,7 +876,7 @@ class Form
         if ($resql)
         {
             $num=$this->db->num_rows($resql);
-            
+
             if ($conf->use_javascript_ajax && $conf->global->CONTACT_USE_SEARCH_TO_SELECT && ! $forcecombo)
             {
             	$out.= ajax_combobox($htmlname, $event);
@@ -968,10 +968,10 @@ class Form
      * 	@param	int		$disabled		If select list must be disabled
      *  @param  array	$include        Array list of users id to include
      * 	@param	int		$enableonly		Array list of users id to be enabled. All other must be disabled
-     *  @param	int		$force_entity	Possibility to force entity
+     *  @param	int		$force_entity	0 or Id of environment to force
      * 	@return	void
      */
-    function select_users($selected='',$htmlname='userid',$show_empty=0,$exclude='',$disabled=0,$include='',$enableonly='',$force_entity=false)
+    function select_users($selected='',$htmlname='userid',$show_empty=0,$exclude='',$disabled=0,$include='',$enableonly='',$force_entity=0)
     {
         print $this->select_dolusers($selected,$htmlname,$show_empty,$exclude,$disabled,$include,$enableonly,$force_entity);
     }
@@ -986,15 +986,15 @@ class Form
      * 	@param	int		$disabled		If select list must be disabled
      *  @param  array	$include        Array list of users id to include
      * 	@param	int		$enableonly		Array list of users id to be enabled. All other must be disabled
-     *  @param	int		$force_entity	Possibility to force entity
+     *  @param	int		$force_entity	0 or Id of environment to force
      * 	@return	string					HTML select string
      */
-    function select_dolusers($selected='',$htmlname='userid',$show_empty=0,$exclude='',$disabled=0,$include='',$enableonly='',$force_entity=false)
+    function select_dolusers($selected='',$htmlname='userid',$show_empty=0,$exclude='',$disabled=0,$include='',$enableonly='',$force_entity=0)
     {
         global $conf,$user,$langs;
 
         // If no preselected user defined, we take current user
-        if ($selected < -1 && empty($conf->global->SOCIETE_DISABLE_DEFAULT_SALESREPRESENTATIVE)) $selected=$user->id;
+        if ((is_numeric($selected) && ($selected < -1 || empty($selected))) && empty($conf->global->SOCIETE_DISABLE_DEFAULT_SALESREPRESENTATIVE)) $selected=$user->id;
 
         // Permettre l'exclusion d'utilisateurs
         if (is_array($exclude))	$excludeUsers = implode("','",$exclude);
@@ -1043,7 +1043,7 @@ class Form
             if ($num)
             {
                 $out.= '<select class="flat" id="'.$htmlname.'" name="'.$htmlname.'"'.($disabled?' disabled="disabled"':'').'>';
-                if ($show_empty) $out.= '<option value="-1"'.($selected==-1?' selected="selected"':'').'>&nbsp;</option>'."\n";
+                if ($show_empty) $out.= '<option value="-1"'.((empty($selected) || $selected==-1)?' selected="selected"':'').'>&nbsp;</option>'."\n";
 
                 $userstatic=new User($this->db);
 
@@ -3946,17 +3946,17 @@ class Form
     /**
      *	Return select list of groups
      *
-     *  @param	string	$selected        Id group preselected
-     *  @param  string	$htmlname        Field name in form
-     *  @param  int		$show_empty      0=liste sans valeur nulle, 1=ajoute valeur inconnue
-     *  @param  string	$exclude         Array list of groups id to exclude
+     *  @param	string	$selected       Id group preselected
+     *  @param  string	$htmlname       Field name in form
+     *  @param  int		$show_empty     0=liste sans valeur nulle, 1=ajoute valeur inconnue
+     *  @param  string	$exclude        Array list of groups id to exclude
      * 	@param	int		$disabled		If select list must be disabled
-     *  @param  string	$include         Array list of groups id to include
+     *  @param  string	$include        Array list of groups id to include
      * 	@param	int		$enableonly		Array list of groups id to be enabled. All other must be disabled
-     * 	@param	int		$force_entity	Possibility to force entity
+     * 	@param	int		$force_entity	0 or Id of environment to force
      *  @return	void
      */
-    function select_dolgroups($selected='', $htmlname='groupid', $show_empty=0, $exclude='', $disabled=0, $include='', $enableonly='', $force_entity='')
+    function select_dolgroups($selected='', $htmlname='groupid', $show_empty=0, $exclude='', $disabled=0, $include='', $enableonly='', $force_entity=0)
     {
         global $conf,$user,$langs;
 
diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php
index 4fb851ce4d321f03ca9db1b082a496b6135a7672..afd9522801a1284cc32e146e0b84c73f36e404c1 100644
--- a/htdocs/core/lib/company.lib.php
+++ b/htdocs/core/lib/company.lib.php
@@ -45,7 +45,9 @@ function societe_prepare_head($object)
     if ($object->client==1 || $object->client==2 || $object->client==3 || (isset($object->object) && $object->object->client==1) || (isset($object->object) && $object->object->client==3))
     {
         $head[$h][0] = DOL_URL_ROOT.'/comm/fiche.php?socid='.$object->id;
-        $head[$h][1] = $langs->trans("Customer");
+        if ($object->client==2 || $object->client==3) $head[$h][1] = $langs->trans("Prospect");
+        if ($object->client==3)                       $head[$h][1] .= '/';
+        if ($object->client==1 || $object->client==3) $head[$h][1] .= $langs->trans("Customer");
         $head[$h][2] = 'customer';
         $h++;
     }
diff --git a/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php b/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php
index 0ad0ecc0e7e4f63623edb08f0adbd562035e0d6c..fff62466958969a9e38423233a7b29aeaa7cf58f 100644
--- a/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php
+++ b/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php
@@ -97,7 +97,7 @@ class doc_generic_order_odt extends ModelePDFCommandes
     {
         global $conf;
 
-        return array(
+        $resarray=array(
             'object_id'=>$object->id,
             'object_ref'=>$object->ref,
             'object_ref_ext'=>$object->ref_ext,
@@ -120,6 +120,15 @@ class doc_generic_order_odt extends ModelePDFCommandes
             'object_note_private'=>$object->note,
             'object_note'=>$object->note_public,
         );
+        
+        // Add vat by rates
+        foreach ($object->lines as $line)
+        {
+        	if (empty($resarray['object_total_vat_'.$line->tva_tx])) $resarray['object_total_vat_'.$line->tva_tx]=0;
+        	$resarray['object_total_vat_'.$line->tva_tx]+=$line->total_tva;
+        }
+        
+        return $resarray;
     }
 
     /**
diff --git a/htdocs/core/modules/dons/html_cerfafr.modules.php b/htdocs/core/modules/dons/html_cerfafr.modules.php
index 47aa150dc4df061c69688d5cca17d4a390412df6..cf71f536593d65d15c82fc7c7a7882eefa628691 100644
--- a/htdocs/core/modules/dons/html_cerfafr.modules.php
+++ b/htdocs/core/modules/dons/html_cerfafr.modules.php
@@ -144,7 +144,7 @@ class html_cerfafr extends ModeleDon
 		        $form = str_replace('__MAIN_INFO_SOCIETE_CP__',$mysoc->zip,$form);
 		        $form = str_replace('__MAIN_INFO_SOCIETE_VILLE__',$mysoc->town,$form);
 		        $form = str_replace('__DONATOR_NAME__',$don->nom,$form);
-		        $form = str_replace('__DONATOR_ADDRESS__',$don->adresse,$form);
+		        $form = str_replace('__DONATOR_ADDRESS__',$don->address,$form);
 		        $form = str_replace('__DONATOR_ZIP__',$don->cp,$form);
 		        $form = str_replace('__DONATOR_TOWN__',$don->ville,$form);
 		        $form = str_replace('__PAYMENTMODE_LIB__ ', $paymentmode,$form);
diff --git a/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php b/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php
index dcf8436636d6218e2d1a54e11707f31ac9954d13..37e2b7e32b60c1fafd6c60a9d831bbbbd717e644 100644
--- a/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php
+++ b/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php
@@ -105,7 +105,7 @@ class doc_generic_invoice_odt extends ModelePDFFactures
 		$sumpayed = $object->getSommePaiement();
 		$alreadypayed=price($sumpayed,0,$outputlangs);
 
-        return array(
+        $resarray=array(
             'object_id'=>$object->id,
             'object_ref'=>$object->ref,
             'object_ref_ext'=>$object->ref_ext,
@@ -132,6 +132,15 @@ class doc_generic_invoice_odt extends ModelePDFFactures
             'object_already_payed'=>$alreadypayed,
             'object_remain_to_pay'=>price($object->total_ttc - $sumpayed,0,$outputlangs)
         );
+
+        // Add vat by rates
+		foreach ($object->lines as $line)
+		{
+			if (empty($resarray['object_total_vat_'.$line->tva_tx])) $resarray['object_total_vat_'.$line->tva_tx]=0;
+			$resarray['object_total_vat_'.$line->tva_tx]+=$line->total_tva;
+		}
+		
+        return $resarray;
     }
 
     /**
diff --git a/htdocs/core/modules/modAdherent.class.php b/htdocs/core/modules/modAdherent.class.php
index 281a672c60d2c3a7c95b9c84dbce52e99975dcbb..4dea8571657db78c94578c710e4f5727f4948700 100644
--- a/htdocs/core/modules/modAdherent.class.php
+++ b/htdocs/core/modules/modAdherent.class.php
@@ -172,9 +172,9 @@ class modAdherent extends DolibarrModules
         $this->export_code[$r]=$this->rights_class.'_'.$r;
         $this->export_label[$r]='MembersAndSubscriptions';
         $this->export_permission[$r]=array(array("adherent","export"));
-        $this->export_fields_array[$r]=array('a.rowid'=>'Id','a.civilite'=>"UserTitle",'a.nom'=>"Lastname",'a.prenom'=>"Firstname",'a.login'=>"Login",'a.morphy'=>'Nature','a.societe'=>'Company','a.adresse'=>"Address",'a.cp'=>"Zip",'a.ville'=>"Town",'a.pays'=>"Country",'a.phone'=>"PhonePro",'a.phone_perso'=>"PhonePerso",'a.phone_mobile'=>"PhoneMobile",'a.email'=>"Email",'a.naiss'=>"Birthday",'a.statut'=>"Status",'a.photo'=>"Photo",'a.note'=>"Note",'a.datec'=>'DateCreation','a.datevalid'=>'DateValidation','a.tms'=>'DateLastModification','a.datefin'=>'DateEndSubscription','ta.rowid'=>'MemberTypeId','ta.libelle'=>'MemberTypeLabel','c.rowid'=>'SubscriptionId','c.dateadh'=>'DateSubscription','c.cotisation'=>'Amount');
-        $this->export_TypeFields_array[$r]=array('a.civilite'=>"Text",'a.nom'=>"Text",'a.prenom'=>"Text",'a.login'=>"Text",'a.morphy'=>'Text','a.societe'=>'Text','a.adresse'=>"Text",'a.cp'=>"Text",'a.ville'=>"Text",'a.pays'=>"Text",'a.phone'=>"Text",'a.phone_perso'=>"Text",'a.phone_mobile'=>"Text",'a.email'=>"Text",'a.naiss'=>"Date",'a.statut'=>"Status",'a.note'=>"Text",'a.datec'=>'Date','a.datevalid'=>'Date','a.tms'=>'Date','a.datefin'=>'Date','ta.rowid'=>'List:fk_adherent_type:libelle','ta.libelle'=>'Text','c.dateadh'=>'Date','c.cotisation'=>'Number');
-        $this->export_entities_array[$r]=array('a.rowid'=>'member','a.civilite'=>"member",'a.nom'=>"member",'a.prenom'=>"member",'a.login'=>"member",'a.morphy'=>'member','a.societe'=>'member','a.adresse'=>"member",'a.cp'=>"member",'a.ville'=>"member",'a.pays'=>"member",'a.phone'=>"member",'a.phone_perso'=>"member",'a.phone_mobile'=>"member",'a.email'=>"member",'a.naiss'=>"member",'a.statut'=>"member",'a.photo'=>"member",'a.note'=>"member",'a.datec'=>'member','a.datevalid'=>'member','a.tms'=>'member','a.datefin'=>'member','ta.rowid'=>'member_type','ta.libelle'=>'member_type','c.rowid'=>'subscription','c.dateadh'=>'subscription','c.cotisation'=>'subscription');
+        $this->export_fields_array[$r]=array('a.rowid'=>'Id','a.civilite'=>"UserTitle",'a.nom'=>"Lastname",'a.prenom'=>"Firstname",'a.login'=>"Login",'a.morphy'=>'Nature','a.societe'=>'Company','a.address'=>"Address",'a.cp'=>"Zip",'a.ville'=>"Town",'a.pays'=>"Country",'a.phone'=>"PhonePro",'a.phone_perso'=>"PhonePerso",'a.phone_mobile'=>"PhoneMobile",'a.email'=>"Email",'a.naiss'=>"Birthday",'a.statut'=>"Status",'a.photo'=>"Photo",'a.note'=>"Note",'a.datec'=>'DateCreation','a.datevalid'=>'DateValidation','a.tms'=>'DateLastModification','a.datefin'=>'DateEndSubscription','ta.rowid'=>'MemberTypeId','ta.libelle'=>'MemberTypeLabel','c.rowid'=>'SubscriptionId','c.dateadh'=>'DateSubscription','c.cotisation'=>'Amount');
+        $this->export_TypeFields_array[$r]=array('a.civilite'=>"Text",'a.nom'=>"Text",'a.prenom'=>"Text",'a.login'=>"Text",'a.morphy'=>'Text','a.societe'=>'Text','a.address'=>"Text",'a.cp'=>"Text",'a.ville'=>"Text",'a.pays'=>"Text",'a.phone'=>"Text",'a.phone_perso'=>"Text",'a.phone_mobile'=>"Text",'a.email'=>"Text",'a.naiss'=>"Date",'a.statut'=>"Status",'a.note'=>"Text",'a.datec'=>'Date','a.datevalid'=>'Date','a.tms'=>'Date','a.datefin'=>'Date','ta.rowid'=>'List:fk_adherent_type:libelle','ta.libelle'=>'Text','c.dateadh'=>'Date','c.cotisation'=>'Number');
+        $this->export_entities_array[$r]=array('a.rowid'=>'member','a.civilite'=>"member",'a.nom'=>"member",'a.prenom'=>"member",'a.login'=>"member",'a.morphy'=>'member','a.societe'=>'member','a.address'=>"member",'a.cp'=>"member",'a.ville'=>"member",'a.pays'=>"member",'a.phone'=>"member",'a.phone_perso'=>"member",'a.phone_mobile'=>"member",'a.email'=>"member",'a.naiss'=>"member",'a.statut'=>"member",'a.photo'=>"member",'a.note'=>"member",'a.datec'=>'member','a.datevalid'=>'member','a.tms'=>'member','a.datefin'=>'member','ta.rowid'=>'member_type','ta.libelle'=>'member_type','c.rowid'=>'subscription','c.dateadh'=>'subscription','c.cotisation'=>'subscription');
 		// Add extra fields
 		$sql="SELECT name, label FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'member'";
 		$resql=$this->db->query($sql);
@@ -207,7 +207,7 @@ class modAdherent extends DolibarrModules
         $this->import_entities_array[$r]=array();		// We define here only fields that use another icon that the one defined into import_icon
         $this->import_tables_array[$r]=array('a'=>MAIN_DB_PREFIX.'adherent','extra'=>MAIN_DB_PREFIX.'adherent_extrafields');
         $this->import_tables_creator_array[$r]=array('a'=>'fk_user_author');    // Fields to store import user id
-        $this->import_fields_array[$r]=array('a.civilite'=>"UserTitle",'a.nom'=>"Lastname*",'a.prenom'=>"Firstname",'a.login'=>"Login*","a.pass"=>"Password","a.fk_adherent_type"=>"MemberType*",'a.morphy'=>'Nature*','a.societe'=>'Company','a.adresse'=>"Address",'a.cp'=>"Zip",'a.ville'=>"Town",'a.pays'=>"Country",'a.phone'=>"PhonePro",'a.phone_perso'=>"PhonePerso",'a.phone_mobile'=>"PhoneMobile",'a.email'=>"Email",'a.naiss'=>"Birthday",'a.statut'=>"Status*",'a.photo'=>"Photo",'a.note'=>"Note",'a.datec'=>'DateCreation','a.datefin'=>'DateEndSubscription');
+        $this->import_fields_array[$r]=array('a.civilite'=>"UserTitle",'a.nom'=>"Lastname*",'a.prenom'=>"Firstname",'a.login'=>"Login*","a.pass"=>"Password","a.fk_adherent_type"=>"MemberType*",'a.morphy'=>'Nature*','a.societe'=>'Company','a.address'=>"Address",'a.cp'=>"Zip",'a.ville'=>"Town",'a.pays'=>"Country",'a.phone'=>"PhonePro",'a.phone_perso'=>"PhonePerso",'a.phone_mobile'=>"PhoneMobile",'a.email'=>"Email",'a.naiss'=>"Birthday",'a.statut'=>"Status*",'a.photo'=>"Photo",'a.note'=>"Note",'a.datec'=>'DateCreation','a.datefin'=>'DateEndSubscription');
 		// Add extra fields
 		$sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'member'";
 		$resql=$this->db->query($sql);
@@ -223,7 +223,7 @@ class modAdherent extends DolibarrModules
 		// End add extra fields
 		$this->import_fieldshidden_array[$r]=array('extra.fk_object'=>'lastrowid-'.MAIN_DB_PREFIX.'adherent');    // aliastable.field => ('user->id' or 'lastrowid-'.tableparent)
 		$this->import_regex_array[$r]=array('a.civilite'=>'code@'.MAIN_DB_PREFIX.'c_civilite','a.fk_adherent_type'=>'rowid@'.MAIN_DB_PREFIX.'adherent_type','a.morphy'=>'(phy|mor)','a.statut'=>'^[0|1]','a.datec'=>'^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$','a.datefin'=>'^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$');
-        $this->import_examplevalues_array[$r]=array('a.civilite'=>"MR",'a.nom'=>'Smith','a.prenom'=>'John','a.login'=>'jsmith','a.pass'=>'passofjsmith','a.fk_adherent_type'=>'1','a.morphy'=>'"mor" or "phy"','a.societe'=>'JS company','a.adresse'=>'21 jump street','a.cp'=>'55000','a.ville'=>'New York','a.pays'=>'1','a.email'=>'jsmith@example.com','a.naiss'=>'1972-10-10','a.statut'=>"0 or 1",'a.note'=>"This is a comment on member",'a.datec'=>dol_print_date($now,'%Y-%m-%d'),'a.datefin'=>dol_print_date(dol_time_plus_duree($now, 1, 'y'),'%Y-%m-%d'));
+        $this->import_examplevalues_array[$r]=array('a.civilite'=>"MR",'a.nom'=>'Smith','a.prenom'=>'John','a.login'=>'jsmith','a.pass'=>'passofjsmith','a.fk_adherent_type'=>'1','a.morphy'=>'"mor" or "phy"','a.societe'=>'JS company','a.address'=>'21 jump street','a.cp'=>'55000','a.ville'=>'New York','a.pays'=>'1','a.email'=>'jsmith@example.com','a.naiss'=>'1972-10-10','a.statut'=>"0 or 1",'a.note'=>"This is a comment on member",'a.datec'=>dol_print_date($now,'%Y-%m-%d'),'a.datefin'=>dol_print_date(dol_time_plus_duree($now, 1, 'y'),'%Y-%m-%d'));
     }
 
 
diff --git a/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php b/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php
index be0ac3f7d3f52dd8272ae7af92a8efdd92284989..d18c17735aec40b8ba51ceda199abacbaabba79c 100644
--- a/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php
+++ b/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php
@@ -97,7 +97,7 @@ class doc_generic_proposal_odt extends ModelePDFPropales
     {
         global $conf;
 
-        return array(
+        $resarray=array(
             'object_id'=>$object->id,
             'object_ref'=>$object->ref,
             'object_ref_ext'=>$object->ref_ext,
@@ -119,6 +119,15 @@ class doc_generic_proposal_odt extends ModelePDFPropales
             'object_note_private'=>$object->note,
             'object_note'=>$object->note_public,
         );
+        
+        // Add vat by rates
+        foreach ($object->lines as $line)
+        {
+        	if (empty($resarray['object_total_vat_'.$line->tva_tx])) $resarray['object_total_vat_'.$line->tva_tx]=0;
+        	$resarray['object_total_vat_'.$line->tva_tx]+=$line->total_tva;
+        }
+        
+        return $resarray;
     }
 
     /**
diff --git a/htdocs/core/tpl/admin_extrafields_add.tpl.php b/htdocs/core/tpl/admin_extrafields_add.tpl.php
index 01190bf4405397ea2fb4a9789fab88b45a807a8a..d4f5cf9ae4029d7700694378701cde85a0ca7169 100644
--- a/htdocs/core/tpl/admin_extrafields_add.tpl.php
+++ b/htdocs/core/tpl/admin_extrafields_add.tpl.php
@@ -25,14 +25,22 @@
     		var size = jQuery("#size");
     		var unique = jQuery("#unique");
     		var required = jQuery("#required");
-    		if (type == 'date') { size.val('').attr('disabled','disabled'); unique.removeAttr('disabled','disabled'); }
-    		else if (type == 'datetime') { size.val('').attr('disabled','disabled'); unique.removeAttr('disabled','disabled'); }
-    		else if (type == 'double') { size.val('24,8').removeAttr('disabled'); unique.removeAttr('disabled','disabled'); }
-    		else if (type == 'int') { size.val('10').removeAttr('disabled'); unique.removeAttr('disabled','disabled'); }
-    		else if (type == 'text') { size.val('2000').removeAttr('disabled'); unique.attr('disabled','disabled').removeAttr('checked'); }
-    		else if (type == 'varchar') { size.val('255').removeAttr('disabled'); unique.removeAttr('disabled','disabled'); }
-    		else if (type == 'boolean') { size.val('').attr('disabled','disabled'); unique.attr('disabled','disabled');}
-    		else if (type == 'price') { size.val('').attr('disabled','disabled'); unique.attr('disabled','disabled');}
+    		<?php
+    		if(!GETPOST('type') == "select") 
+    		{
+    			print 'jQuery("#value_choice").hide();';
+    		}
+    		?>
+    		
+    		if (type == 'date') { size.val('').attr('disabled','disabled'); unique.removeAttr('disabled','disabled'); jQuery("#value_choice").hide(); }
+    		else if (type == 'datetime') { size.val('').attr('disabled','disabled'); unique.removeAttr('disabled','disabled'); jQuery("#value_choice").hide(); }
+    		else if (type == 'double') { size.val('24,8').removeAttr('disabled'); unique.removeAttr('disabled','disabled'); jQuery("#value_choice").hide(); }
+    		else if (type == 'int') { size.val('10').removeAttr('disabled'); unique.removeAttr('disabled','disabled'); jQuery("#value_choice").hide(); }
+    		else if (type == 'text') { size.val('2000').removeAttr('disabled'); unique.attr('disabled','disabled').removeAttr('checked'); jQuery("#value_choice").hide(); }
+    		else if (type == 'varchar') { size.val('255').removeAttr('disabled'); unique.removeAttr('disabled','disabled'); jQuery("#value_choice").hide(); }
+    		else if (type == 'boolean') { size.val('').attr('disabled','disabled'); unique.attr('disabled','disabled'); jQuery("#value_choice").hide();}
+    		else if (type == 'price') { size.val('').attr('disabled','disabled'); unique.attr('disabled','disabled'); jQuery("#value_choice").hide();}
+    		else if (type == 'select') { size.val('').attr('disabled','disabled'); unique.attr('disabled','disabled');  jQuery("#value_choice").show();}
     		else size.val('').attr('disabled','disabled');
     	}
     	init_typeoffields('');
@@ -47,7 +55,8 @@
 <input type="hidden" name="action" value="add">
 
 <table summary="listofattributes" class="border centpercent">
-
+<!-- Position -->
+<tr><td class="fieldrequired"><?php echo $langs->trans("Position"); ?></td><td class="valeur"><input type="text" name="pos" size="5" value="<?php echo GETPOST('pos'); ?>"></td></tr>
 <!-- Label -->
 <tr><td class="fieldrequired"><?php echo $langs->trans("Label"); ?></td><td class="valeur"><input type="text" name="label" size="40" value="<?php echo GETPOST('label'); ?>"></td></tr>
 <!-- Code -->
@@ -56,6 +65,17 @@
 <tr><td class="fieldrequired"><?php echo $langs->trans("Type"); ?></td><td class="valeur">
 <?php print $form->selectarray('type',$type2label,GETPOST('type')); ?>
 </td></tr>
+<!--  Value (for select list / radio) -->
+<tr id="value_choice">
+<td>
+	<?php echo $langs->trans("Value"); ?>
+</td>
+<td>
+	<textarea name="param" id="param"><?php echo GETPOST('param'); ?></textarea>
+</td>
+</tr>
+<!-- Default Value -->
+<tr><td><?php echo $langs->trans("DefaultValue"); ?></td><td class="valeur"><input id="default_value" type="text" name=""default_value"" size="5" value="<?php echo (GETPOST('"default_value"')?GETPOST('"default_value"'):''); ?>"></td></tr>
 <!-- Size -->
 <tr><td class="fieldrequired"><?php echo $langs->trans("Size"); ?></td><td class="valeur"><input id="size" type="text" name="size" size="5" value="<?php echo (GETPOST('size')?GETPOST('size'):''); ?>"></td></tr>
 <!-- Unique -->
diff --git a/htdocs/core/tpl/admin_extrafields_edit.tpl.php b/htdocs/core/tpl/admin_extrafields_edit.tpl.php
index 8eed3b96c379970e1e38145733bfd5fd49494a21..c2112b636f2d55c82ea01b17ee47de46b1da9719 100644
--- a/htdocs/core/tpl/admin_extrafields_edit.tpl.php
+++ b/htdocs/core/tpl/admin_extrafields_edit.tpl.php
@@ -47,21 +47,53 @@
 
 <table summary="listofattributes" class="border centpercent">
 
-<!-- Label -->
-<tr><td class="fieldrequired"><?php echo $langs->trans("Label"); ?></td><td class="valeur"><input type="text" name="label" size="40" value="<?php echo $extrafields->attribute_label[$attrname]; ?>"></td></tr>
-<!-- Code -->
-<tr><td class="fieldrequired"><?php echo $langs->trans("AttributeCode"); ?></td><td class="valeur"><?php echo $attrname; ?></td></tr>
-<!-- Type -->
 <?php
 $type=$extrafields->attribute_type[$attrname];
 $size=$extrafields->attribute_size[$attrname];
 $unique=$extrafields->attribute_unique[$attrname];
 $required=$extrafields->attribute_required[$attrname];
+$pos=$extrafields->attribute_pos[$attrname];
+$param=$extrafields->attribute_param[$attrname];
+
+if($type == 'select' && is_array($param))
+{
+	$param_chain = '';
+	foreach ($param['options'] as $key => $value)
+	{
+		if(strlen($key)) 
+		{
+			$param_chain .= $key.', '.$value."\n";
+		}
+	}
+}
 ?>
+<!-- Position -->
+<tr><td class="fieldrequired"><?php echo $langs->trans("Position"); ?></td><td class="valeur"><input type="text" name="pos" size="5" value="<?php  echo $extrafields->attribute_pos[$attrname];  ?>"></td></tr>
+<!-- Label -->
+<tr><td class="fieldrequired"><?php echo $langs->trans("Label"); ?></td><td class="valeur"><input type="text" name="label" size="40" value="<?php echo $extrafields->attribute_label[$attrname]; ?>"></td></tr>
+<!-- Code -->
+<tr><td class="fieldrequired"><?php echo $langs->trans("AttributeCode"); ?></td><td class="valeur"><?php echo $attrname; ?></td></tr>
+<!-- Type -->
 <tr><td class="fieldrequired"><?php echo $langs->trans("Type"); ?></td><td class="valeur">
 <?php print $type2label[$type]; ?>
 <input type="hidden" name="type" id="type" value="<?php print $type; ?>">
 </td></tr>
+<!--  Value (for select list / radio) -->
+<?php 
+if($type == 'select') 
+{
+?>
+<tr id="value_choice">
+<td>
+	<?php echo $langs->trans("Value"); ?>
+</td>
+<td>
+	<textarea name="param" id="param"><?php echo $param_chain; ?></textarea>
+</td>
+</tr>
+<?php 
+}
+?>
 <!-- Size -->
 <tr><td class="fieldrequired"><?php echo $langs->trans("Size"); ?></td><td><input id="size" type="text" name="size" size="5" value="<?php echo $size; ?>"></td></tr>
 <!-- Unique -->
diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php
index 7c9a59177276abd3c6f52f958468cffcfa24d387..1840713b0e6a39c6b85bf7e953e6949d1b6625ba 100644
--- a/htdocs/expedition/class/expedition.class.php
+++ b/htdocs/expedition/class/expedition.class.php
@@ -675,7 +675,7 @@ class Expedition extends CommonObject
 		if (isset($this->socid)) $this->socid=trim($this->socid);
 		if (isset($this->fk_user_author)) $this->fk_user_author=trim($this->fk_user_author);
 		if (isset($this->fk_user_valid)) $this->fk_user_valid=trim($this->fk_user_valid);
-		if (isset($this->fk_adresse_livraison)) $this->fk_adresse_livraison=trim($this->fk_adresse_livraison);
+		if (isset($this->fk_delivery_address)) $this->fk_delivery_address=trim($this->fk_delivery_address);
 		if (isset($this->expedition_method_id)) $this->expedition_method_id=trim($this->expedition_method_id);
 		if (isset($this->tracking_number)) $this->tracking_number=trim($this->tracking_number);
 		if (isset($this->statut)) $this->statut=trim($this->statut);
@@ -706,7 +706,7 @@ class Expedition extends CommonObject
 		$sql.= " fk_user_valid=".(isset($this->fk_user_valid)?$this->fk_user_valid:"null").",";
 		$sql.= " date_expedition=".(dol_strlen($this->date_expedition)!=0 ? "'".$this->db->idate($this->date_expedition)."'" : 'null').",";
 		$sql.= " date_delivery=".(dol_strlen($this->date_delivery)!=0 ? "'".$this->db->idate($this->date_delivery)."'" : 'null').",";
-		$sql.= " fk_address=".(isset($this->fk_adresse_livraison)?$this->fk_adresse_livraison:"null").",";
+		$sql.= " fk_address=".(isset($this->fk_delivery_address)?$this->fk_delivery_address:"null").",";
 		$sql.= " fk_expedition_methode=".((isset($this->expedition_method_id) && $this->expedition_method_id > 0)?$this->expedition_method_id:"null").",";
 		$sql.= " tracking_number=".(isset($this->tracking_number)?"'".$this->db->escape($this->tracking_number)."'":"null").",";
 		$sql.= " fk_statut=".(isset($this->statut)?$this->statut:"null").",";
@@ -909,8 +909,8 @@ class Expedition extends CommonObject
 				$line->volume         	= $obj->volume;
 				$line->volume_units   	= $obj->volume_units;
 
-				//Invoicing
-				$line->desc				= $obj->product_label;
+				// For invoicing
+				$line->desc	         	= $obj->description;		// We need ->desc because some code into CommonObject use desc (property defined for other elements)
 				$line->qty 				= $obj->qty_shipped;
 				$line->total_ht			= $obj->total_ht;
 				$line->total_localtax1 	= $obj->total_localtax1;
diff --git a/htdocs/holiday/index.php b/htdocs/holiday/index.php
index 19944b16ae8d8b40f1cfaf126cbcde750b543418..16d2edddf7e830f6cb30d1c6d0dad2aaf25b7cdf 100644
--- a/htdocs/holiday/index.php
+++ b/htdocs/holiday/index.php
@@ -30,6 +30,11 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
 require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
 require_once DOL_DOCUMENT_ROOT.'/user/class/usergroup.class.php';
 require_once DOL_DOCUMENT_ROOT.'/holiday/common.inc.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/usergroups.lib.php';
+
+$langs->load('users');
+$langs->load('holidays');
 
 // Protection if external user
 if ($user->societe_id > 0) accessforbidden();
@@ -46,6 +51,8 @@ $offset = $conf->liste_limit * $page ;
 $pageprev = $page - 1;
 $pagenext = $page + 1;
 
+$id = GETPOST('id');
+
 $search_ref      = GETPOST('search_ref');
 $month_create    = GETPOST('month_create');
 $year_create     = GETPOST('year_create');
@@ -72,6 +79,7 @@ $search_statut   = GETPOST('select_statut');
 
 $holiday = new Holiday($db);
 $holidaystatic=new Holiday($db);
+$fuser = new User($db);
 
 // Update sold
 $holiday->updateSold();
@@ -151,28 +159,22 @@ if(!empty($search_statut) && $search_statut != -1) {
 // Récupération de l'ID de l'utilisateur
 $user_id = $user->id;
 
+if ($id > 0)
+{
+	// Charge utilisateur edite
+	$fuser->fetch($id);
+	$fuser->getrights();
+	$user_id = $fuser->id;
+}
 // Récupération des congés payés de l'utilisateur ou de tous les users
-if (!$user->rights->holiday->lire_tous)
+if (!$user->rights->holiday->lire_tous || $id > 0)
 {
-    $holiday_payes = $holiday->fetchByUser($user_id,$order,$filter);
+	$holiday_payes = $holiday->fetchByUser($user_id,$order,$filter);
 }
 else
 {
     $holiday_payes = $holiday->fetchAll($order,$filter);
 }
-
-// Si pas de congés payés
-if ($holiday_payes == 0)
-{
-    print_fiche_titre($langs->trans('CPTitreMenu'));
-
-    print '<div class="tabBar">';
-    print '<span>'.$langs->trans('NoCPforUser').'<br /><br />';
-    print '<a href="./fiche.php?mainmenu=agenda&action=request" class="butAction">'.$langs->trans('AddCP').'</a></span>';
-    print '</div>';
-    exit();
-}
-
 // Si erreur SQL
 if ($holiday_payes == '-1')
 {
@@ -189,14 +191,48 @@ if ($holiday_payes == '-1')
  * Affichage du tableau des congés payés
 *************************************/
 
-$var=true; $num = count($holiday->holiday);
-$html = new Form($db);
-$htmlother = new FormOther($db);
-print_barre_liste($langs->trans("ListeCP"), $page, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, "", $num);
+$var=true; $num = count($holiday->holiday);
+$form = new Form($db);
+$formother = new FormOther($db);
 
-print '<div class="tabBar">';
+if ($id > 0)
+{
+	$head = user_prepare_head($fuser);
+
+	$title = $langs->trans("User");
+	dol_fiche_head($head, 'paidholidays', $title, 0, 'user');
+
+	print '<table class="border" width="100%">';
+
+	// Ref
+	print '<tr><td width="25%" valign="top">'.$langs->trans("Ref").'</td>';
+	print '<td colspan="2">';
+	print $form->showrefnav($fuser,'id','',$user->rights->user->user->lire || $user->admin);
+	print '</td>';
+	print '</tr>';
+
+	// Nom
+	print '<tr><td width="25%" valign="top">'.$langs->trans("LastName").'</td>';
+	print '<td colspan="2">'.$fuser->lastname.'</td>';
+	print "</tr>\n";
+
+	// Prenom
+	print '<tr><td width="25%" valign="top">'.$langs->trans("FirstName").'</td>';
+	print '<td colspan="2">'.$fuser->firstname.'</td>';
+	print "</tr>\n";
+
+	print '</table><br>';
+
+}
+else
+{
+	print_barre_liste($langs->trans("ListeCP"), $page, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, "", $num);
 
-$nbaquis=$holiday->getCPforUser($user->id);
+	print '<div class="tabBar">';
+}
+
+
+$nbaquis=$holiday->getCPforUser($user_id);
 $nbdeduced=$holiday->getConfCP('nbHolidayDeducted');
 $nb_holiday = $nbaquis / $nbdeduced;
 print $langs->trans('SoldeCPUser',round($nb_holiday,2)).($nbdeduced != 1 ? ' ('.$nbaquis.' / '.$nbdeduced.')' : '');
@@ -223,13 +259,13 @@ print '<input class="flat" size="4" type="text" name="search_ref" value="'.$sear
 // DATE CREATE
 print '<td class="liste_titre" colspan="1" align="center">';
 print '<input class="flat" type="text" size="1" maxlength="2" name="month_create" value="'.$month_create.'">';
-$htmlother->select_year($year_create,'year_create',1, $min_year, $max_year);
+$formother->select_year($year_create,'year_create',1, $min_year, $max_year);
 print '</td>';
 
 // UTILISATEUR
 if($user->rights->holiday->lire_tous) {
     print '<td class="liste_titre" align="left">';
-    $html->select_users($search_employe,"search_employe",1,"",0,'');
+    $form->select_users($search_employe,"search_employe",1,"",0,'');
     print '</td>';
 } else {
     print '<td class="liste_titre">&nbsp;</td>';
@@ -246,7 +282,7 @@ if($user->rights->holiday->lire_tous){
     $validator = new UserGroup($db,$idGroupValid);
     $valideur = $validator->listUsersForGroup();
 
-    $html->select_users($search_valideur,"search_valideur",1,"",0,$valideur,'');
+    $form->select_users($search_valideur,"search_valideur",1,"",0,$valideur,'');
     print '</td>';
 } else {
     print '<td class="liste_titre">&nbsp;</td>';
@@ -255,13 +291,13 @@ if($user->rights->holiday->lire_tous){
 // DATE DEBUT
 print '<td class="liste_titre" colspan="1" align="center">';
 print '<input class="flat" type="text" size="1" maxlength="2" name="month_start" value="'.$month_start.'">';
-$htmlother->select_year($year_start,'year_start',1, $min_year, $max_year);
+$formother->select_year($year_start,'year_start',1, $min_year, $max_year);
 print '</td>';
 
 // DATE FIN
 print '<td class="liste_titre" colspan="1" align="center">';
 print '<input class="flat" type="text" size="1" maxlength="2" name="month_end" value="'.$month_end.'">';
-$htmlother->select_year($year_end,'year_end',1, $min_year, $max_year);
+$formother->select_year($year_end,'year_end',1, $min_year, $max_year);
 print '</td>';
 
 // DUREE
@@ -327,10 +363,13 @@ if($holiday_payes == '2')
 print '</table>';
 print '</form>';
 
-print '<br>';
-print '<div style="float: right; margin-top: 8px;">';
-print '<a href="./fiche.php?action=request" class="butAction">'.$langs->trans('AddCP').'</a>';
-print '</div>';
+if ($user_id == $user->id)
+{
+	print '<br>';
+	print '<div style="float: right; margin-top: 8px;">';
+	print '<a href="./fiche.php?action=request" class="butAction">'.$langs->trans('AddCP').'</a>';
+	print '</div>';
+}
 
 llxFooter();
 
diff --git a/htdocs/install/mysql/data/llx_c_tva.sql b/htdocs/install/mysql/data/llx_c_tva.sql
index 8b840baf39236c2019b65d395f4bec1e68e2329c..4e301564db8c532243f5b778421eb92fe4286799 100644
--- a/htdocs/install/mysql/data/llx_c_tva.sql
+++ b/htdocs/install/mysql/data/llx_c_tva.sql
@@ -67,6 +67,10 @@ insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values ( 2
 insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (141, 14,   '7','0','VAT standard rate',1);
 insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (142, 14,   '0','0','VAT Rate 0',1);
 
+-- CAMEROUN (id country=24)
+insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (241, 24, '19.25','0','VAT standard rate',1);
+insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (242, 24,     '0','0','VAT Rate 0',1);
+
 -- CHILE (id country=67)
 insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (671, 67,  '19','0','VAT standard rate',1);
 insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (672, 67,   '0','0','VAT Rate 0',1);
@@ -151,6 +155,10 @@ insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (17
 insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (1662, 166,  '15','0','VAT standard rate', 1);
 insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (1663, 166,   '0','0','VAT Rate 0', 1);
 
+-- NIGERIA (id country=169)
+insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (1692, 169,   '5','0','VAT standard rate', 1);
+insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (1693, 169,   '0','0','VAT Rate 0', 1);
+
 -- NORWAY (id country=173)
 insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (1731, 173,  '25','0','VAT standard rate', 1);
 insert into llx_c_tva(rowid,fk_pays,taux,recuperableonly,note,active) values (1732, 173,   '14','0','VAT reduced rate', 1);
diff --git a/htdocs/install/mysql/migration/3.3.0-3.4.0.sql b/htdocs/install/mysql/migration/3.3.0-3.4.0.sql
index 093265e217c1c5a388a19612677de2b3407ce652..f7fe723b9b657772c0ab557e341b8c2749a110f1 100755
--- a/htdocs/install/mysql/migration/3.3.0-3.4.0.sql
+++ b/htdocs/install/mysql/migration/3.3.0-3.4.0.sql
@@ -35,4 +35,13 @@ ALTER TABLE llx_user add COLUMN fk_user integer;
 
 -- margin on contracts
 alter table llx_contratdet add column fk_product_fournisseur_price integer after info_bits;
-alter table llx_contratdet add column buy_price_ht double(24,8) DEFAULT 0 after fk_product_fournisseur_price;
\ No newline at end of file
+alter table llx_contratdet add column buy_price_ht double(24,8) DEFAULT 0 after fk_product_fournisseur_price;
+
+-- serialised array, to store value of select list choices for example
+alter table llx_extrafields add column param text after pos;
+
+
+alter table llx_propal   CHANGE COLUMN fk_adresse_livraison fk_delivery_address integer;
+alter table llx_commande CHANGE COLUMN fk_adresse_livraison fk_delivery_address integer;
+alter table llx_don      CHANGE COLUMN adresse address text;
+
diff --git a/htdocs/install/mysql/tables/llx_adherent.sql b/htdocs/install/mysql/tables/llx_adherent.sql
index 3ab580b5de26e3dd6ae9a1da814be6963a039e2e..90727f92419839b21a68803f4949d69e2032f30c 100644
--- a/htdocs/install/mysql/tables/llx_adherent.sql
+++ b/htdocs/install/mysql/tables/llx_adherent.sql
@@ -39,7 +39,7 @@ create table llx_adherent
   morphy           varchar(3) NOT NULL, -- personne morale / personne physique
   societe          varchar(50),
   fk_soc           integer NULL,		-- Link to third party linked to member
-  adresse          text,
+  address          text,
   cp               varchar(30),
   ville            varchar(50),
   fk_departement   integer,
diff --git a/htdocs/install/mysql/tables/llx_commande.sql b/htdocs/install/mysql/tables/llx_commande.sql
index bc5312b1fe20fd98e5c3676ded0ceda0317a687b..0ef0eddb739a36ad965b6f6b7561506a75f30492 100644
--- a/htdocs/install/mysql/tables/llx_commande.sql
+++ b/htdocs/install/mysql/tables/llx_commande.sql
@@ -63,7 +63,7 @@ create table llx_commande
   date_livraison		date 	  default NULL,
   fk_availability		integer NULL,
   fk_input_reason		integer,
-  fk_adresse_livraison	integer,						-- delivery address (deprecated)
+  fk_delivery_address	integer,						-- delivery address (deprecated)
   import_key			varchar(14),
   extraparams			varchar(255)					-- for stock other parameters with json format
   
diff --git a/htdocs/install/mysql/tables/llx_don.sql b/htdocs/install/mysql/tables/llx_don.sql
index 60f977e886d14f5df216e7bf726a4a5ae9e468e6..d23d112ee1b12a09db8f9d9b00ba44cc1b2937f8 100644
--- a/htdocs/install/mysql/tables/llx_don.sql
+++ b/htdocs/install/mysql/tables/llx_don.sql
@@ -33,7 +33,7 @@ create table llx_don
   prenom          varchar(50),
   nom             varchar(50),
   societe         varchar(50),
-  adresse         text,
+  address         text,
   cp              varchar(30),
   ville           varchar(50),
   pays            varchar(50),
diff --git a/htdocs/install/mysql/tables/llx_propal.sql b/htdocs/install/mysql/tables/llx_propal.sql
index 9c4a440c23bcf49c388e110742f9eb724613afc2..2964e768e47fdc66a483b7b75ba0729354687909 100644
--- a/htdocs/install/mysql/tables/llx_propal.sql
+++ b/htdocs/install/mysql/tables/llx_propal.sql
@@ -65,6 +65,6 @@ create table llx_propal
   fk_input_reason		integer,
   import_key			varchar(14),
   extraparams			varchar(255),					-- for stock other parameters with json format
-  fk_adresse_livraison	integer							-- delivery address (deprecated)
+  fk_delivery_address	integer							-- delivery address (deprecated)
   
 )ENGINE=innodb;
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index 42924eb253f3b88fb29cb47354a34ef43a17ac0b..090064ab0ec101caa9e71b41c5c5befa7dea56f7 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -356,6 +356,7 @@ Boolean=Boolean (Checkbox)
 ExtrafieldPhone = Phone
 ExtrafieldPrice = Price
 ExtrafieldMail = Email
+ExtrafieldSelect = Select list
 LibraryToBuildPDF=Library used to build PDF
 WarningUsingFPDF=Warning: Your <b>conf.php</b> contains directive <b>dolibarr_pdf_force_fpdf=1</b>. This means you use the FPDF library to generate PDF files. This library is old and does not support a lot of features (Unicode, image transparency, cyrillic, arab and asiatic languages, ...), so you may experience errors during PDF generation.<br>To solve this and have a full support of PDF generation, please download <a href="http://www.tcpdf.org/" target="_blank">TCPDF library</a>, then comment or remove the line <b>$dolibarr_pdf_force_fpdf=1</b>, and add instead <b>$dolibarr_lib_TCPDF_PATH='path_to_TCPDF_dir'</b>   
 LocalTaxDesc=Some countries apply 2 or 3 taxes on each invoice line. If this is the case, choose type for second and third tax and its rate. Possible type are:<br>1 : local tax apply on products and services without vat (vat is not applied on local tax)<br>2 : local tax apply on products and services before vat (vat is calculated on amount + localtax)<br>3 : local tax apply on products without vat (vat is not applied on local tax)<br>4 : local tax apply on products before vat (vat is calculated on amount + localtax)<br>5 : local tax apply on services without vat (vat is not applied on local tax)<br>6 : local tax apply on services before vat (vat is calculated on amount + localtax)
diff --git a/htdocs/langs/en_US/errors.lang b/htdocs/langs/en_US/errors.lang
index 2c5f634fff6db198b28c4511bf1da53a5f7234fb..a4c5251bb696dc47cb846d1c40493361eb8b1f46 100644
--- a/htdocs/langs/en_US/errors.lang
+++ b/htdocs/langs/en_US/errors.lang
@@ -58,6 +58,7 @@ ErrorUploadBlockedByAddon=Upload blocked by a PHP/Apache plugin.
 ErrorFileSizeTooLarge=File size is too large.
 ErrorSizeTooLongForIntType=Size too long for int type (%s digits maximum)
 ErrorSizeTooLongForVarcharType=Size too long for string type (%s chars maximum)
+ErrorNoValueForSelectType=Please fill value for select list
 ErrorFieldCanNotContainSpecialCharacters=Field <b>%s</b> must not contains special characters.
 ErrorNoAccountancyModuleLoaded=No accountancy module activated
 ErrorExportDuplicateProfil=This profil name already exists for this export set.
diff --git a/htdocs/langs/en_US/holiday.lang b/htdocs/langs/en_US/holiday.lang
index 2b83b1fcb1d6829574d4eef4df2a69f72d290073..abf2b1dc514635a5248c1c01c101c925ef9150d7 100755
--- a/htdocs/langs/en_US/holiday.lang
+++ b/htdocs/langs/en_US/holiday.lang
@@ -26,7 +26,7 @@ SendRequestCP=Creating demand for holidays
 DelayToRequestCP=Applications for holidays must be made at least <b>%s day(s)</b> before them.
 MenuConfCP=Edit balance of holidays
 UpdateAllCP=Update the holidays
-SoldeCPUser=Your balance of holidays is <b>%s</b> days.
+SoldeCPUser=Holidays balance is <b>%s</b> days.
 ErrorEndDateCP=You must select an end date greater than the start date.
 ErrorSQLCreateCP=An SQL error occurred during the creation:
 ErrorIDFicheCP=An error has occurred, the request for holidays does not exist.
diff --git a/htdocs/langs/en_US/users.lang b/htdocs/langs/en_US/users.lang
index c6f9ba9787408d01da2df8afe02247e2cce2cd48..e9a49faebea03ae120779bacbcedb6389a080233 100644
--- a/htdocs/langs/en_US/users.lang
+++ b/htdocs/langs/en_US/users.lang
@@ -113,4 +113,5 @@ NameToCreate=Name of third party to create
 YourRole=Your roles
 YourQuotaOfUsersIsReached=Your quota of active users is reached !
 NbOfUsers=Nb of users
-DontDowngradeSuperAdmin=Only a superadmin can downgrade a superadmin
\ No newline at end of file
+DontDowngradeSuperAdmin=Only a superadmin can downgrade a superadmin
+HierarchicalResponsible=Hierarchical responsible
\ No newline at end of file
diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang
index 802bbb28191f5cb6fb19ff229d6d71cf09bdb674..b471e19b473a3a11f3bde231921b9be06686ec78 100644
--- a/htdocs/langs/fr_FR/admin.lang
+++ b/htdocs/langs/fr_FR/admin.lang
@@ -283,7 +283,7 @@ GenericMaskCodes3= Tout autre caractère dans le masque sera laissé inchangé.<
 GenericMaskCodes4a= <u>Exemple sur la 99eme %s du tiers LaCompanie faite le 31/03/2007:</u><br>
 GenericMaskCodes4b= <u>Exemple sur un tiers créé le 31/03/2007:</u><br>
 GenericMaskCodes4c= <u>Exemple sur un produit/service créé le 31/03/2007:</u><br>
-GenericMaskCodes5= <b>ABC{yy}{mm}-{000000}</b> donnera <b>ABC0703-000099</b><br><b>{0000+100}-XXX/{dd}/YYY</b> donnera <b>0199-XXX/31/YYY</b>
+GenericMaskCodes5= <b>ABC{yy}{mm}-{000000}</b> donnera <b>ABC0703-000099</b><br><b>{0000+100}-XXX-{dd}-YYY</b> donnera <b>0199-XXX-31-YYY</b>
 GenericNumRefModelDesc= Renvoie un numéro personnalisable selon un masque à définir.
 ServerAvailableOnIPOrPort= Serveur disponible à l'adresse <b>%s</b> sur le port <b>%s</b>
 ServerNotAvailableOnIPOrPort= Serveur non disponible à l'adresse <b>%s</b> sur le port <b>%s</b>
@@ -351,6 +351,7 @@ Boolean=Booleen (Checkbox)
 ExtrafieldPhone = Téléphone
 ExtrafieldPrice = Prix
 ExtrafieldMail = Email
+ExtrafieldSelect = Liste de sélection
 LibraryToBuildPDF=Bibliothèque utilisée pour la génération des PDF
 WarningUsingFPDF=Attention: Votre fichier <b>conf.php</b> contient la directive <b>dolibarr_pdf_force_fpdf=1</b>. Cela signifie que vous utilisez la librairie FPDF pour générer vos fichiers PDF. Cette librairie est ancienne et ne couvre pas de nombreuses fonctionnalitée (Unicode, transparence des images, langues cyrillic, arabes ou asiatiques...), aussi vous pouvez rencontrez des problèmes durant la génération des PDF.<br>Pour résoudre cela et avoir un support complet de PDF, vous pouvez télécharger la <a href="http://www.tcpdf.org/" target="_blank">librairie TCPDF</a> puis commenter ou supprimer la ligne <b>$dolibarr_pdf_force_fpdf=1</b>, et ajouter à la place <b>$dolibarr_lib_TCPDF_PATH='chemin_vers_TCPDF'</b>   
 LocalTaxDesc=Certains pays appliquent 2 voir 3 taux sur chaque ligne de facture. Si c'est le cas, choisissez le type du deuxième et troisième taux et sa valeur. Les types possibles sont:<br>1 : taxe locale sur les produits et services hors tva (la tva n'est pas appliquée sur la taxe locale)<br>2 : taxe locale sur les produits et services avant tva (la tva est appliquée sur le montant + la taxe locale)<br>3 : taxe locale uniquement sur les produits hors tva (la tva n'est pas appliquée sur la taxe locale)<br>4 : taxe locale uniquement sur les produits avant tva (la tva est appliquée sur le montant + la taxe locale)<br>5 : taxe locale uniquement sur les services hors tva (la tva n'est pas appliquée sur la taxe locale)<br>6 : taxe locale uniquement sur les service avant tva (la tva est appliquée sur le montant + la taxe locale)
diff --git a/htdocs/langs/fr_FR/errors.lang b/htdocs/langs/fr_FR/errors.lang
index 99112a0db96ac2ae2e4eb6a0de11fae6ca38a865..3c7d1e275ed343e6aeb8ce944ba96c89981ea10f 100644
--- a/htdocs/langs/fr_FR/errors.lang
+++ b/htdocs/langs/fr_FR/errors.lang
@@ -59,6 +59,7 @@ ErrorUploadBlockedByAddon=Upload bloqué par un plugin PHP/Apache.
 ErrorFileSizeTooLarge=La taille du fichier est trop grande.
 ErrorSizeTooLongForIntType=Longueur de champ trop longue pour le type int (%s chiffres maximum)
 ErrorSizeTooLongForVarcharType=Longueur de champ trop longue pour le type chaine (%s caractères maximum)
+ErrorNoValueForSelectType=Les valeurs de la liste doivent être renseignées
 ErrorFieldCanNotContainSpecialCharacters=Le champ <b>%s</b> ne peut contenir de caractères spéciaux.
 ErrorNoAccountancyModuleLoaded=Aucun module de comptabilité activé
 ErrorExportDuplicateProfil=Ce nom de profil existe déjà pour ce lot d'export.
diff --git a/htdocs/langs/fr_FR/holiday.lang b/htdocs/langs/fr_FR/holiday.lang
index 60c7594fe9094df64226b62f5b07529262f4f955..ed8d339af756b9b00d9837d89c7b68f24daf9e45 100644
--- a/htdocs/langs/fr_FR/holiday.lang
+++ b/htdocs/langs/fr_FR/holiday.lang
@@ -26,7 +26,7 @@ SendRequestCP=Envoyer la demande de congés
 DelayToRequestCP=Les demandes de congés doivent être faites au moins <b>%s jours</b> avant la date</b> de ceux-ci.
 MenuConfCP=Mettre à jour solde
 UpdateAllCP=Mettre à jour les congés
-SoldeCPUser=Votre solde de congés est de <b>%s jours</b>.
+SoldeCPUser=Solde de congés: <b>%s jours</b>.
 ErrorEndDateCP=Vous devez choisir une date de fin supérieur à la date de début.
 ErrorSQLCreateCP=Une erreur SQL est survenue durant la création :
 ErrorIDFicheCP=Une erreur est survenue, cette demande de congés n'existe pas.
diff --git a/htdocs/langs/fr_FR/users.lang b/htdocs/langs/fr_FR/users.lang
index 40a6f7fb1fe831387fd67755476fcd690c8eb396..95ff8a405fcb567a415189fcae0569dade80c257 100644
--- a/htdocs/langs/fr_FR/users.lang
+++ b/htdocs/langs/fr_FR/users.lang
@@ -113,4 +113,5 @@ NameToCreate=Nom du tiers à créer
 YourRole=Vos rôles
 YourQuotaOfUsersIsReached=Votre quota d'utilisateurs actifs est atteint !
 NbOfUsers=Nb d'utilisateurs
-DontDowngradeSuperAdmin=Seul un superadmin peut rétrograder un superadmin
\ No newline at end of file
+DontDowngradeSuperAdmin=Seul un superadmin peut rétrograder un superadmin
+HierarchicalResponsible=Responsable hierarchique
\ No newline at end of file
diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php
index 8724671c20d9bff0cebe83e04ff7cd94157496c8..fc0c08e736f9d54da710bff86962e7b07e6395d7 100644
--- a/htdocs/product/class/product.class.php
+++ b/htdocs/product/class/product.class.php
@@ -2185,10 +2185,10 @@ class Product extends CommonObject
 				$this->res[]= array($compl_path.$nom_pere,$desc_pere);
 			}
 
-			// Recursive call
-			if (is_array($desc_pere)>2)
+			// Recursive call if child is an array
+			if (is_array($desc_pere[0]))
 			{
-				$this ->fetch_prod_arbo($desc_pere, $nom_pere." -> ", $desc_pere[1]*$multiply, $level+1);
+				$this ->fetch_prod_arbo($desc_pere[0], $nom_pere." -> ", $desc_pere[1]*$multiply, $level+1);
 			}
 		}
 	}
diff --git a/htdocs/societe/admin/societe_extrafields.php b/htdocs/societe/admin/societe_extrafields.php
index cbac832ee3b4ef9158d32db7f1f6222d55d67662..66957c0314adbc70aa1fe3eb33d7888770295587 100755
--- a/htdocs/societe/admin/societe_extrafields.php
+++ b/htdocs/societe/admin/societe_extrafields.php
@@ -84,6 +84,7 @@ $extrafields->fetch_name_optionals_label($elementtype);
 print "<table summary=\"listofattributes\" class=\"noborder\" width=\"100%\">";
 
 print '<tr class="liste_titre">';
+print '<td align="center">'.$langs->trans("Position").'</td>';
 print '<td>'.$langs->trans("Label").'</td>';
 print '<td>'.$langs->trans("AttributeCode").'</td>';
 print '<td>'.$langs->trans("Type").'</td>';
@@ -98,6 +99,7 @@ foreach($extrafields->attribute_type as $key => $value)
 {
     $var=!$var;
     print "<tr ".$bc[$var].">";
+    print "<td>".$extrafields->attribute_pos[$key]."</td>\n";
     print "<td>".$extrafields->attribute_label[$key]."</td>\n";
     print "<td>".$key."</td>\n";
     print "<td>".$type2label[$extrafields->attribute_type[$key]]."</td>\n";
diff --git a/htdocs/theme/amarok/style.css.php b/htdocs/theme/amarok/style.css.php
index 115a63d7e66abc805742e1fc427bc17de5ff319b..71a1c47b3756379346a69597e3a85069d84b6fbd 100755
--- a/htdocs/theme/amarok/style.css.php
+++ b/htdocs/theme/amarok/style.css.php
@@ -1168,7 +1168,7 @@ div.error {
 
 .product_line_stock_ok { color: #002200; }
 .product_line_stock_too_low { color: #664400; }
- 
+
 .fieldrequired {
 	font-weight:bold;
 	color:#333333;
@@ -1469,6 +1469,9 @@ table.cal_event {
 	margin-bottom:1px;
 }
 
+ul.cal_event       { padding-right: 2px; padding-top: 1px; border: none; list-style-type: none; margin: 0 auto; -webkit-padding-start: 2px !important; }
+li.cal_event       { border: none; list-style-type: none; }
+
 .cal_event a:link {
 	color:#232323;
 	font-size:11px;
diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php
index 0225c9d6cb87900fb1d2c060cdcd01cf77a22b5f..6e51e2d257e157c367ac2ae0977c0b93c655f006 100644
--- a/htdocs/theme/eldy/style.css.php
+++ b/htdocs/theme/eldy/style.css.php
@@ -2059,12 +2059,19 @@ td.hidden {
 .cal_current_month { background: #FFFFFF; border: solid 1px #C0C0C0; padding-<?php print $left; ?>: 2px; padding-<?php print $right; ?>: 1px; padding-top: 0px; padding-bottom: 0px; }
 .cal_today         { background: #FFFFFF; border: solid 2px #6C7C7B; padding-<?php print $left; ?>: 2px; padding-<?php print $right; ?>: 1px; padding-top: 0px; padding-bottom: 0px; }
 .cal_past          { }
-table.cal_event    { border-collapse: collapse; margin-bottom: 1px; -webkit-border-radius: 6px; border-radius: 6px; }
-table.cal_event td { border: 0px; padding-<?php print $left; ?>: 0px; padding-<?php print $right; ?>: 2px; padding-top: 0px; padding-bottom: 0px; }
+table.cal_event    { border: none; border-collapse: collapse; margin-bottom: 1px; -webkit-border-radius: 6px; border-radius: 6px;
+						-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.25);
+						moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.25);
+						box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.25);
+						background: -webkit-gradient(linear, left top, left bottom, from(#006aac), to(#00438d));
+						}
+table.cal_event td { border: none; padding-<?php print $left; ?>: 2px; padding-<?php print $right; ?>: 2px; padding-top: 0px; padding-bottom: 0px; }
+ul.cal_event       { padding-right: 2px; padding-top: 1px; border: none; list-style-type: none; margin: 0 auto; -webkit-padding-start: 2px !important; }
+li.cal_event       { border: none; list-style-type: none; }
 .cal_event a:link    { color: #111111; font-size: 11px; font-weight: normal !important; }
 .cal_event a:visited { color: #111111; font-size: 11px; font-weight: normal !important; }
 .cal_event a:active  { color: #111111; font-size: 11px; font-weight: normal !important; }
-.cal_event a:hover   { color: #111111; font-size: 11px; font-weight: normal !important; }
+.cal_event a:hover   { color: #111111; font-size: 11px; font-weight: normal !important; color:rgba(255,255,255,.75); }
 
 
 /* ============================================================================== */
diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php
index 5d0fd96f4bc62361187287e59a6805de6a6b926a..59641c1bbc15f05a03ed53b0a31569a9603f0d4a 100644
--- a/htdocs/user/class/user.class.php
+++ b/htdocs/user/class/user.class.php
@@ -154,13 +154,13 @@ class User extends CommonObject
 		$sql.= " u.ref_int, u.ref_ext";
 		$sql.= " FROM ".MAIN_DB_PREFIX."user as u";
 
-		if (! empty($conf->multicompany->enabled) && ! empty($conf->multicompany->transverse_mode))
+		if ((empty($conf->multicompany->enabled) || empty($conf->multicompany->transverse_mode)) && (! empty($user->entity)))
 		{
-			$sql.= " WHERE u.entity IS NOT NULL";
+			$sql.= " WHERE u.entity IN (0,".$conf->entity.")";
 		}
 		else
 		{
-			$sql.= " WHERE u.entity IN (0,".$conf->entity.")";
+			$sql.= " WHERE u.entity IS NOT NULL";
 		}
 
 		if ($sid)    // permet une recherche du user par son SID ActiveDirectory ou Samba
@@ -1140,6 +1140,7 @@ class User extends CommonObject
 		$sql.= ", note = '".$this->db->escape($this->note)."'";
 		$sql.= ", photo = ".($this->photo?"'".$this->db->escape($this->photo)."'":"null");
 		$sql.= ", openid = ".($this->openid?"'".$this->db->escape($this->openid)."'":"null");
+		$sql.= ", fk_user = ".($this->fk_user > 0?"'".$this->db->escape($this->fk_user)."'":"null");
 		$sql.= ", entity = '".$this->entity."'";
 		$sql.= " WHERE rowid = ".$this->id;
 
diff --git a/htdocs/user/fiche.php b/htdocs/user/fiche.php
index cf0e0170c94b45faa6712c119639e26124b98e0c..4da27c64a55c59c67fa8e6d1816bfe9ae54c0ecf 100644
--- a/htdocs/user/fiche.php
+++ b/htdocs/user/fiche.php
@@ -196,11 +196,6 @@ if ($action == 'add' && $canadduser)
         	}
         }
 
-        // FIXME external module
-        $object->webcal_login	= $_POST["webcal_login"];
-        $object->phenix_login	= $_POST["phenix_login"];
-        $object->phenix_pass	= $_POST["phenix_pass"];
-
         // If multicompany is off, admin users must all be on entity 0.
         if (! empty($conf->multicompany->enabled))
         {
@@ -332,6 +327,7 @@ if ($action == 'update' && ! $_POST["cancel"])
             $object->job		= GETPOST("job");
             $object->signature	= GETPOST("signature");
             $object->openid		= GETPOST("openid");
+            $object->fk_user    = GETPOST("fk_user")>0?GETPOST("fk_user"):0;
 
             // Get extra fields
             foreach($_POST as $key => $value)
@@ -342,11 +338,6 @@ if ($action == 'update' && ! $_POST["cancel"])
             	}
             }
 
-            // FIXME external module
-            $object->webcal_login	= $_POST["webcal_login"];
-            $object->phenix_login	= $_POST["phenix_login"];
-            $object->phenix_pass	= $_POST["phenix_pass"];
-
             if (! empty($conf->multicompany->enabled))
             {
             	if (! empty($_POST["superadmin"]))
@@ -828,21 +819,6 @@ if (($action == 'create') || ($action == 'adduserldap'))
         print "</td></tr>\n";
     }
 
-    //Multicompany
-    if (! empty($conf->multicompany->enabled))
-    {
-        if (empty($conf->multicompany->transverse_mode) && $conf->entity == 1 && $user->admin && ! $user->entity)
-        {
-            print "<tr>".'<td valign="top">'.$langs->trans("Entity").'</td>';
-            print "<td>".$mc->select_entities($conf->entity);
-            print "</td></tr>\n";
-        }
-        else
-        {
-            print '<input type="hidden" name="entity" value="'.$conf->entity.'" />';
-        }
-    }
-
     // Type
     print '<tr><td valign="top">'.$langs->trans("Type").'</td>';
     print '<td>';
@@ -911,6 +887,28 @@ if (($action == 'create') || ($action == 'adduserldap'))
     print '<textarea rows="'.ROWS_5.'" cols="90" name="signature">'.GETPOST('signature').'</textarea>';
     print '</td></tr>';
 
+    // Multicompany
+    if (! empty($conf->multicompany->enabled))
+    {
+        if (empty($conf->multicompany->transverse_mode) && $conf->entity == 1 && $user->admin && ! $user->entity)
+        {
+            print "<tr>".'<td valign="top">'.$langs->trans("Entity").'</td>';
+            print "<td>".$mc->select_entities($conf->entity);
+            print "</td></tr>\n";
+        }
+        else
+        {
+            print '<input type="hidden" name="entity" value="'.$conf->entity.'" />';
+        }
+    }
+
+    // Hierarchy
+    print '<tr><td valign="top">'.$langs->trans("HierarchicalResponsible").'</td>';
+    print '<td>';
+    print $form->select_dolusers($object->fk_user,'fk_user',1,array($object->id),0,'',0,$conf->entity);
+    print '</td>';
+    print "</tr>\n";
+
     // Note
     print '<tr><td valign="top">';
     print $langs->trans("Note");
@@ -936,23 +934,6 @@ if (($action == 'create') || ($action == 'adduserldap'))
     	}
     }
 
-    // Module Webcalendar
-    // TODO external module
-    if (! empty($conf->webcalendar->enabled))
-    {
-        print "<tr>".'<td valign="top">'.$langs->trans("LoginWebcal").'</td>';
-        print '<td><input size="30" type="text" name="webcal_login" value="'.$_POST["webcal_login"].'"></td></tr>';
-    }
-
-    // Module Phenix
-    // TODO external module
-    if (! empty($conf->phenix->enabled))
-    {
-        print "<tr>".'<td valign="top">'.$langs->trans("LoginPenix").'</td>';
-        print '<td><input size="30" type="text" name="phenix_login" value="'.$_POST["phenix_login"].'"></td></tr>';
-        print "<tr>".'<td valign="top">'.$langs->trans("PassPenix").'</td>';
-        print '<td><input size="30" type="text" name="phenix_pass" value="'.$_POST["phenix_pass"].'"></td></tr>';
-    }
  	print "</table>\n";
 
     print '<center><br><input class="button" value="'.$langs->trans("CreateUser").'" name="create" type="submit"></center>';
@@ -967,7 +948,7 @@ else
     /*                                                                            */
     /* ************************************************************************** */
 
-    if ($id)
+    if ($id > 0)
     {
         $object->fetch($id);
         if ($res < 0) { dol_print_error($db,$object->error); exit; }
@@ -1076,6 +1057,8 @@ else
          */
         if ($action != 'edit')
         {
+            $rowspan=16;
+
             print '<table class="border" width="100%">';
 
             // Ref
@@ -1085,13 +1068,9 @@ else
             print '</td>';
             print '</tr>'."\n";
 
-            $rowspan=15;
             if (isset($conf->authmode) && preg_match('/myopenid/',$conf->authmode)) $rowspan++;
             if (! empty($conf->societe->enabled)) $rowspan++;
             if (! empty($conf->adherent->enabled)) $rowspan++;
-            if (! empty($conf->webcalendar->enabled)) $rowspan++;	// TODO external module
-            if (! empty($conf->phenix->enabled)) $rowspan+=2;		// TODO external module
-
 
             // Lastname
             print '<tr><td valign="top">'.$langs->trans("Lastname").'</td>';
@@ -1176,22 +1155,6 @@ else
             }
             print '</td></tr>'."\n";
 
-            // Multicompany
-            if (! empty($conf->multicompany->enabled) && empty($conf->multicompany->transverse_mode) && $conf->entity == 1 && $user->admin && ! $user->entity)
-            {
-            	print '<tr><td valign="top">'.$langs->trans("Entity").'</td><td width="75%" class="valeur">';
-            	if ($object->admin && ! $object->entity)
-            	{
-            		print $langs->trans("AllEntities");
-            	}
-            	else
-            	{
-            		$mc->getInfo($object->entity);
-            		print $mc->label;
-            	}
-            	print "</td></tr>\n";
-            }
-
             // Type
             print '<tr><td valign="top">'.$langs->trans("Type").'</td><td>';
             $type=$langs->trans("Internal");
@@ -1200,7 +1163,7 @@ else
             if ($object->ldap_sid) print ' ('.$langs->trans("DomainUser").')';
             print '</td></tr>'."\n";
 
-            // ldap sid
+            // Ldap sid
             if ($object->ldap_sid)
             {
             	print '<tr><td valign="top">'.$langs->trans("Type").'</td><td>';
@@ -1232,8 +1195,20 @@ else
             print '<tr><td valign="top">'.$langs->trans('Signature').'</td><td>';
             print dol_textishtml($object->signature)?$object->signature:dol_nl2br($object->signature,1,false);
             print "</td></tr>\n";
-
-            // Statut
+
+            // Hierarchy
+            print '<tr><td valign="top">'.$langs->trans("HierarchicalResponsible").'</td>';
+            print '<td>';
+            if (empty($object->fk_user)) print $langs->trans("None");
+            else {
+            	$huser=new User($db);
+            	$huser->fetch($object->fk_user);
+            	print $huser->getNomUrl(1);
+            }
+            print '</td>';
+            print "</tr>\n";
+
+            // Status
             print '<tr><td valign="top">'.$langs->trans("Status").'</td>';
             print '<td>';
             print $object->getLibStatut(4);
@@ -1256,29 +1231,6 @@ else
                 print "</tr>\n";
             }
 
-            // Module Webcalendar
-            // TODO external module
-            if (! empty($conf->webcalendar->enabled))
-            {
-                $langs->load("other");
-                print '<tr><td valign="top">'.$langs->trans("LoginWebcal").'</td>';
-                print '<td>'.$object->webcal_login.'&nbsp;</td>';
-                print '</tr>'."\n";
-            }
-
-            // Module Phenix
-            // TODO external module
-            if (! empty($conf->phenix->enabled))
-            {
-                $langs->load("other");
-                print '<tr><td valign="top">'.$langs->trans("LoginPhenix").'</td>';
-                print '<td>'.$object->phenix_login.'&nbsp;</td>';
-                print "</tr>\n";
-                print '<tr><td valign="top">'.$langs->trans("PassPhenix").'</td>';
-                print '<td>'.preg_replace('/./i','*',$object->phenix_pass_crypted).'&nbsp;</td>';
-                print '</tr>'."\n";
-            }
-
             // Company / Contact
             if (! empty($conf->societe->enabled))
             {
@@ -1327,6 +1279,22 @@ else
                 print '</tr>'."\n";
             }
 
+            // Multicompany
+            if (! empty($conf->multicompany->enabled) && empty($conf->multicompany->transverse_mode) && $conf->entity == 1 && $user->admin && ! $user->entity)
+            {
+            	print '<tr><td valign="top">'.$langs->trans("Entity").'</td><td width="75%" class="valeur">';
+            	if ($object->admin && ! $object->entity)
+            	{
+            		print $langs->trans("AllEntities");
+            	}
+            	else
+            	{
+            		$mc->getInfo($object->entity);
+            		print $mc->label;
+            	}
+            	print "</td></tr>\n";
+            }
+
           	// Other attributes
 			$parameters=array('colspan' => ' colspan="2"');
 			$reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action);    // Note that $action and $object may have been modified by hook
@@ -1354,7 +1322,7 @@ else
 
             print '<div class="tabsAction">';
 
-            if ($caneditfield && ((empty($conf->multicompany->enabled) && $object->entity == $user->entity) || ! $user->entity || ($object->entity == $conf->entity) || ($conf->multicompany->transverse_mode && $conf->entity == 1)))
+            if ($caneditfield && (empty($conf->multicompany->enabled) || ! $user->entity || ($object->entity == $conf->entity) || ($conf->multicompany->transverse_mode && $conf->entity == 1)))
             {
                 if (! empty($conf->global->MAIN_ONLY_LOGIN_ALLOWED))
                 {
@@ -1366,7 +1334,7 @@ else
                 }
             }
             elseif ($caneditpassword && ! $object->ldap_sid &&
-            ((empty($conf->multicompany->enabled) && $object->entity == $user->entity) || ! $user->entity || ($object->entity == $conf->entity) || ($conf->multicompany->transverse_mode && $conf->entity == 1)))
+            (empty($conf->multicompany->enabled) || ! $user->entity || ($object->entity == $conf->entity) || ($conf->multicompany->transverse_mode && $conf->entity == 1)))
             {
                 print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&amp;action=edit">'.$langs->trans("EditPassword").'</a>';
             }
@@ -1565,18 +1533,16 @@ else
 
         if ($action == 'edit' && ($canedituser || ($user->id == $object->id)))
         {
-            print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'" method="POST" name="updateuser" enctype="multipart/form-data">';
+            $rowspan=14;
+
+        	print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'" method="POST" name="updateuser" enctype="multipart/form-data">';
             print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
             print '<input type="hidden" name="action" value="update">';
             print '<input type="hidden" name="entity" value="'.$object->entity.'">';
             print '<table width="100%" class="border">';
 
-            $rowspan=13;
-
             if (! empty($conf->societe->enabled)) $rowspan++;
             if (! empty($conf->adherent->enabled)) $rowspan++;
-            if (! empty($conf->webcalendar->enabled)) $rowspan++;	// TODO external module
-            if (! empty($conf->phenix->enabled)) $rowspan+=2;		// TODO external module
 
             print '<tr><td width="25%" valign="top">'.$langs->trans("Ref").'</td>';
             print '<td colspan="2">';
@@ -1748,21 +1714,6 @@ else
                 print '</td></tr>';
             }
 
-            // Multicompany
-            if (! empty($conf->multicompany->enabled))
-            {
-            	if (empty($conf->multicompany->transverse_mode) && $conf->entity == 1 && $user->admin && ! $user->entity)
-            	{
-            		print "<tr>".'<td valign="top">'.$langs->trans("Entity").'</td>';
-            		print "<td>".$mc->select_entities($object->entity);
-            		print "</td></tr>\n";
-            	}
-            	else
-            	{
-            		print '<input type="hidden" name="entity" value="'.$conf->entity.'" />';
-            	}
-            }
-
            	// Type
            	print '<tr><td width="25%" valign="top">'.$langs->trans("Type").'</td>';
            	print '<td>';
@@ -1843,7 +1794,7 @@ else
             print '<td>';
             print '<textarea name="signature" rows="5" cols="90">'.dol_htmlentitiesbr_decode($object->signature).'</textarea>';
             print '</td></tr>';
-
+
             // openid
             if (isset($conf->authmode) && preg_match('/myopenid/',$conf->authmode))
             {
@@ -1861,41 +1812,34 @@ else
                 print '</td></tr>';
             }
 
-            // Statut
+            // Hierarchy
+            print '<tr><td valign="top">'.$langs->trans("HierarchicalResponsible").'</td>';
+            print '<td>';
+            print $form->select_dolusers($object->fk_user,'fk_user',1,array($object->id),0,'',0,$object->entity);
+            print '</td>';
+            print "</tr>\n";
+
+            // Status
             print '<tr><td valign="top">'.$langs->trans("Status").'</td>';
             print '<td>';
             print $object->getLibStatut(4);
             print '</td></tr>';
 
-            // Module Webcalendar
-            // TODO external module
-            if (! empty($conf->webcalendar->enabled))
-            {
-                $langs->load("other");
-                print "<tr>".'<td valign="top">'.$langs->trans("LoginWebcal").'</td>';
-                print '<td>';
-                if ($caneditfield) print '<input size="30" type="text" class="flat" name="webcal_login" value="'.$object->webcal_login.'">';
-                else print $object->webcal_login;
-                print '</td></tr>';
-            }
-
-            // Module Phenix
-            // TODO external module
-            if (! empty($conf->phenix->enabled))
-            {
-                $langs->load("other");
-                print "<tr>".'<td valign="top">'.$langs->trans("LoginPhenix").'</td>';
-                print '<td>';
-                if ($caneditfield) print '<input size="30" type="text" class="flat" name="phenix_login" value="'.$object->phenix_login.'">';
-                else print $object->phenix_login;
-                print '</td></tr>';
-                print "<tr>".'<td valign="top">'.$langs->trans("PassPhenix").'</td>';
-                print '<td>';
-                if ($caneditfield) print '<input size="30" type="password" class="flat" name="phenix_pass" value="'.$object->phenix_pass_crypted.'">';
-                else print preg_replace('/./i','*',$object->phenix_pass_crypted);
-                print '</td></tr>';
-            }
-
+            // Multicompany
+            if (! empty($conf->multicompany->enabled))
+            {
+            	if (empty($conf->multicompany->transverse_mode) && $conf->entity == 1 && $user->admin && ! $user->entity)
+            	{
+            		print "<tr>".'<td valign="top">'.$langs->trans("Entity").'</td>';
+            		print "<td>".$mc->select_entities($object->entity);
+            		print "</td></tr>\n";
+            	}
+            	else
+            	{
+            		print '<input type="hidden" name="entity" value="'.$conf->entity.'" />';
+            	}
+            }
+
             // Company / Contact
             if (! empty($conf->societe->enabled))
             {