diff --git a/ecrire/inc_majbase.php3 b/ecrire/inc_majbase.php3
index 53de360217ab5b1c82308ba645a6680d33f8ef7c..6d5f56a5480d32a8e97c0855b5c1725728d13a00 100644
--- a/ecrire/inc_majbase.php3
+++ b/ecrire/inc_majbase.php3
@@ -936,6 +936,12 @@ function maj_base() {
 		maj_version(1.809);
 	}
 
+	// Annuler les brouillons de forum jamais valides
+	if ($version_installee < 1.810) {
+		spip_query("DELETE FROM spip_forum WHERE statut='redac'");
+		maj_version(1.810);
+	}
+
 	return true;
 }
 
diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3
index 2124bd076a88c5ad5b7bbe7a49122738a0bbbf1a..a2aa955c26f5c4f9fb863ef09d75475f349f027b 100644
--- a/ecrire/inc_version.php3
+++ b/ecrire/inc_version.php3
@@ -347,7 +347,7 @@ define_once('_AUTH_USER_FILE', '.htpasswd');
 // (utilise pour les modifs de la base de donnees)
 
 // version de la base
-$spip_version = 1.809;
+$spip_version = 1.810;
 
 // version de spip
 $spip_version_affichee = "1.8 beta 2 CVS";
diff --git a/formulaire_forum-dist.html b/formulaire_forum-dist.html
index 4e3969365058463df42d9aad29200785dbda0cd2..3fd62cff895fc3c3c0b9091411e818b7423bbb38 100644
--- a/formulaire_forum-dist.html
+++ b/formulaire_forum-dist.html
@@ -1,58 +1,59 @@
 <form action='[(#HTTP_VARS{url})]' method='post' name='formulaire'>
