diff --git a/inc-admin.php3 b/inc-admin.php3
index 7dcc55bfbaac2e8c7366379b48f6ce2f63f4d720..37a1c76904d0cbc16df4ccd3afdda25fcb709167 100644
--- a/inc-admin.php3
+++ b/inc-admin.php3
@@ -279,7 +279,7 @@ function boucle_debug_resultat ($nom, $resultat) {
 function boucle_debug_compile ($id, $nom, $pretty, $sourcefile, $code) {
 	global $debug_objets;
 
-	$debug_objets['boucles'][$nom.$id] = $code;
+	$debug_objets['code'][$nom.$id] = $code;
 	$debug_objets['pretty'][$nom.$id] = $pretty;
 }
 
@@ -291,6 +291,13 @@ function squelette_debug_compile($nom, $sourcefile, $squelette) {
 	$debug_objets['sourcefile'][$nom] = $sourcefile;
 }
 
+// appelee a chaque parsing de squelette (inc-parser)
+function boucle_debug ($id, $nom, $boucle) {
+	global $debug_objets;
+
+	$debug_objets['boucle'][$nom.$id] = $boucle;
+}
+
 // l'environnement graphique du debuggueur 
 function debug_page($no_exit = false) {
 	global $flag_ob;
@@ -309,8 +316,8 @@ function debug_page($no_exit = false) {
 		$link = $GLOBALS['clean_link'];
 		$link->addvar('debug_objet', $nom_skel);
 		$link->delvar('debug_affiche');
-		echo " <a href='".$link->getUrl()."&debug_affiche=code'>code</a>";
 		echo " <a href='".$link->getUrl()."&debug_affiche=resultat'>resultat</a>";
+		echo " <a href='".$link->getUrl()."&debug_affiche=code'>code</a>";
 		echo "</li>\n<ul>\n";
 
 		if (is_array($debug_objets['pretty']))
@@ -321,6 +328,7 @@ function debug_page($no_exit = false) {
 				$link = $GLOBALS['clean_link'];
 				$link->addvar('debug_objet', $nom);
 				$link->delvar('debug_affiche');
+			echo " <a href='".$link->getUrl()."&debug_affiche=boucle'>boucle</a>";
 				echo " <a href='".$link->getUrl()."&debug_affiche=code'>code</a>";
 				echo " <a href='".$link->getUrl()."&debug_affiche=resultat'>resultat</a>";
 				echo "</li>\n";
@@ -334,9 +342,12 @@ function debug_page($no_exit = false) {
 		foreach ($res as $view) {
 			echo "<hr>".interdire_scripts($view);
 		}
-	} else if ($debug_objet AND $debug_affiche == 'code' AND $res = $debug_objets['boucles'][$debug_objet]) {
+	} else if ($debug_objet AND $debug_affiche == 'code' AND $res = $debug_objets['code'][$debug_objet]) {
 		echo "<b>".$debug_objets['pretty'][$debug_objet]."</b><br />";
 		highlight_string("<"."?php\n".$res."\n?".">");
+	} else if ($debug_objet AND $debug_affiche == 'boucle' AND $res = $debug_objets['boucle'][$debug_objet]) {
+		echo "<b>".$debug_objets['pretty'][$debug_objet]."</b><br />";
+		highlight_string($res);
 	}
 
 
diff --git a/inc-compilo.php3 b/inc-compilo.php3
index c717fb27ae7b452ba073687a1d42984d822860e0..084f517d99745cf89f789ed941248429805996db 100644
--- a/inc-compilo.php3
+++ b/inc-compilo.php3
@@ -518,7 +518,7 @@ function calculer_squelette($squelette, $nom, $gram, $sourcefile) {
 	$boucles = '';
 	spip_timer('calcul_skel');
 	include_local("inc-$gram-squel.php3");
-	$racine = parser($squelette, '',$boucles);
+	$racine = parser($squelette, '',$boucles, $nom);
 #	include_local('inc-compilo-debug.php3');
 #	 afftable($racine);
 #	 affboucles($boucles);
diff --git a/inc-html-squel.php3 b/inc-html-squel.php3
index 394565fa11ea2ed792e97c429d3ebe1a17e0045b..a79b45d6024aed64ab3dadc4a66f15e6578b01b0 100644
--- a/inc-html-squel.php3
+++ b/inc-html-squel.php3
@@ -225,7 +225,7 @@ function parser_param($params, &$result, $idb) {
 	$result->param = $params2;
 }
 
-function parser($texte, $id_parent, &$boucles) {
+function parser($texte, $id_parent, &$boucles, $nom) {
 
 	$all_res = array();
 
@@ -233,6 +233,14 @@ function parser($texte, $id_parent, &$boucles) {
 		$nom_boucle = $regs[1].$regs[2];
 		$p = strpos($texte, '<BOUCLE'.$nom_boucle);
 
+		// envoyer la boucle au debugueur
+		if ($GLOBALS['var_debug']) {
+			$preg = "@<B($nom_boucle|OUCLE${nom_boucle}[^-_.a-zA-Z0-9][^>]*)>"
+				. ".*</(BOUCLE|/?B)$nom_boucle>@ms";
+			preg_match($preg, $texte, $match);
+			boucle_debug ($nom_boucle, $nom, $match[0]);
+		}
+
 		//
 		// Recuperer la partie principale de la boucle
 		//
@@ -313,10 +321,10 @@ function parser($texte, $id_parent, &$boucles) {
 			$texte = substr($texte, $p + strlen($s));
 		}
 
-		$result->cond_avant = parser($result->cond_avant, $id_parent,$boucles);
-		$result->cond_apres = parser($result->cond_fin, $id_parent,$boucles);
-		$result->cond_altern = parser($result->cond_altern,$id_parent,$boucles);
-		$result->milieu = parser($milieu, $id_boucle,$boucles);
+		$result->cond_avant = parser($result->cond_avant, $id_parent,$boucles, $nom);
+		$result->cond_apres = parser($result->cond_fin, $id_parent,$boucles, $nom);
+		$result->cond_altern = parser($result->cond_altern,$id_parent,$boucles, $nom);
+		$result->milieu = parser($milieu, $id_boucle,$boucles, $nom);
 
 		$all_res = array_merge($all_res, parser_champs_etendus($debut));
 		$all_res[] = $result;