diff --git a/ecrire/balise/formulaire_ecrire_auteur.php b/ecrire/balise/formulaire_ecrire_auteur.php
index cac94835827e6ee64ac0403f5c0a602a0bf2f709..4a8c0ffe40b6d1fd618faebde27152f7162043e9 100644
--- a/ecrire/balise/formulaire_ecrire_auteur.php
+++ b/ecrire/balise/formulaire_ecrire_auteur.php
@@ -33,7 +33,8 @@ function balise_FORMULAIRE_ECRIRE_AUTEUR_stat($args, $context_compil) {
 				array ('champ' => 'FORMULAIRE_ECRIRE_AUTEUR',
 					'motif' => 'AUTEURS/ARTICLES'));
 
-		denoncer_inclure_dynamique($msg, $context_compil);
+		include_spip('public/compiler');
+		erreur_squelette($msg, reconstruire_contexte_compil($context_compil));
 		return '';
 	}
 	// Si on est dans un contexte article, 
diff --git a/ecrire/balise/formulaire_signature.php b/ecrire/balise/formulaire_signature.php
index 84a3246451b7721cfb467f726327e2f301ab1aca..5d969c87b621c5262536c82cc53c12fdf35efa85 100644
--- a/ecrire/balise/formulaire_signature.php
+++ b/ecrire/balise/formulaire_signature.php
@@ -38,7 +38,8 @@ function balise_FORMULAIRE_SIGNATURE_stat($args, $context_compil) {
 		$msg = array('zbug_champ_hors_motif',
 				array ('champ' => 'FORMULAIRE_SIGNATURE',
 				       'motif' => 'ARTICLES'));
-		denoncer_inclure_dynamique($msg, $context_compil);
+		include_spip('public/compiler');
+		erreur_squelette($msg, reconstruire_contexte_compil($context_compil));
 		return '';
 	}
 	// article sans petition => pas de balise
diff --git a/ecrire/balise/formulaire_site.php b/ecrire/balise/formulaire_site.php
index a92f8f4bd98b78b6966d4b1367969e5411256678..af25f7ed3e1cee367b59f290e23f9d5b6e0ad671 100644
--- a/ecrire/balise/formulaire_site.php
+++ b/ecrire/balise/formulaire_site.php
@@ -28,7 +28,8 @@ function balise_FORMULAIRE_SITE_stat($args, $context_compil) {
 		$msg = array('zbug_champ_hors_motif',
 				array ('champ' => 'FORMULAIRE_SITE',
 					'motif' => 'RUBRIQUES'));
-		denoncer_inclure_dynamique($msg, $context_compil);
+		include_spip('public/compiler');
+		erreur_squelette($msg, reconstruire_contexte_compil($context_compil));
 		return '';
 	}
 	// Verifier que les visisteurs sont autorises a proposer un site
diff --git a/ecrire/base/abstract_sql.php b/ecrire/base/abstract_sql.php
index dc652b5f17a71980298abde03b7caeb1143cc80d..e0183102b8dd989da88d0e34b728ee58d793dd51 100644
--- a/ecrire/base/abstract_sql.php
+++ b/ecrire/base/abstract_sql.php
@@ -99,15 +99,8 @@ function sql_select (
 	}
 
 	if (is_resource($res)) return $res;
-	$errno = sql_errno();
-	$error = sql_error();
-	$msg = array($errno, $error, $query);
-	if (!is_array($option))
-		erreur_squelette($msg);
-	else {
-		include_spip('quete.php');
-		denoncer_inclure_dynamique($msg, $option);
-	}
+	include_spip('public/compiler');
+	erreur_squelette(array(sql_errno(), sql_error(), $query), reconstruire_contexte_compil($context_compil));
 	return false;
 }
 
diff --git a/ecrire/index.php b/ecrire/index.php
index 21de9a6d03e07a7700bd67ac8aedccf9cf3d989b..5d2e0038f88b33efe9e5e1de74762a6c26cf16ae 100644
--- a/ecrire/index.php
+++ b/ecrire/index.php
@@ -158,7 +158,7 @@ $var_f = charger_fonction($exec);
 $var_f();
 
 if ($GLOBALS['var_mode'] == 'debug') {
-	erreur_squelette("", "");
+	erreur_squelette('', '');
 }
 if (isset($tableau_des_erreurs) AND count($tableau_des_erreurs) AND $affiche_boutons_admin) {
 	include_spip('public/debusquer');
diff --git a/ecrire/public/compiler.php b/ecrire/public/compiler.php
index 865a2ebcf32b8729814b799c6c751ad30658d5b3..59bc91e3381097f17cf433c37d8003cbb144660e 100644
--- a/ecrire/public/compiler.php
+++ b/ecrire/public/compiler.php
@@ -118,8 +118,8 @@ function argumenter_inclure($params, $rejet_filtres, $p, &$boucles, $id_boucle,
 
 define('CODE_INCLURE_SCRIPT', 'if (is_readable($path = %s))
 	include $path;
-else  denoncer_inclure_dynamique(array("fichier_introuvable", array("fichier" => "%s")),
-		array(%s));'
+else { include_spip("public/compiler");
+	erreur_squelette(array("fichier_introuvable", array("fichier" => "%s")), reconstruire_contexte_compil(array(%s)));}'
 );
 
 // http://doc.spip.org/@calculer_inclure
@@ -438,6 +438,18 @@ function memoriser_contexte_compil($p) {
 		_q($GLOBALS['spip_lang'])));
 }
 
+function reconstruire_contexte_compil($context_compil)
+{
+	if (!is_array($context_compil)) return $context_compil;
+	include_spip('public/interfaces');
+	$p = new Contexte;
+	$p->descr = array('sourcefile' => $context_compil[0],
+				  'nom' => $context_compil[1]);
+	$p->id_boucle = $context_compil[2];
+	$p->ligne = $context_compil[3];
+	$p->lang = $context_compil[4];
+	return $p;
+}
 
 // http://doc.spip.org/@calculer_dec
 function calculer_dec($nom, $val)
