diff --git a/.gitattributes b/.gitattributes
index 64c698e5cb93600e2ec31b3b39bbc812bdede768..aee02ac88f3442b4ce6754f2513c1ed82bde4189 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -331,6 +331,7 @@ ecrire/inc_agenda.php -text
 ecrire/inc_ajax.php -text
 ecrire/inc_auteur_voir.php -text
 ecrire/inc_barre.php -text
+ecrire/inc_boutons.php -text
 ecrire/inc_cookie.php -text
 ecrire/inc_distant.php -text
 ecrire/inc_headers.php -text
diff --git a/ecrire/inc_boutons.php b/ecrire/inc_boutons.php
new file mode 100644
index 0000000000000000000000000000000000000000..61e674efaffb6411756632e8ad703c202469cf57
--- /dev/null
+++ b/ecrire/inc_boutons.php
@@ -0,0 +1,301 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2006                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+
+/**
+ * une classe definissant un bouton dans la barre du haut de l'interface
+ * privee ou dans un de ses sous menus
+ */
+class Bouton {
+  var $icone;         /* l'icone a mettre dans le bouton */
+  var $libelle;       /* le nom de l'entree d'i18n associe */
+  var $url= null;     /* l'url de la page (null => ?exec=nom) */
+  var $urlArg= null;  /* arguments supplementaires de l'url */
+  var $url2= null;    /* url jscript */
+  var $target= null;  /* pour ouvrir dans une fenetre a part */
+  var $sousmenu= null;/* sous barre de boutons / onglets */
+
+  function Bouton($icone, $libelle, $url=null, $urlArg=null,
+				  $url2=null, $target=null) {
+	$this->icone  = $icone;
+	$this->libelle= $libelle;
+	$this->url    = $url;
+	$this->urlArg = $urlArg;
+	$this->url2   = $url2;
+	$this->target = $target;
+  }
+}
+
+/**
+ * definir la liste des boutons du haut et de ses sous-menus
+ * On defini les boutons a metrtre selon les droits de l'utilisateur
+ * puis on balance le tout au pipeline "ajouter_boutons" pour que des plugins
+ * puissent y mettre leur grain de sel
+ */
+function definir_barre_boutons() {
+	global $boutons_admin;
+
+	global $REQUEST_URI, $HTTP_HOST, $adresse_site;
+	$adresse_site = $GLOBALS['meta']["adresse_site"];
+	if (!$adresse_site) {
+			$adresse_site = "http://$HTTP_HOST".substr($REQUEST_URI, 0, strpos($REQUEST_URI, "/" . _DIR_RESTREINT_ABS));
+			ecrire_meta("adresse_site", $adresse_site);
+			ecrire_metas();
+	}
+	if (strlen($adresse_site)<10) $adresse_site = _DIR_RACINE;
+
+	global $spip_lang, $spip_lang_rtl, $spip_lang_left, $spip_lang_right;
+
+	$boutons_admin=array(
+		'accueil' => new Bouton('asuivre-48.png', 'icone_a_suivre'),
+		'naviguer' => new Bouton("documents-48$spip_lang_rtl.png",
+								 'icone_edition_site'),
+		'forum_admin' => new Bouton('messagerie-48.png', 'titre_forum'),
+		'auteurs' => new Bouton('redacteurs-48.png', 'icone_auteurs')
+	);
+
+	if ($GLOBALS['connect_statut'] == "0minirezo"
+		AND $GLOBALS['meta']["activer_statistiques"] != 'non') {
+		$boutons_admin['statistiques_visites']=
+		  new Bouton('statistiques-48.png', 'icone_statistiques_visites');
+	}
+	if ($GLOBALS['connect_statut'] == '0minirezo'
+		AND $GLOBALS['connect_toutes_rubriques']) {
+		$boutons_admin['configuration']=
+		  new Bouton('administration-48.png', 'icone_configuration_site');
+	}
+	$boutons_admin['espacement']=null;
+	$urlAide= generer_url_ecrire('aide_index')."&amp;var_lang=$spip_lang";
+	$boutons_admin['aide_index']=
+		  new Bouton('aide-48'.$spip_lang_rtl.'.png', 'icone_aide_ligne',
+					 $urlAide, null, "javascript:window.open('$urlAide', 'aide_spip', 'scrollbars=yes,resizable=yes,width=740,height=580');", 'aide_spip');
+	$boutons_admin['visiter']=
+	  new Bouton("visiter-48$spip_lang_rtl.png", 'icone_visiter_site',
+				 $adresse_site);
+
+	// les sous menu des boutons, que si on est admin
+	if ($GLOBALS['connect_statut'] == '0minirezo'
+		AND $GLOBALS['connect_toutes_rubriques']) {
+
+	// sous menu edition
+
+	$sousmenu=array();
+
+	$nombre_articles = spip_num_rows(spip_query("SELECT art.id_article FROM spip_articles AS art, spip_auteurs_articles AS lien WHERE lien.id_auteur = '".$GLOBALS['connect_id_auteur']."' AND art.id_article = lien.id_article LIMIT 1"));
+	if ($nombre_articles > 0) {
+		$sousmenu['articles_page']=
+		  new Bouton('article-24.gif', 'icone_tous_articles');
+	}
+
+	if ($GLOBALS['meta']["activer_breves"] != "non") {
+		$sousmenu['breves']=
+		  new Bouton('breve-24.gif', 'icone_breves');
+	}
+
+	if ($GLOBALS['options'] == "avancees"){
+		$articles_mots = $GLOBALS['meta']['articles_mots'];
+		if ($articles_mots != "non") {
+			$sousmenu['mots_tous']=
+			  new Bouton('mot-cle-24.gif', 'icone_mots_cles');
+		}
+
+		$activer_sites = $GLOBALS['meta']['activer_sites'];
+		if ($activer_sites<>'non')
+			$sousmenu['sites_tous']=
+			  new Bouton('site-24.gif', 'icone_sites_references');
+
+		if (@spip_num_rows(spip_query("SELECT * FROM spip_documents_rubriques LIMIT 1")) > 0) {
+			$sousmenu['documents_liste']=
+			  new Bouton('doc-24.gif', 'icone_doc_rubrique');
+		}
+	}
+	$boutons_admin['naviguer']->sousmenu= $sousmenu;
+
+	// sous menu forum
+
+	$sousmenu=array();
+
+	if ($GLOBALS['meta']['forum_prive_admin'] == 'oui')
+		$sousmenu['forum_admin']=
+		  new Bouton('forum-admin-24.gif', 'icone_forum_administrateur');
+
+	$sousmenu['controle_forum']=
+		  new Bouton("suivi-forum-24.gif", "icone_suivi_forums");
+	$sousmenu['controle_petition']=
+		  new Bouton("suivi-petition-24.gif", "icone_suivi_pettions");
+	
+	$boutons_admin['forum_admin']->sousmenu= $sousmenu;
+
+	// sous menu auteurs
+
+	$boutons_admin['auteurs']->sousmenu= array(
+		'auteurs_edit' => 
+		  new Bouton("fiche-perso-24.gif", "icone_informations_personnelles",
+			null, 'id_auteur='.$GLOBALS['connect_id_auteur']),
+		'auteur_infos' => 
+		  new Bouton("auteur-24.gif", "icone_creer_nouvel_auteur",
+					 null, 'new=oui')
+	);
+
+	// sous menu statistiques
+
+	$sousmenu=array(
+		'espacement' => null,
+		'statistiques_repartition' =>
+			new Bouton("rubrique-24.gif", "icone_repartition_visites")
+	);
+
+	if ($GLOBALS['meta']['multi_articles'] == 'oui'
+		OR $GLOBALS['meta']['multi_rubriques'] == 'oui')
+		$sousmenu['statistiques_lang']=
+			new Bouton("langues-24.gif", "onglet_repartition_lang");
+
+	$sousmenu['statistiques_referers']=
+	  new Bouton("referers-24.gif", "titre_liens_entrants");
+
+	$boutons_admin['statistiques_visites']->sousmenu= $sousmenu;
+	
+	// sous menu configuration
+
+	$sousmenu=array(
+		'config_lang' => 
+			new Bouton("langues-24.gif", "icone_gestion_langues"),
+		'espacement' => null
+	);
+
+	if ($GLOBALS['options'] == "avancees") {
+		$sousmenu['admin_tech']= 
+			new Bouton("base-24.gif", "icone_maintenance_site");
+		$sousmenu['admin_vider']=
+			new Bouton("cache-24.gif", "onglet_vider_cache");
+	} else {
+		$sousmenu['admin_tech']=
+			new Bouton("base-24.gif", "icone_sauver_site");
+	}
+
+	$boutons_admin['configuration']->sousmenu= $sousmenu;
+
+	} // fin si admin
+
+	$boutons_admin = pipeline('ajouter_boutons', $boutons_admin);
+}
+
+/**
+ * definir la liste des onglets dans une page de l'interface privee
+ * on passe la main au pipeline "ajouter_onglets".
+ */
+function definir_barre_onglets($rubrique) {
+	global $id_auteur, $connect_id_auteur, $connect_statut, $statut_auteur, $options;
+
+	$onglets=array();
+
+	switch($rubrique) {
+	case 'statistiques_repartition':
+	case 'repartition':
+		if ($GLOBALS['meta']['multi_articles'] == 'oui' OR $GLOBALS['meta']['multi_rubriques'] == 'oui') {
+			$onglets['rubriques']=
+			  new Bouton('rubrique-24.gif', 'onglet_repartition_rubrique');
+			$onglets['langues']=
+			  new Bouton('langues-24.gif', 'onglet_repartition_lang');
+		}
+	break;
+
+	case 'rep_depuis':
+		$onglets['statistiques_lang']=
+		  new Bouton(null, 'icone_repartition_actuelle');
+		$onglets['debut']=
+		  new Bouton(null, 'onglet_repartition_debut',
+			generer_url_ecrire("statistiques_lang","critere=debut"));
+	break;
+
+	case 'stat_depuis':
+		$onglets['popularite']=
+		  new Bouton(null, 'icone_repartition_actuelle',
+			generer_url_ecrire("statistiques_repartition",""));
+		$onglets['debut']=
+		  new Bouton(null, 'onglet_repartition_debut',
+			generer_url_ecrire("statistiques_repartition","critere=debut"));
+	break;
+
+	case 'stat_referers':
+		$onglets['jour']=
+		  new Bouton(null, 'date_aujourdhui',
+			generer_url_ecrire("statistiques_referers",""));
+		$onglets['veille']=
+		  new Bouton(null, 'date_hier',
+			generer_url_ecrire("statistiques_referers","jour=veille"));
+	break;
+
+	case 'administration':
+		$onglets['sauver']=
+		  new Bouton('base-24.gif', 'onglet_save_restaur_base',
+			generer_url_ecrire("admin_tech",""));
+		$onglets['effacer']=
+		  new Bouton('supprimer.gif', 'onglet_affacer_base',
+			generer_url_ecrire("admin_effacer",""));
+	break;
+
+	//??????
+	case 'auteur':
+		$onglets['auteur']=
+		  new Bouton('auteur-24.gif', 'onglet_auteur',
+			generer_url_ecrire("auteurs_edit","id_auteur=$id_auteur"));
+		$onglets['infos']=
+		  new Bouton('fiche-perso-24.gif', 'onglet_informations_personnelles',
+			generer_url_ecrire("auteurs_infos","id_auteur=$id_auteur"));
+	break;
+
+	case 'configuration':
+		$onglets['contenu']=
+		  new Bouton('racine-site-24.gif', 'onglet_contenu_site',
+			generer_url_ecrire("configuration"));
+		$onglets['interactivite']=
+		  new Bouton('forum-interne-24.gif', 'onglet_interactivite',
+			generer_url_ecrire("config_contenu"));
+		$onglets['fonctions']=
+		  new Bouton('image-24.gif', 'onglet_fonctions_avances',
+			generer_url_ecrire("config_fonctions"));
+	break;
+
+	case 'config_lang':
+		$onglets['langues']=
+		  new Bouton('langues-24.gif', 'info_multilinguisme',
+			generer_url_ecrire("config_lang"));
+		$onglets['multi']=
+		  new Bouton('traductions-24.gif', 'info_langue_principale',
+			generer_url_ecrire("config_multilang"));
+		if ($GLOBALS['meta']['multi_articles'] == "oui" OR $GLOBALS['meta']['multi_rubriques'] == "oui") {
+			$onglets['fichiers']=
+			  new Bouton('traductions-24.gif', 'module_fichiers_langues',
+				generer_url_ecrire("lang_raccourcis"));
+		}
+	break;
+
+	// inutilise
+	case 'suivi_forum':
+	break;
+
+	}
+
+	$onglets = pipeline('ajouter_onglets', $onglets, $rubrique);
+
+	return $onglets;
+}
+
+function definir_barre_gadgets() {
+	global $barre_gadgets;
+	$barre_gadgets= array(
+						  // ?????????
+	);
+}
+
+?>
diff --git a/ecrire/inc_presentation.php b/ecrire/inc_presentation.php
index d2104a0a067536d56e5b0ced4b09768cd1569f42..9be5f0300c2fba068e6be78be797a03060ab57c7 100644
--- a/ecrire/inc_presentation.php
+++ b/ecrire/inc_presentation.php
@@ -14,6 +14,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 
 include_ecrire ("inc_layer");
 include_ecrire("inc_agenda");
