diff --git a/.gitattributes b/.gitattributes
index 6aa9571a27facf646ed70f8e0238b835fe938876..8a58abc576c285e92be33e80d34727ebe64d9357 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,5 +1,6 @@
 * text=auto !eol
 IMG/logo_spip.jpg -text
+dist/choix_mots.html -text
 dist/style.html -text
 ecrire/charsets/cp1251.php -text
 ecrire/charsets/cp1256.php -text
diff --git a/dist/choix_mots.html b/dist/choix_mots.html
new file mode 100644
index 0000000000000000000000000000000000000000..4888c01bba02b4f3fd8565e5159858da3612d8d3
--- /dev/null
+++ b/dist/choix_mots.html
@@ -0,0 +1,15 @@
+<B_M>
+ 	<table cellpadding='0' cellspacing='0' border='0' width='100%'>
+	<tr><td width='47%' valign='top'>
+	<BOUCLE_M(MOTS){id_groupe}>
+		<input	type='[(#ENV{unseul}|choixsiegal{oui,radio,checkbox})]'
+			name='ajouter_mot[]'
+		    	value='#ID_MOT'
+		    	id='mot#ID_MOT' 
+			[(#ID_MOT|in_any{#ENV*{ajouter_mot}, ''}|?
+				{'checked="checked"',''})] />
+		    #LOGO_MOT
+		<b><label for='mot#ID_MOT'>#TITRE</label></b><br />
+	</BOUCLE_M>
+		  </td></tr></table>
+</B_M>
diff --git a/formulaires/formulaire_forum.html b/formulaires/formulaire_forum.html
index cdc3852586a5854bbb1df0b7faf75843acd7baf2..75b50703b029c91861c51fe1e52f7d075fd186f0 100644
--- a/formulaires/formulaire_forum.html
+++ b/formulaires/formulaire_forum.html
@@ -1,10 +1,37 @@
 <a id="formulaire"></a>
