diff --git a/inc-admin.php3 b/inc-admin.php3
index 829c9c17a743e8e516eb6a48a3ab77210dc0bc82..10c7f04da1e348bd69a4a09ed29dbe13b2ff640e 100644
--- a/inc-admin.php3
+++ b/inc-admin.php3
@@ -180,26 +180,24 @@ function affiche_contexte_erreur($texte) {
 // ajouter &var_debug=oui pour voir les erreurs et en parler sur spip@rezo.net
 
 function affiche_erreurs_execution_page() {
-  global $tableau_des_erreurs, $affiche_boutons_admin;
-	echo "<div style='height: 100%; width: 100%; position: absolute; top: 10px; z-index: 1000; background-color: pink;'>";
-	if (!$affiche_boutons_admin)
-	  echo "<h2>",(_T('info_travaux_titre')), "</h2>";
-	else {
-	  echo "<h2>",
-	    _L("Squelette invalide"),
-	    "</h2>",
-	    "<p>",
-	    _L("PHP a rencontr&eacute; les erreurs suivantes :"),
-	    "<code><ul>";
-	  foreach ($tableau_des_erreurs as $err) {
-	    echo "<li>$err[2] $err[3]  $err[1]",
-	      "<small>$err[4]</small><br><br>",
-	      "</li>\n";
-	  }
-	  echo "</ul></code>";
-	  $GLOBALS['bouton_admin_debug'] = true;
+	global $tableau_des_erreurs, $affiche_boutons_admin;
+
+	if ($affiche_boutons_admin) {
+		echo "<div style='position: absolute; top: 10px;
+			z-index: 1000; background-color: pink;'>";
+		echo "<h2>",
+		_L("Erreur(s) dans le squelette"),
+		"</h2>",
+		"<code><ul>";
+		foreach ($tableau_des_erreurs as $err) {
+			echo "<li>$err[2] $err[3]  $err[1]",
+			"<small>$err[4]</small><br><br>",
+			"</li>\n";
+		}
+		echo "</ul></code>";
+		echo "</div>";
+		$GLOBALS['bouton_admin_debug'] = true;
 	}
-	echo "</div>";
 }
 
 //
@@ -253,24 +251,25 @@ function erreur_requete_boucle($query, $id_boucle, $type) {
 
 
 //
-// Erreur de syntaxe des squelettes : afficher le code fautif
+// Erreur de syntaxe des squelettes : memoriser le code fautif
 //
-function erreur_squelette($message, $lieu) {
+function erreur_squelette($message='', $lieu='') {
 	global $auteur_session;
 	static $runs;
-	
+
+	if (is_array($message)) list($message, $lieu) = $message;
+
 	spip_log("Erreur squelette: $message | $lieu ("
 		. $GLOBALS['fond'].".html)");
 	$GLOBALS['bouton_admin_debug'] = true;
 	spip_error_handler(1," $message $lieu ", '','','?');
 	// Eviter les boucles infernales
 	if (++$runs > 4) {
-		if (!$HTTP_COOKIE_VARS['spip_admin'] AND
-		    !$auteur_session AND
-		    !$GLOBALS['var_debug'])
-		  $messages =  "<h2>".(_T('info_travaux_titre')). "</h2>";
-		die ("<div style='position: fixed; top: 10px; left: 10px;
-		z-index: 10000; background-color: pink;'>$message</div>");
+		if ($HTTP_COOKIE_VARS['spip_admin'] OR
+		$auteur_session['statut'] == '0minirezo' OR
+		$GLOBALS['var_debug'])
+			die ("<div style='position: fixed; top: 10px; left: 10px;
+			z-index: 10000; background-color: pink;'>$message</div>");
 	}
 }
 
diff --git a/inc-compilo-index.php3 b/inc-compilo-index.php3
index a2d6e3ce840b4a2062fed4102a517de9f5e65b86..c2a5f14406a3b9789f0f4511962e545fb42de3c7 100644
--- a/inc-compilo-index.php3
+++ b/inc-compilo-index.php3
@@ -31,7 +31,7 @@ function index_pile($idb, $nom_champ, &$boucles, $explicite='') {
 
 	$c = strtolower($nom_champ);
 	// attention: entre la boucle nommee 0, "" et le tableau vide,
-	// il y a incoh�rences qu'il vaut mieux �viter
+	// il y a incoherences qu'il vaut mieux eviter
 	while ($boucles[$idb]) {
 #		spip_log("Cherche: $nom_champ '$idb' '$c'");
 		$r = $boucles[$idb]->type_requete;
diff --git a/inc-compilo.php3 b/inc-compilo.php3
index 10378a7083615d799b478ff5f937d20d164afe63..1c8ef4c1907a9649c40518ef889f938b3267129c 100644
--- a/inc-compilo.php3
+++ b/inc-compilo.php3
@@ -12,29 +12,21 @@ define("_INC_COMPILO", "1");
 // Definition de la structure $p, et fonctions de recherche et de reservation
 // dans l'arborescence des boucles
 include_local("inc-compilo-index.php3");  # index ? structure ? pile ?
-#include_local("inc-index-squel.php3"); # (anciens noms des fichiers)
 
 // definition des boucles
 include_local("inc-boucles.php3");
-#include_local("inc-reqsql-squel.php3");
 
 // definition des criteres
 include_local("inc-criteres.php3");
-#include_local("inc-arg-squel.php3");
 
 // definition des balises
 include_local("inc-balises.php3");
-#include_local("inc-logo-squel.php3");
-#include_local("inc-vrac-squel.php3");
 
 // gestion des balises de forums
 include_local("inc-forum.php3");
-#include_local("inc-form-squel.php3");
 
 // definition de l'API
 include_local("inc-compilo-api.php3");
-#include_local("inc-bcl-squel.php3");
-#include_local("inc-champ-squel.php3");
 
 # definition des tables
 include_ecrire('inc_serialbase.php3');
@@ -439,7 +431,7 @@ function calculer_liste($tableau, $descr, &$boucles, $id_boucle='', $niv=1) {
 						$p->params,
 						$id_boucle,
 						$boucles);
-			$commentaire = "<INCLURE($p->fichier)>";
+			$commentaire = '<INCLURE('.$p->fichier.')>';
 			$avant='';
 			$apres='';
 			$altern = "''";
@@ -454,16 +446,18 @@ function calculer_liste($tableau, $descr, &$boucles, $id_boucle='', $niv=1) {
 			  ereg_replace("-","_", $nom) . $descr['nom'] .
 			  '($Cache, $Pile, $doublons, $Numrows, $SP)';
 			$commentaire='';
-			$avant = calculer_liste($p->cond_avant, $newdescr, $boucles, $id_boucle, $niv+2);
-			$apres = calculer_liste($p->cond_apres, $newdescr, $boucles, $id_boucle, $niv+2);
-			$altern = calculer_liste($p->cond_altern, $newdescr, $boucles, $id_boucle, $niv+1);
+			$avant = calculer_liste($p->cond_avant,
+				$newdescr, $boucles, $id_boucle, $niv+2);
+			$apres = calculer_liste($p->cond_apres,
+				$newdescr, $boucles, $id_boucle, $niv+2);
+			$altern = calculer_liste($p->cond_altern,
+				$newdescr, $boucles, $id_boucle, $niv+1);
 			break;
 
 		// balise SPIP
 		default: 
 
-	// cette structure pourrait etre completee d�s le phras� (a faire)
-
+			// cette structure pourrait etre completee des le phrase' (a faire)
 			$p->id_boucle = $id_boucle;
 			$p->boucles = &$boucles;
 			$p->id_mere = $descr['id_mere'];
@@ -473,8 +467,10 @@ function calculer_liste($tableau, $descr, &$boucles, $id_boucle='', $niv=1) {
 
 			$code = calculer_champ($p);
 			$commentaire = '#' . $p->nom_champ . $p->etoile;
-			$avant = calculer_liste($p->cond_avant, $descr, $boucles, $id_boucle, $niv+1);
-			$apres = calculer_liste($p->cond_apres, $descr, $boucles, $id_boucle, $niv+1);
+			$avant = calculer_liste($p->cond_avant,
+				$descr, $boucles, $id_boucle, $niv+1);
+			$apres = calculer_liste($p->cond_apres,
+				$descr, $boucles, $id_boucle, $niv+1);
 			$altern = "''";
 			break;
 
@@ -526,7 +522,7 @@ function calculer_squelette($squelette, $nom, $gram, $sourcefile) {
 #	include_local('inc-compilo-debug.php3');
 #	 afftable($racine);
 #	 affboucles($boucles);
- 
+
 	// tableau des informations sur le squelette
 	$descr = array('nom' => $nom, 'documents' => false);
 
@@ -541,48 +537,48 @@ function calculer_squelette($squelette, $nom, $gram, $sourcefile) {
 	// Commencer par reperer les boucles appelees explicitement 
 	// car elles indexent les arguments de maniere derogatoire
 		foreach($boucles as $id => $boucle) { 
-		    if ($boucle->type_requete == 'boucle') {
-			$rec = &$boucles[$boucle->param];
-			if (!$rec) {
-			  return array(_T('info_erreur_squelette'),
-				       ($boucle->param . 
-					_L(' boucle recursive non definie')));
-			} 
-			$rec->externe = $id;
-			$descr['id_mere'] = $id;
-			$boucles[$id]->return =
-			  calculer_liste(array($rec),
-					 $descr,
-					 $boucles,
-					 $boucle->param);
-		    }
-		} 
-		foreach($boucles as $id => $boucle)
-		  { 
-		    $type = $boucle->type_requete;
-		    if ($type != 'boucle') 
-		      {
-			$boucles[$id]->id_table = $table_des_tables[$type];
-			if ($boucles[$id]->id_table) {
-			  $boucles[$id]->primary = $table_primary[$type];
-			} else { 
-			  // table non Spip.
-			  $boucles[$id]->id_table = $type;
-			  $serveur = $boucle->sql_serveur;
-			  $boucles[$id]->primary = $tables_des_serveurs_sql[$serveur ? $serveur : 'localhost'][$type]['key']["PRIMARY KEY"]; 
-			}
-			if ($boucle->param) {
-				$res = calculer_criteres($id, $boucles);
-				if (is_array($res)) return $res; # erreur
+			if ($boucle->type_requete == 'boucle') {
+				$rec = &$boucles[$boucle->param];
+				if (!$rec) {
+					return array(_T('info_erreur_squelette'),
+						($boucle->param
+						. _L(' boucle recursive non definie')));
+				} else {
+					$rec->externe = $id;
+					$descr['id_mere'] = $id;
+					$boucles[$id]->return =
+						calculer_liste(array($rec),
+							 $descr,
+							 $boucles,
+							 $boucle->param);
+				}
 			}
-			$descr['id_mere'] = $id;
-			$boucles[$id]->return =
-			  calculer_liste($boucle->milieu,
+		}
+		foreach($boucles as $id => $boucle) { 
+			$type = $boucle->type_requete;
+			if ($type != 'boucle') {
+				$boucles[$id]->id_table = $table_des_tables[$type];
+				if ($boucles[$id]->id_table) {
+					$boucles[$id]->primary = $table_primary[$type];
+				} else { 
+					// table non Spip.
+					$boucles[$id]->id_table = $type;
+					$serveur = $boucle->sql_serveur;
+					$boucles[$id]->primary = $tables_des_serveurs_sql[$serveur ? $serveur : 'localhost'][$type]['key']["PRIMARY KEY"]; 
+				}
+				if ($boucle->param) {
+					$res = calculer_criteres($id, $boucles);
+					if (is_array($res))
+						return $res; # erreur
+				}
+				$descr['id_mere'] = $id;
+				$boucles[$id]->return =
+				calculer_liste($boucle->milieu,
 					 $descr,
 					 $boucles,
 					 $id);
-		      }
-		  }
+			}
+		}
 	}
 
 	// idem pour la racine
@@ -598,15 +594,17 @@ function calculer_squelette($squelette, $nom, $gram, $sourcefile) {
 
 	$code = '';
 	if ($boucles) {
+
 		foreach($boucles as $id => $boucle) {
-		  // appeler la fonction de definition de la boucle
+			// appeler la fonction de definition de la boucle
 			$f = 'boucle_'.strtoupper($boucle->type_requete);
-		  // si pas de definition perso, definition spip
+			// si pas de definition perso, definition spip
 			if (!function_exists($f)) $f = $f.'_dist';
-		  // laquelle a une definition par defaut
-			if (!function_exists($f)) $f = 'boucle_DEFAUT';	
+			// laquelle a une definition par defaut
+			if (!function_exists($f)) $f = 'boucle_DEFAUT';
 			$boucles[$id]->return = $f($id, $boucles);
 		}
+
 		foreach($boucles as $id => $boucle) {
 
 			// Reproduire la boucle en commentaire
diff --git a/inc-criteres.php3 b/inc-criteres.php3
index 7dd9ea3de8db760fc7d62be8756510587c1f018e..0d30be9d8b8970958adb02c8beeacfc04e119c7c 100644
--- a/inc-criteres.php3
+++ b/inc-criteres.php3
@@ -15,7 +15,7 @@ function critere_racine_dist($idb, &$boucles, $param, $not) {
 	$boucle = &$boucles[$idb];
 
 	if ($param != 'racine' OR $not)
-		return array(_T('info_erreur_squelette'), $param);
+		erreur_squelette(_T('info_erreur_squelette'), $param);
 
 	$boucle->where[] = $boucle->id_table.".id_parent='0'";
 
@@ -27,7 +27,7 @@ function critere_exclus_dist($idb, &$boucles, $param, $not) {
 	$boucle = &$boucles[$idb];
 
 	if ($param != 'exclus' OR $not)
-		return array(_T('info_erreur_squelette'), $param);
+		erreur_squelette(_T('info_erreur_squelette'), $param);
 
 	$boucle->where[] = $boucle->id_table . '.' . $boucle->primary."!='\"."
 	. calculer_argument_precedent($idb,$boucle->primary, $boucles) .
@@ -42,7 +42,7 @@ function critere_doublons_dist($idb, &$boucles, $param, $not) {
 
 	if (!preg_match("/(doublons|unique)[[:space:]]*([a-z_0-9]*)/i",
 	$param, $match))
-		return array(_T('info_erreur_squelette'), $param);
+		erreur_squelette(_T('info_erreur_squelette'), $param);
 
 	$boucle->doublons = $boucle->type_requete . $match[2];
 	$boucle->where[] = '" .' .
@@ -61,7 +61,7 @@ function critere_lang_select_dist($idb, &$boucles, $param, $not) {
 			$lang_select = ($lang_select=='oui')?'non':'oui';
 		$boucle->lang_select = $lang_select;
 	}
-	else return array(_T('info_erreur_squelette'), $param);
+	else erreur_squelette(_T('info_erreur_squelette'), $param);
 }
 
 // {debut_xxx}
@@ -73,7 +73,7 @@ function critere_debut_dist($idb, &$boucles, $param, $not) {
 		$boucle->limit =
 			'intval($GLOBALS["'.$debut_lim.'"]).",'.$match[2] .'"' ;
 	}
-	else return array(_T('info_erreur_squelette'), $param);
+	else erreur_squelette(_T('info_erreur_squelette'), $param);
 }
 
 // {recherche}
@@ -116,10 +116,10 @@ function critere_inverse_dist($idb, &$boucles, $param, $not) {
 		if ($boucle->order)
 			$boucle->order .= ".' DESC'";
 		else 
-			return array(_L("inversion d'un ordre inexistant"), 
-				     "BOUCLE" . $idb);
+			erreur_squelette(_L("inversion d'un ordre inexistant"), 
+			"BOUCLE" . $idb);
 	} else
-		return array(_T('info_erreur_squelette'), $param);
+		erreur_squelette(_T('info_erreur_squelette'), "{$param} BOUCLE$idb");
 }
 
 // {traduction}
@@ -140,7 +140,7 @@ function critere_traduction_dist($idb, &$boucles, $param, $not) {
 				$boucles)
 			. ".\"'))";
 	} else
-		return array(_T('info_erreur_squelette'), $param);
+		erreur_squelette(_T('info_erreur_squelette'), $param);
 }
 
 // {origine_traduction}
@@ -151,7 +151,7 @@ function critere_origine_traduction_dist($idb, &$boucles, $param, $not) {
 		$boucle->where[] = $boucle->id_table.".id_trad = "
 		. $boucle->id_table . '.' . $boucle->primary;
 	else
-		return array(_T('info_erreur_squelette'), $param);
+		erreur_squelette(_T('info_erreur_squelette'), $param);
 }
 
 
@@ -160,7 +160,7 @@ function critere_origine_traduction_dist($idb, &$boucles, $param, $not) {
 function critere_meme_parent_dist($idb, &$boucles, $param, $not) {
 	$boucle = &$boucles[$idb];
 	if ($param != 'meme_parent')
-		return array(_T('info_erreur_squelette'), $param);
+		erreur_squelette(_T('info_erreur_squelette'), $param);
 	else {
 		if ($boucle->type_requete == 'rubriques') {
 			$boucle->where[] = $boucle->id_table.".id_parent='\"."
@@ -175,7 +175,7 @@ function critere_meme_parent_dist($idb, &$boucles, $param, $not) {
 			$boucle->where[] = $boucle->id_table.".id_parent > 0";
 			$boucle->plat = true;
 		} else
-			return array(_L("{meme_parent} ne s'applique qu'aux boucles (FORUMS) ou (RUBRIQUES)"), "BOUCLE" . $idb);
+			erreur_squelette(_L("{meme_parent} ne s'applique qu'aux boucles (FORUMS) ou (RUBRIQUES)"), "BOUCLE" . $idb);
 	}
 }
 
@@ -199,7 +199,7 @@ function critere_branche_dist($idb, &$boucles, $param, $not) {
 		else
 			$boucle->where[] = $where;
 	} else
-		return array(_T('info_erreur_squelette'), $param);
+		erreur_squelette(_T('info_erreur_squelette'), $param);
 }
 
 // Tri : {par xxxx}
@@ -207,7 +207,7 @@ function critere_branche_dist($idb, &$boucles, $param, $not) {
 function critere_par_dist($idb, &$boucles, $param, $not) {
 	$boucle = &$boucles[$idb];
 	if ($not)
-		return array(_T('info_erreur_squelette'), $param);
+		erreur_squelette(_T('info_erreur_squelette'), $param);
 
 	preg_match('/par[[:space:]]*(.*)/ims', $param, $regs);
 	$tri = trim($regs[1]);
@@ -275,9 +275,12 @@ function calculer_criteres ($idb, &$boucles) {
 		// fonction critere standard ?
 		if (!function_exists($f))
 			$f = 'calculer_critere_DEFAUT';
+
+		// Applique le critere
 		$res = $f($idb, $boucles, $param, $not);
-		if (is_array($res)) return $res; # erreur
-		
+
+		// gestion d'erreur
+		if (is_array($res)) erreur_squelette($res);
 	}
 }
 
@@ -327,7 +330,8 @@ function calculer_critere_DEFAUT($idb, &$boucles, $param, $not) {
 			if ($match[3]) {
 				if (strtoupper($op) != 'IN') {
 					$val = calculer_param_dynamique($match[6], $boucles, $idb);
-					if (is_array($val)) return $val;
+					// gestion d'erreur
+					if (is_array($val)) erreur_squelette($val);
 				}
 				else {
 				// traitement special des valeurs textuelles
@@ -335,7 +339,7 @@ function calculer_critere_DEFAUT($idb, &$boucles, $param, $not) {
 					$val2 = split(" *, *", $val2[1]);
 					foreach ($val2 as $v) {
 						$v = calculer_param_dynamique($v, $boucles, $idb);
-						if (is_array($v)) return $v;
+						if (is_array($v)) erreur_squelette($v);
 						if (strpos('"0123456789',$v[0]) !== false)
 							$val3[] = $v;
 						else