diff --git a/build/dolibarr-doxygen-build.pl b/build/doxygen/dolibarr-doxygen-build.pl
similarity index 94%
rename from build/dolibarr-doxygen-build.pl
rename to build/doxygen/dolibarr-doxygen-build.pl
index 0dc32308585430513e81e652ab93fa95f24e626b..65fc027ca329553760e3bf3bce4916b7097dd609 100644
--- a/build/dolibarr-doxygen-build.pl
+++ b/build/doxygen/dolibarr-doxygen-build.pl
@@ -17,7 +17,7 @@ use Cwd;
 my $dir = getcwd;
     
 print "Current dir is: $dir\n";
-print "Running dir for doxygen must be: $DIR/doxygen\n";
+print "Running dir for doxygen must be: $DIR\n";
 
 if (! -s $CONFFILE)
 {
diff --git a/build/dolibarr-doxygen-filter.pl b/build/doxygen/dolibarr-doxygen-filter.pl
similarity index 100%
rename from build/dolibarr-doxygen-filter.pl
rename to build/doxygen/dolibarr-doxygen-filter.pl
diff --git a/build/dolibarr-doxygen-getversion.pl b/build/doxygen/dolibarr-doxygen-getversion.pl
similarity index 100%
rename from build/dolibarr-doxygen-getversion.pl
rename to build/doxygen/dolibarr-doxygen-getversion.pl
diff --git a/build/dolibarr-mysql2pgsql.pl b/dev/initdata/dolibarr-mysql2pgsql.pl
similarity index 100%
rename from build/dolibarr-mysql2pgsql.pl
rename to dev/initdata/dolibarr-mysql2pgsql.pl
diff --git a/htdocs/comm/remx.php b/htdocs/comm/remx.php
index 977f9000ff24d609689fbd37f10be1074c926be2..6ee7fc1f16d8ee70f80d0e489ff634c71ee73de2 100644
--- a/htdocs/comm/remx.php
+++ b/htdocs/comm/remx.php
@@ -32,6 +32,8 @@ $langs->load("orders");
 $langs->load("bills");
 $langs->load("companies");
 
+$action=GETPOST('action');
+
 // Security check
 $socid = GETPOST("id");
 if ($user->societe_id > 0)
@@ -50,7 +52,7 @@ if (GETPOST('cancel') && GETPOST('backtopage'))
      exit;
 }
 
-if (GETPOST("action") == 'confirm_split' && GETPOST("confirm") == 'yes')
+if ($action == 'confirm_split' && GETPOST("confirm") == 'yes')
 {
 	//if ($user->rights->societe->creer)
 	//if ($user->rights->facture->creer)
@@ -127,7 +129,7 @@ if (GETPOST("action") == 'confirm_split' && GETPOST("confirm") == 'yes')
 	}
 }
 
