diff --git a/article-dist.html b/article-dist.html
index 6253d11fea6d056c59c604b85207462191ff2467..a387463a99729af372750a25fc067f505eef9932 100644
--- a/article-dist.html
+++ b/article-dist.html
@@ -263,6 +263,12 @@
 </div>
 
 
+<!-- Formulaire administrateur -->
+
+[(#FORMULAIRE_ADMIN)]
+
+
+
 </body>
 </html>
 
diff --git a/breve-dist.html b/breve-dist.html
index 542e15bbdc3c7594e73ba7f3b2170a28422c4785..2018edcc963edd0b8141b9d0ab29cfffc3b40963 100644
--- a/breve-dist.html
+++ b/breve-dist.html
@@ -227,6 +227,12 @@
 
 </div>
 
+
+<!-- Formulaire administrateur -->
+
+[(#FORMULAIRE_ADMIN)]
+
+
 </body>
 </html>
 
diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3
index 56c3f8ee2460bc4a63bf7a2a8e7d28f715c671cb..4ea738e54a61a48a64906d551fb05ab0a2bc6733 100644
--- a/ecrire/inc_version.php3
+++ b/ecrire/inc_version.php3
@@ -389,6 +389,7 @@ class Link {
 		if (!$url) {
 			$url = $GLOBALS['REQUEST_URI'];
 			$url = substr($url, strrpos($url, '/') + 1);
+			if (!$url) $url = "./";
 			if (count($GLOBALS['HTTP_POST_VARS'])) $vars = $GLOBALS['HTTP_POST_VARS'];
 		}
 		$v = split('[\?\&]', $url);
diff --git a/forum-dist.html b/forum-dist.html
index 7ba9179d11201dcf4440364508db086e91cea390..61e6f6b4f9d1b32bb43454602fc0f339b81cbd57 100644
--- a/forum-dist.html
+++ b/forum-dist.html
@@ -92,6 +92,11 @@
 </div>
 
 
+<!-- Formulaire administrateur -->
+
+[(#FORMULAIRE_ADMIN)]
+
+
 </body>
 </html>
 
diff --git a/habillage.css b/habillage.css
index 1979347b9b89e1e4d116caf460aa82c628abf984..87bbce2fff2de3d37711f09147c711687ba3c39c 100755
--- a/habillage.css
+++ b/habillage.css
@@ -364,7 +364,6 @@ ul ul ul ul ul .forum-chapo {
 	padding: 3px;
 	background: #d0d0d0;
 	font-family: "Trebuchet MS", Tahoma, Arial, Helvetica, sans-serif;
-/*	width: 220px;*/
 }
 .spip-admin {
 	position: fixed;
diff --git a/inc-calcul-squel.php3 b/inc-calcul-squel.php3
index 84710bcf4a773a451cf368a14507da544cbabd7a..015344af3d9ac072eda66eca627df2af6670cfa2 100644
--- a/inc-calcul-squel.php3
+++ b/inc-calcul-squel.php3
@@ -817,18 +817,18 @@ function parser($texte) {
 	//
 
 	$c = array('NOM_SITE_SPIP', 'URL_SITE_SPIP', 'EMAIL_WEBMASTER', 'CHARSET',
-		'ID_ARTICLE', 'ID_RUBRIQUE', 'ID_BREVE', 'ID_FORUM', 'ID_PARENT', 'ID_SECTEUR', 'ID_DOCUMENT', 'ID_TYPE', 
-		'ID_AUTEUR', 'ID_MOT', 'ID_SYNDIC_ARTICLE', 'ID_SYNDIC', 'ID_SIGNATURE', 'ID_GROUPE', 
+		'ID_ARTICLE', 'ID_RUBRIQUE', 'ID_BREVE', 'ID_FORUM', 'ID_PARENT', 'ID_SECTEUR', 'ID_DOCUMENT', 'ID_TYPE',
+		'ID_AUTEUR', 'ID_MOT', 'ID_SYNDIC_ARTICLE', 'ID_SYNDIC', 'ID_SIGNATURE', 'ID_GROUPE',
 		'TITRE', 'SURTITRE', 'SOUSTITRE', 'DESCRIPTIF', 'CHAPO', 'TEXTE', 'PS', 'NOTES', 'INTRODUCTION', 'MESSAGE',
 		'DATE', 'DATE_REDAC', 'DATE_MODIF', 'INCLUS',
-		'LESAUTEURS', 'EMAIL', 'NOM_SITE', 'LIEN_TITRE', 'URL_SITE', 'LIEN_URL', 'NOM', 'BIO', 'TYPE', 'PGP', 
+		'LESAUTEURS', 'EMAIL', 'NOM_SITE', 'LIEN_TITRE', 'URL_SITE', 'LIEN_URL', 'NOM', 'BIO', 'TYPE', 'PGP',
 		'FORMULAIRE_ECRIRE_AUTEUR', 'FORMULAIRE_FORUM', 'FORMULAIRE_SITE', 'PARAMETRES_FORUM', 'FORMULAIRE_RECHERCHE', 'FORMULAIRE_INSCRIPTION', 'FORMULAIRE_SIGNATURE',
 		'LOGO_MOT', 'LOGO_RUBRIQUE', 'LOGO_RUBRIQUE_NORMAL', 'LOGO_RUBRIQUE_SURVOL', 'LOGO_AUTEUR', 'LOGO_SITE',  'LOGO_BREVE', 'LOGO_BREVE_RUBRIQUE',  'LOGO_DOCUMENT', 'LOGO_ARTICLE', 'LOGO_ARTICLE_RUBRIQUE', 'LOGO_ARTICLE_NORMAL', 'LOGO_ARTICLE_SURVOL',
 		'URL_ARTICLE', 'URL_RUBRIQUE', 'URL_BREVE', 'URL_FORUM', 'URL_SYNDIC', 'URL_MOT', 'URL_DOCUMENT', 'EMBED_DOCUMENT',
 		'IP', 'VISITES', 'POPULARITE', 'POPULARITE_ABSOLUE', 'POPULARITE_MAX', 'POPULARITE_SITE', 'POINTS', 'COMPTEUR_BOUCLE', 'TOTAL_BOUCLE', 'PETITION',
 		'LARGEUR', 'HAUTEUR', 'TAILLE', 'EXTENSION',
 		'DEBUT_SURLIGNE', 'FIN_SURLIGNE', 'TYPE_DOCUMENT', 'EXTENSION_DOCUMENT',
-		'LOGIN_PRIVE', 'LOGIN_PUBLIC', 'PUCE'
+		'FORMULAIRE_ADMIN', 'LOGIN_PRIVE', 'LOGIN_PUBLIC', 'PUCE'
 	);
 	reset($c);
 	while (list(, $val) = each($c)) {
@@ -1104,7 +1104,7 @@ function calculer_champ($id_champ, $id_boucle, $nom_var)
 
 	if ($id_row) {
 		$fonctions = $champs[$id_champ]->fonctions;
-		
+
 		if ($offset_boucle) $code = "\$pile_boucles[\$id_instance-$offset_boucle]->row[$id_row]";
 		else $code = "\$row[$id_row]";
 
@@ -1127,7 +1127,7 @@ function calculer_champ($id_champ, $id_boucle, $nom_var)
 	//
 	// Les logos (rubriques, articles...)
 	//
-	
+
 	case 'LOGO_ARTICLE':
 	case 'LOGO_ARTICLE_NORMAL':
 	case 'LOGO_ARTICLE_RUBRIQUE':
@@ -1415,7 +1415,6 @@ function calculer_champ($id_champ, $id_boucle, $nom_var)
 	//
 	// Inserer directement un document dans le squelette
 	//
-	
 	case 'EMBED_DOCUMENT':
 		if ($fonctions) $fonctions = join($fonctions, "|");
 		$milieu = "
@@ -1429,7 +1428,6 @@ function calculer_champ($id_champ, $id_boucle, $nom_var)
 	//
 	// Formulaire de recherche sur le site
 	//
-
 	case 'FORMULAIRE_RECHERCHE':
 		if ($fonctions) {
 			list(, $lien) = each($fonctions);	// le premier est un url
@@ -1456,7 +1454,6 @@ function calculer_champ($id_champ, $id_boucle, $nom_var)
 	//
 	// Formulaire d'inscription comme redacteur
 	// (dans inc-formulaires.php3)
-
 	case 'FORMULAIRE_INSCRIPTION':
 		$milieu = '
 		$request_uri = $GLOBALS["REQUEST_URI"];
@@ -1469,7 +1466,7 @@ function calculer_champ($id_champ, $id_boucle, $nom_var)
 			$'.$nom_var.' = "";
 		}
 		';
-		
+
 		break;
 
 	//
@@ -1491,7 +1488,6 @@ function calculer_champ($id_champ, $id_boucle, $nom_var)
 	//
 	// Formulaire de signature d'une petition
 	//
-
 	case 'FORMULAIRE_SIGNATURE':
 
 		$milieu = '
@@ -1508,13 +1504,12 @@ function calculer_champ($id_champ, $id_boucle, $nom_var)
 			$'.$nom_var.' = "";
 		}
 		';
-		
+
 		break;
 
 	//
 	// Formulaire de referencement d'un site
 	//
-
 	case 'FORMULAIRE_SITE':
 
 		$milieu = '
@@ -1528,14 +1523,12 @@ function calculer_champ($id_champ, $id_boucle, $nom_var)
 			$'.$nom_var.' = "";
 		}
 		';
-		
-		break;
 
+		break;
 
 	//
 	// Champ testant la presence d'une petition
 	//
-
 	case 'PETITION':
 		$milieu = '
 		$query_petition = "SELECT id_article FROM spip_petitions WHERE id_article=$contexte[id_article]";
@@ -1548,7 +1541,6 @@ function calculer_champ($id_champ, $id_boucle, $nom_var)
 	//
 	// Formulaire de reponse a un forum
 	//
-
 	case 'FORMULAIRE_FORUM':
 		$milieu = '
 		switch ($pile_boucles[$id_instance]->type_requete) {
@@ -1582,7 +1574,6 @@ function calculer_champ($id_champ, $id_boucle, $nom_var)
 	//
 	// Parametres d'appel du formulaire de reponse a un forum
 	//
-
 	case 'PARAMETRES_FORUM':
 		$milieu = '
 		$request_uri = $GLOBALS["REQUEST_URI"];
@@ -1629,8 +1620,9 @@ function calculer_champ($id_champ, $id_boucle, $nom_var)
 		}
 		';
 		break;
-	
-	// debut et fin de surlignage auto des mots de la recherche
+
+	//
+	// Debut et fin de surlignage auto des mots de la recherche
 	//
 	case 'DEBUT_SURLIGNE':
 		if ($flag_ob AND $flag_preg_replace) {
@@ -1647,7 +1639,8 @@ function calculer_champ($id_champ, $id_boucle, $nom_var)
 		}
 		break;
 
-	// formulaires de login
+	//
+	// Formulaires de login
 	//
 	case 'LOGIN_PRIVE':
 		$milieu = '
@@ -1671,6 +1664,15 @@ function calculer_champ($id_champ, $id_boucle, $nom_var)
 			';
 		break;
 
+	//
+	// Boutons d'administration
+	//
+	case 'FORMULAIRE_ADMIN':
+		$milieu = '
+			$'.$nom_var.' = "<"."?php \$GLOBALS[\"flag_boutons_admin\"] = true; include_local(\"inc-admin.php3\"); afficher_boutons_admin(); ?".">";
+		';
+		break;
+
 	} // switch
 
 	if (!$code) $code = "\$$nom_var";
diff --git a/inc-public-global.php3 b/inc-public-global.php3
index 52ca946bd6cc6327856db013167f4878d0b01982..e5208f3fa7eb683f2862553ff8ce3d805a508c93 100644
--- a/inc-public-global.php3
+++ b/inc-public-global.php3
@@ -267,64 +267,11 @@ if ($use_cache && file_exists('CACHE/.purge')) {
 $cookie_admin = $HTTP_COOKIE_VARS['spip_admin'];
 $admin_ok = ($cookie_admin != '');
 
-//
-// Afficher un bouton admin
-//
-
-function bouton_admin($titre, $lien) {
-	$lapage=substr($lien, 0, strpos($lien,"?"));
-	$lesvars=substr($lien, strpos($lien,"?") + 1, strlen($lien));
-
-	echo "\n<FORM ACTION='$lapage' METHOD='get'>\n";
-	$lesvars=explode("&",$lesvars);
-
-	for($i=0;$i<count($lesvars);$i++){
-		$var_loc=explode("=",$lesvars[$i]);
-		if ($var_loc[0] != "submit")
-			echo "<INPUT TYPE='Hidden' NAME='$var_loc[0]' VALUE='$var_loc[1]'>\n";
-	}
-	echo "<INPUT TYPE='submit' NAME='submit' VALUE='$titre' CLASS='spip_bouton'>\n";
-	echo "</FORM>";
-}
-
-
-if ($admin_ok AND !$flag_preserver) {
-	echo '<div class="spip-admin">';
-
-	if ($id_article) {
-		bouton_admin("Modifier cet article ($id_article)", "./ecrire/articles.php3?id_article=$id_article");
-	}
-	else if ($id_breve) {
-		bouton_admin("Modifier cette br&egrave;ve ($id_breve)", "./ecrire/breves_voir.php3?id_breve=$id_breve");
-	}
-	else if ($id_rubrique) {
-		bouton_admin("Modifier cette rubrique ($id_rubrique)", "./ecrire/naviguer.php3?coll=$id_rubrique");
-	}
-	else if ($id_mot) {
-		bouton_admin("Modifier ce mot-cl&eacute; ($id_mot)", "./ecrire/mots_edit.php3?id_mot=$id_mot");
-	}
-	else if ($id_auteur) {
-		bouton_admin("Modifier cet auteur ($id_auteur)", "./ecrire/auteurs_edit.php3?id_auteur=$id_auteur");
-	}
-
-	$link = $GLOBALS['clean_link'];
-	$link->addVar('recalcul', 'oui');
-	$link->delVar('submit');
-	echo $link->getForm('GET');
-	if ($use_cache) $pop = " *";
-	else $pop = "";
-	echo "<input type='submit' class='spip_bouton' name='submit' value='Recalculer cette page$pop'>";
-	echo "</form>\n";
-
-	if (lire_meta("activer_statistiques") != "non" AND $id_article) {
-		include_local ("inc-stats.php3");
-		afficher_raccourci_stats($id_article);
-	}
-
-	echo "</div>";
+if ($admin_ok AND !$flag_preserver AND !$flag_boutons_admin) {
+	include_local("inc-admin.php3");
+	afficher_boutons_admin();
 }
 
-
 //
 // Mise a jour d'un (ou de zero) site syndique
 //
diff --git a/plan-dist.html b/plan-dist.html
index 74306e0f596f780a082a998981df77131546e804..ae8284c898d3b2ad1965610f1544858692f82978 100644
--- a/plan-dist.html
+++ b/plan-dist.html
@@ -121,6 +121,11 @@
 </div>
 
 
+<!-- Formulaire administrateur -->
+
+[(#FORMULAIRE_ADMIN)]
+
+
 </body>
 </html>
 
diff --git a/recherche-dist.html b/recherche-dist.html
index 22d1b851a6635c121b4167324b35aa30f1209fd0..b0dc7172cc2169e98b3a713ceed455665eba7a1e 100644
--- a/recherche-dist.html
+++ b/recherche-dist.html
@@ -163,6 +163,11 @@
 </div>
 
 
+<!-- Formulaire administrateur -->
+
+[(#FORMULAIRE_ADMIN)]
+
+
 </body>
 </html>
 
diff --git a/resume-dist.html b/resume-dist.html
index 5cc0c16f6cc35aae2cdc50edadfa9af913b39809..c6301da483fc619c1d4ef5b7b394804ad195dd76 100644
--- a/resume-dist.html
+++ b/resume-dist.html
@@ -139,6 +139,11 @@
 </div>
 
 
+<!-- Formulaire administrateur -->
+
+[(#FORMULAIRE_ADMIN)]
+
+
 </body>
 </html>
 
diff --git a/rubrique-dist.html b/rubrique-dist.html
index e6299a99afa30d9460b6eae5a530667626e7fd61..578945fd2fb972451ba515bde221df8dbc0c8d0e 100644
--- a/rubrique-dist.html
+++ b/rubrique-dist.html
@@ -193,6 +193,11 @@
 </div>
 
 
+<!-- Formulaire administrateur -->
+
+[(#FORMULAIRE_ADMIN)]
+
+
 </body>
 </html>
 
diff --git a/sommaire-dist.html b/sommaire-dist.html
index 5f8ee92b562fea2c1bb779ea76d0e862da4bf5e9..20fb58268bf203ffa33159c94b03e0cdb1108c14 100644
--- a/sommaire-dist.html
+++ b/sommaire-dist.html
@@ -167,6 +167,12 @@
 </div>
 
 
+<!-- Formulaire administrateur -->
+
+[(#FORMULAIRE_ADMIN)]
+
+
+
 </body>
 </html>