-<form action="[(#ENV{url})][(#ENV*{previsu}|?{'#formulaire',''})]" method="post">[
-(#ENV*{parametres_forum})
-][<p>(#ENV*{modere})</p>
-][(#ENV*{afficher_texte_hidden})
-][(#ENV*{afficher_texte_input})
-	[(#ENV*{previsu})
+<form action="[(#ENV{url})][(#ENV**{previsu}|?{'#formulaire',''})]" method="post">[
+<input type='hidden' name='id_article' value='(#ENV{id_article})' />][
+<input type='hidden' name='id_breve' value='(#ENV{id_breve})' />][
+<input type='hidden' name='id_forum' value='(#ENV{id_forum})' />][
+<input type='hidden' name='id_rubrique' value='(#ENV{id_rubrique})' />][
+<input type='hidden' name='id_syndic' value='(#ENV{id_syndic})' />][
+<input type='hidden' name='alea' value='(#ENV{alea})' />][
+<input type='hidden' name='hash' value='(#ENV{hash})' />][
+<input type='hidden' name='afficher_texte' value='(#ENV{afficher_texte})' />][
+<input type='hidden' name='retour_forum' value='(#ENV{retour_forum}|urlencode)' />][
+<p>(#ENV{modere})<:forum_info_modere:></p>
+][(#ENV*{previsu})]
+<p>
+<BOUCLE_G(GROUPES_MOTS){forum=oui}
+	{articles==(#ENV{table}|choixsiegal{articles,'oui','.*'})}
+	{breves==(#ENV{table}|choixsiegal{breves,'oui','.*'})}
+	{rubriques==(#ENV{table}|choixsiegal{rubriques,'oui','.*'})}
+	{syndic==(#ENV{table}|choixsiegal{syndic,'oui','.*'})}
+>[(#ID_GROUPE|in_any{#ENV**{ajouter_groupe},' '})
+	<div class='spip_encadrer' style='font-size: 80%;'>
+	<b>#TITRE</b>
+	    <INCLURE(page.php3){fond=choix_mots}
+	      {id_groupe}
+	      {ajouter_mot}
+	      {unseul}>
+	</div>
+]</BOUCLE_G>[
+(#ENV**{afficher_texte}|choixsiegal{'non', ' ',''})
+<br /><div align='right'>[
+<input type='hidden' name='titre' value='(#ENV{titre})' />]
+<input type='submit' class='spip_bouton' value="<:forum_valider:>" />
+</div>][
+(#ENV**{afficher_texte}|choixsiegal{'non', '',' '})
 		<fieldset class="spip_encadrer">
 		<legend><b><:forum_titre:></b></legend>
 		<label><input type="text" name="titre" 
@@ -18,7 +45,6 @@
 		[(#ENV{texte}|barre_forum)]
 		</fieldset>
 		<br />
-		[<p>(#ENV*{table})</p>]
 		<fieldset class="spip_encadrer">
 			<legend><:forum_lien_hyper:></legend>
 			<p><:forum_page_url:></p>
@@ -36,17 +62,18 @@
 			<legend><:forum_qui_etes_vous:></legend>
 			<p><label><:forum_votre_nom:>
 				<input type="text" name="auteur" value="[(#ENV{auteur})]"
-					class="forml" size="40" [(#ENV{disabled})] />
+					class="forml" size="40"[
+					disabled='(#ENV{disabled})'] />
 			</label></p>
 			<p><label><:forum_votre_email:>
 				<input type="text" name="email_auteur"
 				value="[(#ENV{email_auteur})]"
-				class="forml" size="40" [(#ENV{disabled})] />
+				class="forml" size="40" [
+				disabled='(#ENV{disabled})'] />
 			</label></p>
 		</fieldset>
-		<br />
+
 		<div align="#LANG_RIGHT">
 		<input type="submit" value="<:forum_voir_avant:>"
 		class="spip_bouton" /></div>
-	]
 ]</form>
diff --git a/formulaires/inc-formulaire_forum.php3 b/formulaires/inc-formulaire_forum.php3
index 1c559a759e8a87ba59a96542dbcb2ae517ff07d2..f1d51d5d5159803868328329d56ca55e6d42a679 100644
--- a/formulaires/inc-formulaire_forum.php3
+++ b/formulaires/inc-formulaire_forum.php3
@@ -29,8 +29,13 @@ charger_generer_url();
 /*******************************/
 
 // Contexte du formulaire
+// Mots-cles dans les forums :
+// Si la variable de personnalisation $afficher_groupe[] est definie
+// dans le fichier d'appel, et si la table de reference est OK, proposer
+// la liste des mots-cles
+
 global $balise_FORMULAIRE_FORUM_collecte;
-$balise_FORMULAIRE_FORUM_collecte = array('id_rubrique', 'id_forum', 'id_article', 'id_breve', 'id_syndic');
+$balise_FORMULAIRE_FORUM_collecte = array('id_rubrique', 'id_forum', 'id_article', 'id_breve', 'id_syndic', 'ajouter_mot', 'ajouter_groupe', 'afficher_texte');
 
 
 // verification des droits a faire du forum
@@ -40,11 +45,11 @@ function balise_FORMULAIRE_FORUM_stat($args, $filtres) {
 	// $filtres[0] peut contenir l'url sur lequel faire tourner le formulaire
 	// exemple dans un squelette article.html : [(#FORMULAIRE_FORUM|forum.php)]
 
-	// $args[5] peut contenir l'url sur lequel faire le retour
+	// le denier arg peut contenir l'url sur lequel faire le retour
 	// exemple dans un squelette article.html : [(#FORMULAIRE_FORUM{#SELF})]
 
 	// recuperer les donnees du forum auquel on repond, false = forum interdit
-	list ($idr, $idf, $ida, $idb, $ids) = $args;
+	list ($idr, $idf, $ida, $idb, $ids, $am, $ag, $af, $url) = $args;
 	$idr = intval($idr);
 	$idf = intval($idf);
 	$ida = intval($ida);
@@ -59,21 +64,35 @@ function balise_FORMULAIRE_FORUM_stat($args, $filtres) {
 	if ($idr > 0 AND ($ida OR $idb OR $ids))
 		$idr = 0;
 
+	if (($GLOBALS['meta']["mots_cles_forums"] != "oui"))
+		$table = '';
+
 	return
-		array($titre, $table, $forums_publics, $idr, $idf, $ida, $idb, $ids,
-			$filtres[0], $args[5]);
+	  array($titre, $table, $forums_publics, $filtres[0],
+		$idr, $idf, $ida, $idb, $ids, $am, $ag, $af, $url);
 }
 
-function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubrique, $id_forum, $id_article, $id_breve, $id_syndic, $url, $url_param_retour) {
-	global $REMOTE_ADDR, $afficher_texte, $_COOKIE, $_POST;
+function balise_FORMULAIRE_FORUM_dyn(
+$titre, $table, $type, $url,
+$id_rubrique, $id_forum, $id_article, $id_breve, $id_syndic,
+$ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour)
+{
+	// verifier l'identite des posteurs pour les forums sur abo
+	if (($type == "abo") && (!$GLOBALS["auteur_session"])) {
+		return array('formulaire_login_forum', 0,
+			     array('inscription' => generer_url_public('spip_inscription'),
+				   'oubli' => generer_url_public('spip_pass')));
+	}
+
+// exclure des id_* postees du formulaire tout ce qui n'est pas nombre > 0. 
+// y aura plein de input hidden value=0  dans le squelette mais il faut
+// que le calcul du hachage soit le meme ici et dans inc-messforum
 
-	// Recuperer les donnees postees du formulaire ou, a defaut, du contexte
-	foreach (array('id_article', 'id_breve', 'id_syndic',
-	'id_rubrique', 'id_forum') as $id)
-		if (isset($_POST['forum_'.$id]))
-			$$id = intval($_POST['forum_'.$id]);
-		else
-			$$id = intval($$id);
+	$ids = array('id_article' => intval($id_article),
+		     'id_breve'=> intval($id_breve),
+		     'id_forum'=> intval($id_forum),
+		     'id_rubrique'=> intval($id_rubrique),
+		     'id_syndic'=> intval($id_syndic));
 
 	// url de reference
 	if (!$url) {
@@ -81,27 +100,17 @@ function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubriq
 		$url = $url->getUrl();
 	} else {
 		// identifiants des parents
-		$args = array();
-		if ($id_rubrique) $args[] = "id_rubrique=$id_rubrique";
-		if ($id_forum) $args[] = "id_forum=$id_forum";
-		if ($id_article) $args[] = "id_article=$id_article";
-		if ($id_breve) $args[] = "id_breve=$id_breve";
-		if ($id_syndic) $args[] = "id_syndic=$id_syndic";
-		if (count($args))
-			$url .= (strpos($url,'?') ? '&' : '?'). join('&',$args);
+		$args = "";
+		foreach ($ids as $id => $v) $args .= "&$id=$v";
+		if (strpos($url,'?'))
+			$url .= $args;
+		else  $url .= '?' . substr($args,1);
 	}
 
 	$url = ereg_replace("[?&]var_erreur=[^&]*", '', $url);
 	$url = ereg_replace("[?&]var_login=[^&]*", '', $url);
 	$url = ereg_replace("[?&]url=[^&]*", '', $url);
 
-	// verifier l'identite des posteurs pour les forums sur abo
-	if (($forums_publics == "abo") && (!$GLOBALS["auteur_session"])) {
-		return array('formulaire_login_forum', 0,
-			     array('inscription' => generer_url_public('spip_inscription'),
-				   'oubli' => generer_url_public('spip_pass')));
-	}
-
 	// ne pas mettre '', sinon le squelette n'affichera rien.
 	$previsu = ' ';
 
@@ -131,7 +140,7 @@ function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubriq
 			$email_auteur = $GLOBALS['auteur_session']['email'];
 		}
 
-	} else {
+	} else { // appels ulterieurs
 
 		// Recuperer le message a previsualiser
 		$titre = _request('titre');
@@ -140,142 +149,125 @@ function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubriq
 		$email_auteur = _request('email_auteur');
 		$nom_site_forum = _request('nom_site_forum');
 		$url_site = _request('url_site');
-		$ajouter_mot = _request('ajouter_mot'); // array
-
-		// Verifier mots associes au message
-		if (is_array($ajouter_mot))
-		$mots = preg_replace('/[^0-9,]/', '', join(',',$ajouter_mot));
-		else $mots = '0';
-
-		// affichage {par num type, type, num titre,titre}
-		$result_mots = spip_query("SELECT id_mot, titre, type
-			FROM spip_mots
-			WHERE id_mot IN ($mots)
-			ORDER BY 0+type,type,0+titre,titre");
-		if (spip_num_rows($result_mots)>0) {
-			$mots_forums = "<p>"._T('forum_avez_selectionne')."</p><ul>";
-			while ($row = spip_fetch_array($result_mots)) {
-				$les_mots[$row['id_mot']] = "checked='checked'";
-				$presence_mots = true;
-				$mots_forums .= "<li style='font-size: 80%;'> "
-				. typo($row['type']) . "&nbsp;: <b>"
-				. typo($row['titre']) ."</b></li>";
-			}
-			$mots_forums .= '</ul>';
-		}
 
-		//
-		// Preparer la previsualisation
-		//
-		if ($afficher_texte != 'non') {
-			if (strlen($texte) < 10 AND !$presence_mots)
-				$erreur = _T('forum_attention_dix_caracteres');
-			else if (strlen($titre) < 3 AND $afficher_texte <> "non")
-				$erreur = _T('forum_attention_trois_caracteres');
-			else
-				$bouton = _T('forum_message_definitif');
-
-			$previsu = inclure_balise_dynamique(
-				array(
-					'formulaire_forum_previsu',
-					0,
-					array(
-						'titre' => safehtml(typo($titre)),
-						'email_auteur' => safehtml($email_auteur),
-						'auteur' => safehtml(typo($auteur)),
-						'texte' => safehtml(propre($texte)),
-						'url_site' => safehtml($url_site),
-						'nom_site_forum' =>
-							safehtml(typo($nom_site_forum)),
-						'mots_forum' => $mots_forum,
-						'erreur' => $erreur,
-						'bouton' => $bouton
-					)
-				), false);
-
-			// 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);
-		}
 
-	// Une securite qui nous protege contre :
-	// - les doubles validations de forums (derapages humains ou des brouteurs)
-	// - 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)
-	// Ce systeme n'est pas fonctionnel pour les forums sans previsu (notamment
-	// si $afficher_texte = 'non')
-
-		$alea = preg_replace('/[^0-9]/', '', $alea);
-		if(!$alea OR !@file_exists(_DIR_SESSIONS."forum_$alea.lck")) {
-			while (
-				# astuce : mt_rand pour autoriser les hits simultanes
-				$alea = time() + @mt_rand()
-				AND @file_exists($f = _DIR_SESSIONS."forum_$alea.lck")) {};
-			spip_touch ($f);
-		}
+		if ($afficher_texte != 'non') 
+			$previsu = inclure_previsu($texte, $titre, $email_auteur, $auteur, $url_site, $nom_site_forum, $ajouter_mot);
 
-		# et maintenant on purge les locks de forums ouverts depuis > 4 h
-		if ($dh = @opendir(_DIR_SESSIONS))
-			while (($file = @readdir($dh)) !== false)
-				if (preg_match('/^forum_([0-9]+)\.lck$/', $file)
-				AND (time()-@filemtime(_DIR_SESSIONS.$file) > 4*3600))
-					@unlink(_DIR_SESSIONS.$file);
-
-		$hash = calculer_action_auteur("ajout_forum $id_rubrique $id_forum $id_article $id_breve $id_syndic $alea");
+		$alea = forum_fichier_tmp();
+		$hash = calculer_action_auteur("ajout_forum " .
+					       $ids['id_rubrique'] ." " .
+					       $ids['id_forum'] ." " .
+					       $ids['id_article'] ." " .
+					       $ids['id_breve'] ." " .
+					       $ids['id_syndic'] ." " .
+					       $alea);
 	}
 
-	// Faut-il ajouter des propositions de mots-cles
-	if ($table AND ($GLOBALS['meta']["mots_cles_forums"] == "oui"))
-		$table = table_des_mots($table, $les_mots);
-	else
-		$table = '';
-
-	// preparer les parametres du forum en input hidden
-	$parametres_forum = '';
-	foreach (array('alea', 'hash', 'retour_forum') as $var)
-		if ($val = entites_html($$var))
-			$parametres_forum .=
-			"<input type='hidden' name='$var' value=\"$val\" />\n";
-	foreach (array(
-	'id_article', 'id_breve', 'id_syndic', 'id_rubrique', 'id_forum')
-	as $var)
-		if ($val = $$var)
-			$parametres_forum .=
-			"<input type='hidden' name='forum_$var' value='$val' />\n";
-
 	return array('formulaire_forum', 0,
 	array(
 		'auteur' => $auteur,
-		'disabled' => ($forums_publics == "abo")? " disabled='disabled'" : '',
+		'disabled' => ($type == "abo")? "disabled" : '',
 		'email_auteur' => $email_auteur,
-		'modere' => (($forums_publics != 'pri') ? '' : _T('forum_info_modere')),
+		'modere' => (($type != 'pri') ? '' : ' '),
 		'nom_site_forum' => $nom_site_forum,
+		'retour_forum' => $retour_forum,
+		'afficher_texte' => $afficher_texte,
 		'previsu' => $previsu,
 		'table' => $table,
 		'texte' => $texte,
 		'titre' => extraire_multi($titre),
 		'url' =>  $url,
 		'url_site' => ($url_site ? $url_site : "http://"),
-		'parametres_forum' => $parametres_forum,
-
-		## gestion des la variable de personnalisation $afficher_texte
-		# mode normal : afficher le texte en < input text >, cf. squelette
-		'afficher_texte_input' => (($afficher_texte <> 'non') ? '&nbsp;' : ''),
-		# mode 'non' : afficher les elements en < input hidden >
-		'afficher_texte_hidden' => (($afficher_texte <> 'non') ? '' :
-			(boutonne('hidden', 'titre', htmlspecialchars($titre)) .
-				$table .
-				"\n<br /><div align='right'>" .
-				boutonne('submit', '', _T('forum_valider'),
-				"class='spip_bouton'") .
-				"</div>"))
+		'id_article' => $ids['id_article'],
+		'id_breve' => $ids['id_breve'],
+		'id_forum' => $ids['id_forum'],
+		'id_rubrique' => $ids['id_rubrique'],
+		'id_syndic' => $ids['id_syndic'],
+		'alea' => $alea,
+		'hash' => $hash,
+		'ajouter_groupe' => $ajouter_groupe,
+		'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array()),
 
 		));
 }
 
+function inclure_previsu($texte,$titre, $email_auteur, $auteur, $url_site, $nom_site_forum, $ajouter_mot)
+{
+	$mots_forum = $erreur = $bouton = '';
+	if (is_array($ajouter_mot)) {
+		$result_mots = spip_query("SELECT id_mot, titre, type
+			FROM spip_mots
+			WHERE id_mot IN (" #securite XSS
+			. preg_replace('/[^0-9,]/', '', join(',',$ajouter_mot))
+			. ") ORDER BY 0+type,type,0+titre,titre");
+		if (spip_num_rows($result_mots)>0) {
+			$mots_forum = "<p>"._T('forum_avez_selectionne')."</p><ul>";
+			while ($row = spip_fetch_array($result_mots)) {
+				$mots_forum .= "<li style='font-size: 80%;'> "
+				. typo($row['type']) . "&nbsp;: <b>"
+				. typo($row['titre']) ."</b></li>";
+			}
+			$mots_forum .= '</ul>';
+		}
+	}
+
+	if (strlen($texte) < 10 AND !$mots_forum)
+		$erreur = _T('forum_attention_dix_caracteres');
+	else if (strlen($titre) < 3)
+		$erreur = _T('forum_attention_trois_caracteres');
+	else
+		$bouton = _T('forum_message_definitif');
+
+	// supprimer les <form> de la previsualisation
+	// (sinon on ne peut pas faire <cadre>...</cadre> dans les forums)
+	return preg_replace("@<(/?)f(orm[>[:space:]])@ism",
+			    "<\\1no-f\\2",
+		inclure_balise_dynamique(array('formulaire_forum_previsu',
+		      0,
+		      array(
+			'titre' => safehtml(typo($titre)),
+			'email_auteur' => safehtml($email_auteur),
+			'auteur' => safehtml(typo($auteur)),
+			'texte' => safehtml(propre($texte)),
+			'url_site' => safehtml($url_site),
+			'nom_site_forum' => safehtml(typo($nom_site_forum)),
+			'mots_forum' => $mots_forum,
+			'erreur' => $erreur,
+			'bouton' => $bouton
+			)
+					       ),
+					 false));
+}
+
+// Une securite qui nous protege contre :
+// - les doubles validations de forums (derapages humains ou des brouteurs)
+// - 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)
+// Ce systeme n'est pas fonctionnel pour les forums sans previsu (notamment
+// si $afficher_texte = 'non')
+
+function forum_fichier_tmp()
+{
+# astuce : mt_rand pour autoriser les hits simultanes
+	while (($alea = time() + @mt_rand())
+	       AND @file_exists($f = _DIR_SESSIONS."forum_$alea.lck"))
+	  {};
+	spip_touch ($f);
+
+# et maintenant on purge les locks de forums ouverts depuis > 4 h
+
+	if ($dh = @opendir(_DIR_SESSIONS))
+		while (($file = @readdir($dh)) !== false)
+			if (preg_match('/^forum_([0-9]+)\.lck$/', $file)
+			AND (time()-@filemtime(_DIR_SESSIONS.$file) > 4*3600))
+				@unlink(_DIR_SESSIONS.$file);
+	return $alea;
+}
+
+// filtres pour le squelette
 
 function barre_forum($texte) {
 	include_ecrire('inc_layer');
@@ -295,84 +287,10 @@ onkeyup='storeCaret(this);'
 ondbclick='storeCaret(this);'>$texte</textarea>";
 }
 
-// Mots-cles dans les forums :
-// Si la variable de personnalisation $afficher_groupe[] est definie
-// dans le fichier d'appel, et si la table de reference est OK, proposer
-// la liste des mots-cles
-function table_des_mots($table, $les_mots) {
-	global $afficher_groupe;
-
-	if (is_array($afficher_groupe))
-		$in_group = " AND id_groupe IN (" . join($afficher_groupe, ", ") .")";
-	else
-		$in_group = '';
-
-	$result_groupe = spip_query("SELECT * FROM spip_groupes_mots
-	WHERE forum = 'oui' AND $table = 'oui'". $in_group);
-
-	$ret = '';
-	while ($row_groupe = spip_fetch_array($result_groupe)) {
-		$id_groupe = $row_groupe['id_groupe'];
-		$titre_groupe = propre($row_groupe['titre']);
-		$unseul = ($row_groupe['unseul']== 'oui') ? 'radio' : 'checkbox';
-		$result =spip_query("SELECT * FROM spip_mots
-		WHERE id_groupe='$id_groupe'");
-		$total_rows = spip_num_rows($result);
-
-		if ($total_rows > 0) {
-			$ret .= "\n<p />"
-			  . "<div class='spip_encadrer' style='font-size: 80%;'>"
-			  . "<b>$titre_groupe&nbsp;:</b>"
-			  . "<table cellpadding='0' cellspacing='0' border='0' width='100%'>\n"
-			  ."<tr><td width='47%' valign='top'>";
-			$i = 0;
-
-		while ($row = spip_fetch_array($result)) {
-			$id_mot = $row['id_mot'];
-			$titre_mot = propre($row['titre']);
-			$descriptif_mot = propre($row['descriptif']);
-
-			if ($i >= ($total_rows/2) AND $i < $total_rows) {
-				$i = $total_rows + 1;
-				$ret .= "</td><td width='6%'>&nbsp;</td>
-				<td width='47%' valign='top'>";
-			}
-
-			$ret .= boutonne($unseul, "ajouter_mot[]", $id_mot, "id='mot$id_mot' " . $les_mots[$id_mot]) .
-			  afficher_petits_logos_mots($id_mot)
-			. "<b><label for='mot$id_mot'>$titre_mot</label></b><br />";
-
-			if ($descriptif_mot)
-				$ret .= "$descriptif_mot<br />";
-			$i++;
-		}
-
-		$ret .= "</td></tr></table>";
-		$ret .= "</div>";
-		}
-	}
-
-	return $ret;
-}
-
-
-function afficher_petits_logos_mots($id_mot) {
-	include_ecrire('inc_logos');
-	$on = cherche_image_nommee("moton$id_mot");
-	if ($on) {
-	  $image = ("$on[0]$on[1].$on[2]");
-		$taille = @getimagesize($image);
-		$largeur = $taille[0];
-		$hauteur = $taille[1];
-		if ($largeur < 100 AND $hauteur < 100)
-			return "<img src='$image' align='middle' width='$largeur'
-			height='$hauteur' hspace='1' vspace='1' alt=' ' border='0'
-			class='spip_image' /> ";
-	}
+function in_any($val, $vals, $def) {
+  return (!is_array($vals) ? $def : (in_array($val, $vals) ? ' ' : ''));
 }
 
-
-
 /*******************************************************/
 /* FONCTIONS DE CALCUL DES DONNEES DU FORMULAIRE FORUM */
 /*******************************************************/
diff --git a/inc-balises.php3 b/inc-balises.php3
index 6c7d018ee43021270a3ee9fb964d114f783c6e2a..22ded49f7ff22d37d38d29e0ace6e1de34a4688a 100644
--- a/inc-balises.php3
+++ b/inc-balises.php3
@@ -642,7 +642,6 @@ function balise_EXTRA_dist ($p) {
 //
 
 function balise_PARAMETRES_FORUM_dist($p) {
-	include_local(find_in_path('inc-formulaire_forum' . _EXTENSION_PHP));
 	$_id_article = champ_sql('id_article', $p);
 	$p->code = '
 		// refus des forums ?
diff --git a/inc-messforum.php3 b/inc-messforum.php3
index 6eca24e94bda43d265364566870ab0137d1b6c16..f3486008a52a5d3dadfe24e85cc505032e5603ac 100644
--- a/inc-messforum.php3
+++ b/inc-messforum.php3
@@ -122,7 +122,8 @@ function enregistre_forum() {
 	global $REMOTE_ADDR, $auteur_session,
 		$afficher_texte, $ajouter_mot, $alea, $hash,
 		$auteur, $confirmer_forum, $email_auteur, $id_auteur,
-		$nom_site_forum, $retour_forum, $texte, $titre, $url_site;
+		$nom_site_forum, $retour_forum, $texte, $titre, $url_site,
+		$id_rubrique, $id_forum, $id_article, $id_breve, $id_syndic;
 
 	$retour_forum = rawurldecode($retour_forum);
 
@@ -133,14 +134,6 @@ function enregistre_forum() {
 		$calculer_retour = true;
 	}
 
-	// Recuperer les donnees postees du formulaire ou stocker '0'
-	foreach (array('id_article', 'id_breve', 'id_syndic',
-	'id_rubrique', 'id_forum') as $id)
-		if (isset($_POST['forum_'.$id]))
-			$$id = intval($_POST['forum_'.$id]);
-		else
-			$$id = 0;
-
 	// initialisation de l'eventuel visiteur connecte
 	if (!$id_auteur)
 	$id_auteur = intval($auteur_session['id_auteur']);
diff --git a/page.php3 b/page.php3
index 0718c5c1f1dcf00e22fa8ae86c10dad2c436e7a5..c55abd8d5ead151ab1ad95c663a4833ee1bfcf82 100644
--- a/page.php3
+++ b/page.php3
@@ -14,8 +14,8 @@ else
 	$fond = '404';
 
 // Securite 
-if (strstr($fond, '/')
-OR preg_match(',^formulaire_,i', $fond)) {
+if (strstr($fond, '/') ){
+#OR preg_match(',^formulaire_,i', $fond)) {
 	die ("Faut pas se gener");
 }
 if (!find_in_path("$fond.html")) {