+include_ecrire("inc_boutons");
 
 // Choix dynamique de la couleur
 
@@ -1921,84 +1922,20 @@ function onglet($texte, $lien, $onglet_ref, $onglet, $icone=""){
 	echo "</td>";
 }
 
-
-function barre_onglets($rubrique, $onglet){
-	global $id_auteur, $connect_id_auteur, $connect_statut, $statut_auteur, $options;
+function barre_onglets($rubrique, $ongletCourant){
+	$onglets= definir_barre_onglets($rubrique);
+	if(count($onglets)==0) return;
 
 	debut_onglet();
 
-	if ($rubrique == "statistiques") {
-	//	onglet(_T('onglet_evolution_visite_mod'), generer_url_ecrire("statistiques_visites",""), "evolution", $onglet, "statistiques-24.gif");
-	//	onglet(_T('titre_liens_entrants'), generer_url_ecrire("statistiques_referers",""), "referers", $onglet, "referers-24.gif");
-	}
-	if ($rubrique == "repartition") {
-		if ($GLOBALS['meta']['multi_articles'] == 'oui' OR $GLOBALS['meta']['multi_rubriques'] == 'oui') {
-		  onglet(_T('onglet_repartition_rubrique'), generer_url_ecrire("statistiques_repartition"), "rubriques", $onglet, "rubrique-24.gif");
-			onglet(_T('onglet_repartition_lang'), generer_url_ecrire("statistiques_lang",""), "langues", $onglet, "langues-24.gif");
-		}
-	}
-
-	if ($rubrique == "rep_depuis") {
-		onglet(_T('icone_repartition_actuelle'), generer_url_ecrire("statistiques_lang",""), "popularite", $onglet);
-		onglet(_T('onglet_repartition_debut'), generer_url_ecrire("statistiques_lang","critere=debut"), "debut", $onglet);
-
-	}
-
-	if ($rubrique == "stat_depuis") {
-	  onglet(_T('icone_repartition_actuelle'), generer_url_ecrire("statistiques_repartition"), "popularite", $onglet);
-	  onglet(_T('onglet_repartition_debut'), generer_url_ecrire("statistiques_repartition", "critere=debut"), "debut", $onglet);
-
-	}
-
-	if ($rubrique == "stat_referers") {
-		onglet(ucfirst(_T('date_aujourdhui')), generer_url_ecrire("statistiques_referers",""), "jour", $onglet);
-		onglet(ucfirst(_T('date_hier')), generer_url_ecrire("statistiques_referers","jour=veille"), "veille", $onglet);
-	}
-
-	if ($rubrique == "administration"){
-		onglet(_T('onglet_save_restaur_base'), generer_url_ecrire("admin_tech"), "sauver", $onglet, "base-24.gif");
-		onglet(_T('onglet_affacer_base'), generer_url_ecrire("admin_effacer"), "effacer", $onglet, "supprimer.gif");
-	}
-
-	if ($rubrique == "auteur"){
-		onglet(_T('onglet_auteur'), generer_url_ecrire("auteurs_edit","id_auteur=$id_auteur"), "auteur", $onglet, "auteur-24.gif");
-		onglet(_T('onglet_informations_personnelles'), generer_url_ecrire("auteur_infos","id_auteur=$id_auteur"), "infos", $onglet, "fiche-perso-24.gif");
-	}
-
-	if ($rubrique == "configuration"){
-		onglet(_T('onglet_contenu_site'), generer_url_ecrire("configuration"), "contenu", $onglet, "racine-site-24.gif");
-		onglet(_T('onglet_interactivite'), generer_url_ecrire("config_contenu"), "interactivite", $onglet, "forum-interne-24.gif");
-		onglet(_T('onglet_fonctions_avances'), generer_url_ecrire("config_fonctions"), "fonctions", $onglet, "image-24.gif");
-	}
-
-	if ($rubrique == "config_lang") {
-		onglet(_T('info_langue_principale'), generer_url_ecrire("config_lang"), "langues", $onglet, "langues-24.gif");
-		onglet(_T('info_multilinguisme'), generer_url_ecrire("config_multilang"), "multi", $onglet, "traductions-24.gif");
-		if ($GLOBALS['meta']['multi_articles'] == "oui" OR $GLOBALS['meta']['multi_rubriques'] == "oui") {
-			onglet(_T('module_fichiers_langues'), generer_url_ecrire("lang_raccourcis"), "fichiers", $onglet, "traductions-24.gif");
-		}
-	}
-
-	if ($rubrique == "suivi_forum"){
-		onglet(_T('onglet_messages_publics'), generer_url_ecrire("controle_forum","page=public"), "public", $onglet, "forum-public-24.gif");
-		onglet(_T('onglet_messages_internes'), generer_url_ecrire("controle_forum","page=interne"), "interne", $onglet, "forum-interne-24.gif");
-
-		$query_forum = "SELECT * FROM spip_forum WHERE statut='publie' AND texte='' LIMIT 1";
-		$result_forum = spip_query($query_forum);
-		if ($row = spip_fetch_array($result_forum))
-			onglet(_T('onglet_messages_vide'), generer_url_ecrire("controle_forum","page=vide"), "vide", $onglet);
-
-		$query_forum = "SELECT * FROM spip_forum WHERE statut='prop' LIMIT 1";
-		$result_forum = spip_query($query_forum);
-		if ($row = spip_fetch_array($result_forum))
-			onglet(_T('texte_statut_attente_validation'), generer_url_ecrire("controle_forum","page=prop"), "prop", $onglet);
-
+	foreach($onglets as $exec => $onglet) {
+		$url= $onglet->url ? $onglet->url : generer_url_ecrire($exec);
+		onglet(_T($onglet->libelle), $url,
+ 			$exec, $ongletCourant, $onglet->icone);
 	}
-
 	fin_onglet();
 }
 
-
 function largeur_icone_bandeau_principal($texte) {
 	global $spip_display, $spip_ecran ;
 	global $connect_statut, $connect_toutes_rubriques;
@@ -2258,7 +2195,9 @@ document.write(\"" . addslashes(strtr($html, "\n\r", "  "))."\")");
 function debut_page($titre = "", $rubrique = "asuivre", $sous_rubrique = "asuivre", $onLoad = "", $css="") {
 
 	init_entete($titre, $rubrique, $onLoad, $css);
+	definir_barre_boutons();
 	init_body($rubrique, $sous_rubrique);
+	debut_corps_page();
 }
  
 function init_entete($titre, $rubrique, $onLoad="", $css="") {
@@ -2285,11 +2224,8 @@ function init_entete($titre, $rubrique, $onLoad="", $css="") {
 }
 
 // fonction envoyant la double serie d'icones de redac
-
 function init_body($rubrique = "asuivre", $sous_rubrique = "asuivre") {
-	global $couleur_foncee;
-	global $couleur_claire;
-	global $REQUEST_URI, $HTTP_HOST;
+	global $couleur_foncee, $couleur_claire, $adresse_site;
 	global $connect_id_auteur;
 	global $connect_statut;
 	global $connect_activer_messagerie;
@@ -2299,16 +2235,8 @@ function init_body($rubrique = "asuivre", $sous_rubrique = "asuivre") {
 	global $spip_lang, $spip_lang_rtl, $spip_lang_left, $spip_lang_right;
 	$activer_messagerie = "oui";
 
-	$adresse_site = $GLOBALS['meta']["adresse_site"];
-	if (!$adresse_site) {
-			$adresse_site = "http://$HTTP_HOST".substr($REQUEST_URI, 0, strpos($REQUEST_URI, "/" . _DIR_RESTREINT_ABS));
-			ecrire_meta("adresse_site", $adresse_site);
-			ecrire_metas();
-	}
-
-	if (strlen($adresse_site)<10) $adresse_site = _DIR_RACINE;
-
-	if ($spip_ecran == "large") $largeur = 974; else $largeur = 750;
+	if ($spip_ecran == "large") $largeur = 974;
+	else $largeur = 750;
 
 	$link = new Link;
 	echo "\n<map name='map_layout'>";
@@ -2319,17 +2247,18 @@ function init_body($rubrique = "asuivre", $sous_rubrique = "asuivre") {
 
 
 
-if ($spip_display == "4") {
-	// Icones principales
-	echo "<ul>";
-	echo "<li><a href='./'>"._T('icone_a_suivre')."</a>";
-	echo "<li><a href='" . generer_url_ecrire("naviguer") . "'>"._T('icone_edition_site')."</a>";
-	echo "<li><a href='" . generer_url_ecrire("forum_admin"). "'>"._T('titre_forum')."</a>";
-	echo "<li><a href='" . generer_url_ecrire("auteurs") . "'>"._T('icone_auteurs')."</a>";
-	echo "<li><a href=\"$adresse_site/\">"._T('icone_visiter_site')."</a>";
-	echo "</ul>";
-}
-else {
+	if ($spip_display == "4") {
+		// Icones principales
+		echo "<ul>";
+		echo "<li><a href='./'>"._T('icone_a_suivre')."</a>";
+		echo "<li><a href='" . generer_url_ecrire("naviguer") . "'>"._T('icone_edition_site')."</a>";
+		echo "<li><a href='" . generer_url_ecrire("forum_admin"). "'>"._T('titre_forum')."</a>";
+		echo "<li><a href='" . generer_url_ecrire("auteurs") . "'>"._T('icone_auteurs')."</a>";
+		echo "<li><a href=\"$adresse_site/\">"._T('icone_visiter_site')."</a>";
+		echo "</ul>";
+
+		return;
+	}
 
 	// iframe permettant de passer les changements de statut rapides
 	echo "<iframe id='iframe_action' name='iframe_action' width='1' height='1' style='position: absolute; visibility: hidden;'></iframe>";
@@ -2344,183 +2273,52 @@ else {
 	echo "<div class='bandeau-icones'>\n";
 	echo "<table width='$largeur' cellpadding='0' cellspacing='0' border='0' align='center'><tr>\n";
 
-	icone_bandeau_principal (_T('icone_a_suivre'), './', "asuivre-48.png", "asuivre", $rubrique, "", "asuivre", $sous_rubrique);
-	icone_bandeau_principal (_T('icone_edition_site'), generer_url_ecrire("naviguer"), "documents-48$spip_lang_rtl.png", "documents", $rubrique, "", "rubriques", $sous_rubrique);
-	icone_bandeau_principal (_T('titre_forum'), generer_url_ecrire("forum_admin"), "messagerie-48.png", "redacteurs", $rubrique, "", "forum-interne", $sous_rubrique);
-	icone_bandeau_principal (_T('icone_auteurs'), generer_url_ecrire("auteurs"), "redacteurs-48.png", "auteurs", $rubrique, "", "redacteurs", $sous_rubrique);
-	if ($connect_statut == "0minirezo"  AND $GLOBALS['meta']["activer_statistiques"] != 'non') {
-		//bandeau_barre_verticale();
-		icone_bandeau_principal (_T('icone_statistiques_visites'), generer_url_ecrire("statistiques_visites"), "statistiques-48.png", "suivi", $rubrique, "", "statistiques", $sous_rubrique);
-	}
-	if ($connect_statut == '0minirezo' and $connect_toutes_rubriques) {
-		icone_bandeau_principal (_T('icone_configuration_site'), generer_url_ecrire("configuration"), "administration-48.png", "administration", $rubrique, "", "configuration", $sous_rubrique);
+	foreach($GLOBALS['boutons_admin'] as $page => $detail) {
+		if($page=='espacement') {
+			echo "<td> &nbsp; </td>";
+		} else {
+			icone_bandeau_principal(
+				_T($detail->libelle),
+				$detail->url?$detail->url:generer_url_ecrire($page),
+				$detail->icone, $page, $rubrique, $detail->url2,
+				$page, $sous_rubrique);
+		}
 	}
-
-	echo "<td> &nbsp; </td>";
-
-	icone_bandeau_principal (_T('icone_aide_ligne'), "javascript:window.open('" . generer_url_ecrire("aide_index","var_lang=$spip_lang") .
-				 "', 'aide_spip', 'scrollbars=yes,resizable=yes,width=740,height=580');",
-		"aide-48".aide_lang_dir($spip_lang,$spip_lang_rtl).".png",
-		"vide", "", generer_url_ecrire("aide_index","var_lang=$spip_lang"),
-		"aide-en-ligne", $sous_rubrique);
-
-	icone_bandeau_principal (_T('icone_visiter_site'), $adresse_site, "visiter-48$spip_lang_rtl.png", "visiter","", "visiter", $sous_rubrique);
-
 	echo "</tr></table>\n";
 
-
-
-
 	echo "</div>\n";
-	
+
 	echo "<table width='$largeur' cellpadding='0' cellspacing='0' align='center'><tr><td>";
 	echo "<div style='text-align: $spip_lang_left; width: ".$largeur."px; position: relative; z-index: 2000;'>";
-	
+
 	// Icones secondaires
+
+	$decal=0;
 	$activer_messagerie = "oui";
 	$connect_activer_messagerie = "oui";
-	
-	if ($rubrique == "asuivre"){
-		$class = "visible_au_chargement";
-	} else {
-		$class = "invisible_au_chargement";
-	}
-	$decal = largeur_icone_bandeau_principal(_T('icone_a_suivre'));
-
-
-	if ($rubrique == "documents"){
-		$class = "visible_au_chargement";
-	} else {
-		$class = "invisible_au_chargement";
-	}
-	if ($connect_statut == "0minirezo" AND $connect_toutes_rubriques) {
-		echo "<div class='$class' id='bandeaudocuments' style='position: absolute; $spip_lang_left: ".$decal."px;'><div class='bandeau_sec'><table class='gauche'><tr>\n";
-		//icone_bandeau_secondaire (_T('icone_rubriques'), generer_url_ecrire("naviguer",""), "rubrique-24.gif", "rubriques", $sous_rubrique);
-
-		$nombre_articles = spip_num_rows(spip_query("SELECT art.id_article FROM spip_articles AS art, spip_auteurs_articles AS lien WHERE lien.id_auteur = '$connect_id_auteur' AND art.id_article = lien.id_article LIMIT 1"));
-		if ($nombre_articles > 0) {
-			icone_bandeau_secondaire (_T('icone_tous_articles'), generer_url_ecrire("articles_page"), "article-24.gif", "articles", $sous_rubrique);
-		}
-
-		/*if ($options == "avancees") {
-			if ($connect_statut == "0minirezo") $req_where = " AND articles.statut IN ('prepa','prop','publie')"; 
-			else $req_where = " AND articles.statut IN ('prop','publie')"; 
-			$nombre_versions = spip_num_rows(spip_query("
-				SELECT versions.*, articles.statut, articles.titre
-				FROM spip_versions AS versions, spip_articles AS articles 
-				WHERE versions.id_article = articles.id_article AND versions.id_version > 1$req_where LIMIT 1"));
-			if ($nombre_versions > 0 OR 1==1) {
-				icone_bandeau_secondaire (_T('icone_suivi_revisions'), generer_url_ecrire("suivi_revisions",""), "historique-24.gif", "revisions", $sous_rubrique);
-			}
-		}*/
-
-		$activer_breves=$GLOBALS['meta']["activer_breves"];
-		if ($activer_breves != "non"){
-			icone_bandeau_secondaire (_T('icone_breves'), generer_url_ecrire("breves"), "breve-24.gif", "breves", $sous_rubrique);
-		}
-
-		if ($options == "avancees"){
-			$articles_mots = $GLOBALS['meta']['articles_mots'];
-			if ($articles_mots != "non") {
-				icone_bandeau_secondaire (_T('icone_mots_cles'), generer_url_ecrire("mots_tous"), "mot-cle-24.gif", "mots", $sous_rubrique);
-			}
-
-			$activer_sites = $GLOBALS['meta']['activer_sites'];
-			if ($activer_sites<>'non')
-				icone_bandeau_secondaire (_T('icone_sites_references'), generer_url_ecrire("sites_tous"), "site-24.gif", "sites", $sous_rubrique);
-
-			if (@spip_num_rows(spip_query("SELECT * FROM spip_documents_rubriques LIMIT 1")) > 0) {
-				icone_bandeau_secondaire (_T('icone_doc_rubrique'), generer_url_ecrire("documents_liste"), "doc-24.gif", "documents", $sous_rubrique);
-			}
-		}
-		echo "</tr></table></div></div>";
-	}
-
-	$decal = $decal + largeur_icone_bandeau_principal(_T('icone_edition_site'));
 
-
-	
-	
-	if ($connect_statut == "0minirezo" AND $connect_toutes_rubriques) {
-		if ($rubrique == "redacteurs") {
-			$class = "visible_au_chargement";
-		} else {
-			$class = "invisible_au_chargement";
-		}
-
-			echo "<div class='$class' id='bandeauredacteurs' style='position: absolute; $spip_lang_left: ".$decal."px;'><div class='bandeau_sec'><table class='gauche'><tr>\n";
-				if ($GLOBALS['meta']['forum_prive_admin'] == 'oui') icone_bandeau_secondaire (_T('icone_forum_administrateur'), generer_url_ecrire("forum_admin","admin=admin"), "forum-admin-24.gif", "privadm", $sous_rubrique);
-
-				icone_bandeau_secondaire (_T('icone_suivi_forums'), generer_url_ecrire("controle_forum"), "suivi-forum-24.gif", "forum-controle", $sous_rubrique);
-				icone_bandeau_secondaire (_T('icone_suivi_pettions'), generer_url_ecrire("controle_petition"), "suivi-petition-24.gif", "suivi-petition", $sous_rubrique);
-
-			echo "</tr></table></div></div>";
-	
-	}
-	
-	$decal = $decal + largeur_icone_bandeau_principal(_T('icone_discussions'));
-	
-	if ($connect_statut == "0minirezo" AND $connect_toutes_rubriques) {
-		if ($rubrique == "auteurs") {
+	foreach($GLOBALS['boutons_admin'] as $page => $detail) {
+		if ($rubrique == $page) {
 			$class = "visible_au_chargement";
 		} else {
 			$class = "invisible_au_chargement";
 		}
-		echo "<div class='$class' id='bandeauauteurs' style='position: absolute; $spip_lang_left: ".$decal."px;'><div class='bandeau_sec'><table class='gauche'><tr>\n";
-		icone_bandeau_secondaire (_T('icone_informations_personnelles'), generer_url_ecrire("auteurs_edit","id_auteur=$connect_id_auteur"), "fiche-perso-24.gif", "perso", $sous_rubrique);
-		icone_bandeau_secondaire (_T('icone_creer_nouvel_auteur'), generer_url_ecrire("auteur_infos","new=oui"), "auteur-24.gif", "xxx", $sous_rubrique);
-	
-		echo "</tr></table></div></div>";
-	}	
 
-	
-	
-	$decal = $decal + largeur_icone_bandeau_principal(_T('icone_auteurs'));
-
-	// decalage pour barre verticale
-	// $decal = $decal + 11;
-
-	if ($connect_statut == "0minirezo" AND $connect_toutes_rubriques AND $GLOBALS['meta']["activer_statistiques"] != 'non') {
-		if ($rubrique == "suivi") {
-			$class = "visible_au_chargement";
-		} else {
-			$class = "invisible_au_chargement";
-		}
-		echo "<div class='$class' id='bandeausuivi' style='position: absolute; $spip_lang_left: ".$decal."px;'><div class='bandeau_sec'><table class='gauche'><tr>\n";
-		if ($connect_toutes_rubriques) bandeau_barre_verticale();
-
-		icone_bandeau_secondaire (_T('icone_repartition_visites'), generer_url_ecrire("statistiques_repartition"), "rubrique-24.gif", "repartition", $sous_rubrique);
-		if ($GLOBALS['meta']['multi_articles'] == 'oui' OR $GLOBALS['meta']['multi_rubriques'] == 'oui')
-			icone_bandeau_secondaire (_T('onglet_repartition_lang'), generer_url_ecrire("statistiques_lang"), "langues-24.gif", "repartition-langues", $sous_rubrique);
-		icone_bandeau_secondaire (_T('titre_liens_entrants'), generer_url_ecrire("statistiques_referers"), "referers-24.gif", "referers", $sous_rubrique);
-
-		echo "</tr></table></div></div>";
-
-		$decal = $decal + largeur_icone_bandeau_principal(_T('icone_suivi_actualite'));
-	
-	}
-
-
-	if ($connect_statut == '0minirezo' and $connect_toutes_rubriques) {
-		if ($rubrique == "administration") {
-			$class = "visible_au_chargement";
-		} else {
-			$class = "invisible_au_chargement";
-		}
-			echo "<div class='$class' id='bandeauadministration' style='position: absolute; $spip_lang_left: ".$decal."px;'><div class='bandeau_sec'><table class='gauche'><tr>\n";
-			icone_bandeau_secondaire (_T('icone_gestion_langues'), generer_url_ecrire("config_lang"), "langues-24.gif", "langues", $sous_rubrique);
-	
-			bandeau_barre_verticale();
-			if ($options == "avancees") {
-				icone_bandeau_secondaire (_T('icone_maintenance_site'), generer_url_ecrire("admin_tech"), "base-24.gif", "base", $sous_rubrique);
-				icone_bandeau_secondaire (_T('onglet_vider_cache'), generer_url_ecrire("admin_vider"), "cache-24.gif", "cache", $sous_rubrique);
-			}
-			else {
-				icone_bandeau_secondaire (_T('icone_sauver_site'), generer_url_ecrire("admin_tech"), "base-24.gif", "base", $sous_rubrique);
+		$sousmenu= $detail->sousmenu;
+		if($sousmenu) {
+			echo "<div class='$class' id='bandeau$page' style='position: absolute; $spip_lang_left: ".$decal."px;'><div class='bandeau_sec'><table class='gauche'><tr>\n";
+		
+			foreach($sousmenu as $souspage => $sousdetail) {
+				if($souspage=='espacement') {
+					echo "<td class='separateur'></td>\n";
+				} else {
+					icone_bandeau_secondaire (_T($sousdetail->libelle), generer_url_ecrire($sousdetail->url?$sousdetail->url:$souspage, $sousdetail->urlArg), $sousdetail->icone, $souspage, $sous_rubrique);
+				}
 			}
 			echo "</tr></table></div></div>";
-
-
+		}
+		
+		$decal += largeur_icone_bandeau_principal(_T($detail->libelle));
 	}
 
 	// Refermer tout de suite le bandeau deroule par defaut
@@ -2954,6 +2752,10 @@ if (true /*$gadgets*/) {
 	
 }
 
+function debut_corps_page() {
+	global $couleur_foncee;
+	global $connect_id_auteur;
+  
 	// Ouverture de la partie "principale" de la page
 	// Petite verif pour ne pas fermer le formulaire de recherche pendant qu'on l'edite	
 	echo "<center onMouseOver=\"if (findObj('bandeaurecherche') && findObj('bandeaurecherche').style.visibility == 'visible') { ouvrir_recherche = true; } else { ouvrir_recherche = false; } changestyle('bandeauvide', 'visibility', 'hidden'); if (ouvrir_recherche == true) { changestyle('bandeaurecherche','visibility','visible'); }\">";
diff --git a/ecrire/inc_utils.php b/ecrire/inc_utils.php
index fe3ac4bcb88f00388790e3657edfb1dbeede464a..527c575ef4b1f36c6031608d1dde4b9a676c9671 100644
--- a/ecrire/inc_utils.php
+++ b/ecrire/inc_utils.php
@@ -87,18 +87,21 @@ function pipeline($action, $val) {
 	if (!isset($pipe[$action]))
 		$pipe[$action] = array_filter(explode('|',$spip_pipeline[$action]));
 
+	$args= func_get_args();
+	array_shift($args);
+
 	// Eclater le pipeline en filtres et appliquer chaque filtre
 	foreach ($pipe[$action] as $fonc) {
 
 		// fonction
 		if (function_exists($fonc))
-			$val = $fonc($val);
+			$val = call_user_func_array($fonc, $args);
 
 		// Class::Methode
 		else if (preg_match("/^(\w*)::(\w*)$/", $fonc, $regs)                            
 		AND $methode = array($regs[1], $regs[2])
 		AND is_callable($methode))
-			$val = call_user_func($methode, $val);
+			$val = call_user_func_array($methode, $args);
 
 		// Charger un fichier
 		else if ($f = $spip_matrice[$fonc]) {
diff --git a/ecrire/inc_version.php b/ecrire/inc_version.php
index 506031bff708ae33cdc34598ef71a342d8066ede..304ae99cd02c045748b9a9c07e19e1ee737a95d5 100644
--- a/ecrire/inc_version.php
+++ b/ecrire/inc_version.php
@@ -175,7 +175,9 @@ $spip_pipeline = array(
 	'post_propre' => '',
 	'pre_indexation' => '',
 	'pre_syndication' => '',
-	'post_syndication' => ''
+	'post_syndication' => '',
+	'ajouter_boutons' => '',
+	'ajouter_onglets' => ''
 );
 # la matrice standard (fichiers definissant les fonctions a inclure)
 $spip_matrice = array ();
diff --git a/ecrire/presentation.js b/ecrire/presentation.js
index 231dbadf19230e8b49cd727ba0727bcddfe8ee23..53acf4f6a4942d29c18306b6200d329c0d11ceec 100644
--- a/ecrire/presentation.js
+++ b/ecrire/presentation.js
@@ -3,11 +3,11 @@ var init_gauche = true;
 function changestyle(id_couche, element, style) {
 
   if (admin) {
-		hide_obj("bandeaudocuments");
-		hide_obj("bandeauredacteurs");
+		hide_obj("bandeaunaviguer");
+		hide_obj("bandeauforum_admin");
 		hide_obj("bandeauauteurs");
-		if (stat) {  hide_obj("bandeausuivi"); } 
-		hide_obj("bandeauadministration"); 
+		if (stat) {  hide_obj("bandeaustatistiques_visites"); } 
+		hide_obj("bandeauconfiguration"); 
   }
 	hide_obj("bandeaudeconnecter");
 	hide_obj("bandeautoutsite");
@@ -25,11 +25,11 @@ function changestyle(id_couche, element, style) {
 	
 	if (init_gauche) {
 	   if (admin) {
-		decalerCouche('bandeaudocuments');
-		decalerCouche('bandeauredacteurs');
+		decalerCouche('bandeaunaviguer');
+		decalerCouche('bandeauforum_admin');
 		decalerCouche('bandeauauteurs');
-		if (stat) decalerCouche('bandeausuivi');
-		decalerCouche('bandeauadministration');
+		if (stat) decalerCouche('bandeaustatistiques_visites');
+		decalerCouche('bandeauconfiguration');
 		} 
 		init_gauche = false;
 	}