diff --git a/ecrire/inc_debug_sql.php3 b/ecrire/inc_debug_sql.php3
index 7c3531b017e9482053992cea5b810d28ef2aa99f..21d621683a0e670b87d0856d511f76fa62248e5b 100644
--- a/ecrire/inc_debug_sql.php3
+++ b/ecrire/inc_debug_sql.php3
@@ -10,23 +10,23 @@ define("_INC_DEBUG_SQL", "1");
 // ajouter &var_mode=debug pour voir les erreurs et en parler sur spip@rezo.net
 function affiche_erreurs_page($tableau_des_erreurs) {
 
-	echo "<div id='spip-debug' style='position: absolute; top: 20;",
-	" z-index: 1000;'><ul><li>",
-	_T('zbug_erreur_squelette'),
+	$GLOBALS['bouton_admin_debug'] = true;
+	$res = '';
+	foreach ($tableau_des_erreurs as $err) {
+		$res .= "<li>" .$err[0] . ",. <small>".$err[1]."</small><br /</li>\n";
+	}
+	return "<div id='spip-debug' 
+style='position: absolute; top: 20; z-index: 1000;'><ul><li>" .
+	_T('zbug_erreur_squelette') .
 
 ## aide locale courte a ecrire, avec lien vers une grosse page de documentation
 #		aide('erreur_compilation'),
 
-	"<br /></li>",
-	"<ul>";
-	foreach ($tableau_des_erreurs as $err) {
-		echo "<li>".$err[0],
-		", <small>".$err[1]."</small><br />",
-		"</li>\n";
-	}
-	echo "</ul>";
-	echo "</ul></div>";
-	$GLOBALS['bouton_admin_debug'] = true;
+	"<br /></li>" .
+	"<ul>" .
+	$res .
+	"</ul></ul></div>";
+
 }
 
 //
@@ -96,8 +96,9 @@ function erreur_squelette($message='', $lieu='') {
 		if ($_COOKIE['spip_admin'] OR
 		$auteur_session['statut'] == '0minirezo' OR
 		    ($GLOBALS['var_mode'] == 'debug')) {
-			echo debut_entete('Debug'), '</head><body>';
-			die(affiche_erreurs_page($tableau_des_erreurs));
+			echo debut_entete('Debug'), '</head><body>',
+				affiche_erreurs_page($tableau_des_erreurs);
+			exit;
 		}
 	}
 }