-if (GETPOST("action") == 'setremise')
+if ($action == 'setremise')
 {
 	//if ($user->rights->societe->creer)
 	//if ($user->rights->facture->creer)
@@ -145,13 +147,13 @@ if (GETPOST("action") == 'setremise')
 		{
 			$soc = new Societe($db);
 			$soc->fetch($_GET["id"]);
-			$soc->set_remise_except($_POST["amount_ht"],$user,$_POST["desc"],$_POST["tva_tx"]);
+			$discountid=$soc->set_remise_except($_POST["amount_ht"],$user,$_POST["desc"],$_POST["tva_tx"]);
 
-			if ($result > 0)
+			if ($discountid > 0)
 			{
 			    if (GETPOST("backtopage"))
 			    {
-			        Header("Location: ".GETPOST("backtopage"));
+			        Header("Location: ".GETPOST("backtopage").'&discountid='.$discountid);
 			        exit;
 			    }
 				else
diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php
index 7975dcfe656ef16971159ea86d3b3c92874472c3..85f8afd0bf5a5a4b5586d52615357ab3699c9fc4 100644
--- a/htdocs/compta/facture.php
+++ b/htdocs/compta/facture.php
@@ -2225,12 +2225,12 @@ else
                     // Remise dispo de type remise fixe (not credit note)
                     $filter='fk_facture_source IS NULL';
                     print '<br>';
-                    $form->form_remise_dispo($_SERVER["PHP_SELF"].'?facid='.$object->id, 0,  'remise_id',$soc->id, $absolute_discount, $filter, $resteapayer, ' ('.$addabsolutediscount.')');
+                    $form->form_remise_dispo($_SERVER["PHP_SELF"].'?facid='.$object->id, GETPOST('discountid'), 'remise_id', $soc->id, $absolute_discount, $filter, $resteapayer, ' ('.$addabsolutediscount.')');
                 }
             }
             else
             {
-                if ($absolute_creditnote > 0)    // If not linke will be added later
+                if ($absolute_creditnote > 0)    // If not, link will be added later
                 {
                     if ($object->statut == 0 && $object->type != 2 && $object->type != 3) print ' ('.$addabsolutediscount.')<br>';
                     else print '.';
diff --git a/htdocs/compta/facture/impayees.php b/htdocs/compta/facture/impayees.php
index 1e12f450c09fd893171b0e4f27d27fc8e6a9e38b..472c1afcee21f9007ab6e182f5bb20b63daedd5b 100644
--- a/htdocs/compta/facture/impayees.php
+++ b/htdocs/compta/facture/impayees.php
@@ -144,12 +144,12 @@ $formfile = new FormFile($db);
 
 ?>
 <script type="text/javascript">
-jQuery(document).ready(function() {
-	jQuery("#checkall").click(function() {
-		jQuery(".checkformerge").attr('checked', true);
+$(document).ready(function() {
+	$("#checkall").click(function() {
+		$(".checkformerge").attr('checked', true);
 	});
-	jQuery("#checknone").click(function() {
-		jQuery(".checkformerge").attr('checked', false);
+	$("#checknone").click(function() {
+		$(".checkformerge").attr('checked', false);
 	});
 });
 </script>
diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php
index 696ad9b150087756e87e008b7e21e7cbf491457d..0d7e8434388a09ffffa3ee7839c0b074813e6e38 100644
--- a/htdocs/core/class/html.form.class.php
+++ b/htdocs/core/class/html.form.class.php
@@ -43,31 +43,31 @@ class Form
 {
 	var $db;
 	var $error;
-	
+
 	// Cache arrays
 	var $cache_types_paiements=array();
 	var $cache_conditions_paiements=array();
 	var $cache_availability=array();
 	var $cache_demand_reason=array();
 	var $cache_type_fees=array();
-	
+
 	var $tva_taux_value;
 	var $tva_taux_libelle;
-	
-	
+
+
 	/**
 	 * Constructor
-	 * 
+	 *
 	 * @param		DoliDB		$db      Database handler
 	 */
 	public function __construct($db)
 	{
 		$this->db = $db;
 	}
-	
+
 	/**
 	 * Output key field for an editable field
-	 * 
+	 *
 	 * @param   string	$text			Text of label or key to translate
 	 * @param   string	$htmlname		Name of select field
 	 * @param   string	$preselected	Name of Value to show/edit (not used in this function)
@@ -79,9 +79,9 @@ class Form
 	function editfieldkey($text,$htmlname,$preselected,$object,$perm,$typeofdata='string')
 	{
 		global $conf,$langs;
-		
+
 		$ret='';
-		
+
 		if (! empty($conf->global->MAIN_USE_JQUERY_JEDITABLE))
 		{
 			if ($perm)
@@ -104,13 +104,13 @@ class Form
 			if (GETPOST('action') != 'edit'.$htmlname && $perm) $ret.='<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=edit'.$htmlname.'&amp;id='.$object->id.'">'.img_edit($langs->trans('Edit'),1).'</a></td>';
 			$ret.='</tr></table>';
 		}
-		
+
 		return $ret;
 	}
-	
+
 	/**
 	 * Output val field for an editable field
-	 * 
+	 *
 	 * @param	string	$text			Text of label (not used in this function)
 	 * @param	string	$htmlname		Name of select field
 	 * @param	string	$value			Value to show/edit
@@ -124,9 +124,9 @@ class Form
 	function editfieldval($text,$htmlname,$value,$object,$perm,$typeofdata='string',$editvalue='',$extObject=false)
 	{
 		global $conf,$langs,$db;
-		
+
 		$ret='';
-		
+
 		// When option to edit inline is activated
 		if (! empty($conf->global->MAIN_USE_JQUERY_JEDITABLE))
 		{
@@ -185,7 +185,7 @@ class Form
 		}
 		return $ret;
 	}
-	
+
 	/**
 	 * Output edit in place form
 	 *
@@ -200,14 +200,14 @@ class Form
 	private function editInPlace($object, $value, $htmlname, $condition, $inputType='textarea', $extObject=false)
 	{
 		global $conf;
-		
+
 		$out='';
-		
+
 		// Check parameters
 		if ($inputType == 'textarea') $value = dol_nl2br($value);
 		else if (preg_match('/^numeric/',$inputType)) $value = price($value);
 		else if ($inputType == 'datepicker') $value = dol_print_date($value, 'day');
-		
+
 		if ($condition)
 		{
 			$element = false;
@@ -218,21 +218,21 @@ class Form
 			$ext_element = false;
 			//$ext_table_element = false;
 			//$ext_fk_element = false;
-			
+
 			if (is_object($object))
 			{
 				$element = $object->element;
 				$table_element = $object->table_element;
 				$fk_element = $object->id;
 			}
-			
+
 			if (is_object($extObject))
 			{
 				$ext_element = $extObject->element;
 				//$ext_table_element = $extObject->table_element;
 				//$ext_fk_element = $extObject->id;
 			}
-			
+
 			if (preg_match('/^(string|email|numeric)/',$inputType))
 			{
 				$tmp=explode(':',$inputType);
@@ -244,7 +244,7 @@ class Form
 				$tmp=explode(':',$inputType);
 				$inputType=$tmp[0]; $inputOption=$tmp[1];
 				if (! empty($tmp[2])) $savemethod=$tmp[2];
-				
+
 				$out.= '<input id="timestamp" type="hidden"/>'."\n"; // Use for timestamp format
 			}
 			else if (preg_match('/^select/',$inputType))
@@ -260,7 +260,7 @@ class Form
 				if (! empty($tmp[2])) $width=$tmp[2];
 				if (! empty($tmp[3])) $heigth=$tmp[3];
 				if (! empty($tmp[4])) $savemethod=$tmp[4];
-				
+
 				if (! empty($conf->fckeditor->enabled))
 				{
 					$out.= '<input id="ckeditor_toolbar" value="'.$toolbar.'" type="hidden"/>'."\n";
@@ -270,7 +270,7 @@ class Form
 					$inputType = 'textarea';
 				}
 			}
-			
+
 			$out.= '<input id="element_'.$htmlname.'" value="'.$element.'" type="hidden"/>'."\n";
 			$out.= '<input id="table_element_'.$htmlname.'" value="'.$table_element.'" type="hidden"/>'."\n";
 			$out.= '<input id="fk_element_'.$htmlname.'" value="'.$fk_element.'" type="hidden"/>'."\n";
@@ -279,17 +279,17 @@ class Form
 			$out.= '<input id="ext_element_'.$htmlname.'" value="'.$ext_element.'" type="hidden"/>'."\n";
 			//$out.= '<input id="ext_table_element_'.$htmlname.'" value="'.$ext_table_element.'" type="hidden"/>'."\n";
 			//$out.= '<input id="ext_fk_element_'.$htmlname.'" value="'.$ext_fk_element.'" type="hidden"/>'."\n";
-			
+
 			$out.= '<div id="val_'.$htmlname.'" class="editval_'.$inputType.'">'.$value.'</div>'."\n";
 		}
 		else
 		{
 			$out = $value;
 		}
-		
+
 		return $out;
 	}
-	
+
 	/**
 	 *	Show a text and picto with tooltip on text or picto
 	 *
@@ -308,21 +308,21 @@ class Form
 	function textwithtooltip($text,$htmltext,$tooltipon=1,$direction=0,$img='',$extracss='',$notabs=0,$incbefore='',$noencodehtmltext=0)
 	{
 		global $conf;
-		
+
 		if ($incbefore) $text = $incbefore.$text;
 		if (! $htmltext) return $text;
-		
+
 		// Sanitize tooltip
 		$htmltext=str_replace("\\","\\\\",$htmltext);
 		$htmltext=str_replace("\r","",$htmltext);
 		$htmltext=str_replace("\n","",$htmltext);
-		
+
 		$htmltext=str_replace('"',"&quot;",$htmltext);
 		if ($tooltipon == 2 || $tooltipon == 3) $paramfortooltipimg=' class="classfortooltip'.($extracss?' '.$extracss:'').'" title="'.($noencodehtmltext?$htmltext:dol_escape_htmltag($htmltext,1)).'"'; // Attribut to put on td img tag to store tooltip
 		else $paramfortooltipimg =($extracss?' class="'.$extracss.'"':''); // Attribut to put on td text tag
 		if ($tooltipon == 1 || $tooltipon == 3) $paramfortooltiptd=' class="classfortooltip'.($extracss?' '.$extracss:'').'" title="'.($noencodehtmltext?$htmltext:dol_escape_htmltag($htmltext,1)).'"'; // Attribut to put on td tag to store tooltip
 		else $paramfortooltiptd =($extracss?' class="'.$extracss.'"':''); // Attribut to put on td text tag
-		
+
 		$s="";
 		if (empty($notabs)) $s.='<table class="nobordernopadding" summary=""><tr>';
 		if ($direction > 0)
@@ -346,7 +346,7 @@ class Form
 			}
 		}
 		if (empty($notabs)) $s.='</tr></table>';
-		
+
 		return $s;
 	}
 
@@ -2701,17 +2701,17 @@ class Form
 
 
     /**
-     *    	Show a select box with available absolute discounts
+     *	Show a select box with available absolute discounts
      *
-     *    	@param      page        	Page URL where form is shown
-     *    	@param      selected    	Value pre-selected
-     *		@param      htmlname    	Nom du formulaire select. Si none, non modifiable
-     *		@param		socid			Third party id
-     * 		@param		amount			Total amount available
-     * 	  	@param		filter			SQL filter on discounts
-     * 	  	@param		maxvalue		Max value for lines that can be selected
-     *      @param      more            More string to add
-     *    @return	void
+     *  @param  string	$page        	Page URL where form is shown
+     *  @param  int		$selected    	Value pre-selected
+     *	@param  string	$htmlname    	Nom du formulaire select. Si none, non modifiable
+     *	@param	int		$socid			Third party id
+     * 	@param	float	$amount			Total amount available
+     * 	@param	string	$filter			SQL filter on discounts
+     * 	@param	int		$maxvalue		Max value for lines that can be selected
+     *  @param  string	$more            More string to add
+     *  @return	void
      */
     function form_remise_dispo($page, $selected='', $htmlname='remise_id',$socid, $amount, $filter='', $maxvalue=0, $more='')
     {
@@ -2725,10 +2725,9 @@ class Form
             print '<tr><td nowrap="nowrap">';
             if (! $filter || $filter=='fk_facture_source IS NULL') print $langs->trans("CompanyHasAbsoluteDiscount",price($amount),$langs->transnoentities("Currency".$conf->monnaie)).': ';
             else print $langs->trans("CompanyHasCreditNote",price($amount),$langs->transnoentities("Currency".$conf->monnaie)).': ';
-            //			print $langs->trans("AvailableGlobalDiscounts").': ';
             $newfilter='fk_facture IS NULL AND fk_facture_line IS NULL';	// Remises disponibles
             if ($filter) $newfilter.=' AND '.$filter;
-            $nbqualifiedlines=$this->select_remises('',$htmlname,$newfilter,$socid,$maxvalue);
+            $nbqualifiedlines=$this->select_remises($selected,$htmlname,$newfilter,$socid,$maxvalue);
             print '</td>';
             print '<td>';
             if ($nbqualifiedlines > 0)
diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php
index a1a452a939dc8110364dba6d04ccd00665a2c396..b76ed8c37242666151b6e1b32ce7e28223bb51fd 100644
--- a/htdocs/core/class/html.formfile.class.php
+++ b/htdocs/core/class/html.formfile.class.php
@@ -439,12 +439,17 @@ class FormFile
             $file_list=dol_dir_list($filedir,'files',0,$filter,'\.meta$'.($png?'|'.$png:''),'date',SORT_DESC);
 
             // Affiche en-tete tableau si non deja affiche
-            if (count($file_list) && ! $headershown && !$iconPDF)
+            if (! empty($file_list) && ! $headershown && ! $iconPDF)
             {
                 $headershown=1;
                 $out.= '<div class="titre">'.$titletoshow.'</div>';
                 $out.= '<table class="border" summary="listofdocumentstable" width="100%">';
             }
+            else if (empty($file_list) && ! empty($iconPDF))
+            {
+            	// For ajax treatment
+            	$out.= '<div id="gen_pdf_'.$filename.'" class="linkobject hideobject">'.img_picto('', 'refresh').'</div>'."\n";
+            }
 
             // Loop on each file found
             foreach($file_list as $file)
@@ -458,15 +463,15 @@ class FormFile
                 if ($modulepart == 'donation')            { $relativepath = get_exdir($filename,2).$file["name"]; }
                 if ($modulepart == 'export')              { $relativepath = $file["name"]; }
 
-                if (!$iconPDF) $out.= "<tr ".$bc[$var].">";
+                if (! $iconPDF) $out.= "<tr ".$bc[$var].">";
 
                 // Show file name with link to download
-                if (!$iconPDF) $out.= '<td nowrap="nowrap">';
+                if (! $iconPDF) $out.= '<td nowrap="nowrap">';
                 $out.= '<a href="'.DOL_URL_ROOT . '/document.php?modulepart='.$modulepart.'&amp;file='.urlencode($relativepath).'"';
                 $mime=dol_mimetype($relativepath,'',0);
                 if (preg_match('/text/',$mime)) $out.= ' target="_blank"';
                 $out.= '>';
-                if (!$iconPDF)
+                if (! $iconPDF)
                 {
                     $out.= img_mime($file["name"],$langs->trans("File").': '.$file["name"]).' '.dol_trunc($file["name"],$maxfilenamelength);
                 }
@@ -474,12 +479,15 @@ class FormFile
                 {
                     $out.= img_pdf($file["name"],2);
                 }
-                $out.= '</a>';
-                if (!$iconPDF) $out.= '</td>';
-                // Affiche taille fichier
-                if (!$iconPDF) $out.= '<td align="right" nowrap="nowrap">'.dol_print_size(dol_filesize($filedir."/".$file["name"])).'</td>';
-                // Affiche date fichier
-                if (!$iconPDF) $out.= '<td align="right" nowrap="nowrap">'.dol_print_date(dol_filemtime($filedir."/".$file["name"]),'dayhour').'</td>';
+                $out.= '</a>'."\n";
+                if (! $iconPDF)
+                {
+                	$out.= '</td>';
+                	// Show file size
+                	$out.= '<td align="right" nowrap="nowrap">'.dol_print_size(dol_filesize($filedir."/".$file["name"])).'</td>';
+                	// Show file date
+                	$out.= '<td align="right" nowrap="nowrap">'.dol_print_date(dol_filemtime($filedir."/".$file["name"]),'dayhour').'</td>';
+                }
 
                 if ($delallowed)
                 {
@@ -489,7 +497,7 @@ class FormFile
                     $out.= '">'.img_delete().'</a></td>';
                 }
 
-                if (!$iconPDF) $out.= '</tr>';
+                if (! $iconPDF) $out.= '</tr>';
 
                 $this->numoffiles++;
             }
diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php
index 4463a943486b45648c9b92734668a8eada084274..341fe8529cc786896bf979b87b107ccb5c71f1a2 100644
--- a/htdocs/core/lib/pdf.lib.php
+++ b/htdocs/core/lib/pdf.lib.php
@@ -752,11 +752,11 @@ function pdf_getlinedesc($object,$i,$outputlangs,$hideref=0,$hidedesc=0,$issuppl
 		{
 			if ($idprod)
 			{
-				if ( empty($hidedesc) ) $libelleproduitservice.=$desc;
+				if ( empty($hidedesc) ) $libelleproduitservice.=dol_htmlentitiesbr($desc,1);
 			}
 			else
 			{
-				$libelleproduitservice.=$desc;
+				$libelleproduitservice.=dol_htmlentitiesbr($desc,1);
 			}
 		}
 	}
diff --git a/htdocs/langs/HOWTO-Translation.txt b/htdocs/langs/HOWTO-Translation.txt
old mode 100755
new mode 100644
diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php
index 5a214c0466cb0e5d366fa725af376adfadb1014f..f9408b2896b5fa92be491c29b5793aa34fe1fd57 100644
--- a/htdocs/main.inc.php
+++ b/htdocs/main.inc.php
@@ -73,7 +73,7 @@ if (function_exists('get_magic_quotes_gpc'))	// magic_quotes_* removed in PHP6
 function test_sql_and_script_inject($val, $type)
 {
 	$sql_inj = 0;
-	// For SQL Injection (onyl GET and POST are used to be included into bad escaped SQL requests)
+	// For SQL Injection (only GET and POST are used to be included into bad escaped SQL requests)
 	if ($type != 2)
 	{
     	$sql_inj += preg_match('/delete[\s]+from/i', $val);
diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php
index 2e00f12f5f95d137150ded9524c4aa6fe9dc08f4..f36853e6baeb99bcb7db0c84a1bb9e77fe27e0a0 100644
--- a/htdocs/societe/class/societe.class.php
+++ b/htdocs/societe/class/societe.class.php
@@ -1217,17 +1217,18 @@ class Societe extends CommonObject
 
     /**
      *    	Add a discount for third party
-     *    	@param      remise      Montant de la remise
-     *    	@param      user        Utilisateur qui accorde la remise
-     *    	@param      desc		Motif de l'avoir
-     *      @param      tva_tx      VAT rate
-     *		@return		int			<0 if KO, id or record if OK
+     *
+     *    	@param	float	$remise     Amount of discount
+     *    	@param  User	$user       User adding discount
+     *    	@param  string	$desc		Reason of discount
+     *      @param  float	$tva_tx     VAT rate
+     *		@return	int					<0 if KO, id of discount record if OK
      */
     function set_remise_except($remise, $user, $desc, $tva_tx=0)
     {
         global $langs;
 
-        // Nettoyage des parametres
+        // Clean parameters
         $remise = price2num($remise);
         $desc = trim($desc);
 
@@ -1269,11 +1270,12 @@ class Societe extends CommonObject
     }
 
     /**
-     *    	\brief      Renvoie montant TTC des reductions/avoirs en cours disponibles de la societe
-     *		\param		user		Filtre sur un user auteur des remises
-     * 		\param		filter		Filtre autre
-     * 		\param		maxvalue	Filter on max value for discount
-     *		\return		int			<0 if KO, Credit note amount otherwise
+     *  Renvoie montant TTC des reductions/avoirs en cours disponibles de la societe
+     *
+     *	@param	User	$user		Filtre sur un user auteur des remises
+     * 	@param	string	$filter		Filtre autre
+     * 	@param	string	$maxvalue	Filter on max value for discount
+     *	@return	int					<0 if KO, Credit note amount otherwise
      */
     function getAvailableDiscounts($user='',$filter='',$maxvalue=0)
     {
@@ -1294,6 +1296,7 @@ class Societe extends CommonObject
 
     /**
      *      Return array of sales representatives
+     *
      *      @return     array       Array of sales representatives of third party
      */
     function getSalesRepresentatives($user='')
@@ -1331,8 +1334,8 @@ class Societe extends CommonObject
     /**
      * Set the price level
      *
-     * @param $price_level
-     * @param $user
+     * @param 	int		$price_level	Level of price
+     * @param 	User	$user			Use making change
      */
     function set_price_level($price_level, $user)
     {