diff --git a/ecrire/public/compiler.php b/ecrire/public/compiler.php
index dda410292b2cfa72a1ca062ba701314d1f1bf4b6..c34e438b51ca97e2679b2c81e530a252b332ddd9 100644
--- a/ecrire/public/compiler.php
+++ b/ecrire/public/compiler.php
@@ -360,12 +360,12 @@ function calculer_from(&$boucle)
 function calculer_order(&$boucle)
 {
 	$order = $boucle->order;
-	if (isset($boucle->modificateur['collate'])){
-		$col = $boucle->modificateur['collate'];
-		$col = ".($col ?' COLLATE '.$col:'')";
+	/*if (isset($boucle->modificateur['collate'])){
+		$col = "." . $boucle->modificateur['collate'];
 		foreach($order as $k=>$o)
-			$order[$k] .= $col;
-	}
+			if (strpos($order[$k],'COLLATE')===false)
+				$order[$k].= $col;
+	}*/
 	return join(', ', $order);
 }
 
diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php
index 9af626e199337e8e181da23eae6f782cbb2fb9aa..2c52b26a291bd192a6b9129952dad5c363865e50 100644
--- a/ecrire/public/criteres.php
+++ b/ecrire/public/criteres.php
@@ -282,8 +282,11 @@ function critere_collecte_dist($idb,&$boucles, $crit) {
 	if (isset($crit->param[0])) {
 		$_coll = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
 		$boucle = $boucles[$idb];
-		$boucle->modificateur['collate'] = $_coll;
-	} else 
+		$boucle->modificateur['collate'] = "($_coll ?' COLLATE '.$_coll:'')";
+    $n = count($boucle->order);
+    if ($n && (strpos($boucle->order[$n-1],'COLLATE')===false))
+    	$boucle->order[$n-1] .= " . " . $boucle->modificateur['collate'];
+	} else
 		erreur_squelette(_T('zbug_info_erreur_squelette'),
 			"{collecte ?} BOUCLE$idb");
 }
@@ -323,6 +326,7 @@ function critere_parinverse($idb, &$boucles, $crit, $sens) {
 	global $table_des_tables, $tables_des_serveurs_sql,  $exceptions_des_jointures;
 	$boucle = &$boucles[$idb];
 	if ($crit->not) $sens = $sens ? "" : " . ' DESC'";
+	$collecte = (isset($boucle->modificateur['collecte']))?" . ".$boucle->modificateur['collecte']:"";
 
 	foreach ($crit->param as $tri) {
 
@@ -402,8 +406,9 @@ function critere_parinverse($idb, &$boucles, $crit, $sens) {
 	      }
 	  }
 	  if ($order)
-	    $boucle->order[] = ($fct ? "'$fct(' . $order . ')'" : $order) .
-	      (($order[0]=="'") ? $sens : "");
+	    $boucle->order[] = ($fct ? "'$fct(' . $order . ')'" : $order)
+	    	. $collecte
+	      . (($order[0]=="'") ? $sens : "");
 	}
 }