diff --git a/ChangeLog b/ChangeLog
index 383e3477e0a41370e58f539ec3c75f05310d2dec..d97bfe9a9ceb7208bbfcc0038ec49e55edbacb35 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -130,6 +130,9 @@ Fix: [ bug #1367 ] "Show invoice" link after a POS sell throws an error.
 Fix: TCPDF error file not found in member card generation.
 Fix: [ bug #1380 ] Customer invoices are not grouped in company results report.
 Fix: [ bug #1393 ] PHP Warning when creating a supplier invoice.
+Fix: [ bug #1399 ] [pgsql] Silent warning when setting a propal as "facturée" in propal.php
+Fix: When number reach 9999 with default numbering module, next number
+     will be 10000 instead of 0000 and error.
 
 ***** ChangeLog for 3.5.2 compared to 3.5.1 *****
 Fix: Can't add user for a task.
diff --git a/htdocs/admin/boxes.php b/htdocs/admin/boxes.php
index 31d313b84e9dd0d7600cc3cc13410b39559b21f1..5c2c8176842ea847166a43ed389f9b57160a4bc1 100644
--- a/htdocs/admin/boxes.php
+++ b/htdocs/admin/boxes.php
@@ -57,7 +57,7 @@ if ($action == 'add')
 
     $db->begin();
 
-	// Initialize distinctfkuser with all already existing values of fk_user (user that use a personalized view of boxes for pos)
+	// Initialize distinct fkuser with all already existing values of fk_user (user that use a personalized view of boxes for page "pos")
 	$distinctfkuser=array();
 	if (! $error)
 	{
@@ -85,14 +85,31 @@ if ($action == 'add')
 		}
 	}
 
+	$distinctfkuser['0']='0';	// Add entry for fk_user = 0. We must use string as key and val
+
 	foreach($distinctfkuser as $fk_user)
 	{
-	    if (! $error && $fk_user != 0)    // We will add fk_user = 0 later.
+	    if (! $error && $fk_user != '')
 	    {
+	    	$nbboxonleft=$nbboxonright=0;
+	    	$sql = "SELECT box_order FROM ".MAIN_DB_PREFIX."boxes WHERE position = ".GETPOST("pos","alpha")." AND fk_user = ".$fk_user." AND entity = ".$conf->entity;
+	        dol_syslog("boxes.php activate box sql=".$sql);
+	        $resql = $db->query($sql);
+	        if ($resql)
+	        {
+	        	while($obj = $db->fetch_object($resql))
+	        	{
+					$boxorder=$obj->box_order;
+					if (preg_match('/A/',$boxorder)) $nbboxonleft++;
+					if (preg_match('/B/',$boxorder)) $nbboxonright++;
+	        	}
+	        }
+	        else dol_print_error($db);
+
 	        $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes (";
 	        $sql.= "box_id, position, box_order, fk_user, entity";
 	        $sql.= ") values (";
-	        $sql.= GETPOST("boxid","int").", ".GETPOST("pos","alpha").", 'A01', ".$fk_user.", ".$conf->entity;
+	        $sql.= GETPOST("boxid","int").", ".GETPOST("pos","alpha").", '".(($nbboxonleft > $nbboxonright) ? 'B01' : 'A01')."', ".$fk_user.", ".$conf->entity;
 	        $sql.= ")";
 
 	        dol_syslog("boxes.php activate box sql=".$sql);
@@ -105,24 +122,6 @@ if ($action == 'add')
 	    }
 	}
 
-	// If value 0 was not included, we add it.
-	if (! $error)
-	{
-	    $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes (";
-	    $sql.= "box_id, position, box_order, fk_user, entity";
-	    $sql.= ") values (";
-	    $sql.= GETPOST("boxid","int").", ".GETPOST("pos","alpha").", 'A01', 0, ".$conf->entity;
-	    $sql.= ")";
-
-	    dol_syslog("boxes.php activate box sql=".$sql);
-	    $resql = $db->query($sql);
-        if (! $resql)
-        {
-		    $errmesg=$db->lasterror();
-            $error++;
-        }
-	}
-
 	if (! $error)
 	{
 		header("Location: boxes.php");
diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php
index 16f9aed618fe3cbdaa691f55452e3f21d5ecce21..d834929d00f4530913a64b0d74bd549ecdb856a7 100644
--- a/htdocs/admin/dict.php
+++ b/htdocs/admin/dict.php
@@ -532,9 +532,7 @@ if (GETPOST('actionadd') || GETPOST('actionmodify'))
         $result = $db->query($sql);
         if ($result)	// Add is ok
         {
-            //$oldid=$id;
-            //$_POST=array('id'=>$oldid);	// Clean $_POST array, we keep only
-            //$_GET["id"]=$_POST["id"];   // Force affichage dictionnaire en cours d'edition
+            $_POST=array('id'=>$id);	// Clean $_POST array, we keep only
         }
         else
         {
diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php
index c843da689988e059ada33b75b954dfe24bd04e8d..9c35faef31f47d62fddad0b79a1a34d37a4a17ba 100644
--- a/htdocs/comm/propal/class/propal.class.php
+++ b/htdocs/comm/propal/class/propal.class.php
@@ -1724,7 +1724,7 @@ class Propal extends CommonObject
         $this->db->begin();
 
         $sql = "UPDATE ".MAIN_DB_PREFIX."propal";
-        $sql.= " SET fk_statut = ".$statut.", note_private = '".$this->db->escape($note)."', date_cloture=".$this->db->idate($now).", fk_user_cloture=".$user->id;
+        $sql.= " SET fk_statut = ".$statut.", note_private = '".$this->db->escape($note)."', date_cloture='".$this->db->idate($now)."', fk_user_cloture=".$user->id;
         $sql.= " WHERE rowid = ".$this->id;
 
         $resql=$this->db->query($sql);
diff --git a/htdocs/compta/prelevement/fiche.php b/htdocs/compta/prelevement/fiche.php
index 7f1a671de4af59ab0d9cec5ee67f2d8faaaecb21..e594beae1d627ced9035dab121fca579f37efd2c 100644
--- a/htdocs/compta/prelevement/fiche.php
+++ b/htdocs/compta/prelevement/fiche.php
@@ -133,7 +133,7 @@ if ($action == 'infocredit' && $user->rights->prelevement->bons->credit)
 $bon = new BonPrelevement($db,"");
 $form = new Form($db);
 
-llxHeader('',$langs->trans("WithdrawalsReceipts"));                                                                     i
+llxHeader('',$langs->trans("WithdrawalsReceipts"));
 
 
 if ($id > 0)
@@ -151,7 +151,7 @@ if ($id > 0)
 	/*if ($action == 'credite')
 	{
 		print $form->formconfirm("fiche.php?id=".$bon->id,$langs->trans("ClassCredited"),$langs->trans("ClassCreditedConfirm"),"confirm_credite",'',1,1);
-		
+
 	}*/
 
 	print '<table class="border" width="100%">';
diff --git a/htdocs/core/db/pgsql.class.php b/htdocs/core/db/pgsql.class.php
index ca75b493ccac66fedda62e4c83d98e90ec45f881..e7e7df739b7345e6c946ef3edaab428c8a24f6a4 100644
--- a/htdocs/core/db/pgsql.class.php
+++ b/htdocs/core/db/pgsql.class.php
@@ -196,7 +196,8 @@ class DoliDBPgsql extends DoliDB
 
     			// nuke unsigned
     			$line=preg_replace('/(int\w+|smallint)\s+unsigned/i','\\1',$line);
-
+    			$line=preg_replace('/as signed/i','as integer',$line);
+    			 
     			// blob -> text
     			$line=preg_replace('/\w*blob/i','text',$line);
 
diff --git a/htdocs/core/lib/functions2.lib.php b/htdocs/core/lib/functions2.lib.php
index cc84823c2761f63f3ea679005c2ec593198cd414..917ceaf0e650f38c86d8199ce0eb67a3bbc6704d 100644
--- a/htdocs/core/lib/functions2.lib.php
+++ b/htdocs/core/lib/functions2.lib.php
@@ -536,7 +536,7 @@ function array2table($data,$tableMarkup=1,$tableoptions='',$troptions='',$tdopti
  * @param   Societe		$objsoc			The company that own the object we need a counter for
  * @param   string		$date			Date to use for the {y},{m},{d} tags.
  * @param   string		$mode           'next' for next value or 'last' for last value
- * @return 	string					    New value
+ * @return 	string					    New value (numeric) or error message
  */
 function get_next_value($db,$mask,$table,$field,$where='',$objsoc='',$date='',$mode='next')
 {
@@ -798,6 +798,12 @@ function get_next_value($db,$mask,$table,$field,$where='',$objsoc='',$date='',$m
     {
         $counter++;
 
+        // If value for $counter has a length higher than $maskcounter chars
+        if ($counter >= pow(10, dol_strlen($maskcounter)))
+        {
+        	$counter='ErrorMaxNumberReachForThisMask';
+        }
+
         if (! empty($maskrefclient_maskcounter))
         {
             //print "maskrefclient_maskcounter=".$maskrefclient_maskcounter." maskwithnocode=".$maskwithnocode." maskrefclient=".$maskrefclient."\n<br>";
@@ -839,6 +845,7 @@ function get_next_value($db,$mask,$table,$field,$where='',$objsoc='',$date='',$m
                 $maskrefclient_counter = $maskrefclient_obj->val;
             }
             else dol_print_error($db);
+
             if (empty($maskrefclient_counter) || preg_match('/[^0-9]/i',$maskrefclient_counter)) $maskrefclient_counter=$maskrefclient_maskoffset;
 			$maskrefclient_counter++;
         }
diff --git a/htdocs/core/modules/commande/mod_commande_marbre.php b/htdocs/core/modules/commande/mod_commande_marbre.php
index 2ccbff754917c125cddeb15cbe86968cdac3e897..8075099cdd688d737b8d81f2a6780a1f9b219edf 100644
--- a/htdocs/core/modules/commande/mod_commande_marbre.php
+++ b/htdocs/core/modules/commande/mod_commande_marbre.php
@@ -71,7 +71,7 @@ class mod_commande_marbre extends ModeleNumRefCommandes
 		$coyymm=''; $max='';
 
 		$posindice=8;
-		$sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max";
+		$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
 		$sql.= " FROM ".MAIN_DB_PREFIX."commande";
 		$sql.= " WHERE ref LIKE '".$this->prefix."____-%'";
 		$sql.= " AND entity = ".$conf->entity;
@@ -105,7 +105,7 @@ class mod_commande_marbre extends ModeleNumRefCommandes
 
 		// D'abord on recupere la valeur max
 		$posindice=8;
-		$sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max";
+		$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
 		$sql.= " FROM ".MAIN_DB_PREFIX."commande";
 		$sql.= " WHERE ref like '".$this->prefix."____-%'";
 		$sql.= " AND entity = ".$conf->entity;
@@ -126,7 +126,9 @@ class mod_commande_marbre extends ModeleNumRefCommandes
 		//$date=time();
 		$date=$object->date;
 		$yymm = strftime("%y%m",$date);
-		$num = sprintf("%04s",$max+1);
+
+    	if ($max >= (pow(10, 4) - 1)) $num=$max+1;	// If counter > 9999, we do not format on 4 chars, we take number as it is
+    	else $num = sprintf("%04s",$max+1);
 
 		dol_syslog("mod_commande_marbre::getNextValue return ".$this->prefix.$yymm."-".$num);
 		return $this->prefix.$yymm."-".$num;
diff --git a/htdocs/core/modules/contract/mod_contract_serpis.php b/htdocs/core/modules/contract/mod_contract_serpis.php
index 357483e7ae9cfd225f75e11538259cf6040a6593..a595fb5f59cec5f7874bdc72f1b4212f3c6e7934 100644
--- a/htdocs/core/modules/contract/mod_contract_serpis.php
+++ b/htdocs/core/modules/contract/mod_contract_serpis.php
@@ -69,7 +69,7 @@ class mod_contract_serpis extends ModelNumRefContracts
 		$coyymm=''; $max='';
 
 		$posindice=8;
-		$sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max";
+		$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
 		$sql.= " FROM ".MAIN_DB_PREFIX."contrat";
 		$sql.= " WHERE ref LIKE '".$this->prefix."____-%'";
 		$sql.= " AND entity = ".$conf->entity;
@@ -102,7 +102,7 @@ class mod_contract_serpis extends ModelNumRefContracts
 		global $db,$conf;
 
 		$posindice=8;
-		$sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max";
+		$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
 		$sql.= " FROM ".MAIN_DB_PREFIX."contrat";
 		$sql.= " WHERE ref like '".$this->prefix."____-%'";
 		$sql.= " AND entity = ".$conf->entity;
@@ -122,7 +122,9 @@ class mod_contract_serpis extends ModelNumRefContracts
 
 		$date=$contract->date_contrat;
 		$yymm = strftime("%y%m",$date);
-		$num = sprintf("%04s",$max+1);
+
+		if ($max >= (pow(10, 4) - 1)) $num=$max+1;	// If counter > 9999, we do not format on 4 chars, we take number as it is
+		else $num = sprintf("%04s",$max+1);
 
 		dol_syslog("mod_contract_serpis::getNextValue return ".$this->prefix.$yymm."-".$num);
 		return $this->prefix.$yymm."-".$num;
diff --git a/htdocs/core/modules/expedition/mod_expedition_safor.php b/htdocs/core/modules/expedition/mod_expedition_safor.php
index 0b55ba39418d0aa1a4a09082251940c76f3dc508..5fb3db1ddfe124ccd819b91c7b82bba3b30ec815 100644
--- a/htdocs/core/modules/expedition/mod_expedition_safor.php
+++ b/htdocs/core/modules/expedition/mod_expedition_safor.php
@@ -69,7 +69,7 @@ class mod_expedition_safor extends ModelNumRefExpedition
 		$coyymm=''; $max='';
 
 		$posindice=8;
-		$sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max";
+		$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
 		$sql.= " FROM ".MAIN_DB_PREFIX."expedition";
 		$sql.= " WHERE ref LIKE '".$this->prefix."____-%'";
 		$sql.= " AND entity = ".$conf->entity;
@@ -102,7 +102,7 @@ class mod_expedition_safor extends ModelNumRefExpedition
 		global $db,$conf;
 
 		$posindice=8;
-		$sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max";
+		$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
 		$sql.= " FROM ".MAIN_DB_PREFIX."expedition";
 		$sql.= " WHERE ref like '".$this->prefix."____-%'";
 		$sql.= " AND entity = ".$conf->entity;
@@ -122,7 +122,9 @@ class mod_expedition_safor extends ModelNumRefExpedition
 
 		$date=time();
 		$yymm = strftime("%y%m",$date);
-		$num = sprintf("%04s",$max+1);
+
+		if ($max >= (pow(10, 4) - 1)) $num=$max+1;	// If counter > 9999, we do not format on 4 chars, we take number as it is
+		else $num = sprintf("%04s",$max+1);
 
 		dol_syslog("mod_expedition_safor::getNextValue return ".$this->prefix.$yymm."-".$num);
 		return $this->prefix.$yymm."-".$num;
diff --git a/htdocs/core/modules/facture/mod_facture_mars.php b/htdocs/core/modules/facture/mod_facture_mars.php
index 008229cab1ed12aa43c12d9c2eeb7a0e3338c6ad..f1a46913e2514218452dcb7f4b8507b00f6ba39b 100644
--- a/htdocs/core/modules/facture/mod_facture_mars.php
+++ b/htdocs/core/modules/facture/mod_facture_mars.php
@@ -75,7 +75,7 @@ class mod_facture_mars extends ModeleNumRefFactures
 		$fayymm=''; $max='';
 
 		$posindice=8;
-		$sql = "SELECT MAX(SUBSTRING(facnumber FROM ".$posindice.")) as max";	// This is standard SQL
+		$sql = "SELECT MAX(CAST(SUBSTRING(facnumber FROM ".$posindice.") AS SIGNED) as max";	// This is standard SQL
 		$sql.= " FROM ".MAIN_DB_PREFIX."facture";
 		$sql.= " WHERE facnumber LIKE '".$this->prefixinvoice."____-%'";
 		$sql.= " AND entity = ".$conf->entity;
@@ -138,7 +138,7 @@ class mod_facture_mars extends ModeleNumRefFactures
 
 		// D'abord on recupere la valeur max
 		$posindice=8;
-		$sql = "SELECT MAX(SUBSTRING(facnumber FROM ".$posindice.")) as max";	// This is standard SQL
+		$sql = "SELECT MAX(CAST(SUBSTRING(facnumber FROM ".$posindice.") AS SIGNED)) as max";	// This is standard SQL
 		$sql.= " FROM ".MAIN_DB_PREFIX."facture";
 		$sql.= " WHERE facnumber LIKE '".$prefix."____-%'";
 		$sql.= " AND entity = ".$conf->entity;
@@ -159,7 +159,8 @@ class mod_facture_mars extends ModeleNumRefFactures
 
 		if ($mode == 'last')
 		{
-            $num = sprintf("%04s",$max);
+    		if ($max >= (pow(10, 4) - 1)) $num=$max;	// If counter > 9999, we do not format on 4 chars, we take number as it is
+    		else $num = sprintf("%04s",$max);
 
             $ref='';
             $sql = "SELECT facnumber as ref";
@@ -182,7 +183,9 @@ class mod_facture_mars extends ModeleNumRefFactures
 		{
     		$date=$facture->date;	// This is invoice date (not creation date)
     		$yymm = strftime("%y%m",$date);
-    		$num = sprintf("%04s",$max+1);
+
+    		if ($max >= (pow(10, 4) - 1)) $num=$max+1;	// If counter > 9999, we do not format on 4 chars, we take number as it is
+    		else $num = sprintf("%04s",$max+1);
 
     		dol_syslog(get_class($this)."::getNextValue return ".$prefix.$yymm."-".$num);
     		return $prefix.$yymm."-".$num;
diff --git a/htdocs/core/modules/facture/mod_facture_terre.php b/htdocs/core/modules/facture/mod_facture_terre.php
index 60be7a1e311cd90af4121679f7b4770010e5997c..220df75dc72bc47daad8a785e22ff90cb9502b77 100644
--- a/htdocs/core/modules/facture/mod_facture_terre.php
+++ b/htdocs/core/modules/facture/mod_facture_terre.php
@@ -73,7 +73,7 @@ class mod_facture_terre extends ModeleNumRefFactures
 		$fayymm=''; $max='';
 
 		$posindice=8;
-		$sql = "SELECT MAX(SUBSTRING(facnumber FROM ".$posindice.")) as max";	// This is standard SQL
+		$sql = "SELECT MAX(CAST(SUBSTRING(facnumber FROM ".$posindice.") AS SIGNED)) as max";	// This is standard SQL
 		$sql.= " FROM ".MAIN_DB_PREFIX."facture";
 		$sql.= " WHERE facnumber LIKE '".$this->prefixinvoice."____-%'";
 		$sql.= " AND entity = ".$conf->entity;
@@ -95,7 +95,7 @@ class mod_facture_terre extends ModeleNumRefFactures
 		$fayymm='';
 
 		$posindice=8;
-		$sql = "SELECT MAX(SUBSTRING(facnumber FROM ".$posindice.")) as max";	// This is standard SQL
+		$sql = "SELECT MAX(CAST(SUBSTRING(facnumber FROM ".$posindice.") AS SIGNED)) as max";	// This is standard SQL
 		$sql.= " FROM ".MAIN_DB_PREFIX."facture";
 		$sql.= " WHERE facnumber LIKE '".$this->prefixcreditnote."____-%'";
 		$sql.= " AND entity = ".$conf->entity;
@@ -116,7 +116,7 @@ class mod_facture_terre extends ModeleNumRefFactures
 		$fayymm='';
 
 		$posindice=8;
-		$sql = "SELECT MAX(SUBSTRING(facnumber FROM ".$posindice.")) as max";	// This is standard SQL
+		$sql = "SELECT MAX(CAST(SUBSTRING(facnumber FROM ".$posindice.") AS SIGNED)) as max";	// This is standard SQL
 		$sql.= " FROM ".MAIN_DB_PREFIX."facture";
 		$sql.= " WHERE facnumber LIKE '".$this->prefixdeposit."____-%'";
 		$sql.= " AND entity = ".$conf->entity;
@@ -154,7 +154,7 @@ class mod_facture_terre extends ModeleNumRefFactures
 
 		// D'abord on recupere la valeur max
 		$posindice=8;
-		$sql = "SELECT MAX(SUBSTRING(facnumber FROM ".$posindice.")) as max";	// This is standard SQL
+		$sql = "SELECT MAX(CAST(SUBSTRING(facnumber FROM ".$posindice.") AS SIGNED)) as max";	// This is standard SQL
 		$sql.= " FROM ".MAIN_DB_PREFIX."facture";
 		$sql.= " WHERE facnumber LIKE '".$prefix."____-%'";
 		$sql.= " AND entity = ".$conf->entity;
@@ -175,7 +175,8 @@ class mod_facture_terre extends ModeleNumRefFactures
 
 		if ($mode == 'last')
 		{
-            $num = sprintf("%04s",$max);
+    		if ($max >= (pow(10, 4) - 1)) $num=$max;	// If counter > 9999, we do not format on 4 chars, we take number as it is
+    		else $num = sprintf("%04s",$max);
 
             $ref='';
             $sql = "SELECT facnumber as ref";
@@ -198,7 +199,9 @@ class mod_facture_terre extends ModeleNumRefFactures
 		{
     		$date=$facture->date;	// This is invoice date (not creation date)
     		$yymm = strftime("%y%m",$date);
-    		$num = sprintf("%04s",$max+1);
+
+    		if ($max >= (pow(10, 4) - 1)) $num=$max+1;	// If counter > 9999, we do not format on 4 chars, we take number as it is
+    		else $num = sprintf("%04s",$max+1);
 
     		dol_syslog(get_class($this)."::getNextValue return ".$prefix.$yymm."-".$num);
     		return $prefix.$yymm."-".$num;
diff --git a/htdocs/core/modules/fichinter/mod_pacific.php b/htdocs/core/modules/fichinter/mod_pacific.php
index d50f0be861db43d442cde868e0336001a1d3cb1a..3d0b15d0d09a5cfc4fc87b8c6d404f37cdc30447 100644
--- a/htdocs/core/modules/fichinter/mod_pacific.php
+++ b/htdocs/core/modules/fichinter/mod_pacific.php
@@ -72,7 +72,7 @@ class mod_pacific extends ModeleNumRefFicheinter
 		$fayymm=''; $max='';
 
 		$posindice=8;
-		$sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max";
+		$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
 		$sql.= " FROM ".MAIN_DB_PREFIX."fichinter";
 		$sql.= " WHERE ref like '".$this->prefix."____-%'";
 		$sql.= " WHERE entity = ".$conf->entity;
@@ -108,7 +108,7 @@ class mod_pacific extends ModeleNumRefFicheinter
 
 		// D'abord on recupere la valeur max
 		$posindice=8;
-		$sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max";
+		$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
 		$sql.= " FROM ".MAIN_DB_PREFIX."fichinter";
 		$sql.= " WHERE ref LIKE '".$this->prefix."____-%'";
 		$sql.= " AND entity = ".$conf->entity;
@@ -124,7 +124,9 @@ class mod_pacific extends ModeleNumRefFicheinter
 		//$date=time();
 		$date=$object->datec;
 		$yymm = strftime("%y%m",$date);
-		$num = sprintf("%04s",$max+1);
+
+    	if ($max >= (pow(10, 4) - 1)) $num=$max+1;	// If counter > 9999, we do not format on 4 chars, we take number as it is
+    	else $num = sprintf("%04s",$max+1);
 
 		return $this->prefix.$yymm."-".$num;
 	}
diff --git a/htdocs/core/modules/livraison/mod_livraison_jade.php b/htdocs/core/modules/livraison/mod_livraison_jade.php
index 0d7e2e9a534e415e24e5f64bbc908a1bd5c8186f..77ca85f8e6c7b091ba0cc5b46b9bd890916f310e 100644
--- a/htdocs/core/modules/livraison/mod_livraison_jade.php
+++ b/htdocs/core/modules/livraison/mod_livraison_jade.php
@@ -78,7 +78,7 @@ class mod_livraison_jade extends ModeleNumRefDeliveryOrder
         $fayymm=''; $max='';
 
         $posindice=8;
-        $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max";   // This is standard SQL
+        $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";   // This is standard SQL
         $sql.= " FROM ".MAIN_DB_PREFIX."livraison";
         $sql.= " WHERE ref LIKE '".$this->prefix."____-%'";
         $sql.= " AND entity = ".$conf->entity;
@@ -112,7 +112,7 @@ class mod_livraison_jade extends ModeleNumRefDeliveryOrder
 
         // D'abord on recupere la valeur max
         $posindice=8;
-        $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max";   // This is standard SQL
+        $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";   // This is standard SQL
         $sql.= " FROM ".MAIN_DB_PREFIX."livraison";
         $sql.= " WHERE ref LIKE '".$this->prefix."____-%'";
         $sql.= " AND entity = ".$conf->entity;
@@ -134,7 +134,9 @@ class mod_livraison_jade extends ModeleNumRefDeliveryOrder
         $date=$object->date_delivery;
         if (empty($date)) $date=dol_now();
         $yymm = strftime("%y%m",$date);
-        $num = sprintf("%04s",$max+1);
+        
+        if ($max >= (pow(10, 4) - 1)) $num=$max+1;	// If counter > 9999, we do not format on 4 chars, we take number as it is
+        else $num = sprintf("%04s",$max+1);
 
         dol_syslog("mod_livraison_jade::getNextValue return ".$this->prefix.$yymm."-".$num);
         return $this->prefix.$yymm."-".$num;
diff --git a/htdocs/core/modules/project/mod_project_simple.php b/htdocs/core/modules/project/mod_project_simple.php
index bfc0eea0838426232d78f9bfa37d63a7b8f71a36..da1c914f484bd748f83867f1c115277e04a49898 100644
--- a/htdocs/core/modules/project/mod_project_simple.php
+++ b/htdocs/core/modules/project/mod_project_simple.php
@@ -72,7 +72,7 @@ class mod_project_simple extends ModeleNumRefProjects
         $coyymm=''; $max='';
 
 		$posindice=8;
-		$sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max";
+		$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
         $sql.= " FROM ".MAIN_DB_PREFIX."projet";
 		$sql.= " WHERE ref LIKE '".$this->prefix."____-%'";
         $sql.= " AND entity = ".$conf->entity;
@@ -108,7 +108,7 @@ class mod_project_simple extends ModeleNumRefProjects
 
 		// D'abord on recupere la valeur max
 		$posindice=8;
-		$sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max";
+		$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
 		$sql.= " FROM ".MAIN_DB_PREFIX."projet";
 		$sql.= " WHERE ref like '".$this->prefix."____-%'";
 		$sql.= " AND entity = ".$conf->entity;
@@ -130,7 +130,9 @@ class mod_project_simple extends ModeleNumRefProjects
 
 		//$yymm = strftime("%y%m",time());
 		$yymm = strftime("%y%m",$date);
-		$num = sprintf("%04s",$max+1);
+		
+		if ($max >= (pow(10, 4) - 1)) $num=$max+1;	// If counter > 9999, we do not format on 4 chars, we take number as it is
+		else $num = sprintf("%04s",$max+1);
 
 		dol_syslog("mod_project_simple::getNextValue return ".$this->prefix.$yymm."-".$num);
 		return $this->prefix.$yymm."-".$num;
diff --git a/htdocs/core/modules/project/task/mod_task_simple.php b/htdocs/core/modules/project/task/mod_task_simple.php
index fad0d6afa12d5f4556433bb28072a6a459e8df1f..afc17d663c0ee8296fbeffad90a6e0f59f7b43c0 100644
--- a/htdocs/core/modules/project/task/mod_task_simple.php
+++ b/htdocs/core/modules/project/task/mod_task_simple.php
@@ -72,7 +72,7 @@ class mod_task_simple extends ModeleNumRefTask
         $coyymm=''; $max='';
 
 		$posindice=8;
-		$sql = "SELECT MAX(SUBSTRING(task.ref FROM " . $posindice . ")) as max";
+		$sql = "SELECT MAX(CAST(SUBSTRING(task.ref FROM " . $posindice . ") AS SIGNED)) as max";
 		$sql .= " FROM " . MAIN_DB_PREFIX . "projet_task AS task, ";
 		$sql .= MAIN_DB_PREFIX . "projet AS project WHERE task.fk_projet=project.rowid";
 		$sql .= " AND task.ref LIKE '" . $this->prefix . "____-%'";
@@ -109,7 +109,7 @@ class mod_task_simple extends ModeleNumRefTask
 
 		// D'abord on recupere la valeur max
 		$posindice=8;
-		$sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max";
+		$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
 		$sql.= " FROM ".MAIN_DB_PREFIX."projet_task";
 		$sql.= " WHERE ref like '".$this->prefix."____-%'";
 
@@ -130,7 +130,9 @@ class mod_task_simple extends ModeleNumRefTask
 
 		//$yymm = strftime("%y%m",time());
 		$yymm = strftime("%y%m",$date);
-		$num = sprintf("%04s",$max+1);
+		
+		if ($max >= (pow(10, 4) - 1)) $num=$max+1;	// If counter > 9999, we do not format on 4 chars, we take number as it is
+		else $num = sprintf("%04s",$max+1);
 
 		dol_syslog("mod_task_simple::getNextValue return ".$this->prefix.$yymm."-".$num);
 		return $this->prefix.$yymm."-".$num;
diff --git a/htdocs/core/modules/propale/mod_propale_marbre.php b/htdocs/core/modules/propale/mod_propale_marbre.php
index 79a31c73b59d2f4368c48593cde5ab9043a71cef..aa2959691e69d1ebe9f330dcf7ca5ff941eefd40 100644
--- a/htdocs/core/modules/propale/mod_propale_marbre.php
+++ b/htdocs/core/modules/propale/mod_propale_marbre.php
@@ -73,7 +73,7 @@ class mod_propale_marbre extends ModeleNumRefPropales
 		$pryymm=''; $max='';
 
 		$posindice=8;
-		$sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max";
+		$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
 		$sql.= " FROM ".MAIN_DB_PREFIX."propal";
 		$sql.= " WHERE ref LIKE '".$this->prefix."____-%'";
 		$sql.= " AND entity = ".$conf->entity;
@@ -110,7 +110,7 @@ class mod_propale_marbre extends ModeleNumRefPropales
 
 		// D'abord on recupere la valeur max
 		$posindice=8;
-		$sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max";	// This is standard SQL
+		$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";	// This is standard SQL
 		$sql.= " FROM ".MAIN_DB_PREFIX."propal";
 		$sql.= " WHERE ref LIKE '".$this->prefix."____-%'";
 		$sql.= " AND entity = ".$conf->entity;
@@ -130,7 +130,9 @@ class mod_propale_marbre extends ModeleNumRefPropales
 
 		$date = time();
 		$yymm = strftime("%y%m",$date);
-		$num = sprintf("%04s",$max+1);
+
+		if ($max >= (pow(10, 4) - 1)) $num=$max+1;	// If counter > 9999, we do not format on 4 chars, we take number as it is
+		else $num = sprintf("%04s",$max+1);
 
 		dol_syslog("mod_propale_marbre::getNextValue return ".$this->prefix.$yymm."-".$num);
 		return $this->prefix.$yymm."-".$num;
@@ -149,4 +151,3 @@ class mod_propale_marbre extends ModeleNumRefPropales
 	}
 
 }
-
diff --git a/htdocs/core/modules/societe/mod_codeclient_monkey.php b/htdocs/core/modules/societe/mod_codeclient_monkey.php
index cf761b0dc06ae7479e24860523e9b609bdb55640..8b31e581e26ed621887a99c1037a71b151d8a927 100644
--- a/htdocs/core/modules/societe/mod_codeclient_monkey.php
+++ b/htdocs/core/modules/societe/mod_codeclient_monkey.php
@@ -119,7 +119,7 @@ class mod_codeclient_monkey extends ModeleThirdPartyCode
 
 		// D'abord on recupere la valeur max (reponse immediate car champ indexe)
 		$posindice=8;
-        $sql = "SELECT MAX(SUBSTRING(".$field." FROM ".$posindice.")) as max";   // This is standard SQL
+        $sql = "SELECT MAX(CAST(SUBSTRING(".$field." FROM ".$posindice.") AS SIGNED)) as max";   // This is standard SQL
 		$sql.= " FROM ".MAIN_DB_PREFIX."societe";
 		$sql.= " WHERE ".$field." LIKE '".$prefix."____-%'";
 		$sql.= " AND entity IN (".getEntity('societe', 1).")";
@@ -139,7 +139,9 @@ class mod_codeclient_monkey extends ModeleThirdPartyCode
 
 		$date	= dol_now();
 		$yymm	= strftime("%y%m",$date);
-		$num	= sprintf("%04s",$max+1);
+		
+		if ($max >= (pow(10, 4) - 1)) $num=$max+1;	// If counter > 9999, we do not format on 4 chars, we take number as it is
+		else $num = sprintf("%04s",$max+1);
 
 		dol_syslog(get_class($this)."::getNextValue return ".$prefix.$yymm."-".$num);
 		return $prefix.$yymm."-".$num;
diff --git a/htdocs/core/modules/supplier_invoice/mod_facture_fournisseur_cactus.php b/htdocs/core/modules/supplier_invoice/mod_facture_fournisseur_cactus.php
index aff2557efb2008d9f9b56e114d15b94879791df5..049c312e1efb33a27592e8d099cb9a15e5bfec02 100644
--- a/htdocs/core/modules/supplier_invoice/mod_facture_fournisseur_cactus.php
+++ b/htdocs/core/modules/supplier_invoice/mod_facture_fournisseur_cactus.php
@@ -73,7 +73,7 @@ class mod_facture_fournisseur_cactus extends ModeleNumRefSuppliersInvoices
         $siyymm=''; $max='';
 
 		$posindice=8;
-		$sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max";
+		$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
         $sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn";
 		$sql.= " WHERE ref LIKE '".$this->prefixinvoice."____-%'";
         $sql.= " AND entity = ".$conf->entity;
@@ -112,7 +112,7 @@ class mod_facture_fournisseur_cactus extends ModeleNumRefSuppliersInvoices
 
         // D'abord on recupere la valeur max
         $posindice=8;
-        $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max";	// This is standard SQL
+        $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";	// This is standard SQL
         $sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn";
         $sql.= " WHERE ref LIKE '".$prefix."____-%'";
         $sql.= " AND entity = ".$conf->entity;
@@ -133,7 +133,8 @@ class mod_facture_fournisseur_cactus extends ModeleNumRefSuppliersInvoices
 
         if ($mode == 'last')
         {
-        	$num = sprintf("%04s",$max);
+    		if ($max >= (pow(10, 4) - 1)) $num=$max;	// If counter > 9999, we do not format on 4 chars, we take number as it is
+    		else $num = sprintf("%04s",$max);
 
         	$ref='';
         	$sql = "SELECT ref as ref";
@@ -156,7 +157,9 @@ class mod_facture_fournisseur_cactus extends ModeleNumRefSuppliersInvoices
         {
         	$date=$object->date;	// This is invoice date (not creation date)
         	$yymm = strftime("%y%m",$date);
-        	$num = sprintf("%04s",$max+1);
+        	
+        	if ($max >= (pow(10, 4) - 1)) $num=$max+1;	// If counter > 9999, we do not format on 4 chars, we take number as it is
+        	else $num = sprintf("%04s",$max+1);
 
         	dol_syslog(get_class($this)."::getNextValue return ".$prefix.$yymm."-".$num);
         	return $prefix.$yymm."-".$num;
diff --git a/htdocs/core/modules/supplier_order/mod_commande_fournisseur_muguet.php b/htdocs/core/modules/supplier_order/mod_commande_fournisseur_muguet.php
index 7438de73c7d01441a95b528810a1e71af27ab465..563e1b6fe1a7dbc1b2e6b3281cfde13b30069b46 100644
--- a/htdocs/core/modules/supplier_order/mod_commande_fournisseur_muguet.php
+++ b/htdocs/core/modules/supplier_order/mod_commande_fournisseur_muguet.php
@@ -73,7 +73,7 @@ class mod_commande_fournisseur_muguet extends ModeleNumRefSuppliersOrders
         $coyymm=''; $max='';
 
 		$posindice=8;
-		$sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max";
+		$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
         $sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseur";
 		$sql.= " WHERE ref LIKE '".$this->prefix."____-%'";
         $sql.= " AND entity = ".$conf->entity;
@@ -108,7 +108,7 @@ class mod_commande_fournisseur_muguet extends ModeleNumRefSuppliersOrders
 
         // D'abord on recupere la valeur max
         $posindice=8;
-        $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max";
+        $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
         $sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseur";
 		$sql.= " WHERE ref like '".$this->prefix."____-%'";
         $sql.= " AND entity = ".$conf->entity;
@@ -125,7 +125,9 @@ class mod_commande_fournisseur_muguet extends ModeleNumRefSuppliersOrders
         $date=$object->date_commande;   // Not always defined
         if (empty($date)) $date=$object->date;  // Creation date is order date for suppliers orders
         $yymm = strftime("%y%m",$date);
-        $num = sprintf("%04s",$max+1);
+        
+        if ($max >= (pow(10, 4) - 1)) $num=$max+1;	// If counter > 9999, we do not format on 4 chars, we take number as it is
+        else $num = sprintf("%04s",$max+1);
 
         return $this->prefix.$yymm."-".$num;
     }
diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php
index d8024a257fa2cc67c0828dc3a438aafd22fe1ba8..5cf09642c6893e5f1c510307e5f3737b9f4d393d 100644
--- a/htdocs/expedition/class/expedition.class.php
+++ b/htdocs/expedition/class/expedition.class.php
@@ -206,8 +206,8 @@ class Expedition extends CommonObject
 		$sql.= ") VALUES (";
 		$sql.= "'(PROV)'";
 		$sql.= ", ".$conf->entity;
-		$sql.= ", ".($this->ref_customer?"'".$this->ref_customer."'":"null");
-		$sql.= ", ".($this->ref_int?"'".$this->ref_int."'":"null");
+		$sql.= ", ".($this->ref_customer?"'".$this->db->escape($this->ref_customer)."'":"null");
+		$sql.= ", ".($this->ref_int?"'".$this->db->escape($this->ref_int)."'":"null");
 		$sql.= ", '".$this->db->idate($now)."'";
 		$sql.= ", ".$user->id;
 		$sql.= ", ".($this->date_expedition>0?"'".$this->db->idate($this->date_expedition)."'":"null");