diff --git a/formulaire_forum-dist.html b/formulaire_forum-dist.html
index b7a6c4ffd0d0b35f846f057eb355dc0c2cb9dfe4..92ac3ddbd1af46587ab90ab4d78e422d0ebe7c1a 100644
--- a/formulaire_forum-dist.html
+++ b/formulaire_forum-dist.html
@@ -1,14 +1,10 @@
-<form action="[(#ENV{url})]" method="post" name="formulaire">
-
-<input type="hidden" name="ajout_forum" value="oui" />
-[<input type="hidden" name="alea" value="(#ENV{alea})" />]
-[<input type="hidden" name="hash" value="(#ENV{hash})" />]
-[<input type="hidden" name="retour" value="(#ENV{retour})" />]
-
-[<p>(#ENV*{modere})</p>]
-
-[(#ENV*{afficher_texte_hidden})]
-[(#ENV*{afficher_texte_input})
+<form action="[(#ENV{url})]" method="post" name="formulaire">[
+<input type="hidden" name="alea" value="(#ENV{alea})" />][
+<input type="hidden" name="hash" value="(#ENV{hash})" />][
+<input type="hidden" name="retour_forum" value="(#ENV{retour_forum})" />
+][<p>(#ENV*{modere})</p>
+][(#ENV*{afficher_texte_hidden})
+][(#ENV*{afficher_texte_input})
 	[(#ENV*{previsu})
 		<fieldset class="spip_encadrer">
 		<legend><b><:forum_titre:></b></legend>
@@ -51,8 +47,6 @@
 		</fieldset>
 		<br />
 		<div align="#LANG_RIGHT"><input type="submit" value="<:forum_voir_avant:>"
-		class="spip_bouton"></div>
-	]
-]
-</form>
+		class="spip_bouton"></div>]
+]</form>
 
diff --git a/inc-admin.php3 b/inc-admin.php3
index 5c66cbd8128dc8175aa9cd85a03d83761f6c0194..e6503860932e87088f2199dd5a25b25fce335bc2 100644
--- a/inc-admin.php3
+++ b/inc-admin.php3
@@ -43,8 +43,7 @@ function affiche_boutons_admin(&$contenu) {
 
 	lang_dselect();
 
-	echo $suite;
-	$contenu = '';
+	return $suite;
 }
 
 ?>
diff --git a/inc-compilo.php3 b/inc-compilo.php3
index 487bb7657f75256bf80a258a07a7deb7bc005432..cb0478d8a059314684acb032122b3f87dffb8697 100644
--- a/inc-compilo.php3
+++ b/inc-compilo.php3
@@ -62,7 +62,7 @@ function calculer_inclure($fichier, $params, $id_boucle, &$boucles) {
 	return "\n'<".
 		"?php\n\t\$contexte_inclus = array(" .
 		join(", ",$l) .
-		");\n\t\$fichier_inclus = \'$fichier\';\n" .
+		");" .
 		(($dossier_squelettes) ?
 		("
 			if (@file_exists(\'$dossier_squelettes/$fichier\')){
@@ -479,7 +479,7 @@ function calculer_liste($tableau, $descr, &$boucles, $id_boucle='', $niv=1) {
 		    if (($res != $t) || ($altern != "''"))
 		      $code = "(($t = $code) ?\n\t$tab($res) :\n\t$tab($altern))";
 		  }
-		// if ($code) # c'est toujours etre ainsi
+
 		  $codes[]= (!$commentaire ? $code : 
 			     ("/"."* $commentaire *"."/ " . $code));
 	} // foreach
@@ -676,7 +676,6 @@ function $nom (\$Cache, \$Pile, \$doublons=array(), \$Numrows='', \$SP=0) {
 
 	if ($GLOBALS['var_mode'] == 'debug')
 		squelette_debug_compile($nom, $sourcefile, $squelette_compile);
-
 	return $squelette_compile;
 
 }
diff --git a/inc-criteres.php3 b/inc-criteres.php3
index 4d1e98b32c4ddd909d432a1cd797e9ff6de37bcd..b20da7470d463736fe73698e6859069b1359fb43 100644
--- a/inc-criteres.php3
+++ b/inc-criteres.php3
@@ -200,7 +200,7 @@ function critere_par_dist($idb, &$boucles, $param, $not) {
 	$param = substr($param,3);
 
 	while ($param) {
-	  spip_log($param);
+
 		preg_match('/[[:space:]]*([^,]*)[[:space:]]*,?(.*)/ims',
 			   $param, $regs);
 		$param = $regs[2];
@@ -347,6 +347,7 @@ function calculer_critere_DEFAUT($idb, &$boucles, $param, $not) {
 		// Restriction de valeurs (implicite ou explicite)
 	else if (eregi('^([a-z_]+\(?[a-z_]*\)?) *(\??)((!?)(<=?|>=?|==?|IN) *"?([^<>=!"]*))?"?$', $param, $match)) {
 	  		$op = $match[5] ? $match[5] : '=';
+
 			// Variable comparee
 			$col = $match[1];
 			// fonction SQL
diff --git a/inc-formulaire_forum.php3 b/inc-formulaire_forum.php3
index 4aa8eee06aecaedb3d60492ecf6ab8d1dfe41225..d95eac28ecd9006c27f6055af29001a04ec33985 100644
--- a/inc-formulaire_forum.php3
+++ b/inc-formulaire_forum.php3
@@ -21,10 +21,10 @@ else
 /* GESTION DU FORMULAIRE FORUM */
 /*******************************/
 global $balise_FORMULAIRE_FORUM_collecte;
-$balise_FORMULAIRE_FORUM_collecte = array('id_rubrique', 'id_forum', 'id_article', 'id_breve', 'id_syndic', 'alea', 'hash');
+$balise_FORMULAIRE_FORUM_collecte = array('id_rubrique', 'id_forum', 'id_article', 'id_breve', 'id_syndic');
 
 function balise_FORMULAIRE_FORUM_stat($args, $filtres) {
-	list ($idr, $idf, $ida, $idb, $ids, $alea, $hash) = $args;
+	list ($idr, $idf, $ida, $idb, $ids) = $args;
 
 	// recuperer les donnees du forum auquel on repond, false = forum interdit
 	if (!$r = sql_recherche_donnees_forum ($idr, $idf, $ida, $idb, $ids))
@@ -32,10 +32,10 @@ function balise_FORMULAIRE_FORUM_stat($args, $filtres) {
 
 	list($titre, $table, $forums_publics) = $r;
 	return
-		array($titre, $table, $forums_publics, $idr, $idf, $ida, $idb, $ids, $alea, $hash);
+		array($titre, $table, $forums_publics, $idr, $idf, $ida, $idb, $ids);
 }
 
-function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubrique, $id_forum, $id_article, $id_breve, $id_syndic, $alea, $hash) {
+function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubrique, $id_forum, $id_article, $id_breve, $id_syndic) {
 
 	global $REMOTE_ADDR, $id_message, $afficher_texte, $spip_forum_user;
 
@@ -52,6 +52,7 @@ function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubriq
 	  if ($id_syndic) $args .= "id_syndic=$id_syndic";
 	  if ($args && strpos($url,$args)===false) $url .= (strpos($url,'?') ? '&' : '?') . $args;
 	}
+
 	$url = ereg_replace("[?&]var_erreur=[^&]*", '', $url);
 	$url = ereg_replace("[?&]var_login=[^&]*", '', $url);
 	$url = ereg_replace("[?&]url=[^&]*", '', $url);
@@ -62,22 +63,39 @@ function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubriq
 	    include_local('inc-login_public.php3');
 	    return login_pour_tous($GLOBALS['var_login'], $url, true, $url, 'forum');
 	  }
-	// au premier appel (pas de http-var nommee "retour")
-	// memoriser l'URL courante pour y revenir apres envoi du message
-	// aux appels suivants, reconduire la valeur.
-	if ($retour = rawurldecode($GLOBALS['_GET']['retour']))
-	  $retour = ereg_replace('&var_mode=recalcul','',$retour);
-	else {
-	  if (!$retour = rawurldecode($GLOBALS['_POST']['retour']))
-	    $retour = $url;
-	}
+
+	$id_rubrique = intval($id_rubrique);
+	$id_forum = intval($id_forum);
+	$id_article = intval($id_article);
+	$id_breve = intval($id_breve);
+	$id_syndic = intval($id_syndic);
 
 	// ne pas mettre '', sinon le squelette n'affichera rien.
 
 	$previsu = ' ';
 
+	// au premier appel (pas de Post-var nommee "retour_forum")
+	// memoriser l'URL courante pour y revenir apres envoi du message
+	// aux appels suivants, reconduire la valeur.
+	// Initialiser aussi l'auteur
+
+	if (!$retour_forum = rawurldecode($GLOBALS['_POST']['retour_forum'])) {
+		if ($retour_forum = rawurldecode($GLOBALS['_GET']['retour']))
+			$retour_forum = ereg_replace('&var_mode=recalcul','',$retour_forum);
+		else $retour_forum = $url;
+
+		if ($spip_forum_user &&
+		is_array($cookie_user = unserialize($spip_forum_user))) {
+			$auteur = $cookie_user['nom'];
+			$email_auteur = $cookie_user['email'];
+		} else {
+			$auteur = $GLOBALS['auteur_session']['nom'];
+			$email_auteur = $GLOBALS['auteur_session']['email'];
+		}
+
+	} else {
+
 	// Recuperer le message a previsualiser
-	if ($GLOBALS['_POST']['ajout_forum'])  {
 		$titre = $GLOBALS['_POST']['titre'];
 		$texte = $GLOBALS['_POST']['texte'];
 		$auteur = $GLOBALS['_POST']['auteur'];
@@ -126,39 +144,20 @@ function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubriq
 				$previsu .= "<p align='right' style='color: red;'>"._T('forum_attention_trois_caracteres')."</p>";
 			}
 			else {
-				$previsu .= "<div align='right'><input type='submit' name='confirmer' class='spip_bouton' value='"._T('forum_message_definitif')."' /></div>";
+				$previsu .= "<div align='right'><input type='submit' name='confirmer_forum' class='spip_bouton' value='"._T('forum_message_definitif')."' /></div>";
 			}
 			$previsu = "<div class='spip_encadrer'>$previsu</div>\n<br />";
 			// supprimer les <form> de la previsualisation
 			// (sinon on ne peut pas faire <cadre>...</cadre> dans les forums)
 			$previsu = preg_replace("@<(/?)f(orm[>[:space:]])@ism", "<\\1no-f\\2", $previsu);
 		}
-	} else {
-		// Premiere edition, initialiser l'auteur
-		if ($spip_forum_user &&
-		is_array($cookie_user = unserialize($spip_forum_user))) {
-			$auteur = $cookie_user['nom'];
-			$email_auteur = $cookie_user['email'];
-		}
-		else {
-			$auteur = $GLOBALS['auteur_session']['nom'];
-			$email_auteur = $GLOBALS['auteur_session']['email'];
-		}
-	}
-
-	$id_rubrique = intval($id_rubrique);
-	$id_forum = intval($id_forum);
-	$id_article = intval($id_article);
-	$id_breve = intval($id_breve);
-	$id_syndic = intval($id_syndic);
 
 	// Une securite qui nous protege contre :
 	// - les doubles validations de forums (derapages humains ou des brouteurs)
-	// - les abus visant à mettre des forums malgre nous sur un article (??)
+	// - les abus visant a mettre des forums malgre nous sur un article (??)
 	// On installe un fichier temporaire dans _DIR_SESSIONS (et pas _DIR_CACHE
 	// afin de ne pas bugguer quand on vide le cache)
 	// Le lock est leve au moment de l'insertion en base (inc-messforum.php3)
-	if ($GLOBALS['_POST']['ajout_forum']) {
 
 		$alea = preg_replace('/[^0-9]/', '', $alea);
 		if(!$alea OR !@file_exists(_DIR_SESSIONS."forum_$alea.lck")) {
@@ -195,7 +194,7 @@ function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubriq
 		'modere' => (($forums_publics != 'pri') ? '' : _T('forum_info_modere')),
 		'nom_site_forum' => $nom_site_forum,
 		'previsu' => $previsu,
-		'retour' => $retour,
+		'retour_forum' => $retour_forum,
 		'table' => $table,
 		'texte' => $texte,
 		'titre' => $titre,
diff --git a/inc-messforum.php3 b/inc-messforum.php3
index 9c1317634bda04f075d19ddf8e0f47e14c00a8d3..79ebda1e61be0fd22ec2cdbbb40e265446928cf2 100644
--- a/inc-messforum.php3
+++ b/inc-messforum.php3
@@ -47,97 +47,108 @@ function prevenir_auteurs($auteur, $email_auteur, $id_article, $texte, $titre) {
 }
 
 
+function controler_forum($id_article, $retour)
+{
+	global $auteur_session;
+	if ($id_article) {
+		$r = spip_query("SELECT accepter_forum FROM spip_articles WHERE id_article=$id_article");
+		$r = spip_fetch_array($r);
+		if ($r)
+			$forums_publics = $r['accepter_forum'];
+		else
+			$forums_publics = lire_meta("forums_publics");
+	} else {
+		$forums_publics = substr(lire_meta("forums_publics"),0,3);
+	}
 
-// Recuperation des donnees
-$retour_forum = rawurldecode($retour);
-$id_article = intval($id_article);
-$id_rubrique = intval($id_rubrique);
-$id_forum = intval($id_forum);
-$id_breve = intval($id_breve);
-$id_syndic = intval($id_syndic);
-
-// initialisation de l'eventuel visiteur connecte
-if (!$id_auteur)
-	$id_auteur = intval($auteur_session['id_auteur']);
-
-// chercher le statut du forum
-if ($id_article) {
-	$r = spip_query("SELECT accepter_forum FROM spip_articles WHERE id_article=$id_article");
-	$r = spip_fetch_array($r);
-	if ($r)
-		$forums_publics = $r['accepter_forum'];
-	else
-		$forums_publics = lire_meta("forums_publics");
-} else {
-	$forums_publics = substr(lire_meta("forums_publics"),0,3);
-}
-
-if ($forums_publics == "abo") {
-	if ($auteur_session) {
-		$statut = $auteur_session['statut'];
-		if (!$statut OR $statut == '5poubelle') {
-			ask_php_auth(_T('forum_acces_refuse'),
+	if ($forums_publics == "abo") {
+		if ($auteur_session) {
+			$statut = $auteur_session['statut'];
+			if (!$statut OR $statut == '5poubelle') {
+				ask_php_auth(_T('forum_acces_refuse'),
+					     _T('forum_cliquer_retour',
+						array('retour_forum' => $retour)));
+				exit;		  
+			}
+		} else {
+			ask_php_auth(_T('forum_non_inscrit'),
 				     _T('forum_cliquer_retour',
-					array('retour_forum' => $retour_forum)));
+					array('retour_forum' => $retour)));
 			exit;		  
 		}
 	}
-	else {
-		ask_php_auth(_T('forum_non_inscrit'),
-			     _T('forum_cliquer_retour',
-				array('retour_forum' => $retour_forum)));
-		exit;		  
-	}
+	return $forums_publics;
+}
 
-	// Ne pas autoriser de changement de nom si forum sur abonnement
-	$auteur = $auteur_session['nom'];
-	$email_auteur = $auteur_session['email'];
+function mots_du_forum($ajouter_mot, $id_message)
+{
+	foreach ($ajouter_mot as $id_mot)
+		if ($id_mot = intval($id_mot))
+			spip_query("INSERT INTO spip_mots_forum (id_mot, id_forum)
+				VALUES ($id_mot, $id_message)");
 }
 
+function enregistre_forum()
+{
+	global $REMOTE_ADDR, $auteur_session,
+	  $afficher_texte, $ajouter_mot, $alea, $hash,
+	  $auteur, $confirmer_forum, $email_auteur,
+	  $id_article, $id_auteur, $id_breve, $id_forum, $id_rubrique, $id_syndic,
+	  $nom_site_forum, $retour_forum, $texte, $titre, $url_site;
+
+	$retour_forum = rawurldecode($retour_forum);
+	$id_article = intval($id_article);
+	$id_rubrique = intval($id_rubrique);
+	$id_forum = intval($id_forum);
+	$id_breve = intval($id_breve);
+	$id_syndic = intval($id_syndic);
 
-// trop court ?
-if ((strlen($texte) + strlen($titre) + strlen($nom_site_forum) + strlen($url_site) + strlen($auteur) + strlen($email_auteur)) > 20 * 1024) {
-	ask_php_auth(_T('forum_message_trop_long'),
-		_T('forum_cliquer_retour',
-		array('retour_forum' => $retour_forum)));
-	exit;
-}
+// initialisation de l'eventuel visiteur connecte
+	if (!$id_auteur)
+	$id_auteur = intval($auteur_session['id_auteur']);
 
+	$statut == controler_forum($id_article, $retour_forum);
 
-// validation finale du post ?
-if (strlen($confirmer) > 0
-OR ($afficher_texte=='non' AND $ajouter_mot)) {
+// Ne pas autoriser de changement de nom si forum sur abonnement
+
+	if ($statut == 'abo') {
+		$auteur = $auteur_session['nom'];
+		$email_auteur = $auteur_session['email'];
+	}
 
-	// prevoir le redirect
-	$redirect = $retour_forum;
+// trop court ?
+	if ((strlen($texte) + strlen($titre) + strlen($nom_site_forum) + strlen($url_site) + strlen($auteur) + strlen($email_auteur)) > 20 * 1024) {
+		ask_php_auth(_T('forum_message_trop_long'),
+			     _T('forum_cliquer_retour',
+				array('retour_forum' => $retour_forum)));
+		exit;
+	}
 
 	// Verifier hash securite
 	include_ecrire("inc_admin.php3");
 	if (!verifier_action_auteur("ajout_forum $id_rubrique".
 	" $id_forum $id_article $id_breve".
 	" $id_syndic $alea", $hash))
-		return; 	# echec silencieux du POST
+		exit; 	# echec silencieux du POST
 
 	// verifier fichier lock
 	$alea = preg_replace('/[^0-9]/', '', $alea);
-	if (!file_exists($f = _DIR_SESSIONS."forum_$alea.lck"))
-		return; # echec silencieux du POST
-	unlink($f);
+	if (!file_exists($hash = _DIR_SESSIONS."forum_$alea.lck"))
+		exit; # echec silencieux du POST
+	unlink($hash);
 
 	// Entrer le message dans la base
 	$id_message = spip_abstract_insert('spip_forum', '(date_heure)', '(NOW())');
 
-	$statut =
-		($forums_publics == 'non') ? 'off' :
-		(($forums_publics == 'pri') ? 'prop' :
-		'publie');
-
 	if ($id_forum)
 		list($id_thread) = spip_fetch_array(spip_query(
 		"SELECT id_thread FROM spip_forum WHERE id_forum = $id_forum"));
 	else
 		$id_thread = $id_message; # id_thread oblige INSERT puis UPDATE.
 
+	$statut = ($statut == 'non') ? 'off' : (($statut == 'pri') ? 'prop' :
+						'publie');
+
 	spip_query("UPDATE spip_forum SET id_parent = $id_forum,
 	id_rubrique = $id_rubrique,
 	id_article = $id_article,
@@ -160,28 +171,22 @@ OR ($afficher_texte=='non' AND $ajouter_mot)) {
 	// calculer_threads();
 
 	// Entrer les mots-cles associes
-	if (is_array($ajouter_mot))
-		foreach ($ajouter_mot as $id_mot)
-			if ($id_mot = intval($id_mot))
-				spip_query("INSERT INTO spip_mots_forum (id_mot, id_forum)
-				VALUES ($id_mot, $id_message)");
-
+	if (is_array($ajouter_mot)) mots_du_forum($ajouter_mot, $id_message);
 
 	// Prevenir les auteurs de l'article
-	if (lire_meta("prevenir_auteurs") == "oui"
-	AND ($afficher_texte != "non")
-	AND ($id_article = $id_article))
+	if (lire_meta("prevenir_auteurs") == "oui" AND ($afficher_texte != "non"))
 		prevenir_auteurs($auteur, $email_auteur, $id_article, $texte, $titre);
 
 	// Poser un cookie pour ne pas retaper le nom / email
-	$cookie_user = array('nom' => $auteur, 'email' => $email_auteur);
-	spip_setcookie('spip_forum_user', serialize($cookie_user));
 
+	spip_setcookie('spip_forum_user',
+		       serialize(array('nom' => $auteur, 'email' => $email_auteur)));
+
+	if ($statut == 'publie') {
 	//
 	// INVALIDATION DES CACHES LIES AUX FORUMS
 	//
-	include_ecrire('inc_invalideur.php3');
-	if ($statut == 'publie') {
+		include_ecrire('inc_invalideur.php3');
 		suivre_invalideur ("id='id_forum/" .
 			calcul_index_forum($id_article,
 				$id_breve,
@@ -189,6 +194,7 @@ OR ($afficher_texte=='non' AND $ajouter_mot)) {
 				$id_syndic) . "'");
 	}
 
+	return $retour_forum;
 }
 
 ?>
diff --git a/inc-public-global.php3 b/inc-public-global.php3
index 5e36c146c9eb642a8994ff6410650e1fad9d8834..cfa65717f9a321d0f7987947d3b017071e200315 100644
--- a/inc-public-global.php3
+++ b/inc-public-global.php3
@@ -242,15 +242,19 @@ function inclure_balise_dynamique($r) {
 		($GLOBALS['spip_lang'] != lire_meta('langue_site')))
 			$contexte_inclus['lang'] = $GLOBALS['spip_lang'];
 
-		$page = inclure_page($fond, $delais, $contexte_inclus);
-
-		if ($page['process_ins'] == 'html')
-			echo $page['texte'];
-		else
-			eval('?' . '>' . $page['texte']);
-		
-		if ($page['lang_select'])
-			lang_dselect();
+		inclure_page_lang($fond, $delais, $contexte_inclus);
 	}
 }
+
+function inclure_page_lang($fond, $delais, $contexte_inclus)
+{
+	$page = inclure_page($fond, $delais, $contexte_inclus);
+	if ($page['process_ins'] == 'html')
+		echo $page['texte'];
+	else
+		eval('?' . '>' . $page['texte']);
+
+	if ($page['lang_select'])
+		lang_dselect();
+}
 ?>
diff --git a/inc-public.php3 b/inc-public.php3
index 5bf3b81bd1ff662bb020533e1323bea526278920..29e6f01355334e1fab17f3f4728e1b414b756676 100644
--- a/inc-public.php3
+++ b/inc-public.php3
@@ -1,16 +1,6 @@
 <?php
-
-// Page inclue ?
 if (defined("_INC_PUBLIC")) {
-	$page = inclure_page($fond, $delais, $contexte_inclus, $fichier_inclus);
-
-	if ($page['process_ins'] == 'html')
-		echo $page['texte'];
-	else
-		eval('?' . '>' . $page['texte']);
-
-	if ($page['lang_select'])
-		lang_dselect();
+	 inclure_page_lang($fond, $delais, $contexte_inclus);
 }
 // Premier appel inc-public
 else {
@@ -36,22 +26,28 @@ else {
 		verifier_visiteur();
 	}
 	// multilinguisme
-	if ($forcer_lang AND ($forcer_lang!=='non') AND empty($_POST)) {
+	if ($forcer_lang AND ($forcer_lang!=='non') AND empty($GLOBALS['_POST'])) {
 		include_ecrire('inc_lang.php3');
 		verifier_lang_url();
 	}
-	if ($_GET['lang']) {
+	if ($GLOBALS['_GET']['lang']) {
 		include_ecrire('inc_lang.php3');
 		lang_select($_GET['lang']);
 	}
-	// Ajout_forum (pour les forums) et $val_confirm signalent des modifications
-	// a faire avant d'afficher la page
-	if ($ajout_forum) {
-		$redirect = '';
+
+	// Si envoi pour un forum, enregistrer puis rediriger
+
+	if (strlen($GLOBALS['_POST']['confirmer_forum']) > 0
+	OR ($GLOBALS['_POST']['afficher_texte']=='non'
+		AND $GLOBALS['_POST']['ajouter_mot'])) {
 		include('inc-messforum.php3');
-		if ($redirect) redirige_par_entete($redirect);
+		redirige_par_entete(enregistre_forum());
 	}
-	if ($val_confirm) {
+
+	// si signature de petition, l'enregistrer avant d'afficher la page
+	// afin que celle-ci contienne la signature
+
+	if ($GLOBALS['_GET']['val_confirm']) {
 		include_local('inc-formulaire_signature.php3');
 		reponse_confirmation($id_article, $val_confirm);
 	}
@@ -116,8 +112,10 @@ else {
 			$contenu = ob_get_contents(); 
 			ob_end_clean();
 
-			// en cas d'erreur lors du eval, afficher un message
-			// et forcer les boutons de debug
+			// en cas d'erreur lors du eval,
+			// la memoriser dans le tableau des erreurs
+			// et forcer les boutons de debug.
+			// On ne revient pas ici si le nb d'erreurs > 4
 			if ($res === false AND $affiche_boutons_admin
 			AND $auteur_session['statut'] == '0minirezo') {
 				include_ecrire('inc_debug_sql.php3');
@@ -131,9 +129,8 @@ else {
 		include_ecrire("inc_debug_sql.php3");
 		debug_dumpfile('',$var_mode_objet,$var_mode_affiche);
 		exit;
-	} else if (count($tableau_des_erreurs) > 0
-	AND $affiche_boutons_admin)
-		affiche_erreurs_page ($tableau_des_erreurs);
+	} else if (count($tableau_des_erreurs) > 0 AND $affiche_boutons_admin)
+	  $contenu = affiche_erreurs_page($tableau_des_erreurs) . $contenu;
 
 	// Traiter var_recherche pour surligner les mots
 	if ($var_recherche) {
@@ -144,7 +141,7 @@ else {
 	// Afficher au besoin les boutons admins
 	if ($affiche_boutons_admin) {
 		include_local("inc-admin.php3");
-		affiche_boutons_admin($contenu);
+		$contenu = affiche_boutons_admin($contenu);
 	}
 
 	// Afficher le resultat final