diff --git a/ecrire/public/compiler.php b/ecrire/public/compiler.php
index 5b33bf79f3a17cacb61e5f1ab70ae5257a0ba047..f37fd4d55a2e2323c94b976714f172cde6d4cb8c 100644
--- a/ecrire/public/compiler.php
+++ b/ecrire/public/compiler.php
@@ -492,11 +492,6 @@ function compile_cas($tableau, $descr, &$boucles, $id_boucle) {
 			$newdescr['niv']--;
 			$altern = calculer_liste($p->altern,
 				$newdescr, $boucles, $id_boucle);
-			if ($boucles[$nom]->fragment)
-				$fragment = $boucles[$nom]->fragment;
-			// si le nom du fragment n'a pas ete impose,
-			// ajouter le hash du squelette pour assurer l'unicite dans la page html produite
-			if ($fragment==$nom) $fragment.=$descr['nom'];
 			break;
 
 		case 'idiome':
@@ -549,12 +544,15 @@ function compile_cas($tableau, $descr, &$boucles, $id_boucle) {
 			}
 
 			// gestion d'une boucle-fragment (ahah)
-			if ($fragment) {
+			if (strlen($p->fragment)) {
+				static $nombre_fragments = array();
+				$fragment = $p->fragment;
+				$fragment .= $nombre_fragments[$p->fragment]++;
 				$code = '(($fragment = '.$code.')?
 				\'<div id="'.$fragment.'" class="fragment">\'
 				.$fragment
 				."</div>":"").
-				(($_GET["fragment"]=="'.$fragment.'")?
+				(($Pile[0]["fragment"]=="'.$fragment.'")?
 					exporter_fragment($fragment):""
 				)';
 			}
diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php
index 630ac425a2e7d09f4a3dce65b69371ca01952c26..9252cebab9af25b3488de628f444ca84edaedeba 100644
--- a/ecrire/public/criteres.php
+++ b/ecrire/public/criteres.php
@@ -105,14 +105,14 @@ function critere_pagination_dist($idb, &$boucles, $crit) {
 	$boucle->mode_partie = 'p+';
 	$boucle->partie = 'intval(_request("debut'.$idb.'"))';
 	$boucle->total_parties = $pas;
-	if (!isset($boucle->fragment)) $boucle->fragment = $idb;
+	$boucle->fragment = 'fragment_'.$boucle->descr['nom'].$idb;
 }
 
 // {fragment}
 // http://www.spip.net/@fragment
 function critere_fragment_dist($idb, &$boucles, $crit) {
 	if (!($param = $crit->param[0][0]->texte))
-		$param = 'fragment'.$idb;
+		$param = 'fragment_'.$boucle->descr['nom'].$idb;
 	if ($crit->not)
 		$param = false;
 	$boucle = &$boucles[$idb];