diff --git a/ChangeLog b/ChangeLog
index db9fc3b9f8eb104f790a5571ab58426d2e120320..ab1fe32aa8f017868da0055fec4676f6b6f8dd1a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -27,6 +27,7 @@ For users:
 - New: [ task #748 ] Add a link "Dolibarr" into left menu
 - New: Script email_unpaid_invoices_to_representative accepts now a parameter test
   and a delay.
+- New: Can define a different clicktodial setup per user.
 - First change to prepare feature click to print for PDF.
   
 For translators:
diff --git a/dev/finddosfiles.sh b/dev/finddosfiles.sh
deleted file mode 100755
index f77859ba1eaf7c043a80995ca40740d15d2c5586..0000000000000000000000000000000000000000
--- a/dev/finddosfiles.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/sh
-#------------------------------------------------------
-# Script to find files that are not Unix encoded
-#
-# Laurent Destailleur - eldy@users.sourceforge.net
-#------------------------------------------------------
-# Usage: finddosfiles.sh
-#------------------------------------------------------
-
-# To detec
-find . -type f -iname "*.php"  -exec file "{}" + | grep CRLF
-
-# To convert
-#find . -type f -iname "*.php"  -exec dos2unix "{}" +;
-
diff --git a/dev/findutf8bom.sh b/dev/findutf8bom.sh
deleted file mode 100755
index b7e290fec84cb38b361d7f2bbe0d74b5c968ba4b..0000000000000000000000000000000000000000
--- a/dev/findutf8bom.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-#
-# Checks if files contains UTF-8 BOM
-# in dolibarr source tree excluding
-# git repository, custom modules and incuded libraries
-#
-# Raphaël Doursenaud - rdoursenaud@gpcsolutions.fr
-grep -rlI \
---exclude-dir='.git' --exclude-dir='includes' --exclude-dir='custom' \
-$'\xEF\xBB\xBF' .
diff --git a/dev/fixdosfiles.sh b/dev/fixdosfiles.sh
new file mode 100755
index 0000000000000000000000000000000000000000..ac4a305834c697f4df77845a6a343888dacccc7d
--- /dev/null
+++ b/dev/fixdosfiles.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+#------------------------------------------------------
+# Script to find files that are not Unix encoded
+#
+# Laurent Destailleur - eldy@users.sourceforge.net
+#------------------------------------------------------
+# Usage: fixdosfiles.sh [list|fix]
+#------------------------------------------------------
+
+# Syntax
+if [ "x$1" != "xlist" -a "x$1" != "xfix" ]
+then
+	echo "Usage: fixdosfiles.sh [list|fix]"
+fi
+
+# To detec
+if [ "x$1" = "xlist" ]
+then
+	find . -iname "*.php" -o -iname "*.sh" -o -iname "*.pl" -o -iname "*.lang" -o -iname "*.txt" -exec file "{}" + | grep -v 'htdocs\/includes' | grep CRLF
+fi
+
+# To convert
+if [ "x$1" = "xfix" ]
+then
+	for fic in `find . -iname "*.php" -o -iname "*.sh" -o -iname "*.pl" -o -iname "*.lang" -o -iname "*.txt" -exec file "{}" + | grep -v 'htdocs\/includes' | grep CRLF | awk -F':' '{ print $1 }' `
+	do
+		echo "Fix file $fic"
+		dos2unix $fic
+	done;
+fi
diff --git a/dev/fixutf8bomfiles.sh b/dev/fixutf8bomfiles.sh
new file mode 100755
index 0000000000000000000000000000000000000000..058c1c8a48326df00ed98a5e4ec3f2361a9d4508
--- /dev/null
+++ b/dev/fixutf8bomfiles.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+#
+# Checks of fix files contains UTF-8 BOM in dolibarr source tree,
+# excluding git repository, custom modules and included libraries.
+#
+# Raphaël Doursenaud - rdoursenaud@gpcsolutions.fr
+# Laurent Destailleur  eldy@users.sourceforge.net
+#------------------------------------------------------
+# Usage: fixutf8bomfiles.sh [list|fix]
+#------------------------------------------------------
+
+# Syntax
+if [ "x$1" != "xlist" -a "x$1" != "xfix" ]
+then
+	echo "Usage: fixutf8bomfiles.sh [list|fix]"
+fi
+
+# To detec
+if [ "x$1" = "xlist" ]
+then
+	#find . -iname '*.php' -print0 -o -iname '*.sh' -print0 -o -iname '*.pl' -print0 -o -iname '*.lang' -print0 -o -iname '*.txt' -print0 | xargs -0 awk '/^\xEF\xBB\xBF/ {print FILENAME} {nextfile}'
+	grep -rlIZ --include='*.php' --include='*.sh' --include='*.pl' --include='*.lang' --include='*.txt' --exclude-dir='.git' --exclude-dir='includes' --exclude-dir='custom' . . | xargs -0 awk '/^\xEF\xBB\xBF/ {print FILENAME} {nextfile}'
+fi
+
+# To convert
+if [ "x$1" = "xfix" ]
+then
+	for fic in `grep -rlIZ --include='*.php' --include='*.sh' --include='*.pl' --include='*.lang' --include='*.txt' --exclude-dir='.git' --exclude-dir='includes' --exclude-dir='custom' . . | xargs -0 awk '/^\xEF\xBB\xBF/ {print FILENAME} {nextfile}'`
+	do
+		echo "Fixing $fic"
+		sed -i '1s/^\xEF\xBB\xBF//' $fic
+	done;
+fi
diff --git a/dev/removeutf8bom.sh b/dev/removeutf8bom.sh
deleted file mode 100755
index 54924c51d494be15559e1c63979f2ad16ae508e2..0000000000000000000000000000000000000000
--- a/dev/removeutf8bom.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/sh
-#
-# Removes UTF-8 BOM from a file list on STDIN
-# Use by piping the output of a findutf8bom script
-#
-# Raphaël Doursenaud - rdoursenaud@gpcsolutions.fr
-#
-# Example:
-# cd dirwithfiles
-# ls | /path/dev/removeutf8bom.sh
-
-while read f; do
-	echo "Fixing $f"
-	sed -i '1s/^\xEF\xBB\xBF//' $f
-done
diff --git a/dev/skeletons/skeleton_script.php b/dev/skeletons/skeleton_script.php
index 38a68a73ed3c95f4c8e788bc58eed89e9bc986a6..083e7ef680b8b394b5746e96240409370fa66727 100644
--- a/dev/skeletons/skeleton_script.php
+++ b/dev/skeletons/skeleton_script.php
@@ -40,8 +40,8 @@ $error=0;
 
 
 // -------------------- START OF YOUR CODE HERE --------------------
-@set_time_limit(0);							// No timeout for this script
-define('EVEN_IF_ONLY_LOGIN_ALLOWED',1);		// Set this define to 0 if you want to lock your script when dolibarr setup is "locked to admin user only".
+@set_time_limit(0);							// No timeout for this script
+define('EVEN_IF_ONLY_LOGIN_ALLOWED',1);		// Set this define to 0 if you want to lock your script when dolibarr setup is "locked to admin user only".
 
 // Include and load Dolibarr environment variables
 require_once($path."../../htdocs/master.inc.php");
diff --git a/htdocs/adherents/admin/adherent.php b/htdocs/adherents/admin/adherent.php
index 62f89f992dd6eb44237fa6c9308c424922730bec..2bed305783afd2aef8996ce3005f877644a5b063 100644
--- a/htdocs/adherents/admin/adherent.php
+++ b/htdocs/adherents/admin/adherent.php
@@ -169,7 +169,7 @@ print $form->selectyesno('constvalue',(! empty($conf->global->ADHERENT_DEFAULT_S
 print '</td><td align="center" width="80">';
 print '<input type="submit" class="button" value="'.$langs->trans("Update").'" name="Button">';
 print "</td></tr>\n";
-print '</form>';
+print '</form>';
 
 // Insert subscription into bank account
 $var=!$var;
@@ -179,41 +179,41 @@ print '<input type="hidden" name="action" value="update">';
 print '<input type="hidden" name="constname" value="ADHERENT_BANK_USE">';
 print '<tr '.$bc[$var].'><td>'.$langs->trans("MoreActionsOnSubscription").'</td>';
 $arraychoices=array('0'=>$langs->trans("None"));
-if (! empty($conf->banque->enabled)) $arraychoices['bankdirect']=$langs->trans("MoreActionBankDirect");
-if (! empty($conf->banque->enabled) && ! empty($conf->societe->enabled) && ! empty($conf->facture->enabled)) $arraychoices['invoiceonly']=$langs->trans("MoreActionInvoiceOnly");
-if (! empty($conf->banque->enabled) && ! empty($conf->societe->enabled) && ! empty($conf->facture->enabled)) $arraychoices['bankviainvoice']=$langs->trans("MoreActionBankViaInvoice");
+if (! empty($conf->banque->enabled)) $arraychoices['bankdirect']=$langs->trans("MoreActionBankDirect");
+if (! empty($conf->banque->enabled) && ! empty($conf->societe->enabled) && ! empty($conf->facture->enabled)) $arraychoices['invoiceonly']=$langs->trans("MoreActionInvoiceOnly");
+if (! empty($conf->banque->enabled) && ! empty($conf->societe->enabled) && ! empty($conf->facture->enabled)) $arraychoices['bankviainvoice']=$langs->trans("MoreActionBankViaInvoice");
 print '<td>';
 print $form->selectarray('constvalue',$arraychoices,$conf->global->ADHERENT_BANK_USE,0);
 print '</td><td align="center" width="80">';
 print '<input type="submit" class="button" value="'.$langs->trans("Update").'" name="Button">';
 print '</td>';
 print "</tr>\n";
-print '</form>';
+print '</form>';
 
-// Use vat for invoice creation
+// Use vat for invoice creation
 if ($conf->facture->enabled)
 {
-	$var=!$var;
-	print '<form action="adherent.php" method="POST">';
-	print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
-	print '<input type="hidden" name="action" value="update">';
-	print '<input type="hidden" name="constname" value="ADHERENT_VAT_FOR_SUBSCRIPTIONS">';
-	print '<tr '.$bc[$var].'><td>'.$langs->trans("VATToUseForSubscriptions").'</td>';
-	if (! empty($conf->banque->enabled))
-	{
-		print '<td>';
-		print $form->selectarray('constvalue', array('0'=>$langs->trans("NoVatOnSubscription"),'defaultforfoundationcountry'=>$langs->trans("Default")), (empty($conf->global->ADHERENT_VAT_FOR_SUBSCRIPTIONS)?'0':$conf->global->ADHERENT_VAT_FOR_SUBSCRIPTIONS), 0);
-		print '</td><td align="center" width="80">';
-		print '<input type="submit" class="button" value="'.$langs->trans("Update").'" name="Button">';
-		print '</td>';
-	}
-	else
-	{
-		print '<td align="right" colspan="2">';
-		print $langs->trans("WarningModuleNotActive",$langs->transnoentities("Module85Name"));
-		print '</td>';
-	}
-	print "</tr>\n";
+	$var=!$var;
+	print '<form action="adherent.php" method="POST">';
+	print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
+	print '<input type="hidden" name="action" value="update">';
+	print '<input type="hidden" name="constname" value="ADHERENT_VAT_FOR_SUBSCRIPTIONS">';
+	print '<tr '.$bc[$var].'><td>'.$langs->trans("VATToUseForSubscriptions").'</td>';
+	if (! empty($conf->banque->enabled))
+	{
+		print '<td>';
+		print $form->selectarray('constvalue', array('0'=>$langs->trans("NoVatOnSubscription"),'defaultforfoundationcountry'=>$langs->trans("Default")), (empty($conf->global->ADHERENT_VAT_FOR_SUBSCRIPTIONS)?'0':$conf->global->ADHERENT_VAT_FOR_SUBSCRIPTIONS), 0);
+		print '</td><td align="center" width="80">';
+		print '<input type="submit" class="button" value="'.$langs->trans("Update").'" name="Button">';
+		print '</td>';
+	}
+	else
+	{
+		print '<td align="right" colspan="2">';
+		print $langs->trans("WarningModuleNotActive",$langs->transnoentities("Module85Name"));
+		print '</td>';
+	}
+	print "</tr>\n";
 	print '</form>';
 }
 
diff --git a/htdocs/adherents/card_subscriptions.php b/htdocs/adherents/card_subscriptions.php
index 279669497ec80dd4dbf66453f78835d696b6a28a..bed822274eda585c48cf2b89531fbf328de10825 100644
--- a/htdocs/adherents/card_subscriptions.php
+++ b/htdocs/adherents/card_subscriptions.php
@@ -362,7 +362,7 @@ if ($user->rights->adherent->cotisation->creer && $action == 'cotisation' && ! $
 
                 // Add line to draft invoice
                 $idprodsubscription=0;
-                $vattouse=0;
+                $vattouse=0;
                 if (isset($conf->global->ADHERENT_VAT_FOR_SUBSCRIPTIONS) && $conf->global->ADHERENT_VAT_FOR_SUBSCRIPTIONS == 'defaultforfoundationcountry')
                 {
                 	$vattouse=get_default_tva($mysoc, $mysoc, $idprodsubscription);
diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php
index 3527535809bcd30c07027b31c4acffd37fb1b8d9..f222d6e63e556c11f66aa687211ca97df5ff7c56 100644
--- a/htdocs/adherents/class/adherent.class.php
+++ b/htdocs/adherents/class/adherent.class.php
@@ -41,6 +41,10 @@ class Adherent extends CommonObject
     public $table_element='adherent';
     protected $ismultientitymanaged = 1;  // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
 
+    var $error;
+    var $errors;
+    var $mesgs;
+
     var $id;
     var $ref;
     var $civilite_id;
@@ -1370,10 +1374,10 @@ class Adherent extends CommonObject
      */
     function add_to_abo()
     {
-        global $conf;
+        global $conf,$langs;
 
         include_once DOL_DOCUMENT_ROOT.'/mailmanspip/class/mailmanspip.class.php';
-        $mailmanspip=new MailmanSpip($db);
+        $mailmanspip=new MailmanSpip($this->db);
 
         $err=0;
 
@@ -1386,6 +1390,16 @@ class Adherent extends CommonObject
             	$this->error=$mailmanspip->error;
                 $err+=1;
             }
+            foreach ($mailmanspip->mladded_ko as $tmplist => $tmpemail)
+            {
+            	$langs->load("errors");
+            	$this->errors[]=$langs->trans("ErrorFailedToAddToMailmanList",$tmpemail,$tmplist);
+            }
+            foreach ($mailmanspip->mladded_ok as $tmplist => $tmpemail)
+            {
+            	$langs->load("mailmanspip");
+            	$this->mesgs[]=$langs->trans("SuccessToAddToMailmanList",$tmpemail,$tmplist);
+            }
         }
 
         // spip
@@ -1400,11 +1414,10 @@ class Adherent extends CommonObject
         }
         if ($err)
         {
-            // error
             return -$err;
         }
         else
-        {
+       {
             return 1;
         }
     }
@@ -1418,10 +1431,10 @@ class Adherent extends CommonObject
      */
     function del_to_abo()
     {
-        global $conf;
+        global $conf,$langs;
 
         include_once DOL_DOCUMENT_ROOT.'/mailmanspip/class/mailmanspip.class.php';
-        $mailmanspip=new MailmanSpip($db);
+        $mailmanspip=new MailmanSpip($this->db);
 
         $err=0;
 
@@ -1431,8 +1444,20 @@ class Adherent extends CommonObject
             $result=$mailmanspip->del_to_mailman($this);
             if ($result < 0)
             {
+                $this->error=$mailmanspip->error;
                 $err+=1;
             }
+
+            foreach ($mailmanspip->mlremoved_ko as $tmplist => $tmpemail)
+            {
+            	$langs->load("errors");
+            	$this->errors[]=$langs->trans("ErrorFailedToRemoveToMailmanList",$tmpemail,$tmplist);
+            }
+            foreach ($mailmanspip->mlremoved_ok as $tmplist => $tmpemail)
+            {
+            	$langs->load("mailmanspip");
+            	$this->mesgs[]=$langs->trans("SuccessToRemoveToMailmanList",$tmpemail,$tmplist);
+            }
         }
 
         if ($conf->global->ADHERENT_USE_SPIP && ! empty($conf->mailmanspip->enabled))
diff --git a/htdocs/adherents/fiche.php b/htdocs/adherents/fiche.php
index e76d41a6fd2c3e6f0133f4b97f03223e1ea17f42..058894c5be94e9d5cc9f63f0d6126e8de8addbed 100644
--- a/htdocs/adherents/fiche.php
+++ b/htdocs/adherents/fiche.php
@@ -353,15 +353,24 @@ if ($action == 'update' && ! $_POST["cancel"] && $user->rights->adherent->creer)
 				{
 					if ($object->oldcopy->del_to_abo() < 0)
 					{
-						// error
-						$errmsgs[]= $langs->trans("FailedToCleanMailmanList").': '.$object->error."<br>\n";
+						if (! empty($object->oldcopy->error)) setEventMessage($langs->trans("ErrorFailedToRemoveToMailmanList").': '.$object->oldcopy->error, 'errors');
+						setEventMessage($object->oldcopy->errors, 'errors');
+					}
+					else
+					{
+						setEventMessage($object->oldcopy->mesgs,'mesgs');
 					}
 				}
-				if ($object->add_to_abo() < 0)    // We add subscription if new email or new type (new type may means more mailing-list to subscribe)
+    			// We add subscription if new email or new type (new type may means more mailing-list to subscribe)
+    			if ($object->add_to_abo() < 0)
+    			{
+    				 if (! empty($object->error)) setEventMessage($langs->trans("ErrorFailedToAddToMailmanList").': '.$object->error, 'errors');
+    				 setEventMessage($object->errors, 'errors');
+    			}
+				else
 				{
-					// error
-					$errmsgs[]= $langs->trans("FailedToAddToMailmanList").': '.$object->error."<br>\n";
-				}
+					setEventMessage($object->mesgs, 'mesgs');
+				}
 			}
 
 			$rowid=$object->id;
diff --git a/htdocs/adherents/index.php b/htdocs/adherents/index.php
index e3787b18c89b219fcfd111479ea88e1ae999c69e..27b3403efa092dc3ba4a4933a42441828a1d60fc 100644
--- a/htdocs/adherents/index.php
+++ b/htdocs/adherents/index.php
@@ -197,7 +197,7 @@ if ($conf->use_javascript_ajax)
 
 
 //print '</td><td class="notopnoleftnoright" valign="top">';
-print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
+print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
 
 
 $var=true;
@@ -419,7 +419,7 @@ print "</tr>\n";
 print "</table><br>\n";
 
 //print '</td></tr></table>';
-print '<div></div></div>';
+print '</div></div></div>';
 
 
 llxFooter();
diff --git a/htdocs/admin/agenda.php b/htdocs/admin/agenda.php
index 29af716ceb0720ab9bb43661e861ecf6137b7527..7eb659bde97b76d51977b7bee3e5c8c350ded457 100644
--- a/htdocs/admin/agenda.php
+++ b/htdocs/admin/agenda.php
@@ -139,9 +139,9 @@ $head=agenda_prepare_head();
 
 dol_fiche_head($head, 'autoactions', $langs->trans("Agenda"));
 
-print $langs->trans("AgendaAutoActionDesc")."<br>\n";
+print $langs->trans("AgendaAutoActionDesc")."<br>\n";
 print $langs->trans("OnlyActiveElementsAreShown").'<br>';
-print "<br>\n";
+print "<br>\n";
 
 print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
 print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
diff --git a/htdocs/admin/agenda_extsites.php b/htdocs/admin/agenda_extsites.php
index 5d4c787bf37236c690ab49c48b83c6fd3d03f6b2..d23d7c510eafa60cf38905461b7f33e89c742ca0 100644
--- a/htdocs/admin/agenda_extsites.php
+++ b/htdocs/admin/agenda_extsites.php
@@ -64,8 +64,8 @@ if ($actionsave)
 	{
 		$name=trim(GETPOST('agenda_ext_name'.$i),'alpha');
 		$src=trim(GETPOST('agenda_ext_src'.$i,'alpha'));
-		$color=trim(GETPOST('agenda_ext_color'.$i,'alpha'));
-		if ($color=='-1') $color='';
+		$color=trim(GETPOST('agenda_ext_color'.$i,'alpha'));
+		if ($color=='-1') $color='';
 
 		if (! empty($src) && ! preg_match('/^(http\s*|ftp\s*):/', $src))
 		{
@@ -148,32 +148,32 @@ $var=!$var;
 print "<tr ".$bc[$var].">";
 print "<td>".$langs->trans("ExtSitesEnableThisTool")."</td>";
 print '<td align="center">';
-if ($conf->use_javascript_ajax)
-{
-	print ajax_constantonoff('AGENDA_DISABLE_EXT',array('enabled'=>array(0=>'.hideifnotset')),null,1);
-}
-else
-{
-	if($conf->global->AGENDA_DISABLE_EXT == 0)
-	{
-		print '<a href="'.$_SERVER['PHP_SELF'].'?save=1&AGENDA_DISABLE_EXT=1">'.img_picto($langs->trans("Enabled"),'on').'</a>';
-	}
-	else
-	{
-		print '<a href="'.$_SERVER['PHP_SELF'].'?save=1&AGENDA_DISABLE_EXT=0">'.img_picto($langs->trans("Disabled"),'off').'</a>';
-	}
-}
+if ($conf->use_javascript_ajax)
+{
+	print ajax_constantonoff('AGENDA_DISABLE_EXT',array('enabled'=>array(0=>'.hideifnotset')),null,1);
+}
+else
+{
+	if($conf->global->AGENDA_DISABLE_EXT == 0)
+	{
+		print '<a href="'.$_SERVER['PHP_SELF'].'?save=1&AGENDA_DISABLE_EXT=1">'.img_picto($langs->trans("Enabled"),'on').'</a>';
+	}
+	else
+	{
+		print '<a href="'.$_SERVER['PHP_SELF'].'?save=1&AGENDA_DISABLE_EXT=0">'.img_picto($langs->trans("Disabled"),'off').'</a>';
+	}
+}
 print "</td>";
 print "</tr>";
 
 // Nb of agenda
 $var=!$var;
-print "<tr ".$bc[$var].">";
-print "<td>".$langs->trans("ExtSitesNbOfAgenda")."</td>";
-print '<td align="center">';
-print '<input class="flat hideifnotset" type="text" size="2" id="AGENDA_EXT_NB" name="AGENDA_EXT_NB" value="'.$conf->global->AGENDA_EXT_NB.'">';
-print "</td>";
-print "</tr>";
+print "<tr ".$bc[$var].">";
+print "<td>".$langs->trans("ExtSitesNbOfAgenda")."</td>";
+print '<td align="center">';
+print '<input class="flat hideifnotset" type="text" size="2" id="AGENDA_EXT_NB" name="AGENDA_EXT_NB" value="'.$conf->global->AGENDA_EXT_NB.'">';
+print "</td>";
+print "</tr>";
 
 print "</table>";
 print "<br>";
diff --git a/htdocs/admin/agenda_xcal.php b/htdocs/admin/agenda_xcal.php
index 64e03fe7f9c7754573d6cdb6c7a8c31d8c7f458c..2aa5992b5afad497771a030e819f936a6341452f 100644
--- a/htdocs/admin/agenda_xcal.php
+++ b/htdocs/admin/agenda_xcal.php
@@ -80,8 +80,8 @@ $head=agenda_prepare_head();
 
 dol_fiche_head($head, 'xcal', $langs->trans("Agenda"));
 
-print $langs->trans("AgendaSetupOtherDesc")."<br>\n";
-print "<br>\n";
+print $langs->trans("AgendaSetupOtherDesc")."<br>\n";
+print "<br>\n";
 
 print '<form name="agendasetupform" action="'.$_SERVER["PHP_SELF"].'" method="post">';
 print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
diff --git a/htdocs/admin/clicktodial.php b/htdocs/admin/clicktodial.php
index 05d350490617c48b9e1a0d5a88343d67bd939dab..726bd912964bb8487999003af3deb221d3849127 100644
--- a/htdocs/admin/clicktodial.php
+++ b/htdocs/admin/clicktodial.php
@@ -38,7 +38,7 @@ $action = GETPOST("action");
  */
 if ($action == 'setvalue' && $user->admin)
 {
-    $result=dolibarr_set_const($db, "CLICKTODIAL_URL",GETPOST("url"),'chaine',0,'',$conf->entity);
+    $result=dolibarr_set_const($db, "CLICKTODIAL_URL", GETPOST("url"), 'chaine', 0, '', $conf->entity);
     if ($result >= 0)
     {
         $mesg = "<font class=\"ok\">".$langs->trans("SetupSaved")."</font>";
@@ -54,6 +54,8 @@ if ($action == 'setvalue' && $user->admin)
  * View
  */
 
+$user->fetch_clicktodial();
+
 $wikihelp='EN:Module_ClickToDial_En|FR:Module_ClickToDial|ES:Módulo_ClickTodial_Es';
 llxHeader('',$langs->trans("ClickToDialSetup"),$wikihelp);
 
@@ -69,33 +71,67 @@ print '<input type="hidden" name="action" value="setvalue">';
 
 $var=true;
 
-print '<table class="nobordernopadding" width="100%">';
+print '<table class="noborder" width="100%">';
 print '<tr class="liste_titre">';
 print '<td width="120">'.$langs->trans("Name").'</td>';
 print '<td>'.$langs->trans("Value").'</td>';
 print "</tr>\n";
 $var=!$var;
 print '<tr '.$bc[$var].'><td valign="top">';
-print $langs->trans("URL").'</td><td>';
+print $langs->trans("DefaultLink").'</td><td>';
 print '<input size="92" type="text" name="url" value="'.$conf->global->CLICKTODIAL_URL.'"><br>';
 print '<br>';
 print $langs->trans("ClickToDialUrlDesc").'<br>';
 print $langs->trans("Example").':<br>http://myphoneserver/mypage?login=__LOGIN__&password=__PASS__&caller=__PHONEFROM__&called=__PHONETO__';
+
+//if (! empty($user->clicktodial_url))
+//{
+	print '<br>';
+	print info_admin($langs->trans("ValueOverwrittenByUserSetup"));
+//}
+
 print '</td></tr>';
 
-print '<tr><td colspan="3" align="center"><br><input type="submit" class="button" value="'.$langs->trans("Modify").'"></td></tr>';
-print '</table></form>';
+print '</table>';
+
+print '<center><br><input type="submit" class="button" value="'.$langs->trans("Modify").'"></center>';
+
+print '</form><br><br>';
 
-/*if (! empty($conf->global->CLICKTODIAL_URL))
- {
- print $langs->trans("Test");
- // Add a phone number to test
- }
- */
+
+if (! empty($conf->global->CLICKTODIAL_URL))
+{
+	$user->fetch_clicktodial();
+
+	$phonefortest=$mysoc->phone;
+	if (GETPOST('phonefortest')) $phonefortest=GETPOST('phonefortest');
+
+	print '<form action="'.$_SERVER["PHP_SELF"].'">';
+	print $langs->trans("LinkToTestClickToDial",$user->login).' : ';
+	print '<input class="flat" type="text" name="phonefortest" value="'.dol_escape_htmltag($phonefortest).'">';
+	print '<input type="submit" class="button" value="'.dol_escape_htmltag($langs->trans("RefreshPhoneLink")).'">';
+	print '</form>';
+
+	$setupcomplete=1;
+	if (preg_match('/__LOGIN__/',$conf->global->CLICKTODIAL_URL) && empty($user->clicktodial_login)) $setupcomplete=0;
+	if (preg_match('/__PASSWORD__/',$conf->global->CLICKTODIAL_URL) && empty($user->clicktodial_password)) $setupcomplete=0;
+	if (preg_match('/__PHONEFROM__/',$conf->global->CLICKTODIAL_URL) && empty($user->clicktodial_poste)) $setupcomplete=0;
+
+	if ($setupcomplete)
+	{
+		print $langs->trans("LinkToTest",$user->login).': '.dol_print_phone($phonefortest, '', 0, 0, 'AC_TEL');
+	}
+	else
+	{
+		$langs->load("errors");
+		print '<div class="warning">'.$langs->trans("WarningClickToDialUserSetupNotComplete").'</div>';
+	}
+}
 
 dol_htmloutput_mesg($mesg);
 
-$db->close();
 
 llxFooter();
-?>
+
+$db->close();
+?>
\ No newline at end of file
diff --git a/htdocs/admin/const.php b/htdocs/admin/const.php
index a2b07ca2d11855b92d642698f87aee87ba351c09..a2838ae7fe9cd103ed70681caa0381221e965c66 100644
--- a/htdocs/admin/const.php
+++ b/htdocs/admin/const.php
@@ -122,7 +122,7 @@ if (! empty($consts) && $action == 'delete')
 		}
 	}
 	if ($nbdeleted > 0) setEventMessage($langs->trans("RecordDeleted"));
-	$action='';
+	$action='';
 }
 
 // Delete line from delete picto
@@ -130,7 +130,7 @@ if ($action == 'delete')
 {
 	if (dolibarr_del_const($db, $rowid, $entity) >= 0)
 	{
-		setEventMessage($langs->trans("RecordDeleted"));
+		setEventMessage($langs->trans("RecordDeleted"));
 	}
 	else
 	{
@@ -222,8 +222,8 @@ print '</form>';
 print "\n";
 
 print '<form action="'.$_SERVER["PHP_SELF"].((empty($user->entity) && $debug)?'?debug=1':'').'" method="POST">';
-print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
-print '<input type="hidden" id="action" name="action" value="">';
+print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
+print '<input type="hidden" id="action" name="action" value="">';
 
 // Show constants
 $sql = "SELECT";
diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php
index 21f6195525d08242000f965c7ad833902fab4e0c..4df227360216234fdf171ebcb72ba31befbc5cbc 100644
--- a/htdocs/admin/dict.php
+++ b/htdocs/admin/dict.php
@@ -125,8 +125,8 @@ $tablib[20]= "DictionnaryOrderMethods";
 $tablib[21]= "DictionnaryAvailability";
 $tablib[22]= "DictionnarySource";
 $tablib[23]= "DictionnaryAccountancyplan";
-$tablib[24]= "DictionnaryAccountancysystem";
-$tablib[25]= "DictionnaryRevenueStamp";
+$tablib[24]= "DictionnaryAccountancysystem";
+$tablib[25]= "DictionnaryRevenueStamp";
 
 // Requete pour extraction des donnees des dictionnaires
 $tabsql=array();
@@ -153,8 +153,8 @@ $tabsql[20]= "SELECT rowid   as rowid, code, libelle, active FROM ".MAIN_DB_PREF
 $tabsql[21]= "SELECT c.rowid as rowid, code, label, active FROM ".MAIN_DB_PREFIX."c_availability AS c";
 $tabsql[22]= "SELECT rowid   as rowid, code, label, active FROM ".MAIN_DB_PREFIX."c_input_reason";
 $tabsql[23]= "SELECT rowid   as rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number as accountancy_code, account_parent, label, active FROM ".MAIN_DB_PREFIX."accountingaccount";
-$tabsql[24]= "SELECT s.rowid as rowid, pcg_version, s.fk_pays as country_id, p.code as country_code, p.libelle as pays, s.label, s.active FROM ".MAIN_DB_PREFIX."accounting_system as s, ".MAIN_DB_PREFIX."c_pays as p WHERE s.fk_pays=p.rowid and p.active=1";
-$tabsql[25]= "SELECT t.rowid, t.taux, p.libelle as country, p.code as country_code, t.fk_pays as country_id, t.note, t.active, t.accountancy_code_sell, t.accountancy_code_buy FROM ".MAIN_DB_PREFIX."c_revenuestamp as t, llx_c_pays as p WHERE t.fk_pays=p.rowid";
+$tabsql[24]= "SELECT s.rowid as rowid, pcg_version, s.fk_pays as country_id, p.code as country_code, p.libelle as pays, s.label, s.active FROM ".MAIN_DB_PREFIX."accounting_system as s, ".MAIN_DB_PREFIX."c_pays as p WHERE s.fk_pays=p.rowid and p.active=1";
+$tabsql[25]= "SELECT t.rowid, t.taux, p.libelle as country, p.code as country_code, t.fk_pays as country_id, t.note, t.active, t.accountancy_code_sell, t.accountancy_code_buy FROM ".MAIN_DB_PREFIX."c_revenuestamp as t, llx_c_pays as p WHERE t.fk_pays=p.rowid";
 
 // Critere de tri du dictionnaire
 $tabsqlsort=array();
@@ -181,8 +181,8 @@ $tabsqlsort[20]="code ASC, libelle ASC";
 $tabsqlsort[21]="code ASC, label ASC";
 $tabsqlsort[22]="code ASC, label ASC";
 $tabsqlsort[23]="fk_pcg_version ASC, accountancy_code ASC";
-$tabsqlsort[24]="pcg_version ASC";
-$tabsqlsort[25]="country ASC, taux ASC";
+$tabsqlsort[24]="pcg_version ASC";
+$tabsqlsort[25]="country ASC, taux ASC";
 
 // Nom des champs en resultat de select pour affichage du dictionnaire
 $tabfield=array();
@@ -209,8 +209,8 @@ $tabfield[20]= "code,libelle";
 $tabfield[21]= "code,label";
 $tabfield[22]= "code,label";
 $tabfield[23]= "fk_pcg_version,accountancy_code,account_parent,pcg_type,pcg_subtype,label";
-$tabfield[24]= "pcg_version,country_id,country,label";
-$tabfield[25]= "country_id,country,taux,accountancy_code_sell,accountancy_code_buy,note";
+$tabfield[24]= "pcg_version,country_id,country,label";
+$tabfield[25]= "country_id,country,taux,accountancy_code_sell,accountancy_code_buy,note";
 
 // Nom des champs d'edition pour modification d'un enregistrement
 $tabfieldvalue=array();
@@ -237,8 +237,8 @@ $tabfieldvalue[20]= "code,libelle";
 $tabfieldvalue[21]= "code,label";
 $tabfieldvalue[22]= "code,label";
 $tabfieldvalue[23]= "fk_pcg_version,accountancy_code,account_parent,pcg_type,pcg_subtype,label";
-$tabfieldvalue[24]= "pcg_version,country,label";
-$tabfieldvalue[25]= "country,taux,accountancy_code_sell,accountancy_code_buy,note";
+$tabfieldvalue[24]= "pcg_version,country,label";
+$tabfieldvalue[25]= "country,taux,accountancy_code_sell,accountancy_code_buy,note";
 
 // Nom des champs dans la table pour insertion d'un enregistrement
 $tabfieldinsert=array();
@@ -265,8 +265,8 @@ $tabfieldinsert[20]= "code,libelle";
 $tabfieldinsert[21]= "code,label";
 $tabfieldinsert[22]= "code,label";
 $tabfieldinsert[23]= "fk_pcg_version,account_number,account_parent,pcg_type,pcg_subtype,label";
-$tabfieldinsert[24]= "pcg_version,fk_pays,label";
-$tabfieldinsert[25]= "fk_pays,taux,accountancy_code_sell,accountancy_code_buy,note";
+$tabfieldinsert[24]= "pcg_version,fk_pays,label";
+$tabfieldinsert[25]= "fk_pays,taux,accountancy_code_sell,accountancy_code_buy,note";
 
 // Nom du rowid si le champ n'est pas de type autoincrement
 // Example: "" if id field is "rowid" and has autoincrement on
@@ -295,8 +295,8 @@ $tabrowid[20]= "";
 $tabrowid[21]= "rowid";
 $tabrowid[22]= "rowid";
 $tabrowid[23]= "";
-$tabrowid[24]= "";
-$tabrowid[25]= "";
+$tabrowid[24]= "";
+$tabrowid[25]= "";
 
 // Condition to show dictionnary in setup page
 $tabcond=array();
@@ -323,8 +323,8 @@ $tabcond[20]= ! empty($conf->fournisseur->enabled);
 $tabcond[21]= ! empty($conf->propal->enabled);
 $tabcond[22]= (! empty($conf->commande->enabled) || ! empty($conf->propal->enabled));
 $tabcond[23]= (! empty($conf->global->ACCOUNTING_USEDICTTOEDIT) && ! empty($conf->accounting->enabled));	// The accountancy plan should be edited with specific pages. You can set ACCOUNTING_USEDICTTOEDIT to 1 if you want to use dictionnary editor.
-$tabcond[24]= (! empty($conf->global->ACCOUNTING_USEDICTTOEDIT) && ! empty($conf->accounting->enabled));	// The accountancy system should be edited with specific pages. You can set ACCOUNTING_USEDICTTOEDIT to 1 if you want to use dictionnary editor.
-$tabcond[25]= true;
+$tabcond[24]= (! empty($conf->global->ACCOUNTING_USEDICTTOEDIT) && ! empty($conf->accounting->enabled));	// The accountancy system should be edited with specific pages. You can set ACCOUNTING_USEDICTTOEDIT to 1 if you want to use dictionnary editor.
+$tabcond[25]= true;
 
 // List of help for fields
 $tabhelp=array();
@@ -351,8 +351,8 @@ $tabhelp[20] = array();
 $tabhelp[21] = array();
 $tabhelp[22] = array();
 $tabhelp[23] = array();
-$tabhelp[24] = array();
-$tabhelp[25] = array();
+$tabhelp[24] = array();
+$tabhelp[25] = array();
 
 // Complete all arrays with entries found into modules
 complete_dictionnary_with_modules($taborder,$tabname,$tablib,$tabsql,$tabsqlsort,$tabfield,$tabfieldvalue,$tabfieldinsert,$tabrowid,$tabcond,$tabhelp);
diff --git a/htdocs/admin/menus.php b/htdocs/admin/menus.php
index bd5074f01b163f98fcd7998dc864bcbe67855b7d..5974de1deccea2abe3721befe1e6827749fb358e 100644
--- a/htdocs/admin/menus.php
+++ b/htdocs/admin/menus.php
@@ -77,21 +77,21 @@ if ($action == 'update' && empty($_POST["cancel"]))
 
 	// Define list of menu handlers to initialize
 	$listofmenuhandler=array();
-	$listofmenuhandler[preg_replace('/(_backoffice|_frontoffice|_menu)?\.php/i','',$_POST["MAIN_MENU_STANDARD"])]=1;
-	$listofmenuhandler[preg_replace('/(_backoffice|_frontoffice|_menu)?\.php/i','',$_POST["MAIN_MENUFRONT_STANDARD"])]=1;
-	if (isset($_POST["MAIN_MENU_SMARTPHONE"]))      $listofmenuhandler[preg_replace('/(_backoffice|_frontoffice|_menu)?\.php/i','',$_POST["MAIN_MENU_SMARTPHONE"])]=1;
-	if (isset($_POST["MAIN_MENUFRONT_SMARTPHONE"])) $listofmenuhandler[preg_replace('/(_backoffice|_frontoffice|_menu)?\.php/i','',$_POST["MAIN_MENUFRONT_SMARTPHONE"])]=1;
+	$listofmenuhandler[preg_replace('/(_backoffice|_frontoffice|_menu)?\.php/i','',$_POST["MAIN_MENU_STANDARD"])]=1;
+	$listofmenuhandler[preg_replace('/(_backoffice|_frontoffice|_menu)?\.php/i','',$_POST["MAIN_MENUFRONT_STANDARD"])]=1;
+	if (isset($_POST["MAIN_MENU_SMARTPHONE"]))      $listofmenuhandler[preg_replace('/(_backoffice|_frontoffice|_menu)?\.php/i','',$_POST["MAIN_MENU_SMARTPHONE"])]=1;
+	if (isset($_POST["MAIN_MENUFRONT_SMARTPHONE"])) $listofmenuhandler[preg_replace('/(_backoffice|_frontoffice|_menu)?\.php/i','',$_POST["MAIN_MENUFRONT_SMARTPHONE"])]=1;
 
 	// Initialize menu handlers
 	foreach ($listofmenuhandler as $key => $val)
 	{
 		// Load sql init_menu_handler.sql file
-		$dirmenus=array_merge(array("/core/menus/"),(array) $conf->modules_parts['menus']);
-		foreach($dirmenus as $dirmenu)
-		{
+		$dirmenus=array_merge(array("/core/menus/"),(array) $conf->modules_parts['menus']);
+		foreach($dirmenus as $dirmenu)
+		{
 			$file='init_menu_'.$key.'.sql';
 		    $fullpath=dol_buildpath($dirmenu.$file);
-		    //print 'action='.$action.' Search menu into fullpath='.$fullpath.'<br>';exit;
+		    //print 'action='.$action.' Search menu into fullpath='.$fullpath.'<br>';exit;
 		    
 			if (file_exists($fullpath))
 			{
diff --git a/htdocs/admin/menus/index.php b/htdocs/admin/menus/index.php
index 092e910c5ccdf64738a24cd8c44edfacb3052a7c..fa30f472a5c650495e7a360185145bad85dcfb4d 100644
--- a/htdocs/admin/menus/index.php
+++ b/htdocs/admin/menus/index.php
@@ -57,7 +57,7 @@ $menu_handler=$menu_handler_top;
 if (GETPOST("handler_origine")) $menu_handler=GETPOST("handler_origine");
 if (GETPOST("menu_handler"))    $menu_handler=GETPOST("menu_handler");
 
-$menu_handler_to_search=preg_replace('/(_backoffice|_frontoffice|_menu)?(\.php)?/i','',$menu_handler);
+$menu_handler_to_search=preg_replace('/(_backoffice|_frontoffice|_menu)?(\.php)?/i','',$menu_handler);
 
 
 /*
@@ -207,8 +207,8 @@ elseif ($action == 'confirm_delete' && $confirm == 'yes')
 $form=new Form($db);
 $formadmin=new FormAdmin($db);
 
-$arrayofjs=array('/includes/jquery/plugins/jquerytreeview/jquery.treeview.js', '/includes/jquery/plugins/jquerytreeview/lib/jquery.cookie.js');
-$arrayofcss=array('/includes/jquery/plugins/jquerytreeview/jquery.treeview.css');
+$arrayofjs=array('/includes/jquery/plugins/jquerytreeview/jquery.treeview.js', '/includes/jquery/plugins/jquerytreeview/lib/jquery.cookie.js');
+$arrayofcss=array('/includes/jquery/plugins/jquerytreeview/jquery.treeview.css');
 
 llxHeader('',$langs->trans("Menus"),'','',0,0,$arrayofjs,$arrayofcss);
 
@@ -324,14 +324,14 @@ if ($conf->use_javascript_ajax)
 				'leftmenu'=>$menu['leftmenu'],
 				'fk_mainmenu'=>$menu['fk_mainmenu'],
 				'fk_leftmenu'=>$menu['fk_leftmenu'],
-				'entry'=>'<table class="nobordernopadding centpercent"><tr><td>'.
-						'<strong> &nbsp; <a href="edit.php?menu_handler='.$menu_handler_to_search.'&action=edit&menuId='.$menu['rowid'].'">'.$titre.'</a></strong>'.
-						'</td><td align="right">'.
-						'<a href="edit.php?menu_handler='.$menu_handler_to_search.'&action=edit&menuId='.$menu['rowid'].'">'.img_edit('default',0,'class="menuEdit" id="edit'.$menu['rowid'].'"').'</a> '.
-						'<a href="edit.php?menu_handler='.$menu_handler_to_search.'&action=create&menuId='.$menu['rowid'].'">'.img_edit_add('default',0,'class="menuNew" id="new'.$menu['rowid'].'"').'</a> '.
-						'<a href="index.php?menu_handler='.$menu_handler_to_search.'&action=delete&menuId='.$menu['rowid'].'">'.img_delete('default',0,'class="menuDel" id="del'.$menu['rowid'].'"').'</a> '.
-						'<a href="index.php?menu_handler='.$menu_handler_to_search.'&action=up&menuId='.$menu['rowid'].'">'.img_picto("Monter","1uparrow").'</a><a href="index.php?menu_handler='.$menu_handler_to_search.'&action=down&menuId='.$menu['rowid'].'">'.img_picto("Descendre","1downarrow").'</a>'.
-						'</td></tr></table>'
+				'entry'=>'<table class="nobordernopadding centpercent"><tr><td>'.
+						'<strong> &nbsp; <a href="edit.php?menu_handler='.$menu_handler_to_search.'&action=edit&menuId='.$menu['rowid'].'">'.$titre.'</a></strong>'.
+						'</td><td align="right">'.
+						'<a href="edit.php?menu_handler='.$menu_handler_to_search.'&action=edit&menuId='.$menu['rowid'].'">'.img_edit('default',0,'class="menuEdit" id="edit'.$menu['rowid'].'"').'</a> '.
+						'<a href="edit.php?menu_handler='.$menu_handler_to_search.'&action=create&menuId='.$menu['rowid'].'">'.img_edit_add('default',0,'class="menuNew" id="new'.$menu['rowid'].'"').'</a> '.
+						'<a href="index.php?menu_handler='.$menu_handler_to_search.'&action=delete&menuId='.$menu['rowid'].'">'.img_delete('default',0,'class="menuDel" id="del'.$menu['rowid'].'"').'</a> '.
+						'<a href="index.php?menu_handler='.$menu_handler_to_search.'&action=up&menuId='.$menu['rowid'].'">'.img_picto("Monter","1uparrow").'</a><a href="index.php?menu_handler='.$menu_handler_to_search.'&action=down&menuId='.$menu['rowid'].'">'.img_picto("Descendre","1downarrow").'</a>'.
+						'</td></tr></table>'
 			);
 			$i++;
 		}
diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php
index cbe59807a261341a960fc4d6b896b7efa2d43c46..4440d632b2e6440fa740e983695d8f91c0b64ed0 100644
--- a/htdocs/admin/modules.php
+++ b/htdocs/admin/modules.php
@@ -197,14 +197,14 @@ $moreinfo=$langs->trans("TotalNumberOfActivatedModules",($nbofactivatedmodules-1
 
 print load_fiche_titre($langs->trans("ModulesSetup"),$moreinfo,'setup');
 
-// Start to show page
-if (empty($mode)) $mode='common';
-if ($mode==='common')      print $langs->trans("ModulesDesc")."<br>\n";
-if ($mode==='other')       print $langs->trans("ModulesSpecialDesc")."<br>\n";
-if ($mode==='interfaces')  print $langs->trans("ModulesInterfaceDesc")."<br>\n";
-if ($mode==='functional')  print $langs->trans("ModulesJobDesc")."<br>\n";
-if ($mode==='marketplace') print $langs->trans("ModulesMarketPlaceDesc")."<br>\n";
-if ($mode==='expdev')      print $langs->trans("ModuleFamilyExperimental")."<br>\n";
+// Start to show page
+if (empty($mode)) $mode='common';
+if ($mode==='common')      print $langs->trans("ModulesDesc")."<br>\n";
+if ($mode==='other')       print $langs->trans("ModulesSpecialDesc")."<br>\n";
+if ($mode==='interfaces')  print $langs->trans("ModulesInterfaceDesc")."<br>\n";
+if ($mode==='functional')  print $langs->trans("ModulesJobDesc")."<br>\n";
+if ($mode==='marketplace') print $langs->trans("ModulesMarketPlaceDesc")."<br>\n";
+if ($mode==='expdev')      print $langs->trans("ModuleFamilyExperimental")."<br>\n";
 
 if ($nbofactivatedmodules <= 1) print ' '.img_warning($langs->trans("YouMustEnableOneModule"));
 //print '<br>'."\n";
@@ -499,8 +499,8 @@ else
 dol_fiche_end();
 
 
-// Show warning about external users
-if ($mode != 'marketplace') print showModulesExludedForExternal($modules).'<br>'."\n";
+// Show warning about external users
+if ($mode != 'marketplace') print showModulesExludedForExternal($modules).'<br>'."\n";
 
 
 llxFooter();
diff --git a/htdocs/admin/pdf.php b/htdocs/admin/pdf.php
index 5617ecc1dfbecdb634b55522bd54708da05fa12f..afa67c434e8a1842b372e6857912465f0afbe22a 100755
--- a/htdocs/admin/pdf.php
+++ b/htdocs/admin/pdf.php
@@ -68,19 +68,19 @@ if ($action == 'update')
 	exit;
 }
 
-if ($action == 'activate_pdfsecurity')
-{
-	dolibarr_set_const($db, "PDF_SECURITY_ENCRYPTION", "1",'chaine',0,'',$conf->entity);
-	header("Location: ".$_SERVER["PHP_SELF"]."?mainmenu=home&leftmenu=setup");
-	exit;
-}
-else if ($action == 'disable_pdfsecurity')
-{
-	dolibarr_del_const($db, "PDF_SECURITY_ENCRYPTION",$conf->entity);
-	header("Location: ".$_SERVER["PHP_SELF"]."?mainmenu=home&leftmenu=setup");
-	exit;
-}
-
+if ($action == 'activate_pdfsecurity')
+{
+	dolibarr_set_const($db, "PDF_SECURITY_ENCRYPTION", "1",'chaine',0,'',$conf->entity);
+	header("Location: ".$_SERVER["PHP_SELF"]."?mainmenu=home&leftmenu=setup");
+	exit;
+}
+else if ($action == 'disable_pdfsecurity')
+{
+	dolibarr_del_const($db, "PDF_SECURITY_ENCRYPTION",$conf->entity);
+	header("Location: ".$_SERVER["PHP_SELF"]."?mainmenu=home&leftmenu=setup");
+	exit;
+}
+
 
 
 /*
diff --git a/htdocs/admin/sms.php b/htdocs/admin/sms.php
index 2a9c6bdb92b4a102c06dd1f9694aa58e89a9aa74..fc7f4e25c689e11e53ec250f9c0c8cd196b1e855 100755
--- a/htdocs/admin/sms.php
+++ b/htdocs/admin/sms.php
@@ -161,7 +161,7 @@ if ($action == 'edit')
 {
 	$form=new Form($db);
 
-	if (! count($listofmethods)) print '<div class="warning">'.$langs->trans("NoSmsEngine",'<a href="http://www.dolistore.com/search.php?orderby=position&orderway=desc&search_query=sms_manager">DoliStore</a>').'</div>';
+	if (! count($listofmethods)) print '<div class="warning">'.$langs->trans("NoSmsEngine",'<a href="http://www.dolistore.com/search.php?orderby=position&orderway=desc&search_query=smsmanager">DoliStore</a>').'</div>';
 
 	print '<form method="post" action="'.$_SERVER["PHP_SELF"].'">';
 	print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
@@ -217,7 +217,7 @@ else
 {
 	$var=true;
 
-	if (! count($listofmethods)) print '<div class="warning">'.$langs->trans("NoSmsEngine",'<a href="http://www.dolistore.com/search.php?orderby=position&orderway=desc&search_query=sms_manager">DoliStore</a>').'</div>';
+	if (! count($listofmethods)) print '<div class="warning">'.$langs->trans("NoSmsEngine",'<a href="http://www.dolistore.com/search.php?orderby=position&orderway=desc&search_query=smsmanager">DoliStore</a>').'</div>';
 
 	print '<table class="noborder" width="100%">';
 	print '<tr class="liste_titre"><td>'.$langs->trans("Parameter").'</td><td>'.$langs->trans("Value").'</td></tr>';
diff --git a/htdocs/admin/tools/listevents.php b/htdocs/admin/tools/listevents.php
index 8056080be2379c0fcb111a043826a8badb43e9d4..284520bce489d136a8e6e19cd57fce6cb19efcde 100644
--- a/htdocs/admin/tools/listevents.php
+++ b/htdocs/admin/tools/listevents.php
@@ -139,11 +139,11 @@ if ($result)
 	$i = 0;
 
 	$param='';
-	if ($search_code) $param.='&search_code='.$search_code;
-	if ($search_ip) $param.='&search_ip='.$search_ip;
-	if ($search_user) $param.='&search_user='.$search_user;
-	if ($search_desc) $param.='&search_desc='.$search_desc;
-	if ($search_ua) $param.='&search_ua='.$search_ua;
+	if ($search_code) $param.='&search_code='.$search_code;
+	if ($search_ip) $param.='&search_ip='.$search_ip;
+	if ($search_user) $param.='&search_user='.$search_user;
+	if ($search_desc) $param.='&search_desc='.$search_desc;
+	if ($search_ua) $param.='&search_ua='.$search_ua;
 
 	print_barre_liste($langs->trans("ListOfSecurityEvents"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, 0, 'setup');
 
diff --git a/htdocs/categories/index.php b/htdocs/categories/index.php
index 532a95f7317060b5c6c31ed5001b7316f5cb0ca3..4e9f376977cb1446f65a9081e54bf6075450548e 100644
--- a/htdocs/categories/index.php
+++ b/htdocs/categories/index.php
@@ -62,7 +62,7 @@ print_fiche_titre($title);
 
 //print '<table border="0" width="100%" class="notopnoleftnoright">';
 //print '<tr><td valign="top" width="30%" class="notopnoleft">';
-print '<div class="fichecenter"><div class="fichethirdleft">';
+print '<div class="fichecenter"><div class="fichethirdleft">';
 
 
 /*
@@ -91,7 +91,7 @@ print '</table></form>';
 
 
 //print '</td><td valign="top" width="70%">';
-print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
+print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
 
 
 /*
@@ -121,12 +121,13 @@ if ($catname || $id > 0)
 	}
 	print "</table>";
 }
+else print '&nbsp;';
 
 
 //print '</td></tr></table>';
-print '<div></div></div>';
+print '</div></div></div>';
 
-print '<br>';
+print '<div class="fichecenter"><br>';
 
 
 // Charge tableau des categories
@@ -136,25 +137,25 @@ $cate_arbo = $categstatic->get_full_arbo($type);
 $fulltree=$cate_arbo;
 
 // Define data (format for treeview)
-$data=array();
-$data[] = array('rowid'=>0,'fk_menu'=>-1,'title'=>"racine",'mainmenu'=>'','leftmenu'=>'','fk_mainmenu'=>'','fk_leftmenu'=>'');
-foreach($fulltree as $key => $val)
+$data=array();
+$data[] = array('rowid'=>0,'fk_menu'=>-1,'title'=>"racine",'mainmenu'=>'','leftmenu'=>'','fk_mainmenu'=>'','fk_leftmenu'=>'');
+foreach($fulltree as $key => $val)
 {
-	$categstatic->id=$val['id'];
-	$categstatic->ref=$val['label'];
-	$categstatic->type=$type;
-	$li=$categstatic->getNomUrl(1,'',60);
-
-	$data[] = array(
-	'rowid'=>$val['rowid'],
-	'fk_menu'=>$val['fk_parent'],
-	'entry'=>'<table class="nobordernopadding centpercent"><tr><td>'.$li.
-	'</td><td width="50%">'.
+	$categstatic->id=$val['id'];
+	$categstatic->ref=$val['label'];
+	$categstatic->type=$type;
+	$li=$categstatic->getNomUrl(1,'',60);
+
+	$data[] = array(
+	'rowid'=>$val['rowid'],
+	'fk_menu'=>$val['fk_parent'],
+	'entry'=>'<table class="nobordernopadding centpercent"><tr><td>'.$li.
+	'</td><td width="50%">'.
 	' '.$val['description'].'</td>'.
-	'<td align="right" width="20px;"><a href="'.DOL_URL_ROOT.'/categories/viewcat.php?id='.$val['id'].'&type='.$type.'">'.img_view().'</a></td>'.
-	'</tr></table>'
-	);
-}
+	'<td align="right" width="20px;"><a href="'.DOL_URL_ROOT.'/categories/viewcat.php?id='.$val['id'].'&type='.$type.'">'.img_view().'</a></td>'.
+	'</tr></table>'
+	);
+}
 
 
 print '<table class="liste" width="100%">';
@@ -170,23 +171,24 @@ $nbofentries=(count($data) - 1);
 if ($nbofentries > 0)
 {
 	print '<tr><td colspan="3">';
-	tree_recur($data,$data[0],0);
+	tree_recur($data,$data[0],0);
 	print '</td></tr>';
 }
 else
 {
-	print '<tr>';
-	print '<td colspan="3"><table class="nobordernopadding"><tr class="nobordernopadding"><td>'.img_picto_common('','treemenu/branchbottom.gif').'</td>';
-	print '<td valign="middle">';
-	print $langs->trans("NoCategoryYet");
-	print '</td>';
-	print '<td>&nbsp;</td>';
-	print '</table></td>';
-	print '</tr>';
-}
+	print '<tr>';
+	print '<td colspan="3"><table class="nobordernopadding"><tr class="nobordernopadding"><td>'.img_picto_common('','treemenu/branchbottom.gif').'</td>';
+	print '<td valign="middle">';
+	print $langs->trans("NoCategoryYet");
+	print '</td>';
+	print '<td>&nbsp;</td>';
+	print '</table></td>';
+	print '</tr>';
+}
 
 print "</table>";
 
+print '</div>';
 
 llxFooter();
 
diff --git a/htdocs/comm/action/rapport/index.php b/htdocs/comm/action/rapport/index.php
index 9d82fb21ab940280bd06328748fb91de832ddd31..33a30e9c6b6e2c6dd68ce192abd5914fae68b52f 100644
--- a/htdocs/comm/action/rapport/index.php
+++ b/htdocs/comm/action/rapport/index.php
@@ -30,8 +30,8 @@ require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
 require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php';
 require_once DOL_DOCUMENT_ROOT.'/core/modules/action/rapport.pdf.php';
 
-$langs->load("agenda");
-$langs->load("commercial");
+$langs->load("agenda");
+$langs->load("commercial");
 
 $action=GETPOST('action','alpha');
 $month=GETPOST('month');
diff --git a/htdocs/comm/index.php b/htdocs/comm/index.php
index c30d75192d8f10a8fe192785d481b84ee182b581..48a07dcacbad3bfa46287fd203bb7880920a060c 100644
--- a/htdocs/comm/index.php
+++ b/htdocs/comm/index.php
@@ -87,7 +87,7 @@ llxHeader();
 
 print_fiche_titre($langs->trans("CustomerArea"));
 
-print '<div class="fichecenter"><div class="fichethirdleft">';
+print '<div class="fichecenter"><div class="fichethirdleft">';
 /*
 print '<table border="0" width="100%" class="notopnoleftnoright">';
 print '<tr>';
@@ -270,7 +270,7 @@ else
 {
 	print '<td valign="top" width="100%" class="notopnoleftnoright">';
 }*/
-print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
+print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
 
 
 $NBMAX=3;
@@ -546,7 +546,7 @@ if (! empty($conf->propal->enabled) && $user->rights->propal->lire)
 
 
 //print '</td></tr></table>';
-print '<div></div></div>';
+print '</div></div></div>';
 
 llxFooter();
 
diff --git a/htdocs/comm/mailing/fiche.php b/htdocs/comm/mailing/fiche.php
index 195db2d53a88462ddef600a7de90111588aeb3a9..954dad26cee2768cabf6631e0b65b670c566b7ed 100644
--- a/htdocs/comm/mailing/fiche.php
+++ b/htdocs/comm/mailing/fiche.php
@@ -1002,9 +1002,9 @@ else
 			print '<td colspan="3" bgcolor="'.($object->bgcolor?(preg_match('/^#/',$object->bgcolor)?'':'#').$object->bgcolor:'white').'">';
 			if (empty($object->bgcolor) || strtolower($object->bgcolor) == 'ffffff')
 			{
-				// Editeur wysiwyg
-				require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
-				$doleditor=new DolEditor('body',$object->body,'',320,'dolibarr_readonly','',false,true,empty($conf->global->FCKEDITOR_ENABLE_MAILING)?0:1,20,70);
+				// Editeur wysiwyg
+				require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
+				$doleditor=new DolEditor('body',$object->body,'',320,'dolibarr_readonly','',false,true,empty($conf->global->FCKEDITOR_ENABLE_MAILING)?0:1,20,70);
 				$doleditor->Create();
 			}
 			else print dol_htmlentitiesbr($object->body);
@@ -1040,7 +1040,7 @@ else
 			print '<tr><td width="25%">';
 			print $langs->trans("TotalNbOfDistinctRecipients");
 			print '</td><td colspan="3">';
-			$nbemail = ($object->nbemail?$object->nbemail:img_warning('').' <font class="warning">'.$langs->trans("NoTargetYet").'</font>');
+			$nbemail = ($object->nbemail?$object->nbemail:img_warning('').' <font class="warning">'.$langs->trans("NoTargetYet").'</font>');
 			if (!empty($conf->global->MAILING_LIMIT_SENDBYWEB) && is_numeric($nbemail) && $conf->global->MAILING_LIMIT_SENDBYWEB < $nbemail)
 			{
 				$text=$langs->trans('LimitSendingEmailing',$conf->global->MAILING_LIMIT_SENDBYWEB);
diff --git a/htdocs/comm/mailing/index.php b/htdocs/comm/mailing/index.php
index b2ff4d92f76dcc0f15837bfa574260abdefb938b..8ef75c9712d0ad6d313a16a602a38a5a7ac233c5 100644
--- a/htdocs/comm/mailing/index.php
+++ b/htdocs/comm/mailing/index.php
@@ -46,7 +46,7 @@ print_fiche_titre($langs->trans("MailingArea"));
 
 //print '<table class="notopnoleftnoright" width="100%">';
 //print '<tr><td valign="top" width="30%" class="notopnoleft">';
-print '<div class="fichecenter"><div class="fichethirdleft">';
+print '<div class="fichecenter"><div class="fichethirdleft">';
 
 
 // Recherche emails
@@ -143,7 +143,7 @@ print "</table><br>";
 
 
 //print '</td><td valign="top" width="70%" class="notopnoleftnoright">';
-print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
+print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
 
 
 /*
@@ -201,7 +201,7 @@ else
 
 
 //print '</td></tr></table>';
-print '<div></div></div>';
+print '</div></div></div>';
 
 
 if ($langs->file_exists("html/spam.html",0)) {
@@ -216,5 +216,5 @@ if ($langs->file_exists("html/spam.html",0)) {
 
 llxFooter();
 
-$db->close();
+$db->close();
 ?>
diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php
index 8c51c4ff9413b96d85b6a678b93d659f3015727e..25b8a1979f097b2a9bec59d0918b59d00dd05899 100644
--- a/htdocs/comm/propal.php
+++ b/htdocs/comm/propal.php
@@ -1107,7 +1107,7 @@ else if ($action == 'update_extras')
 	// Fill array 'array_options' with data from update form
 	$extralabels=$extrafields->fetch_name_optionals_label('propal');
 	$ret = $extrafields->setOptionalsFromPost($extralabels,$object);
-	
+
 	// Actions on extra fields (by external module or standard code)
 	// FIXME le hook fait double emploi avec le trigger !!
 	$hookmanager->initHooks(array('propaldao'));
@@ -1125,7 +1125,7 @@ else if ($action == 'update_extras')
 		}
 	}
 	else if ($reshook < 0) $error++;
-	 
+
 }
 
 if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB) && $user->rights->propal->creer)
@@ -1823,7 +1823,7 @@ else
 	$reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action);    // Note that $action and $object may have been modified by hook
 	if (empty($reshook) && ! empty($extrafields->attribute_label))
 	{
-		
+
 		if ($action == 'edit_extras')
 		{
 			print '<form enctype="multipart/form-data" action="'.$_SERVER["PHP_SELF"].'" method="post" name="formsoc">';
@@ -1831,7 +1831,7 @@ else
 			print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
 			print '<input type="hidden" name="id" value="'.$object->id.'">';
 		}
-		
+
 		// TODO : use showOptionals($extrafields) function 
 	    foreach($extrafields->attribute_label as $key=>$label)
 	    {
@@ -1845,13 +1845,13 @@ else
 	        	print '<tr><td';
 	        	if (! empty($extrafields->attribute_required[$key])) print ' class="fieldrequired"';
 	        	print '>'.$label.'</td><td colspan="3">';
-	        	
+
 	        	// Convert date into timestamp format
 	        	if (in_array($extrafields->attribute_type[$key],array('date','datetime')))
 	        	{
 	        		$value = isset($_POST["options_".$key])?dol_mktime($_POST["options_".$key."hour"], $_POST["options_".$key."min"], 0, $_POST["options_".$key."month"], $_POST["options_".$key."day"], $_POST["options_".$key."year"]):$object->array_options['options_'.$key];
 	        	}
-	        	
+
 	        	if ($action == 'edit_extras' &&  $user->rights->propal->creer)
 	        	{
 	        		print $extrafields->showInputField($key,$value);
@@ -1863,19 +1863,19 @@ else
 	        	print '</td></tr>'."\n";
 	        }
 	    }
-	    
+
 	    if(count($extrafields->attribute_label) > 0) {
-	    	
+
 	    	if ($action == 'edit_extras' && $user->rights->propal->creer)
 	    	{
 	    		print '<tr><td></td><td>';
 	    		print '<input type="submit" class="button" value="'.$langs->trans('Modify').'">';
 	    		print '</form>';
 	    		print '</td></tr>';
-	    		
+
 	    	}
 	    	else {
-	    		if ($object->statut == 0 && $user->rights->propal->creer)	    		
+	    		if ($object->statut == 0 && $user->rights->propal->creer)
 	    		{
 	    			print '<tr><td></td><td><a href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=edit_extras">'.img_picto('','edit').' '.$langs->trans('Modify').'</a></td></tr>';
 	    		}
@@ -2165,7 +2165,7 @@ else
 	{
 		$ref = dol_sanitizeFileName($object->ref);
 	    include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
-	    $fileparams = dol_most_recent_file($conf->propal->dir_output . '/' . $ref, preg_quote($object->ref,'/'));
+	    $fileparams = dol_most_recent_file($conf->propal->dir_output . '/' . $ref, preg_quote($ref,'/'));
 	    $file=$fileparams['fullname'];
 
 	    // Build document if it not exists
@@ -2188,7 +2188,7 @@ else
 	            dol_print_error($db,$result);
 	            exit;
 	        }
-	        $fileparams = dol_most_recent_file($conf->propal->dir_output . '/' . $ref, preg_quote($object->ref,'/'));
+	        $fileparams = dol_most_recent_file($conf->propal->dir_output . '/' . $ref, preg_quote($ref,'/'));
 	        $file=$fileparams['fullname'];
 	    }
 
@@ -2219,12 +2219,12 @@ else
 	    $formmail->substit['__SIGNATURE__']=$user->signature;
 	    $formmail->substit['__PERSONALIZED__']='';
 	    $formmail->substit['__CONTACTCIVNAME__']='';
-	    
+
 	    //Find the good contact adress
 	    $custcontact='';
 	    $contactarr=array();
 	    $contactarr=$object->liste_contact(-1,'external');
-	    
+
 	    if (is_array($contactarr) && count($contactarr)>0) {
 	    	foreach($contactarr as $contact) {
 	    		if ($contact['libelle']==$langs->trans('TypeContact_propal_external_CUSTOMER')) {
@@ -2233,19 +2233,19 @@ else
 	    			$custcontact=$contactstatic->getFullName($langs,1);
 	    		}
 	    	}
-	    		
+
 	    	if (!empty($custcontact)) {
 	    		$formmail->substit['__CONTACTCIVNAME__']=$custcontact;
 	    	}
 	    }
-	    
+
 		// Tableau des parametres complementaires
 		$formmail->param['action']='send';
 		$formmail->param['models']='propal_send';
 		$formmail->param['id']=$object->id;
 		$formmail->param['returnurl']=$_SERVER["PHP_SELF"].'?id='.$object->id;
-		
-	
+
+
 		// Init list of files
 	    if (GETPOST("mode")=='init')
 		{
diff --git a/htdocs/comm/propal/index.php b/htdocs/comm/propal/index.php
index 4ac166b54a27953fd01cae69651793b740a6f4da..971f6d10a8602551391117f31bfe8f5dc491b704 100644
--- a/htdocs/comm/propal/index.php
+++ b/htdocs/comm/propal/index.php
@@ -56,7 +56,7 @@ print_fiche_titre($langs->trans("ProspectionArea"));
 
 //print '<table width="100%" class="notopnoleftnoright">';
 //print '<tr><td valign="top" width="30%" class="notopnoleft">';
-print '<div class="fichecenter"><div class="fichethirdleft">';
+print '<div class="fichecenter"><div class="fichethirdleft">';
 
 
 /*
@@ -202,7 +202,7 @@ if (! empty($conf->propal->enabled))
 
 
 //print '</td><td valign="top" width="70%" class="notopnoleftnoright">';
-print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
+print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
 
 
 $max=5;
@@ -513,7 +513,7 @@ if (! empty($conf->propal->enabled))
 */
 
 //print '</td></tr></table>';
-print '<div></div></div>';
+print '</div></div></div>';
 
 
 llxFooter();
diff --git a/htdocs/comm/prospect/index.php b/htdocs/comm/prospect/index.php
index bf53b674bc56d78d18a156f7de2789f80e5c4443..e6496c32a58907af27de945fb1090b5431436989 100644
--- a/htdocs/comm/prospect/index.php
+++ b/htdocs/comm/prospect/index.php
@@ -48,7 +48,7 @@ print_fiche_titre($langs->trans("ProspectionArea"));
 
 //print '<table border="0" width="100%" class="notopnoleftnoright">';
 //print '<tr><td valign="top" width="30%" class="notopnoleft">';
-print '<div class="fichecenter"><div class="fichethirdleft">';
+print '<div class="fichecenter"><div class="fichethirdleft">';
 
 
 if (! empty($conf->propal->enabled))
@@ -161,7 +161,7 @@ if (! empty($conf->propal->enabled) && $user->rights->propale->lire)
 
 
 //print '</td><td valign="top" width="70%" class="notopnoleftnoright">';
-print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
+print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
 
 
 /*
@@ -279,7 +279,7 @@ if ($resql)
 
 
 //print '</td></tr></table>';
-print '<div></div></div>';
+print '</div></div></div>';
 
 llxFooter();
 
diff --git a/htdocs/commande/fiche.php b/htdocs/commande/fiche.php
index 116fd5fe3cb723d0f5c9ebdb13c0333ddd23efc2..997ebd160b9464f6ade68118694da18fc8ef5c1f 100644
--- a/htdocs/commande/fiche.php
+++ b/htdocs/commande/fiche.php
@@ -657,15 +657,15 @@ else if ($action == 'addline' && $user->rights->commande->creer)
 
             	$desc=dol_concatdesc($desc,$product_desc);
 
-            	// Add custom code and origin country into description
-            	if (empty($conf->global->MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE) && (! empty($prod->customcode) || ! empty($prod->country_code)))
-            	{
-            		$tmptxt='(';
-            		if (! empty($prod->customcode)) $tmptxt.=$langs->transnoentitiesnoconv("CustomCode").': '.$prod->customcode;
-            		if (! empty($prod->customcode) && ! empty($prod->country_code)) $tmptxt.=' - ';
-            		if (! empty($prod->country_code)) $tmptxt.=$langs->transnoentitiesnoconv("CountryOrigin").': '.getCountry($prod->country_code,0,$db,$langs,0);
-            		$tmptxt.=')';
-            		$desc= dol_concatdesc($desc, $tmptxt);
+            	// Add custom code and origin country into description
+            	if (empty($conf->global->MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE) && (! empty($prod->customcode) || ! empty($prod->country_code)))
+            	{
+            		$tmptxt='(';
+            		if (! empty($prod->customcode)) $tmptxt.=$langs->transnoentitiesnoconv("CustomCode").': '.$prod->customcode;
+            		if (! empty($prod->customcode) && ! empty($prod->country_code)) $tmptxt.=' - ';
+            		if (! empty($prod->country_code)) $tmptxt.=$langs->transnoentitiesnoconv("CountryOrigin").': '.getCountry($prod->country_code,0,$db,$langs,0);
+            		$tmptxt.=')';
+            		$desc= dol_concatdesc($desc, $tmptxt);
             	}
 			}
 
@@ -2374,7 +2374,7 @@ if ($action == 'send' && ! GETPOST('addfile') && ! GETPOST('removedfile') && ! G
 			{
 				$ref = dol_sanitizeFileName($object->ref);
 				include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
-				$fileparams = dol_most_recent_file($conf->commande->dir_output . '/' . $ref, preg_quote($object->ref,'/'));
+				$fileparams = dol_most_recent_file($conf->commande->dir_output . '/' . $ref, preg_quote($ref,'/'));
 				$file=$fileparams['fullname'];
 
 				// Build document if it not exists
@@ -2397,7 +2397,7 @@ if ($action == 'send' && ! GETPOST('addfile') && ! GETPOST('removedfile') && ! G
 						dol_print_error($db,$result);
 						exit;
 					}
-					$fileparams = dol_most_recent_file($conf->commande->dir_output . '/' . $ref, preg_quote($object->ref,'/'));
+					$fileparams = dol_most_recent_file($conf->commande->dir_output . '/' . $ref, preg_quote($ref,'/'));
 					$file=$fileparams['fullname'];
 				}
 
@@ -2427,11 +2427,11 @@ if ($action == 'send' && ! GETPOST('addfile') && ! GETPOST('removedfile') && ! G
 				$formmail->substit['__SIGNATURE__']=$user->signature;
 				$formmail->substit['__PERSONALIZED__']='';
 				$formmail->substit['__CONTACTCIVNAME__']='';
-				
+
 				$custcontact='';
 				$contactarr=array();
 				$contactarr=$object->liste_contact(-1,'external');
-				 
+
 				if (is_array($contactarr) && count($contactarr)>0) {
 					foreach($contactarr as $contact) {
 						if ($contact['libelle']==$langs->trans('TypeContact_commande_external_CUSTOMER')) {
@@ -2440,12 +2440,12 @@ if ($action == 'send' && ! GETPOST('addfile') && ! GETPOST('removedfile') && ! G
 							$custcontact=$contactstatic->getFullName($langs,1);
 						}
 					}
-					 
+
 					if (!empty($custcontact)) {
 						$formmail->substit['__CONTACTCIVNAME__']=$custcontact;
 					}
 				}
-				
+
 				// Tableau des parametres complementaires
 				$formmail->param['action']='send';
 				$formmail->param['models']='order_send';
diff --git a/htdocs/commande/index.php b/htdocs/commande/index.php
index 3301721df7ad75ac123a44bfd372e3a8e72f121c..e0e2e09df73b63d5da74ad185fdc604462b300ce 100644
--- a/htdocs/commande/index.php
+++ b/htdocs/commande/index.php
@@ -57,7 +57,7 @@ print_fiche_titre($langs->trans("OrdersArea"));
 
 //print '<table width="100%" class="notopnoleftnoright">';
 //print '<tr><td valign="top" width="30%" class="notopnoleft">';
-print '<div class="fichecenter"><div class="fichethirdleft">';
+print '<div class="fichecenter"><div class="fichethirdleft">';
 
 
 /*
@@ -207,7 +207,7 @@ if (! empty($conf->commande->enabled))
 
 
 //print '</td><td valign="top" width="70%" class="notopnoleftnoright">';
-print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
+print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
 
 
 $max=5;
@@ -425,7 +425,7 @@ if (! empty($conf->commande->enabled))
 
 
 //print '</td></tr></table>';
-print '<div></div></div>';
+print '</div></div></div>';
 
 
 llxFooter();
diff --git a/htdocs/compta/bank/rappro.php b/htdocs/compta/bank/rappro.php
index d631e8e184384ad1e294584cdf596a7015b4caaf..4e8b717201c29edbd59e1c0f5c06d4d8591bee6a 100644
--- a/htdocs/compta/bank/rappro.php
+++ b/htdocs/compta/bank/rappro.php
@@ -443,7 +443,7 @@ if ($resql)
 
     print "</table><br>\n";
 
-    print '<div align="right"><input class="button" type="submit" value="'.$langs->trans("Conciliate").'"></div><br>';
+    print '<div align="right"><input class="button" type="submit" value="'.$langs->trans("Conciliate").'"></div><br>';
 
     print "</form>\n";
 
diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php
index c24f09f4baabdbb6684f09679ae98b3afc9950e0..0cc27d366cf3387bd0a2d96d7aee662ec2d33d92 100644
--- a/htdocs/compta/facture.php
+++ b/htdocs/compta/facture.php
@@ -2267,7 +2267,7 @@ else if ($id > 0 || ! empty($ref))
 
         $soc = new Societe($db);
         $soc->fetch($object->socid);
-        $selleruserevenustamp=$mysoc->useRevenueStamp();
+        $selleruserevenustamp=$mysoc->useRevenueStamp();
 
         $totalpaye  = $object->getSommePaiement();
         $totalcreditnotes = $object->getSumCreditNotesUsed();
@@ -2738,7 +2738,7 @@ else if ($id > 0 || ! empty($ref))
         if (! empty($conf->banque->enabled)) $nbcols++;
         if($mysoc->localtax1_assuj=="1") $nbrows++;
         if($mysoc->localtax2_assuj=="1") $nbrows++;
-        if ($selleruserevenustamp) $nbrows++;
+        if ($selleruserevenustamp) $nbrows++;
 
         print '<td rowspan="'.$nbrows.'" colspan="2" valign="top">';
 
@@ -3027,16 +3027,16 @@ else if ($id > 0 || ! empty($ref))
 
         // Revenue stamp
         if ($selleruserevenustamp)		// Test company use revenue stamp
-        {
-	        print '<tr><td>';
-	        print '<table class="nobordernopadding" width="100%"><tr><td>';
-	        print $langs->trans('RevenueStamp');
-	        print '</td>';
-	        if ($action != 'editrevenuestamp' && ! empty($object->brouillon) && $user->rights->facture->creer) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editrevenuestamp&amp;facid='.$object->id.'">'.img_edit($langs->trans('SetRevenuStamp'),1).'</a></td>';
-	        print '</tr></table>';
-	        print '</td><td colspan="3" align="right">';
-	        if ($action == 'editrevenuestamp')
-	        {
+        {
+	        print '<tr><td>';
+	        print '<table class="nobordernopadding" width="100%"><tr><td>';
+	        print $langs->trans('RevenueStamp');
+	        print '</td>';
+	        if ($action != 'editrevenuestamp' && ! empty($object->brouillon) && $user->rights->facture->creer) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editrevenuestamp&amp;facid='.$object->id.'">'.img_edit($langs->trans('SetRevenuStamp'),1).'</a></td>';
+	        print '</tr></table>';
+	        print '</td><td colspan="3" align="right">';
+	        if ($action == 'editrevenuestamp')
+	        {
 				print '<form action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'" method="post">';
 				print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
 				print '<input type="hidden" name="action" value="setrevenuestamp">';
@@ -3044,12 +3044,12 @@ else if ($id > 0 || ! empty($ref))
 				//print '<input type="text" class="flat" size="4" name="revenuestamp" value="'.price2num($object->revenuestamp).'">';
 				print ' <input type="submit" class="button" value="'.$langs->trans('Modify').'">';
 				print '</form>';
-	        }
-	        else
-	        {
-	        	print price($object->revenuestamp,1,'',1,-1,-1,$conf->currency);
-	        }
-	        print '</td></tr>';
+	        }
+	        else
+	        {
+	        	print price($object->revenuestamp,1,'',1,-1,-1,$conf->currency);
+	        }
+	        print '</td></tr>';
         }
 
         // Total with tax
@@ -3122,7 +3122,7 @@ else if ($id > 0 || ! empty($ref))
 	        		{
 	        			$value = isset($_POST["options_".$key])?dol_mktime($_POST["options_".$key."hour"], $_POST["options_".$key."min"], 0, $_POST["options_".$key."month"], $_POST["options_".$key."day"], $_POST["options_".$key."year"]):$object->array_options['options_'.$key];
 	        		}
-	        		
+
 	        		if ($action == 'edit_extras' && $user->rights->facture->creer)
 	        		{
 	        			print $extrafields->showInputField($key,$value);
@@ -3495,7 +3495,7 @@ else if ($id > 0 || ! empty($ref))
 
             $ref = dol_sanitizeFileName($object->ref);
             include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
-            $fileparams = dol_most_recent_file($conf->facture->dir_output . '/' . $ref, preg_quote($object->ref,'/'));
+            $fileparams = dol_most_recent_file($conf->facture->dir_output . '/' . $ref, preg_quote($ref,'/'));
             $file=$fileparams['fullname'];
 
             // Build document if it not exists
@@ -3518,7 +3518,7 @@ else if ($id > 0 || ! empty($ref))
                     dol_print_error($db,$result);
                     exit;
                 }
-                $fileparams = dol_most_recent_file($conf->facture->dir_output . '/' . $ref, preg_quote($object->ref,'/'));
+                $fileparams = dol_most_recent_file($conf->facture->dir_output . '/' . $ref, preg_quote($ref,'/'));
                 $file=$fileparams['fullname'];
             }
 
@@ -3547,31 +3547,31 @@ else if ($id > 0 || ! empty($ref))
             $formmail->substit['__FACREF__']=$object->ref;
             $formmail->substit['__SIGNATURE__']=$user->signature;
             $formmail->substit['__PERSONALIZED__']='';
-            $formmail->substit['__CONTACTCIVNAME__']='';  
-            
+            $formmail->substit['__CONTACTCIVNAME__']='';
+
             //Find the good contact adress
             $custcontact='';
             $contactarr=array();
             $contactarr=$object->liste_contact(-1,'external');
-            	
+
             if (is_array($contactarr) && count($contactarr)>0) {
             	foreach($contactarr as $contact) {
             		if ($contact['libelle']==$langs->trans('TypeContact_facture_external_BILLING')) {
-            			
+
             			require_once DOL_DOCUMENT_ROOT . '/contact/class/contact.class.php';
-            			
+
             			$contactstatic=new Contact($db);
             			$contactstatic->fetch($contact['id']);
             			$custcontact=$contactstatic->getFullName($langs,1);
             		}
             	}
-            
+
             	if (!empty($custcontact)) {
             		$formmail->substit['__CONTACTCIVNAME__']=$custcontact;
             	}
             }
-            
-            
+
+
             // Tableau des parametres complementaires du post
             $formmail->param['action']=$action;
             $formmail->param['models']=$modelmail;
diff --git a/htdocs/compta/facture/impayees.php b/htdocs/compta/facture/impayees.php
index 086b9a35fc4b09e9549260bcfc711589cd02befd..240ad867358f48952012feacb3e5f6e0a4907536 100644
--- a/htdocs/compta/facture/impayees.php
+++ b/htdocs/compta/facture/impayees.php
@@ -377,7 +377,7 @@ if ($resql)
 			print '<td align="right">';
 			$cn=$facturestatic->getSumCreditNotesUsed();
 			if (! empty($objp->am)) print price($objp->am);
-			if (! empty($objp->am) && ! empty($cn)) print '+';
+			if (! empty($objp->am) && ! empty($cn)) print '+';
 			if (! empty($cn)) print price($cn);
 			print '</td>';
 			
diff --git a/htdocs/compta/index.php b/htdocs/compta/index.php
index d4aad86977eda3cd5bb0b4f7c5d8538a162d7064..ec2dc5997e24b995e1c4c2694dc95a79e7708ec2 100644
--- a/htdocs/compta/index.php
+++ b/htdocs/compta/index.php
@@ -106,7 +106,7 @@ print_fiche_titre($langs->trans("AccountancyTreasuryArea"));
 
 //print '<table border="0" width="100%" class="notopnoleftnoright">';
 //print '<tr><td valign="top" width="30%" class="notopnoleft">';
-print '<div class="fichecenter"><div class="fichethirdleft">';
+print '<div class="fichecenter"><div class="fichethirdleft">';
 
 $max=3;
 
@@ -324,7 +324,7 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->facture-
 
 
 //print '</td><td valign="top" width="70%" class="notopnoleftnoright">';
-print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
+print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
 
 
 // Last modified customer invoices
@@ -1033,7 +1033,7 @@ if ($resql)
 }
 
 //print '</td></tr></table>';
-print '<div></div></div>';
+print '</div></div></div>';
 
 llxFooter();
 
diff --git a/htdocs/compta/paiement/cheque/index.php b/htdocs/compta/paiement/cheque/index.php
index 45a1f665a37ef47c37b6d9ae7f5882b26fc26025..b3ccf19ae19277c06e401332179991e0c9b0b7db 100644
--- a/htdocs/compta/paiement/cheque/index.php
+++ b/htdocs/compta/paiement/cheque/index.php
@@ -48,7 +48,7 @@ print_fiche_titre($langs->trans("ChequesArea"));
 
 //print '<table border="0" width="100%" class="notopnoleftnoright">';
 //print '<tr><td valign="top" width="30%" class="notopnoleft">';
-print '<div class="fichecenter"><div class="fichethirdleft">';
+print '<div class="fichecenter"><div class="fichethirdleft">';
 
 $sql = "SELECT count(b.rowid)";
 $sql.= " FROM ".MAIN_DB_PREFIX."bank as b";
@@ -87,7 +87,7 @@ else
 
 
 //print '</td><td valign="top" width="70%" class="notopnoleftnoright">';
-print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
+print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
 
 
 $sql = "SELECT bc.rowid, bc.date_bordereau as db, bc.amount, bc.number as ref";
@@ -146,7 +146,7 @@ else
 
 
 //print "</td></tr></table>\n";
-print '<div></div></div>';
+print '</div></div></div>';
 
 llxFooter();
 
diff --git a/htdocs/compta/prelevement/index.php b/htdocs/compta/prelevement/index.php
index 5fdd334db5501cd6cb47e1e931aa15ad946ed594..100a6eb0861929cb8ea116094f0c03bc8a3f42e6 100644
--- a/htdocs/compta/prelevement/index.php
+++ b/htdocs/compta/prelevement/index.php
@@ -63,7 +63,7 @@ print_fiche_titre($langs->trans("CustomersStandingOrdersArea"));
 
 //print '<table border="0" width="100%" class="notopnoleftnoright">';
 //print '<tr><td valign="top" width="30%" class="notopnoleft">';
-print '<div class="fichecenter"><div class="fichethirdleft">';
+print '<div class="fichecenter"><div class="fichethirdleft">';
 
 
 $thirdpartystatic=new Societe($db);
@@ -88,7 +88,7 @@ print '</td></tr></table><br>';
 
 
 //print '</td><td valign="top" width="70%">';
-print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
+print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
 
 
 /*
@@ -221,7 +221,7 @@ else
 
 
 //print '</td></tr></table>';
-print '<div></div></div>';
+print '</div></div></div>';
 
 llxFooter();
 
diff --git a/htdocs/compta/recap-compta.php b/htdocs/compta/recap-compta.php
index bc89cf7de7ed735bfc037a699c5d1e7d1bc5c683..0cc7e2008e63d03503be8f90eb13eef0dedd47da 100644
--- a/htdocs/compta/recap-compta.php
+++ b/htdocs/compta/recap-compta.php
@@ -189,8 +189,8 @@ if ($socid > 0)
 						print '<td align="right">'.price($solde)."</td>\n";
 
 						// Author
-						$userstatic->id=$objp->userid;
-						$userstatic->login=$objp->login;
+						$userstatic->id=$objp->userid;
+						$userstatic->login=$objp->login;
 						print '<td nowrap="nowrap" align="right">';
 						print $userstatic->getLoginUrl(1);
 						print '</td>';
diff --git a/htdocs/compta/ventilation/index.php b/htdocs/compta/ventilation/index.php
index d01d173573459411a293c6e8bd4994f1bc27434b..f98b3ed7ac18516af7f6702e4037032d74986740 100644
--- a/htdocs/compta/ventilation/index.php
+++ b/htdocs/compta/ventilation/index.php
@@ -34,7 +34,7 @@ print_fiche_titre("Ventilation Comptable");
 
 //print '<table border="0" width="100%" class="notopnoleftnoright">';
 //print '<tr><td valign="top" width="30%" class="notopnoleft">';
-print '<div class="fichecenter"><div class="fichethirdleft">';
+print '<div class="fichecenter"><div class="fichethirdleft">';
 
 $sql = "SELECT count(*) FROM ".MAIN_DB_PREFIX."facturedet as fd";
 $sql.= " , ".MAIN_DB_PREFIX."facture as f";
@@ -62,7 +62,7 @@ print "</table>\n";
 
 
 //print '</td><td valign="top" width="70%" class="notopnoleftnoright">';
-print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
+print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
 
 
 print '<table class="noborder" width="100%">';
@@ -94,7 +94,7 @@ if ($resql)
 print "</table>\n";
 
 //print '</td></tr></table>';
-print '<div></div></div>';
+print '</div></div></div>';
 
 
 llxFooter();
diff --git a/htdocs/contrat/index.php b/htdocs/contrat/index.php
index 88220fa7e291a9e4fce15e7ea689bd2532a295dd..2e9ab1b1cb64ace7403417e5495d9a1efdbb152a 100644
--- a/htdocs/contrat/index.php
+++ b/htdocs/contrat/index.php
@@ -66,9 +66,9 @@ llxHeader();
 print_fiche_titre($langs->trans("ContractsArea"));
 
 
-//print '<table border="0" width="100%" class="notopnoleftnoright">';
-//print '<tr><td valign="top" width="30%" class="notopnoleft">';
-print '<div class="fichecenter"><div class="fichethirdleft">';
+//print '<table border="0" width="100%" class="notopnoleftnoright">';
+//print '<tr><td valign="top" width="30%" class="notopnoleft">';
+print '<div class="fichecenter"><div class="fichethirdleft">';
 
 
 // Search contract
@@ -286,8 +286,8 @@ if (! empty($conf->contrat->enabled) && $user->rights->contrat->lire)
 }
 
 
-//print '</td><td valign="top" width="70%" class="notopnoleftnoright">';
-print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
+//print '</td><td valign="top" width="70%" class="notopnoleftnoright">';
+print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
 
 
 // Last modified contracts
@@ -604,7 +604,7 @@ else
 
 
 //print '</td></tr></table>';
-print '<div></div></div>';
+print '</div></div></div>';
 
 
 llxFooter();
diff --git a/htdocs/core/class/commondocgenerator.class.php b/htdocs/core/class/commondocgenerator.class.php
index 9561aa288fbe5ee178b652b01b2ee639c9394ee7..0f4264b223f01456660cf0530f5018a98252bf33 100755
--- a/htdocs/core/class/commondocgenerator.class.php
+++ b/htdocs/core/class/commondocgenerator.class.php
@@ -51,7 +51,14 @@ abstract class CommonDocGenerator
             'myuser_firstname'=>$user->firstname,
             'myuser_login'=>$user->login,
             'myuser_phone'=>$user->office_phone,
-            'myuser_fax'=>$user->office_fax,
+       		'myuser_address'=>$user->address,
+       		'myuser_zip'=>$user->zip,
+       		'myuser_town'=>$user->town,
+       		'myuser_country'=>$user->country,
+        	'myuser_country_code'=>$user->country_code,
+       		'myuser_state'=>$user->state,
+        	'myuser_state_code'=>$user->state_code,
+        	'myuser_fax'=>$user->office_fax,
             'myuser_mobile'=>$user->user_mobile,
             'myuser_email'=>$user->email,
             'myuser_web'=>''	// url not exist in $user object
@@ -190,6 +197,28 @@ abstract class CommonDocGenerator
     }
 
 
+    /**
+     * Define array with couple subtitution key => subtitution value
+     *
+     * @param   Translate	$outputlangs    Language object for output
+     * @return	array						Array of substitution key->code
+     */
+    function get_substitutionarray_other($outputlangs)
+    {
+    	global $conf;
+
+    	$now=dol_now('gmt');	// gmt
+    	$array_other = array(
+   			'current_date'=>dol_print_date($now,'day','tzuser'),
+   			'current_datehour'=>dol_print_date($now,'dayhour','tzuser'),
+   			'current_server_date'=>dol_print_date($now,'day','tzserver'),
+   			'current_server_datehour'=>dol_print_date($now,'dayhour','tzserver'),
+    	);
+
+    	return $array_other;
+    }
+    
+    
     /**
      * Define array with couple substitution key => substitution value
      *
diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php
index 43fb4234558ae504c854b9499f1ff580f7dbdba5..fe349bcf649c6ff18b07c26c55e39d3454352ca2 100644
--- a/htdocs/core/class/commonobject.class.php
+++ b/htdocs/core/class/commonobject.class.php
@@ -1556,8 +1556,8 @@ abstract class CommonObject
                 $i++;
             }
 
-            // Add revenue stamp to total
-            $this->total_ttc       += isset($this->revenuestamp)?$this->revenuestamp:0;
+            // Add revenue stamp to total
+            $this->total_ttc       += isset($this->revenuestamp)?$this->revenuestamp:0;
             
             $this->db->free($resql);
 
@@ -2790,12 +2790,12 @@ abstract class CommonObject
 			// Product
 			if ($line->fk_product > 0)
 			{
-				$product_static = new Product($this->db);
-
-				$product_static->type=$line->fk_product_type;
-				$product_static->id=$line->fk_product;
-				$product_static->ref=$line->ref;
-				$text=$product_static->getNomUrl(1);
+				$product_static = new Product($this->db);
+
+				$product_static->type=$line->fk_product_type;
+				$product_static->id=$line->fk_product;
+				$product_static->ref=$line->ref;
+				$text=$product_static->getNomUrl(1);
 
 				// Define output language (TODO Does this works ?)
 				if (! empty($conf->global->MAIN_MULTILANGS) && ! empty($conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE))
diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php
index 4807ec768fab64ca31a74f27fc04ebd14158bb43..7d7713b297c8b2b9a265c5626bdb2a80f5e9b164 100644
--- a/htdocs/core/class/html.form.class.php
+++ b/htdocs/core/class/html.form.class.php
@@ -691,19 +691,19 @@ 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';
-                	$product = new Product($this->db);
-                	$product->fetch($selected);
-                	$selected_input_value=$product->ref;
-                }
+				if ($selected && empty($selected_input_value))
+                {
+                	require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
+                	$product = new Product($this->db);
+                	$product->fetch($selected);
+                	$selected_input_value=$product->ref;
+                }
                 // mode=1 means customers products
-                $ajaxoptions=array();
-                $urloption='htmlname='.$htmlname.'&outjson=1&filter='.urlencode($filter).'&showtype='.$showtype;
-				$out.=ajax_autocompleter($selected, $htmlname, DOL_URL_ROOT.'/societe/ajax/company.php', $urloption, $conf->global->COMPANY_USE_SEARCH_TO_SELECT, 0, $ajaxoptions);
+                $ajaxoptions=array();
+                $urloption='htmlname='.$htmlname.'&outjson=1&filter='.urlencode($filter).'&showtype='.$showtype;
+				$out.=ajax_autocompleter($selected, $htmlname, DOL_URL_ROOT.'/societe/ajax/company.php', $urloption, $conf->global->COMPANY_USE_SEARCH_TO_SELECT, 0, $ajaxoptions);
                 $out.='<input type="text" size="20" name="search_'.$htmlname.'" id="search_'.$htmlname.'" value="'.$selected_input_value.'" />';
-				*/
+				*/
             }
 
             $out.= '<select id="'.$htmlname.'" class="flat" name="'.$htmlname.'">';
diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php
index 840e2912766b1ef57bbda9c1c4c69e9b8cc6f0df..51c2f981c4be068068e01b5662f21a3523f03c48 100644
--- a/htdocs/core/class/html.formfile.class.php
+++ b/htdocs/core/class/html.formfile.class.php
@@ -359,9 +359,9 @@ class FormFile
                 }
                 // For normalized external modules
                 else
-              {
-                	$file=dol_buildpath('/'.$modulepart.'/core/modules/'.$modulepart.'/modules_'.$modulepart.'.php',0);
-                	$res=include_once $file;
+              {
+                	$file=dol_buildpath('/'.$modulepart.'/core/modules/'.$modulepart.'/modules_'.$modulepart.'.php',0);
+                	$res=include_once $file;
                 }
                 $class='Modele'.ucfirst($modulepart);
                 if (class_exists($class))
diff --git a/htdocs/core/class/html.formother.class.php b/htdocs/core/class/html.formother.class.php
index cf7c6fb8bf6af49906fba03a24f9bbd3494ade7d..9fca74bc39754da1eb347099d876004394cb1618 100644
--- a/htdocs/core/class/html.formother.class.php
+++ b/htdocs/core/class/html.formother.class.php
@@ -208,59 +208,59 @@ class FormOther
     }
 
 
-    /**
-     *    Return list of revenue stamp for country
-     *
-     *    @param	string	$selected   Value of preselected revenue stamp
-     *    @param    string	$htmlname   Name of combo list
-     *    @return	string				HTML select list
-     */
-    function select_revenue_stamp($selected='',$htmlname='revenuestamp',$country_code='')
-    {
-    	global $langs;
+    /**
+     *    Return list of revenue stamp for country
+     *
+     *    @param	string	$selected   Value of preselected revenue stamp
+     *    @param    string	$htmlname   Name of combo list
+     *    @return	string				HTML select list
+     */
+    function select_revenue_stamp($selected='',$htmlname='revenuestamp',$country_code='')
+    {
+    	global $langs;
 
     	$out='';
-
-    	$sql = "SELECT r.taux";
-    	$sql.= " FROM ".MAIN_DB_PREFIX."c_revenuestamp as r,".MAIN_DB_PREFIX."c_pays as p";
-    	$sql.= " WHERE r.active = 1 AND r.fk_pays = p.rowid";
-    	$sql.= " AND p.code = '".$country_code."'";
-
-    	dol_syslog(get_class($this).'::select_revenue_stamp sql='.$sql);
-    	$resql=$this->db->query($sql);
-    	if ($resql)
-    	{
-    		$out.='<select class="flat" name="'.$htmlname.'">';
-    		$num = $this->db->num_rows($resql);
-    		$i = 0;
-    		$out.='<option value="0">&nbsp;</option>'."\n";
-    		if ($num)
-    		{
-    			while ($i < $num)
-    			{
-    				$obj = $this->db->fetch_object($resql);
-    				if (($selected && $selected == $obj->taux) || $num == 1)
-    				{
-    					$out.='<option value="'.$obj->taux.'" selected="selected">';
-    				}
-    				else
-    				{
-    					$out.='<option value="'.$obj->taux.'">';
-    					//print '<option onmouseover="showtip(\''.$obj->libelle.'\')" onMouseout="hidetip()" value="'.$obj->rowid.'">';
-    				}
-    				$out.=$obj->taux;
-    				$out.='</option>';
-    				$i++;
-    			}
-    		}
-    		$out.='</select>';
-    		return $out;
-    	}
-    	else
-    	{
-    		dol_print_error($this->db);
-    		return '';
-    	}
+
+    	$sql = "SELECT r.taux";
+    	$sql.= " FROM ".MAIN_DB_PREFIX."c_revenuestamp as r,".MAIN_DB_PREFIX."c_pays as p";
+    	$sql.= " WHERE r.active = 1 AND r.fk_pays = p.rowid";
+    	$sql.= " AND p.code = '".$country_code."'";
+
+    	dol_syslog(get_class($this).'::select_revenue_stamp sql='.$sql);
+    	$resql=$this->db->query($sql);
+    	if ($resql)
+    	{
+    		$out.='<select class="flat" name="'.$htmlname.'">';
+    		$num = $this->db->num_rows($resql);
+    		$i = 0;
+    		$out.='<option value="0">&nbsp;</option>'."\n";
+    		if ($num)
+    		{
+    			while ($i < $num)
+    			{
+    				$obj = $this->db->fetch_object($resql);
+    				if (($selected && $selected == $obj->taux) || $num == 1)
+    				{
+    					$out.='<option value="'.$obj->taux.'" selected="selected">';
+    				}
+    				else
+    				{
+    					$out.='<option value="'.$obj->taux.'">';
+    					//print '<option onmouseover="showtip(\''.$obj->libelle.'\')" onMouseout="hidetip()" value="'.$obj->rowid.'">';
+    				}
+    				$out.=$obj->taux;
+    				$out.='</option>';
+    				$i++;
+    			}
+    		}
+    		$out.='</select>';
+    		return $out;
+    	}
+    	else
+    	{
+    		dol_print_error($this->db);
+    		return '';
+    	}
     }
 
 
diff --git a/htdocs/core/class/menubase.class.php b/htdocs/core/class/menubase.class.php
index 7ae947ee518971cf19fd32eb3da6c528d61998fb..5ebccdeb1bde7ad342f43b5a7c8580581bf7741a 100644
--- a/htdocs/core/class/menubase.class.php
+++ b/htdocs/core/class/menubase.class.php
@@ -512,6 +512,7 @@ class Menubase
         if ($type_user == 0) $sql.= " AND m.usertype IN (0,2)";
         if ($type_user == 1) $sql.= " AND m.usertype IN (1,2)";
         $sql.= " ORDER BY m.position, m.rowid";
+		//print $sql;
 
 //$tmp1=dol_microtime_float();
 //print '>>> 1 0<br>';
@@ -533,17 +534,21 @@ class Menubase
                 $perms = true;
                 if ($menu['perms'])
                 {
-                    $perms = verifCond($menu['perms']);
-                    //print "verifCond rowid=".$menu['rowid']." ".$menu['perms'].":".$perms."<br>\n";
+                	$tmpcond=$menu['perms'];
+                	if ($leftmenu == 'all') $tmpcond=preg_replace('/\$leftmenu\s*==\s*["\'a-zA-Z]+/','1==1',$tmpcond);	// Force part of condition to true
+                	$perms = verifCond($tmpcond);
+                    //print "verifCond rowid=".$menu['rowid']." ".$tmpcond.":".$perms."<br>\n";
                 }
 
                 // Define $enabled
                 $enabled = true;
                 if ($menu['enabled'])
                 {
-                    $enabled = verifCond($menu['enabled']);
+                	$tmpcond=$menu['enabled'];
+                	if ($leftmenu == 'all') $tmpcond=preg_replace('/\$leftmenu\s*==\s*["\'a-zA-Z]+/','1==1',$tmpcond);	// Force part of condition to true
+                    $enabled = verifCond($tmpcond);
                     if ($conf->use_javascript_ajax && ! empty($conf->global->MAIN_MENU_USE_JQUERY_ACCORDION) && preg_match('/^\$leftmenu/',$menu['enabled'])) $enabled=1;
-                    //print "verifCond rowid=".$menu['rowid']." ".$menu['enabled'].":".$enabled."<br>\n";
+                    //print "verifCond rowid=".$menu['rowid']." ".$tmpcond.":".$enabled."<br>\n";
                 }
 
                 // Define $title
diff --git a/htdocs/core/db/mysql.class.php b/htdocs/core/db/mysql.class.php
index 1143372bb98732c32dec1fad020f8aa6be2d512c..4868fb81642aa31439a1e68dc557ef39f5b83c60 100644
--- a/htdocs/core/db/mysql.class.php
+++ b/htdocs/core/db/mysql.class.php
@@ -886,21 +886,23 @@ class DoliDBMysql
 			$sqlfields[$i] = $field_name." ";
 			$sqlfields[$i]  .= $field_desc['type'];
 			if( preg_match("/^[^\s]/i",$field_desc['value']))
-			$sqlfields[$i]  .= "(".$field_desc['value'].")";
-			else if( preg_match("/^[^\s]/i",$field_desc['attribute']))
-			$sqlfields[$i]  .= " ".$field_desc['attribute'];
-			else if( preg_match("/^[^\s]/i",$field_desc['default']))
+				$sqlfields[$i]  .= "(".$field_desc['value'].")";
+			if( preg_match("/^[^\s]/i",$field_desc['attribute']))
+				$sqlfields[$i]  .= " ".$field_desc['attribute'];
+			if( preg_match("/^[^\s]/i",$field_desc['default']))
 			{
 				if(preg_match("/null/i",$field_desc['default']))
-				$sqlfields[$i]  .= " default ".$field_desc['default'];
+					$sqlfields[$i]  .= " default ".$field_desc['default'];
+				elseif ($field_desc['default'] == 'CURRENT_TIMESTAMP')
+					$sqlfields[$i]  .= " default ".$field_desc['default'];
 				else
-				$sqlfields[$i]  .= " default '".$field_desc['default']."'";
+					$sqlfields[$i]  .= " default '".$field_desc['default']."'";
 			}
-			else if( preg_match("/^[^\s]/i",$field_desc['null']))
-			$sqlfields[$i]  .= " ".$field_desc['null'];
+			if( preg_match("/^[^\s]/i",$field_desc['null']))
+				$sqlfields[$i]  .= " ".$field_desc['null'];
 
-			else if( preg_match("/^[^\s]/i",$field_desc['extra']))
-			$sqlfields[$i]  .= " ".$field_desc['extra'];
+			if( preg_match("/^[^\s]/i",$field_desc['extra']))
+				$sqlfields[$i]  .= " ".$field_desc['extra'];
 			$i++;
 		}
 		if($primary_key != "")
diff --git a/htdocs/core/db/mysqli.class.php b/htdocs/core/db/mysqli.class.php
index 2180546dc39ffe5d87ad11628627375ecea7c079..e2db251db1ce6f1d777d69a3370cbe0656cc53b1 100644
--- a/htdocs/core/db/mysqli.class.php
+++ b/htdocs/core/db/mysqli.class.php
@@ -879,22 +879,27 @@ class DoliDBMysqli
         {
             $sqlfields[$i] = $field_name." ";
             $sqlfields[$i]  .= $field_desc['type'];
+
             if( preg_match("/^[^\s]/i",$field_desc['value']))
-            $sqlfields[$i]  .= "(".$field_desc['value'].")";
-            else if( preg_match("/^[^\s]/i",$field_desc['attribute']))
-            $sqlfields[$i]  .= " ".$field_desc['attribute'];
-            else if( preg_match("/^[^\s]/i",$field_desc['default']))
+                $sqlfields[$i]  .= "(".$field_desc['value'].")";
+
+            if( preg_match("/^[^\s]/i",$field_desc['attribute']))
+                $sqlfields[$i]  .= " ".$field_desc['attribute'];
+
+            if( preg_match("/^[^\s]/i",$field_desc['default']))
             {
                 if(preg_match("/null/i",$field_desc['default']))
-                $sqlfields[$i]  .= " default ".$field_desc['default'];
+                    $sqlfields[$i]  .= " default ".$field_desc['default'];
+		elseif ($field_desc['default'] == 'CURRENT_TIMESTAMP')
+		    $sqlfields[$i]  .= " default ".$field_desc['default'];
                 else
-                $sqlfields[$i]  .= " default '".$field_desc['default']."'";
+                    $sqlfields[$i]  .= " default '".$field_desc['default']."'";
             }
-            else if( preg_match("/^[^\s]/i",$field_desc['null']))
-            $sqlfields[$i]  .= " ".$field_desc['null'];
+            if( preg_match("/^[^\s]/i",$field_desc['null']))
+                $sqlfields[$i]  .= " ".$field_desc['null'];
 
-            else if( preg_match("/^[^\s]/i",$field_desc['extra']))
-            $sqlfields[$i]  .= " ".$field_desc['extra'];
+            if( preg_match("/^[^\s]/i",$field_desc['extra']))
+                $sqlfields[$i]  .= " ".$field_desc['extra'];
             $i++;
         }
         if($primary_key != "")
diff --git a/htdocs/core/getmenu_jmobile.php b/htdocs/core/getmenu_jmobile.php
index f7eaada82839acfac4b174fdb7340119ee9d4dc7..78c46c60fbbc3eab6b770bdbf1d6cc6882765301 100644
--- a/htdocs/core/getmenu_jmobile.php
+++ b/htdocs/core/getmenu_jmobile.php
@@ -51,44 +51,44 @@ $left=($langs->trans("DIRECTION")=='rtl'?'right':'left');
  */
 
 // URL http://mydolibarr/core/getmenu_jmobime?mainmenu=mainmenu&leftmenu=leftmenu can be used for tests
-$arrayofjs=array('/includes/jquery/plugins/mobile/jquery.mobile-latest.min.js');
+$arrayofjs=array('/includes/jquery/plugins/mobile/jquery.mobile-latest.min.js');
 $arrayofcss=array('/includes/jquery/plugins/mobile/jquery.mobile-latest.min.css');
 top_htmlhead($head, $title, $disablejs, $disablehead, $arrayofjs, $arrayofcss);
 
 print '<body>'."\n";
 
-if (empty($user->societe_id))    // If internal user or not defined
-{
-	$conf->standard_menu=(empty($conf->global->MAIN_MENU_STANDARD_FORCED)?(empty($conf->global->MAIN_MENU_STANDARD)?'eldy_menu.php':$conf->global->MAIN_MENU_STANDARD):$conf->global->MAIN_MENU_STANDARD_FORCED);
-	$conf->smart_menu=(empty($conf->global->MAIN_MENU_SMARTPHONE_FORCED)?(empty($conf->global->MAIN_MENU_SMARTPHONE)?'smartphone_menu.php':$conf->global->MAIN_MENU_SMARTPHONE):$conf->global->MAIN_MENU_SMARTPHONE_FORCED);
-}
-else                        // If external user
-{
-	$conf->standard_menu=(empty($conf->global->MAIN_MENUFRONT_STANDARD_FORCED)?(empty($conf->global->MAIN_MENUFRONT_STANDARD)?'eldy_menu.php':$conf->global->MAIN_MENUFRONT_STANDARD):$conf->global->MAIN_MENUFRONT_STANDARD_FORCED);
-	$conf->smart_menu=(empty($conf->global->MAIN_MENUFRONT_SMARTPHONE_FORCED)?(empty($conf->global->MAIN_MENUFRONT_SMARTPHONE)?'smartphone_menu.php':$conf->global->MAIN_MENUFRONT_SMARTPHONE):$conf->global->MAIN_MENUFRONT_SMARTPHONE_FORCED);
-}
-
-// Load the menu manager (only if not already done)
-$file_menu=empty($conf->browser->phone)?$conf->standard_menu:$conf->smart_menu;
-if (GETPOST('menu')) $file_menu=GETPOST('menu');     // example: menu=eldy_menu.php
-if (! class_exists('MenuManager'))
-{
-	$menufound=0;
-	$dirmenus=array_merge(array("/core/menus/"),(array) $conf->modules_parts['menus']);
-	foreach($dirmenus as $dirmenu)
-	{
-		$menufound=dol_include_once($dirmenu."standard/".$file_menu);
-		if ($menufound) break;
-	}
-	if (! $menufound)	// If failed to include, we try with standard
-	{
-		dol_syslog("You define a menu manager '".$file_menu."' that can not be loaded.", LOG_WARNING);
-		$file_menu='eldy_menu.php';
-		include_once DOL_DOCUMENT_ROOT."/core/menus/standard/".$file_menu;
-	}
-}
+if (empty($user->societe_id))    // If internal user or not defined
+{
+	$conf->standard_menu=(empty($conf->global->MAIN_MENU_STANDARD_FORCED)?(empty($conf->global->MAIN_MENU_STANDARD)?'eldy_menu.php':$conf->global->MAIN_MENU_STANDARD):$conf->global->MAIN_MENU_STANDARD_FORCED);
+	$conf->smart_menu=(empty($conf->global->MAIN_MENU_SMARTPHONE_FORCED)?(empty($conf->global->MAIN_MENU_SMARTPHONE)?'smartphone_menu.php':$conf->global->MAIN_MENU_SMARTPHONE):$conf->global->MAIN_MENU_SMARTPHONE_FORCED);
+}
+else                        // If external user
+{
+	$conf->standard_menu=(empty($conf->global->MAIN_MENUFRONT_STANDARD_FORCED)?(empty($conf->global->MAIN_MENUFRONT_STANDARD)?'eldy_menu.php':$conf->global->MAIN_MENUFRONT_STANDARD):$conf->global->MAIN_MENUFRONT_STANDARD_FORCED);
+	$conf->smart_menu=(empty($conf->global->MAIN_MENUFRONT_SMARTPHONE_FORCED)?(empty($conf->global->MAIN_MENUFRONT_SMARTPHONE)?'smartphone_menu.php':$conf->global->MAIN_MENUFRONT_SMARTPHONE):$conf->global->MAIN_MENUFRONT_SMARTPHONE_FORCED);
+}
+
+// Load the menu manager (only if not already done)
+$file_menu=empty($conf->browser->phone)?$conf->standard_menu:$conf->smart_menu;
+if (GETPOST('menu')) $file_menu=GETPOST('menu');     // example: menu=eldy_menu.php
+if (! class_exists('MenuManager'))
+{
+	$menufound=0;
+	$dirmenus=array_merge(array("/core/menus/"),(array) $conf->modules_parts['menus']);
+	foreach($dirmenus as $dirmenu)
+	{
+		$menufound=dol_include_once($dirmenu."standard/".$file_menu);
+		if ($menufound) break;
+	}
+	if (! $menufound)	// If failed to include, we try with standard
+	{
+		dol_syslog("You define a menu manager '".$file_menu."' that can not be loaded.", LOG_WARNING);
+		$file_menu='eldy_menu.php';
+		include_once DOL_DOCUMENT_ROOT."/core/menus/standard/".$file_menu;
+	}
+}
 $menumanager = new MenuManager($db, empty($user->societe_id)?0:1);
-$menumanager->loadMenu();
+$menumanager->loadMenu('all','all');
 
 $menumanager->showmenu('jmobile');
 
diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php
index b7d012cc51acf0162c347a01afd720a48d27b44a..9b74e999fbe31fcb7230e31ea149ebe0fbdefa80 100644
--- a/htdocs/core/lib/company.lib.php
+++ b/htdocs/core/lib/company.lib.php
@@ -90,11 +90,11 @@ function societe_prepare_head($object)
         $head[$h][2] = 'note';
         $h++;
 
-        $head[$h][0] = DOL_URL_ROOT.'/societe/consumption.php?socid='.$object->id;
-        $head[$h][1] = $langs->trans("Referers");
-        $head[$h][2] = 'consumption';
-        $h++;
-
+        $head[$h][0] = DOL_URL_ROOT.'/societe/consumption.php?socid='.$object->id;
+        $head[$h][1] = $langs->trans("Referers");
+        $head[$h][2] = 'consumption';
+        $h++;
+
         // Attached files
         $head[$h][0] = DOL_URL_ROOT.'/societe/document.php?socid='.$object->id;
         $head[$h][1] = $langs->trans("Documents");
diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php
index 23bf990ae69eaf7a55da205b54b80106c22ecac3..726b3486e300ec1eb8807b24c0c2a9da4b93b265 100644
--- a/htdocs/core/lib/files.lib.php
+++ b/htdocs/core/lib/files.lib.php
@@ -42,7 +42,7 @@ function dol_basename($pathfile)
  *  @param	string	$path        	Starting path from which to search
  *  @param	string	$types        	Can be "directories", "files", or "all"
  *  @param	int		$recursive		Determines whether subdirectories are searched
- *  @param	string	$filter        	Regex for include filter
+ *  @param	string	$filter        	Regex filter to restrict list. This regex value must be escaped for '/', since this char is used for preg_match function
  *  @param	string	$excludefilter  Array of Regex for exclude filter (example: array('\.meta$','^\.'))
  *  @param	string	$sortcriteria	Sort criteria ("","fullname","name","date","size")
  *  @param	string	$sortorder		Sort order (SORT_ASC, SORT_DESC)
@@ -65,7 +65,7 @@ function dol_dir_list($path, $types="all", $recursive=0, $filter="", $excludefil
 	$path=preg_replace('/([\\/]+)$/i','',$path);
 	$newpath=dol_osencode($path);
 
-	if (! $nohook) 
+	if (! $nohook)
 	{
 		$hookmanager->initHooks(array('fileslib'));
 
@@ -1212,11 +1212,11 @@ function dol_uncompress($inputfile,$outputdir)
 
 
 /**
- * Return most recent file
+ * Return file(s) into a directory (by default most recent)
  *
  * @param 	string	$dir			Directory to scan
- * @param	string	$regexfilter	Regexfilter
- * @param	string	$excludefilter  Array of Regex for exclude filter (example: array('\.meta$','^\.'))
+ * @param	string	$regexfilter	Regex filter to restrict list. This regex value must be escaped for '/', since this char is used for preg_match function
+ * @param	string	$excludefilter  Array of Regex for exclude filter (example: array('\.meta$','^\.')). This regex value must be escaped for '/', since this char is used for preg_match function
  *  @param	int		$nohook			Disable all hooks
  * @return	string					Full path to most recent file
  */
@@ -1225,4 +1225,5 @@ function dol_most_recent_file($dir,$regexfilter='',$excludefilter=array('\.meta$
     $tmparray=dol_dir_list($dir,'files',0,$regexfilter,$excludefilter,'date',SORT_DESC,'',$nohook);
     return $tmparray[0];
 }
-?>
+
+?>
\ No newline at end of file
diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php
index edc39c6d164ef217605d94300ef28c2f6070c824..656841297add973b73119a8c7efdb753dcb468d0 100644
--- a/htdocs/core/lib/functions.lib.php
+++ b/htdocs/core/lib/functions.lib.php
@@ -1155,17 +1155,18 @@ function dol_print_email($email,$cid=0,$socid=0,$addlink=0,$max=64,$showinvalid=
  * 	@param 	string	$country 	Country code to use for formatting
  * 	@param 	int		$cid 		Id of contact if known
  * 	@param 	int		$socid 		Id of third party if known
- * 	@param 	int		$addlink	0=no link to create action
- * 	@param 	string	$separ 		separation between numbers for a better visibility example : xx.xx.xx.xx.xx
+ * 	@param 	int		$addlink	''=no link to create action, 'AC_TEL'=add link to clicktodial (if module enabled) and add link to create event (if conf->global->AGENDA_ADDACTIONFORPHONE set)
+ * 	@param 	string	$separ 		Separation between numbers for a better visibility example : xx.xx.xx.xx.xx
  * 	@return string 				Formated phone number
  */
-function dol_print_phone($phone,$country="FR",$cid=0,$socid=0,$addlink=0,$separ="&nbsp;")
+function dol_print_phone($phone,$country='',$cid=0,$socid=0,$addlink='',$separ="&nbsp;")
 {
-	global $conf,$user,$langs;
+	global $conf,$user,$langs,$mysoc;
 
 	// Clean phone parameter
 	$phone = preg_replace("/[\s.-]/","",trim($phone));
 	if (empty($phone)) { return ''; }
+	if (empty($country)) $country=$mysoc->country_code;
 
 	$newphone=$phone;
 	if (strtoupper($country) == "FR")
@@ -1198,8 +1199,11 @@ function dol_print_phone($phone,$country="FR",$cid=0,$socid=0,$addlink=0,$separ=
 		{
 			if (empty($user->clicktodial_loaded)) $user->fetch_clicktodial();
 
-			if (empty($conf->global->CLICKTODIAL_URL)) $urlmask='ErrorClickToDialModuleNotConfigured';
-			else $urlmask=$conf->global->CLICKTODIAL_URL;
+			// Define urlmask
+			$urlmask='ErrorClickToDialModuleNotConfigured';
+			if (! empty($conf->global->CLICKTODIAL_URL)) $urlmask=$conf->global->CLICKTODIAL_URL;
+			if (! empty($user->clicktodial_url)) $urlmask=$user->clicktodial_url;
+
 			$clicktodial_poste=(! empty($user->clicktodial_poste)?urlencode($user->clicktodial_poste):'');
 			$clicktodial_login=(! empty($user->clicktodial_login)?urlencode($user->clicktodial_login):'');
 			$clicktodial_password=(! empty($user->clicktodial_password)?urlencode($user->clicktodial_password):'');
@@ -1223,7 +1227,7 @@ function dol_print_phone($phone,$country="FR",$cid=0,$socid=0,$addlink=0,$separ=
 			$type='AC_TEL'; $link='';
 			if ($addlink == 'AC_FAX') $type='AC_FAX';
 			if (! empty($conf->global->AGENDA_ADDACTIONFORPHONE)) $link='<a href="'.DOL_URL_ROOT.'/comm/action/fiche.php?action=create&amp;backtopage=1&amp;actioncode='.$type.($cid?'&amp;contactid='.$cid:'').($socid?'&amp;socid='.$socid:'').'">'.img_object($langs->trans("AddAction"),"calendar").'</a>';
-			$newphone='<table class="nobordernopadding"><tr><td>'.$newphone.' </td><td>&nbsp;'.$link.'</td></tr></table>';
+			if ($link) $newphone='<table class="nobordernopadding"><tr><td>'.$newphone.' </td><td>&nbsp;'.$link.'</td></tr></table>';
 		}
 	}
 
@@ -2630,9 +2634,9 @@ function price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerou
 	{
 		$listofcurrenciesbefore=array('USD');
 		if (in_array($currency_code,$listofcurrenciesbefore)) $cursymbolbefore.=$outlangs->getCurrencySymbol($currency_code);
-		else $cursymbolafter.=$outlangs->getCurrencySymbol($currency_code);
+		else $cursymbolafter.=$outlangs->getCurrencySymbol($currency_code);
 	}
-	$output.=$cursymbolbefore.$end.$cursymbolafter;
+	$output.=$cursymbolbefore.$end.$cursymbolafter;
 
 	return $output;
 }
@@ -3660,21 +3664,21 @@ function dolGetFirstLastname($firstname,$lastname,$nameorder=-1)
 {
 	global $conf;
 
-	$ret='';
-	// If order not defined, we use the setup
-	if ($nameorder < 0) $nameorder=(empty($conf->global->MAIN_FIRSTNAME_NAME_POSITION));
-	if ($nameorder)
-	{
-		$ret.=$firstname;
-		if ($firstname && $lastname) $ret.=' ';
-		$ret.=$lastname;
-	}
-	else
-	{
-		$ret.=$lastname;
-		if ($firstname && $lastname) $ret.=' ';
-		$ret.=$firstname;
-	}
+	$ret='';
+	// If order not defined, we use the setup
+	if ($nameorder < 0) $nameorder=(empty($conf->global->MAIN_FIRSTNAME_NAME_POSITION));
+	if ($nameorder)
+	{
+		$ret.=$firstname;
+		if ($firstname && $lastname) $ret.=' ';
+		$ret.=$lastname;
+	}
+	else
+	{
+		$ret.=$lastname;
+		if ($firstname && $lastname) $ret.=' ';
+		$ret.=$firstname;
+	}
 	return $ret;
 }
 
@@ -4293,18 +4297,18 @@ function colorArrayToHex($arraycolor,$colorifnotfound='888888')
 	return dechex($arraycolor[0]).dechex($arraycolor[1]).dechex($arraycolor[2]);
 }
 
-/**
- * Set focus onto field with selector
- *
- * @param 	string	$selector	Selector ('#id')
- * @return	string				HTML code to set focus
- */
-function dol_set_focus($selector)
-{
-	print '<!-- Set focus onto a specific field -->'."\n";
-	print '<script type="text/javascript" language="javascript">jQuery(document).ready(function() { jQuery("'.$selector.'").focus(); });</script>'."\n";
-}
-
+/**
+ * Set focus onto field with selector
+ *
+ * @param 	string	$selector	Selector ('#id')
+ * @return	string				HTML code to set focus
+ */
+function dol_set_focus($selector)
+{
+	print '<!-- Set focus onto a specific field -->'."\n";
+	print '<script type="text/javascript" language="javascript">jQuery(document).ready(function() { jQuery("'.$selector.'").focus(); });</script>'."\n";
+}
+
 
 if (! function_exists('getmypid'))
 {
diff --git a/htdocs/core/lib/treeview.lib.php b/htdocs/core/lib/treeview.lib.php
index f565467575ee41edc9a8a833fc45b2e803fca04c..2e87dfceea8affd82d98f533823408af63f0ad0b 100644
--- a/htdocs/core/lib/treeview.lib.php
+++ b/htdocs/core/lib/treeview.lib.php
@@ -23,7 +23,7 @@
  */
 
 
-// ------------------------------- Used by ajax tree view -----------------
+// ------------------------------- Used by ajax tree view -----------------
 
 /**
  * Show indent and picto of a tree line. Return array with information of line.
@@ -159,7 +159,7 @@ function tree_recur($tab, $pere, $rang, $iddivjstree='iddivjstree')
 			print '</li>';
 		}
 	}
-	if (! empty($ulprinted) && ! empty($pere['rowid'])) { print '</ul>'."\n"; }
+	if (! empty($ulprinted) && ! empty($pere['rowid'])) { print '</ul>'."\n"; }
 
 	if (empty($pere['rowid'])) print '</ul>';
 }
diff --git a/htdocs/core/login/README.txt b/htdocs/core/login/README.txt
index 7c00a86887f2498e259b1f88d344fab610d7553a..8128dfacd570728eac5042a97b33806b43c274b4 100644
--- a/htdocs/core/login/README.txt
+++ b/htdocs/core/login/README.txt
@@ -1,26 +1,26 @@
-README (english)
----------------------------------------------
-Decription of htdocs/core/login directory
----------------------------------------------
-
-This directory contains files that handle way to validate passwords.
-
-If you want to add a new password checker function, just add a file in
-this directory that follow example of already existing files.
-This file must be called for example : 
-functions_mypasschecker.php
-
-Edit function name to call it:
-check_user_mypasschecker
-
-Change code of this function to return true if couple 
-$usertotest / $passwordtotest is ok for you.
-
-Then, you must edit you conf.php file to change the value of
-$dolibarr_main_authentication
-parameter to set it to :
-mypasschecker
-
-Once this is done, when you log in to Dolibarr, the function 
-check_user_mypasschecker in this file is called.
-If the function return true and login exists, login is accepted.
+README (english)
+---------------------------------------------
+Decription of htdocs/core/login directory
+---------------------------------------------
+
+This directory contains files that handle way to validate passwords.
+
+If you want to add a new password checker function, just add a file in
+this directory that follow example of already existing files.
+This file must be called for example : 
+functions_mypasschecker.php
+
+Edit function name to call it:
+check_user_mypasschecker
+
+Change code of this function to return true if couple 
+$usertotest / $passwordtotest is ok for you.
+
+Then, you must edit you conf.php file to change the value of
+$dolibarr_main_authentication
+parameter to set it to :
+mypasschecker
+
+Once this is done, when you log in to Dolibarr, the function 
+check_user_mypasschecker in this file is called.
+If the function return true and login exists, login is accepted.
diff --git a/htdocs/core/menus/init_menu_auguria.sql b/htdocs/core/menus/init_menu_auguria.sql
index 733dc0a54d7bc8c970048f57a932a314cd32d79f..9beedd143be145566ee05d81fbf335c3c0403021 100644
--- a/htdocs/core/menus/init_menu_auguria.sql
+++ b/htdocs/core/menus/init_menu_auguria.sql
@@ -8,16 +8,16 @@ delete from llx_menu where menu_handler=__HANDLER__ and entity=__ENTITY__;
 -- 
 -- table llx_menu
 -- 
-insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '1', 1__+MAX_llx_menu__, __HANDLER__, 'top', 'home',        '', 0, '/index.php?mainmenu=home&amp;leftmenu=', 'Home', -1, '', '', '', 2, 1, __ENTITY__);
-insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('societe|fournisseur', '$conf->societe->enabled || $conf->fournisseur->enabled',  2__+MAX_llx_menu__, __HANDLER__, 'top', 'companies',   '', 0, '/societe/index.php?mainmenu=companies&amp;leftmenu=', 'ThirdParties', -1, 'companies', '$user->rights->societe->lire || $user->rights->societe->contact->lire', '', 2, 2, __ENTITY__);
-insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('product|service', '$conf->product->enabled || $conf->service->enabled', 3__+MAX_llx_menu__, __HANDLER__, 'top', 'products',    '', 0, '/product/index.php?mainmenu=products&amp;leftmenu=', 'Products/Services', -1, 'products', '$user->rights->produit->lire||$user->rights->service->lire', '', 0, 3, __ENTITY__);
-insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('propal|commande|fournisseur|contrat|ficheinter', '$conf->comptabilite->enabled || $conf->accounting->enabled || $conf->facture->enabled || $conf->deplacement->enabled || $conf->don->enabled  || $conf->tax->enabled', 5__+MAX_llx_menu__, __HANDLER__, 'top', 'commercial',  '', 0, '/comm/index.php?mainmenu=commercial&amp;leftmenu=', 'Commercial', -1, 'commercial', '$user->rights->societe->lire || $user->rights->societe->contact->lire', '', 2, 5, __ENTITY__);
-insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('comptabilite|accounting|facture|deplacement|don|tax', '$conf->comptabilite->enabled || $conf->accounting->enabled || $conf->facture->enabled || $conf->deplacement->enabled || $conf->don->enabled  || $conf->tax->enabled', 6__+MAX_llx_menu__, __HANDLER__, 'top', 'accountancy', '', 0, '/compta/index.php?mainmenu=accountancy&amp;leftmenu=', 'MenuFinancial', -1, 'compta', '$user->rights->compta->resultat->lire || $user->rights->accounting->plancompte->lire || $user->rights->facture->lire|| $user->rights->deplacement->lire || $user->rights->don->lire || $user->rights->tax->charges->lire', '', 2, 6, __ENTITY__);
-insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('banque|prelevement', '$conf->banque->enabled || $conf->prelevement->enabled', 14__+MAX_llx_menu__, __HANDLER__, 'top', 'bank', '', 0, '/compta/bank/index.php?mainmenu=bank&amp;leftmenu=bank', 'MenuBankCash', -1, 'banks', '$user->rights->banque->lire || $user->rights->prelevement->bons->lire', '', 0, 6, __ENTITY__);
-insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('projet', '$conf->projet->enabled', 7__+MAX_llx_menu__, __HANDLER__, 'top', 'project',     '', 0, '/projet/index.php?mainmenu=project&amp;leftmenu=', 'Projects', -1, 'projects', '$user->rights->projet->lire', '', 2, 7, __ENTITY__);
-insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('mailing|export|import', '$conf->mailing->enabled || $conf->export->enabled || $conf->import->enabled', 8__+MAX_llx_menu__, __HANDLER__, 'top', 'tools',       '', 0, '/core/tools.php?mainmenu=tools&amp;leftmenu=', 'Tools', -1, 'other', '$user->rights->mailing->lire || $user->rights->export->lire || $user->rights->import->run', '', 2, 8, __ENTITY__);
-insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('boutique', '! empty($conf->boutique->enabled)', 11__+MAX_llx_menu__, __HANDLER__, 'top', 'shop',        '', 0, '/boutique/index.php?mainmenu=shop&amp;leftmenu=', 'OSCommerce', -1, 'shop', '', '', 0, 11, __ENTITY__);
-insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('adherent', '$conf->adherent->enabled', 13__+MAX_llx_menu__, __HANDLER__, 'top', 'members',     '', 0, '/adherents/index.php?mainmenu=members&amp;leftmenu=', 'Members', -1, 'members', '$user->rights->adherent->lire', '', 2, 15, __ENTITY__);
+insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '1', 1__+MAX_llx_menu__, __HANDLER__, 'top', 'home',        '', 0, '/index.php?mainmenu=home&amp;leftmenu=', 'Home', -1, '', '', '', 2, 10, __ENTITY__);
+insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('societe|fournisseur', '$conf->societe->enabled || $conf->fournisseur->enabled',  2__+MAX_llx_menu__, __HANDLER__, 'top', 'companies',   '', 0, '/societe/index.php?mainmenu=companies&amp;leftmenu=', 'ThirdParties', -1, 'companies', '$user->rights->societe->lire || $user->rights->societe->contact->lire', '', 2, 20, __ENTITY__);
+insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('product|service', '$conf->product->enabled || $conf->service->enabled', 3__+MAX_llx_menu__, __HANDLER__, 'top', 'products',    '', 0, '/product/index.php?mainmenu=products&amp;leftmenu=', 'Products/Services', -1, 'products', '$user->rights->produit->lire||$user->rights->service->lire', '', 0, 30, __ENTITY__);
+insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('propal|commande|fournisseur|contrat|ficheinter', '$conf->comptabilite->enabled || $conf->accounting->enabled || $conf->facture->enabled || $conf->deplacement->enabled || $conf->don->enabled  || $conf->tax->enabled', 5__+MAX_llx_menu__, __HANDLER__, 'top', 'commercial',  '', 0, '/comm/index.php?mainmenu=commercial&amp;leftmenu=', 'Commercial', -1, 'commercial', '$user->rights->societe->lire || $user->rights->societe->contact->lire', '', 2, 40, __ENTITY__);
+insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('comptabilite|accounting|facture|deplacement|don|tax', '$conf->comptabilite->enabled || $conf->accounting->enabled || $conf->facture->enabled || $conf->deplacement->enabled || $conf->don->enabled  || $conf->tax->enabled', 6__+MAX_llx_menu__, __HANDLER__, 'top', 'accountancy', '', 0, '/compta/index.php?mainmenu=accountancy&amp;leftmenu=', 'MenuFinancial', -1, 'compta', '$user->rights->compta->resultat->lire || $user->rights->accounting->plancompte->lire || $user->rights->facture->lire|| $user->rights->deplacement->lire || $user->rights->don->lire || $user->rights->tax->charges->lire', '', 2, 50, __ENTITY__);
+insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('banque|prelevement', '$conf->banque->enabled || $conf->prelevement->enabled', 14__+MAX_llx_menu__, __HANDLER__, 'top', 'bank', '', 0, '/compta/bank/index.php?mainmenu=bank&amp;leftmenu=bank', 'MenuBankCash', -1, 'banks', '$user->rights->banque->lire || $user->rights->prelevement->bons->lire', '', 0, 60, __ENTITY__);
+insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('projet', '$conf->projet->enabled', 7__+MAX_llx_menu__, __HANDLER__, 'top', 'project',     '', 0, '/projet/index.php?mainmenu=project&amp;leftmenu=', 'Projects', -1, 'projects', '$user->rights->projet->lire', '', 2, 70, __ENTITY__);
+insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('mailing|export|import', '$conf->mailing->enabled || $conf->export->enabled || $conf->import->enabled', 8__+MAX_llx_menu__, __HANDLER__, 'top', 'tools',       '', 0, '/core/tools.php?mainmenu=tools&amp;leftmenu=', 'Tools', -1, 'other', '$user->rights->mailing->lire || $user->rights->export->lire || $user->rights->import->run', '', 2, 80, __ENTITY__);
+insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('boutique', '! empty($conf->boutique->enabled)', 11__+MAX_llx_menu__, __HANDLER__, 'top', 'shop',        '', 0, '/boutique/index.php?mainmenu=shop&amp;leftmenu=', 'OSCommerce', -1, 'shop', '', '', 0, 90, __ENTITY__);
+insert into llx_menu (module, enabled, rowid, menu_handler, type, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('adherent', '$conf->adherent->enabled', 13__+MAX_llx_menu__, __HANDLER__, 'top', 'members',     '', 0, '/adherents/index.php?mainmenu=members&amp;leftmenu=', 'Members', -1, 'members', '$user->rights->adherent->lire', '', 2, 100, __ENTITY__);
 -- Home - Setup
 insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$user->admin', __HANDLER__, 'left', 100__+MAX_llx_menu__, 'home', 'setup', 1__+MAX_llx_menu__, '/admin/index.php?leftmenu=setup', 'Setup', 0, 'admin', '', '', 2, 0, __ENTITY__);
 insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu==\'setup\'', __HANDLER__, 'left', 101__+MAX_llx_menu__, 'home', '', 100__+MAX_llx_menu__, '/admin/company.php?leftmenu=setup', 'MenuCompanySetup', 1, 'admin', '', '', 2, 1, __ENTITY__);
@@ -30,7 +30,7 @@ insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, left
 insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu==\'setup\'', __HANDLER__, 'left', 110__+MAX_llx_menu__, 'home', '', 100__+MAX_llx_menu__, '/admin/limits.php?leftmenu=setup', 'MenuLimits', 1, 'admin', '', '', 2, 8, __ENTITY__);
 insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu==\'setup\'', __HANDLER__, 'left', 107__+MAX_llx_menu__, 'home', '', 100__+MAX_llx_menu__, '/admin/pdf.php?leftmenu=setup', 'PDF', 1, 'admin', '', '', 2, 9, __ENTITY__);
 insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu==\'setup\'', __HANDLER__, 'left', 109__+MAX_llx_menu__, 'home', '', 100__+MAX_llx_menu__, '/admin/mails.php?leftmenu=setup', 'Emails', 1, 'admin', '', '', 2, 10, __ENTITY__);
-insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu==\'setup\'', __HANDLER__, 'left', 113__+MAX_llx_menu__, 'home', '', 100__+MAX_llx_menu__, '/admin/sms.php?leftmenu=setup', 'Sms', 1, 'admin', '', '', 2, 11, __ENTITY__);
+insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu==\'setup\'', __HANDLER__, 'left', 113__+MAX_llx_menu__, 'home', '', 100__+MAX_llx_menu__, '/admin/sms.php?leftmenu=setup', 'SMS', 1, 'admin', '', '', 2, 11, __ENTITY__);
 insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu==\'setup\'', __HANDLER__, 'left', 111__+MAX_llx_menu__, 'home', '', 100__+MAX_llx_menu__, '/admin/dict.php?leftmenu=setup', 'DictionnarySetup', 1, 'admin', '', '', 2, 12, __ENTITY__);
 insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$leftmenu==\'setup\'', __HANDLER__, 'left', 112__+MAX_llx_menu__, 'home', '', 100__+MAX_llx_menu__, '/admin/const.php?leftmenu=setup', 'OtherSetup', 1, 'admin', '', '', 2, 13, __ENTITY__);
 -- Home - Sytem info
diff --git a/htdocs/core/menus/standard/auguria.lib.php b/htdocs/core/menus/standard/auguria.lib.php
index 18ffe81ecddb7e6db7f30ae4665b070fe0f98185..1a40de3c7138af706fe338a2e8fbb825a8926c48 100644
--- a/htdocs/core/menus/standard/auguria.lib.php
+++ b/htdocs/core/menus/standard/auguria.lib.php
@@ -21,7 +21,7 @@
  *  \file		htdocs/core/menus/standard/auguria.lib.php
  *  \brief		Library for file auguria menus
  */
-require_once DOL_DOCUMENT_ROOT.'/core/class/menubase.class.php';
+require_once DOL_DOCUMENT_ROOT.'/core/class/menubase.class.php';
 
 
 
@@ -30,26 +30,27 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/menubase.class.php';
  *
  * @param 	DoliDB	$db				Database handler
  * @param 	string	$atarget		Target
- * @param 	int		$type_user     	0=Internal,1=External,2=All
+ * @param 	int		$type_user     	0=Menu for backoffice, 1=Menu for front office
  * @param  	array	&$tabMenu       If array with menu entries already loaded, we put this array here (in most cases, it's empty)
  * @param	array	&$menu			Object Menu to return back list of menu entries
+ * @param	int		$noout			Disable output (Initialise &$menu only).
  * @return	void
  */
-function print_auguria_menu($db,$atarget,$type_user,&$tabMenu,&$menu)
+function print_auguria_menu($db,$atarget,$type_user,&$tabMenu,&$menu,$noout=0)
 {
 	global $user,$conf,$langs,$dolibarr_main_db_name;
 
-	$mainmenu=$_SESSION["mainmenu"];
-	$leftmenu=$_SESSION["leftmenu"];
+	$mainmenu=$_SESSION["mainmenu"];
+	$leftmenu=$_SESSION["leftmenu"];
 
 	$id='mainmenu';
 	$listofmodulesforexternal=explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL);
 
-	//$tabMenu=array();
+	// Show personalized menus
 	$menuArbo = new Menubase($db,'auguria');
 	$newTabMenu = $menuArbo->menuTopCharger('', '', $type_user, 'auguria',$tabMenu);
 
-	print_start_menu_array_auguria();
+	if (empty($noout)) print_start_menu_array_auguria();
 
 	$num = count($newTabMenu);
 	for($i = 0; $i < $num; $i++)
@@ -59,23 +60,24 @@ function print_auguria_menu($db,$atarget,$type_user,&$tabMenu,&$menu)
 		$showmode=dol_auguria_showmenu($type_user,$newTabMenu[$i],$listofmodulesforexternal);
 		if ($showmode == 1)
 		{
-			// Define url
-			if (preg_match("/^(http:\/\/|https:\/\/)/i",$newTabMenu[$i]['url']))
+			$url = $shorturl = $newTabMenu[$i]['url'];
+			if (! preg_match("/^(http:\/\/|https:\/\/)/i",$newTabMenu[$i]['url']))
 			{
-				$url = $newTabMenu[$i]['url'];
-			}
-			else
-			{
-				$url=dol_buildpath($newTabMenu[$i]['url'],1);
+				$param='';
 				if (! preg_match('/mainmenu/i',$url) || ! preg_match('/leftmenu/i',$url))
 				{
-					if (! preg_match('/\?/',$url)) $url.='?';
-					else $url.='&';
-					$url.='mainmenu='.$newTabMenu[$i]['mainmenu'].'&leftmenu=';
+					if (! preg_match('/\?/',$url)) $param.='?';
+					else $param.='&';
+					$param.='mainmenu='.$newTabMenu[$i]['mainmenu'].'&leftmenu=';
 				}
 				//$url.="idmenu=".$newTabMenu[$i]['rowid'];    // Already done by menuLoad
+				$url=dol_buildpath($url,1).$param;
+				$shorturl = $newTabMenu[$i]['url'].$param;
 			}
 			$url=preg_replace('/__LOGIN__/',$user->login,$url);
+			$shorturl=preg_replace('/__LOGIN__/',$user->login,$shorturl);
+			$url=preg_replace('/__USERID__/',$user->id,$url);
+			$shorturl=preg_replace('/__USERID__/',$user->id,$shorturl);
 
 			// Define the class (top menu selected or not)
 			if (! empty($_SESSION['idmenu']) && $newTabMenu[$i]['rowid'] == $_SESSION['idmenu']) $classname='class="tmenusel"';
@@ -84,12 +86,13 @@ function print_auguria_menu($db,$atarget,$type_user,&$tabMenu,&$menu)
 		}
 		else if ($showmode == 2) $classname='class="tmenu"';
 
-		print_start_menu_entry_auguria($idsel,$classname,$showmode);
-		print_text_menu_entry_auguria($newTabMenu[$i]['titre'], $showmode, $url, $id, $idsel, $classname, ($newTabMenu[$i]['target']?$newTabMenu[$i]['target']:$atarget));
-		print_end_menu_entry_auguria($showmode);
+		if (empty($noout)) print_start_menu_entry_auguria($idsel,$classname,$showmode);
+		if (empty($noout)) print_text_menu_entry_auguria($newTabMenu[$i]['titre'], $showmode, $url, $id, $idsel, $classname, ($newTabMenu[$i]['target']?$newTabMenu[$i]['target']:$atarget));
+		if (empty($noout)) print_end_menu_entry_auguria($showmode);
+		$menu->add($shorturl, $newTabMenu[$i]['titre'], 0, $showmode, ($newTabMenu[$i]['target']?$newTabMenu[$i]['target']:$atarget), ($newTabMenu[$i]['mainmenu']?$newTabMenu[$i]['mainmenu']:$newTabMenu[$i]['rowid']), '');
 	}
 
-	print_end_menu_array_auguria();
+	if (empty($noout)) print_end_menu_array_auguria();
 
 	print "\n";
 }
@@ -127,7 +130,7 @@ function print_start_menu_entry_auguria($idsel,$classname,$showmode)
  * Output menu entry
  *
  * @param	string	$text		Text
- * @param	int		$showmode	1 = allowed or 2 = not allowed
+ * @param	int		$showmode	0 = hide, 1 = allowed or 2 = not allowed
  * @param	string	$url		Url
  * @param	string	$id			Id
  * @param	string	$idsel		Id sel
@@ -137,23 +140,23 @@ function print_start_menu_entry_auguria($idsel,$classname,$showmode)
  */
 function print_text_menu_entry_auguria($text, $showmode, $url, $id, $idsel, $classname, $atarget)
 {
-	global $langs;
-
-	if ($showmode == 1)
-	{
-		print '<a class="tmenuimage" href="'.$url.'"'.($atarget?' target="'.$atarget.'"':'').'>';
-		print '<div class="'.$id.' '.$idsel.'"><span class="mainmenu_'.$idsel.' '.$id.' tmenuimage" id="mainmenuspan_'.$idsel.'"></span></div>';
-		print '</a>';
-		print '<a '.$classname.' id="mainmenua_'.$idsel.'" href="'.$url.'"'.($atarget?' target="'.$atarget.'"':'').'>';
-		print '<span class="mainmenuaspan">';
-		print $text;
-		print '</span>';
-		print '</a>';
-	}
-	if ($showmode == 2)
-	{
-		print '<div class="'.$id.' '.$idsel.'"><span class="mainmenu_'.$idsel.' '.$id.'" id="mainmenuspan_'.$idsel.'"></span></div>';
-		print '<a class="tmenudisabled" id="mainmenua_'.$idsel.'" href="#" title="'.dol_escape_htmltag($langs->trans("NotAllowed")).'">';
+	global $langs;
+
+	if ($showmode == 1)
+	{
+		print '<a class="tmenuimage" href="'.$url.'"'.($atarget?' target="'.$atarget.'"':'').'>';
+		print '<div class="'.$id.' '.$idsel.'"><span class="'.$id.' tmenuimage" id="mainmenuspan_'.$idsel.'"></span></div>';
+		print '</a>';
+		print '<a '.$classname.' id="mainmenua_'.$idsel.'" href="'.$url.'"'.($atarget?' target="'.$atarget.'"':'').'>';
+		print '<span class="mainmenuaspan">';
+		print $text;
+		print '</span>';
+		print '</a>';
+	}
+	if ($showmode == 2)
+	{
+		print '<div class="'.$id.' '.$idsel.'"><span class="'.$id.'" id="mainmenuspan_'.$idsel.'"></span></div>';
+		print '<a class="tmenudisabled" id="mainmenua_'.$idsel.'" href="#" title="'.dol_escape_htmltag($langs->trans("NotAllowed")).'">';
 		print '<span class="mainmenuaspan">';
 		print $text;
 		print '</span>';
@@ -172,8 +175,8 @@ function print_end_menu_entry_auguria($showmode)
 	if ($showmode)
 	{
 		print '</div></li>';
-		print "\n";
 	}
+	print "\n";
 }
 
 /**
@@ -198,20 +201,22 @@ function print_end_menu_array_auguria()
  * @param   array		$menu_array_after   Table of menu entries to show after entries of menu handler
  * @param  	array		&$tabMenu       	If array with menu entries already loaded, we put this array here (in most cases, it's empty)
  * @param	array		&$menu				Object Menu to return back list of menu entries
+ * @param	int			$noout				Disable output (Initialise &$menu only).
+ * @param	string		$forcemainmenu		'x'=Force mainmenu to mainmenu='x'
+ * @param	string		$forceleftmenu		'all'=Force leftmenu to '' (= all)
  * @return	void
  */
-function print_left_auguria_menu($db,$menu_array_before,$menu_array_after,&$tabMenu,&$menu)
+function print_left_auguria_menu($db,$menu_array_before,$menu_array_after,&$tabMenu,&$menu,$noout=0,$forcemainmenu='',$forceleftmenu='')
 {
 	global $user,$conf,$langs,$dolibarr_main_db_name,$mysoc;
 
-	$overwritemenufor = array();
 	$newmenu = $menu;
 
-	$mainmenu=$_SESSION["mainmenu"];
-	$leftmenu=$_SESSION["leftmenu"];
+	$mainmenu=($forcemainmenu?$forcemainmenu:$_SESSION["mainmenu"]);
+	$leftmenu=($forceleftmenu?'':(empty($_SESSION["leftmenu"])?'none':$_SESSION["leftmenu"]));
 
 	// Show logo company
-	if (! empty($conf->global->MAIN_SHOW_LOGO))
+	if (empty($noout) && ! empty($conf->global->MAIN_SHOW_LOGO))
 	{
 		$mysoc->logo_mini=$conf->global->MAIN_INFO_SOCIETE_LOGO_MINI;
 		if (! empty($mysoc->logo_mini) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_mini))
@@ -242,26 +247,24 @@ function print_left_auguria_menu($db,$menu_array_before,$menu_array_after,&$tabM
 	if (is_array($menu_array_before)) $menu_array=array_merge($menu_array_before, $menu_array);
 	if (is_array($menu_array_after))  $menu_array=array_merge($menu_array, $menu_array_after);
 	//var_dump($menu_array);exit;
-	if (! is_array($menu_array)) return 0;
+	if (! is_array($menu_array)) return 0;
 
 	// Show menu
+	if (empty($noout))
+	{
 	$alt=0;
 	$num=count($menu_array);
 	for ($i = 0; $i < $num; $i++)
 	{
+		$showmenu=true;
+		if (! empty($conf->global->MAIN_MENU_HIDE_UNAUTHORIZED) && empty($menu_array[$i]['enabled'])) 	$showmenu=false;
+
 		$alt++;
-		if (empty($menu_array[$i]['level']))
+		if (empty($menu_array[$i]['level']) && $showmenu)
 		{
 			if (($alt%2==0))
 			{
-				if ($conf->use_javascript_ajax && ! empty($conf->global->MAIN_MENU_USE_JQUERY_ACCORDION))
-				{
-					print '<div class="blockvmenupair">'."\n";
-				}
-				else
-				{
-					print '<div class="blockvmenuimpair">'."\n";
-				}
+				print '<div class="blockvmenuimpair">'."\n";
 			}
 			else
 			{
@@ -282,6 +285,8 @@ function print_left_auguria_menu($db,$menu_array_before,$menu_array_after,&$tabM
 
 		// Add mainmenu in GET url. This make to go back on correct menu even when using Back on browser.
 		$url=dol_buildpath($menu_array[$i]['url'],1);
+		$url=preg_replace('/__LOGIN__/',$user->login,$url);
+		$url=preg_replace('/__USERID__/',$user->id,$url);
 
 		if (! preg_match('/mainmenu=/i',$menu_array[$i]['url']))
 		{
@@ -290,7 +295,7 @@ function print_left_auguria_menu($db,$menu_array_before,$menu_array_after,&$tabM
 			$url.='mainmenu='.$mainmenu;
 		}
 
-		print '<!-- Add menu entry with mainmenu='.$menu_array[$i]['mainmenu'].', leftmenu='.$menu_array[$i]['leftmenu'].', level='.$menu_array[$i]['mainmenu'].' -->'."\n";
+		print '<!-- Add menu entry with mainmenu='.$menu_array[$i]['mainmenu'].', leftmenu='.$menu_array[$i]['leftmenu'].', level='.$menu_array[$i]['level'].' -->'."\n";
 
 		// Menu niveau 0
 		if ($menu_array[$i]['level'] == 0)
@@ -299,34 +304,41 @@ function print_left_auguria_menu($db,$menu_array_before,$menu_array_after,&$tabM
 			{
 				print '<div class="menu_titre">'.$tabstring.'<a class="vmenu" href="'.$url.'"'.($menu_array[$i]['target']?' target="'.$menu_array[$i]['target'].'"':'').'>'.$menu_array[$i]['titre'].'</a></div>';
 			}
-			else if (empty($conf->global->MAIN_MENU_HIDE_UNAUTHORIZED))
+			else if ($showmenu)
 			{
-				print '<div class="menu_titre">'.$tabstring.'<font class="vmenudisabled">'.$menu_array[$i]['titre'].'</font></div>';
+				print '<div class="menu_titre">'.$tabstring.'<font class="vmenudisabled">'.$menu_array[$i]['titre'].'</font></div>'."\n";
 			}
-			print "\n".'<div id="section_content_'.$i.'">'."\n";
-			print '<div class="menu_top"></div>'."\n";
+			if ($showmenu)
+				print '<div class="menu_top"></div>'."\n";
 		}
 		// Menu niveau > 0
 		if ($menu_array[$i]['level'] > 0)
 		{
 			if ($menu_array[$i]['enabled'])
 			{
-				print '<div class="menu_contenu">'.$tabstring.'<a class="vsmenu" href="'.$url.'"'.($menu_array[$i]['target']?' target="'.$menu_array[$i]['target'].'"':'').'>'.$menu_array[$i]['titre'].'</a></div>';
+				print '<div class="menu_contenu">'.$tabstring;
+				if ($menu_array[$i]['url']) print '<a class="vsmenu" href="'.$url.'"'.($menu_array[$i]['target']?' target="'.$menu_array[$i]['target'].'"':'').'>';
+				print $menu_array[$i]['titre'];
+				if ($menu_array[$i]['url']) print '</a>';
+				// If title is not pure text and contains a table, no carriage return added
+				if (! strstr($menu_array[$i]['titre'],'<table')) print '<br>';
+				print '</div>'."\n";
 			}
-			else if (empty($conf->global->MAIN_MENU_HIDE_UNAUTHORIZED))
+			else if ($showmenu)
 			{
-				print '<div class="menu_contenu">'.$tabstring.'<font class="vsmenudisabled">'.$menu_array[$i]['titre'].'</font></div>';
+				print '<div class="menu_contenu">'.$tabstring.'<font class="vsmenudisabled">'.$menu_array[$i]['titre'].'</font><br></div>'."\n";
 			}
 		}
 
 		// If next is a new block or end
 		if (empty($menu_array[$i+1]['level']))
 		{
-			print '<div class="menu_end"></div>'."\n";
-			print "</div><!-- end section content -->\n";
-			print "</div><!-- end blockvmenu  pair/impair -->\n";
+			if ($showmenu)
+				print '<div class="menu_end"></div>'."\n";
+			print "</div>\n";
 		}
 	}
+	}
 
 	return count($menu_array);
 }
diff --git a/htdocs/core/menus/standard/auguria_menu.php b/htdocs/core/menus/standard/auguria_menu.php
index 1aeb8d8ac981a6f1f1d9a65102eef86da05ccf9b..343edaf5201d8128b6d79a4dbc83214dbc60cc6c 100644
--- a/htdocs/core/menus/standard/auguria_menu.php
+++ b/htdocs/core/menus/standard/auguria_menu.php
@@ -36,7 +36,7 @@ class MenuManager
 	var $menu_array;
 	var $menu_array_after;
 
-	var $tabMenu;
+	var $tabMenu;
 
 
     /**
@@ -51,60 +51,64 @@ class MenuManager
     	$this->db=$db;
     }
 
-    
-   	/**
-   	 * Load this->tabMenu
-   	 *
-   	 * @return	void
-   	 */
-   	function loadMenu()
-   	{
+
+   	/**
+   	 * Load this->tabMenu
+   	 *
+   	 * @param	string	$forcemainmenu		To force mainmenu to load
+   	 * @param	string	$forceleftmenu		To force leftmenu to load
+   	 * @return	void
+   	 */
+   	function loadMenu($forcemainmenu='',$forceleftmenu='')
+   	{
     	global $conf, $user, $langs;
 
-   		// On sauve en session le menu principal choisi
-    	if (isset($_GET["mainmenu"])) $_SESSION["mainmenu"]=$_GET["mainmenu"];
-    	if (isset($_GET["idmenu"]))   $_SESSION["idmenu"]=$_GET["idmenu"];
-
-    	// Read mainmenu and leftmenu that define which menu to show
-    	if (isset($_GET["mainmenu"]))
-    	{
-    		// On sauve en session le menu principal choisi
-    		$mainmenu=$_GET["mainmenu"];
-    		$_SESSION["mainmenu"]=$mainmenu;
-    		$_SESSION["leftmenuopened"]="";
-    	}
-    	else
-    	{
-    		// On va le chercher en session si non defini par le lien
-    		$mainmenu=isset($_SESSION["mainmenu"])?$_SESSION["mainmenu"]:'';
-    	}
-
-    	if (isset($_GET["leftmenu"]))
-    	{
-    		// On sauve en session le menu principal choisi
-    		$leftmenu=$_GET["leftmenu"];
-    		$_SESSION["leftmenu"]=$leftmenu;
-
-    		if ($_SESSION["leftmenuopened"]==$leftmenu)	// To collapse
-    		{
-    			//$leftmenu="";
-    			$_SESSION["leftmenuopened"]="";
-    		}
-    		else
-    		{
-    			$_SESSION["leftmenuopened"]=$leftmenu;
-    		}
-    	} else {
-    		// On va le chercher en session si non defini par le lien
-    		$leftmenu=isset($_SESSION["leftmenu"])?$_SESSION["leftmenu"]:'';
-    	}
-
-    	require_once DOL_DOCUMENT_ROOT.'/core/class/menubase.class.php';
-    	$tabMenu=array();
-    	$menuArbo = new Menubase($this->db,'auguria');
+   		// On sauve en session le menu principal choisi
+    	if (isset($_GET["mainmenu"])) $_SESSION["mainmenu"]=$_GET["mainmenu"];
+    	if (isset($_GET["idmenu"]))   $_SESSION["idmenu"]=$_GET["idmenu"];
+
+    	// Read mainmenu and leftmenu that define which menu to show
+    	if (isset($_GET["mainmenu"]))
+    	{
+    		// On sauve en session le menu principal choisi
+    		$mainmenu=$_GET["mainmenu"];
+    		$_SESSION["mainmenu"]=$mainmenu;
+    		$_SESSION["leftmenuopened"]="";
+    	}
+    	else
+    	{
+    		// On va le chercher en session si non defini par le lien
+    		$mainmenu=isset($_SESSION["mainmenu"])?$_SESSION["mainmenu"]:'';
+    	}
+		if (! empty($forcemainmenu)) $mainmenu=$forcemainmenu;
+
+    	if (isset($_GET["leftmenu"]))
+    	{
+    		// On sauve en session le menu principal choisi
+    		$leftmenu=$_GET["leftmenu"];
+    		$_SESSION["leftmenu"]=$leftmenu;
+
+    		if ($_SESSION["leftmenuopened"]==$leftmenu)	// To collapse
+    		{
+    			//$leftmenu="";
+    			$_SESSION["leftmenuopened"]="";
+    		}
+    		else
+    		{
+    			$_SESSION["leftmenuopened"]=$leftmenu;
+    		}
+    	} else {
+    		// On va le chercher en session si non defini par le lien
+    		$leftmenu=isset($_SESSION["leftmenu"])?$_SESSION["leftmenu"]:'';
+    	}
+    	if (! empty($forceleftmenu)) $leftmenu=$forceleftmenu;
+
+    	require_once DOL_DOCUMENT_ROOT.'/core/class/menubase.class.php';
+    	$tabMenu=array();
+    	$menuArbo = new Menubase($this->db,'auguria');
     	$menuArbo->menuLoad($mainmenu, $leftmenu, $this->type_user, 'auguria', $tabMenu);
 
-    	// Modules system tools
+    	// Modules system tools
     	// TODO Find a way to add parent menu only if child menu exists. For the moment, no other method than hard coded methods.
     	if (! empty($conf->product->enabled) || ! empty($conf->service->enabled) || ! empty($conf->global->MAIN_MENU_ENABLE_MODULETOOLS))
     	{
@@ -141,8 +145,8 @@ class MenuManager
 		    		'type'=>'left',
 		    		'position'=>20
 				));
-    		}
-    	}
+    		}
+    	}
 
     	$this->tabMenu=$tabMenu;
     }
@@ -151,12 +155,12 @@ class MenuManager
     /**
      *  Show menu
      *
-     *	@param	string	$mode		'top' or 'left'
+     *	@param	string	$mode		'top', 'left', 'jmobile'
      *  @return	int     			Number of menu entries shown
 	 */
 	function showmenu($mode)
 	{
-    	global $conf;
+    	global $conf, $langs;
 
         require_once DOL_DOCUMENT_ROOT.'/core/menus/standard/auguria.lib.php';
 
@@ -167,15 +171,69 @@ class MenuManager
         }
 
         $res='ErrorBadParameterForMode';
-        
+
 		require_once DOL_DOCUMENT_ROOT.'/core/class/menu.class.php';
-        $this->menu=new Menu();
-        
+        $this->menu=new Menu();
+
         if ($mode == 'top')  $res=print_auguria_menu($this->db,$this->atarget,$this->type_user,$this->tabMenu,$this->menu);
         if ($mode == 'left') $res=print_left_auguria_menu($this->db,$this->menu_array,$this->menu_array_after,$this->tabMenu,$this->menu);
+        if ($mode == 'jmobile')
+        {
+        	$res=print_auguria_menu($this->db,$this->atarget,$this->type_user,$this->tabMenu,$this->menu,1);
+
+        	foreach($this->menu->liste as $key => $val)		// $val['url','titre','level','enabled'=0|1|2,'target','mainmenu','leftmenu'
+        	{
+        		print '<ul data-role="listview" data-inset="true">';
+        		print '<li data-role="list-divider">';
+        		if ($val['enabled'] == 1)
+        		{
+        			$relurl=dol_buildpath($val['url'],1);
+
+        			print '<a href="#">'.$val['titre'].'</a>'."\n";
+        			// Search submenu fot this entry
+        			$tmpmainmenu=$val['mainmenu'];
+        			$tmpleftmenu='all';
+        			$submenu=new Menu();
+        			//var_dump($tmpmainmenu.' - '.$tmpleftmenu);
+        			$res=print_left_auguria_menu($this->db,$this->menu_array,$this->menu_array_after,$this->tabMenu,$submenu,1,$tmpmainmenu,$tmpleftmenu);
+        			//var_dump($submenu->liste);
+        			$nexturl=dol_buildpath($submenu->liste[0]['url'],1);
+        			$canonrelurl=preg_replace('/\?.*$/','',$relurl);
+        			$canonnexturl=preg_replace('/\?.*$/','',$nexturl);
+        			//var_dump($canonrelurl);
+        			//var_dump($canonnexturl);
+        			print '<ul>';
+        			if ($canonrelurl != $canonnexturl && $val['mainmenu'] != 'home')
+        			{
+        				// We add sub entry
+        				print '<li data-role="list-divider"><a href="'.$relurl.'">'.$langs->trans("MainArea").'-'.$val['titre'].'</a></li>'."\n";
+        			}
+        			foreach($submenu->liste as $key2 => $val2)		// $val['url','titre','level','enabled'=0|1|2,'target','mainmenu','leftmenu'
+        			{
+        				$relurl2=dol_buildpath($val2['url'],1);
+        				$canonurl2=preg_replace('/\?.*$/','',$val2['url']);
+        				//var_dump($val2['url'].' - '.$canonurl2.' - '.$val2['level']);
+        				if (in_array($canonurl2,array('/admin/index.php','/admin/tools/index.php'))) $relurl2='';
+        				print '<li'.($val2['level']==0?' data-role="list-divider"':'').'>';
+        				if ($relurl2) print '<a href="'.$relurl2.'">';
+        				print $val2['titre'];
+        				if ($relurl2) print '</a>';
+        				print '</li>'."\n";
+        			}
+        			//var_dump($submenu);
+        			print '</ul>';
+        		}
+        		if ($val['enabled'] == 2)
+        		{
+        			print '<font class="vsmenudisabled">'.$val['titre'].'</font>';
+        		}
+        		print '</li>';
+        		print '</ul>'."\n";
+        	}
+        }
+
+        unset($this->menu);
 
-        unset($this->menu);
-        
         return $res;
     }
 }
diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php
index 61aaec75fc1c8bffcc56e2334fd61f840a225be5..34ac773b1d175fad074fa6cd323772c45e4e7767 100644
--- a/htdocs/core/menus/standard/eldy.lib.php
+++ b/htdocs/core/menus/standard/eldy.lib.php
@@ -22,7 +22,7 @@
  *  \file		htdocs/core/menus/standard/eldy.lib.php
  *  \brief		Library for file eldy menus
  */
-require_once DOL_DOCUMENT_ROOT.'/core/class/menubase.class.php';
+require_once DOL_DOCUMENT_ROOT.'/core/class/menubase.class.php';
 
 
 /**
@@ -58,7 +58,7 @@ function print_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu,$noout=0)
 	if (empty($noout)) print_start_menu_entry($idsel,$classname,$showmode);
 	if (empty($noout)) print_text_menu_entry($langs->trans("Home"), 1, DOL_URL_ROOT.'/index.php?mainmenu=home&amp;leftmenu=', $id, $idsel, $classname, $atarget);
 	if (empty($noout)) print_end_menu_entry($showmode);
-	$menu->add('/index.php?mainmenu=home&amp;leftmenu=', $langs->trans("Home"), 0, $showmode, $atarget, "home", '');
+	$menu->add('/index.php?mainmenu=home&amp;leftmenu=', $langs->trans("Home"), 0, $showmode, $atarget, "home", '');
 
 	// Third parties
 	$tmpentry=array('enabled'=>(! empty($conf->societe->enabled) || ! empty($conf->fournisseur->enabled)), 'perms'=>(! empty($user->rights->societe->lire) || ! empty($user->rights->fournisseur->lire)), 'module'=>'societe|fournisseur');
@@ -187,9 +187,9 @@ function print_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu,$noout=0)
 		else $classname = 'class="tmenu"';
 		$idsel='project';
 
-		if (empty($noout)) print_start_menu_entry($idsel,$classname,$showmode);
-		if (empty($noout)) print_text_menu_entry($langs->trans("Projects"), $showmode, DOL_URL_ROOT.'/projet/index.php?mainmenu=project&amp;leftmenu=', $id, $idsel, $classname, $atarget);
-		if (empty($noout)) print_end_menu_entry($showmode);
+		if (empty($noout)) print_start_menu_entry($idsel,$classname,$showmode);
+		if (empty($noout)) print_text_menu_entry($langs->trans("Projects"), $showmode, DOL_URL_ROOT.'/projet/index.php?mainmenu=project&amp;leftmenu=', $id, $idsel, $classname, $atarget);
+		if (empty($noout)) print_end_menu_entry($showmode);
 		$menu->add('/projet/index.php?mainmenu=project&amp;leftmenu=', $langs->trans("Projects"), 0, $showmode, $atarget, "project", '');
 	}
 
@@ -264,10 +264,9 @@ function print_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu,$noout=0)
 		$showmode=dol_eldy_showmenu($type_user,$newTabMenu[$i],$listofmodulesforexternal);
 		if ($showmode == 1)
 		{
-			$url = $newTabMenu[$i]['url'];
+			$url = $shorturl = $newTabMenu[$i]['url'];
 			if (! preg_match("/^(http:\/\/|https:\/\/)/i",$newTabMenu[$i]['url']))
 			{
-				$url = $newTabMenu[$i]['url'];
 				$param='';
 				if (! preg_match('/mainmenu/i',$url) || ! preg_match('/leftmenu/i',$url))
 				{
@@ -280,7 +279,9 @@ function print_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu,$noout=0)
 				$shorturl = $newTabMenu[$i]['url'].$param;
 			}
 			$url=preg_replace('/__LOGIN__/',$user->login,$url);
-			$shorturl=preg_replace('/__LOGIN__/',$user->login,$shorturl);
+			$shorturl=preg_replace('/__LOGIN__/',$user->login,$shorturl);
+			$url=preg_replace('/__USERID__/',$user->id,$url);
+			$shorturl=preg_replace('/__USERID__/',$user->id,$shorturl);
 
 			// Define the class (top menu selected or not)
 			if (! empty($_SESSION['idmenu']) && $newTabMenu[$i]['rowid'] == $_SESSION['idmenu']) $classname='class="tmenusel"';
@@ -345,10 +346,10 @@ function print_text_menu_entry($text, $showmode, $url, $id, $idsel, $classname,
 
 	if ($showmode == 1)
 	{
-		print '<a class="tmenuimage" href="'.$url.'"'.($atarget?' target="'.$atarget.'"':'').'>';
-		print '<div class="'.$id.' '.$idsel.'"><span class="'.$id.' tmenuimage" id="mainmenuspan_'.$idsel.'"></span></div>';
-		print '</a>';
-		print '<a '.$classname.' id="mainmenua_'.$idsel.'" href="'.$url.'"'.($atarget?' target="'.$atarget.'"':'').'>';
+		print '<a class="tmenuimage" href="'.$url.'"'.($atarget?' target="'.$atarget.'"':'').'>';
+		print '<div class="'.$id.' '.$idsel.'"><span class="'.$id.' tmenuimage" id="mainmenuspan_'.$idsel.'"></span></div>';
+		print '</a>';
+		print '<a '.$classname.' id="mainmenua_'.$idsel.'" href="'.$url.'"'.($atarget?' target="'.$atarget.'"':'').'>';
 		print '<span class="mainmenuaspan">';
 		print $text;
 		print '</span>';
@@ -356,8 +357,8 @@ function print_text_menu_entry($text, $showmode, $url, $id, $idsel, $classname,
 	}
 	if ($showmode == 2)
 	{
-		print '<div class="'.$id.' '.$idsel.'"><span class="'.$id.'" id="mainmenuspan_'.$idsel.'"></span></div>';
-		print '<a class="tmenudisabled" id="mainmenua_'.$idsel.'" href="#" title="'.dol_escape_htmltag($langs->trans("NotAllowed")).'">';
+		print '<div class="'.$id.' '.$idsel.'"><span class="'.$id.'" id="mainmenuspan_'.$idsel.'"></span></div>';
+		print '<a class="tmenudisabled" id="mainmenua_'.$idsel.'" href="#" title="'.dol_escape_htmltag($langs->trans("NotAllowed")).'">';
 		print '<span class="mainmenuaspan">';
 		print $text;
 		print '</span>';
@@ -414,7 +415,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
 	$newmenu = $menu;
 
 	$mainmenu=($forcemainmenu?$forcemainmenu:$_SESSION["mainmenu"]);
-	$leftmenu=($forceleftmenu?'':$_SESSION["leftmenu"]);
+	$leftmenu=($forceleftmenu?'':(empty($_SESSION["leftmenu"])?'none':$_SESSION["leftmenu"]));
 
 	// Show logo company
 	if (empty($noout) && ! empty($conf->global->MAIN_SHOW_LOGO))
@@ -436,8 +437,8 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
 	}
 
 	/**
-	 * On definit newmenu en fonction de mainmenu et leftmenu
-	 * ------------------------------------------------------
+	 * We update newmenu with entries found into database
+	 * --------------------------------------------------
 	 */
 	if ($mainmenu)
 	{
@@ -1169,7 +1170,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
 	if (is_array($menu_array_before)) $menu_array=array_merge($menu_array_before, $menu_array);
 	if (is_array($menu_array_after))  $menu_array=array_merge($menu_array, $menu_array_after);
 	//var_dump($menu_array);exit;
-	if (! is_array($menu_array)) return 0;
+	if (! is_array($menu_array)) return 0;
 
 	// Show menu
 	if (empty($noout))
@@ -1207,6 +1208,8 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
 
 			// For external modules
 			$url = dol_buildpath($menu_array[$i]['url'], 1);
+			$url=preg_replace('/__LOGIN__/',$user->login,$url);
+			$url=preg_replace('/__USERID__/',$user->id,$url);
 
 			print '<!-- Add menu entry with mainmenu='.$menu_array[$i]['mainmenu'].', leftmenu='.$menu_array[$i]['leftmenu'].', level='.$menu_array[$i]['level'].' -->'."\n";
 
diff --git a/htdocs/core/menus/standard/eldy_menu.php b/htdocs/core/menus/standard/eldy_menu.php
index eb050232366d126872855ed0dbd763dda443c849..18d64839fdcd0cca390797c4a2effecb06c08aba 100644
--- a/htdocs/core/menus/standard/eldy_menu.php
+++ b/htdocs/core/menus/standard/eldy_menu.php
@@ -49,14 +49,16 @@ class MenuManager
     	$this->type_user=$type_user;
         $this->db=$db;
     }
-    
-    
+
+
     /**
      * Load this->tabMenu
-     * 
+     *
+   	 * @param	string	$forcemainmenu		To force mainmenu to load
+   	 * @param	string	$forceleftmenu		To force leftmenu to load
      * @return	void
      */
-    function loadMenu()
+    function loadMenu($forcemainmenu='',$forceleftmenu='')
     {
 		// On sauve en session le menu principal choisi
 		if (isset($_GET["mainmenu"])) $_SESSION["mainmenu"]=$_GET["mainmenu"];
@@ -75,30 +77,32 @@ class MenuManager
         	// On va le chercher en session si non defini par le lien
         	$mainmenu=isset($_SESSION["mainmenu"])?$_SESSION["mainmenu"]:'';
         }
+        if (! empty($forcemainmenu)) $mainmenu=$forcemainmenu;
 
-        if (isset($_GET["leftmenu"]))
-        {
-        	// On sauve en session le menu principal choisi
-        	$leftmenu=$_GET["leftmenu"];
-        	$_SESSION["leftmenu"]=$leftmenu;
-
-        	if ($_SESSION["leftmenuopened"]==$leftmenu)	// To collapse
-        	{
-        		//$leftmenu="";
-        		$_SESSION["leftmenuopened"]="";
-        	}
-        	else
-        	{
-        		$_SESSION["leftmenuopened"]=$leftmenu;
-        	}
-        } else {
-        	// On va le chercher en session si non defini par le lien
-        	$leftmenu=isset($_SESSION["leftmenu"])?$_SESSION["leftmenu"]:'';
-        }
-
-        require_once DOL_DOCUMENT_ROOT.'/core/class/menubase.class.php';
+        if (isset($_GET["leftmenu"]))
+        {
+        	// On sauve en session le menu principal choisi
+        	$leftmenu=$_GET["leftmenu"];
+        	$_SESSION["leftmenu"]=$leftmenu;
+
+        	if ($_SESSION["leftmenuopened"]==$leftmenu)	// To collapse
+        	{
+        		//$leftmenu="";
+        		$_SESSION["leftmenuopened"]="";
+        	}
+        	else
+        	{
+        		$_SESSION["leftmenuopened"]=$leftmenu;
+        	}
+        } else {
+        	// On va le chercher en session si non defini par le lien
+        	$leftmenu=isset($_SESSION["leftmenu"])?$_SESSION["leftmenu"]:'';
+        }
+        if (! empty($forceleftmenu)) $leftmenu=$forceleftmenu;
+
+        require_once DOL_DOCUMENT_ROOT.'/core/class/menubase.class.php';
         $tabMenu=array();
-        $menuArbo = new Menubase($this->db,'eldy');
+        $menuArbo = new Menubase($this->db,'eldy');
         $menuArbo->menuLoad($mainmenu, $leftmenu, $this->type_user, 'eldy', $tabMenu);
         $this->tabMenu=$tabMenu;
     }
@@ -123,13 +127,13 @@ class MenuManager
         }
 
         $res='ErrorBadParameterForMode';
-        
+
 		require_once DOL_DOCUMENT_ROOT.'/core/class/menu.class.php';
         $this->menu=new Menu();
-        
+
         if ($mode == 'top')  $res=print_eldy_menu($this->db,$this->atarget,$this->type_user,$this->tabMenu,$this->menu);
         if ($mode == 'left') $res=print_left_eldy_menu($this->db,$this->menu_array,$this->menu_array_after,$this->tabMenu,$this->menu);
-        if ($mode == 'jmobile') 
+        if ($mode == 'jmobile')
         {
         	$res=print_eldy_menu($this->db,$this->atarget,$this->type_user,$this->tabMenu,$this->menu,1);
 
@@ -140,7 +144,7 @@ class MenuManager
         		if ($val['enabled'] == 1)
         		{
 					$relurl=dol_buildpath($val['url'],1);
-					
+
         			print '<a href="#">'.$val['titre'].'</a>'."\n";
         			// Search submenu fot this entry
         			$tmpmainmenu=$val['mainmenu'];
@@ -156,7 +160,7 @@ class MenuManager
         			if ($canonrelurl != $canonnexturl && $val['mainmenu'] != 'home')
 					{
         				// We add sub entry
-        				print '<li data-role="list-divider"><a href="'.$relurl.'">'.$langs->trans("MainArea").'-'.$val['titre'].'</a></li>'."\n";
+        				print '<li data-role="list-divider"><a href="'.$relurl.'">'.$langs->trans("MainArea").'-'.$val['titre'].'</a></li>'."\n";
         			}
        				foreach($submenu->liste as $key2 => $val2)		// $val['url','titre','level','enabled'=0|1|2,'target','mainmenu','leftmenu'
        				{
@@ -165,19 +169,19 @@ class MenuManager
        					print '<li'.($val2['level']==0?' data-role="list-divider"':'').'><a href="'.$relurl2.'">'.$val2['titre'].'</a></li>'."\n";
        				}
         			//var_dump($submenu);
-        			print '</ul>';
-        		}        		
+        			print '</ul>';
+        		}
         		if ($val['enabled'] == 2)
         		{
         			print '<font class="vsmenudisabled">'.$val['titre'].'</font>';
-        		}	
+        		}
         		print '</li>';
         		print '</ul>'."\n";
         	}
         }
 
         unset($this->menu);
-        
+
         //print 'xx'.$mode;
         return $res;
     }
diff --git a/htdocs/core/menus/standard/empty.php b/htdocs/core/menus/standard/empty.php
index 2e401e3cf103efa7ae84892a09f7ae901049fe0b..14093ce59951e1695374064714c181b713c0331d 100644
--- a/htdocs/core/menus/standard/empty.php
+++ b/htdocs/core/menus/standard/empty.php
@@ -46,12 +46,12 @@ class MenuManager
 	}
 
 
-	/**
-	 * Load this->tabMenu
-	 *
-	 * @return	void
-	 */
-	function loadMenu()
+	/**
+	 * Load this->tabMenu
+	 *
+	 * @return	void
+	 */
+	function loadMenu()
 	{
 
 	}
@@ -70,7 +70,7 @@ class MenuManager
 		$id='mainmenu';
 
 		require_once DOL_DOCUMENT_ROOT.'/core/class/menu.class.php';
-		$this->menu=new Menu();
+		$this->menu=new Menu();
 
 		if ($mode == 'top')
 		{
@@ -183,7 +183,7 @@ class MenuManager
  */
 function print_start_menu_array_empty()
 {
-	print '<div class="tmenudiv">';
+	print '<div class="tmenudiv">';
 	print '<ul class="tmenu">';
 }
 
@@ -220,21 +220,21 @@ function print_text_menu_entry_empty($text, $showmode, $url, $id, $idsel, $class
 {
 	global $conf;
 
-	if ($showmode == 1)
-	{
-		print '<a class="tmenuimage" href="'.$url.'"'.($atarget?' target="'.$atarget.'"':'').'>';
-		print '<div class="'.$id.' '.$idsel.'"><span class="'.$id.' tmenuimage" id="mainmenuspan_'.$idsel.'"></span></div>';
-		print '</a>';
-		print '<a '.$classname.' id="mainmenua_'.$idsel.'" href="'.$url.'"'.($atarget?' target="'.$atarget.'"':'').'>';
-		print '<span class="mainmenuaspan">';
-		print $text;
-		print '</span>';
-		print '</a>';
-	}
-	if ($showmode == 2)
-	{
-		print '<div class="'.$id.' '.$idsel.'"><span class="'.$id.'" id="mainmenuspan_'.$idsel.'"></span></div>';
-		print '<a class="tmenudisabled" id="mainmenua_'.$idsel.'" href="#" title="'.dol_escape_htmltag($langs->trans("NotAllowed")).'">';
+	if ($showmode == 1)
+	{
+		print '<a class="tmenuimage" href="'.$url.'"'.($atarget?' target="'.$atarget.'"':'').'>';
+		print '<div class="'.$id.' '.$idsel.'"><span class="'.$id.' tmenuimage" id="mainmenuspan_'.$idsel.'"></span></div>';
+		print '</a>';
+		print '<a '.$classname.' id="mainmenua_'.$idsel.'" href="'.$url.'"'.($atarget?' target="'.$atarget.'"':'').'>';
+		print '<span class="mainmenuaspan">';
+		print $text;
+		print '</span>';
+		print '</a>';
+	}
+	if ($showmode == 2)
+	{
+		print '<div class="'.$id.' '.$idsel.'"><span class="'.$id.'" id="mainmenuspan_'.$idsel.'"></span></div>';
+		print '<a class="tmenudisabled" id="mainmenua_'.$idsel.'" href="#" title="'.dol_escape_htmltag($langs->trans("NotAllowed")).'">';
 	}
 }
 
diff --git a/htdocs/core/modules/DolibarrModules.class.php b/htdocs/core/modules/DolibarrModules.class.php
index 80becf69573a4c783e3714f598d5223d55c4ceeb..1885662a512ac0d8118b6def9ec86f0a3c7be1cd 100644
--- a/htdocs/core/modules/DolibarrModules.class.php
+++ b/htdocs/core/modules/DolibarrModules.class.php
@@ -433,7 +433,7 @@ abstract class DolibarrModules
                 if (is_resource($handle))
                 {
                 	$dirfound++;
-                	
+
 	                // Run llx_mytable.sql files
                 	while (($file = readdir($handle))!==false)
                     {
@@ -443,7 +443,7 @@ abstract class DolibarrModules
                             if ($result <= 0) $error++;
                         }
                     }
-                    
+
                     rewinddir($handle);
 
 	                // Run llx_mytable.key.sql files (Must be done after llx_mytable.sql)
@@ -457,7 +457,7 @@ abstract class DolibarrModules
                     }
 
                     rewinddir($handle);
-                    
+
                     // Run data_xxx.sql files (Must be done after llx_mytable.key.sql)
                 	while (($file = readdir($handle))!==false)
                     {
@@ -467,9 +467,9 @@ abstract class DolibarrModules
                             if ($result <= 0) $error++;
                         }
                     }
-                    
+
                     rewinddir($handle);
-                    
+
                     // Run update_xxx.sql files
                 	while (($file = readdir($handle))!==false)
                     {
@@ -479,7 +479,7 @@ abstract class DolibarrModules
                             if ($result <= 0) $error++;
                         }
                     }
-                    
+
                     closedir($handle);
                 }
 
@@ -990,7 +990,7 @@ abstract class DolibarrModules
                 //print 'xxx'.$this->menu[$key]['fk_menu'];exit;
                 $foundparent=0;
                 $fk_parent=$this->menu[$key]['fk_menu'];
-                if (preg_match('/r=/',$fk_parent))
+                if (preg_match('/^r=/',$fk_parent))	// old deprecated method
                 {
                     $fk_parent=str_replace('r=','',$fk_parent);
                     if (isset($this->menu[$fk_parent]['rowid']))
@@ -999,14 +999,14 @@ abstract class DolibarrModules
                         $foundparent=1;
                     }
                 }
-                elseif (preg_match('/fk_mainmenu=(.*),fk_leftmenu=(.*)/',$fk_parent,$reg))
+                elseif (preg_match('/^fk_mainmenu=([a-zA-Z0-9_]+),fk_leftmenu=([a-zA-Z0-9_]+)$/',$fk_parent,$reg))
                 {
                     $menu->fk_menu=-1;
                     $menu->fk_mainmenu=$reg[1];
                     $menu->fk_leftmenu=$reg[2];
                     $foundparent=1;
                 }
-                elseif (preg_match('/fk_mainmenu=(.*)/',$fk_parent,$reg))
+                elseif (preg_match('/^fk_mainmenu=([a-zA-Z0-9_]+)$/',$fk_parent,$reg))
                 {
                     $menu->fk_menu=-1;
                     $menu->fk_mainmenu=$reg[1];
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 4ba2a560f5d4dc908ca622eb7d3c9283b9e542d1..85da9b960154caefd05fef812a900955348ba290 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
@@ -105,8 +105,9 @@ class doc_generic_order_odt extends ModelePDFCommandes
         	'object_date'=>dol_print_date($object->date,'day'),
         	'object_date_delivery'=>dol_print_date($object->date_livraison,'dayhour'),
         	'object_date_creation'=>dol_print_date($object->date_creation,'day'),
-            'object_date_modification'=>dol_print_date($object->date_modification,'day'),
-            'object_date_validation'=>dol_print_date($object->date_validation,'dayhour'),
+        	'object_date_modification'=>(! empty($object->date_modification)?dol_print_date($object->date_modification,'day'):''),
+        	'object_date_validation'=>(! empty($object->date_validation)?dol_print_date($object->date_validation,'dayhour'):''),
+        	'object_date_delivery_planed'=>(! empty($object->date_livraison)?dol_print_date($object->date_livraison,'day'):''),
         	'object_date_close'=>dol_print_date($object->date_cloture,'dayhour'),
             'object_payment_mode_code'=>$object->mode_reglement_code,
            	'object_payment_mode'=>($outputlangs->transnoentitiesnoconv('PaymentType'.$object->mode_reglement_code)!='PaymentType'.$object->mode_reglement_code?$outputlangs->transnoentitiesnoconv('PaymentType'.$object->mode_reglement_code):$object->mode_reglement),
@@ -121,12 +122,12 @@ class doc_generic_order_odt extends ModelePDFCommandes
             '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;
-        }
+        // 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/export/export_csv.modules.php b/htdocs/core/modules/export/export_csv.modules.php
index ef422a4fd38b40ebc2112d5d49d402f73c40aa44..902b75584cf6bf9fe40e7cef6e0f8ab6a2118451 100644
--- a/htdocs/core/modules/export/export_csv.modules.php
+++ b/htdocs/core/modules/export/export_csv.modules.php
@@ -244,7 +244,7 @@ class ExportCsv extends ModeleExports
 			if (empty($alias)) dol_print_error('','Bad value for field with key='.$code.'. Try to redefine export.');
 			
 			$newvalue=$outputlangs->convToOutputCharset($objp->$alias);
-			$typefield=isset($array_types[$code])?$array_types[$code]:'';
+			$typefield=isset($array_types[$code])?$array_types[$code]:'';
 				
 			// Translation newvalue
 			if (preg_match('/^\((.*)\)$/i',$newvalue,$reg))
diff --git a/htdocs/core/modules/export/export_excel.modules.php b/htdocs/core/modules/export/export_excel.modules.php
index 1ff15972d662df79038d69ef107d98aa7be570e4..8f6801e8521d2671a5db325c995ba25edc83ef5c 100644
--- a/htdocs/core/modules/export/export_excel.modules.php
+++ b/htdocs/core/modules/export/export_excel.modules.php
@@ -282,7 +282,7 @@ class ExportExcel extends ModeleExports
             $newvalue=$objp->$alias;
 
 			$newvalue=$this->excel_clean($newvalue);
-			$typefield=isset($array_types[$code])?$array_types[$code]:'';
+			$typefield=isset($array_types[$code])?$array_types[$code]:'';
 
 			// Traduction newvalue
 			if (preg_match('/^\((.*)\)$/i',$newvalue,$reg))
@@ -342,18 +342,18 @@ class ExportExcel extends ModeleExports
     		    }
     		    else
     		    {
-    		    	if ($typefield == 'Text')
-    		    	{
-    		    		//$this->workbook->getActiveSheet()->getCellByColumnAndRow($this->col, $this->row+1)->setValueExplicit($newvalue, PHPExcel_Cell_DataType::TYPE_STRING);
+    		    	if ($typefield == 'Text')
+    		    	{
+    		    		//$this->workbook->getActiveSheet()->getCellByColumnAndRow($this->col, $this->row+1)->setValueExplicit($newvalue, PHPExcel_Cell_DataType::TYPE_STRING);
 						$this->workbook->getActiveSheet()->SetCellValueByColumnAndRow($this->col, $this->row+1, (string) $newvalue);
-    		    		$coord=$this->workbook->getActiveSheet()->getCellByColumnAndRow($this->col, $this->row+1)->getCoordinate();
-    		    		$this->workbook->getActiveSheet()->getStyle($coord)->getNumberFormat()->setFormatCode('@');
-    		    	}
-    		    	else
-    		    	{
-    		    		//$coord=$this->workbook->getActiveSheet()->getCellByColumnAndRow($this->col, $this->row+1)->getCoordinate();
-    		    		//if ($typefield == 'Text') $this->workbook->getActiveSheet()->getStyle($coord)->getNumberFormat()->setFormatCode('@');
-    		    		$this->workbook->getActiveSheet()->SetCellValueByColumnAndRow($this->col, $this->row+1, $newvalue);
+    		    		$coord=$this->workbook->getActiveSheet()->getCellByColumnAndRow($this->col, $this->row+1)->getCoordinate();
+    		    		$this->workbook->getActiveSheet()->getStyle($coord)->getNumberFormat()->setFormatCode('@');
+    		    	}
+    		    	else
+    		    	{
+    		    		//$coord=$this->workbook->getActiveSheet()->getCellByColumnAndRow($this->col, $this->row+1)->getCoordinate();
+    		    		//if ($typefield == 'Text') $this->workbook->getActiveSheet()->getStyle($coord)->getNumberFormat()->setFormatCode('@');
+    		    		$this->workbook->getActiveSheet()->SetCellValueByColumnAndRow($this->col, $this->row+1, $newvalue);
     		    	}
     		    }
 			}
diff --git a/htdocs/core/modules/export/export_excel2007.modules.php b/htdocs/core/modules/export/export_excel2007.modules.php
index 68f5d9f198589a4908dd248bdb4192285bb850f6..609bbc2d660f0e8c0f14c2e89749c27d0af5cec8 100755
--- a/htdocs/core/modules/export/export_excel2007.modules.php
+++ b/htdocs/core/modules/export/export_excel2007.modules.php
@@ -277,8 +277,8 @@ class ExportExcel2007 extends ExportExcel
 
 		foreach($array_selected_sorted as $code => $value)
 		{
-			if (strpos($code,' as ') == 0) $alias=str_replace(array('.','-'),'_',$code);
-			else $alias=substr($code, strpos($code, ' as ') + 4);
+			if (strpos($code,' as ') == 0) $alias=str_replace(array('.','-'),'_',$code);
+			else $alias=substr($code, strpos($code, ' as ') + 4);
             if (empty($alias)) dol_print_error('','Bad value for field with code='.$code.'. Try to redefine export.');
             $newvalue=$objp->$alias;
 
diff --git a/htdocs/core/modules/export/export_tsv.modules.php b/htdocs/core/modules/export/export_tsv.modules.php
index 1d182d0e6297cc3fe1edd029dfa6bcdf75186af1..edc08dc6840c36d21f1d874961361c9512510eae 100644
--- a/htdocs/core/modules/export/export_tsv.modules.php
+++ b/htdocs/core/modules/export/export_tsv.modules.php
@@ -219,7 +219,7 @@ class ExportTsv extends ModeleExports
             if (empty($alias)) dol_print_error('','Bad value for field with code='.$code.'. Try to redefine export.');
 
             $newvalue=$outputlangs->convToOutputCharset($objp->$alias);
-            $typefield=isset($array_types[$code])?$array_types[$code]:'';
+            $typefield=isset($array_types[$code])?$array_types[$code]:'';
 
             // Translation newvalue
 			if (preg_match('/^\((.*)\)$/i',$newvalue,$reg))
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 ee80dbbb141f65161b87575715d53fe2a63f09a2..fbdccd73eb8dfd46efa44ca38b090d0b8c337aff 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
@@ -116,7 +116,8 @@ class doc_generic_invoice_odt extends ModelePDFFactures
         	'object_date_limit'=>dol_print_date($object->date_lim_reglement,'day'),
         	'object_date_creation'=>dol_print_date($object->date_creation,'day'),
             'object_date_modification'=>(! empty($object->date_modification)?dol_print_date($object->date_modification,'day'):''),
-            'object_date_validation'=>dol_print_date($object->date_validation,'dayhour'),
+            'object_date_validation'=>(! empty($object->date_validation)?dol_print_date($object->date_validation,'dayhour'):''),
+        	'object_date_delivery_planed'=>(! empty($object->date_livraison)?dol_print_date($object->date_livraison,'day'):''),
             'object_payment_mode_code'=>$object->mode_reglement_code,
         	'object_payment_mode'=>($outputlangs->transnoentitiesnoconv('PaymentType'.$object->mode_reglement_code)!='PaymentType'.$object->mode_reglement_code?$outputlangs->transnoentitiesnoconv('PaymentType'.$object->mode_reglement_code):$object->mode_reglement),
         	'object_payment_term_code'=>$object->cond_reglement_code,
@@ -415,7 +416,8 @@ class doc_generic_invoice_odt extends ModelePDFFactures
 				$array_thirdparty=$this->get_substitutionarray_thirdparty($socobject,$outputlangs);
 				$array_objet=$this->get_substitutionarray_object($object,$outputlangs);
 				$array_propal=is_object($propal_object)?$this->get_substitutionarray_propal($propal_object,$outputlangs,'propal'):array();
-
+				$array_other=$this->get_substitutionarray_other($user,$outputlangs);
+				
 				$tmparray = array_merge($array_user,$array_soc,$array_thirdparty,$array_objet,$array_propal);
 				complete_substitutions_array($tmparray, $outputlangs, $object);
 
diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php
index fb164f0487666225239da8b4a7bb92007e936e80..9ee7f701217e3bb8d2d564d0fc03a5cc1d2b2efa 100755
--- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php
+++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php
@@ -731,7 +731,7 @@ class pdf_crabe extends ModelePDFFactures
 				// Si mode reglement non force ou si force a CHQ
 				if (! empty($conf->global->FACTURE_CHQ_NUMBER))
 				{
-					$diffsizetitle=(empty($conf->global->PDF_DIFFSIZE_TITLE)?3:$conf->global->PDF_DIFFSIZE_TITLE);
+					$diffsizetitle=(empty($conf->global->PDF_DIFFSIZE_TITLE)?3:$conf->global->PDF_DIFFSIZE_TITLE);
 						
 					if ($conf->global->FACTURE_CHQ_NUMBER > 0)
 					{
@@ -1026,8 +1026,8 @@ class pdf_crabe extends ModelePDFFactures
 				if (price2num($object->revenuestamp) != 0)
 				{
 					$index++;
-					$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
-					$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("RevenueStamp"), $useborder, 'L', 1);
+					$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
+					$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("RevenueStamp"), $useborder, 'L', 1);
 
 					$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
 					$pdf->MultiCell($largcol2, $tab2_hl, price($sign * $object->revenuestamp), $useborder, 'R', 1);
diff --git a/htdocs/core/modules/modCron.class.php b/htdocs/core/modules/modCron.class.php
index 828e3c2664ab2daba5025fecd835a7e23fedcb3b..7f17b07503e83a0e0aa557f4a2c7a45330c3330b 100644
--- a/htdocs/core/modules/modCron.class.php
+++ b/htdocs/core/modules/modCron.class.php
@@ -118,18 +118,18 @@ class modCron extends DolibarrModules
 		$this->rights[$r][4] = 'execute';
 		$r++;
 
-        // Main menu entries
-        $r=0;
-        $this->menu[$r]=array(	'fk_menu'=>'fk_mainmenu=home,fk_leftmenu=modulesadmintools',		    // Use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
-						        'type'=>'left',			                // This is a Left menu entry
-						        'titre'=>'CronListActive',
-						        'url'=>'/cron/list.php?status=1',
-						        'langs'=>'cron',	        // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
-						        'position'=>200,
-						        'enabled'=>'$leftmenu==\'modulesadmintools\'',  // Define condition to show or hide menu entry. Use '$conf->mymodule->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected.
-						        'perms'=>'$user->rights->cron->read',			    // Use 'perms'=>'$user->rights->mymodule->level1->level2' if you want your menu with a permission rules
-						        'target'=>'',
-						        'user'=>2);				                // 0=Menu for internal users, 1=external users, 2=both
+        // Main menu entries
+        $r=0;
+        $this->menu[$r]=array(	'fk_menu'=>'fk_mainmenu=home,fk_leftmenu=modulesadmintools',		    // Use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
+						        'type'=>'left',			                // This is a Left menu entry
+						        'titre'=>'CronListActive',
+						        'url'=>'/cron/list.php?status=1',
+						        'langs'=>'cron',	        // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
+						        'position'=>200,
+						        'enabled'=>'$leftmenu==\'modulesadmintools\'',  // Define condition to show or hide menu entry. Use '$conf->mymodule->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected.
+						        'perms'=>'$user->rights->cron->read',			    // Use 'perms'=>'$user->rights->mymodule->level1->level2' if you want your menu with a permission rules
+						        'target'=>'',
+						        'user'=>2);				                // 0=Menu for internal users, 1=external users, 2=both
         $r++;
 
         $this->menu[$r]=array(	'fk_menu'=>'fk_mainmenu=home,fk_leftmenu=modulesadmintools',		    // Use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
diff --git a/htdocs/core/search_jmobile.php b/htdocs/core/search_jmobile.php
index 9a86fb8619abce30672452b70d0cca895c324212..e5604ddcc7586f16a16dab488bec2040b2822b89 100644
--- a/htdocs/core/search_jmobile.php
+++ b/htdocs/core/search_jmobile.php
@@ -55,52 +55,52 @@ top_htmlhead($head, $title, $disablejs, $disablehead, $arrayofjs, $arrayofcss);
 
 
 
-print '<body style="margin: 40px; text-align: center">'."\n";
+print '<body style="margin: 40px; text-align: center">'."\n";
 print '<center>';
 
-// Define $searchform
-if (! empty($conf->societe->enabled) && ! empty($conf->global->MAIN_SEARCHFORM_SOCIETE) && $user->rights->societe->lire)
-{
-	$langs->load("companies");
-	$searchform.=printSearchForm(DOL_URL_ROOT.'/societe/societe.php', DOL_URL_ROOT.'/societe/societe.php', img_object('','company').' '.$langs->trans("ThirdParties"), 'soc', 'socname');
-}
-
-if (! empty($conf->societe->enabled) && ! empty($conf->global->MAIN_SEARCHFORM_CONTACT) && $user->rights->societe->lire)
-{
-	$langs->load("companies");
-	$searchform.=printSearchForm(DOL_URL_ROOT.'/contact/list.php', DOL_URL_ROOT.'/contact/list.php', img_object('','contact').' '.$langs->trans("Contacts"), 'contact', 'contactname');
-}
-
-if (((! empty($conf->product->enabled) && $user->rights->produit->lire) || (! empty($conf->service->enabled) && $user->rights->service->lire))
-	&& ! empty($conf->global->MAIN_SEARCHFORM_PRODUITSERVICE))
-{
-	$langs->load("products");
-	$searchform.=printSearchForm(DOL_URL_ROOT.'/product/liste.php', DOL_URL_ROOT.'/product/liste.php', img_object('','product').' '.$langs->trans("Products")."/".$langs->trans("Services"), 'products', 'sall');
-}
-
-if (((! empty($conf->product->enabled) && $user->rights->produit->lire) || (! empty($conf->service->enabled) && $user->rights->service->lire))
-	&& ! empty($conf->global->MAIN_SEARCHFORM_PRODUITSERVICE))
-{
-	$langs->load("products");
-	$searchform.=printSearchForm(DOL_URL_ROOT.'/fourn/product/liste.php', DOL_URL_ROOT.'/fourn/product/liste.php', img_object('','product').' '.$langs->trans("SupplierRef"), 'products', 'srefsupplier');
-}
-
-if (! empty($conf->adherent->enabled) && ! empty($conf->global->MAIN_SEARCHFORM_ADHERENT) && $user->rights->adherent->lire)
-{
-	$langs->load("members");
-	$searchform.=printSearchForm(DOL_URL_ROOT.'/adherents/liste.php', DOL_URL_ROOT.'/adherents/liste.php', img_object('','user').' '.$langs->trans("Members"), 'member', 'sall');
-}
-
-// Execute hook printSearchForm
-$parameters=array();
-$searchform.=$hookmanager->executeHooks('printSearchForm',$parameters);    // Note that $action and $object may have been modified by some hooks
-
-
-print "\n";
-print "<!-- Begin SearchForm -->\n";
-print '<div id="blockvmenusearch" class="blockvmenusearch">'."\n";
-print $searchform;
-print '</div>'."\n";
+// Define $searchform
+if (! empty($conf->societe->enabled) && ! empty($conf->global->MAIN_SEARCHFORM_SOCIETE) && $user->rights->societe->lire)
+{
+	$langs->load("companies");
+	$searchform.=printSearchForm(DOL_URL_ROOT.'/societe/societe.php', DOL_URL_ROOT.'/societe/societe.php', img_object('','company').' '.$langs->trans("ThirdParties"), 'soc', 'socname');
+}
+
+if (! empty($conf->societe->enabled) && ! empty($conf->global->MAIN_SEARCHFORM_CONTACT) && $user->rights->societe->lire)
+{
+	$langs->load("companies");
+	$searchform.=printSearchForm(DOL_URL_ROOT.'/contact/list.php', DOL_URL_ROOT.'/contact/list.php', img_object('','contact').' '.$langs->trans("Contacts"), 'contact', 'contactname');
+}
+
+if (((! empty($conf->product->enabled) && $user->rights->produit->lire) || (! empty($conf->service->enabled) && $user->rights->service->lire))
+	&& ! empty($conf->global->MAIN_SEARCHFORM_PRODUITSERVICE))
+{
+	$langs->load("products");
+	$searchform.=printSearchForm(DOL_URL_ROOT.'/product/liste.php', DOL_URL_ROOT.'/product/liste.php', img_object('','product').' '.$langs->trans("Products")."/".$langs->trans("Services"), 'products', 'sall');
+}
+
+if (((! empty($conf->product->enabled) && $user->rights->produit->lire) || (! empty($conf->service->enabled) && $user->rights->service->lire))
+	&& ! empty($conf->global->MAIN_SEARCHFORM_PRODUITSERVICE))
+{
+	$langs->load("products");
+	$searchform.=printSearchForm(DOL_URL_ROOT.'/fourn/product/liste.php', DOL_URL_ROOT.'/fourn/product/liste.php', img_object('','product').' '.$langs->trans("SupplierRef"), 'products', 'srefsupplier');
+}
+
+if (! empty($conf->adherent->enabled) && ! empty($conf->global->MAIN_SEARCHFORM_ADHERENT) && $user->rights->adherent->lire)
+{
+	$langs->load("members");
+	$searchform.=printSearchForm(DOL_URL_ROOT.'/adherents/liste.php', DOL_URL_ROOT.'/adherents/liste.php', img_object('','user').' '.$langs->trans("Members"), 'member', 'sall');
+}
+
+// Execute hook printSearchForm
+$parameters=array();
+$searchform.=$hookmanager->executeHooks('printSearchForm',$parameters);    // Note that $action and $object may have been modified by some hooks
+
+
+print "\n";
+print "<!-- Begin SearchForm -->\n";
+print '<div id="blockvmenusearch" class="blockvmenusearch">'."\n";
+print $searchform;
+print '</div>'."\n";
 print "<!-- End SearchForm -->\n";
 
 print '</center>';
diff --git a/htdocs/cron/admin/cron.php b/htdocs/cron/admin/cron.php
index 7846a25e6362c693a56689f667c90b6379d1211e..021e4da63e37276ff373121b83ac73aca9ca5ed2 100644
--- a/htdocs/cron/admin/cron.php
+++ b/htdocs/cron/admin/cron.php
@@ -107,10 +107,10 @@ dol_fiche_end();
 print '<br><br>';
 
 
-// Define $urlwithroot
-$urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT,'/').'$/i','',trim($dolibarr_main_url_root));
-$urlwithroot=$urlwithouturlroot.DOL_URL_ROOT;		// This is to use external domain name found into config file
-//$urlwithroot=DOL_MAIN_URL_ROOT;					// This is to use same domain name than current
+// Define $urlwithroot
+$urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT,'/').'$/i','',trim($dolibarr_main_url_root));
+$urlwithroot=$urlwithouturlroot.DOL_URL_ROOT;		// This is to use external domain name found into config file
+//$urlwithroot=DOL_MAIN_URL_ROOT;					// This is to use same domain name than current
 
 // Cron launch
 print '<u>'.$langs->trans("URLToLaunchCronJobs").':</u><br>';
@@ -133,11 +133,11 @@ $file='/scripts/cron/cron_run_jobs.php'.' '.(empty($conf->global->CRON_KEY)?'sec
 print '<textarea rows="'.ROWS_2.'" cols="120">..'.$file."</textarea><br>\n";
 print '<br>';
 print $langs->trans("Note").': ';
-if ($linuxlike) {
-	print $langs->trans("CronExplainHowToRunUnix");
-} else {
-	print $langs->trans("CronExplainHowToRunWin");
-}
+if ($linuxlike) {
+	print $langs->trans("CronExplainHowToRunUnix");
+} else {
+	print $langs->trans("CronExplainHowToRunWin");
+}
 
 
 
diff --git a/htdocs/cron/card.php b/htdocs/cron/card.php
index 6148ed5d5f762da69cd46459d1933697b2735543..3a3caa1662682bcf7b60f55eea949bf2502889fc 100644
--- a/htdocs/cron/card.php
+++ b/htdocs/cron/card.php
@@ -600,7 +600,7 @@ if (($action=="create") || ($action=="edit"))
 	}
 	else if (empty($object->status))
 	{
-		print '<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->transnoentitiesnoconv("TaskDisabled")).'">'.$langs->trans("CronExecute").'</a>';
+		print '<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->transnoentitiesnoconv("TaskDisabled")).'">'.$langs->trans("CronExecute").'</a>';
 	}
 	else {
 		print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=execute&id='.$object->id.'">'.$langs->trans("CronExecute").'</a>';
diff --git a/htdocs/expedition/fiche.php b/htdocs/expedition/fiche.php
index d58b6d60f4f331851ca5e1657f4c22ef79651889..390e40810660d0a499f8c33ef8089b793e688da1 100644
--- a/htdocs/expedition/fiche.php
+++ b/htdocs/expedition/fiche.php
@@ -1405,7 +1405,7 @@ else
         {
             $ref = dol_sanitizeFileName($object->ref);
             include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
-            $fileparams = dol_most_recent_file($conf->expedition->dir_output . '/sending/' . $ref, preg_quote($object->ref,'/'));
+            $fileparams = dol_most_recent_file($conf->expedition->dir_output . '/sending/' . $ref, preg_quote($ref,'/'));
             $file=$fileparams['fullname'];
 
             // Build document if it not exists
@@ -1428,7 +1428,7 @@ else
                     dol_print_error($db,$result);
                     exit;
                 }
-                $fileparams = dol_most_recent_file($conf->expedition->dir_output . '/sending/' . $ref, preg_quote($object->ref,'/'));
+                $fileparams = dol_most_recent_file($conf->expedition->dir_output . '/sending/' . $ref, preg_quote($ref,'/'));
                 $file=$fileparams['fullname'];
             }
 
@@ -1458,7 +1458,7 @@ else
             $formmail->substit['__SIGNATURE__']=$user->signature;
             $formmail->substit['__PERSONALIZED__']='';
             $formmail->substit['__CONTACTCIVNAME__']='';
-            
+
             //Find the good contact adress
             //Find the good contact adress
             if ($typeobject == 'commande' && $object->$typeobject->id && ! empty($conf->commande->enabled))	{
@@ -1475,22 +1475,22 @@ else
 
             if (is_array($contactarr) && count($contactarr)>0) {
             	foreach($contactarr as $contact) {
-            		
+
             		if ($contact['libelle']==$langs->trans('TypeContact_commande_external_CUSTOMER')) {
-            			 
+
             			require_once DOL_DOCUMENT_ROOT . '/contact/class/contact.class.php';
-            			 
+
             			$contactstatic=new Contact($db);
             			$contactstatic->fetch($contact['id']);
             			$custcontact=$contactstatic->getFullName($langs,1);
             		}
             	}
-            
+
             	if (!empty($custcontact)) {
             		$formmail->substit['__CONTACTCIVNAME__']=$custcontact;
             	}
             }
-            
+
             // Tableau des parametres complementaires
             $formmail->param['action']='send';
             $formmail->param['models']='shipping_send';
@@ -1522,4 +1522,4 @@ else
 
 llxFooter();
 $db->close();
-?>
\ No newline at end of file
+?>
diff --git a/htdocs/expedition/index.php b/htdocs/expedition/index.php
index 1b28f1f7b7fffd6a6fd128e9f7829ef26eae2160..1d4fc31d706175899cfce4e1c0f70cda4f7dcc17 100644
--- a/htdocs/expedition/index.php
+++ b/htdocs/expedition/index.php
@@ -46,7 +46,7 @@ print_fiche_titre($langs->trans("SendingsArea"));
 
 //print '<table class="notopnoleftnoright" width="100%">';
 //print '<tr><td valign="top" width="30%" class="notopnoleft">';
-print '<div class="fichecenter"><div class="fichethirdleft">';
+print '<div class="fichecenter"><div class="fichethirdleft">';
 
 
 $var=false;
@@ -163,7 +163,7 @@ if ($resql)
 
 
 //print '</td><td valign="top" width="70%">';
-print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
+print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
 
 
 /*
@@ -275,7 +275,7 @@ else dol_print_error($db);
 
 
 //print '</td></tr></table>';
-print '<div></div></div>';
+print '</div></div></div>';
 
 
 llxFooter();
diff --git a/htdocs/exports/class/export.class.php b/htdocs/exports/class/export.class.php
index 9def962c8ec4073d8d881351ea0fa0f0764c276b..2311c6fe66e938db942ce0c304aa5c4bb7626cc2 100644
--- a/htdocs/exports/class/export.class.php
+++ b/htdocs/exports/class/export.class.php
@@ -237,7 +237,7 @@ class Export
 			}
 			$sql.=$sqlWhere;
 		}
-		$sql.=$this->array_export_sql_order[$indice];
+		$sql.=$this->array_export_sql_order[$indice];
 
 		return $sql;
 	}
diff --git a/htdocs/exports/export.php b/htdocs/exports/export.php
index fcd968eeeb03e1b0d27cc5a2641931fd50a99e40..b40988ca57147563d13dc9297e2d3952c5fd2ab4 100644
--- a/htdocs/exports/export.php
+++ b/htdocs/exports/export.php
@@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/export/modules_export.php';
 require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
 
 $langs->load("exports");
-$langs->load("users");
+$langs->load("users");
 
 // Everybody should be able to go on this page
 //if (! $user->admin)
diff --git a/htdocs/fichinter/fiche.php b/htdocs/fichinter/fiche.php
index f7371f42066d0145afad66a7b6e6a85a1b20bcb4..295298614b8d71dc8a8411aa61718afec70053b5 100644
--- a/htdocs/fichinter/fiche.php
+++ b/htdocs/fichinter/fiche.php
@@ -1068,7 +1068,7 @@ else if ($id > 0 || ! empty($ref))
     		$numref = $object->ref;
     	}
     	$text=$langs->trans('ConfirmValidateIntervention',$numref);
-    	
+
         $ret=$form->form_confirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ValidateIntervention'), $text, 'confirm_validate','',0,1);
         if ($ret == 'html') print '<br>';
     }
@@ -1465,7 +1465,7 @@ else if ($id > 0 || ! empty($ref))
     {
         $ref = dol_sanitizeFileName($object->ref);
         include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
-        $fileparams = dol_most_recent_file($conf->ficheinter->dir_output . '/' . $ref, preg_quote($object->ref,'/'));
+        $fileparams = dol_most_recent_file($conf->ficheinter->dir_output . '/' . $ref, preg_quote($ref,'/'));
         $file=$fileparams['fullname'];
 
         // Build document if it not exists
@@ -1488,7 +1488,7 @@ else if ($id > 0 || ! empty($ref))
                 dol_print_error($db,$result);
                 exit;
             }
-            $fileparams = dol_most_recent_file($conf->ficheinter->dir_output . '/' . $ref, preg_quote($object->ref,'/'));
+            $fileparams = dol_most_recent_file($conf->ficheinter->dir_output . '/' . $ref, preg_quote($ref,'/'));
             $file=$fileparams['fullname'];
         }
 
@@ -1519,12 +1519,12 @@ else if ($id > 0 || ! empty($ref))
         $formmail->substit['__SIGNATURE__']=$user->signature;
         $formmail->substit['__PERSONALIZED__']='';
         $formmail->substit['__CONTACTCIVNAME__']='';
-        
+
         //Find the good contact adress
         $custcontact='';
         $contactarr=array();
         $contactarr=$object->liste_contact(-1,'external');
-        	
+
         if (is_array($contactarr) && count($contactarr)>0) {
         	foreach($contactarr as $contact) {
         		if ($contact['libelle']==$langs->trans('TypeContact_fichinter_external_CUSTOMER')) {
@@ -1534,12 +1534,12 @@ else if ($id > 0 || ! empty($ref))
         			$custcontact=$contactstatic->getFullName($langs,1);
         		}
         	}
-        
+
         	if (!empty($custcontact)) {
         		$formmail->substit['__CONTACTCIVNAME__']=$custcontact;
         	}
         }
-        
+
         // Tableau des parametres complementaires
         $formmail->param['action']='send';
         $formmail->param['models']='fichinter_send';
diff --git a/htdocs/filefunc.inc.php b/htdocs/filefunc.inc.php
index b3ae77d7ac312d3ffe69c75cfb971e23015a2cb4..4e93a5710b1c7b024b2cb65e10fad8eaf2a29a2c 100755
--- a/htdocs/filefunc.inc.php
+++ b/htdocs/filefunc.inc.php
@@ -234,7 +234,7 @@ if (! file_exists(DOL_DOCUMENT_ROOT ."/core/lib/functions.lib.php"))
 	print "Please run dolibarr setup by calling page <b>/install</b>.<br>\n";
 	exit;
 }
-
+
 
 // Included by default
 include_once DOL_DOCUMENT_ROOT .'/core/lib/functions.lib.php';
diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php
index 840c4cecb944b35647425b183770cbed469cc0ea..5b26339c8c87937627c1c99aa622933bcdaad423 100644
--- a/htdocs/fourn/class/fournisseur.facture.class.php
+++ b/htdocs/fourn/class/fournisseur.facture.class.php
@@ -5,6 +5,7 @@
  * Copyright (C) 2005		Marc Barilley			<marc@ocebo.com>
  * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
  * Copyright (C) 2010-2011	Juanjo Menent			<jmenent@2byte.es>
+ * Copyright (C) 2013		Philippe Grand			<philippe.grand@atoo-net.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -40,7 +41,7 @@ class FactureFournisseur extends CommonInvoice
     public $fk_element='fk_facture_fourn';
     protected $ismultientitymanaged = 1;	// 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
 
-    var $ref;		 // TODO deprecated
+    var $ref;		 
     var $product_ref;
     var $ref_supplier;
     var $socid;
@@ -132,7 +133,8 @@ class FactureFournisseur extends CommonInvoice
         $totalht = ($amount - $remise);
 
         $sql = "INSERT INTO ".MAIN_DB_PREFIX."facture_fourn (";
-        $sql.= "facnumber";
+		$sql.= "ref";
+        $sql.= ", facnumber";
         $sql.= ", entity";
         $sql.= ", libelle";
         $sql.= ", fk_soc";
@@ -144,7 +146,8 @@ class FactureFournisseur extends CommonInvoice
         $sql.= ", date_lim_reglement";
         $sql.= ")";
         $sql.= " VALUES (";
-        $sql.= "'".$this->db->escape($number)."'";
+		$sql.= "'(PROV)'";
+        $sql.= ", '".$this->db->escape($number)."'";
         $sql.= ", ".$conf->entity;
         $sql.= ", '".$this->db->escape($this->libelle)."'";
         $sql.= ", ".$this->socid;
@@ -259,6 +262,7 @@ class FactureFournisseur extends CommonInvoice
 
         $sql = "SELECT";
         $sql.= " t.rowid,";
+		$sql.= " t.ref,";
         $sql.= " t.facnumber,";
         $sql.= " t.entity,";
         $sql.= " t.type,";
@@ -294,7 +298,7 @@ class FactureFournisseur extends CommonInvoice
         $sql.= ' s.nom as socnom, s.rowid as socid';
         $sql.= ' FROM '.MAIN_DB_PREFIX.'facture_fourn as t,'.MAIN_DB_PREFIX.'societe as s';
         if ($id)  $sql.= " WHERE t.rowid=".$id;
-        if ($ref) $sql.= " WHERE t.rowid='".$this->db->escape($ref)."'";    // ref is id (facnumber is supplier ref)
+        if ($ref) $sql.= " WHERE t.ref='".$this->db->escape($ref)."'";    // ref is id (facnumber is supplier ref)
         $sql.= ' AND t.fk_soc = s.rowid';
 
         dol_syslog(get_class($this)."::fetch sql=".$sql, LOG_DEBUG);
@@ -306,7 +310,7 @@ class FactureFournisseur extends CommonInvoice
                 $obj = $this->db->fetch_object($resql);
 
                 $this->id					= $obj->rowid;
-                $this->ref					= $obj->rowid;
+                $this->ref					= $obj->ref;
 
                 $this->ref_supplier			= $obj->facnumber;
                 $this->facnumber			= $obj->facnumber;
@@ -459,6 +463,7 @@ class FactureFournisseur extends CommonInvoice
         $error=0;
 
         // Clean parameters
+		if (isset($this->ref)) $this->ref=trim($this->ref);
         if (isset($this->ref_supplier)) $this->ref_supplier=trim($this->ref_supplier);
         if (isset($this->entity)) $this->entity=trim($this->entity);
         if (isset($this->type)) $this->type=trim($this->type);
@@ -495,6 +500,7 @@ class FactureFournisseur extends CommonInvoice
 
         // Update request
         $sql = "UPDATE ".MAIN_DB_PREFIX."facture_fourn SET";
+		$sql.= " ref=".(isset($this->ref)?"'".$this->db->escape($this->ref)."'":"null").",";
         $sql.= " facnumber=".(isset($this->facnumber)?"'".$this->db->escape($this->facnumber)."'":"null").",";
         $sql.= " entity=".(isset($this->entity)?$this->entity:"null").",";
         $sql.= " type=".(isset($this->type)?$this->type:"null").",";
@@ -834,7 +840,7 @@ class FactureFournisseur extends CommonInvoice
         }
 
         $sql = "UPDATE ".MAIN_DB_PREFIX."facture_fourn";
-        $sql.= " SET fk_statut = 1, fk_user_valid = ".$user->id;
+        $sql.= " SET ref='".$num."', fk_statut = 1, fk_user_valid = ".$user->id;
         $sql.= " WHERE rowid = ".$this->id;
 
         dol_syslog(get_class($this)."::validate sql=".$sql);
@@ -1181,17 +1187,17 @@ class FactureFournisseur extends CommonInvoice
         dol_syslog(get_class($this)."::delete rowid=".$rowid, LOG_DEBUG);
 
         $error=0;
-    	$this->db->begin();
+    	$this->db->begin();
 
         if (! $error && ! $notrigger)
         {
-	    	// Appel des triggers
-	    	include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php");
-	    	$interface=new Interfaces($this->db);
-	    	$result=$interface->run_triggers('LINEBILL_SUPPLIER_DELETE',$this,$user,$langs,$conf);
-	    	if ($result < 0) {
-	    		$error++; $this->errors=$interface->errors;
-	    	}
+	    	// Appel des triggers
+	    	include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php");
+	    	$interface=new Interfaces($this->db);
+	    	$result=$interface->run_triggers('LINEBILL_SUPPLIER_DELETE',$this,$user,$langs,$conf);
+	    	if ($result < 0) {
+	    		$error++; $this->errors=$interface->errors;
+	    	}
         	// Fin appel triggers
         }
 
@@ -1213,7 +1219,7 @@ class FactureFournisseur extends CommonInvoice
     	if (! $error)
     	{
 	        // Mise a jour prix facture
-    		$this->update_price();
+    		$this->update_price();
     	}
 
     	if (! $error)
diff --git a/htdocs/fourn/commande/fiche.php b/htdocs/fourn/commande/fiche.php
index 856c92c88bfe8276c339be44425ecef8bd39ecf1..6ba577c152bf5187875faa0d88a95dedd8ae844d 100644
--- a/htdocs/fourn/commande/fiche.php
+++ b/htdocs/fourn/commande/fiche.php
@@ -1855,7 +1855,7 @@ elseif (! empty($object->id))
 	{
 		$ref = dol_sanitizeFileName($object->ref);
 		include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
-		$fileparams = dol_most_recent_file($conf->fournisseur->commande->dir_output . '/' . $ref, preg_quote($object->ref,'/'));
+		$fileparams = dol_most_recent_file($conf->fournisseur->commande->dir_output . '/' . $ref, preg_quote($ref,'/'));
 		$file=$fileparams['fullname'];
 
 		// Build document if it not exists
@@ -1878,7 +1878,7 @@ elseif (! empty($object->id))
 				dol_print_error($db,$result);
 				exit;
 			}
-			$fileparams = dol_most_recent_file($conf->fournisseur->commande->dir_output . '/' . $ref, preg_quote($object->ref,'/'));
+			$fileparams = dol_most_recent_file($conf->fournisseur->commande->dir_output . '/' . $ref, preg_quote($ref,'/'));
 			$file=$fileparams['fullname'];
 		}
 
diff --git a/htdocs/fourn/facture/fiche.php b/htdocs/fourn/facture/fiche.php
index b8b4c209cb37f4c3b7f46d9aadffb9175b14abf9..9f63805a288d53a0969d0ac2f705680ec58f1e6a 100644
--- a/htdocs/fourn/facture/fiche.php
+++ b/htdocs/fourn/facture/fiche.php
@@ -5,6 +5,7 @@
  * Copyright (C) 2005		Marc Barilley			<marc@ocebo.fr>
  * Copyright (C) 2005-2013	Regis Houssin			<regis.houssin@capnetworks.com>
  * Copyright (C) 2010-2012	Juanjo Menent			<jmenent@2byte.es>
+ * Copyright (C) 2013		Philippe Grand			<philippe.grand@atoo-net.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -49,6 +50,7 @@ $errors=array();
 $id			= (GETPOST('facid','int') ? GETPOST('facid','int') : GETPOST('id','int'));
 $action		= GETPOST("action");
 $confirm	= GETPOST("confirm");
+$ref		= GETPOST('ref','alpha');
 
 //PDF
 $hidedetails = (GETPOST('hidedetails','int') ? GETPOST('hidedetails','int') : (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS) ? 1 : 0));
@@ -65,6 +67,12 @@ $hookmanager->initHooks(array('invoicesuppliercard'));
 
 $object=new FactureFournisseur($db);
 
+// Load object
+if ($id > 0 || ! empty($ref))
+{
+	$ret=$object->fetch($id, $ref);
+}
+
 
 
 /*
@@ -258,7 +266,8 @@ elseif ($action == 'add' && $user->rights->fournisseur->facture->creer)
         $db->begin();
 
         // Creation facture
-        $object->ref           = $_POST['facnumber'];
+        $object->ref           = $_POST['ref'];
+		$object->facnumber     = $_POST['facnumber'];
         $object->socid         = $_POST['socid'];
         $object->libelle       = $_POST['libelle'];
         $object->date          = $datefacture;
@@ -1281,6 +1290,22 @@ else
         // Confirmation de la validation
         if ($action == 'valid')
         {
+			 // on verifie si l'objet est en numerotation provisoire
+            $objectref = substr($object->ref, 1, 4);
+            if ($objectref == 'PROV')
+            {
+                $savdate=$object->date;
+                if (! empty($conf->global->FAC_FORCE_DATE_VALIDATION))
+                {
+                    $object->date=dol_now();
+                    $object->date_lim_reglement=$object->calculate_date_lim_reglement();
+                }
+                $numref = $object->getNextNumRef($soc);
+            }
+            else
+            {
+                $numref = $object->ref;
+            }
             $formquestion=array();
             if (! empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_BILL) && $object->hasProductsOrServices(1))
             {
@@ -1322,7 +1347,7 @@ else
 
         // Ref
         print '<tr><td nowrap="nowrap" width="20%">'.$langs->trans("Ref").'</td><td colspan="4">';
-        print $form->showrefnav($object, 'id', $linkback, 1, 'rowid', 'ref');
+        print $form->showrefnav($object, 'ref', $linkback, 1, 'ref', 'ref');
         print '</td>';
         print "</tr>\n";
 
@@ -2046,7 +2071,7 @@ else
         {
             $ref = dol_sanitizeFileName($object->ref);
             include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
-            $fileparams = dol_most_recent_file($conf->fournisseur->facture->dir_output.'/'.get_exdir($object->id,2).$ref, preg_quote($object->ref,'/'));
+            $fileparams = dol_most_recent_file($conf->fournisseur->facture->dir_output.'/'.get_exdir($object->id,2).$ref, preg_quote($ref,'/'));
             $file=$fileparams['fullname'];
 
             // Build document if it not exists
@@ -2069,7 +2094,7 @@ else
                     dol_print_error($db,$result);
                     exit;
                 }
-                $fileparams = dol_most_recent_file($conf->fournisseur->facture->dir_output.'/'.get_exdir($object->id,2).$ref, preg_quote($object->ref,'/'));
+                $fileparams = dol_most_recent_file($conf->fournisseur->facture->dir_output.'/'.get_exdir($object->id,2).$ref, preg_quote($ref,'/'));
                 $file=$fileparams['fullname'];
             }
 
diff --git a/htdocs/fourn/facture/index.php b/htdocs/fourn/facture/index.php
index 6181ec15b24058d1e279d27d325754c4159805f3..b5922f52b290741b66c6ba66bb719af0b0ff18b2 100644
--- a/htdocs/fourn/facture/index.php
+++ b/htdocs/fourn/facture/index.php
@@ -2,6 +2,7 @@
 /* Copyright (C) 2002-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
  * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
  * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
+ * Copyright (C) 2013	   Philippe Grand		<philippe.grand@atoo-net.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -102,7 +103,7 @@ $htmlother=new FormOther($db);
 llxHeader('',$langs->trans("SuppliersInvoices"),'EN:Suppliers_Invoices|FR:FactureFournisseur|ES:Facturas_de_proveedores');
 
 $sql = "SELECT s.rowid as socid, s.nom, ";
-$sql.= " fac.rowid as ref, fac.rowid as facid, fac.facnumber, fac.datef, fac.date_lim_reglement as date_echeance,";
+$sql.= " fac.rowid as facid, fac.ref, fac.facnumber, fac.datef, fac.date_lim_reglement as date_echeance,";
 $sql.= " fac.total_ht, fac.total_ttc, fac.paye as paye, fac.fk_statut as fk_statut, fac.libelle";
 if (!$user->rights->societe->client->voir && !$socid) $sql .= ", sc.fk_soc, sc.fk_user ";
 $sql.= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."facture_fourn as fac";
diff --git a/htdocs/fourn/index.php b/htdocs/fourn/index.php
index ec832a670d27624eaa44ccf7343bb6737af9e799..25f781ccf0d372071ca644f473393c4ae9cbb945 100644
--- a/htdocs/fourn/index.php
+++ b/htdocs/fourn/index.php
@@ -53,7 +53,7 @@ print_fiche_titre($langs->trans("SuppliersArea"));
 
 //print '<table border="0" width="100%" class="notopnoleftnoright">';
 //print '<tr><td valign="top" width="30%" class="notopnoleft">';
-print '<div class="fichecenter"><div class="fichethirdleft">';
+print '<div class="fichecenter"><div class="fichethirdleft">';
 
 
 // Orders
@@ -226,7 +226,7 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->facture-
 
 
 //print '</td><td valign="top" width="70%" class="notopnoleftnoright">';
-print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
+print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
 
 
 /*
@@ -321,7 +321,7 @@ if (count($companystatic->SupplierCategories))
 
 
 //print "</td></tr></table>\n";
-print '<div></div></div>';
+print '</div></div></div>';
 
 llxFooter();
 
diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php
index c97d2f1384e1c009a6cce73c3d4a2892b2840b60..8dfaf85ac71ebdfe87384380de05d6b4584916b7 100644
--- a/htdocs/holiday/class/holiday.class.php
+++ b/htdocs/holiday/class/holiday.class.php
@@ -82,12 +82,12 @@ class Holiday extends CommonObject
      */
     function updateSold()
     {
-	    // Mets à jour les congés payés en début de mois
-	    $this->updateSoldeCP();
-
-	    // Vérifie le nombre d'utilisateur et mets à jour si besoin
-	    $this->verifNbUsers($this->countActiveUsers(),$this->getConfCP('nbUser'));
-	    return 1;
+	    // Mets à jour les congés payés en début de mois
+	    $this->updateSoldeCP();
+
+	    // Vérifie le nombre d'utilisateur et mets à jour si besoin
+	    $this->verifNbUsers($this->countActiveUsers(),$this->getConfCP('nbUser'));
+	    return 1;
     }
 
     /**
@@ -267,10 +267,17 @@ class Holiday extends CommonObject
         $sql.= " cp.fk_user_refuse,";
         $sql.= " cp.date_cancel,";
         $sql.= " cp.fk_user_cancel,";
-        $sql.= " cp.detail_refuse";
+        $sql.= " cp.detail_refuse,";
+		
+		$sql.= " uu.lastname as user_lastname,";
+        $sql.= " uu.firstname as user_firstname,";
 
-        $sql.= " FROM ".MAIN_DB_PREFIX."holiday as cp";
-        $sql.= " WHERE cp.fk_user = '".$user_id."'";
+        $sql.= " ua.lastname as validator_lastname,";
+        $sql.= " ua.firstname as validator_firstname";
+
+        $sql.= " FROM ".MAIN_DB_PREFIX."holiday as cp, ".MAIN_DB_PREFIX."user as uu, ".MAIN_DB_PREFIX."user as ua";
+		$sql.= " WHERE cp.fk_user = uu.rowid AND cp.fk_validator = ua.rowid "; // Hack pour la recherche sur le tableau
+        $sql.= " AND cp.fk_user = '".$user_id."'";
 
         // Filtre de séléction
         if(!empty($filter)) {
@@ -320,6 +327,12 @@ class Holiday extends CommonObject
                 $tab_result[$i]['fk_user_cancel'] = $obj->fk_user_cancel;
                 $tab_result[$i]['detail_refuse'] = $obj->detail_refuse;
 
+                $tab_result[$i]['user_firstname'] = $obj->user_firstname;
+                $tab_result[$i]['user_lastname'] = $obj->user_lastname;
+
+                $tab_result[$i]['validator_firstname'] = $obj->validator_firstname;
+                $tab_result[$i]['validator_lastname'] = $obj->validator_lastname;
+
                 $i++;
             }
 
diff --git a/htdocs/holiday/define_holiday.php b/htdocs/holiday/define_holiday.php
index e5b609e36d1c4a286b101cfc0f1b6580e412e286..e654dfe0117cab8e09387bbc6fb368425cbc3846 100644
--- a/htdocs/holiday/define_holiday.php
+++ b/htdocs/holiday/define_holiday.php
@@ -74,10 +74,10 @@ if ($action == 'update' && isset($_POST['update_cp']))
 
     // If it first update of sold, we set date to havoid to have sold incremented by new month
 	$now=dol_now();
-    $sql = "UPDATE ".MAIN_DB_PREFIX."holiday_config SET";
-    $sql.= " value = '".dol_print_date($now,'%Y%m%d%H%M%S')."'";
-    $sql.= " WHERE name = 'lastUpdate' and value IS NULL";	// Add value IS NULL to be sure to update only at init.
-    dol_syslog('define_holiday update lastUpdate entry sql='.$sql);
+    $sql = "UPDATE ".MAIN_DB_PREFIX."holiday_config SET";
+    $sql.= " value = '".dol_print_date($now,'%Y%m%d%H%M%S')."'";
+    $sql.= " WHERE name = 'lastUpdate' and value IS NULL";	// Add value IS NULL to be sure to update only at init.
+    dol_syslog('define_holiday update lastUpdate entry sql='.$sql);
     $result = $db->query($sql);    
 
     $mesg='<div class="ok">'.$langs->trans('UpdateConfCPOK').'</div>';
diff --git a/htdocs/holiday/index.php b/htdocs/holiday/index.php
index eb6d5dd5d7c791a7ce6c1825ce7dfa64e71debce..36f7afd87b197b5aa8a80bf3d99682babac194f9 100644
--- a/htdocs/holiday/index.php
+++ b/htdocs/holiday/index.php
@@ -30,11 +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';
+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');
+$langs->load('users');
+$langs->load('holidays');
 
 // Protection if external user
 if ($user->societe_id > 0) accessforbidden();
@@ -79,7 +79,7 @@ $search_statut   = GETPOST('select_statut');
 
 $holiday = new Holiday($db);
 $holidaystatic=new Holiday($db);
-$fuser = new User($db);
+$fuser = new User($db);
 
 // Update sold
 $holiday->updateSold();
@@ -165,12 +165,12 @@ 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);
+if ($id > 0)
+{
+	// Charge utilisateur edite
+	$fuser->fetch($id);
 	$fuser->getrights();
-	$user_id = $fuser->id;
+	$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 || $id > 0)
@@ -197,38 +197,38 @@ if ($holiday_payes == '-1')
  * Affichage du tableau des congés payés
 *************************************/
 
-$var=true; $num = count($holiday->holiday);
-$form = new Form($db);
-$formother = new FormOther($db);
+$var=true; $num = count($holiday->holiday);
+$form = new Form($db);
+$formother = new FormOther($db);
 
 if ($id > 0)
 {
-	$head = user_prepare_head($fuser);
-
-	$title = $langs->trans("User");
+	$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>';
-
-	// LastName
-	print '<tr><td width="25%" valign="top">'.$langs->trans("LastName").'</td>';
-	print '<td colspan="2">'.$fuser->lastname.'</td>';
-	print "</tr>\n";
-
-	// FirstName
-	print '<tr><td width="25%" valign="top">'.$langs->trans("FirstName").'</td>';
-	print '<td colspan="2">'.$fuser->firstname.'</td>';
-	print "</tr>\n";
-
-	print '</table><br>';
-
+	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>';
+
+	// LastName
+	print '<tr><td width="25%" valign="top">'.$langs->trans("LastName").'</td>';
+	print '<td colspan="2">'.$fuser->lastname.'</td>';
+	print "</tr>\n";
+
+	// FirstName
+	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
 {
diff --git a/htdocs/install/etape5.php b/htdocs/install/etape5.php
index 0ae7303bf38f8b93c1bf0cd059ed8a8172b1e4b7..08651603e61dee24b93508ec123d237a10eb001a 100644
--- a/htdocs/install/etape5.php
+++ b/htdocs/install/etape5.php
@@ -142,8 +142,8 @@ if ($action == "set" || empty($action) || preg_match('/upgrade/i',$action))
 
     $db=getDoliDBInstance($conf->db->type,$conf->db->host,$conf->db->user,$conf->db->pass,$conf->db->name,$conf->db->port);
 
-    // Create the global $hookmanager object
-    include_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php';
+    // Create the global $hookmanager object
+    include_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php';
     $hookmanager=new HookManager($db);
         
     $ok = 0;
diff --git a/htdocs/install/inc.php b/htdocs/install/inc.php
index ad9af68a6b9ecaa478ed043fd0051fbbd32c99c1..7d4a22fffa2b44fe9e541eb7da6fec74afecb6c4 100644
--- a/htdocs/install/inc.php
+++ b/htdocs/install/inc.php
@@ -314,25 +314,25 @@ function conf($dolibarr_main_document_root)
         //print 'SYSLOG_FILE='.SYSLOG_FILE;exit;
     }
     if (! defined('SYSLOG_FILE_NO_ERROR')) define('SYSLOG_FILE_NO_ERROR',1);
-    // We init log handler for install
-    $handlers = array('mod_syslog_file');
-    foreach ($handlers as $handler)
-    {
-    	$file = DOL_DOCUMENT_ROOT.'/core/modules/syslog/'.$handler.'.php';
-    	if (!file_exists($file))
-    	{
-    		throw new Exception('Missing log handler file '.$handler.'.php');
-    	}
-    
-    	require_once $file;
-    	$loghandlerinstance = new $handler();
-    	if (!$loghandlerinstance instanceof LogHandlerInterface)
-    	{
-    		throw new Exception('Log handler does not extend LogHandlerInterface');
-    	}
-
+    // We init log handler for install
+    $handlers = array('mod_syslog_file');
+    foreach ($handlers as $handler)
+    {
+    	$file = DOL_DOCUMENT_ROOT.'/core/modules/syslog/'.$handler.'.php';
+    	if (!file_exists($file))
+    	{
+    		throw new Exception('Missing log handler file '.$handler.'.php');
+    	}
+    
+    	require_once $file;
+    	$loghandlerinstance = new $handler();
+    	if (!$loghandlerinstance instanceof LogHandlerInterface)
+    	{
+    		throw new Exception('Log handler does not extend LogHandlerInterface');
+    	}
+
 		if (empty($conf->loghandlers[$handler])) $conf->loghandlers[$handler]=$loghandlerinstance;
-    }
+    }
     
     return 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 571ba7373a29a3a3f049edd32c9bf36e1e3f7aa0..5c2a86122eace828d8d20f260e83e9721a169f4b 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
@@ -48,6 +48,9 @@ alter table llx_contratdet add column buy_price_ht double(24,8) DEFAULT 0 after
 -- serialised array, to store value of select list choices for example
 alter table llx_extrafields add column param text after pos;
 
+-- numbering on supplier invoice
+alter table llx_facture_fourn add column ref varchar(30) NOT NULL after rowid;
+
 
 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;
@@ -206,5 +209,4 @@ ALTER TABLE llx_user ADD COLUMN   fk_state          integer        DEFAULT 0;
 ALTER TABLE llx_user ADD COLUMN   fk_country        integer        DEFAULT 0;
 
 
-
-
+ALTER TABLE llx_user_clicktodial ADD COLUMN url varchar(255);
diff --git a/htdocs/install/mysql/tables/llx_user_clicktodial.sql b/htdocs/install/mysql/tables/llx_user_clicktodial.sql
index da97b33057ba165030d8c56deb43451943d5e5f0..bdaf90e8ae9fdd4bf82d6721f9254cbf184e6062 100644
--- a/htdocs/install/mysql/tables/llx_user_clicktodial.sql
+++ b/htdocs/install/mysql/tables/llx_user_clicktodial.sql
@@ -22,6 +22,7 @@
 create table llx_user_clicktodial
 (
   fk_user       integer PRIMARY KEY,
+  url           varchar(255),
   login         varchar(32),
   pass          varchar(64),
   poste         varchar(20)
diff --git a/htdocs/install/upgrade.php b/htdocs/install/upgrade.php
index e04a3a94261037e41efdaba0603182fbc57ea285..811f41f64e8c36f25279e2431590677fc3d419de 100644
--- a/htdocs/install/upgrade.php
+++ b/htdocs/install/upgrade.php
@@ -374,30 +374,30 @@ if (! GETPOST("action") || preg_match('/upgrade/i',GETPOST('action')))
             // Run sql script
             $ok=run_sql($dir.$file, 0, '', 1);
 
-            // Scan if there is migration scripts for modules htdocs/module/sql or htdocs/custom/module/sql
-            $modulesfile = array();
-            foreach ($conf->file->dol_document_root as $type => $dirroot)
-            {
-            	$handlemodule=@opendir($dirroot);
-            	if (is_resource($handlemodule))
+            // Scan if there is migration scripts for modules htdocs/module/sql or htdocs/custom/module/sql
+            $modulesfile = array();
+            foreach ($conf->file->dol_document_root as $type => $dirroot)
+            {
+            	$handlemodule=@opendir($dirroot);
+            	if (is_resource($handlemodule))
             	{
-            		while (($filemodule = readdir($handlemodule))!==false)
-            		{
-            			if (is_dir($dirroot.'/'.$filemodule.'/sql'))
+            		while (($filemodule = readdir($handlemodule))!==false)
+            		{
+            			if (is_dir($dirroot.'/'.$filemodule.'/sql'))
             			{
-            				//print "Scan for ".$dirroot . '/' . $filemodule . '/sql/'.$file;
-            				if (is_file($dirroot . '/' . $filemodule . '/sql/'.$file))
-            				{
-            					$modulesfile[$dirroot . '/' . $filemodule . '/sql/'.$file] = '/' . $filemodule . '/sql/'.$file;
-            				}
-            			}
-            		}
-            		closedir($handlemodule);
-            	}
-            }
+            				//print "Scan for ".$dirroot . '/' . $filemodule . '/sql/'.$file;
+            				if (is_file($dirroot . '/' . $filemodule . '/sql/'.$file))
+            				{
+            					$modulesfile[$dirroot . '/' . $filemodule . '/sql/'.$file] = '/' . $filemodule . '/sql/'.$file;
+            				}
+            			}
+            		}
+            		closedir($handlemodule);
+            	}
+            }
 
             foreach ($modulesfile as $modulefilelong => $modulefileshort)
-            {
+            {
             	print '<tr><td colspan="2"><hr></td></tr>';
             	print '<tr><td nowrap>'.$langs->trans("ChoosedMigrateScript").' (external modules)</td><td align="right">'.$modulefileshort.'</td></tr>'."\n";
 
diff --git a/htdocs/langs/bg_BG/errors.lang b/htdocs/langs/bg_BG/errors.lang
index 83d491cae38450aa95d6d66b1c97425facf9fc46..9bf9742abdb3fc3ba8fc7ce01f459c4a8bbb91c9 100644
--- a/htdocs/langs/bg_BG/errors.lang
+++ b/htdocs/langs/bg_BG/errors.lang
@@ -115,7 +115,7 @@ ErrorFileMustBeADolibarrPackage=Файлове %s трябва да бъде ц
 ErrorFileRequired=Отнема файла пакет Dolibarr
 ErrorPhpCurlNotInstalled=PHP навийте не е инсталиран, това е от съществено значение, за да разговаря с Paypal
 ErrorFailedToAddToMailmanList=Неуспешно добавяне на запис на пощальона списък или база СПИП
-ErrorNewVaueCantMatchOldValue=Новата стойност не може да бъде равна на стария
+ErrorNewValueCantMatchOldValue=Новата стойност не може да бъде равна на стария
 WarningMandatorySetupNotComplete=Задължителни параметри на настройката все още не са определени
 WarningSafeModeOnCheckExecDir=Внимание, PHP опция <b>защитният режим</b> е включен, така че командата трябва да бъдат съхранени в директория, декларирани с параметър PHP <b>safe_mode_exec_dir.</b>
 WarningAllowUrlFopenMustBeOn=Параметър <b>allow_url_fopen</b> трябва да бъде поставен <b>в</b> Filer <b>php.ini</b> за това, че този модул да работи напълно. Трябва да промените този файл ръчно.
diff --git a/htdocs/langs/ca_ES/errors.lang b/htdocs/langs/ca_ES/errors.lang
index 8fd41caa1ab0a9a7e52aa6d67d78b7774b1b17f1..d6dce2cd433715a7cfc186eb79730576d1bc5108 100644
--- a/htdocs/langs/ca_ES/errors.lang
+++ b/htdocs/langs/ca_ES/errors.lang
@@ -116,7 +116,7 @@ ErrorFileMustBeADolibarrPackage=El fitxer %s ha de ser un paquet Dolibarr en for
 ErrorFileRequired=Es requereix un fitxer de paquet Dolibarr en format zip
 ErrorPhpCurlNotInstalled=L'extensió PHP CURL no es troba instal·lada, és indispensable per dialogar amb Paypal.
 ErrorFailedToAddToMailmanList=S'ha produït un error en intentar afegir un registre a la llista Mailman o base de dades SPIP
-ErrorNewVaueCantMatchOldValue=El Nou valor no pot ser igual al antic
+ErrorNewValueCantMatchOldValue=El Nou valor no pot ser igual al antic
 ErrorFailedToValidatePasswordReset=No s'ha pogut restablir la contrasenya. És possible que aquest enllaç ja s'hagi utilitzat (aquest enllaç només es pot utilitzar una vegada). Si no és el cas prova de reiniciar el procés de restabliment de contrasenya des del principi.
 
 # Warnings
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index 2a010d4733ba94bb26f8581779d3d897586e296e..ff28b59e08326592ad3762fe2abd7fc2bc20b1d0 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -360,6 +360,13 @@ 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)
+SMS=SMS
+LinkToTestClickToDial=Enter a phone number to call to show a link to test the ClickToDial url for user <strong>%s</strong>
+RefreshPhoneLink=Refresh link
+LinkToTest=Clickable link generated for user <strong>%s</strong> (click phone number to test)
+KeepEmptyToUseDefault=Keep empty to use default value
+DefaultLink=Default link
+ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url)
 
 # Modules
 Module0Name=Users & groups
diff --git a/htdocs/langs/en_US/errors.lang b/htdocs/langs/en_US/errors.lang
index a4c5251bb696dc47cb846d1c40493361eb8b1f46..184c6bcc325b757816ec052e36b1d31c07eece65 100644
--- a/htdocs/langs/en_US/errors.lang
+++ b/htdocs/langs/en_US/errors.lang
@@ -114,8 +114,9 @@ ErrNoZipEngine=No engine to unzip %s file in this PHP
 ErrorFileMustBeADolibarrPackage=The file %s must be a Dolibarr zip package
 ErrorFileRequired=It takes a package Dolibarr file
 ErrorPhpCurlNotInstalled=The PHP CURL is not installed, this is essential to talk with Paypal
-ErrorFailedToAddToMailmanList=Failed to add record to Mailman list or SPIP base
-ErrorNewVaueCantMatchOldValue=New value can't be equal to old one
+ErrorFailedToAddToMailmanList=Failed to add record %s to Mailman list %s or SPIP base
+ErrorFailedToRemoveToMailmanList=Failed to remove record %s to Mailman list %s or SPIP base
+ErrorNewValueCantMatchOldValue=New value can't be equal to old one
 ErrorFailedToValidatePasswordReset=Failed to reinit password. May be the reinit was already done (this link can be used only one time). If not, try to restart the reinit process.
 
 # Warnings
@@ -131,4 +132,5 @@ WarningNoDocumentModelActivated=No model, for document generation, has been acti
 WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole. 
 WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other setup).
 WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
-WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
\ No newline at end of file
+WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
+WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card). 
\ No newline at end of file
diff --git a/htdocs/langs/en_US/mailmanspip.lang b/htdocs/langs/en_US/mailmanspip.lang
index 18f1a684c7aea7f2c9a98ba6c8eda02945c539f6..50887cc082e39d8b536d283b97bcc75bd51b308d 100644
--- a/htdocs/langs/en_US/mailmanspip.lang
+++ b/htdocs/langs/en_US/mailmanspip.lang
@@ -23,4 +23,6 @@ AddIntoSpipError=Failed to add the user in SPIP
 DeleteIntoSpip=Remove from SPIP
 DeleteIntoSpipConfirmation=Are you sure you want to remove this member from SPIP?
 DeleteIntoSpipError=Failed to suppress the user from SPIP
-SPIPConnectionFailed=Failed to connect to SPIP
\ No newline at end of file
+SPIPConnectionFailed=Failed to connect to SPIP
+SuccessToAddToMailmanList=Add of %s to mailman list %s or SPIP database done
+SuccessToRemoveToMailmanList=Removal of %s from mailman list %s or SPIP database done
\ No newline at end of file
diff --git a/htdocs/langs/es_ES/errors.lang b/htdocs/langs/es_ES/errors.lang
index d3c39094ef371c3713c85452778bbec4613117db..5a5ce7639d6f6e760efcaec8ec69ab870a656f3c 100644
--- a/htdocs/langs/es_ES/errors.lang
+++ b/htdocs/langs/es_ES/errors.lang
@@ -116,7 +116,7 @@ ErrorFileMustBeADolibarrPackage=El archivo %s debe ser un paquete Dolibarr en fo
 ErrorFileRequired=Se requiere un archivo de paquete Dolibarr en formato zip
 ErrorPhpCurlNotInstalled=La extensión PHP CURL no se encuentra instalada, es indispensable para dialogar con Paypal.
 ErrorFailedToAddToMailmanList=Ha ocurrido un error al intentar añadir un registro a la lista Mailman o base de datos SPIP
-ErrorNewVaueCantMatchOldValue=El nuevo valor no puede ser igual al antiguo
+ErrorNewValueCantMatchOldValue=El nuevo valor no puede ser igual al antiguo
 ErrorFailedToValidatePasswordReset=No se ha podido restablecer la contraseña. Es posible que este enlace ya se haya utilizado (este enlace sólo puede usarse una vez). Si no es el caso, trate de reiniciar el proceso de restablecimiento de contraseña desde el principio.
 
 # Warnings
diff --git a/htdocs/langs/es_MX/banks.lang b/htdocs/langs/es_MX/banks.lang
new file mode 100644
index 0000000000000000000000000000000000000000..58ef3a65d00c945e7044d953986d4f4df5c67bf3
--- /dev/null
+++ b/htdocs/langs/es_MX/banks.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - es_MX - banks
+CHARSET=UTF-8
+BankAccountDomiciliation=Tarjeta
\ No newline at end of file
diff --git a/htdocs/langs/es_MX/bills.lang b/htdocs/langs/es_MX/bills.lang
index 4afc7e178f8db2507caa93befe8a6491b1d56f2e..ef60be419219a947510115c3a06ed9243687a667 100644
--- a/htdocs/langs/es_MX/bills.lang
+++ b/htdocs/langs/es_MX/bills.lang
@@ -1,23 +1,28 @@
-# Dolibarr language file - es_MX - bills
-CHARSET=UTF-8
-InvoiceAvoir=Nota de crédito
-InvoiceAvoirAsk=Nota de crédito para corregir la factura
-InvoiceAvoirDesc=La <b>nota de crédito</b> es una factura negativa destinada a compensar un importe de factura que difiere del importe realmente pagado (por haber pagado de más o por devolución de productos, por ejemplo).
-InvoiceHasAvoir=Corregida por una o más notas de crédito
-ConfirmConvertToReduc=¿Quiere convertir esta nota de crédito en una reducción futura?<br>El importe de esta nota de crédito se almacenará para este cliente. Podrá utilizarse para reducir el importe de una próxima factura del cliente.
-AddBill=Crear factura o nota de crédito
-EnterPaymentDueToCustomer=Realizar pago de notas de crédito al cliente
-ErrorInvoiceAvoirMustBeNegative=Error, una factura de tipo nota de crédito debe tener un importe negativo
-ConfirmClassifyPaidPartiallyReasonAvoir=El resto a pagar <b>(%s %s)</b> se ha regularizado (ya que artículo se ha devuelto, olvidado entregar, descuento no definido...)  mediante una nota de crédito
-ConfirmClassifyPaidPartiallyReasonOtherDesc=Esta elección será posible, por ejemplo, en los casos siguiente:<br>-pago parcial ya que una partida de productos se ha devuleto.<br>- reclamado por no entregar productos de la factura <br>En todos los casos, la reclamación debe regularizarse mediante una nota de crédito
-ShowInvoiceAvoir=Ver nota de crédito
-AlreadyPaidNoCreditNotesNoDeposits=Ya pagado (excluidos las notas de crédito y anticipos)
-ShowDiscount=Ver la nota de crédito
-CreditNote=Nota de crédito
-CreditNotes=Notas de crédito
-DiscountFromCreditNote=Descuento resultante de la nota de crédito %s
-AbsoluteDiscountUse=Este tipo de crédito no puede ser utilizado en una factura antes de su validación
-CreditNoteDepositUse=La factura debe de estar validada para poder utilizar este tipo de créditos
-CreditNoteConvertedIntoDiscount=Esta nota de crédito se convirtió en %s
-TerreNumRefModelDesc1=Devuelve el número bajo el formato %syymm-nnnn para las facturas y %syymm-nnnn para las notas de crédito donde yy es el año, mm. el mes y nnnn un contador secuencial sin ruptura y sin permanencia a 0
-AddCreditNote=Crear nota de crédito
\ No newline at end of file
+# Dolibarr language file - es_MX - bills
+CHARSET=UTF-8
+InvoiceAvoir=Nota de crédito
+InvoiceAvoirAsk=Nota de crédito para corregir la factura
+InvoiceAvoirDesc=La <b>nota de crédito</b> es una factura negativa destinada a compensar un importe de factura que difiere del importe realmente pagado (por haber pagado de más o por devolución de productos, por ejemplo).
+InvoiceHasAvoir=Corregida por una o más notas de crédito
+ConfirmConvertToReduc=¿Quiere convertir esta nota de crédito en una reducción futura?<br>El importe de esta nota de crédito se almacenará para este cliente. Podrá utilizarse para reducir el importe de una próxima factura del cliente.
+AddBill=Crear factura o nota de crédito
+EnterPaymentDueToCustomer=Realizar pago de notas de crédito al cliente
+ErrorInvoiceAvoirMustBeNegative=Error, una factura de tipo nota de crédito debe tener un importe negativo
+ConfirmClassifyPaidPartiallyReasonAvoir=El resto a pagar <b>(%s %s)</b> se ha regularizado (ya que artículo se ha devuelto, olvidado entregar, descuento no definido...)  mediante una nota de crédito
+ConfirmClassifyPaidPartiallyReasonOtherDesc=Esta elección será posible, por ejemplo, en los casos siguiente:<br>-pago parcial ya que una partida de productos se ha devuleto.<br>- reclamado por no entregar productos de la factura <br>En todos los casos, la reclamación debe regularizarse mediante una nota de crédito
+ShowInvoiceAvoir=Ver nota de crédito
+AlreadyPaidNoCreditNotesNoDeposits=Ya pagado (excluidos las notas de crédito y anticipos)
+ShowDiscount=Ver la nota de crédito
+CreditNote=Nota de crédito
+CreditNotes=Notas de crédito
+DiscountFromCreditNote=Descuento resultante de la nota de crédito %s
+AbsoluteDiscountUse=Este tipo de crédito no puede ser utilizado en una factura antes de su validación
+CreditNoteDepositUse=La factura debe de estar validada para poder utilizar este tipo de créditos
+CreditNoteConvertedIntoDiscount=Esta nota de crédito se convirtió en %s
+TerreNumRefModelDesc1=Devuelve el número bajo el formato %syymm-nnnn para las facturas y %syymm-nnnn para las notas de crédito donde yy es el año, mm. el mes y nnnn un contador secuencial sin ruptura y sin permanencia a 0
+AddCreditNote=Crear nota de crédito
+BillTo=Receptor
+Residence=Tarjeta
+IBANNumber=CLABE Interbancaria
+BICNumber=Sucursal
+PaymentByTransferOnThisBankAccount=Cuenta para depositos y transferencias
\ No newline at end of file
diff --git a/htdocs/langs/es_MX/categories.lang b/htdocs/langs/es_MX/categories.lang
new file mode 100644
index 0000000000000000000000000000000000000000..8904c443bcfd7a5a4a8c8c99fe1af36fc36bc30d
--- /dev/null
+++ b/htdocs/langs/es_MX/categories.lang
@@ -0,0 +1,3 @@
+# Dolibarr language file - es_MX - categories
+CHARSET=UTF-8
+NotCategorized=Sin Categoría
\ No newline at end of file
diff --git a/htdocs/langs/es_MX/companies.lang b/htdocs/langs/es_MX/companies.lang
index bef45bb79b801083138e2ebffd43148fff399111..99dd8ca98960ce3850a216dccbe0a3630e1f56fb 100644
--- a/htdocs/langs/es_MX/companies.lang
+++ b/htdocs/langs/es_MX/companies.lang
@@ -1,3 +1,5 @@
-# Dolibarr language file - es_MX - companies
-CHARSET=UTF-8
-CompanyHasCreditNote=Este cliente tiene <b>%s %s</b> notas de crédito/anticipos disponibles
+# Dolibarr language file - es_MX - companies
+CHARSET=UTF-8
+State=Estado
+Town=Municipio
+CompanyHasCreditNote=Este cliente tiene <b>%s %s</b> notas de crédito/anticipos disponibles
\ No newline at end of file
diff --git a/htdocs/langs/es_MX/main.lang b/htdocs/langs/es_MX/main.lang
new file mode 100644
index 0000000000000000000000000000000000000000..323ec95b1e38fd96056274b0b251d34f84257570
--- /dev/null
+++ b/htdocs/langs/es_MX/main.lang
@@ -0,0 +1,7 @@
+# Dolibarr language file - es_MX - main 
+CHARSET=UTF-8
+SeparatorDecimal=.
+SeparatorThousand=,
+AmountHT=Subtotal
+TotalHT=Subtotal
+TotalVAT=IVA
\ No newline at end of file
diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang
index e688d9eab8c352b17fa249b60cb8ed8239e49d06..8b56650b43bc719522e0cfa7417d78c52306b951 100644
--- a/htdocs/langs/fr_FR/admin.lang
+++ b/htdocs/langs/fr_FR/admin.lang
@@ -359,6 +359,13 @@ 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)
 SuhosinSessionEncrypt=Stockage des sessions encryptés par Suhosin
+SMS=SMS
+LinkToTestClickToDial=Entrez un numéro de téléphone à appeler pour tester le lien d'appel ClickToDial pour l'utilisateur <strong>%s</strong>
+RefreshPhoneLink=Rafraichir lien
+LinkToTest=Lien clicable généré pour l'utilisateur <strong>%s</strong> (cliquer le numéro pour tester)
+KeepEmptyToUseDefault=Laisser ce champ vide pour utiliser la valeure par défaut
+DefaultLink=Lien par défaut
+ValueOverwrittenByUserSetup=Attention, cette valeur peut être écrasée par une valeur spécifique à la configuration de l'utilisateur (chaque utilisateur pouvant avoir sa propre url clicktodial)
 
 # Modules= undefined
 Module0Name= Utilisateurs & groupes
diff --git a/htdocs/langs/fr_FR/errors.lang b/htdocs/langs/fr_FR/errors.lang
index 3c7d1e275ed343e6aeb8ce944ba96c89981ea10f..576d9d4bcb623cb88e3fc8eb7b18c1203e059c64 100644
--- a/htdocs/langs/fr_FR/errors.lang
+++ b/htdocs/langs/fr_FR/errors.lang
@@ -115,8 +115,9 @@ ErrNoZipEngine=Pas de moteur pour décompresser le fichier %s dans ce PHP
 ErrorFileMustBeADolibarrPackage=Le fichier doit être un package Dolibarr
 ErrorFileRequired=Il faut un fichier de package Dolibarr
 ErrorPhpCurlNotInstalled=L'extension PHP CURL n'est pas installée, ceci est indispensable pour dialoguer avec Paypal.
-ErrorFailedToAddToMailmanList=Echec de l'ajout à une liste Mailman ou base SPIP
-ErrorNewVaueCantMatchOldValue=La nouvelle valeur ne peut être égale à l'ancienne
+ErrorFailedToAddToMailmanList=Echec de l'ajout de %s à la liste Mailman %s ou base SPIP
+ErrorFailedToRemoveToMailmanList=Echec de la suppression de %s de la liste Mailman %s ou base SPIP
+ErrorNewValueCantMatchOldValue=La nouvelle valeur ne peut être égale à l'ancienne
 ErrorFailedToValidatePasswordReset=Echec de la réinitialisation du mot de passe. Il est possible que ce lien ait déjà été utilisé (l'utilisation de ce lien ne fonctionne qu'une fois). Si ce n'est pas le cas, essayer de recommencer le processus de réinit de mot de passe depuis le début.
 
 # Warnings
@@ -132,4 +133,5 @@ WarningNoDocumentModelActivated=Aucun modèle, pour la génération de document,
 WarningLockFileDoesNotExists=Attention, une fois l'installation terminée, les outils d'installation/migration doivent être désactivés en ajoutant un fichier <b>install.lock</b> dans le répertoire <b>%s</b>. L'absence de ce fichier représente une faille de sécurité. 
 WarningUntilDirRemoved=Les alertes de sécurité sont visibles par les administrateurs uniquement et resteront actives tant que la vulnérabilité sera avérée (ou que la constante MAIN_REMOVE_INSTALL_WARNING aura été définie dans Configuration->Divers)
 WarningCloseAlways=Attention, la fermeture se fait même lorsque le montant diffère. N'activez cette fonctionnalité qu'en connaissance de cause.
-WarningUsingThisBoxSlowDown=Attention, l'utilisation de cette boite provoque de sérieux ralentissement des pages affichant cette boite.
\ No newline at end of file
+WarningUsingThisBoxSlowDown=Attention, l'utilisation de cette boite provoque de sérieux ralentissement des pages affichant cette boite.
+WarningClickToDialUserSetupNotComplete=La configuration ClickToDial pour votre compte utilisateur n'est pas complète (voir l'onglet ClickToDial sur votre fiche utilisateur)
\ No newline at end of file
diff --git a/htdocs/langs/fr_FR/mailmanspip.lang b/htdocs/langs/fr_FR/mailmanspip.lang
index ac88688a3bd3b50b7882a2054fd7b74e3aadb249..3f27ae0d9c916ab72b00e1055d3bc51624d1c1df 100644
--- a/htdocs/langs/fr_FR/mailmanspip.lang
+++ b/htdocs/langs/fr_FR/mailmanspip.lang
@@ -23,3 +23,6 @@ DeleteIntoSpip=Supprimer de spip
 DeleteIntoSpipConfirmation=Êtes-vous sur de vouloir effacer cet adhérent de SPIP?
 DeleteIntoSpipError=Échec de la suppression de l'utilisateur de SPIP
 SPIPConnectionFailed=Échec de connexion à SPIP
+SuccessToAddToMailmanList=Ajout de %s à la liste Mailman %s ou base SPIP réalisé
+SuccessToRemoveToMailmanList=Suppression de %s de la liste Mailman %s ou base SPIP réalisé
+
diff --git a/htdocs/langs/pt_PT/admin.lang b/htdocs/langs/pt_PT/admin.lang
index a3de0cb68dd9839b0d92799e5882fc5d76253d24..a1af76ae0c1c28647f6daf50f95dde93f0605793 100644
--- a/htdocs/langs/pt_PT/admin.lang
+++ b/htdocs/langs/pt_PT/admin.lang
@@ -1,5 +1,5 @@
 # Dolibarr language file - pt_PT - admin 
-CHARSET	=	UTF-8
+CHARSET	=	UTF-8
 AccountCodeManager	=	Módulo de geração dos códigos contabilisticos (Clientes/Fornecedores)
 ActivateFCKeditor	=	Activar FCKeditor para :
 ActivateOn	=	Activar sobre
diff --git a/htdocs/langs/zh_CN/main.lang b/htdocs/langs/zh_CN/main.lang
index 31e8e03a2c5dc6956d3f052ce51f1bb90f78eff5..04235a1bd69e7ab9854d7591e6d2677d56d626e2 100644
--- a/htdocs/langs/zh_CN/main.lang
+++ b/htdocs/langs/zh_CN/main.lang
@@ -1,5 +1,5 @@
 /*
- * Language code: zh_CN
+ * Language code: zh_CN (simplified)
  * Automatic generated via autotranslator.php tool
  * Generation date 2010-06-09 00:39:24
  */
diff --git a/htdocs/langs/zh_TW/main.lang b/htdocs/langs/zh_TW/main.lang
index 5712e8e5c0398c84c0fa7a3ec6d05f6515295077..b853fbb6073e670a52f2a600f621109f6c1444de 100644
--- a/htdocs/langs/zh_TW/main.lang
+++ b/htdocs/langs/zh_TW/main.lang
@@ -1,13 +1,14 @@
 /*
- * Language code: zh_TW
+ * Language code: zh_TW (traditionnal)
  * Generation date 2012-09-04 16:02:00
  */
 
 // Reference language: en_US
 CHARSET=UTF-8
 DIRECTION=ltr
-#FONTFORPDF=chinese
-FONTFORPDF=stsongstdlight
+# msungstdlight or cid0ct are for traditionnal chinese (traditionnal does not render with ubuntu pdf reader) 
+# stsongstdlight or cid0cs are for simplified chinese
+FONTFORPDF=msungstdlight
 #FONTSIZEFORPDF=9
 SeparatorDecimal=.
 SeparatorThousand=None
diff --git a/htdocs/mailmanspip/class/mailmanspip.class.php b/htdocs/mailmanspip/class/mailmanspip.class.php
index 9e10c315dfa997b03b4a0c92d244add132b6dcfe..5a015ba1c64f84f2a7b425a2c9b12fe1ce8a5323 100644
--- a/htdocs/mailmanspip/class/mailmanspip.class.php
+++ b/htdocs/mailmanspip/class/mailmanspip.class.php
@@ -40,6 +40,11 @@ class MailmanSpip
     var $db;
     var $error;
 
+    var $mladded_ok;
+    var $mladded_ko;
+    var $mlremoved_ok;
+    var $mlremoved_ko;
+
 
     /**
 	 *	Constructor
@@ -299,6 +304,9 @@ class MailmanSpip
 
         dol_syslog(get_class($this)."::add_to_mailman");
 
+        $this->mladded_ok=array();
+        $this->mladded_ko=array();
+
         if (! function_exists("curl_init"))
         {
             $langs->load("errors");
@@ -335,13 +343,15 @@ class MailmanSpip
 
 				if ($result === false)
 				{
+					$this->mladded_ko[$list]=$object->email;
 				    return -2;
 				}
+				else $this->mladded_ok[$list]=$object->email;
             }
             return count($lists);
         }
         else
-        {
+       {
             $this->error="ADHERENT_MAILMAN_URL not defined";
             return -1;
         }
@@ -359,6 +369,18 @@ class MailmanSpip
     {
         global $conf,$langs,$user;
 
+        dol_syslog(get_class($this)."::del_to_mailman");
+
+        $this->mlremoved_ok=array();
+        $this->mlremoved_ko=array();
+
+        if (! function_exists("curl_init"))
+        {
+            $langs->load("errors");
+            $this->error=$langs->trans("ErrorFunctionNotAvailableInPHP","curl_init");
+            return -1;
+        }
+
         if (! empty($conf->global->ADHERENT_MAILMAN_UNSUB_URL))
         {
             if ($listes=='' && ! empty($conf->global->ADHERENT_MAILMAN_LISTS))
@@ -388,8 +410,10 @@ class MailmanSpip
 
 				if ($result === false)
 				{
+					$this->mlremoved_ko[$list]=$object->email;
 				    return -2;
 				}
+				else $this->mlremoved_ok[$list]=$object->email;
             }
             return count($lists);
         }
diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php
index 88efcfd76b52496593cf9ee94891b7084e7ea320..3f3695c7d278142e59798572209348bdc5ac0a92 100644
--- a/htdocs/main.inc.php
+++ b/htdocs/main.inc.php
@@ -139,7 +139,7 @@ function analyse_sql_and_script(&$var, $type)
 
 
 // Check consitency of NOREQUIREXXX DEFINES
-if ((defined('NOREQUIREDB') || defined('NOREQUIRETRAN')) && ! defined('NOREQUIREMENU')) dol_print_error('','If define NOREQUIREDB or NOREQUIRETRAN are set, you must also set NOREQUIREMENU or not use them');
+if ((defined('NOREQUIREDB') || defined('NOREQUIRETRAN')) && ! defined('NOREQUIREMENU')) dol_print_error('','If define NOREQUIREDB or NOREQUIRETRAN are set, you must also set NOREQUIREMENU or not use them');
 
 // Sanity check on URL
 if (! empty($_SERVER["PHP_SELF"]))
@@ -761,7 +761,7 @@ else
 $heightforframes=52;
 
 // Switch to another entity
-// TODO Multicompany Remove this
+// TODO Multicompany Remove this
 if (! empty($conf->multicompany->enabled) && GETPOST('action') == 'switchentity')
 {
     if ($mc->switchEntity(GETPOST('entity','int')) > 0)
@@ -1516,6 +1516,19 @@ function left_menu($menu_array_before, $helppagename='', $moresearchform='', $me
 	        print "<!-- End Bookmarks -->\n";
 	    }
 
+	    //Dolibarr version
+	    $doliurl='http://www.dolibarr.org';
+	    $appli='Dolibarr';
+	    if (! empty($conf->global->MAIN_APPLICATION_TITLE)) {
+	    	$appli=$conf->global->MAIN_APPLICATION_TITLE; $doliurl='';
+	    }
+	    $appli.=" ".DOL_VERSION;
+	    print '<div id="blockvmenuhelp" class="blockvmenuhelp">';
+	    if ($doliurl) print '<a class="help" target="_blank" href="'.$doliurl.'">';
+	    print $appli;
+	    if ($doliurlx) print '</a>';
+	    print '</div>';
+
 	    // Link to Dolibarr wiki pages
 	    if ($helppagename && empty($conf->global->MAIN_HELP_DISABLELINK))
 	    {
@@ -1566,18 +1579,6 @@ function left_menu($menu_array_before, $helppagename='', $moresearchform='', $me
 	    }
 	    print "\n";
 
-	    //Dolibarr version
-	    $doliurl='http://www.dolibarr.org';
-	    $appli='Dolibarr';
-	    if (! empty($conf->global->MAIN_APPLICATION_TITLE)) { $appli=$conf->global->MAIN_APPLICATION_TITLE; $doliurl=''; }
-	    $appli.=" ".DOL_VERSION;
-
-	    print '<div id="blockvmenuhelp" class="blockvmenuhelp">';
-	    if ($doliurl) print '<a class="help" target="_blank" href="'.$doliurl.'">';
-	    print $appli;
-	    if ($doliurlx) print '</a>';
-	    print '</div>';
-
 	    print "</div>\n";
 	    print "<!-- End left menu -->\n";
 
diff --git a/htdocs/master.inc.php b/htdocs/master.inc.php
index 36f85c9524ee36a25f2463772ecc0d8416bddd0a..7212ea38f5bbb907ebf3506097d920b699752045 100644
--- a/htdocs/master.inc.php
+++ b/htdocs/master.inc.php
@@ -76,7 +76,7 @@ if (! empty($dolibarr_main_document_root_alt))
 }
 
 // Set properties specific to multicompany
-// TODO Multicompany Remove this. Useless. Var should be read when required.
+// TODO Multicompany Remove this. Useless. Var should be read when required.
 $conf->multicompany->transverse_mode = empty($multicompany_transverse_mode)?'':$multicompany_transverse_mode;		// Force Multi-Company transverse mode
 $conf->multicompany->force_entity = empty($multicompany_force_entity)?'':(int) $multicompany_force_entity;			// Force entity in login page
 
@@ -143,7 +143,7 @@ if (! defined('NOREQUIREDB'))
 	{
 		$conf->entity = DOLENTITY;
 	}
-	// TODO Multicompany Remove this.
+	// TODO Multicompany Remove this.
 	else if (! empty($conf->multicompany->force_entity) && is_int($conf->multicompany->force_entity)) // To force entity in login page
 	{
 		$conf->entity = $conf->multicompany->force_entity;
diff --git a/htdocs/product/admin/product_tools.php b/htdocs/product/admin/product_tools.php
index d99ad64253dd8ff31900af5fcfacaf76d166dc85..3c17429e9c98c36abf2363d70919515673423884 100644
--- a/htdocs/product/admin/product_tools.php
+++ b/htdocs/product/admin/product_tools.php
@@ -54,7 +54,7 @@ if ($action == 'convert')
 	if ($oldvatrate == $newvatrate)
 	{
 		$langs->load("errors");
-		setEventMessage($langs->trans("ErrorNewVaueCantMatchOldValue"),'errors');
+		setEventMessage($langs->trans("ErrorNewValueCantMatchOldValue"),'errors');
 		$error++;
 	}
 
diff --git a/htdocs/product/index.php b/htdocs/product/index.php
index f0ab56ae6f0ba769185848732a93f03b60a593fb..e973516f5f9550e11274e4cf27986517c222c75a 100644
--- a/htdocs/product/index.php
+++ b/htdocs/product/index.php
@@ -69,7 +69,7 @@ print_fiche_titre($transAreaType);
 
 //print '<table border="0" width="100%" class="notopnoleftnoright">';
 //print '<tr><td valign="top" width="30%" class="notopnoleft">';
-print '<div class="fichecenter"><div class="fichethirdleft">';
+print '<div class="fichecenter"><div class="fichethirdleft">';
 
 
 /*
@@ -160,7 +160,7 @@ print '</table>';
 
 
 //print '</td><td valign="top" width="70%" class="notopnoleftnoright">';
-print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
+print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
 
 
 /*
@@ -259,7 +259,7 @@ else
 }
 
 //print '</td></tr></table>';
-print '<div></div></div>';
+print '</div></div></div>';
 
 llxFooter();
 
diff --git a/htdocs/product/stock/index.php b/htdocs/product/stock/index.php
index d544175b2fd83ea71f4a1ea98d920c3bf6c3acc3..a25e1e4357de860eee147bf17255b746c0eb169b 100644
--- a/htdocs/product/stock/index.php
+++ b/htdocs/product/stock/index.php
@@ -45,7 +45,7 @@ print_fiche_titre($langs->trans("StocksArea"));
 
 //print '<table border="0" width="100%" class="notopnoleftnoright">';
 //print '<tr><td valign="top" width="30%" class="notopnoleft">';
-print '<div class="fichecenter"><div class="fichethirdleft">';
+print '<div class="fichecenter"><div class="fichethirdleft">';
 
 
 /*
@@ -106,7 +106,7 @@ else
 
 
 //print '</td><td valign="top" width="70%" class="notopnoleftnoright">';
-print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
+print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
 
 
 // Last movements
@@ -164,7 +164,7 @@ if ($resql)
 }
 
 //print '</td></tr></table>';
-print '<div></div></div>';
+print '</div></div></div>';
 
 llxFooter();
 
diff --git a/htdocs/public/paybox/paymentko.php b/htdocs/public/paybox/paymentko.php
index 0b6635fa3903eabd813262511a3957e98fbb38fc..5afeab8d6394e0ec21d354e3c2747088572f3288 100644
--- a/htdocs/public/paybox/paymentko.php
+++ b/htdocs/public/paybox/paymentko.php
@@ -58,9 +58,9 @@ $langs->load("paypal");
 
 dol_syslog("Callback url when a PayBox payment was canceled. query_string=".(empty($_SERVER["QUERY_STRING"])?'':$_SERVER["QUERY_STRING"])." script_uri=".(empty($_SERVER["SCRIPT_URI"])?'':$_SERVER["SCRIPT_URI"]), LOG_DEBUG, 0, '_paybox');
 
-$tracepost = "";
-foreach($_POST as $k => $v) $tracepost .= "{$k} - {$v}\n";
-dol_syslog("POST=".$tracepost, LOG_DEBUG, 0, '_paybox');
+$tracepost = "";
+foreach($_POST as $k => $v) $tracepost .= "{$k} - {$v}\n";
+dol_syslog("POST=".$tracepost, LOG_DEBUG, 0, '_paybox');
 
 llxHeaderPayBox($langs->trans("PaymentForm"));
 
diff --git a/htdocs/public/paybox/paymentok.php b/htdocs/public/paybox/paymentok.php
index d46ae4f33a71b2112c03e5a3aaf3ea98d1737159..5553956ce8234bb5b7ff887ee5987bd7fa64a122 100644
--- a/htdocs/public/paybox/paymentok.php
+++ b/htdocs/public/paybox/paymentok.php
@@ -57,9 +57,9 @@ $langs->load("paypal");
 
 dol_syslog("Callback url when a PayBox payment was done. query_string=".(empty($_SERVER["QUERY_STRING"])?'':$_SERVER["QUERY_STRING"])." script_uri=".(empty($_SERVER["SCRIPT_URI"])?'':$_SERVER["SCRIPT_URI"]), LOG_DEBUG, 0, '_paybox');
 
-$tracepost = "";
-foreach($_POST as $k => $v) $tracepost .= "{$k} - {$v}\n";
-dol_syslog("POST=".$tracepost, LOG_DEBUG, 0, '_paybox');
+$tracepost = "";
+foreach($_POST as $k => $v) $tracepost .= "{$k} - {$v}\n";
+dol_syslog("POST=".$tracepost, LOG_DEBUG, 0, '_paybox');
 
 llxHeaderPayBox($langs->trans("PaymentForm"));
 
diff --git a/htdocs/public/paypal/paymentko.php b/htdocs/public/paypal/paymentko.php
index 610e68c93e399fa8fc0f81573e52331ffe0b8b53..13c4718c361a10dc6bb3c8671f206130f5b7023b 100755
--- a/htdocs/public/paypal/paymentko.php
+++ b/htdocs/public/paypal/paymentko.php
@@ -66,9 +66,9 @@ $langs->load("paypal");
 
 dol_syslog("Callback url when a PayPal payment was canceled. query_string=".(empty($_SERVER["QUERY_STRING"])?'':$_SERVER["QUERY_STRING"])." script_uri=".(empty($_SERVER["SCRIPT_URI"])?'':$_SERVER["SCRIPT_URI"]), LOG_DEBUG, 0, '_paypal');
 
-$tracepost = "";
-foreach($_POST as $k => $v) $tracepost .= "{$k} - {$v}\n";
-dol_syslog("POST=".$tracepost, LOG_DEBUG, 0, '_paypal');
+$tracepost = "";
+foreach($_POST as $k => $v) $tracepost .= "{$k} - {$v}\n";
+dol_syslog("POST=".$tracepost, LOG_DEBUG, 0, '_paypal');
 
 
 llxHeaderPaypal($langs->trans("PaymentForm"));
diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php
index ecf387e13c2d97f5cfef2488dd76c29a63898d4e..37b81403acd21c3cea9f2672b9a838307a258b76 100644
--- a/htdocs/societe/class/societe.class.php
+++ b/htdocs/societe/class/societe.class.php
@@ -82,9 +82,9 @@ class Societe extends CommonObject
     var $idprof1;	// IdProf1 (Ex: Siren in France)
     var $idprof2;	// IdProf2 (Ex: Siret in France)
     var $idprof3;	// IdProf3 (Ex: Ape in France)
-    var $idprof4;	// IdProf4 (Ex: RCS in France)
-    var $idprof5;	// IdProf5
-    var $idprof6;	// IdProf6
+    var $idprof4;	// IdProf4 (Ex: RCS in France)
+    var $idprof5;	// IdProf5
+    var $idprof6;	// IdProf6
 
     var $prefix_comm;
 
diff --git a/htdocs/societe/consumption.php b/htdocs/societe/consumption.php
index 4f61d24a4aa069812ee7c5783826ad53f80c79b5..0edb82916772a00098d451e5f44eb06c21ff43e7 100644
--- a/htdocs/societe/consumption.php
+++ b/htdocs/societe/consumption.php
@@ -70,9 +70,9 @@ if (GETPOST("button_removefilter"))
 $thirdTypeSelect = GETPOST("third_select_id");
 $type_element = GETPOST('type_element')?GETPOST('type_element'):'invoice';
 
-$langs->load("bills");
-$langs->load("orders");
-$langs->load("suppliers");
+$langs->load("bills");
+$langs->load("orders");
+$langs->load("suppliers");
 
 
 /*
@@ -87,7 +87,7 @@ $langs->load("suppliers");
 
 $form = new Form($db);
 $formother = new FormOther($db);
-$productstatic=new Product($db);
+$productstatic=new Product($db);
 
 $titre = $langs->trans("Referer",$object->name);
 llxHeader('',$titre,'');
@@ -174,7 +174,7 @@ if ($type_element == 'order')
 {
 	// TODO
 
-}
+}
 if ($type_element == 'supplier_order')
 { // Supplier : Show products from orders.
 $documentstatic=new CommandeFournisseur($db);
@@ -217,13 +217,13 @@ $sql.= $db->order($sortfield,$sortorder);
 $sql.= $db->plimit($limit + 1, $offset);
 
 
-// Define type of elements
-$typeElementString = $form->selectarray("type_element",$elementTypeArray,GETPOST('type_element'));
-$button = '<input type="submit" class="button" name="button_third" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">';
-$param="&amp;sref=".$sref."&amp;month=".$month."&amp;year=".$year."&amp;sprod_fulldescr=".$sprod_fulldescr."&amp;socid=".$socid;
-
-print_barre_liste($langs->trans('ProductsIntoElements', $typeElementString.' '.$button), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder,'',$num, '', '');
-
+// Define type of elements
+$typeElementString = $form->selectarray("type_element",$elementTypeArray,GETPOST('type_element'));
+$button = '<input type="submit" class="button" name="button_third" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">';
+$param="&amp;sref=".$sref."&amp;month=".$month."&amp;year=".$year."&amp;sprod_fulldescr=".$sprod_fulldescr."&amp;socid=".$socid;
+
+print_barre_liste($langs->trans('ProductsIntoElements', $typeElementString.' '.$button), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder,'',$num, '', '');
+
 if ($sql_select)
 {
 	dol_syslog("sql=".$sql);
@@ -276,115 +276,115 @@ if ($sql_select)
 		print '<td>';
 
 		// Define text, description and type
-		$text=''; $description=''; $type=0;
-
-		// Code to show product duplicated from commonobject->printObjectLine
-		if ($objp->fk_product > 0)
-		{
-			$product_static = new Product($db);
-
-			$product_static->type=$objp->fk_product_type;
-			$product_static->id=$objp->fk_product;
-			$product_static->ref=$objp->ref;
-			$text=$product_static->getNomUrl(1);
+		$text=''; $description=''; $type=0;
+
+		// Code to show product duplicated from commonobject->printObjectLine
+		if ($objp->fk_product > 0)
+		{
+			$product_static = new Product($db);
+
+			$product_static->type=$objp->fk_product_type;
+			$product_static->id=$objp->fk_product;
+			$product_static->ref=$objp->ref;
+			$text=$product_static->getNomUrl(1);
 		}
 
-		// Product
-		if ($objp->fk_product > 0)
-		{
-			// Define output language
-			if (! empty($conf->global->MAIN_MULTILANGS) && ! empty($conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE))
-			{
-				$this->fetch_thirdparty();
-				$prod = new Product($db);
-				$prod->fetch($objp->fk_product);
-
-				$outputlangs = $langs;
-				$newlang='';
-				if (empty($newlang) && GETPOST('lang_id')) $newlang=GETPOST('lang_id');
-				if (empty($newlang)) $newlang=$this->client->default_lang;
-				if (! empty($newlang))
-				{
-					$outputlangs = new Translate("",$conf);
-					$outputlangs->setDefaultLang($newlang);
-				}
-
-				$label = (! empty($prod->multilangs[$outputlangs->defaultlang]["label"])) ? $prod->multilangs[$outputlangs->defaultlang]["label"] : $objp->product_label;
-			}
-			else
-			{
-				$label = $objp->product_label;
-			}
-
-			$text.= ' - '.(! empty($objp->label)?$objp->label:$label);
-			$description=(! empty($conf->global->PRODUIT_DESC_IN_FORM)?'':dol_htmlentitiesbr($objp->description));
+		// Product
+		if ($objp->fk_product > 0)
+		{
+			// Define output language
+			if (! empty($conf->global->MAIN_MULTILANGS) && ! empty($conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE))
+			{
+				$this->fetch_thirdparty();
+				$prod = new Product($db);
+				$prod->fetch($objp->fk_product);
+
+				$outputlangs = $langs;
+				$newlang='';
+				if (empty($newlang) && GETPOST('lang_id')) $newlang=GETPOST('lang_id');
+				if (empty($newlang)) $newlang=$this->client->default_lang;
+				if (! empty($newlang))
+				{
+					$outputlangs = new Translate("",$conf);
+					$outputlangs->setDefaultLang($newlang);
+				}
+
+				$label = (! empty($prod->multilangs[$outputlangs->defaultlang]["label"])) ? $prod->multilangs[$outputlangs->defaultlang]["label"] : $objp->product_label;
+			}
+			else
+			{
+				$label = $objp->product_label;
+			}
+
+			$text.= ' - '.(! empty($objp->label)?$objp->label:$label);
+			$description=(! empty($conf->global->PRODUIT_DESC_IN_FORM)?'':dol_htmlentitiesbr($objp->description));
 		}
 
-		if (($objp->info_bits & 2) == 2) { ?>
-			<a href="<?php echo DOL_URL_ROOT.'/comm/remx.php?id='.$object->id; ?>">
-			<?php
-			$txt='';
-			print img_object($langs->trans("ShowReduc"),'reduc').' ';
-			if ($objp->description == '(DEPOSIT)') $txt=$langs->trans("Deposit");
-			//else $txt=$langs->trans("Discount");
-			print $txt;
-			?>
-			</a>
-			<?php
-			if ($objp->description)
-			{
-				if ($objp->description == '(CREDIT_NOTE)' && $objp->fk_remise_except > 0)
-				{
-					$discount=new DiscountAbsolute($db);
-					$discount->fetch($objp->fk_remise_except);
-					echo ($txt?' - ':'').$langs->transnoentities("DiscountFromCreditNote",$discount->getNomUrl(0));
-				}
-				elseif ($objp->description == '(DEPOSIT)' && $objp->fk_remise_except > 0)
-				{
-					$discount=new DiscountAbsolute($db);
-					$discount->fetch($objp->fk_remise_except);
-					echo ($txt?' - ':'').$langs->transnoentities("DiscountFromDeposit",$discount->getNomUrl(0));
-					// Add date of deposit
-					if (! empty($conf->global->INVOICE_ADD_DEPOSIT_DATE)) echo ' ('.dol_print_date($discount->datec).')';
-				}
-				else
-				{
-					echo ($txt?' - ':'').dol_htmlentitiesbr($objp->description);
-				}
-			}
-		}
-		else
-		{
-			if ($objp->fk_product > 0) {
-
-				echo $form->textwithtooltip($text,$description,3,'','',$i,0,'');
-
-				// Show range
-				echo get_date_range($objp->date_start, $objp->date_end);
-
-				// Add description in form
-				if (! empty($conf->global->PRODUIT_DESC_IN_FORM))
-				{
-					print (! empty($objp->description) && $objp->description!=$objp->product_label)?'<br>'.dol_htmlentitiesbr($objp->description):'';
-				}
-
-			} else {
-
-				//if (! empty($objp->fk_parent_line)) echo img_picto('', 'rightarrow');
-				if ($type==1) $text = img_object($langs->trans('Service'),'service');
-				else $text = img_object($langs->trans('Product'),'product');
-
-				if (! empty($objp->label)) {
-					$text.= ' <strong>'.$objp->label.'</strong>';
-					echo $form->textwithtooltip($text,dol_htmlentitiesbr($objp->description),3,'','',$i,0,'');
-				} else {
-					echo $text.' '.dol_htmlentitiesbr($objp->description);
-				}
-
-				// Show range
-				echo get_date_range($objp->date_start,$objp->date_end);
-			}
-		}
+		if (($objp->info_bits & 2) == 2) { ?>
+			<a href="<?php echo DOL_URL_ROOT.'/comm/remx.php?id='.$object->id; ?>">
+			<?php
+			$txt='';
+			print img_object($langs->trans("ShowReduc"),'reduc').' ';
+			if ($objp->description == '(DEPOSIT)') $txt=$langs->trans("Deposit");
+			//else $txt=$langs->trans("Discount");
+			print $txt;
+			?>
+			</a>
+			<?php
+			if ($objp->description)
+			{
+				if ($objp->description == '(CREDIT_NOTE)' && $objp->fk_remise_except > 0)
+				{
+					$discount=new DiscountAbsolute($db);
+					$discount->fetch($objp->fk_remise_except);
+					echo ($txt?' - ':'').$langs->transnoentities("DiscountFromCreditNote",$discount->getNomUrl(0));
+				}
+				elseif ($objp->description == '(DEPOSIT)' && $objp->fk_remise_except > 0)
+				{
+					$discount=new DiscountAbsolute($db);
+					$discount->fetch($objp->fk_remise_except);
+					echo ($txt?' - ':'').$langs->transnoentities("DiscountFromDeposit",$discount->getNomUrl(0));
+					// Add date of deposit
+					if (! empty($conf->global->INVOICE_ADD_DEPOSIT_DATE)) echo ' ('.dol_print_date($discount->datec).')';
+				}
+				else
+				{
+					echo ($txt?' - ':'').dol_htmlentitiesbr($objp->description);
+				}
+			}
+		}
+		else
+		{
+			if ($objp->fk_product > 0) {
+
+				echo $form->textwithtooltip($text,$description,3,'','',$i,0,'');
+
+				// Show range
+				echo get_date_range($objp->date_start, $objp->date_end);
+
+				// Add description in form
+				if (! empty($conf->global->PRODUIT_DESC_IN_FORM))
+				{
+					print (! empty($objp->description) && $objp->description!=$objp->product_label)?'<br>'.dol_htmlentitiesbr($objp->description):'';
+				}
+
+			} else {
+
+				//if (! empty($objp->fk_parent_line)) echo img_picto('', 'rightarrow');
+				if ($type==1) $text = img_object($langs->trans('Service'),'service');
+				else $text = img_object($langs->trans('Product'),'product');
+
+				if (! empty($objp->label)) {
+					$text.= ' <strong>'.$objp->label.'</strong>';
+					echo $form->textwithtooltip($text,dol_htmlentitiesbr($objp->description),3,'','',$i,0,'');
+				} else {
+					echo $text.' '.dol_htmlentitiesbr($objp->description);
+				}
+
+				// Show range
+				echo get_date_range($objp->date_start,$objp->date_end);
+			}
+		}
 
 		/*
 		$prodreftxt='';
@@ -396,16 +396,16 @@ if ($sql_select)
 			$prodreftxt = $productstatic->getNomUrl(0);
 			if(!empty($objp->product_label)) $prodreftxt .= ' - '.$objp->product_label;
 		}
-		// Show range
-		$prodreftxt .= get_date_range($objp->date_start, $objp->date_end);
-		// Add description in form
-		if (! empty($conf->global->PRODUIT_DESC_IN_FORM))
-		{
-			$prodreftxt .= (! empty($objp->description) && $objp->description!=$objp->product_label)?'<br>'.dol_htmlentitiesbr($objp->description):'';
+		// Show range
+		$prodreftxt .= get_date_range($objp->date_start, $objp->date_end);
+		// Add description in form
+		if (! empty($conf->global->PRODUIT_DESC_IN_FORM))
+		{
+			$prodreftxt .= (! empty($objp->description) && $objp->description!=$objp->product_label)?'<br>'.dol_htmlentitiesbr($objp->description):'';
 		}
 		*/
-		print '</td>';
-
+		print '</td>';
+
 		//print '<td align="left">'.$prodreftxt.'</td>';
 
 		print '<td align="right">'.$objp->prod_qty.'</td>';
diff --git a/htdocs/societe/index.php b/htdocs/societe/index.php
index e113ad7e0e191e7ab343f583d71a028eb175a8fe..90513c239de2bb3b22981547ee67909512d53115 100644
--- a/htdocs/societe/index.php
+++ b/htdocs/societe/index.php
@@ -51,7 +51,7 @@ print_fiche_titre($transAreaType);
 
 //print '<table border="0" width="100%" class="notopnoleftnoright">';
 //print '<tr><td valign="top" width="30%" class="notopnoleft">';
-print '<div class="fichecenter"><div class="fichethirdleft">';
+print '<div class="fichecenter"><div class="fichethirdleft">';
 
 
 /*
@@ -152,7 +152,7 @@ print '</table>';
 
 
 //print '</td><td valign="top" width="70%" class="notopnoleftnoright">';
-print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
+print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
 
 
 /*
@@ -249,7 +249,7 @@ else
 }
 
 //print '</td></tr></table>';
-print '<div></div></div>';
+print '</div></div></div>';
 
 llxFooter();
 
diff --git a/htdocs/theme/bureau2crea/style.css.php b/htdocs/theme/bureau2crea/style.css.php
index 6f806f4594fac45a871878236a6660d098be07b3..45e2285d44a611d43a4a1ab2668b7b7db29c2286 100644
--- a/htdocs/theme/bureau2crea/style.css.php
+++ b/htdocs/theme/bureau2crea/style.css.php
@@ -60,7 +60,7 @@ $fontsizesmaller=empty($conf->browser->phone)?'11':'11';
 $fontlist='arial,tahoma,verdana,helvetica';
 //$fontlist='Verdana,Helvetica,Arial,sans-serif';
 
-$path='';    			// This value may be used in future for external module to overwrite theme
+$path='';    			// This value may be used in future for external module to overwrite theme
 $theme='bureau2crea';	// Value of theme
 if (! empty($conf->global->MAIN_OVERWRITE_THEME_RES)) { $path='/'.$conf->global->MAIN_OVERWRITE_THEME_RES; $theme=$conf->global->MAIN_OVERWRITE_THEME_RES; }
 
diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php
index 665f58b0b89bd96138ab775150d432294ffa00b2..eb5d6b058f6fd91dd99b9bb684c8368cd2d1ca32 100644
--- a/htdocs/theme/eldy/style.css.php
+++ b/htdocs/theme/eldy/style.css.php
@@ -61,7 +61,7 @@ $left=($langs->trans("DIRECTION")=='rtl'?'right':'left');
 
 $path='';    	// This value may be used in future for external module to overwrite theme
 $theme='eldy';	// Value of theme
-if (! empty($conf->global->MAIN_OVERWRITE_THEME_RES)) { $path='/'.$conf->global->MAIN_OVERWRITE_THEME_RES; $theme=$conf->global->MAIN_OVERWRITE_THEME_RES; }
+if (! empty($conf->global->MAIN_OVERWRITE_THEME_RES)) { $path='/'.$conf->global->MAIN_OVERWRITE_THEME_RES; $theme=$conf->global->MAIN_OVERWRITE_THEME_RES; }
 
 // Define image path files
 $fontlist='arial,tahoma,verdana,helvetica';    //$fontlist='Verdana,Helvetica,Arial,sans-serif';
@@ -596,10 +596,6 @@ div.mainmenu.companies {
 	background-image: url(<?php echo dol_buildpath($path.'/theme/'.$theme.'/img/menus/members.png',1) ?>);
 }
 
-div.mainmenu.contacts {
-	background-image: url(<?php echo dol_buildpath($path.'/theme/'.$theme.'/img/menus/stethoscope.png',1) ?>);
-}
-
 div.mainmenu.commercial {
 	background-image: url(<?php echo dol_buildpath($path.'/theme/'.$theme.'/img/menus/commercial.png',1) ?>);
 }
@@ -2543,7 +2539,7 @@ div.dolEventError h1, div.dolEventError h2 {
 	background-image: -ms-linear-gradient(top,#fdfdfd,#aaa) !important;
 	background-image: -o-linear-gradient(top,#fdfdfd,#aaa) !important;
 	background-image: linear-gradient(top,#fdfdfd,#aaa) !important;
-}	
+}
 .ui-bar-b .ui-link {
 	border: none;
 	font-weight: bold !important;
diff --git a/htdocs/theme/phones/smartphone/tpl/menu.tpl.php b/htdocs/theme/phones/smartphone/tpl/menu.tpl.php
index 971dbc80885aae1da4be552801d7b295376daa25..d286345eada189a2263d721562eaf60baa9611c3 100644
--- a/htdocs/theme/phones/smartphone/tpl/menu.tpl.php
+++ b/htdocs/theme/phones/smartphone/tpl/menu.tpl.php
@@ -15,14 +15,14 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-// Load the smartphone menu manager
-$result=@include_once DOL_DOCUMENT_ROOT ."/core/menus/smartphone/".$conf->smart_menu;
-if (! $result)	// If failed to include, we try with standard
-{
-	$conf->smart_menu='smartphone_menu.php';
-	include_once DOL_DOCUMENT_ROOT ."/core/menus/smartphone/".$conf->smart_menu;
-}
-$menusmart = new MenuSmart($db, $user->societe_id?1:0);
+// Load the smartphone menu manager
+$result=@include_once DOL_DOCUMENT_ROOT ."/core/menus/smartphone/".$conf->smart_menu;
+if (! $result)	// If failed to include, we try with standard
+{
+	$conf->smart_menu='smartphone_menu.php';
+	include_once DOL_DOCUMENT_ROOT ."/core/menus/smartphone/".$conf->smart_menu;
+}
+$menusmart = new MenuSmart($db, $user->societe_id?1:0);
 
 
 top_httphead();
diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php
index bd7095f4d037d4f96e2c1b8ed7306e4ff81e63a5..607e0563e7d14640b80a76da1275f5d68567f5b2 100644
--- a/htdocs/user/class/user.class.php
+++ b/htdocs/user/class/user.class.php
@@ -81,6 +81,11 @@ class User extends CommonObject
 	var $phenix_pass;
 	var $phenix_pass_crypted;
 
+	var $clicktodial_url;
+	var $clicktodial_login;
+	var $clicktodial_password;
+	var $clicktodial_poste;
+
 	var $datelastlogin;
 	var $datepreviouslogin;
 	var $statut;
@@ -913,10 +918,10 @@ class User extends CommonObject
 		$this->office_fax	= $contact->fax;
 		$this->user_mobile	= $contact->phone_mobile;
 		$this->address      = $contact->address;
-		$this->zip          = $contact->zip;
-		$this->town         = $contact->town;
+		$this->zip          = $contact->zip;
+		$this->town         = $contact->town;
 		$this->state_id     = $contact->state_id;
-		$this->country_id   = $contact->country_id;
+		$this->country_id   = $contact->country_id;
 
 		if (empty($login)) $login=strtolower(substr($contact->firstname, 0, 4)) . strtolower(substr($contact->lastname, 0, 4));
 		$this->login = $login;
@@ -984,11 +989,11 @@ class User extends CommonObject
 		$this->email        = $member->email;
 		$this->fk_member    = $member->id;
 		$this->pass         = $member->pass;
-		$this->address      = $member->address;
-		$this->zip          = $member->zip;
-		$this->town         = $member->town;
-		$this->state_id     = $member->state_id;
-		$this->country_id   = $member->country_id;
+		$this->address      = $member->address;
+		$this->zip          = $member->zip;
+		$this->town         = $member->town;
+		$this->state_id     = $member->state_id;
+		$this->country_id   = $member->country_id;
 
 		if (empty($login)) $login=strtolower(substr($member->firstname, 0, 4)) . strtolower(substr($member->lastname, 0, 4));
 		$this->login = $login;
@@ -1545,7 +1550,7 @@ class User extends CommonObject
 	 */
 	function fetch_clicktodial()
 	{
-		$sql = "SELECT login, pass, poste ";
+		$sql = "SELECT url, login, pass, poste ";
 		$sql.= " FROM ".MAIN_DB_PREFIX."user_clicktodial as u";
 		$sql.= " WHERE u.fk_user = ".$this->id;
 
@@ -1556,6 +1561,7 @@ class User extends CommonObject
 			{
 				$obj = $this->db->fetch_object($resql);
 
+				$this->clicktodial_url = $obj->url;
 				$this->clicktodial_login = $obj->login;
 				$this->clicktodial_password = $obj->pass;
 				$this->clicktodial_poste = $obj->poste;
@@ -1585,26 +1591,28 @@ class User extends CommonObject
 		$sql = "DELETE FROM ".MAIN_DB_PREFIX."user_clicktodial";
 		$sql .= " WHERE fk_user = ".$this->id;
 
+		dol_syslog(get_class($this).'::update_clicktodial sql='.$sql);
 		$result = $this->db->query($sql);
 
 		$sql = "INSERT INTO ".MAIN_DB_PREFIX."user_clicktodial";
-		$sql .= " (fk_user,login,pass,poste)";
+		$sql .= " (fk_user,url,login,pass,poste)";
 		$sql .= " VALUES (".$this->id;
-		$sql .= ", '". $this->clicktodial_login ."'";
-		$sql .= ", '". $this->clicktodial_password ."'";
-		$sql .= ", '". $this->clicktodial_poste."')";
+		$sql .= ", '". $this->db->escape($this->clicktodial_url) ."'";
+		$sql .= ", '". $this->db->escape($this->clicktodial_login) ."'";
+		$sql .= ", '". $this->db->escape($this->clicktodial_password) ."'";
+		$sql .= ", '". $this->db->escape($this->clicktodial_poste) ."')";
 
+		dol_syslog(get_class($this).'::update_clicktodial sql='.$sql);
 		$result = $this->db->query($sql);
-
 		if ($result)
 		{
 			$this->db->commit();
-			return 0;
+			return 1;
 		}
 		else
 		{
 			$this->db->rollback();
-			$this->error=$this->db->error();
+			$this->error=$this->db->lasterror();
 			return -1;
 		}
 	}
@@ -1961,6 +1969,8 @@ class User extends CommonObject
 		$this->admin=0;
 		$this->login='dolibspec';
 		$this->pass='dolibspec';
+		//$this->pass_indatabase='dolibspec';									Set after a fetch
+		//$this->pass_indatabase_crypted='e80ca5a88c892b0aaaf7e154853bccab';	Set after a fetch
 		$this->datec=time();
 		$this->datem=time();
 		$this->webcal_login='dolibspec';
@@ -1969,7 +1979,9 @@ class User extends CommonObject
 		$this->datepreviouslogin=time();
 		$this->statut=1;
 
-		$this->societe_id = 1;
+		//$this->societe_id = 1;	For external users
+		//$this->contact_id = 1;	For external users
+		$this->entity = 1;
 	}
 
 	/**
@@ -2108,205 +2120,205 @@ class User extends CommonObject
 	}
 
 
-	/**
-	 * Return and array with all instanciated children users of current user
-	 *
-	 * @return	void
-	 */
-	function get_children()
-	{
-		$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."user";
-		$sql.= " WHERE fk_user = ".$this->id;
-
-		dol_syslog(get_class($this)."::get_children result=".$result, LOG_DEBUG);
-		$res  = $this->db->query($sql);
-		if ($res)
-		{
-			$users = array ();
-			while ($rec = $this->db->fetch_array($res))
-			{
-				$user = new User($this->db);
-				$user->fetch($rec['rowid']);
-				$users[] = $user;
-			}
-			return $users;
-		}
-		else
-		{
-			dol_print_error($this->db);
-			return -1;
-		}
-	}
-
-
-	/**
-	 * 	Load this->parentof that is array(id_son=>id_parent, ...)
-	 *
-	 *	@return		int		<0 if KO, >0 if OK
-	 */
-	private function load_parentof()
-	{
-		global $conf;
-
-		$this->parentof=array();
-
-		// Load array[child]=parent
-		$sql = "SELECT fk_user as id_parent, rowid as id_son";
-		$sql.= " FROM ".MAIN_DB_PREFIX."user";
-		$sql.= " WHERE fk_user != 0";
-		$sql.= " AND entity = ".$conf->entity;
-
-		dol_syslog(get_class($this)."::load_parentof sql=".$sql);
-		$resql = $this->db->query($sql);
-		if ($resql)
-		{
-			while ($obj= $this->db->fetch_object($resql))
-			{
-				$this->parentof[$obj->id_son]=$obj->id_parent;
-			}
-			return 1;
-		}
-		else
-		{
-			dol_print_error($this->db);
-			return -1;
-		}
-	}
-
-	/**
-	 * 	Reconstruit l'arborescence hierarchique des users sous la forme d'un tableau
-	 *	Renvoi un tableau de tableau('id','id_parent',...) trie selon arbre et avec:
-	 *				id = id du user
-	 *				id_parent = id du user parent
-	 *				id_children = tableau des id enfant
-	 *				name = nom du user
-	 *				fullname = nom avec chemin complet du user
-	 *				fullpath = chemin complet compose des id
-	 *
-	 *  @param      int		$markafterid      Removed all users including the leaf $markafterid in user tree.
-	 *	@return		array		      		  Array of users. this->users and this->parentof are set.
-	 */
-	function get_full_tree($markafterid=0)
-	{
-		$this->users = array();
-
-		// Init this->parentof that is array(id_son=>id_parent, ...)
-		$this->load_parentof();
-
-		// Init $this->users array
-		$sql = "SELECT DISTINCT u.rowid, u.firstname, u.lastname, u.fk_user, u.login, u.statut";	// Distinct reduce pb with old tables with duplicates
-		$sql.= " FROM ".MAIN_DB_PREFIX."user as u";
-		$sql.= " WHERE u.entity IN (".getEntity('user',1).")";
-
-		dol_syslog(get_class($this)."::get_full_tree get user list sql=".$sql, LOG_DEBUG);
-		$resql = $this->db->query($sql);
-		if ($resql)
-		{
-			$i=0;
-			while ($obj = $this->db->fetch_object($resql))
-			{
-				$this->users[$obj->rowid]['rowid'] = $obj->rowid;
-				$this->users[$obj->rowid]['id'] = $obj->rowid;
-				$this->users[$obj->rowid]['fk_user'] = $obj->fk_user;
-				$this->users[$obj->rowid]['firstname'] = $obj->firstname;
-				$this->users[$obj->rowid]['lastname'] = $obj->lastname;
+	/**
+	 * Return and array with all instanciated children users of current user
+	 *
+	 * @return	void
+	 */
+	function get_children()
+	{
+		$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."user";
+		$sql.= " WHERE fk_user = ".$this->id;
+
+		dol_syslog(get_class($this)."::get_children result=".$result, LOG_DEBUG);
+		$res  = $this->db->query($sql);
+		if ($res)
+		{
+			$users = array ();
+			while ($rec = $this->db->fetch_array($res))
+			{
+				$user = new User($this->db);
+				$user->fetch($rec['rowid']);
+				$users[] = $user;
+			}
+			return $users;
+		}
+		else
+		{
+			dol_print_error($this->db);
+			return -1;
+		}
+	}
+
+
+	/**
+	 * 	Load this->parentof that is array(id_son=>id_parent, ...)
+	 *
+	 *	@return		int		<0 if KO, >0 if OK
+	 */
+	private function load_parentof()
+	{
+		global $conf;
+
+		$this->parentof=array();
+
+		// Load array[child]=parent
+		$sql = "SELECT fk_user as id_parent, rowid as id_son";
+		$sql.= " FROM ".MAIN_DB_PREFIX."user";
+		$sql.= " WHERE fk_user != 0";
+		$sql.= " AND entity = ".$conf->entity;
+
+		dol_syslog(get_class($this)."::load_parentof sql=".$sql);
+		$resql = $this->db->query($sql);
+		if ($resql)
+		{
+			while ($obj= $this->db->fetch_object($resql))
+			{
+				$this->parentof[$obj->id_son]=$obj->id_parent;
+			}
+			return 1;
+		}
+		else
+		{
+			dol_print_error($this->db);
+			return -1;
+		}
+	}
+
+	/**
+	 * 	Reconstruit l'arborescence hierarchique des users sous la forme d'un tableau
+	 *	Renvoi un tableau de tableau('id','id_parent',...) trie selon arbre et avec:
+	 *				id = id du user
+	 *				id_parent = id du user parent
+	 *				id_children = tableau des id enfant
+	 *				name = nom du user
+	 *				fullname = nom avec chemin complet du user
+	 *				fullpath = chemin complet compose des id
+	 *
+	 *  @param      int		$markafterid      Removed all users including the leaf $markafterid in user tree.
+	 *	@return		array		      		  Array of users. this->users and this->parentof are set.
+	 */
+	function get_full_tree($markafterid=0)
+	{
+		$this->users = array();
+
+		// Init this->parentof that is array(id_son=>id_parent, ...)
+		$this->load_parentof();
+
+		// Init $this->users array
+		$sql = "SELECT DISTINCT u.rowid, u.firstname, u.lastname, u.fk_user, u.login, u.statut";	// Distinct reduce pb with old tables with duplicates
+		$sql.= " FROM ".MAIN_DB_PREFIX."user as u";
+		$sql.= " WHERE u.entity IN (".getEntity('user',1).")";
+
+		dol_syslog(get_class($this)."::get_full_tree get user list sql=".$sql, LOG_DEBUG);
+		$resql = $this->db->query($sql);
+		if ($resql)
+		{
+			$i=0;
+			while ($obj = $this->db->fetch_object($resql))
+			{
+				$this->users[$obj->rowid]['rowid'] = $obj->rowid;
+				$this->users[$obj->rowid]['id'] = $obj->rowid;
+				$this->users[$obj->rowid]['fk_user'] = $obj->fk_user;
+				$this->users[$obj->rowid]['firstname'] = $obj->firstname;
+				$this->users[$obj->rowid]['lastname'] = $obj->lastname;
 				$this->users[$obj->rowid]['login'] = $obj->login;
 				$this->users[$obj->rowid]['statut'] = $obj->statut;
-				$i++;
-			}
-		}
-		else
-		{
-			dol_print_error($this->db);
-			return -1;
-		}
-
-		// We add the fullpath property to each elements of first level (no parent exists)
-		dol_syslog(get_class($this)."::get_full_tree call to build_path_from_id_user", LOG_DEBUG);
-		foreach($this->users as $key => $val)
-		{
-			$this->build_path_from_id_user($key,0);	// Process a branch from the root user key (this user has no parent)
-		}
-
-		// Exclude leaf including $markafterid from tree
-		if ($markafterid)
-		{
-			//print "Look to discard user ".$markafterid."\n";
-			$keyfilter1='^'.$markafterid.'$';
-			$keyfilter2='_'.$markafterid.'$';
-			$keyfilter3='^'.$markafterid.'_';
-			$keyfilter4='_'.$markafterid.'_';
-			foreach($this->users as $key => $val)
-			{
-				if (preg_match('/'.$keyfilter1.'/',$val['fullpath']) || preg_match('/'.$keyfilter2.'/',$val['fullpath'])
-					|| preg_match('/'.$keyfilter3.'/',$val['fullpath']) || preg_match('/'.$keyfilter4.'/',$val['fullpath']))
-				{
-					unset($this->users[$key]);
-				}
-			}
-		}
-
-		dol_syslog(get_class($this)."::get_full_tree dol_sort_array", LOG_DEBUG);
-		$this->users=dol_sort_array($this->users, 'fullname', 'asc', true, false);
-
-		//$this->debug_users();
-
-		return $this->users;
-	}
-
-	/**
-	 *	For user id_user and its childs available in this->users, define property fullpath and fullname
-	 *
-	 * 	@param		int		$id_user		id_user entry to update
-	 * 	@param		int		$protection		Deep counter to avoid infinite loop
-	 *	@return		void
-	 */
-	function build_path_from_id_user($id_user,$protection=1000)
-	{
-		dol_syslog(get_class($this)."::build_path_from_id_user id_user=".$id_user." protection=".$protection, LOG_DEBUG);
-
-		if (! empty($this->users[$id_user]['fullpath']))
-		{
-			// Already defined
-			dol_syslog(get_class($this)."::build_path_from_id_user fullpath and fullname already defined", LOG_WARNING);
-			return;
-		}
-
-		// Define fullpath and fullname
-		$this->users[$id_user]['fullpath'] = '_'.$id_user;
-		$this->users[$id_user]['fullname'] = $this->users[$id_user]['label'];
-		$i=0; $cursor_user=$id_user;
-
-		while ((empty($protection) || $i < $protection) && ! empty($this->parentof[$cursor_user]))
-		{
-			$this->users[$id_user]['fullpath'] = '_'.$this->parentof[$cursor_user].$this->users[$id_user]['fullpath'];
-			$this->users[$id_user]['fullname'] = $this->users[$this->parentof[$cursor_user]]['label'].' >> '.$this->users[$id_user]['fullname'];
-			$i++; $cursor_user=$this->parentof[$cursor_user];
-		}
-
-		// We count number of _ to have level
-		$this->users[$id_user]['level']=dol_strlen(preg_replace('/[^_]/i','',$this->users[$id_user]['fullpath']));
-
-		return;
-	}
-
-	/**
-	 *	Affiche contenu de $this->users
-	 *
-	 *	@return	void
-	 */
-	function debug_users()
-	{
-		// Affiche $this->users
-		foreach($this->users as $key => $val)
-		{
-			print 'id: '.$this->users[$key]['id'];
-			print ' name: '.$this->users[$key]['name'];
-			print ' parent: '.$this->users[$key]['fk_user'];
-			print ' fullpath: '.$this->users[$key]['fullpath'];
-			print ' fullname: '.$this->users[$key]['fullname'];
-			print "<br>\n";
-		}
+				$i++;
+			}
+		}
+		else
+		{
+			dol_print_error($this->db);
+			return -1;
+		}
+
+		// We add the fullpath property to each elements of first level (no parent exists)
+		dol_syslog(get_class($this)."::get_full_tree call to build_path_from_id_user", LOG_DEBUG);
+		foreach($this->users as $key => $val)
+		{
+			$this->build_path_from_id_user($key,0);	// Process a branch from the root user key (this user has no parent)
+		}
+
+		// Exclude leaf including $markafterid from tree
+		if ($markafterid)
+		{
+			//print "Look to discard user ".$markafterid."\n";
+			$keyfilter1='^'.$markafterid.'$';
+			$keyfilter2='_'.$markafterid.'$';
+			$keyfilter3='^'.$markafterid.'_';
+			$keyfilter4='_'.$markafterid.'_';
+			foreach($this->users as $key => $val)
+			{
+				if (preg_match('/'.$keyfilter1.'/',$val['fullpath']) || preg_match('/'.$keyfilter2.'/',$val['fullpath'])
+					|| preg_match('/'.$keyfilter3.'/',$val['fullpath']) || preg_match('/'.$keyfilter4.'/',$val['fullpath']))
+				{
+					unset($this->users[$key]);
+				}
+			}
+		}
+
+		dol_syslog(get_class($this)."::get_full_tree dol_sort_array", LOG_DEBUG);
+		$this->users=dol_sort_array($this->users, 'fullname', 'asc', true, false);
+
+		//$this->debug_users();
+
+		return $this->users;
+	}
+
+	/**
+	 *	For user id_user and its childs available in this->users, define property fullpath and fullname
+	 *
+	 * 	@param		int		$id_user		id_user entry to update
+	 * 	@param		int		$protection		Deep counter to avoid infinite loop
+	 *	@return		void
+	 */
+	function build_path_from_id_user($id_user,$protection=1000)
+	{
+		dol_syslog(get_class($this)."::build_path_from_id_user id_user=".$id_user." protection=".$protection, LOG_DEBUG);
+
+		if (! empty($this->users[$id_user]['fullpath']))
+		{
+			// Already defined
+			dol_syslog(get_class($this)."::build_path_from_id_user fullpath and fullname already defined", LOG_WARNING);
+			return;
+		}
+
+		// Define fullpath and fullname
+		$this->users[$id_user]['fullpath'] = '_'.$id_user;
+		$this->users[$id_user]['fullname'] = $this->users[$id_user]['label'];
+		$i=0; $cursor_user=$id_user;
+
+		while ((empty($protection) || $i < $protection) && ! empty($this->parentof[$cursor_user]))
+		{
+			$this->users[$id_user]['fullpath'] = '_'.$this->parentof[$cursor_user].$this->users[$id_user]['fullpath'];
+			$this->users[$id_user]['fullname'] = $this->users[$this->parentof[$cursor_user]]['label'].' >> '.$this->users[$id_user]['fullname'];
+			$i++; $cursor_user=$this->parentof[$cursor_user];
+		}
+
+		// We count number of _ to have level
+		$this->users[$id_user]['level']=dol_strlen(preg_replace('/[^_]/i','',$this->users[$id_user]['fullpath']));
+
+		return;
+	}
+
+	/**
+	 *	Affiche contenu de $this->users
+	 *
+	 *	@return	void
+	 */
+	function debug_users()
+	{
+		// Affiche $this->users
+		foreach($this->users as $key => $val)
+		{
+			print 'id: '.$this->users[$key]['id'];
+			print ' name: '.$this->users[$key]['name'];
+			print ' parent: '.$this->users[$key]['fk_user'];
+			print ' fullpath: '.$this->users[$key]['fullpath'];
+			print ' fullname: '.$this->users[$key]['fullname'];
+			print "<br>\n";
+		}
 	}
 
 }
diff --git a/htdocs/user/clicktodial.php b/htdocs/user/clicktodial.php
index bd39655b7305fa6e95728e5de7c15a354bbdc4c7..48f02ca560368cf794e2aac6beab1a56331e82b7 100644
--- a/htdocs/user/clicktodial.php
+++ b/htdocs/user/clicktodial.php
@@ -51,11 +51,13 @@ if ($action == 'update' && ! $_POST['cancel'])
 	$edituser = new User($db);
 	$edituser->fetch($id);
 
-	$edituser->clicktodial_login    = $_POST["login"];
-	$edituser->clicktodial_password = $_POST["password"];
-	$edituser->clicktodial_poste    = $_POST["poste"];
+	$edituser->clicktodial_url      = GETPOST("url");
+	$edituser->clicktodial_login    = GETPOST("login");
+	$edituser->clicktodial_password = GETPOST("password");
+	$edituser->clicktodial_poste    = GETPOST("poste");
 
 	$result=$edituser->update_clicktodial();
+	if ($result < 0) setEventMessage($edituser->error,'errors');
 }
 
 
@@ -110,7 +112,7 @@ if ($id > 0)
     print "</table>\n";
     print "<br>\n";
 
-
+	// Edit mode
     if ($action == 'edit')
     {
         print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$fuser->id.'" method="post">';
@@ -122,13 +124,17 @@ if ($id > 0)
         {
         	print '<tr><td width="25%" valign="top">ClickToDial URL</td>';
         	print '<td class="valeur">';
-            if (empty($conf->global->CLICKTODIAL_URL))
+        	print '<input name="url" value="'.(! empty($fuser->clicktodial_url)?$fuser->clicktodial_url:'').'" size="92">';
+        	if (empty($conf->global->CLICKTODIAL_URL) && empty($fuser->clicktodial_url))
             {
                 $langs->load("errors");
                 print '<font class="error">'.$langs->trans("ErrorModuleSetupNotComplete").'</font>';
             }
-            else print $form->textwithpicto($conf->global->CLICKTODIAL_URL,$langs->trans("ClickToDialUrlDesc"));
-        	print '</td>';
+            else
+           {
+            	print ' &nbsp; &nbsp; '.$form->textwithpicto($langs->trans("KeepEmptyToUseDefault").': '.$conf->global->CLICKTODIAL_URL,$langs->trans("ClickToDialUrlDesc"));
+           }
+            print '</td>';
         	print '</tr>';
         }
 
@@ -147,14 +153,16 @@ if ($id > 0)
         print '<input name="poste" value="'.(! empty($fuser->clicktodial_poste)?$fuser->clicktodial_poste:'').'"></td>';
         print "</tr>\n";
 
-		print '<tr><td colspan="2" align="center"><input class="button" type="submit" value="'.$langs->trans("Save").'">';
-		print ' &nbsp; &nbsp; ';
-		print '<input class="button" type="submit" name="cancel" value="'.$langs->trans("Cancel").'">';
-		print '</td></tr>';
+        print '</table>';
+
+        print '<br><center><input class="button" type="submit" value="'.$langs->trans("Save").'">';
+        print ' &nbsp; &nbsp; ';
+        print '<input class="button" type="submit" name="cancel" value="'.$langs->trans("Cancel").'">';
+        print '</center>';
 
-        print '</table></form>';
+        print '</form>';
     }
-    else
+    else	// View mode
     {
 
         print '<table class="border" width="100%">';
@@ -163,12 +171,17 @@ if ($id > 0)
         {
         	print "<tr>".'<td width="25%" valign="top">ClickToDial URL</td>';
         	print '<td class="valeur">';
-        	if (empty($conf->global->CLICKTODIAL_URL))
+        	$url=$conf->global->CLICKTODIAL_URL;
+        	if (! empty($fuser->clicktodial_url)) $url=$fuser->clicktodial_url;
+        	if (empty($url))
         	{
         	    $langs->load("errors");
         	    print '<font class="error">'.$langs->trans("ErrorModuleSetupNotComplete").'</font>';
         	}
-        	else print $form->textwithpicto($conf->global->CLICKTODIAL_URL,$langs->trans("ClickToDialUrlDesc"));
+        	else
+        	{
+        		print $form->textwithpicto((empty($fuser->clicktodial_url)?$langs->trans("DefaultLink").': ':'').$url,$langs->trans("ClickToDialUrlDesc"));
+        	}
         	print '</td>';
         	print '</tr>';
         }
diff --git a/htdocs/user/fiche.php b/htdocs/user/fiche.php
index be62afba37fb9c5e15fdec7dbc8459f15f9e3f9d..779d0cf54234d355e139834b8251bc526ecb7e57 100644
--- a/htdocs/user/fiche.php
+++ b/htdocs/user/fiche.php
@@ -670,7 +670,7 @@ if (($action == 'create') || ($action == 'adduserldap'))
        	print '<br>';
     }
 
-    print dol_set_focus('#lastname');
+    print dol_set_focus('#lastname');
 
     print '<form action="'.$_SERVER['PHP_SELF'].'" method="POST" name="createuser">';
     print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
@@ -1069,7 +1069,7 @@ else
 
             // Firstname
             print '<tr><td valign="top">'.$langs->trans("Firstname").'</td>';
-            print '<td>'.$object->Firstname.'</td>';
+            print '<td>'.$object->firstname.'</td>';
             print '</tr>'."\n";
 
             // Position/Job
@@ -1179,18 +1179,18 @@ else
             print '<tr><td valign="top">'.$langs->trans('Signature').'</td><td>';
             print dol_htmlentitiesbr($object->signature);
             print "</td></tr>\n";
-
-            // 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";
+
+            // 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>';
@@ -1263,22 +1263,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";
-            }
-
+            // 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
@@ -1560,12 +1560,12 @@ else
             print '<td>';
             if ($caneditfield && !$object->ldap_sid)
             {
-                print '<input size="30" type="text" class="flat" name="Firstname" value="'.$object->Firstname.'">';
+                print '<input size="30" type="text" class="flat" name="firstname" value="'.$object->firstname.'">';
             }
             else
             {
-                print '<input type="hidden" name="Firstname" value="'.$object->Firstname.'">';
-                print $object->Firstname;
+                print '<input type="hidden" name="firstname" value="'.$object->firstname.'">';
+                print $object->firstname;
             }
             print '</td></tr>';
 
@@ -1786,7 +1786,7 @@ else
           		print dol_htmlentitiesbr($object->signature);
             }
             print '</td></tr>';
-
+
             // openid
             if (isset($conf->authmode) && preg_match('/myopenid/',$conf->authmode))
             {
@@ -1804,10 +1804,10 @@ else
                 print '</td></tr>';
             }
 
-            // Hierarchy
-            print '<tr><td valign="top">'.$langs->trans("HierarchicalResponsible").'</td>';
+            // Hierarchy
+            print '<tr><td valign="top">'.$langs->trans("HierarchicalResponsible").'</td>';
             print '<td>';
-            if ($caneditfield)
+            if ($caneditfield)
             {
             	print $form->select_dolusers($object->fk_user,'fk_user',1,array($object->id),0,'',0,$object->entity);
             }
@@ -1817,9 +1817,9 @@ else
             	$huser=new User($db);
             	$huser->fetch($object->fk_user);
             	print $huser->getNomUrl(1);
-            }
-            print '</td>';
-            print "</tr>\n";
+            }
+            print '</td>';
+            print "</tr>\n";
 
             // Status
             print '<tr><td valign="top">'.$langs->trans("Status").'</td>';
diff --git a/htdocs/user/hierarchy.php b/htdocs/user/hierarchy.php
index afcd72ec76a289ab050e97f3c77bd994f0f723c8..0f2ccff204d4ff1ee5e5a6df29816562b813022a 100644
--- a/htdocs/user/hierarchy.php
+++ b/htdocs/user/hierarchy.php
@@ -26,12 +26,12 @@
  */
 
 require '../main.inc.php';
-require_once DOL_DOCUMENT_ROOT.'/core/lib/treeview.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/treeview.lib.php';
 
 if (! $user->rights->user->user->lire && ! $user->admin)
 	accessforbidden();
 
-$langs->load("users");
+$langs->load("users");
 $langs->load("companies");
 
 // Security check (for external users)
@@ -53,12 +53,12 @@ $companystatic = new Societe($db);
 
 $form = new Form($db);
 
-$arrayofjs=array('/includes/jquery/plugins/jquerytreeview/jquery.treeview.js', '/includes/jquery/plugins/jquerytreeview/lib/jquery.cookie.js');
-$arrayofcss=array('/includes/jquery/plugins/jquerytreeview/jquery.treeview.css');
+$arrayofjs=array('/includes/jquery/plugins/jquerytreeview/jquery.treeview.js', '/includes/jquery/plugins/jquerytreeview/lib/jquery.cookie.js');
+$arrayofcss=array('/includes/jquery/plugins/jquerytreeview/jquery.treeview.css');
 
 llxHeader('',$langs->trans("ListOfUsers"). ' ('.$langs->trans("HierarchicView").')','','',0,0,$arrayofjs,$arrayofcss);
-
-print_fiche_titre($langs->trans("ListOfUsers"). ' ('.$langs->trans("HierarchicView").')', '<form action="'.DOL_URL_ROOT.'/user/index.php" method="POST"><input type="submit" class="button" style="width:120px" name="viewcal" value="'.dol_escape_htmltag($langs->trans("ViewList")).'"></form>');
+
+print_fiche_titre($langs->trans("ListOfUsers"). ' ('.$langs->trans("HierarchicView").')', '<form action="'.DOL_URL_ROOT.'/user/index.php" method="POST"><input type="submit" class="button" style="width:120px" name="viewcal" value="'.dol_escape_htmltag($langs->trans("ViewList")).'"></form>');
 
 
 
@@ -67,51 +67,51 @@ $user_arbo = $userstatic->get_full_tree();
 
 // Define fulltree array
 $fulltree=$user_arbo;
-
-// Define data (format for treeview)
-$data=array();
-$data[] = array('rowid'=>0,'fk_menu'=>-1,'title'=>"racine",'mainmenu'=>'','leftmenu'=>'','fk_mainmenu'=>'','fk_leftmenu'=>'');
-foreach($fulltree as $key => $val)
+
+// Define data (format for treeview)
+$data=array();
+$data[] = array('rowid'=>0,'fk_menu'=>-1,'title'=>"racine",'mainmenu'=>'','leftmenu'=>'','fk_mainmenu'=>'','fk_leftmenu'=>'');
+foreach($fulltree as $key => $val)
 {
-	$userstatic->id=$val['id'];
-	$userstatic->ref=$val['label'];
+	$userstatic->id=$val['id'];
+	$userstatic->ref=$val['label'];
 	$userstatic->firstname=$val['firstname'];
 	$userstatic->lastname=$val['name'];
 	$userstatic->statut=$val['statut'];
-	$li=$userstatic->getNomUrl(1,'').' ('.$val['login'].')';
-
-	$data[] = array(
-		'rowid'=>$val['rowid'],
-		'fk_menu'=>$val['fk_user'],
-		'entry'=>'<table class="nobordernopadding centpercent"><tr><td>'.$li.'</td><td align="right">'.$userstatic->getLibStatut(5).'</td></tr></table>'
-	);
-}
-
-
-print '<table class="liste" width="100%">';
+	$li=$userstatic->getNomUrl(1,'').' ('.$val['login'].')';
+
+	$data[] = array(
+		'rowid'=>$val['rowid'],
+		'fk_menu'=>$val['fk_user'],
+		'entry'=>'<table class="nobordernopadding centpercent"><tr><td>'.$li.'</td><td align="right">'.$userstatic->getLibStatut(5).'</td></tr></table>'
+	);
+}
+
+
+print '<table class="liste" width="100%">';
 print '<tr class="liste_titre"><td>'.$langs->trans("HierarchicView").'</td><td></td><td align="right"><div id="iddivjstreecontrol"><a href="#">'.img_picto('','object_category').' '.$langs->trans("UndoExpandAll").'</a>';
-print ' | <a href="#">'.img_picto('','object_category-expanded').' '.$langs->trans("ExpandAll").'</a></div></td></tr>';
-
-$nbofentries=(count($data) - 1);
-
-if ($nbofentries > 0)
-{
-	print '<tr '.$bc[true].'><td colspan="3">';
-	tree_recur($data,$data[0],0);
-	print '</td></tr>';
-}
-else
-{
-	print '<tr '.$bc[true].'>';
-	print '<td colspan="3"><table class="nobordernopadding"><tr class="nobordernopadding"><td>'.img_picto_common('','treemenu/branchbottom.gif').'</td>';
-	print '<td valign="middle">';
-	print $langs->trans("NoCategoryYet");
-	print '</td>';
-	print '<td>&nbsp;</td>';
-	print '</table></td>';
-	print '</tr>';
-}
-
+print ' | <a href="#">'.img_picto('','object_category-expanded').' '.$langs->trans("ExpandAll").'</a></div></td></tr>';
+
+$nbofentries=(count($data) - 1);
+
+if ($nbofentries > 0)
+{
+	print '<tr '.$bc[true].'><td colspan="3">';
+	tree_recur($data,$data[0],0);
+	print '</td></tr>';
+}
+else
+{
+	print '<tr '.$bc[true].'>';
+	print '<td colspan="3"><table class="nobordernopadding"><tr class="nobordernopadding"><td>'.img_picto_common('','treemenu/branchbottom.gif').'</td>';
+	print '<td valign="middle">';
+	print $langs->trans("NoCategoryYet");
+	print '</td>';
+	print '<td>&nbsp;</td>';
+	print '</table></td>';
+	print '</tr>';
+}
+
 print "</table>";
 
 
diff --git a/htdocs/user/home.php b/htdocs/user/home.php
index 66c74e5d290cdab9b354e53eb68c09260ceb3ceb..537a4671b5a598edefa03d35f02b3bf653069208 100644
--- a/htdocs/user/home.php
+++ b/htdocs/user/home.php
@@ -58,7 +58,7 @@ print_fiche_titre($langs->trans("MenuUsersAndGroups"));
 
 //print '<table border="0" width="100%" class="notopnoleftnoright">';
 //print '<tr><td valign="top" width="30%" class="notopnoleft">';
-print '<div class="fichecenter"><div class="fichethirdleft">';
+print '<div class="fichecenter"><div class="fichethirdleft">';
 
 
 // Search User
@@ -90,7 +90,7 @@ if ($canreadperms)
 
 
 //print '</td><td valign="top" width="70%" class="notopnoleftnoright">';
-print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
+print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
 
 
 /*
@@ -254,7 +254,7 @@ if ($canreadperms)
 }
 
 //print '</td></tr></table>';
-print '<div></div></div>';
+print '</div></div></div>';
 
 llxFooter();
 
diff --git a/htdocs/user/logout.php b/htdocs/user/logout.php
index 5830d809c0b4cd35697b4fddc0ee496219c6b997..f5523c791f2d2e872fda127af734f9b1b6d96bdc 100644
--- a/htdocs/user/logout.php
+++ b/htdocs/user/logout.php
@@ -33,12 +33,12 @@ if (! defined('EVEN_IF_ONLY_LOGIN_ALLOWED'))  define('EVEN_IF_ONLY_LOGIN_ALLOWED
 require_once '../main.inc.php';
 
 // This can happen only with a bookmark or forged url call.
-if (!empty($_SESSION["dol_authmode"]) && ($_SESSION["dol_authmode"] == 'forceuser'
-  	 || $_SESSION["dol_authmode"] == 'http'))
+if (!empty($_SESSION["dol_authmode"]) && ($_SESSION["dol_authmode"] == 'forceuser' || $_SESSION["dol_authmode"] == 'http'))
 {
    die("Disconnection does not work when connection was made in mode ".$_SESSION["dol_authmode"]);
 }
 
+
 // Appel des triggers
 include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
 $interface=new Interfaces($db);
@@ -53,13 +53,16 @@ $urlfrom=empty($_SESSION["urlfrom"])?'':$_SESSION["urlfrom"];
 // TODO external module
 if (! empty($conf->phenix->enabled) && ! empty($conf->phenix->cookie))
 {
-	// Destroy cookie
 	setcookie($conf->phenix->cookie, '', 1, "/");
 }
 
-// Destroy object of session
-unset($_SESSION['dol_login']);
-unset($_SESSION['dol_entity']);
+// Define url to go
+$url=DOL_URL_ROOT."/index.php";		// By default go to login page
+if ($urlfrom) $url=DOL_URL_ROOT.$urlfrom;
+if (! empty($conf->global->MAIN_LOGOUT_GOTO_URL)) $url=$conf->global->MAIN_LOGOUT_GOTO_URL;
+
+if (! empty($_SESSION['dol_hide_topmenu']))  $url.=(preg_match('/\?/',$url)?'&':'?').'dol_hide_topmenu=1';
+if (! empty($_SESSION['dol_hide_leftmenu'])) $url.=(preg_match('/\?/',$url)?'&':'?').'dol_hide_leftmenu=1';
 
 // Destroy session
 $prefix=dol_getprefix();
@@ -70,10 +73,9 @@ session_name($sessionname);
 session_destroy();
 dol_syslog("End of session ".$sessionname);
 
-// Define url to go
-$url=DOL_URL_ROOT."/index.php";		// By default go to login page
-if ($urlfrom) $url=DOL_URL_ROOT.$urlfrom;
-if (! empty($conf->global->MAIN_LOGOUT_GOTO_URL)) $url=$conf->global->MAIN_LOGOUT_GOTO_URL;
+// TODO Not sure this is required
+unset($_SESSION['dol_login']);
+unset($_SESSION['dol_entity']);
 
 //print 'url='.$url;exit;
 header("Location: ".$url);
diff --git a/htdocs/webservices/server_invoice.php b/htdocs/webservices/server_invoice.php
index ef7384a11c73b60e285be8855a975ffa84cb2527..014eba8fcb4a1a64c78f097505599b7b73365f52 100755
--- a/htdocs/webservices/server_invoice.php
+++ b/htdocs/webservices/server_invoice.php
@@ -398,7 +398,7 @@ function getInvoicesForThirdParty($authentication,$idthirdparty)
 		//$sql.=" WHERE f.fk_soc = s.rowid AND nom = '".$db->escape($idthirdparty)."'";
 		//$sql.=" WHERE f.fk_soc = s.rowid AND nom = '".$db->escape($idthirdparty)."'";
 		$sql.=" WHERE f.entity = ".$conf->entity;
-		if ($idthirdparty != 'all' ) $sql.=" AND f.fk_soc = ".$db->escape($idthirdparty);
+		if ($idthirdparty != 'all' ) $sql.=" AND f.fk_soc = ".$db->escape($idthirdparty);
 		
 		$resql=$db->query($sql);
 		if ($resql)
@@ -413,11 +413,11 @@ function getInvoicesForThirdParty($authentication,$idthirdparty)
 			    $invoice=new Facture($db);
 			    $invoice->fetch($obj->facid);
 
-			    // Sécurité pour utilisateur externe
-			    if( $socid && ( $socid != $order->socid) )
-			    {
-			    	$error++;
-			    	$errorcode='PERMISSION_DENIED'; $errorlabel=$order->socid.' User does not have permission for this request';
+			    // Sécurité pour utilisateur externe
+			    if( $socid && ( $socid != $order->socid) )
+			    {
+			    	$error++;
+			    	$errorcode='PERMISSION_DENIED'; $errorlabel=$order->socid.' User does not have permission for this request';
 			    }
 			    			    
 				// Define lines of invoice
diff --git a/htdocs/webservices/server_order.php b/htdocs/webservices/server_order.php
index 6ba0fa2cd5e4f69aff873a7ec83ba252dadfd521..ee311e17bc1fbfc012a91755c71ae431a128eaec 100644
--- a/htdocs/webservices/server_order.php
+++ b/htdocs/webservices/server_order.php
@@ -71,18 +71,18 @@ $server->wsdl->addComplexType(
 				'entity' => array('name'=>'entity','type'=>'xsd:string')
 		)
 );
-// Define WSDL Return object
-$server->wsdl->addComplexType(
-		'result',
-		'complexType',
-		'struct',
-		'all',
-		'',
-		array(
-				'result_code' => array('name'=>'result_code','type'=>'xsd:string'),
-				'result_label' => array('name'=>'result_label','type'=>'xsd:string'),
-		)
-);
+// Define WSDL Return object
+$server->wsdl->addComplexType(
+		'result',
+		'complexType',
+		'struct',
+		'all',
+		'',
+		array(
+				'result_code' => array('name'=>'result_code','type'=>'xsd:string'),
+				'result_label' => array('name'=>'result_label','type'=>'xsd:string'),
+		)
+);
 
 // Define other specific objects
 $server->wsdl->addComplexType(
@@ -389,9 +389,9 @@ function getOrder($authentication,$id='',$ref='',$ref_ext='')
 					'project_id' => $order->fk_project,
 
 					'date' => $order->date_commande?dol_print_date($order->date_commande,'dayrfc'):'',
-					'date_creation' => $invoice->date_creation?dol_print_date($invoice->date_creation,'dayhourrfc'):'',
-					'date_validation' => $invoice->date_validation?dol_print_date($invoice->date_creation,'dayhourrfc'):'',
-					'date_modification' => $invoice->datem?dol_print_date($invoice->datem,'dayhourrfc'):'',
+					'date_creation' => $invoice->date_creation?dol_print_date($invoice->date_creation,'dayhourrfc'):'',
+					'date_validation' => $invoice->date_validation?dol_print_date($invoice->date_creation,'dayhourrfc'):'',
+					'date_modification' => $invoice->datem?dol_print_date($invoice->datem,'dayhourrfc'):'',
 								
 					'remise' => $order->remise,
 					'remise_percent' => $order->remise_percent,
@@ -406,7 +406,7 @@ function getOrder($authentication,$id='',$ref='',$ref_ext='')
 					'cond_reglement' => $order->cond_reglement,
 					'mode_reglement_id' => $order->mode_reglement_id,
 					'mode_reglement_code' => $order->mode_reglement_code,
-					'mode_reglement' => $order->mode_reglement,
+					'mode_reglement' => $order->mode_reglement,
 								
 					'date_livraison' => $order->date_livraison,
 					'fk_delivery_address' => $order->fk_delivery_address,
@@ -674,13 +674,13 @@ function createOrder($authentication,$order)
 
 		}
 
-		if ($newobject->statut == 1)   // We want order validated
-		{
-			$result=$newobject->validate($fuser);
-			if ($result < 0)
-			{
-				$error++;
-			}
+		if ($newobject->statut == 1)   // We want order validated
+		{
+			$result=$newobject->validate($fuser);
+			if ($result < 0)
+			{
+				$error++;
+			}
 		}
 				
 		if (! $error)
diff --git a/htdocs/webservices/server_productorservice.php b/htdocs/webservices/server_productorservice.php
index 04708072d0ef824efc648b17a382800a1cf5e735..e51caadb124bb22a20fe6bdfb83872e0081b20f3 100755
--- a/htdocs/webservices/server_productorservice.php
+++ b/htdocs/webservices/server_productorservice.php
@@ -145,12 +145,12 @@ $server->wsdl->addComplexType(
 	'sequence',
 	'',
 	array(
-		'image' => array(
-		'name' => 'image',
-		'type' => 'tns:image',
-		'minOccurs' => '0',
+		'image' => array(
+		'name' => 'image',
+		'type' => 'tns:image',
+		'minOccurs' => '0',
 		'maxOccurs' => 'unbounded'
-		)
+		)
 	)
 );
 
diff --git a/scripts/clicktodial/linphone.sh b/scripts/clicktodial/linphone.sh
new file mode 100755
index 0000000000000000000000000000000000000000..97c3bcb18d7b40bdab134fbac9483ce31a242fec
--- /dev/null
+++ b/scripts/clicktodial/linphone.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+#---------------------------------------------------------
+# Script to launch LinPhone softphone.
+# This script can be used to setup a ClickToDial system
+# when using LinPhone soft phone.
+# More information on http://wiki.dolibarr.org/index.php/Module_ClickToDial_En
+#---------------------------------------------------------
+
+# Note: Adding handler into gconf-tools seems to do nothing
+# gconftool-2 -t string -s /desktop/gnome/url-handlers/sip/command "linphone-3 -c %s"
+# gconftool-2 -s /desktop/gnome/url-handlers/sip/needs_terminal false -t bool
+# gconftool-2 -t bool -s /desktop/gnome/url-handlers/sip/enabled true
+
+echo Launch Linphone $1 $2
+
+param=`echo $1 | sed -s 's/^sip:[\/]*//' `
+
+/usr/bin/linphone-3 -c $param &
diff --git a/scripts/cron/cron_run_jobs.php b/scripts/cron/cron_run_jobs.php
index 159fadd3a614b151cbccad742e8137b80104b105..151af859fcd55ab6661a17621b63fdfda14bc215 100755
--- a/scripts/cron/cron_run_jobs.php
+++ b/scripts/cron/cron_run_jobs.php
@@ -31,33 +31,33 @@ if (! defined('NOLOGIN'))        define('NOLOGIN','1');
 //if (! defined('NOREQUIRETRAN'))  define('NOREQUIRETRAN','1');
 
 
-$sapi_type = php_sapi_name();
-$script_file = basename(__FILE__);
-$path=dirname(__FILE__).'/';
-
-// Test if batch mode
-if (substr($sapi_type, 0, 3) == 'cgi') {
-	echo "Error: You are using PHP for CGI. To execute ".$script_file." from command line, you must use PHP for CLI mode.\n";
-	exit;
-}
-
+$sapi_type = php_sapi_name();
+$script_file = basename(__FILE__);
+$path=dirname(__FILE__).'/';
+
+// Test if batch mode
+if (substr($sapi_type, 0, 3) == 'cgi') {
+	echo "Error: You are using PHP for CGI. To execute ".$script_file." from command line, you must use PHP for CLI mode.\n";
+	exit;
+}
+
 if (! isset($argv[1]) || ! $argv[1]) {
 	print "Usage: ".$script_file." securitykey userlogin cronjobid(optional)\n";
 	exit;
 }
-$key=$argv[1];
-
-if (! isset($argv[2]) || ! $argv[2]) {
-	print "Usage: ".$script_file." securitykey userlogin cronjobid(optional)\n";
-	exit;
-} else {
-	$userlogin=$argv[2];
-}
-
+$key=$argv[1];
+
+if (! isset($argv[2]) || ! $argv[2]) {
+	print "Usage: ".$script_file." securitykey userlogin cronjobid(optional)\n";
+	exit;
+} else {
+	$userlogin=$argv[2];
+}
+
 require_once ($path."../../htdocs/master.inc.php");
 require_once (DOL_DOCUMENT_ROOT."/cron/class/cronjob.class.php");
-require_once (DOL_DOCUMENT_ROOT.'/user/class/user.class.php');
-require_once (DOL_DOCUMENT_ROOT."/cron/class/cronjob.class.php");
+require_once (DOL_DOCUMENT_ROOT.'/user/class/user.class.php');
+require_once (DOL_DOCUMENT_ROOT."/cron/class/cronjob.class.php");
 
 
 /*
diff --git a/scripts/invoices/email_unpaid_invoices_to_representatives.php b/scripts/invoices/email_unpaid_invoices_to_representatives.php
index 83c27b23aab751a2d149300a07d609cd0a6c32f2..e62403366fbde63a4f48686fe4a917494fa21b17 100755
--- a/scripts/invoices/email_unpaid_invoices_to_representatives.php
+++ b/scripts/invoices/email_unpaid_invoices_to_representatives.php
@@ -44,7 +44,7 @@ if (! isset($argv[1]) || ! $argv[1] || ! in_array($argv[1],array('test','confirm
 	print "If you add a delay (nb of days), only invoice with due date < today + delay are included.\n";
 	exit;
 }
-$mode=$argv[1];
+$mode=$argv[1];
 
 
 require($path."../../htdocs/master.inc.php");
@@ -60,7 +60,7 @@ $now=dol_now('tzserver');
 $duration_value=$argv[2];
 
 $error = 0;
-print $script_file." launched with mode ".$mode.($duration_value?" delay=".$duration_value:"")."\n";
+print $script_file." launched with mode ".$mode.($duration_value?" delay=".$duration_value:"")."\n";
 
 $sql = "SELECT f.facnumber, f.total_ttc, s.nom as name, u.rowid as uid, u.lastname, u.firstname, u.email, u.lang";
 $sql .= " FROM ".MAIN_DB_PREFIX."facture as f";
@@ -155,8 +155,8 @@ function envoi_mail($mode,$oldemail,$message,$total,$userlang)
 
     $newlangs=new Translate('',$conf);
     $newlangs->setDefaultLang($userlang);
-    $newlangs->load("main");
-    $newlangs->load("bills");
+    $newlangs->load("main");
+    $newlangs->load("bills");
 
     $subject = "[".(empty($conf->global->MAIN_APPLICATION_TITLE)?'Dolibarr':$conf->global->MAIN_APPLICATION_TITLE)."] ".$newlangs->trans("ListOfYourUnpaidInvoices");
     $sendto = $oldemail;
@@ -168,8 +168,8 @@ function envoi_mail($mode,$oldemail,$message,$total,$userlang)
     dol_syslog("email_unpaid_invoices_to_representatives.php: send mail to ".$oldemail);
 
     $usehtml=0;
-    if (dol_textishtml($conf->global->SCRIPT_EMAIL_UNPAID_INVOICES_FOOTER)) $usehtml+=1;
-    if (dol_textishtml($conf->global->SCRIPT_EMAIL_UNPAID_INVOICES_HEADER)) $usehtml+=1;
+    if (dol_textishtml($conf->global->SCRIPT_EMAIL_UNPAID_INVOICES_FOOTER)) $usehtml+=1;
+    if (dol_textishtml($conf->global->SCRIPT_EMAIL_UNPAID_INVOICES_HEADER)) $usehtml+=1;
 
     $allmessage='';
     if (! empty($conf->global->SCRIPT_EMAIL_UNPAID_INVOICES_HEADER))
@@ -188,7 +188,7 @@ function envoi_mail($mode,$oldemail,$message,$total,$userlang)
     {
     	$allmessage.=$conf->global->SCRIPT_EMAIL_UNPAID_INVOICES_FOOTER;
     	if (dol_textishtml($conf->global->SCRIPT_EMAIL_UNPAID_INVOICES_FOOTER)) $usehtml+=1;
-    }
+    }
 
     $mail = new CMailFile(
         $subject,
@@ -207,8 +207,8 @@ function envoi_mail($mode,$oldemail,$message,$total,$userlang)
     $mail->errors_to = $errorsto;
 
     // Send or not email
-    if ($mode == 'confirm')
-    {
+    if ($mode == 'confirm')
+    {
     	$result=$mail->sendfile();
     }
     else
diff --git a/test/phpunit/AllTests.php b/test/phpunit/AllTests.php
index 38d90d19fdf98a09896072ead8baee2da93907b5..b22dd5b1ea294b41bfbb55707578d544046f8341 100644
--- a/test/phpunit/AllTests.php
+++ b/test/phpunit/AllTests.php
@@ -137,8 +137,8 @@ class AllTests
         $suite->addTestSuite('CompanyBankAccountTest');
         require_once dirname(__FILE__).'/ChargeSocialesTest.php';
         $suite->addTestSuite('ChargeSocialesTest');
-        require_once dirname(__FILE__).'/HolidayTest.php';
-        $suite->addTestSuite('HolidayTest');
+        require_once dirname(__FILE__).'/HolidayTest.php';
+        $suite->addTestSuite('HolidayTest');
 
         require_once dirname(__FILE__).'/CategorieTest.php';
         $suite->addTestSuite('CategorieTest');
@@ -147,12 +147,12 @@ class AllTests
         $suite->addTestSuite('WebservicesInvoicesTest');
         require_once dirname(__FILE__).'/WebservicesOrdersTest.php';
         $suite->addTestSuite('WebservicesOrdersTest');
-        require_once dirname(__FILE__).'/WebservicesOtherTest.php';
-        $suite->addTestSuite('WebservicesOtherTest');
-        require_once dirname(__FILE__).'/WebservicesThirdpartyTest.php';
-        $suite->addTestSuite('WebservicesThirdpartyTest');
-        require_once dirname(__FILE__).'/WebservicesUserTest.php';
-        $suite->addTestSuite('WebservicesUserTest');
+        require_once dirname(__FILE__).'/WebservicesOtherTest.php';
+        $suite->addTestSuite('WebservicesOtherTest');
+        require_once dirname(__FILE__).'/WebservicesThirdpartyTest.php';
+        $suite->addTestSuite('WebservicesThirdpartyTest');
+        require_once dirname(__FILE__).'/WebservicesUserTest.php';
+        $suite->addTestSuite('WebservicesUserTest');
 
         require_once dirname(__FILE__).'/ExportTest.php';
         $suite->addTestSuite('ExportTest');
diff --git a/test/phpunit/ContactTest.php b/test/phpunit/ContactTest.php
index 2a920d0bb3744942078d0cefe8cae00d6a65d02a..3f0beed9ba57de8dd1820f06f2546689bf42062e 100755
--- a/test/phpunit/ContactTest.php
+++ b/test/phpunit/ContactTest.php
@@ -30,10 +30,10 @@ require_once dirname(__FILE__).'/../../htdocs/master.inc.php';
 require_once dirname(__FILE__).'/../../htdocs/contact/class/contact.class.php';
 $langs->load("dict");
 
-if ($langs->defaultlang != 'en_US')
-{
-	print "Error: Default language for company to run tests must be set to en_US or auto. Current is ".$langs->defaultlang."\n";
-	exit;
+if ($langs->defaultlang != 'en_US')
+{
+	print "Error: Default language for company to run tests must be set to en_US or auto. Current is ".$langs->defaultlang."\n";
+	exit;
 }
 
 if (empty($user->id))
diff --git a/test/phpunit/CoreTest.php b/test/phpunit/CoreTest.php
index eba01ef016adeb2ae07b8db090638acd65cf36e3..a59308f4628798312f5dfe0d6826631ff9346165 100755
--- a/test/phpunit/CoreTest.php
+++ b/test/phpunit/CoreTest.php
@@ -126,10 +126,10 @@ class CoreTest extends PHPUnit_Framework_TestCase
     	global $dolibarr_main_prod;
 
 		global $dolibarr_main_url_root;
-		global $dolibarr_main_data_root;
-		global $dolibarr_main_document_root;
-		global $dolibarr_main_data_root_alt;
-		global $dolibarr_main_document_root_alt;
+		global $dolibarr_main_data_root;
+		global $dolibarr_main_document_root;
+		global $dolibarr_main_data_root_alt;
+		global $dolibarr_main_document_root_alt;
 		global $dolibarr_main_db_host;
 		global $dolibarr_main_db_port;
 		global $dolibarr_main_db_type;
diff --git a/test/phpunit/UserTest.php b/test/phpunit/UserTest.php
index abb7ab80cc55be477b98a19dfa16a5adaf1153f9..088115a64ecb6ea451a6f2d8db9873bb51d92c99 100644
--- a/test/phpunit/UserTest.php
+++ b/test/phpunit/UserTest.php
@@ -176,12 +176,19 @@ class UserTest extends PHPUnit_Framework_TestCase
 		$langs=$this->savlangs;
 		$db=$this->savdb;
 
-		$localobject->note='New note after update';
-    	$result=$localobject->update($user);
+		$this->changeProperties($localobject);
+		$result=$localobject->update($user);
 
     	print __METHOD__." id=".$localobject->id." result=".$result."\n";
     	$this->assertLessThan($result, 0);
-    	return $localobject;
+
+    	// Test everything are still same than specimen
+    	$newlocalobject=new User($this->savdb);
+    	$newlocalobject->initAsSpecimen();
+    	$this->changeProperties($newlocalobject);
+    	$this->assertEquals($this->objCompare($localobject,$newlocalobject,true,array('id','ref','pass_indatabase','pass_indatabase_crypted','date_creation','datelastlogin','datepreviouslogin')), array());    // Actual, Expected
+
+        return $localobject;
     }
 
     /**
@@ -204,6 +211,7 @@ class UserTest extends PHPUnit_Framework_TestCase
     	print __METHOD__." id=".$localobject->id." result=".$result."\n";
 
     	$this->assertLessThan($result, 0);
+
     	return $localobject;
     }
 
@@ -260,5 +268,54 @@ class UserTest extends PHPUnit_Framework_TestCase
     	return $result;
     }
 
+
+    /**
+     * Edit an object to test updates
+     *
+     * @param 	mixed	&$localobject		Object Facture
+     * @return	void
+     */
+    public function changeProperties(&$localobject)
+    {
+    	$localobject->note='New note after update';
+    }
+
+    /**
+     * Compare all public properties values of 2 objects
+     *
+     * @param 	Object		$oA						Object operand 1
+     * @param 	Object		$oB						Object operand 2
+     * @param	boolean		$ignoretype				False will not report diff if type of value differs
+     * @param	array		$fieldstoignorearray	Array of fields to ignore in diff
+     * @return	array								Array with differences
+     */
+    public function objCompare($oA,$oB,$ignoretype=true,$fieldstoignorearray=array('id'))
+    {
+    	$retAr=array();
+
+    	if (get_class($oA) !== get_class($oB))
+    	{
+    		$retAr[]="Supplied objects are not of same class.";
+    	}
+    	else
+    	{
+    		$oVarsA=get_object_vars($oA);
+    		$oVarsB=get_object_vars($oB);
+    		$aKeys=array_keys($oVarsA);
+    		foreach($aKeys as $sKey)
+    		{
+    			if (in_array($sKey,$fieldstoignorearray)) continue;
+    			if (! $ignoretype && $oVarsA[$sKey] !== $oVarsB[$sKey])
+    			{
+    				$retAr[]=$sKey.' : '.(is_object($oVarsA[$sKey])?get_class($oVarsA[$sKey]):$oVarsA[$sKey]).' <> '.(is_object($oVarsB[$sKey])?get_class($oVarsB[$sKey]):$oVarsB[$sKey]);
+    			}
+    			if ($ignoretype && $oVarsA[$sKey] != $oVarsB[$sKey])
+    			{
+    				$retAr[]=$sKey.' : '.(is_object($oVarsA[$sKey])?get_class($oVarsA[$sKey]):$oVarsA[$sKey]).' <> '.(is_object($oVarsB[$sKey])?get_class($oVarsB[$sKey]):$oVarsB[$sKey]);
+    			}
+    		}
+    	}
+    	return $retAr;
+    }
 }
 ?>
\ No newline at end of file
diff --git a/test/phpunit/WebservicesInvoicesTest.php b/test/phpunit/WebservicesInvoicesTest.php
index 17be4938ef51102c87d9e11386e4b49493806043..65983390cfdd0edd3011f52f87582a713c386f0c 100755
--- a/test/phpunit/WebservicesInvoicesTest.php
+++ b/test/phpunit/WebservicesInvoicesTest.php
@@ -116,63 +116,63 @@ class WebservicesInvoicesTest extends PHPUnit_Framework_TestCase
     	print __METHOD__."\n";
     }
 
-
-    /**
-     * testWSInvoices_xxx
-     *
-     * @return int
-     */
-    public function testWSInvoices_xxx()
-    {
-    	global $conf,$user,$langs,$db;
-    	$conf=$this->savconf;
-    	$user=$this->savuser;
-    	$langs=$this->savlangs;
-    	$db=$this->savdb;
-
-    	$WS_DOL_URL = DOL_MAIN_URL_ROOT.'/webservices/server_invoice.php';
-    	$WS_METHOD  = 'xxx';
-    	$ns='http://www.dolibarr.org/ns/';
-
-    	// Set the WebService URL
-    	print __METHOD__."Create nusoap_client for URL=".$WS_DOL_URL."\n";
-    	$soapclient = new nusoap_client($WS_DOL_URL);
-    	if ($soapclient)
-    	{
-    		$soapclient->soap_defencoding='UTF-8';
-    		$soapclient->decodeUTF8(false);
-    	}
-
-    	// Call the WebService method and store its result in $result.
-    	$authentication=array(
-    	'dolibarrkey'=>$conf->global->WEBSERVICES_KEY,
-    	'sourceapplication'=>'DEMO',
-    	'login'=>'admin',
-    	'password'=>'admin',
-    	'entity'=>'');
-
-    	// Test URL
-    	if ($WS_METHOD)
-    	{
-    		$parameters = array('authentication'=>$authentication);
-    		print __METHOD__."Call method ".$WS_METHOD."\n";
-    		$result = $soapclient->call($WS_METHOD,$parameters,$ns,'');
-    		if (! $result)
-    		{
-    			//var_dump($soapclient);
-    			print $soapclient->error_str;
-    			print "<br>\n\n";
-    			print $soapclient->request;
-    			print "<br>\n\n";
-    			print $soapclient->response;
-    			exit;
-    		}
-    	}
-
-    	print __METHOD__." result=".$result."\n";
-    	//$this->assertEquals('OK',$result['result']['result_code']);
-
-    	return $result;
+
+    /**
+     * testWSInvoices_xxx
+     *
+     * @return int
+     */
+    public function testWSInvoices_xxx()
+    {
+    	global $conf,$user,$langs,$db;
+    	$conf=$this->savconf;
+    	$user=$this->savuser;
+    	$langs=$this->savlangs;
+    	$db=$this->savdb;
+
+    	$WS_DOL_URL = DOL_MAIN_URL_ROOT.'/webservices/server_invoice.php';
+    	$WS_METHOD  = 'xxx';
+    	$ns='http://www.dolibarr.org/ns/';
+
+    	// Set the WebService URL
+    	print __METHOD__."Create nusoap_client for URL=".$WS_DOL_URL."\n";
+    	$soapclient = new nusoap_client($WS_DOL_URL);
+    	if ($soapclient)
+    	{
+    		$soapclient->soap_defencoding='UTF-8';
+    		$soapclient->decodeUTF8(false);
+    	}
+
+    	// Call the WebService method and store its result in $result.
+    	$authentication=array(
+    	'dolibarrkey'=>$conf->global->WEBSERVICES_KEY,
+    	'sourceapplication'=>'DEMO',
+    	'login'=>'admin',
+    	'password'=>'admin',
+    	'entity'=>'');
+
+    	// Test URL
+    	if ($WS_METHOD)
+    	{
+    		$parameters = array('authentication'=>$authentication);
+    		print __METHOD__."Call method ".$WS_METHOD."\n";
+    		$result = $soapclient->call($WS_METHOD,$parameters,$ns,'');
+    		if (! $result)
+    		{
+    			//var_dump($soapclient);
+    			print $soapclient->error_str;
+    			print "<br>\n\n";
+    			print $soapclient->request;
+    			print "<br>\n\n";
+    			print $soapclient->response;
+    			exit;
+    		}
+    	}
+
+    	print __METHOD__." result=".$result."\n";
+    	//$this->assertEquals('OK',$result['result']['result_code']);
+
+    	return $result;
     }
 
 }
diff --git a/test/phpunit/WebservicesOrdersTest.php b/test/phpunit/WebservicesOrdersTest.php
index f14aa1db9f8e8aed8ed6381b3c87fc753e231988..a4571557a4867a6a5e32c4ddefcc32a2cae0470f 100755
--- a/test/phpunit/WebservicesOrdersTest.php
+++ b/test/phpunit/WebservicesOrdersTest.php
@@ -116,242 +116,242 @@ class WebservicesOrdersTest extends PHPUnit_Framework_TestCase
     	print __METHOD__."\n";
     }
 
-
-    /**
-     * testWSOrder_xxx
-     *
-     * @return int
-     */
-    public function testWSOrder_xxx()
-    {
-    	global $conf,$user,$langs,$db;
-    	$conf=$this->savconf;
-    	$user=$this->savuser;
-    	$langs=$this->savlangs;
-    	$db=$this->savdb;
-
-    	$WS_DOL_URL = DOL_MAIN_URL_ROOT.'/webservices/server_order.php';
-    	$WS_METHOD  = 'xxx';
-    	$ns='http://www.dolibarr.org/ns/';
-
-    	// Set the WebService URL
-    	print __METHOD__."Create nusoap_client for URL=".$WS_DOL_URL."\n";
-    	$soapclient = new nusoap_client($WS_DOL_URL);
-    	if ($soapclient)
-    	{
-    		$soapclient->soap_defencoding='UTF-8';
-    		$soapclient->decodeUTF8(false);
-    	}
-
-    	// Call the WebService method and store its result in $result.
-    	$authentication=array(
-    	'dolibarrkey'=>$conf->global->WEBSERVICES_KEY,
-    	'sourceapplication'=>'DEMO',
-    	'login'=>'admin',
-    	'password'=>'admin',
-    	'entity'=>'');
-
-    	// Test URL
-    	if ($WS_METHOD)
-    	{
-    		$parameters = array('authentication'=>$authentication);
-    		print __METHOD__."Call method ".$WS_METHOD."\n";
-    		$result = $soapclient->call($WS_METHOD,$parameters,$ns,'');
-    		if (! $result)
-    		{
-    			//var_dump($soapclient);
-    			print $soapclient->error_str;
-    			print "<br>\n\n";
-    			print $soapclient->request;
-    			print "<br>\n\n";
-    			print $soapclient->response;
-    			exit;
-    		}
-    	}
-
-    	print __METHOD__." result=".$result."\n";
-    	//$this->assertEquals('OK',$result['result']['result_code']);
-
-    	return $result;
+
+    /**
+     * testWSOrder_xxx
+     *
+     * @return int
+     */
+    public function testWSOrder_xxx()
+    {
+    	global $conf,$user,$langs,$db;
+    	$conf=$this->savconf;
+    	$user=$this->savuser;
+    	$langs=$this->savlangs;
+    	$db=$this->savdb;
+
+    	$WS_DOL_URL = DOL_MAIN_URL_ROOT.'/webservices/server_order.php';
+    	$WS_METHOD  = 'xxx';
+    	$ns='http://www.dolibarr.org/ns/';
+
+    	// Set the WebService URL
+    	print __METHOD__."Create nusoap_client for URL=".$WS_DOL_URL."\n";
+    	$soapclient = new nusoap_client($WS_DOL_URL);
+    	if ($soapclient)
+    	{
+    		$soapclient->soap_defencoding='UTF-8';
+    		$soapclient->decodeUTF8(false);
+    	}
+
+    	// Call the WebService method and store its result in $result.
+    	$authentication=array(
+    	'dolibarrkey'=>$conf->global->WEBSERVICES_KEY,
+    	'sourceapplication'=>'DEMO',
+    	'login'=>'admin',
+    	'password'=>'admin',
+    	'entity'=>'');
+
+    	// Test URL
+    	if ($WS_METHOD)
+    	{
+    		$parameters = array('authentication'=>$authentication);
+    		print __METHOD__."Call method ".$WS_METHOD."\n";
+    		$result = $soapclient->call($WS_METHOD,$parameters,$ns,'');
+    		if (! $result)
+    		{
+    			//var_dump($soapclient);
+    			print $soapclient->error_str;
+    			print "<br>\n\n";
+    			print $soapclient->request;
+    			print "<br>\n\n";
+    			print $soapclient->response;
+    			exit;
+    		}
+    	}
+
+    	print __METHOD__." result=".$result."\n";
+    	//$this->assertEquals('OK',$result['result']['result_code']);
+
+    	return $result;
+    }
+
+
+
+    /**
+     * testWSOther_GetVersions
+     *
+     * @return int
+     */
+    public function testWSOther_GetVersions()
+    {
+    	global $conf,$user,$langs,$db;
+    	$conf=$this->savconf;
+    	$user=$this->savuser;
+    	$langs=$this->savlangs;
+    	$db=$this->savdb;
+
+    	$WS_DOL_URL = DOL_MAIN_URL_ROOT.'/webservices/server_other.php';
+    	$WS_METHOD  = 'getVersions';
+    	$ns='http://www.dolibarr.org/ns/';
+
+    	// Set the WebService URL
+    	print __METHOD__."Create nusoap_client for URL=".$WS_DOL_URL."\n";
+    	$soapclient = new nusoap_client($WS_DOL_URL);
+    	if ($soapclient)
+    	{
+    		$soapclient->soap_defencoding='UTF-8';
+    		$soapclient->decodeUTF8(false);
+    	}
+
+    	// Call the WebService method and store its result in $result.
+    	$authentication=array(
+    	'dolibarrkey'=>$conf->global->WEBSERVICES_KEY,
+    	'sourceapplication'=>'DEMO',
+    	'login'=>'admin',
+    	'password'=>'admin',
+    	'entity'=>'');
+
+    	// Test URL
+    	if ($WS_METHOD)
+    	{
+    		$parameters = array('authentication'=>$authentication);
+    		print __METHOD__."Call method ".$WS_METHOD."\n";
+    		$result = $soapclient->call($WS_METHOD,$parameters,$ns,'');
+    		if (! $result)
+    		{
+    			//var_dump($soapclient);
+    			print $soapclient->error_str;
+    			print "<br>\n\n";
+    			print $soapclient->request;
+    			print "<br>\n\n";
+    			print $soapclient->response;
+    			exit;
+    		}
+    	}
+
+    	print __METHOD__." result=".$result."\n";
+    	$this->assertEquals('OK',$result['result']['result_code']);
+
+    	return $result;
     }
 
 
-
-    /**
-     * testWSOther_GetVersions
-     *
-     * @return int
-     */
-    public function testWSOther_GetVersions()
-    {
-    	global $conf,$user,$langs,$db;
-    	$conf=$this->savconf;
-    	$user=$this->savuser;
-    	$langs=$this->savlangs;
-    	$db=$this->savdb;
-
-    	$WS_DOL_URL = DOL_MAIN_URL_ROOT.'/webservices/server_other.php';
-    	$WS_METHOD  = 'getVersions';
-    	$ns='http://www.dolibarr.org/ns/';
-
-    	// Set the WebService URL
-    	print __METHOD__."Create nusoap_client for URL=".$WS_DOL_URL."\n";
-    	$soapclient = new nusoap_client($WS_DOL_URL);
-    	if ($soapclient)
-    	{
-    		$soapclient->soap_defencoding='UTF-8';
-    		$soapclient->decodeUTF8(false);
-    	}
-
-    	// Call the WebService method and store its result in $result.
-    	$authentication=array(
-    	'dolibarrkey'=>$conf->global->WEBSERVICES_KEY,
-    	'sourceapplication'=>'DEMO',
-    	'login'=>'admin',
-    	'password'=>'admin',
-    	'entity'=>'');
-
-    	// Test URL
-    	if ($WS_METHOD)
-    	{
-    		$parameters = array('authentication'=>$authentication);
-    		print __METHOD__."Call method ".$WS_METHOD."\n";
-    		$result = $soapclient->call($WS_METHOD,$parameters,$ns,'');
-    		if (! $result)
-    		{
-    			//var_dump($soapclient);
-    			print $soapclient->error_str;
-    			print "<br>\n\n";
-    			print $soapclient->request;
-    			print "<br>\n\n";
-    			print $soapclient->response;
-    			exit;
-    		}
-    	}
-
-    	print __METHOD__." result=".$result."\n";
-    	$this->assertEquals('OK',$result['result']['result_code']);
-
-    	return $result;
-    }
-
-
-    /**
-     * testWSThirdparty
-     *
-     * @return int
-     */
-    public function testWSThirdparty()
-    {
-    	global $conf,$user,$langs,$db;
-    	$conf=$this->savconf;
-    	$user=$this->savuser;
-    	$langs=$this->savlangs;
-    	$db=$this->savdb;
-
-    	$WS_DOL_URL = DOL_MAIN_URL_ROOT.'/webservices/server_thirdparty.php';
-    	$WS_METHOD  = 'xxx';
-    	$ns='http://www.dolibarr.org/ns/';
-
-    	// Set the WebService URL
-    	print __METHOD__."Create nusoap_client for URL=".$WS_DOL_URL."\n";
-    	$soapclient = new nusoap_client($WS_DOL_URL);
-    	if ($soapclient)
-    	{
-    		$soapclient->soap_defencoding='UTF-8';
-    		$soapclient->decodeUTF8(false);
-    	}
-
-    	// Call the WebService method and store its result in $result.
-    	$authentication=array(
-    	'dolibarrkey'=>$conf->global->WEBSERVICES_KEY,
-    	'sourceapplication'=>'DEMO',
-    	'login'=>'admin',
-    	'password'=>'admin',
-    	'entity'=>'');
-
-    	// Test URL
-    	if ($WS_METHOD)
-    	{
-    		$parameters = array('authentication'=>$authentication);
-    		print __METHOD__."Call method ".$WS_METHOD."\n";
-    		$result = $soapclient->call($WS_METHOD,$parameters,$ns,'');
-    		if (! $result)
-    		{
-    			//var_dump($soapclient);
-    			print $soapclient->error_str;
-    			print "<br>\n\n";
-    			print $soapclient->request;
-    			print "<br>\n\n";
-    			print $soapclient->response;
-    			exit;
-    		}
-    	}
-
-    	print __METHOD__." result=".$result."\n";
-    	//$this->assertEquals('OK',$result['result']['result_code']);
-
-    	return $result;
-    }
-
-
-    /**
-     * testWSUser
-     *
-     * @return int
-     */
-    public function testWSUser()
-    {
-    	global $conf,$user,$langs,$db;
-    	$conf=$this->savconf;
-    	$user=$this->savuser;
-    	$langs=$this->savlangs;
-    	$db=$this->savdb;
-
-    	$WS_DOL_URL = DOL_MAIN_URL_ROOT.'/webservices/server_user.php';
-    	$WS_METHOD  = 'xxx';
-    	$ns='http://www.dolibarr.org/ns/';
-
-    	// Set the WebService URL
-    	print __METHOD__."Create nusoap_client for URL=".$WS_DOL_URL."\n";
-    	$soapclient = new nusoap_client($WS_DOL_URL);
-    	if ($soapclient)
-    	{
-    		$soapclient->soap_defencoding='UTF-8';
-    		$soapclient->decodeUTF8(false);
-    	}
-
-    	// Call the WebService method and store its result in $result.
-    	$authentication=array(
-    	'dolibarrkey'=>$conf->global->WEBSERVICES_KEY,
-    	'sourceapplication'=>'DEMO',
-    	'login'=>'admin',
-    	'password'=>'admin',
-    	'entity'=>'');
-
-    	// Test URL
-    	if ($WS_METHOD)
-    	{
-    		$parameters = array('authentication'=>$authentication);
-    		print __METHOD__."Call method ".$WS_METHOD."\n";
-    		$result = $soapclient->call($WS_METHOD,$parameters,$ns,'');
-    		if (! $result)
-    		{
-    			//var_dump($soapclient);
-    			print $soapclient->error_str;
-    			print "<br>\n\n";
-    			print $soapclient->request;
-    			print "<br>\n\n";
-    			print $soapclient->response;
-    			exit;
-    		}
-    	}
-
-    	print __METHOD__." result=".$result."\n";
-    	//$this->assertEquals('OK',$result['result']['result_code']);
-
-    	return $result;
-    }
+    /**
+     * testWSThirdparty
+     *
+     * @return int
+     */
+    public function testWSThirdparty()
+    {
+    	global $conf,$user,$langs,$db;
+    	$conf=$this->savconf;
+    	$user=$this->savuser;
+    	$langs=$this->savlangs;
+    	$db=$this->savdb;
+
+    	$WS_DOL_URL = DOL_MAIN_URL_ROOT.'/webservices/server_thirdparty.php';
+    	$WS_METHOD  = 'xxx';
+    	$ns='http://www.dolibarr.org/ns/';
+
+    	// Set the WebService URL
+    	print __METHOD__."Create nusoap_client for URL=".$WS_DOL_URL."\n";
+    	$soapclient = new nusoap_client($WS_DOL_URL);
+    	if ($soapclient)
+    	{
+    		$soapclient->soap_defencoding='UTF-8';
+    		$soapclient->decodeUTF8(false);
+    	}
+
+    	// Call the WebService method and store its result in $result.
+    	$authentication=array(
+    	'dolibarrkey'=>$conf->global->WEBSERVICES_KEY,
+    	'sourceapplication'=>'DEMO',
+    	'login'=>'admin',
+    	'password'=>'admin',
+    	'entity'=>'');
+
+    	// Test URL
+    	if ($WS_METHOD)
+    	{
+    		$parameters = array('authentication'=>$authentication);
+    		print __METHOD__."Call method ".$WS_METHOD."\n";
+    		$result = $soapclient->call($WS_METHOD,$parameters,$ns,'');
+    		if (! $result)
+    		{
+    			//var_dump($soapclient);
+    			print $soapclient->error_str;
+    			print "<br>\n\n";
+    			print $soapclient->request;
+    			print "<br>\n\n";
+    			print $soapclient->response;
+    			exit;
+    		}
+    	}
+
+    	print __METHOD__." result=".$result."\n";
+    	//$this->assertEquals('OK',$result['result']['result_code']);
+
+    	return $result;
+    }
+
+
+    /**
+     * testWSUser
+     *
+     * @return int
+     */
+    public function testWSUser()
+    {
+    	global $conf,$user,$langs,$db;
+    	$conf=$this->savconf;
+    	$user=$this->savuser;
+    	$langs=$this->savlangs;
+    	$db=$this->savdb;
+
+    	$WS_DOL_URL = DOL_MAIN_URL_ROOT.'/webservices/server_user.php';
+    	$WS_METHOD  = 'xxx';
+    	$ns='http://www.dolibarr.org/ns/';
+
+    	// Set the WebService URL
+    	print __METHOD__."Create nusoap_client for URL=".$WS_DOL_URL."\n";
+    	$soapclient = new nusoap_client($WS_DOL_URL);
+    	if ($soapclient)
+    	{
+    		$soapclient->soap_defencoding='UTF-8';
+    		$soapclient->decodeUTF8(false);
+    	}
+
+    	// Call the WebService method and store its result in $result.
+    	$authentication=array(
+    	'dolibarrkey'=>$conf->global->WEBSERVICES_KEY,
+    	'sourceapplication'=>'DEMO',
+    	'login'=>'admin',
+    	'password'=>'admin',
+    	'entity'=>'');
+
+    	// Test URL
+    	if ($WS_METHOD)
+    	{
+    		$parameters = array('authentication'=>$authentication);
+    		print __METHOD__."Call method ".$WS_METHOD."\n";
+    		$result = $soapclient->call($WS_METHOD,$parameters,$ns,'');
+    		if (! $result)
+    		{
+    			//var_dump($soapclient);
+    			print $soapclient->error_str;
+    			print "<br>\n\n";
+    			print $soapclient->request;
+    			print "<br>\n\n";
+    			print $soapclient->response;
+    			exit;
+    		}
+    	}
+
+    	print __METHOD__." result=".$result."\n";
+    	//$this->assertEquals('OK',$result['result']['result_code']);
+
+    	return $result;
+    }
 
 }
 ?>
\ No newline at end of file
diff --git a/test/phpunit/WebservicesOtherTest.php b/test/phpunit/WebservicesOtherTest.php
index 14cb83488eb865d0329d727b2b72ac459d2a8006..e06477e7de948d72c92c02c5b6b4000980203180 100755
--- a/test/phpunit/WebservicesOtherTest.php
+++ b/test/phpunit/WebservicesOtherTest.php
@@ -116,64 +116,64 @@ class WebservicesOtherTest extends PHPUnit_Framework_TestCase
     	print __METHOD__."\n";
     }
 
-
-    /**
-     * testWSOther_GetVersions
-     *
-     * @return int
-     */
-    public function testWSOther_GetVersions()
-    {
-    	global $conf,$user,$langs,$db;
-    	$conf=$this->savconf;
-    	$user=$this->savuser;
-    	$langs=$this->savlangs;
-    	$db=$this->savdb;
-
-    	$WS_DOL_URL = DOL_MAIN_URL_ROOT.'/webservices/server_other.php';
-    	$WS_METHOD  = 'getVersions';
-    	$ns='http://www.dolibarr.org/ns/';
-
-    	// Set the WebService URL
-    	print __METHOD__."Create nusoap_client for URL=".$WS_DOL_URL."\n";
-    	$soapclient = new nusoap_client($WS_DOL_URL);
-    	if ($soapclient)
-    	{
-    		$soapclient->soap_defencoding='UTF-8';
-    		$soapclient->decodeUTF8(false);
-    	}
-
-    	// Call the WebService method and store its result in $result.
-    	$authentication=array(
-    	'dolibarrkey'=>$conf->global->WEBSERVICES_KEY,
-    	'sourceapplication'=>'DEMO',
-    	'login'=>'admin',
-    	'password'=>'admin',
-    	'entity'=>'');
-
-    	// Test URL
-    	if ($WS_METHOD)
-    	{
-    		$parameters = array('authentication'=>$authentication);
-    		print __METHOD__."Call method ".$WS_METHOD."\n";
-    		$result = $soapclient->call($WS_METHOD,$parameters,$ns,'');
-    		if (! $result)
-    		{
-    			//var_dump($soapclient);
-    			print $soapclient->error_str;
-    			print "<br>\n\n";
-    			print $soapclient->request;
-    			print "<br>\n\n";
-    			print $soapclient->response;
-    			exit;
-    		}
-    	}
-
-    	print __METHOD__." result=".$result."\n";
-    	$this->assertEquals('OK',$result['result']['result_code']);
-
-    	return $result;
-    }
+
+    /**
+     * testWSOther_GetVersions
+     *
+     * @return int
+     */
+    public function testWSOther_GetVersions()
+    {
+    	global $conf,$user,$langs,$db;
+    	$conf=$this->savconf;
+    	$user=$this->savuser;
+    	$langs=$this->savlangs;
+    	$db=$this->savdb;
+
+    	$WS_DOL_URL = DOL_MAIN_URL_ROOT.'/webservices/server_other.php';
+    	$WS_METHOD  = 'getVersions';
+    	$ns='http://www.dolibarr.org/ns/';
+
+    	// Set the WebService URL
+    	print __METHOD__."Create nusoap_client for URL=".$WS_DOL_URL."\n";
+    	$soapclient = new nusoap_client($WS_DOL_URL);
+    	if ($soapclient)
+    	{
+    		$soapclient->soap_defencoding='UTF-8';
+    		$soapclient->decodeUTF8(false);
+    	}
+
+    	// Call the WebService method and store its result in $result.
+    	$authentication=array(
+    	'dolibarrkey'=>$conf->global->WEBSERVICES_KEY,
+    	'sourceapplication'=>'DEMO',
+    	'login'=>'admin',
+    	'password'=>'admin',
+    	'entity'=>'');
+
+    	// Test URL
+    	if ($WS_METHOD)
+    	{
+    		$parameters = array('authentication'=>$authentication);
+    		print __METHOD__."Call method ".$WS_METHOD."\n";
+    		$result = $soapclient->call($WS_METHOD,$parameters,$ns,'');
+    		if (! $result)
+    		{
+    			//var_dump($soapclient);
+    			print $soapclient->error_str;
+    			print "<br>\n\n";
+    			print $soapclient->request;
+    			print "<br>\n\n";
+    			print $soapclient->response;
+    			exit;
+    		}
+    	}
+
+    	print __METHOD__." result=".$result."\n";
+    	$this->assertEquals('OK',$result['result']['result_code']);
+
+    	return $result;
+    }
 
 }
 ?>
\ No newline at end of file
diff --git a/test/phpunit/WebservicesThirdpartyTest.php b/test/phpunit/WebservicesThirdpartyTest.php
index 0d54a2d643499f7d572266dd1b059220fcb802dd..b28ac8fa2d82b3b0d168abc167132b5a5dbf5e84 100755
--- a/test/phpunit/WebservicesThirdpartyTest.php
+++ b/test/phpunit/WebservicesThirdpartyTest.php
@@ -116,64 +116,64 @@ class WebservicesThirdpartyTest extends PHPUnit_Framework_TestCase
     	print __METHOD__."\n";
     }
 
-
-    /**
-     * testWSThirdparty_xxx
-     *
-     * @return int
-     */
-    public function testWSThirdparty_xxx()
-    {
-    	global $conf,$user,$langs,$db;
-    	$conf=$this->savconf;
-    	$user=$this->savuser;
-    	$langs=$this->savlangs;
-    	$db=$this->savdb;
-
-    	$WS_DOL_URL = DOL_MAIN_URL_ROOT.'/webservices/server_thirdparty.php';
-    	$WS_METHOD  = 'xxx';
-    	$ns='http://www.dolibarr.org/ns/';
-
-    	// Set the WebService URL
-    	print __METHOD__."Create nusoap_client for URL=".$WS_DOL_URL."\n";
-    	$soapclient = new nusoap_client($WS_DOL_URL);
-    	if ($soapclient)
-    	{
-    		$soapclient->soap_defencoding='UTF-8';
-    		$soapclient->decodeUTF8(false);
-    	}
-
-    	// Call the WebService method and store its result in $result.
-    	$authentication=array(
-    	'dolibarrkey'=>$conf->global->WEBSERVICES_KEY,
-    	'sourceapplication'=>'DEMO',
-    	'login'=>'admin',
-    	'password'=>'admin',
-    	'entity'=>'');
-
-    	// Test URL
-    	if ($WS_METHOD)
-    	{
-    		$parameters = array('authentication'=>$authentication);
-    		print __METHOD__."Call method ".$WS_METHOD."\n";
-    		$result = $soapclient->call($WS_METHOD,$parameters,$ns,'');
-    		if (! $result)
-    		{
-    			//var_dump($soapclient);
-    			print $soapclient->error_str;
-    			print "<br>\n\n";
-    			print $soapclient->request;
-    			print "<br>\n\n";
-    			print $soapclient->response;
-    			exit;
-    		}
-    	}
-
-    	print __METHOD__." result=".$result."\n";
-    	//$this->assertEquals('OK',$result['result']['result_code']);
-
-    	return $result;
-    }
-
+
+    /**
+     * testWSThirdparty_xxx
+     *
+     * @return int
+     */
+    public function testWSThirdparty_xxx()
+    {
+    	global $conf,$user,$langs,$db;
+    	$conf=$this->savconf;
+    	$user=$this->savuser;
+    	$langs=$this->savlangs;
+    	$db=$this->savdb;
+
+    	$WS_DOL_URL = DOL_MAIN_URL_ROOT.'/webservices/server_thirdparty.php';
+    	$WS_METHOD  = 'xxx';
+    	$ns='http://www.dolibarr.org/ns/';
+
+    	// Set the WebService URL
+    	print __METHOD__."Create nusoap_client for URL=".$WS_DOL_URL."\n";
+    	$soapclient = new nusoap_client($WS_DOL_URL);
+    	if ($soapclient)
+    	{
+    		$soapclient->soap_defencoding='UTF-8';
+    		$soapclient->decodeUTF8(false);
+    	}
+
+    	// Call the WebService method and store its result in $result.
+    	$authentication=array(
+    	'dolibarrkey'=>$conf->global->WEBSERVICES_KEY,
+    	'sourceapplication'=>'DEMO',
+    	'login'=>'admin',
+    	'password'=>'admin',
+    	'entity'=>'');
+
+    	// Test URL
+    	if ($WS_METHOD)
+    	{
+    		$parameters = array('authentication'=>$authentication);
+    		print __METHOD__."Call method ".$WS_METHOD."\n";
+    		$result = $soapclient->call($WS_METHOD,$parameters,$ns,'');
+    		if (! $result)
+    		{
+    			//var_dump($soapclient);
+    			print $soapclient->error_str;
+    			print "<br>\n\n";
+    			print $soapclient->request;
+    			print "<br>\n\n";
+    			print $soapclient->response;
+    			exit;
+    		}
+    	}
+
+    	print __METHOD__." result=".$result."\n";
+    	//$this->assertEquals('OK',$result['result']['result_code']);
+
+    	return $result;
+    }
+
 }
 ?>
\ No newline at end of file
diff --git a/test/phpunit/WebservicesUserTest.php b/test/phpunit/WebservicesUserTest.php
index 5cfa0f735f1fe09d7e1279514b4f293f4480cf82..9ef2278015b94544a1a8191345782ad38618b5de 100755
--- a/test/phpunit/WebservicesUserTest.php
+++ b/test/phpunit/WebservicesUserTest.php
@@ -116,64 +116,64 @@ class WebservicesUserTest extends PHPUnit_Framework_TestCase
     	print __METHOD__."\n";
     }
 
-
-    /**
-     * testWSUser_xxx
-     *
-     * @return int
-     */
-    public function testWSUser_xxx()
-    {
-    	global $conf,$user,$langs,$db;
-    	$conf=$this->savconf;
-    	$user=$this->savuser;
-    	$langs=$this->savlangs;
-    	$db=$this->savdb;
-
-    	$WS_DOL_URL = DOL_MAIN_URL_ROOT.'/webservices/server_other.php';
-    	$WS_METHOD  = 'xxx';
-    	$ns='http://www.dolibarr.org/ns/';
-
-    	// Set the WebService URL
-    	print __METHOD__."Create nusoap_client for URL=".$WS_DOL_URL."\n";
-    	$soapclient = new nusoap_client($WS_DOL_URL);
-    	if ($soapclient)
-    	{
-    		$soapclient->soap_defencoding='UTF-8';
-    		$soapclient->decodeUTF8(false);
-    	}
-
-    	// Call the WebService method and store its result in $result.
-    	$authentication=array(
-    	'dolibarrkey'=>$conf->global->WEBSERVICES_KEY,
-    	'sourceapplication'=>'DEMO',
-    	'login'=>'admin',
-    	'password'=>'admin',
-    	'entity'=>'');
-
-    	// Test URL
-    	if ($WS_METHOD)
-    	{
-    		$parameters = array('authentication'=>$authentication);
-    		print __METHOD__."Call method ".$WS_METHOD."\n";
-    		$result = $soapclient->call($WS_METHOD,$parameters,$ns,'');
-    		if (! $result)
-    		{
-    			//var_dump($soapclient);
-    			print $soapclient->error_str;
-    			print "<br>\n\n";
-    			print $soapclient->request;
-    			print "<br>\n\n";
-    			print $soapclient->response;
-    			exit;
-    		}
-    	}
-
-    	print __METHOD__." result=".$result."\n";
-    	//$this->assertEquals('OK',$result['result']['result_code']);
-
-    	return $result;
-    }
+
+    /**
+     * testWSUser_xxx
+     *
+     * @return int
+     */
+    public function testWSUser_xxx()
+    {
+    	global $conf,$user,$langs,$db;
+    	$conf=$this->savconf;
+    	$user=$this->savuser;
+    	$langs=$this->savlangs;
+    	$db=$this->savdb;
+
+    	$WS_DOL_URL = DOL_MAIN_URL_ROOT.'/webservices/server_other.php';
+    	$WS_METHOD  = 'xxx';
+    	$ns='http://www.dolibarr.org/ns/';
+
+    	// Set the WebService URL
+    	print __METHOD__."Create nusoap_client for URL=".$WS_DOL_URL."\n";
+    	$soapclient = new nusoap_client($WS_DOL_URL);
+    	if ($soapclient)
+    	{
+    		$soapclient->soap_defencoding='UTF-8';
+    		$soapclient->decodeUTF8(false);
+    	}
+
+    	// Call the WebService method and store its result in $result.
+    	$authentication=array(
+    	'dolibarrkey'=>$conf->global->WEBSERVICES_KEY,
+    	'sourceapplication'=>'DEMO',
+    	'login'=>'admin',
+    	'password'=>'admin',
+    	'entity'=>'');
+
+    	// Test URL
+    	if ($WS_METHOD)
+    	{
+    		$parameters = array('authentication'=>$authentication);
+    		print __METHOD__."Call method ".$WS_METHOD."\n";
+    		$result = $soapclient->call($WS_METHOD,$parameters,$ns,'');
+    		if (! $result)
+    		{
+    			//var_dump($soapclient);
+    			print $soapclient->error_str;
+    			print "<br>\n\n";
+    			print $soapclient->request;
+    			print "<br>\n\n";
+    			print $soapclient->response;
+    			exit;
+    		}
+    	}
+
+    	print __METHOD__." result=".$result."\n";
+    	//$this->assertEquals('OK',$result['result']['result_code']);
+
+    	return $result;
+    }
 
 }
 ?>
\ No newline at end of file