diff --git a/ecrire/inc_acces.php3 b/ecrire/inc_acces.php3
index 0b915ed58ca467deec0711e15acbfb978dd942e9..5f16c045f0f41fe6f1109247aeb46fbe37efed92 100644
--- a/ecrire/inc_acces.php3
+++ b/ecrire/inc_acces.php3
@@ -51,18 +51,27 @@ function creer_pass_aleatoire($longueur = 8, $sel = "") {
 // faible via les URLs (suivi RSS, iCal...)
 //
 function low_sec($id_auteur) {
-	if (!$id_auteur = intval($id_auteur)) return; // jamais trop prudent ;)
-	$query = "SELECT * FROM spip_auteurs WHERE id_auteur = $id_auteur";
-	$result = spip_query($query);
-
-	if ($row = spip_fetch_array($result)) {
-		$low_sec = $row["low_sec"];
-		if (!$low_sec) {
-			$low_sec = creer_pass_aleatoire();
-			spip_query("UPDATE spip_auteurs SET low_sec = '$low_sec' WHERE id_auteur = $id_auteur");
+	// Pas d'id_auteur : low_sec
+	if (!$id_auteur = intval($id_auteur)) {
+		if (!$low_sec = lire_meta('low_sec')) {
+			include_ecrire('inc_meta.php3');
+			ecrire_meta('low_sec', $low_sec = creer_pass_aleatoire());
+			ecrire_metas();
+		}
+	}
+	else {
+		$query = "SELECT * FROM spip_auteurs WHERE id_auteur = $id_auteur";
+		$result = spip_query($query);
+
+		if ($row = spip_fetch_array($result)) {
+			$low_sec = $row["low_sec"];
+			if (!$low_sec) {
+				$low_sec = creer_pass_aleatoire();
+				spip_query("UPDATE spip_auteurs SET low_sec = '$low_sec' WHERE id_auteur = $id_auteur");
+			}
 		}
-		return $low_sec;
 	}
+	return $low_sec;
 }
 
 function afficher_low_sec ($id_auteur, $action='') {
diff --git a/ecrire/inc_filtres.php3 b/ecrire/inc_filtres.php3
index 091286a5a121684d907f5661f6157a7d90fccf43..227d656e45719d667280af4dce83c3e695792c9e 100644
--- a/ecrire/inc_filtres.php3
+++ b/ecrire/inc_filtres.php3
@@ -1042,6 +1042,22 @@ function tester_config($ignore, $quoi) {
 	}
 }
 
+//
+// Un filtre qui, etant donne un #PARAMETRES_FORUM, retourne un URL de suivi rss
+// dudit forum
+// Attention applique a un #PARAMETRES_FORUM complexe (id_article=x&id_forum=y)
+// ca retourne un url de suivi du thread y (que le thread existe ou non)
+function url_rss_forum($param) {
+	if (preg_match(',.*(id_.*?)=([0-9]+),', $param, $regs)) {
+		include_ecrire('inc_acces.php3');
+		$regs[1] = str_replace('id_forum', 'id_thread', $regs[1]);
+		$arg = $regs[1].'-'.$regs[2];
+		$cle = afficher_low_sec(0, "rss forum $arg");
+		return "spip_rss.php?op=forum&args=$arg&cle=$cle";
+	}
+}
+
+
 // filtre pour visualiser dans l'espace public le calendrier de l'espace de redac
 // Tres ad hoc, faudra ameliorer.
 
diff --git a/ecrire/inc_forum.php3 b/ecrire/inc_forum.php3
index c63be9d2d473a83d8f45f71584f44e6feb2eb127..5e000d191a1e02fa06bc85a4679ac4995ef17f24 100644
--- a/ecrire/inc_forum.php3
+++ b/ecrire/inc_forum.php3
@@ -215,6 +215,7 @@ function critere_statut_controle_forum($page) {
 		$query_forum = "0=1";
 		break;
 	}
+
 	return $query_forum;
 }
 
@@ -300,11 +301,9 @@ function generer_url_forum_dist($id_forum, $show_thread=false) {
 }
 
 // Interface pour SPIP RSS
-function rss_suivi_forums($a) {
+function rss_suivi_forums($a, $query_forum='', $lien_moderation=false) {
 	include_ecrire("inc_forum.php3");
 
-	$query_forum = critere_statut_controle_forum($a['page']);
-
 	$result_forum = spip_query("
 	SELECT	*
 	FROM	spip_forum
@@ -323,8 +322,13 @@ function rss_suivi_forums($a) {
 		$item['author'] = $t['auteur'];
 		if ($t['email_auteur'])
 			$item['author'] .= ' <'.$t['email_auteur'].'>';
-		$item['url'] = lire_meta('adresse_site').'/'._DIR_RESTREINT_ABS
+
+		if ($lien_moderation)
+			$item['url'] = lire_meta('adresse_site').'/'._DIR_RESTREINT_ABS
 			.'controle_forum.php3?page='.$a['page'].'&debut_id_forum='.$t['id_forum'];
+		else
+			$item['url'] = lire_meta('adresse_site').'/'.generer_url_forum($t['id_forum']);
+
 		$item['description'] = propre($t['texte']);
 		if ($GLOBALS['les_notes']) {
 			$item['description'] .= '<hr />'.$GLOBALS['les_notes'];
diff --git a/spip_rss.php b/spip_rss.php
index 0c2b6bdecafe33b35e1d8f4c9ef7830b7d911bd2..47ad4af479769ef0064120890aec1d8670a69a8f 100644
--- a/spip_rss.php
+++ b/spip_rss.php
@@ -22,6 +22,12 @@ include("ecrire/inc_version.php3");
 include_ecrire("inc_texte.php3");
 include_ecrire('inc_sites.php3');
 include_ecrire("inc_acces.php3");
+// Gestionnaire d'URLs
+if (@file_exists("inc-urls.php3"))
+	include_local("inc-urls.php3");
+else
+	include_local("inc-urls-".$GLOBALS['type_urls'].".php3");
+
 
 //
 // Verifier la securite du lien et decoder les arguments
@@ -45,12 +51,32 @@ if (!verifier_low_sec ($id, $cle,
 // Choisir la fonction de calcul du RSS
 //
 switch($op) {
+	# forum public
+	case 'forum':
+		include_ecrire("inc_forum.php3");
+		if ($id = intval($a['id_article']))
+			$critere = "statut='publie' AND id_article=$id";
+		else if ($id = intval($a['id_syndic']))
+			$critere = "statut='publie' AND id_syndic=$id";
+		else if ($id = intval($a['id_breve']))
+			$critere = "statut='publie' AND id_breve=$id";
+		else if ($id = intval($a['id_rubrique']))
+			$critere = "statut='publie' AND id_rubrique=$id";
+		else if ($id = intval($a['id_thread']))
+			$critere = "statut='publie' AND id_thread=$id";
+		if ($id) $rss = rss_suivi_forums($a, $critere, false);
+		$title = _T("ecrire:titre_page_forum_suivi");
+		$url = generer_url_article($id);
+		break;
+	# suivi prive des forums
 	case 'forums':
 		include_ecrire("inc_forum.php3");
-		$rss = rss_suivi_forums($a);
+		$critere = critere_statut_controle_forum($a['page']);
+		$rss = rss_suivi_forums($a, $critere, true);
 		$title = _T("ecrire:titre_page_forum_suivi")." (".$a['page'].")";
 		$url = _DIR_RESTREINT_ABS .'controle_forum.php3?page='.$a['page'];
 		break;
+	# revisions des articles
 	case 'revisions':
 		include_ecrire("inc_suivi_revisions.php");
 		$rss = rss_suivi_versions($a);