diff --git a/ecrire/inc/boutons.php b/ecrire/inc/boutons.php
index bad5457a888c626d80660d2744775f5e72a046e6..8b9b30b526d294a6b2c7e9c832952f9dca2ad565 100644
--- a/ecrire/inc/boutons.php
+++ b/ecrire/inc/boutons.php
@@ -208,6 +208,28 @@ function definir_barre_boutons() {
 		$boutons_admin['configuration']->sousmenu= $sousmenu;
 
 	} // fin si admin
+	
+	// ajouter les boutons issus des plugin via plugin.xml
+	if (function_exists('boutons_plugins')){
+		$liste_boutons_plugins = boutons_plugins();
+		foreach($liste_boutons_plugins as $id => $infos){
+			if (autoriser('bouton',$id)){
+				if (($parent = $infos['parent']) && isset($boutons_admin[$parent]))
+					$boutons_admin[$parent]->sousmenu[$id]= new Bouton(
+					  _DIR_PLUGINS . $infos['icone'],  // icone
+					  $infos['titre'],	// titre
+					  $infos['url']?$infos['url']:null,
+					  $infos['args']?$infos['args']:null
+					  );
+				if (!$parent)
+					$boutons_admin[$id] = new Bouton(
+					  _DIR_PLUGINS . $infos['icone'],  // icone
+					  $infos['titre'],	// titre
+					  $infos['url']?generer_url_ecrire($infos['url'],$infos['args']?$infos['args']:''):null	
+					  );
+			}
+		}
+	}
 
 	$boutons_admin = pipeline('ajouter_boutons', $boutons_admin);
 }
diff --git a/ecrire/inc/plugin.php b/ecrire/inc/plugin.php
index 8941310452b6563736e17ae6c2094cf0b862a25f..f6a4c98381f1338f311d07915cb0c4083974cf43 100644
--- a/ecrire/inc/plugin.php
+++ b/ecrire/inc/plugin.php
@@ -244,7 +244,21 @@ function ecrire_plugin_actifs($plugin,$pipe_recherche=false,$operation='raz'){
 
 	$start_file = "<"."?php\nif (defined('_ECRIRE_INC_VERSION')) {\n";
 	$end_file = "}\n?".">";
-	
+
+	if (is_array($infos)){
+		// construire tableaux de boutons
+		$liste_boutons = array();
+		foreach($infos as $plug=>$info){
+				if (isset($info['bouton'])){
+				foreach($info['bouton'] as $id=>$conf){
+					$conf['icone'] = "$plug/" . $conf['icone'];
+					$info['bouton'][$id] = $conf;
+				}
+				$liste_boutons = array_merge($liste_boutons,$info['bouton']);
+			}
+		}
+	}
+
 	// generer les fichier 
 	// charger_plugins_options.php
 	// charger_plugins_fonctions.php
@@ -279,14 +293,18 @@ function ecrire_plugin_actifs($plugin,$pipe_recherche=false,$operation='raz'){
 			}
 		}
 		$s .= "error_reporting(SPIP_ERREUR_REPORT);\n";
+		if ($charge=='options'){
+			$s .= "function boutons_plugins(){return unserialize('".str_replace("'","\'",serialize($liste_boutons))."');}\n";
+		}
 		ecrire_fichier(_DIR_TMP."charger_plugins_$charge.php",
 			$start_file . $splugs . $s . $end_file);
 	}
 
 	if (is_array($infos)){
-		// construire tableaux de pipelines et matrices
+		// construire tableaux de pipelines et matrices et boutons
 		// $GLOBALS['spip_pipeline']
 		// $GLOBALS['spip_matrice']
+		$liste_boutons = array();
 		foreach($infos as $plug=>$info){
 			$prefix = "";
 			$prefix = $info['prefix']."_";
@@ -309,6 +327,7 @@ function ecrire_plugin_actifs($plugin,$pipe_recherche=false,$operation='raz'){
 			}
 		}
 	}
+
 	// on ajoute les pipe qui ont ete recenses manquants
 	foreach($liste_pipe_manquants as $add_pipe)
 		if (!isset($GLOBALS['spip_pipeline'][$add_pipe]))
@@ -569,6 +588,25 @@ function plugin_get_infos($plug, $force_reload=false){
 				$ret['utilise'] = $arbre['utilise'];
 				$ret['path'] = $arbre['path'];
 				
+				// recuperer les boutons si necessaire
+				spip_xml_match_nodes(",^bouton\s,",$arbre,$les_boutons);
+				if (is_array($les_boutons) && count($les_boutons)){
+					$ret['bouton'] = array();
+					foreach($les_boutons as $bouton => $val) {
+						$bouton = spip_xml_decompose_tag($bouton);
+						$bouton = end($bouton);
+						if (isset($bouton['id'])){
+							$id = $bouton['id'];
+							$ret['bouton'][$id]['parent'] = isset($bouton['parent'])?$bouton['parent']:'';
+							$val = reset($val);
+							$ret['bouton'][$id]['titre'] = isset($val['titre'])?trim(end($val['titre'])):'';
+							$ret['bouton'][$id]['icone'] = isset($val['icone'])?trim(end($val['icone'])):'';
+							$ret['bouton'][$id]['url'] = isset($val['url'])?trim(end($val['url'])):'';
+							$ret['bouton'][$id]['args'] = isset($val['url'])?trim(end($val['args'])):'';
+						}
+					}
+				}
+				
 				if ($t=@filemtime($f)){
 					$ret['filemtime'] = $t;
 					$plugin_xml_cache[$plug]=$ret;