diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php
index a97265c848f9429436d98129ccf3f361bf704965..576d10b01bd9bd8108292835909dd2c881606dd6 100644
--- a/htdocs/core/class/html.form.class.php
+++ b/htdocs/core/class/html.form.class.php
@@ -2728,7 +2728,7 @@ class Form
     
     	if (count($this->cache_currencies)) return 0;    // Cache deja charge
     
-    	$sql = "SELECT code_iso, label";
+    	$sql = "SELECT code, code_iso, label";
         $sql.= " FROM ".MAIN_DB_PREFIX."c_currencies";
         $sql.= " WHERE active = 1";
         $sql.= " ORDER BY code_iso ASC";
@@ -2743,12 +2743,14 @@ class Form
     		{
     			$obj = $this->db->fetch_object($resql);
     
-    			// Si traduction existe, on l'utilise, sinon on prend le libelle par defaut
-    			$this->cache_currencies[$obj->code_iso] = ($obj->code_iso && $langs->trans("Currency".$obj->code_iso)!="Currency".$obj->code_iso?$langs->trans("Currency".$obj->code_iso):($obj->label!='-'?$obj->label:''));
+    			// Si traduction existe, on l'utilise, sinon on prend le libelle par defaut
+    			$this->cache_currencies[$obj->code]['code_iso'] = $obj->code_iso;
+    			$this->cache_currencies[$obj->code]['label'] = ($obj->code_iso && $langs->trans("Currency".$obj->code_iso)!="Currency".$obj->code_iso?$langs->trans("Currency".$obj->code_iso):($obj->label!='-'?$obj->label:''));
+    			$label[$obj->code] = $this->cache_currencies[$obj->code]['label'];
     			$i++;
     		}
     		
-    		asort($this->cache_currencies);
+    		array_multisort($label, SORT_ASC, $this->cache_currencies);
     		
     		return $num;
     	}
@@ -2778,18 +2780,18 @@ class Form
         if ($selected=='euro' || $selected=='euros') $selected='EUR';   // Pour compatibilite
 
         $out.= '<select class="flat" name="'.$htmlname.'">';
-        foreach ($this->cache_currencies as $code_iso => $label)
+        foreach ($this->cache_currencies as $currency)
         {
-        	if ($selected && $selected == $code_iso)
+        	if ($selected && $selected == $currency['code_iso'])
         	{
-        		$out.= '<option value="'.$code_iso.'" selected="selected">';
+        		$out.= '<option value="'.$currency['code_iso'].'" selected="selected">';
         	}
         	else
         	{
-        		$out.= '<option value="'.$code_iso.'">';
+        		$out.= '<option value="'.$currency['code_iso'].'">';
         	}
-        	$out.= $label;
-        	if ($code_iso) $out.= ' ('.$code_iso.')';
+        	$out.= $currency['label'];
+        	if ($currency['code_iso']) $out.= ' ('.$currency['code_iso'].')';
         	$out.= '</option>';
         }
         $out.= '</select>';