diff --git a/ecrire/inc_majbase.php3 b/ecrire/inc_majbase.php3
index 72241b0fb5f8a623432bdf6781c7f1f1cd267a42..28dc1080d58746a9f78542201f14783de1df93ff 100644
--- a/ecrire/inc_majbase.php3
+++ b/ecrire/inc_majbase.php3
@@ -994,6 +994,8 @@ function maj_base() {
 	if ($version_installee < 1.816) {
 		maj_version(1.816);
 	}
+
+	// Texte et descriptif des groupes de mots-cles
 	if ($version_installee < 1.817) {
 		spip_query("ALTER TABLE spip_groupes_mots
 		ADD descriptif text NOT NULL AFTER titre");
@@ -1001,6 +1003,8 @@ function maj_base() {
 		ADD COLUMN texte longblob NOT NULL AFTER descriptif");
 		maj_version(1.817);
 	}
+
+	// Conformite des noms de certains champs (0minirezo => minirezo)
 	if ($version_installee < 1.818) {
 		spip_query("ALTER TABLE spip_groupes_mots CHANGE COLUMN 0minirezo minirezo char(3) NOT NULL");
 		spip_query("ALTER TABLE spip_groupes_mots CHANGE COLUMN 1comite comite char(3) NOT NULL");
@@ -1008,6 +1012,15 @@ function maj_base() {
 		maj_version(1.818);
 	}
 
+	// Options de syndication : miroir + oubli
+	if ($version_installee < 1.819) {
+		spip_query("ALTER TABLE spip_syndic
+			ADD miroir VARCHAR(3) DEFAULT 'non'");
+		spip_query("ALTER TABLE spip_syndic
+			ADD oubli VARCHAR(3) DEFAULT 'non'");
+		maj_version(1.819);
+	}
+
 
 	return true;
 }
diff --git a/ecrire/inc_serialbase.php3 b/ecrire/inc_serialbase.php3
index 923a8196ed8d7b59fef28f11d131ddfe9ba65ece..281e317be0463225eeb5616349e16ede200762a1 100644
--- a/ecrire/inc_serialbase.php3
+++ b/ecrire/inc_serialbase.php3
@@ -252,7 +252,10 @@ $spip_syndic = array(
 		"date_syndic"	=> "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
 		"date_index"	=> "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
 		"extra"			=> "longblob NULL",
-		"moderation"	=> "VARCHAR(3) NOT NULL");
+		"moderation"	=> "VARCHAR(3) DEFAULT 'non'",
+		"miroir"	=> "VARCHAR(3) DEFAULT 'non'",
+		"oubli"	=> "VARCHAR(3) DEFAULT 'non'"
+);
 
 $spip_syndic_key = array(
 		"PRIMARY KEY"	=> "id_syndic",
diff --git a/ecrire/inc_sites.php3 b/ecrire/inc_sites.php3
index e8817b153842b4ec15d4acb38a8d9b53bb36d967..b026bcd0df8902f005981c494efb0287a12c68e2 100644
--- a/ecrire/inc_sites.php3
+++ b/ecrire/inc_sites.php3
@@ -668,11 +668,39 @@ function syndic_a_jour($now_id_syndic, $statut = 'off') {
 
 	// Les enregistrer dans la base
 	if (is_array($articles)) {
+		$urls = array();
 		foreach ($articles as $data) {
-			if ($data['url'])
+			if ($data['url']) {
 				inserer_article_syndique ($data, $now_id_syndic, $moderation, $url_site);
+				$urls[] = $data['url'];
+			}
+		}
+
+		// moderation automatique des liens qui sont sortis du feed
+		if (count($urls) > 0
+		AND $row['miroir'] == 'oui') {
+			spip_query("UPDATE spip_syndic_articles
+				SET statut='off', maj=maj
+				WHERE id_syndic=$now_id_syndic
+				AND NOT (url IN ('"
+				. join("','", array_map('addslashes',$urls))
+				. "'))");
+		}
+
+		// suppression apres 2 mois des liens qui sont sortis du feed
+		if (count($urls) > 0
+		AND $row['oubli'] == 'oui') {
+			$time = date('U') - 61*24*3600; # deux mois
+			spip_query("DELETE FROM spip_syndic_articles
+				WHERE id_syndic=$now_id_syndic
+				AND UNIX_TIMESTAMP(maj) < $time
+				AND UNIX_TIMESTAMP(date) < $time
+				AND NOT (url IN ('"
+				. join("','", array_map('addslashes',$urls))
+				. "'))");
 		}
 
+
 		// Noter que la syndication est OK
 		spip_query("UPDATE spip_syndic SET syndication='oui'
 		WHERE id_syndic='$now_id_syndic'");
@@ -891,7 +919,7 @@ function afficher_syndic_articles($titre_table, $requete, $afficher_site = false
 					$puce = 'puce-rouge.gif';
 			}
 
-			else if ($statut == "off") { // vieillerie
+			else if ($statut == "off") { // feed d'un site en mode "miroir"
 					$puce = 'puce-rouge-anim.gif';
 			}
 
@@ -899,7 +927,10 @@ function afficher_syndic_articles($titre_table, $requete, $afficher_site = false
 			$vals[] = $s;
 
 			$s = "<a href='$url'>$titre</a>";
-			if (strlen($lesauteurs) > 0) $s .= " ($lesauteurs)";
+
+			$date = affdate_court($date);
+			if (strlen($lesauteurs) > 0) $date = $lesauteurs.', '.$date;
+			$s.= " ($date)";
 
 			// S'il y a des fichiers joints (enclosures), on les affiche ici
 			if (spip_num_rows($q = spip_query("SELECT docs.* FROM spip_documents AS docs, spip_documents_syndic AS lien WHERE lien.id_syndic_article = $id_syndic_article AND lien.id_document = docs.id_document"))) {
@@ -918,11 +949,11 @@ function afficher_syndic_articles($titre_table, $requete, $afficher_site = false
 			$vals[] = $s;
 
 			// $my_sites cache les resultats des requetes sur les sites
-			if ($afficher_site) {
-				if (!$my_sites[$id_syndic])
-					$my_sites[$id_syndic] = spip_fetch_array(spip_query(
-						"SELECT * FROM spip_syndic WHERE id_syndic=$id_syndic"));
+			if (!$my_sites[$id_syndic])
+				$my_sites[$id_syndic] = spip_fetch_array(spip_query(
+					"SELECT * FROM spip_syndic WHERE id_syndic=$id_syndic"));
 
+			if ($afficher_site) {
 				$aff = $my_sites[$id_syndic]['nom_site'];
 				if ($my_sites[$id_syndic]['moderation'] == 'oui')
 					$s = "<i>$aff</i>";
@@ -943,7 +974,12 @@ function afficher_syndic_articles($titre_table, $requete, $afficher_site = false
 				else if ($statut == "refuse"){
 					$s =  "[<a href='".$adresse_page.$lien_url."id_syndic=$id_syndic&ajouter_lien=$id_syndic_article'>"._T('info_retablir_lien')."</a>]";
 				}
-				else /* if ($statut == "dispo") */ {
+				else if ($statut == "off"
+				AND $my_sites[$id_syndic]['miroir'] == 'oui') {
+					$s = '('._T('syndic_lien_obsolete').')';
+				}
+				else /* 'dispo' ou 'off' (dans le cas ancien site 'miroir') */
+				{
 					$s = "[<a href='".$adresse_page.$lien_url."id_syndic=$id_syndic&ajouter_lien=$id_syndic_article'>"._T('info_valider_lien')."</a>]";
 				}
 				$vals[] = $s;
diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3
index f70c4c27817a6a74ba8ad0912e884d0d30c43a8f..43e43b4188494e0b826b41604260118a11cb0425 100644
--- a/ecrire/inc_version.php3
+++ b/ecrire/inc_version.php3
@@ -412,7 +412,7 @@ define_once('_AUTH_USER_FILE', '.htpasswd');
 // (utilise pour les modifs de la base de donnees)
 
 // version de la base
-$spip_version = 1.818;
+$spip_version = 1.819;
 
 // version de spip
 $spip_version_affichee = "1.8.2 CVS beta 2";
diff --git a/ecrire/sites.php3 b/ecrire/sites.php3
index bd00809a2822a5e06ada08fbbf8ef26ddf94c43c..d517f0f8914330ec5f7222124bf429c46d486da7 100644
--- a/ecrire/sites.php3
+++ b/ecrire/sites.php3
@@ -17,6 +17,7 @@ include_ecrire ("inc_mots.php3");
 include_ecrire ("inc_sites.php3");
 include_ecrire ("inc_date.php3");
 include_ecrire ("inc_abstract_sql.php3");
+include_ecrire ("inc_config.php3");
 
 $proposer_sites = lire_meta("proposer_sites");
 
@@ -51,10 +52,10 @@ if ($new == 'oui') {
 					 "(nom_site, id_rubrique, id_secteur, date, date_syndic, statut, syndication, moderation)",
 					 "('"._T('avis_site_introuvable')."', $id_rubrique, $id_rubrique, NOW(), NOW(), 'refuse', 'non', '$moderation')");
 	}
-}
+} else $id_syndic = intval($id_syndic);
 
-$query = "SELECT statut, id_rubrique FROM spip_syndic WHERE id_syndic='$id_syndic'";
-$result = spip_query($query);
+$result = spip_query("SELECT statut, id_rubrique FROM spip_syndic
+	WHERE id_syndic=$id_syndic");
 
 if ($row = spip_fetch_array($result)) {
 	$statut = $row["statut"];
@@ -81,10 +82,11 @@ if ($analyser_site == 'oui' AND $flag_editable) {
 		$url_syndic = addslashes($v['url_syndic']);
 		$descriptif = addslashes($v['descriptif']);
 		$syndication = $v[syndic] ? 'oui' : 'non';
-		$query = "UPDATE spip_syndic ".
-			"SET nom_site='$nom_site', url_site='$url_site', url_syndic='$url_syndic', descriptif='$descriptif', syndication='$syndication', statut='$statut' ".
-			"WHERE id_syndic=".intval($id_syndic);
-		$result = spip_query($query);
+		$result = spip_query("UPDATE spip_syndic ".
+			"SET nom_site='$nom_site', url_site='$url_site',
+			url_syndic='$url_syndic', descriptif='$descriptif',
+			syndication='$syndication', statut='$statut'
+			WHERE id_syndic=$id_syndic");
 		if ($syndication == 'oui') syndic_a_jour($id_syndic);
 		$link = new Link('sites.php3');
 		$link->addVar('id_syndic');
@@ -101,13 +103,12 @@ if ($analyser_site == 'oui' AND $flag_editable) {
 
 if ($nouveau_statut AND $flag_administrable) {
 	$statut = $nouveau_statut;
-	$query = "UPDATE spip_syndic SET statut='$statut' WHERE id_syndic=".intval($id_syndic);
-	$result = spip_query($query);
-	//if ($statut == 'refuse') $redirect_ok = 'oui';
-	if ($statut == 'publie') {
-		$query = "UPDATE spip_syndic SET date=NOW() WHERE id_syndic=".intval(id_syndic);
-		$result = spip_query($query);
-	}
+	$result = spip_query("UPDATE spip_syndic SET statut='$statut'
+	WHERE id_syndic=$id_syndic");
+	if ($statut == 'publie')
+		spip_query("UPDATE spip_syndic SET date=NOW() WHERE
+		id_syndic=$id_syndic");
+
 	calculer_rubriques();
 	if ($statut == 'publie') {
 		if (lire_meta('activer_moteur') == 'oui') {
@@ -133,15 +134,18 @@ if ($nom_site AND $modifier_site == 'oui' AND $flag_editable) {
 	
 	
 	
-	$query = "UPDATE spip_syndic SET id_rubrique='$id_rubrique', nom_site='$nom_site', url_site='$url_site', url_syndic='$url_syndic', descriptif='$descriptif', syndication='$syndication', statut='$statut' $add_extra WHERE id_syndic=".intval($id_syndic);
-	$result = spip_query($query);
+	spip_query("UPDATE spip_syndic SET id_rubrique='$id_rubrique',
+	nom_site='$nom_site', url_site='$url_site', url_syndic='$url_syndic',
+	descriptif='$descriptif', syndication='$syndication', statut='$statut'
+	$add_extra WHERE id_syndic=$id_syndic");
 
-	if ($syndication_old != $syndication OR $url_syndic != $old_syndic) {
+	if ($syndication_old != $syndication OR $url_syndic != $old_syndic)
 		$reload = "oui";
-	}
-	if ($syndication_old != $syndication AND $syndication == "non") {
-		spip_query("DELETE FROM spip_syndic_articles WHERE id_syndic='$id_syndic'");
-	}
+
+	if ($syndication_old != $syndication AND $syndication == "non")
+		spip_query("DELETE FROM spip_syndic_articles
+		WHERE id_syndic=$id_syndic");
+
 	calculer_rubriques();
 
 	// invalider et reindexer
@@ -167,8 +171,8 @@ if ($nom_site AND $modifier_site == 'oui' AND $flag_editable) {
 if ($jour AND $flag_administrable) {
 	if ($annee == "0000") $mois = "00";
 	if ($mois == "00") $jour = "00";
-	$query = "UPDATE spip_syndic SET date='$annee-$mois-$jour' WHERE id_syndic=".intval($id_syndic);
-	$result = spip_query($query);
+	spip_query("UPDATE spip_syndic SET date='$annee-$mois-$jour'
+	WHERE id_syndic=$id_syndic");
 	calculer_rubriques();
 }
 
@@ -182,8 +186,9 @@ if ($redirect AND $redirect_ok == 'oui') {
 //
 // reload
 //
-if ($reload ==  "oui") {
-	$result = spip_query ("SELECT * FROM spip_syndic WHERE id_syndic='$id_syndic' AND syndication IN ('oui', 'sus', 'off')");
+if ($reload) {
+	$result = spip_query ("SELECT * FROM spip_syndic WHERE id_syndic=$id_syndic
+	AND syndication IN ('oui', 'sus', 'off')");
 	if ($result AND spip_num_rows($result)>0)
 		$erreur_syndic = syndic_a_jour ($id_syndic);
 }
@@ -195,8 +200,7 @@ if ($reload ==  "oui") {
 
 calculer_droits();
 
-$query = "SELECT * FROM spip_syndic WHERE id_syndic='$id_syndic'";
-$result = spip_query($query);
+$result = spip_query("SELECT * FROM spip_syndic WHERE id_syndic=$id_syndic");
 
 if ($row = spip_fetch_array($result)) {
 	$id_syndic = $row["id_syndic"];
@@ -372,30 +376,80 @@ if ($syndication == "oui" OR $syndication == "off" OR $syndication == "sus") {
 		fin_boite_info();
 	}
 	afficher_syndic_articles(_T('titre_articles_syndiques'),
-		"SELECT * FROM spip_syndic_articles WHERE id_syndic='$id_syndic' ORDER BY date DESC");
+		"SELECT * FROM spip_syndic_articles WHERE id_syndic=$id_syndic
+		ORDER BY date DESC");
 
 
 	echo "<font face='verdana,arial,helvetica' size=2>";
 	// afficher la date de dernier acces a la syndication
 	if ($date_syndic)
 		echo "<p><div align='left'>"._T('info_derniere_syndication').' '.affdate_heure($date_syndic)
-		.".</div><div align='right'><a href='sites.php3?id_syndic=$id_syndic&reload=oui'>"._T('lien_mise_a_jour_syndication')."</a></div>\n";
-
-	// modifier la moderation
+		.".</div>\n";
+		
+		echo "<div align='right'>\n"
+		. "<form method='post' action='sites.php3?id_syndic=$id_syndic'>"
+		. "<input type='submit' name='reload' value=\""
+		. attribut_html(_T('lien_mise_a_jour_syndication'))
+		. "\" class='fondo' style='font-size:9px;' /></form></div>\n";
+
+	// Options
 	if ($flag_administrable && $options=='avancees') {
+
+		debut_cadre_relief();
+		echo "<u>"._T('syndic_options')."</u>"
+			. aide('artsyn')."\n"
+			. "<form method='POST' action='sites.php3?id_syndic=$id_syndic' class='verdana2'>\n";
+
+		// modifier la moderation
 		if ($moderation == 'oui' OR $moderation == 'non')
-			spip_query("UPDATE spip_syndic SET moderation='$moderation' WHERE id_syndic=".intval($id_syndic));
+			spip_query("UPDATE spip_syndic SET moderation='$moderation'
+			WHERE id_syndic=$id_syndic");
 		else
 			$moderation = $mod;
-
-		if ($moderation == 'non' || $moderation =='')
-			echo "<p><div align='left'>"._T('texte_liens_syndication'). aide('artsyn') .
-				"</div><div align='right'><a
-				href='sites.php3?id_syndic=$id_syndic&moderation=oui'>"._T('info_demander_blocage_priori')."</a></div>\n";
-		else if ($moderation == 'oui')
-			echo "<p><div align='left'>"._T('texte_demander_blocage_priori'). aide('artsyn') .
-				"</div><div align='right'> <a
-				href='sites.php3?id_syndic=$id_syndic&moderation=non'>"._T('info_annuler_blocage_priori')."</a></div>\n";
+		if ($moderation != 'oui') $moderation='non';
+
+		echo "<p><div align='$spip_lang_left'>"
+			. _T('syndic_choix_moderation') . "<br />\n";
+		afficher_choix('moderation', $moderation,
+			array(
+			'non' => _T('info_publier')
+				.' ('._T('bouton_radio_modere_posteriori').')',
+			'oui' => _T('info_bloquer')
+				.' ('._T('bouton_radio_modere_priori').')'
+			));
+
+		// Oublier les vieux liens ?
+		# appliquer les choix
+		if ($miroir == 'oui' OR $miroir == 'non')
+			spip_query("UPDATE spip_syndic SET miroir='$miroir'
+			WHERE id_syndic=$id_syndic");
+		if ($oubli == 'oui' OR $oubli == 'non')
+			spip_query("UPDATE spip_syndic SET oubli='$oubli'
+			WHERE id_syndic=$id_syndic");
+
+		echo "<p><div align='left'>"._T('syndic_choix_oublier');
+
+		# miroir
+		if (!$miroir AND !$miroir = $row['miroir']) $miroir = 'non';
+		echo "<li>"._T('syndic_option_miroir').' ';
+		afficher_choix('miroir', $miroir,
+			array('oui' => _T('item_oui'), 'non' => _T('item_non')),
+			" &nbsp; ");
+		echo "</li>\n";
+
+		# oubli
+		if (!$oubli AND !$oubli = $row['oubli']) $oubli = 'non';
+		echo "<li>"._T('syndic_option_oubli', array('mois' => 2)).' ';
+		afficher_choix('oubli', $oubli,
+			array('oui' => _T('item_oui'), 'non' => _T('item_non')),
+			" &nbsp; ");
+		echo "</li>\n";
+
+		// Bouton "Valider"
+		echo "<div style='text-align:$spip_lang_right'><INPUT TYPE='submit' NAME='Valider' VALUE='"._T('bouton_valider')."' CLASS='fondo'></div>";
+
+
+		fin_cadre_relief();
 	}
 	echo "</font>";
 }
@@ -460,8 +514,8 @@ echo "</div>";
 
 echo "<p align='left'>\n";
 
-$query_forum = "SELECT * FROM spip_forum WHERE statut='prive' AND id_syndic='$id_syndic' AND id_parent=0 ORDER BY date_heure DESC LIMIT 0,20";
-$result_forum = spip_query($query_forum);
+$result_forum = spip_query("SELECT * FROM spip_forum WHERE statut='prive'
+AND id_syndic=$id_syndic AND id_parent=0 ORDER BY date_heure DESC LIMIT 0,20");
 afficher_forum($result_forum, $forum_retour);