@@ -914,14 +926,15 @@ function compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $co
 					$boucles[$id]->jointures = $x;
 			} else {
 				$boucles[$id]->type_requete = '';
-				$x = $boucles[$id]->sql_serveur;
-				$x = $x ? "$x:$type" : $type;
-				// ne pas renvoyer d'erreur si la table est optionnelle
-				// declare par ? avant ) dans <BOUCLE_A(table ?)>
+				// Pas une erreur si la table est optionnelle
 				if (!$boucles[$id]->table_optionnelle) {
+					$boucle = $boucles[$id];
+					$x = (!$boucle->sql_serveur ? '' :
+					      ($boucle->sql_serveur . ":")) .
+					  $type;
 					$msg = array('zbug_table_inconnue',
 							array('table' => $x));
-					erreur_squelette($msg, $boucles[$id]);
+					erreur_squelette($msg, $boucle);
 				}
 			}
 		}
diff --git a/ecrire/public/composer.php b/ecrire/public/composer.php
index 576a5f4395f01637b1acd7f790a948cac75bfd27..2fc3c2c40ddf1a6103cff2bc9ea308445b9c1fad 100644
--- a/ecrire/public/composer.php
+++ b/ecrire/public/composer.php
@@ -68,7 +68,7 @@ function public_composer_dist($squelette, $mime_type, $gram, $source, $connect='
 		$f = $boucle->return;
 		if (@eval("return true; $f ;") ===  false) {
 		// Code syntaxiquement faux (critere etc mal programme')
-			erreur_squelette(_T('zbug_erreur_compilation'), $boucle); 
+			erreur_squelette(_T('zbug_erreur_compilation'), $boucle);
 			// continuer pour trouver d'autres fautes eventuelles
 			// mais prevenir que c'est mort
 			$nom = '';
@@ -366,7 +366,7 @@ function executer_balise_dynamique($nom, $args, $context_compil) {
 		else {
 			$msg =  "<span class='spip-debug-arg'>$nom</span> " .
 			  _T('zxml_inconnu_balise');
-			denoncer_inclure_dynamique($msg, $context_compil);
+			erreur_squelette($msg, reconstruire_contexte_compil($context_compil));
 			return '';
 		}
 	}
@@ -389,7 +389,7 @@ function executer_balise_dynamique($nom, $args, $context_compil) {
 
 			$msg =  "<span class='spip-debug-arg'>$nom</span> " .
 			  _T('zxml_inconnu_balise');
-			denoncer_inclure_dynamique($msg, $context_compil);
+			erreur_squelette($msg, reconstruire_contexte_compil($context_compil));
 			return '';
 		}
 	}
diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php
index 252fc985fc8f86bd8dbf5081092c2810a6ca66af..3f73b400e80672576370ce9594e3c15b70b7133b 100644
--- a/ecrire/public/criteres.php
+++ b/ecrire/public/criteres.php
@@ -625,15 +625,16 @@ function calculer_critere_parties_aux($idb, &$boucles, $param) {
 // Sinon, ne retourne rien (affectation directe dans l'arbre)
 
 // http://doc.spip.org/@calculer_criteres
-function calculer_criteres ($idb, &$boucles) {
-
+function calculer_criteres ($idb, &$boucles)
+{
+	$msg = '';
+	$boucle = $boucles[$idb];
+	$table = strtoupper($boucle->id_table);
 	$defaut = charger_fonction('DEFAUT', 'calculer_critere');
-	$err = '';
-	foreach($boucles[$idb]->criteres as $crit) {
+	foreach($boucle->criteres as $crit) {
 		$critere = $crit->op;
 		// critere personnalise ?
-		if (
-		  (!function_exists($f="critere_".strtoupper($boucles[$idb]->id_table)."_".$critere))
+		if ((!function_exists($f="critere_".$table."_".$critere))
 		AND (!function_exists($f=$f."_dist"))
 		AND (!function_exists($f="critere_".$critere))
 		AND (!function_exists($f=$f."_dist"))	) {
@@ -645,11 +646,11 @@ function calculer_criteres ($idb, &$boucles) {
 
 		// Gestion centralisee des erreurs pour pouvoir propager
 		if (is_array($res)) {
-			$err = $res;
-			erreur_squelette($res, $boucles[$idb]);
+			$msg = $res;
+			erreur_squelette($msg, $boucle);
 		}
 	}
-	return $err;
+	return $msg;
 }
 
 // Madeleine de Proust, revision MIT-1958 sqq, revision CERN-1989
diff --git a/ecrire/public/quete.php b/ecrire/public/quete.php
index aae7f673f17751e56a1ebe2c4484e1e4700e4180..c2ddbeb758b27959b12215242a33d01f162ac412 100644
--- a/ecrire/public/quete.php
+++ b/ecrire/public/quete.php
@@ -265,16 +265,4 @@ function quete_debut_pagination($primary,$valeur,$pas,$res,$serveur=''){
 	// sinon, calculer le bon numero de page
 	return floor($pos/$pas)*$pas;
 }
-
-function denoncer_inclure_dynamique($msg, $context_compil)
-{
-	include_spip('public/interfaces');
-	$p = new Contexte;
-	$p->descr = array('sourcefile' => $context_compil[0],
-				  'nom' => $context_compil[1]);
-	$p->id_boucle = $context_compil[2];
-	$p->ligne = $context_compil[3];
-	$p->lang = $context_compil[4];
-	erreur_squelette($msg, $p);
-}
 ?>
\ No newline at end of file