diff --git a/auteur-dist.html b/auteur-dist.html
index aa4d3c53b0f825bd827dc1d2ad65dc7ae786e7d0..924146456108d474e9f4a955d7c2859f5f0cc981 100644
--- a/auteur-dist.html
+++ b/auteur-dist.html
@@ -80,7 +80,7 @@
 	<h2><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></h2>
 	<div class="detail">
 	[(#DATE|nom_jour)] [(#DATE|affdate)]
-	<B_auteurs><:par_auteur:><BOUCLE_auteurs(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs>
+	<B_auteurs><:par_auteur:> <BOUCLE_auteurs(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs>
 	</div>
 	<br>
 </BOUCLE_articles>
diff --git a/ecrire/inc.php3 b/ecrire/inc.php3
index 119ce9479e7e805a843655c8b7b9cba72762dc31..b9bda4698dd004b66d7902c3ed00d793ae3a7edb 100644
--- a/ecrire/inc.php3
+++ b/ecrire/inc.php3
@@ -286,6 +286,13 @@ function changer_statut_forum($id_forum, $statut) {
 			spip_query($query);
 		}
 	}
+
+	// signaler au moteur de recherche qu'il faut reindexer le thread
+	// (en fait on se contente de demander une reindexation du parent)
+	include_ecrire('inc_index.php3');
+	marquer_indexer ('forum', $id_parent);
+
+	// changer le statut de toute l'arborescence dependant de ce message
 	$id_messages = array($id_forum);
 	while ($id_messages) {
 		$id_messages = join(',', $id_messages);
diff --git a/ecrire/inc_index.php3 b/ecrire/inc_index.php3
index 2a236972f6b709f6852c3f993b6b6cd6b9c18fa1..7d62d17eb89963cae5b53f386dc679a70f7c395d 100644
--- a/ecrire/inc_index.php3
+++ b/ecrire/inc_index.php3
@@ -189,15 +189,6 @@ function indexer_objet($type, $id_objet, $forcer_reset = true, $full = true /* f
 		}
 		break;
 
-	case 'forum':
-		indexer_chaine($row['titre'], 3);
-		indexer_chaine($row['texte'], 1);
-		indexer_chaine($row['auteur'], 2);
-		indexer_chaine($row['email_auteur'], 2);
-		indexer_chaine($row['nom_site'], 2);
-		indexer_chaine($row['url_site'], 1);
-		break;
-
 	case 'signature':
 		indexer_chaine($row['nom_email'], 2);
 		indexer_chaine($row['ad_email'], 2);
@@ -212,7 +203,7 @@ function indexer_objet($type, $id_objet, $forcer_reset = true, $full = true /* f
 		if ($full) {
 			// Ajouter les titres des articles syndiques de ce site, le cas echeant
 			if ($row['syndication'] = "oui") {
-				$query_syndic = "SELECT titre FROM spip_syndic_articles WHERE id_syndic=$id_objet ORDER BY date DESC LIMIT 0,100";
+				$query_syndic = "SELECT titre FROM spip_syndic_articles WHERE id_syndic=$id_objet AND statut='publie' ORDER BY date DESC LIMIT 0,100";
 				$result_syndic = spip_query($query_syndic);
 				while ($row_syndic = spip_fetch_array($result_syndic)) {
 					indexer_chaine($row_syndic['titre'], 5);
@@ -227,6 +218,56 @@ function indexer_objet($type, $id_objet, $forcer_reset = true, $full = true /* f
 		}
 		break;
 
+	//
+	// Cas tres particulier du forum :
+	// on indexe le thread comme un tout
+	case 'forum':
+		// 1. chercher la racine du thread
+		$id_forum = $id_objet;
+		while ($row['id_parent']) {
+			$id_forum = $row['id_parent'];
+			$s = spip_query("SELECT id_forum,id_parent FROM spip_forum WHERE id_forum=$id_forum");
+			$row = spip_fetch_array($s);
+		}
+
+		// 2. chercher tous les forums du thread
+		// (attention le forum de depart $id_objet n'appartient pas forcement
+		// a son propre thread car il peut etre le fils d'un forum non 'publie')
+		$thread="$id_forum";
+		$fini = false;
+		while (!$fini) {
+			$s = spip_query("SELECT id_forum FROM spip_forum WHERE id_parent IN ($thread) AND id_forum NOT IN ($thread) AND statut='publie'");
+			if (spip_num_rows($s) == 0) $fini = true;
+			while ($t = spip_fetch_array($s))
+				$thread.=','.$t['id_forum'];
+		}
+		
+		// 3. marquer le thread comme "en cours d'indexation"
+		spip_log("-> indexation thread $thread");
+		spip_query("UPDATE spip_forum SET idx='idx'
+			WHERE id_forum IN ($thread,$id_objet) AND idx!='non'");
+
+		// 4. Indexer le thread
+		$s = spip_query("SELECT * FROM spip_forum
+			WHERE id_forum IN ($thread) AND idx!='non'");
+		while ($row = spip_fetch_array($s)) {
+			indexer_chaine($row['titre'], 3);
+			indexer_chaine($row['texte'], 1);
+			indexer_chaine($row['auteur'], 2);
+			indexer_chaine($row['email_auteur'], 2);
+			indexer_chaine($row['nom_site'], 2);
+			indexer_chaine($row['url_site'], 1);
+		}
+
+		// 5. marquer le thread comme "indexe"
+		spip_query("UPDATE spip_forum SET idx='oui'
+			WHERE id_forum IN ($thread,$id_objet) AND idx!='non'");
+
+		// 6. Changer l'id_objet en id_forum de la racine du thread
+		$id_objet = $id_forum;
+
+		break;
+
 	} // switch
 
 	$query = "DELETE FROM $table_index WHERE $col_id=$id_objet";
@@ -260,7 +301,7 @@ function indexer_objet($type, $id_objet, $forcer_reset = true, $full = true /* f
 function marquer_indexer ($objet, $id_objet) {
 	spip_log ("demande indexation $objet $id_objet");
 	$table = 'spip_'.table_objet($objet);
-	spip_query ("UPDATE $table SET idx='1' WHERE id_$objet=$id_objet");
+	spip_query ("UPDATE $table SET idx='1' WHERE id_$objet=$id_objet AND idx!='non'");
 }
 function indexer_article($id_article) {
 	marquer_indexer('article', $id_article);
diff --git a/ecrire/lang/spip_fr.php3 b/ecrire/lang/spip_fr.php3
index e10435d5bc8439397748c24ceb51a2a584eebc82..a8dbd8df48a386302b52ab83d07288ecad7346df 100644
--- a/ecrire/lang/spip_fr.php3
+++ b/ecrire/lang/spip_fr.php3
@@ -1249,6 +1249,10 @@ exige d\'avoir un acc&egrave;s FTP au site Web.',
 'mois_non_connu' => 'non connu',
 
 
+// N
+'navigateur_pas_redirige' => 'Si votre navigateur n\'est pas redirig&eacute;, cliquez ici pour continuer.',
+
+
 // O
 'onglet_affacer_base' => 'Effacer la base',
 'onglet_agenda' => 'Agenda',
diff --git a/inc-login.php3 b/inc-login.php3
index 989c5a203561e786de0721c2f69963c976e25b8d..c6818472183a392db21aabeadad26bc1b797aad7 100644
--- a/inc-login.php3
+++ b/inc-login.php3
@@ -117,6 +117,10 @@ function login($cible = '', $prive = 'prive', $message_login='') {
 			$source_auteur = $row['source'];
 			$alea_actuel = $row['alea_actuel'];
 			$alea_futur = $row['alea_futur'];
+			if ($row['prefs']) {
+				$prefs = unserialize($row['prefs']);
+				$rester_checked = ($prefs['cnx'] == 'perma' ? ' checked':'');
+			}
 		} else if (!$flag_autres_sources) {
 			$erreur = _T('login_identifiant_inconnu', array('login' => htmlspecialchars($login)));
 			$login = '';
@@ -175,7 +179,7 @@ function login($cible = '', $prive = 'prive', $message_login='') {
 		echo "<input type='password' name='session_password' class='forml' value=\"\" size='40'>\n";
 		echo "<input type='hidden' name='essai_login' value='oui'>\n";
 
-		echo "<br>&nbsp;&nbsp;&nbsp;&nbsp;<input type='checkbox' name='session_remember' value='oui' id='session_remember'> ";
+		echo "<br>&nbsp;&nbsp;&nbsp;&nbsp;<input type='checkbox' name='session_remember' value='oui' id='session_remember'$rester_checked> ";
 		echo "<label for='session_remember'>"._T('login_rester_identifie')."</label>";
 
 		$url = $cible->getUrl();
diff --git a/rubrique-dist.html b/rubrique-dist.html
index 814e15228b3b2e493afb3ac3cd07b1371598338e..dc9448a5aa1e5116077acf7c245701f1933d14ab 100644
--- a/rubrique-dist.html
+++ b/rubrique-dist.html
@@ -195,7 +195,7 @@
 	<h2><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></h2>
 	<div class="detail">
 	[(#DATE|nom_jour)] [(#DATE|affdate)]
-	<B_auteurs_recents><:par_auteur:><BOUCLE_auteurs_recents(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs_recents>
+	<B_auteurs_recents><:par_auteur:> <BOUCLE_auteurs_recents(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs_recents>
 	</div>
 	<br>
 </BOUCLE_articles_recents>
diff --git a/site-dist.html b/site-dist.html
index e6e682755db19d7b9224391b98adbf1b0424cb8f..2011bb44670fb649448fa51a91ec2e33ab7f94b3 100644
--- a/site-dist.html
+++ b/site-dist.html
@@ -97,7 +97,7 @@
 	<a name="liens_forums">
 	<BOUCLE_forums_liens(FORUMS){id_syndic}{par date}{inverse}>
 		<a href="#forum#ID_FORUM"><img src="puce.gif" border="0">#TITRE</a>
-		<br>[(#DATE|affdate)][, <:par_auteur:>(#NOM)]
+		<br>[(#DATE|affdate)][, <:par_auteur:> (#NOM)]
 		<br>
 	</BOUCLE_forums_liens>
 	</font>
diff --git a/sommaire-dist.html b/sommaire-dist.html
index 3e57ddc3d26164d5afe12b62b1b0ccf03d5f21fc..8f821b8ae655a624a59d318e2bb4b9d6f2196984 100644
--- a/sommaire-dist.html
+++ b/sommaire-dist.html
@@ -162,7 +162,7 @@
 	<h2><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></h2>
 	<div class="detail">
 	[(#DATE|nom_jour)] [(#DATE|affdate)]
-	<B_auteurs_recents><:par_auteur:><BOUCLE_auteurs_recents(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs_recents>
+	<B_auteurs_recents><:par_auteur:> <BOUCLE_auteurs_recents(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs_recents>
 	</div>
 	<br>
 </BOUCLE_articles_recents>
diff --git a/spip_cookie.php3 b/spip_cookie.php3
index b37dafff374a974c3b4d4b762297b73f08affe21..da15b44ae2b105efe33655302718acc6ff1fac32 100644
--- a/spip_cookie.php3
+++ b/spip_cookie.php3
@@ -170,6 +170,11 @@ if ($cookie_session) {
 		spip_setcookie('spip_session', $cookie_session, time() + 3600 * 24 * 14);
 	else
 		spip_setcookie('spip_session', $cookie_session);
+
+	$prefs = ($row_auteur['prefs']) ? unserialize($row_auteur['prefs']) : array();
+	$prefs['cnx'] = ($session_remember == 'oui') ? 'perma' : '';
+	spip_query ("UPDATE spip_auteurs SET prefs = '".addslashes(serialize($prefs))."' WHERE id_auteur = ".$row_auteur['id_auteur']);
+
 }
 
 // Redirection
@@ -183,7 +188,7 @@ else {
 	echo "<html><head>";
 	echo "<meta http-equiv='Refresh' content='0; url=".$cible->getUrl()."'>";
 	echo "</head>\n";
-	echo "<body>Si votre navigateur n'est pas redirig&eacute;, <a href='".$cible->getUrl()."'>continuer</a>.</body></html>";
+	echo "<body><a href='".$cible->getUrl()."'>"._T('navigateur_pas_redirige')."</a></body></html>";
 }
 
 ?>