-      <input type='hidden' name='ajout_forum' value="oui" />
-      <input type='hidden' name='id_message' value="[(#HTTP_VARS{id_message})]" />
-      <input type='hidden' name='alea' value="[(#HTTP_VARS{alea})]" />
-      <input type='hidden' name='hash' value="[(#HTTP_VARS{hash})]" />
-      <input type='hidden' name='retour' value="[(#HTTP_VARS{retour})]" />
-      [(#HTTP_VARS*{modere})<p>]
-      [(#HTTP_VARS*{afficher_non})]
-      [(#HTTP_VARS*{previsu})
-      <fieldset class='spip_encadrer'>
-	<legend><b><:forum_titre:></b></legend>
-	<label>
-	  <input type='text' name='titre' 
-	    [value="(#HTTP_VARS{titre})" ]class='forml' size='40' />
-	</label>
-      </fieldset>
-      <br />
-      <fieldset class='spip_encadrer'>
-	<legend><b><:forum_texte:></b></legend>
-	<p><:info_creation_paragraphe:></p>
-[(#HTTP_VARS{texte}|barre_forum)]
-      </fieldset>
-      <br />
-      [(#HTTP_VARS*{table})]
-      <fieldset class='spip_encadrer'>
-	<legend><:forum_lien_hyper:></legend>
-	<p><:forum_page_url:></p>
-	<p><label><:forum_titre:>
-	  <input type='text' name='nom_site_forum' class='forml' size='40'
-	  value="[(#HTTP_VARS{nom_site_forum})]"  />
-	</label></p>
-	<p><label><:forum_url:>
-	<input type='text' name='url_site' class='forml'  size='40'
-	  value="[(#HTTP_VARS{url_site})]" />
-	</label></p>
-	</fieldset>
-      <br />
-	<fieldset class='spip_encadrer'>
-	  <legend><:forum_qui_etes_vous:></legend>
-	  <p>
-	  <label>
-	    <:forum_votre_nom:>
-	    <input type='text' name='auteur' value="[(#HTTP_VARS{auteur})]"
-	      class='forml' size='40' [(#HTTP_VARS{disabled})] />
-	  </label>
-	  </p>
-	  <p>
-	  <label>
-	    <:forum_votre_email:>
-	    <input type='text' name='email_auteur' value="[(#HTTP_VARS{email_auteur})]"
-	      class='forml' size='40' [(#HTTP_VARS{disabled})] />
-	  </label>
-	</p>
-      </fieldset>
-      <br /><div align='right'>
-	<input type='submit'  value="<:forum_voir_avant:>" class='spip_bouton'></div>]
+
+<input type='hidden' name='ajout_forum' value="oui" />
+<input type='hidden' name='post_forum' value="oui" />
+<input type='hidden' name='alea' value="[(#HTTP_VARS{alea})]" />
+<input type='hidden' name='hash' value="[(#HTTP_VARS{hash})]" />
+<input type='hidden' name='retour' value="[(#HTTP_VARS{retour})]" />
+
+[<p>(#HTTP_VARS*{modere})</p>]
+
+[(#HTTP_VARS*{afficher_texte_hidden})]
+[(#HTTP_VARS*{afficher_texte_input})
+	[(#HTTP_VARS*{previsu})
+		<fieldset class='spip_encadrer'>
+		<legend><b><:forum_titre:></b></legend>
+		<label><input type='text' name='titre' 
+			[value="(#HTTP_VARS{titre})" ]class='forml' size='40' />
+		</label>
+		</fieldset>
+		<br />
+		<fieldset class='spip_encadrer'>
+		<legend><b><:forum_texte:></b></legend>
+		<p><:info_creation_paragraphe:></p>
+		[(#HTTP_VARS{texte}|barre_forum)]
+		</fieldset>
+		<br />
+		[<p>(#HTTP_VARS*{table})</p>]
+		<fieldset class='spip_encadrer'>
+			<legend><:forum_lien_hyper:></legend>
+			<p><:forum_page_url:></p>
+			<p><label><:forum_titre:>
+				<input type='text' name='nom_site_forum' class='forml' size='40'
+					value="[(#HTTP_VARS{nom_site_forum})]" />
+			</label></p>
+			<p><label><:forum_url:>
+			<input type='text' name='url_site' class='forml' size='40'
+				value="[(#HTTP_VARS{url_site})]" />
+			</label></p>
+		</fieldset>
+		<br />
+		<fieldset class='spip_encadrer'>
+			<legend><:forum_qui_etes_vous:></legend>
+			<p><label><:forum_votre_nom:>
+				<input type='text' name='auteur' value="[(#HTTP_VARS{auteur})]"
+					class='forml' size='40' [(#HTTP_VARS{disabled})] />
+			</label></p>
+			<p><label><:forum_votre_email:>
+				<input type='text' name='email_auteur'
+				value="[(#HTTP_VARS{email_auteur})]"
+				class='forml' size='40' [(#HTTP_VARS{disabled})] />
+			</label></p>
+		</fieldset>
+		<br />
+		<div align='right'><input type='submit' value="<:forum_voir_avant:>"
+		class='spip_bouton'></div>
+	]
+]
 </form>
 
diff --git a/forum.php3 b/forum.php3
index f027e0261bcaaee3826713632c860cb4eaaebdd4..94d184831e4e29fe0b263bd57788eab67d68bf4b 100644
--- a/forum.php3
+++ b/forum.php3
@@ -2,6 +2,15 @@
 $fond = "forum";
 $delais = 3600;
 
+// Exemples de personnalisation :
+// @ http://www.spip.net/fr_article1825.html
+//
+// 1. seuls les mots-cles du groupe de mots numero 1 doivent s'afficher
+// $afficher_groupe = array(9);
+//
+// 2. faire des forums uniquement pour affecter des mots-cles
+// $afficher_texte = "non";
+
 include ("inc-public.php3");
 
 ?>
diff --git a/inc-formulaire_forum.php3 b/inc-formulaire_forum.php3
index a9cc652c5071be632472d5c4993e176c6d310ef2..36f153860b45d3fdaf23063f90d55cd1f21956ab 100644
--- a/inc-formulaire_forum.php3
+++ b/inc-formulaire_forum.php3
@@ -77,13 +77,14 @@ function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubriq
 	$previsu = ' ';
 
 	// Recuperer le message a previsualiser
-	if ($id_message = intval($GLOBALS['HTTP_POST_VARS']['id_message']))  {
+	if ($GLOBALS['HTTP_POST_VARS']['post_forum'])  {
 		$titre = $GLOBALS['HTTP_POST_VARS']['titre'];
 		$texte = $GLOBALS['HTTP_POST_VARS']['texte'];
 		$auteur = $GLOBALS['HTTP_POST_VARS']['auteur'];
 		$email_auteur = $GLOBALS['HTTP_POST_VARS']['email_auteur'];
 		$nom_site_forum = $GLOBALS['HTTP_POST_VARS']['nom_site_forum'];
 		$url_site = $GLOBALS['HTTP_POST_VARS']['url_site'];
+		$ajouter_mot = $GLOBALS['HTTP_POST_VARS']['ajouter_mot']; // array
 
 		if ($afficher_texte != 'non') {
 			$previsu = 
@@ -97,16 +98,21 @@ function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubriq
 			  . interdire_scripts(typo($nom_site_forum)) . "</a>";
 
 			// Verifier mots associes au message
-			$result_mots = spip_query("SELECT mots.id_mot, mots.titre, mots.type
-			FROM spip_mots_forum AS lien, spip_mots AS mots 
-			WHERE id_forum='$id_message' AND mots.id_mot = lien.id_mot
-			GROUP BY mots.id_mot");
+			if (is_array($ajouter_mot))
+				$mots = preg_replace('/[^0-9,]/', '', join(',',$ajouter_mot));
+			else $mots = '';
+
+			// affichage {par num type, type, num titre,titre}
+			$result_mots = spip_query("SELECT id_mot, titre, type
+				FROM spip_mots
+				WHERE id_mot IN (0, $mots)
+				ORDER BY 0+type,type,0+titre,titre");
 			if (spip_num_rows($result_mots)>0) {
 				$previsu .= "<p>"._T('forum_avez_selectionne')."</p><ul>";
 				while ($row = spip_fetch_array($result_mots)) {
 					$les_mots[$row['id_mot']] = "checked='checked'";
 					$presence_mots = true;
-					$previsu .= "<li class='font-size=80%'> "
+					$previsu .= "<li style='font-size: 80%;'> "
 					. typo($row['type']) . "&nbsp;: <b>"
 					. typo($row['titre']) ."</b></li>";
 				}
@@ -129,8 +135,8 @@ function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubriq
 		}
 	} else {
 		// Premiere edition, initialiser l'auteur
-	  	// puis s'accorder une nouvelle entree dans la table
-		if ($spip_forum_user && is_array($cookie_user = unserialize($spip_forum_user))) {
+		if ($spip_forum_user &&
+		is_array($cookie_user = unserialize($spip_forum_user))) {
 			$auteur = $cookie_user['nom'];
 			$email_auteur = $cookie_user['email'];
 		}
@@ -138,10 +144,6 @@ function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubriq
 			$auteur = $GLOBALS['auteur_session']['nom'];
 			$email_auteur = $GLOBALS['auteur_session']['email'];
 		}
-		$id_message = spip_abstract_insert('forum', 
-					  "(date_heure, titre, ip, statut)",
-					  "(NOW(), '".addslashes($titre)."', '$REMOTE_ADDR', 'redac')");
-
 	}
 
 	// Generation d'une valeur de securite pour validation
@@ -166,8 +168,9 @@ function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubriq
 		     'formulaire_forum',
 		     0,
 		     array(
-		     'afficher_non' => 
-		     ($afficher_texte != 'non' ? '' :
+		     'afficher_texte_input' => (($afficher_texte <> 'non') ? '&nbsp;' : ''),
+		     'afficher_texte_hidden' => 
+		     (($afficher_texte <> 'non') ? '' :
 		      (boutonne('hidden', 'titre', htmlspecialchars($titre)) .
 		       $table .
 		       "\n<br /><div align='right'>" .
@@ -253,7 +256,7 @@ function table_des_mots($table, $les_mots) {
 				<td width='47%' valign='top'>";
 			}
 
-			$ret .= boutonne($unseul, "ajouter_mot[$id_groupe][]", $id_mot, "id='mot$id_mot' " . $les_mots[$id_mot]) .
+			$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 />";
 
diff --git a/inc-messforum.php3 b/inc-messforum.php3
index 9d7298ee99b14c9b4180d6aa5cca620de360c314..45d9545e0730fb8b9b7aff618095a936866c8ae0 100644
--- a/inc-messforum.php3
+++ b/inc-messforum.php3
@@ -2,6 +2,8 @@
 
 include_ecrire('inc_meta.php3');
 include_ecrire('inc_forum.php3');
+include_ecrire("inc_abstract_sql.php3");
+
 
 // Ce fichier inclus par inc-public a un comportement special
 // Voir commentaires dans celui-ci et dans inc-formulaire_forum
@@ -51,11 +53,6 @@ $forum_id_rubrique = intval($id_rubrique);
 $forum_id_forum = intval($id_forum);
 $forum_id_breve = intval($id_breve);
 $forum_id_syndic = intval($id_syndic);
-$slash_texte = addslashes($texte);
-$slash_titre = addslashes($titre);
-$slash_nom_site_forum = addslashes($nom_site_forum);
-$slash_url_site = addslashes($url_site);
-$id_message = intval($id_message);
 
 if (!$id_auteur)
 	$id_auteur = intval($auteur_session['id_auteur']);
@@ -93,39 +90,44 @@ if ($forums_publics == "abo") {
 	$email_auteur = $auteur_session['email'];
  } 
 
-$slash_auteur = addslashes($auteur);
-$slash_email_auteur = addslashes($email_auteur);
-
-if ((strlen($slash_texte) + strlen($slash_titre) + strlen($slash_nom_site_forum) + strlen($slash_url_site) + strlen($slash_auteur) + strlen($slash_email_auteur)) > 20 * 1024) {
+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;		  
+		_T('forum_cliquer_retour',
+		array('retour_forum' => $retour_forum)));
+	exit;
 }
 
-spip_query("DELETE FROM spip_mots_forum WHERE id_forum='$id_message'");
-if ($ajouter_mot) {
-	for (reset($ajouter_mot);$key=key($ajouter_mot);next($ajouter_mot))
-		$les_mots .= ",".join($ajouter_mot[$key],",");
-	$les_mots = explode(",", $les_mots);
-	for ($index = 0; $index < count($les_mots); $index++){
-		$le_mot = $les_mots[$index];
-		if ($le_mot > 0)
-		spip_query("INSERT INTO spip_mots_forum (id_mot, id_forum)
-		VALUES ('$le_mot', '$id_message')");
+
+$validation_finale = (strlen($confirmer) > 0
+	OR ($afficher_texte=='non' AND $ajouter_mot));
+
+if ($validation_finale) {
+
+	// verifier droit (pour interdire de hack-poster sur des forums fermes ?)
+	include_ecrire("inc_admin.php3");
+	if (!(verifier_action_auteur("ajout_forum $forum_id_rubrique".
+	" $forum_id_forum $forum_id_article $forum_id_breve".
+	" $forum_id_syndic $alea", $hash))) {
+		header("Status: 404");
+		exit;
 	}
-}
 
-$validation_finale = (strlen($confirmer) > 0 OR
-	($afficher_texte=='non' AND $ajouter_mot));
-$statut = ((!$validation_finale) ? 'redac' : 
-	(($forums_publics == 'non') ? 'off' :
-	(($forums_publics == 'pri') ? 'prop' : 'publie')));
+	// Entrer le message dans la base
+	$id_message = spip_abstract_insert('forum', 
+	"(date_heure)",
+	"(NOW())");
 
-if ($forum_id_forum > 0) $id_thread = $forum_id_forum;
-else $id_thread = $id_message;
+	$statut =
+		($forums_publics == 'non') ? 'off' :
+		(($forums_publics == 'pri') ? 'prop' :
+		'publie');
 
-spip_query("UPDATE spip_forum SET id_parent = $forum_id_forum,
+	if ($forum_id_forum > 0)
+		$id_thread = $forum_id_forum;
+	else
+		$id_thread = $id_message; # id_thread oblige INSERT puis UPDATE.
+
+	spip_query("UPDATE spip_forum SET id_parent = $forum_id_forum,
 	id_rubrique =$forum_id_rubrique,
 	id_article = $forum_id_article,
 	id_breve = $forum_id_breve,
@@ -133,49 +135,51 @@ spip_query("UPDATE spip_forum SET id_parent = $forum_id_forum,
 	id_auteur = $id_auteur,
 	id_thread = $id_thread,
 	date_heure = NOW(),
-	titre = \"$slash_titre\",
-	texte = \"$slash_texte\",
-	nom_site = \"$slash_nom_site_forum\",
-	url_site = \"$slash_url_site\",
-	auteur = \"$slash_auteur\",
-	email_auteur = \"$slash_email_auteur\",
-	ip = \"$REMOTE_ADDR\",
-	statut = \"$statut\"
-	WHERE id_forum = '$id_message'
-");
-
-//calculer_threads();
-
-if ($validation_finale) {
-	include_ecrire("inc_admin.php3");
-	if (!(verifier_action_auteur("ajout_forum $forum_id_rubrique".
-	" $forum_id_forum $forum_id_article $forum_id_breve".
-	" $forum_id_syndic $alea", $hash))) {
-		header("Status: 404");
-		exit;
-	} else {
-	  if (lire_meta("prevenir_auteurs") == "oui" AND ($afficher_texte != "non") AND ($id_article = $forum_id_article)) {
-			prevenir_auteurs($auteur, $email_auteur, $id_article, $texte, $titre);
+	titre = '".addslashes($titre)."',
+	texte = '".addslashes($texte)."',
+	nom_site = '".addslashes($nom_site_forum)."',
+	url_site = '".addslashes($url_site)."',
+	auteur = '".addslashes($auteur)."',
+	email_auteur = '".addslashes($email_auteur)."',
+	ip = '$REMOTE_ADDR',
+	statut = '$statut'
+	WHERE id_forum = $id_message
+	");
+
+	// 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)");
+
+
+	// Prevenir les auteurs de l'article
+	if (lire_meta("prevenir_auteurs") == "oui"
+	AND ($afficher_texte != "non")
+	AND ($id_article = $forum_id_article))
+		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));
+
+	//
+	// INVALIDATION DES CACHES LIES AUX FORUMS
+	//
+	include_ecrire('inc_invalideur.php3');
+	if ($statut == 'publie') {
+		suivre_invalideur ("id='id_forum/" .
+			calcul_index_forum($forum_id_article,
+				$forum_id_breve,
+				$forum_id_rubrique,
+				$forum_id_syndic) . "'");
+	}
 
-		}
-		// 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));
-
-		//
-		// INVALIDATION DES CACHES LIES AUX FORUMS
-		//
-		include_ecrire('inc_invalideur.php3');
-		if ($statut == 'publie') {
-			suivre_invalideur ("id='id_forum/" .
-				calcul_index_forum($forum_id_article,
-					$forum_id_breve,
-					$forum_id_rubrique,
-					$forum_id_syndic) . "'");
-		}
+	$redirect = $retour_forum;
 
-		$redirect = $retour_forum;
-	}
 }
 
 ?>