diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3
index 8387b318826fea9db73577d56b4dd58acea819a1..0736f64b8c8a3eec8dd19542e4dc8cdcfd10512b 100644
--- a/ecrire/inc_version.php3
+++ b/ecrire/inc_version.php3
@@ -241,7 +241,7 @@ if ($cookie_prefix <> 'spip') {
 	while (list($name,$value) = each($HTTP_COOKIE_VARS)) {
 		if (ereg('^'.$cookie_prefix, $name)) {
 			$spipname = ereg_replace ('^'.$cookie_prefix, 'spip', $name);
-			$HTTP_COOKIE_VARS[$spipname] = $value;
+			$HTTP_COOKIE_VARS[$spipname] = $INSECURE[$spipname] = $value;
 			$$spipname = $value;
 		}
 	}
diff --git a/inc-forum.php3 b/inc-forum.php3
index 41c5296298764753732389b7d247cf6010f62a91..bbf6638f0cd1538823deca85bcef3a0ea160962b 100644
--- a/inc-forum.php3
+++ b/inc-forum.php3
@@ -90,12 +90,14 @@ document.write("<a href=\\"javascript:window.open(\\\'spip_pass.php3\\\', \\\'sp
 }
 
 
+//
+// Afficher le formulaire d'edition de forum en fonction du contexte
+//
+
 function retour_forum($id_rubrique, $id_parent, $id_article, $id_breve, $id_syndic, $titre='') {
-	global $REQUEST_URI, $HTTP_GET_VARS, $PATH_TRANSLATED, $REMOTE_ADDR, $id_message ;
-	$new = $GLOBALS["new"];
-	$redac = $GLOBALS["redac"];
-	$afficher_groupe = $GLOBALS["afficher_groupe"];
-	$afficher_texte = $GLOBALS["afficher_texte"];
+	global $REQUEST_URI, $HTTP_GET_VARS, $PATH_TRANSLATED, $REMOTE_ADDR, $id_message;
+	global $new, $redac, $afficher_groupe, $afficher_texte;
+	global $spip_forum_user;
 
 	$forums_publics = get_forums_publics($id_article);
 	if ($forums_publics == "non") return;
@@ -111,34 +113,13 @@ function retour_forum($id_rubrique, $id_parent, $id_article, $id_breve, $id_synd
 	}
 
 	$ret .= "\n<a name='formulaire_forum'></a>\n";
-	if (!$id_message = intval($id_message)) {
-		$ret .= "\n<form action='$lien' name='formulaire' method='post'>";
-	}
 
 	if ($forums_publics == "pri") {
 		$ret.= _T('forum_info_modere')."<p>";
 	}
 
-	// recuperer le titre
-	if (!$titre) {
-		if ($id_parent)
-			$titre_select = "SELECT titre FROM spip_forum WHERE id_forum = $id_parent";
-		else if ($id_rubrique)
-			$titre_select = "SELECT titre FROM spip_rubriques WHERE id_rubrique = $id_rubrique";
-		else if ($id_article)
-			$titre_select = "SELECT titre FROM spip_articles WHERE id_article = $id_article";
-		else if ($id_breve)
-			$titre_select = "SELECT titre FROM spip_breves WHERE id_breve = $id_breve";
-		else if ($id_syndic)
-			$titre_select = "SELECT nom_site AS titre FROM spip_syndic WHERE id_syndic = $id_syndic";
-		else
-			$titre_select = "SELECT '".addslashes(_T('forum_titre_erreur'))."' AS titre";
-
-		$res = spip_fetch_object(spip_query($titre_select));
-		$titre = '> ' . ereg_replace ('^[>[:space:]]*', '', $res->titre);
-	}
-
-	if ($id_message){
+	// Recuperer le message a previsualiser
+	if ($id_message = intval($id_message)) {
 		$query_forum="SELECT * FROM spip_forum WHERE ip=\"$REMOTE_ADDR\" AND id_forum=$id_message";
 		$result_forum=spip_query($query_forum);
 
@@ -151,7 +132,7 @@ function retour_forum($id_rubrique, $id_parent, $id_article, $id_breve, $id_synd
 			$url_site=$row['url_site'];
 		}
 
-		if (!$nouveau_document AND $afficher_texte != 'non'){
+		if ($afficher_texte != 'non') {
 			$ret .= "<div class='spip_encadrer'>";
 			if ($afficher_texte != "non"){
 				$ret .= "<div style='font-size: 120%; font-weigth: bold;'>".typo($titre)."</div>";
@@ -161,7 +142,6 @@ function retour_forum($id_rubrique, $id_parent, $id_article, $id_breve, $id_synd
 
 			$ret .= "<a href='".entites_html($url_site)."'>".typo($nom_site_forum)."</a>";
 
-
 			// Verifier mots associes au message
 			$query_mots = "SELECT mots.* 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";
 			$result_mots = spip_query($query_mots);
@@ -187,9 +167,39 @@ function retour_forum($id_rubrique, $id_parent, $id_article, $id_breve, $id_synd
 			$ret .= "</div>\n<br />";
 		}
 	}
+	else {
+		// Si premiere edition, initialiser le titre et l'auteur
+		if (!$titre) {
+			if ($id_parent)
+				$titre_select = "SELECT titre FROM spip_forum WHERE id_forum = $id_parent";
+			else if ($id_rubrique)
+				$titre_select = "SELECT titre FROM spip_rubriques WHERE id_rubrique = $id_rubrique";
+			else if ($id_article)
+				$titre_select = "SELECT titre FROM spip_articles WHERE id_article = $id_article";
+			else if ($id_breve)
+				$titre_select = "SELECT titre FROM spip_breves WHERE id_breve = $id_breve";
+			else if ($id_syndic)
+				$titre_select = "SELECT nom_site AS titre FROM spip_syndic WHERE id_syndic = $id_syndic";
+			else
+				$titre_select = "SELECT '".addslashes(_T('forum_titre_erreur'))."' AS titre";
+
+			$res = spip_fetch_object(spip_query($titre_select));
+			$titre = '> ' . ereg_replace ('^[>[:space:]]*', '', $res->titre);
+		}
+		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'];
+		}
+		$ret .= "\n<form action='$lien' name='formulaire' method='post'>";
+	}
 
 	$ret .= "\n";
 
+	// Generation d'une valeur de securite pour validation
 	$seed = (double) (microtime() + 1) * time() * 1000000;
 	@mt_srand($seed);
 	$alea = @mt_rand();
@@ -204,6 +214,7 @@ function retour_forum($id_rubrique, $id_parent, $id_article, $id_breve, $id_synd
 	$id_syndic = intval($id_syndic);
 	$hash = calculer_action_auteur("ajout_forum $id_rubrique $id_parent $id_article $id_breve $id_syndic $alea");
 
+	// Afficher le formulaire d'edition
 	$titre = entites_html($titre);
 	$texte = entites_html($texte);
 
@@ -240,7 +251,7 @@ function retour_forum($id_rubrique, $id_parent, $id_article, $id_breve, $id_synd
 	}
 
 
-	/// Gestion des mots-cles
+	// Gestion des mots-cles
 
 	$mots_cles_forums=lire_meta("mots_cles_forums");
 	if ($mots_cles_forums == "oui"){
@@ -308,9 +319,8 @@ function retour_forum($id_rubrique, $id_parent, $id_article, $id_breve, $id_synd
 			}
 		}
 	}
-	///////
-
 
+	// Edition du texte du forum
 	if ($afficher_texte != "non") {
 		$ret .= "\n<br /><div class='spip_encadrer'>"._T('forum_lien_hyper')."<br />\n";
 		$ret .= _T('forum_page_url');
@@ -323,12 +333,6 @@ function retour_forum($id_rubrique, $id_parent, $id_article, $id_breve, $id_synd
 
 		$ret .= "\n<br /><div class='spip_encadrer'>"._T('forum_qui_etes_vous')."<br />";
 
-		$nom_session = $GLOBALS['auteur_session']['nom'];
-		$nom_email = $GLOBALS['auteur_session']['email'];
-
-		if (!$auteur) $auteur = $nom_session;
-		if (!$email_auteur) $email_auteur = $nom_email;
-
 		if ($forums_publics == "abo")
 			$disabled = ' disabled="disabled"';
 
@@ -339,6 +343,7 @@ function retour_forum($id_rubrique, $id_parent, $id_article, $id_breve, $id_synd
 		$ret .= "<br />\n<input type='text' class='forml' name='email_auteur' value=\"".entites_html($email_auteur)."\" size='40'$disabled /></div>";
 	}
 
+	// Bouton de validation
 	if ($afficher_texte !="non") $ret .= "\n<br /><div align='right'><input type='submit' name='Valider' class='spip_bouton' value='"._T('forum_voir_avant')."' /></div>";
 	else  $ret .= "\n<br /><div align='right'><input type='submit' name='Valider' class='spip_bouton' value='"._T('forum_valider')."' /></div>";
 
@@ -348,14 +353,18 @@ function retour_forum($id_rubrique, $id_parent, $id_article, $id_breve, $id_synd
 }
 
 
+//
+// Fonction appelee a l'ajout d'un message
+// (previsualisation et validation finale)
+//
 
 function ajout_forum() {
 	global $texte, $titre, $nom_site_forum, $url_site, $auteur, $email_auteur, $retour_forum, $id_message, $confirmer;
-	global $forum_id_rubrique, $forum_id_parent, $forum_id_article, $forum_id_breve, $forum_id_auteur, $forum_id_syndic, $alea, $hash;
+	global $forum_id_rubrique, $forum_id_parent, $forum_id_article, $forum_id_breve, $forum_id_syndic, $alea, $hash;
 	global $auteur_session;
 	global $ajouter_mot, $new;
 	global $REQUEST_URI, $HTTP_COOKIE_VARS, $REMOTE_ADDR;
-	$afficher_texte = $GLOBALS['afficher_texte'];
+	global $afficher_texte;
 
 	if (!$GLOBALS['db_ok']) {
 		die ("<h4>"._T('forum_probleme_database')."</h4>");
@@ -364,48 +373,73 @@ function ajout_forum() {
 	$texte = addslashes($texte);
 	$titre = addslashes($titre);
 	$nom_site_forum = addslashes($nom_site_forum);
+	$url_site = addslashes($url_site);
 	$auteur = addslashes($auteur);
+	$email_auteur = addslashes($email_auteur);
+	$id_message = intval($id_message);
 	$retour_forum = rawurldecode($retour_forum);
+	$forum_id_article = intval($forum_id_article);
+	$forum_id_rubrique = intval($forum_id_rubrique);
+	$forum_id_parent = intval($forum_id_parent);
+	$forum_id_breve = intval($forum_id_breve);
+	$forum_id_syndic = intval($forum_id_syndic);
+
 	$forums_publics = get_forums_publics($forum_id_article);
+	$validation_finale = (strlen($confirmer) > 0 OR ($afficher_texte=='non' AND $ajouter_mot));
 
-	// ne pas autoriser de changement de nom si le forum est sur abonnement
+	// Gestion forums sur abonnement
 	if ($forums_publics == "abo") {
+		if ($auteur_session) {
+			$statut = $auteur_session['statut'];
+
+			if (!$statut OR $statut == '5poubelle') {
+				die ("<h4>"._T('forum_acces_refuse'). "</h4>" . _T('forum_cliquer_retour', array('retour_forum' => $retour_forum)). "<p>");
+			}
+		}
+		else {
+			die ("<h4>"._T('forum_non_inscrit'). "</h4>" .
+			_T('forum_cliquer_retour', array('retour_forum' => $retour_forum))."<p>");
+		}
+		// Ne pas autoriser de changement de nom si le forum est sur abonnement
 		$auteur = $auteur_session['nom'];
 		$email_auteur = $auteur_session['email'];
 	}
 
-	if (strlen($confirmer) > 0 AND !verifier_action_auteur("ajout_forum $forum_id_rubrique $forum_id_parent $forum_id_article $forum_id_breve $forum_id_syndic $alea", $hash)) {
-		@header("Location: $retour_forum");
-		exit;
-	}
-	if (strlen($confirmer) > 0 AND ((strlen($texte) + strlen($titre) + strlen($nom_site_forum) + strlen($url_site) + strlen($auteur) + strlen($email_auteur)) > 20 * 1024)) {
-		die ("<h4>"._T('forum_message_trop_long')."</h4>\n" .
-		_T('forum_cliquer_retour', array('retour_forum' => $retour_forum))."<p>");
-	}
-
-	unset($where);
-	if ($forum_id_article) $where[] = "id_article=$forum_id_article";
-	if ($forum_id_rubrique) $where[] = "id_rubrique=$forum_id_rubrique";
-	if ($forum_id_breve) $where[] = "id_breve=$forum_id_breve";
-	if ($forum_id_parent) $where[] = "id_forum=$forum_id_parent";
-	if ($where) {
-		$query = "SELECT fichier FROM spip_forum_cache WHERE ".join(' OR ', $where);
-		$result = spip_query($query);
-		unset($fichiers);
-		while ($row = spip_fetch_array($result)) {
-			$fichier = $row["fichier"];
-			@unlink("CACHE/$fichier");
-			@unlink("CACHE/$fichier.NEW");
-			$fichiers[] = "'".$fichier."'";
+	// Verification des donnees et gestion du cache
+	if ($validation_finale) {
+		if (!verifier_action_auteur("ajout_forum $forum_id_rubrique $forum_id_parent $forum_id_article $forum_id_breve $forum_id_syndic $alea", $hash)) {
+			@header("Location: $retour_forum");
+			exit;
 		}
-		if ($fichiers) {
-			$fichiers = join(',', $fichiers);
-			$query = "DELETE FROM spip_forum_cache WHERE fichier IN ($fichiers)";
-			spip_query($query);
+		if ((strlen($texte) + strlen($titre) + strlen($nom_site_forum) + strlen($url_site) + strlen($auteur) + strlen($email_auteur)) > 20 * 1024) {
+			die ("<h4>"._T('forum_message_trop_long')."</h4>\n" .
+			_T('forum_cliquer_retour', array('retour_forum' => $retour_forum))."<p>");
+		}
+
+		unset($where);
+		if ($forum_id_article) $where[] = "id_article=$forum_id_article";
+		if ($forum_id_rubrique) $where[] = "id_rubrique=$forum_id_rubrique";
+		if ($forum_id_breve) $where[] = "id_breve=$forum_id_breve";
+		if ($forum_id_parent) $where[] = "id_forum=$forum_id_parent";
+		if ($where) {
+			$query = "SELECT fichier FROM spip_forum_cache WHERE ".join(' OR ', $where);
+			$result = spip_query($query);
+			unset($fichiers);
+			while ($row = spip_fetch_array($result)) {
+				$fichier = $row["fichier"];
+				@unlink("CACHE/$fichier");
+				@unlink("CACHE/$fichier.NEW");
+				$fichiers[] = "'".$fichier."'";
+			}
+			if ($fichiers) {
+				$fichiers = join(',', $fichiers);
+				$query = "DELETE FROM spip_forum_cache WHERE fichier IN ($fichiers)";
+				spip_query($query);
+			}
 		}
 	}
 
-	switch($forums_publics) {
+	switch ($forums_publics) {
 		case "non":
 			$etat = "off";
 			break;
@@ -418,9 +452,8 @@ function ajout_forum() {
 	}
 
 	if (!$id_auteur) $id_auteur = $GLOBALS['auteur_session']['id_auteur'];
-	$auteur_session = $GLOBALS['auteur_session']['email'];
 
-	if ($new == "oui"){
+	if ($new == "oui") {
 		$nouveau_document = true;
 		if ($HTTP_GET_VARS['titre']){
 			$titre = "> ".rawurldecode($HTTP_GET_VARS['titre']);
@@ -434,7 +467,6 @@ function ajout_forum() {
 	// Ajouter les mots-cles
 	$query_mots = "DELETE FROM spip_mots_forum WHERE id_forum='$id_message'";
 	$result_mots = spip_query($query_mots);
-
 	if ($ajouter_mot){
 		for (reset($ajouter_mot); $key = key($ajouter_mot); next($ajouter_mot)){
 			$les_mots .= ",".join($ajouter_mot[$key],",");
@@ -454,30 +486,19 @@ function ajout_forum() {
 			date_heure = NOW(), titre = \"$titre\", texte = \"$texte\", nom_site = \"$nom_site_forum\", url_site = \"$url_site\", auteur = \"$auteur\",
 			email_auteur = \"$email_auteur\",  ip = \"$REMOTE_ADDR\", statut = \"redac\", id_auteur = \"$id_auteur\"
 		WHERE id_forum = '$id_message'";
-
 	$result_forum = spip_query($query_forum);
 
-
-	if ($forums_publics == 'abo') {
-		if ($auteur_session) {
-			$statut = $auteur_session['statut'];
-
-			if (!$statut OR $statut == '5poubelle') {
-				die ("<h4>"._T('forum_acces_refuse'). "</h4>" . _T('forum_cliquer_retour', array('retour_forum' => $retour_forum)). "<p>");
-			}
-		}
-		else {
-			die ("<h4>"._T('forum_non_inscrit'). "</h4>" .
-			_T('forum_cliquer_retour', array('retour_forum' => $retour_forum))."<p>");
-		}
-	}
-
-	if (strlen($confirmer) > 0 OR ($afficher_texte=='non' AND $ajouter_mot)) {
+	if ($validation_finale) {
 		spip_query("UPDATE spip_forum SET statut=\"$etat\" WHERE id_forum='$id_message'");
 
 		$texte = stripslashes($texte);
 		$titre = stripslashes($titre);
 		$auteur = stripslashes($auteur);
+		$email_auteur = stripslashes($email_auteur);
+
+		// 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), time() + 3600 * 24 * 7);
 
 		// Envoi d'un mail aux auteurs
 		$prevenir_auteurs = lire_meta("prevenir_auteurs");
diff --git a/spip_cookie.php3 b/spip_cookie.php3
index 13152df2abcd045dbcead41c3a91c52c0b6acc76..39cf06a620bb4665fde1502557d912ad3b674546 100644
--- a/spip_cookie.php3
+++ b/spip_cookie.php3
@@ -173,7 +173,7 @@ if ($cookie_session) {
 }
 
 // Redirection
-// Sous Apache 1.x, les cookies avec une redirection fonctionnent
+// Sous Apache, les cookies avec une redirection fonctionnent
 // Sinon, on fait un refresh HTTP
 if (ereg("^Apache", $SERVER_SOFTWARE)) {
 	@header("Location: " . $cible->getUrl());