diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php
index 524c58e656c83e59f6058300f72e6ea0e79109aa..b730fe8bbb710249d02fb43e3252c624a7b5c060 100644
--- a/htdocs/compta/facture.php
+++ b/htdocs/compta/facture.php
@@ -1116,10 +1116,15 @@ if ($_GET['action'] == 'create')
 
     // Type de facture
 	$facids=$facturestatic->list_replacable_invoices($soc->id);
+	if ($facids < 0)
+	{
+		dolibarr_print_error($db,$facturestatic);
+		exit;
+	}
 	$options="";
-	foreach ($facids as $key => $value)
+	foreach ($facids as $facparam)
 	{
-		$options.='<option value="'.$key.'">'.$value.'</option>';
+		$options.='<option value="'.$facparam['id'].'">'.$facparam['ref'].'</option>';
 	}
 	$facids=$facturestatic->list_qualified_avoir_invoices($soc->id);
 	$optionsav="";
@@ -1676,15 +1681,14 @@ else
 			 */
 			if ($_GET['action'] == 'canceled')
 			{
-				// Si il y a une facture de remplacement pas encore valid�e (etat brouillon), 
-				// on ne permet pas de classer abandonner la facture
+				// S'il y a une facture de remplacement pas encore valid�e (etat brouillon), 
+				// on ne permet pas de classer abandonner la facture.
 				if ($facidnext)
 				{
 					$facturereplacement=new Facture($db);
 					$facturereplacement->fetch($facidnext);
 					$statusreplacement=$facturereplacement->statut;
 				}
-				print "x".$statusreplacement;
 				if ($facidnext && $statusreplacement == 0)
 				{
 					print '<div class="error">'.$langs->trans("ErrorCantCancelIfReplacementInvoiceNotValidated").'</div>';
diff --git a/htdocs/facture.class.php b/htdocs/facture.class.php
index cb763e658530721ff5990a2063b120b7f96f0293..9c5e237c0e07858485173f56a5e17c50c0bc01c2 100644
--- a/htdocs/facture.class.php
+++ b/htdocs/facture.class.php
@@ -1801,10 +1801,13 @@ class Facture extends CommonObject
 		$sql.= ' WHERE fk_facture_source = '.$this->id;
 		$sql.= ' AND type < 2';
 		if ($option == 'validated') $sql.= ' AND fk_statut = 1';
-		$sql.= ' ORDER BY fk_statut DESC';	// Au cas ou base corrompu et qu'il y a une
-											// facture de remplacement validee et une autre non
-											// on donne priorit� � la valid�e. Ne devrait pas arriver
-		
+		// PROTECTION BAD DATA
+		// Au cas ou base corrompue et qu'il y a une facture de remplacement valid�e
+		// et une autre non, on donne priorit� � la valid�e.
+		// Ne devrait pas arriver (sauf si acc�s concurrentiel et que 2 personnes
+		// ont cr�� en meme temps une facture de remplacement pour la meme facture)
+		$sql.= ' ORDER BY fk_statut DESC';	
+	
 		$resql=$this->db->query($sql);
 		if ($resql)
 		{
@@ -2240,7 +2243,7 @@ class Facture extends CommonObject
 	 *  	\brief     	Renvoi liste des factures remplacables
 	 *					Statut validee + aucun paiement + non paye + pas deja remplac�es
 	 *		\param		socid		Id societe
-	 *   	\return    	array		Tableau des factures ($id => $ref)
+	 *   	\return    	array		Tableau des factures ('id'=>id, 'ref'=>ref, 'statut'=>status)
 	 */
 	function list_replacable_invoices($socid=0)
 	{
@@ -2248,13 +2251,14 @@ class Facture extends CommonObject
 
 		$return = array();
 
-		$sql = "SELECT f.rowid as rowid, f.facnumber,";
+		$sql = "SELECT f.rowid as rowid, f.facnumber, f.fk_statut,";
 		$sql.= " ff.rowid as rowidnext";
 		$sql.= " FROM ".MAIN_DB_PREFIX."facture as f";
 		$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON f.rowid = pf.fk_facture";
 		$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."facture as ff ON f.rowid = ff.fk_facture_source";
 		$sql.= " WHERE f.fk_statut = 1 AND f.paye = 0 AND pf.fk_paiement IS NULL";
-		$sql.= " AND IFNULL(ff.fk_statut,0) = 0";	// Doit renvoy� vrai si pas de jointure trouv� ou si jointure vers statut � 0
+		$sql.= " AND ff.fk_statut IS NULL";			// Renvoie vrai si pas de jointure
+		//$sql.= " AND IFNULL(ff.fk_statut,0) = 0";	// Renvoie vrai si pas de jointure ou si jointure vers statut � 0
 		if ($socid > 0) $sql.=" AND f.fk_soc = ".$socid;
 		$sql.= " ORDER BY f.facnumber";
 
@@ -2264,9 +2268,11 @@ class Facture extends CommonObject
 		{
 			while ($obj=$this->db->fetch_object($resql))
 			{
-				$return[$obj->rowid]=$obj->facnumber;
+				$return[$obj->rowid]=array(	'id' => $obj->rowid, 
+											'ref' => $obj->facnumber,
+											'status' => $obj->fk_status);
 			}
-
+			//print_r($return);
 			return $return;
 		}
 		else