diff --git a/ecrire/balise/formulaire_admin.php b/ecrire/balise/formulaire_admin.php
index 0a919ace44bb6466e5b854875c173b1ea2c01de2..fbc44311642110cdef9843e64c0faf2c9afd87b9 100644
--- a/ecrire/balise/formulaire_admin.php
+++ b/ecrire/balise/formulaire_admin.php
@@ -31,8 +31,8 @@ function balise_FORMULAIRE_ADMIN_stat($args, $filtres) {
 # Le debuger transmet donc ses donnees, et cette balise y retrouve son petit.
 
 function balise_FORMULAIRE_ADMIN_dyn($float='', $debug='') {
-  global $var_preview, $use_cache, $forcer_debug, $xhtml;
 
+	global $var_preview, $use_cache, $forcer_debug, $xhtml;
 	global $id_article, $id_breve, $id_rubrique, $id_mot, $id_auteur, $id_syndic;
 	static $dejafait = false;
 
@@ -53,14 +53,13 @@ function balise_FORMULAIRE_ADMIN_dyn($float='', $debug='') {
 		}
 	}
 	$dejafait = true;
+	include_spip('inc/urls');
 
 	// Ne pas afficher le bouton 'Modifier ce...' si l'objet n'existe pas
 	foreach (array('article', 'breve', 'rubrique', 'mot', 'auteur', 'syndic') as $type) {
 		$id_type = id_table_objet($type);
 		if (!($$id_type = intval($$id_type)
-		AND $s = spip_query(
-		"SELECT $id_type FROM spip_".table_objet($type)."
-		WHERE $id_type=".$$id_type)
+		AND $s = spip_query("SELECT $id_type FROM spip_".table_objet($type)."	WHERE $id_type=".$$id_type)
 		AND spip_num_rows($s)))
 			$$id_type='';
 		else {
@@ -72,17 +71,13 @@ function balise_FORMULAIRE_ADMIN_dyn($float='', $debug='') {
 	// Bouton statistiques
 	if ($GLOBALS['meta']["activer_statistiques"] != "non" 
 	AND $id_article
-	AND !$var_preview
-	AND ($GLOBALS['auteur_session']['statut'] == '0minirezo')) {
-		if ($s = spip_query("SELECT id_article
-		FROM spip_articles WHERE statut='publie'
-		AND id_article = $id_article")
-		AND spip_fetch_array($s)) {
-			include_spip ('public/stats');
-			$r = afficher_raccourci_stats($id_article);
-			$visites = $r['visites'];
-			$popularite = $r['popularite'];
-			$statistiques = generer_url_ecrire('statistiques_visites', "id_article=$id_article", true);
+	AND !$var_preview) {
+		$result = spip_query("SELECT visites, popularite FROM spip_articles WHERE id_article=$id_article AND statut='publie'");
+
+		if ($row = @spip_fetch_array($result)) {
+			$visites = intval($row['visites']);
+			$popularite = ceil($row['popularite']);
+			$statistiques = str_replace('&', '&', generer_url_ecrire_statistiques($id_article));
 		}
 	}
 
@@ -129,8 +124,7 @@ function balise_FORMULAIRE_ADMIN_dyn($float='', $debug='') {
 		OR $objet_affiche == 'breve'
 		OR $objet_affiche == 'rubrique'
 		OR $objet_affiche == 'syndic')
-			if (spip_num_rows(spip_query(
-			"SELECT id_$objet_affiche FROM spip_".table_objet($objet_affiche)."
+			if (spip_num_rows(spip_query("SELECT id_$objet_affiche FROM spip_".table_objet($objet_affiche)."
 			WHERE ".id_table_objet($objet_affiche)."=".$$id_type."
 			AND (
 				(statut IN ('prop', 'prive'))
@@ -147,19 +141,19 @@ function balise_FORMULAIRE_ADMIN_dyn($float='', $debug='') {
 			'id_breve' => $id_breve,
 			'id_mot' => $id_mot,
 			'id_syndic' => $id_syndic,
-			'voir_article' => generer_url_ecrire('articles', "id_article=$id_article", true),
-			'voir_breve' => generer_url_ecrire('breves_voir', "id_breve=$id_breve", true),
-			'voir_rubrique' => generer_url_ecrire('naviguer', "id_rubrique=$id_rubrique", true),
-			'voir_mot' => generer_url_ecrire('mots_edit', "id_mot=$id_mot", true),
-			'voir_site' => generer_url_ecrire('sites', "id_syndic=$id_syndic", true),
-			'voir_auteur' => generer_url_ecrire('auteurs_edit', "id_auteur=$id_auteur", true),
+			'voir_article' => str_replace('&', '&', generer_url_ecrire_article($id_article, 'prop')),
+			'voir_breve' => str_replace('&', '&', generer_url_ecrire_breve($id_breve, 'prop')),
+			'voir_rubrique' => str_replace('&', '&', generer_url_ecrire_rubrique($id_rubrique, 'prop')),
+			'voir_mot' => str_replace('&', '&', generer_url_ecrire_mot($id_mot, 'prop')),
+			'voir_site' => str_replace('&', '&', generer_url_ecrire_site($id_syndic, 'prop')),
+			'voir_auteur' => str_replace('&', '&', generer_url_ecrire_auteur($id_auteur, 'prop')),
 			'ecrire' => $ecrire,
 			'action' => self(),
 			'preview' => $preview?parametre_url(self(),'var_mode','preview','&'):'',
 			'debug' => $debug,
 			'popularite' => ceil($popularite),
 			'statistiques' => $statistiques,
-			'visites' => intval($visites),
+			'visites' => $visites,
 			'use_cache' => ($use_cache ? '' : ' *'),
 			'divclass' => $float,
 			'analyser' => $analyser,
@@ -167,18 +161,4 @@ function balise_FORMULAIRE_ADMIN_dyn($float='', $debug='') {
 			)
 		     );
 }
-
-// Un outil pour le bouton d'amin "statistiques"
-function afficher_raccourci_stats($id_article) {
-	$query = "SELECT visites, popularite FROM spip_articles WHERE id_article=$id_article AND statut='publie'";
-	$result = spip_query($query);
-	if ($row = @spip_fetch_array($result)) {
-		$visites = intval($row['visites']);
-		$popularite = ceil($row['popularite']);
-
-		return array('visites' => $visites, 'popularite' => $popularite);
-	}
-}
-
-
 ?>
diff --git a/ecrire/inc/urls.php b/ecrire/inc/urls.php
index 74aa85f77acff94670e0f2f22bea315f38cc0fba..fec0406fc5d04f925055d6f55e39e9e2402924bd 100644
--- a/ecrire/inc/urls.php
+++ b/ecrire/inc/urls.php
@@ -12,7 +12,10 @@
 
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
-function generer_url_article($id_article, $statut='') {
+// fonction produisant les URL d'acces en lecture ou en ecriture 
+// des items des tables SQL principales, selon le statut de publication
+
+function generer_url_ecrire_article($id_article, $statut='') {
 	$args = "id_article=" . intval($id_article);
 	if (!$statut)
 		list($statut) = spip_fetch_array(spip_query("SELECT statut FROM spip_articles WHERE $args"));
@@ -21,7 +24,7 @@ function generer_url_article($id_article, $statut='') {
 	else	return generer_url_ecrire('articles', $args);
 }
 
-function generer_url_rubrique($id_rubrique, $statut='') {
+function generer_url_ecrire_rubrique($id_rubrique, $statut='') {
 	$args = "id_rubrique=" . intval($id_rubrique);
 	if (!$statut)
 		list($statut) = spip_fetch_array(spip_query("SELECT statut FROM spip_rubriques WHERE $args"));
@@ -30,7 +33,7 @@ function generer_url_rubrique($id_rubrique, $statut='') {
 	else	return generer_url_ecrire('naviguer',$args);
 }
 
-function generer_url_breve($id_breve, $statut='') {
+function generer_url_ecrire_breve($id_breve, $statut='') {
 	$args = "id_breve=" . intval($id_breve);
 	if (!$statut)
 		list($statut) = spip_fetch_array(spip_query("SELECT statut FROM spip_breves WHERE $args"));
@@ -39,32 +42,32 @@ function generer_url_breve($id_breve, $statut='') {
 	else	return generer_url_ecrire('breves_voir',$args);
 }
 
-function generer_url_mot($id_mot, $statut='') {
+function generer_url_ecrire_mot($id_mot, $statut='') {
 	$args = "id_mot=" . intval($id_mot);
 	if (!$statut)
 		return generer_url_action('redirect', $args);
 	else	return generer_url_ecrire('mots_edit',$args);
 }
 
-function generer_url_site($id_syndic, $statut='') {
+function generer_url_ecrire_site($id_syndic, $statut='') {
 	$args = "id_syndic=" . intval($id_syndic);
 	if (!$statut)
 		return generer_url_action('redirect', $args);
 	else	return generer_url_ecrire('sites',$args);
 }
 
-function generer_url_auteur($id_auteur, $statut='') {
+function generer_url_ecrire_auteur($id_auteur, $statut='') {
 	$args = "id_auteur=" . intval($id_auteur);
 	if (!$statut)
 		return generer_url_action('redirect', $args);
 	else	return generer_url_ecrire('auteurs_edit',$args);
 }
 
-function generer_url_forum($id_forum) {
+function generer_url_ecrire_forum($id_forum) {
 	return generer_url_action('redirect', "id_forum=$id_forum");
 }
 
-function generer_url_document($id_document) {
+function generer_url_ecrire_document($id_document) {
 	if (intval($id_document) <= 0) 
 		return '';
 	if ($row = @spip_fetch_array(spip_query("SELECT fichier,distant
@@ -80,4 +83,22 @@ function generer_url_document($id_document) {
 
 }
 
-?>
+function generer_url_ecrire_statistiques($id_article) {
+	return generer_url_ecrire('statistiques_visites', "id_article=$id_article");
+}
+
+// en cas de chargement a partir de l'espace de redac, rabattre la production
+// des URL publiques vers les URL privees en cas d'item non publies 
+
+if (!function_exists('generer_url_article')) {
+	$generer_url_article = 'generer_url_ecrire_article';
+	$generer_url_rubrique = 'generer_url_ecrire_rubrique';
+	$generer_url_breve = 'generer_url_ecrire_breve';
+	$generer_url_mot = 'generer_url_ecrire_mot';
+	$generer_url_site = 'generer_url_ecrire_site';
+	$generer_url_auteur = 'generer_url_ecrire_auteur';
+	$generer_url_forum = 'generer_url_ecrire_forum';
+	$generer_url_document = 'generer_url_ecrire_document';
+ }
+
+?>
\ No newline at end of file
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index bc9d16c285c531c069156b32867bc2efd5d7f252..fb5ec4a319718df934d9bf05356aeaf1873a4c8e 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -649,14 +649,13 @@ function autoriser_sans_cookie($nom)
 function charger_generer_url() {
 	static $ok;
 
-	if ($ok++) return; # fichier deja charge
-
 	// espace prive
 	if (!_DIR_RESTREINT)
 		include_spip('inc/urls');
 
 	// espace public
 	else {
+		if ($ok++) return; # fichier deja charge
 		// fichier inc-urls ? (old style)
 		if (@is_readable($f = _DIR_RACINE.'inc-urls.php3')
 		OR @is_readable($f = _DIR_RACINE.'inc-urls.php')