diff --git a/.gitattributes b/.gitattributes
index 611f68a30ee07f224a953ad784457d2029a1884c..fd5e9ab46d7f033f53ca7e304d2b96f698c8bb70 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -276,6 +276,8 @@ prive/aide_body.css -text
 prive/aide_menu.html -text
 prive/ajax_item_pick.html -text
 prive/ajax_item_pick_fonctions.php -text
+prive/ajax_selecteur.html -text
+prive/ajax_selecteur_fonctions.php -text
 prive/echafaudage/contenu/objet.html -text
 prive/echafaudage/contenu/objet_edit.html -text
 prive/echafaudage/contenu/objet_edit.sans_rubrique.html -text
diff --git a/prive/ajax_selecteur.html b/prive/ajax_selecteur.html
new file mode 100644
index 0000000000000000000000000000000000000000..ad51409e4ecd6b5b12484e049576e599774f1cbf
--- /dev/null
+++ b/prive/ajax_selecteur.html
@@ -0,0 +1,8 @@
+[(#REM)
+
+  Squelette
+  (c) xxx
+  Distribue sous licence GPL
+
+][(#HTTP_HEADER{Content-type: text/javascript[; charset=(#CHARSET)]})
+]#CACHE{3600}[(#ENV{ref}|picker_identifie_id_rapide{#ENV{objets}})]
diff --git a/prive/ajax_selecteur_fonctions.php b/prive/ajax_selecteur_fonctions.php
new file mode 100644
index 0000000000000000000000000000000000000000..d5194d6d848b030f616ef56152a6898cc62307ca
--- /dev/null
+++ b/prive/ajax_selecteur_fonctions.php
@@ -0,0 +1,7 @@
+<?php
+
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+include_spip('formulaires/selecteur/generique_fonctions');
+
+?>
diff --git a/prive/formulaires/selecteur/ajax.html b/prive/formulaires/selecteur/ajax.html
index 31765e5432cf9a0ce0bf68caaf7b4e113fdb028d..fee3a58c4fb5fa3a725e29da5b7eefc60e62be59 100644
--- a/prive/formulaires/selecteur/ajax.html
+++ b/prive/formulaires/selecteur/ajax.html
@@ -2,25 +2,25 @@
 
 [(#REM) Afficher un bouton ajax Modifier a la premiere fois ]
 [(#ENV{picker,''}|non)
-<div class='picker_bouton'>&#91;<a href='[(#SELF|parametre_url{picker,1})]' class='ajax'>#GET{bouton_modif}</a>&#93;</div>
+<div class='picker_bouton'><a href='[(#SELF|parametre_url{picker,1})]' class="ajax nohistory">#GET{bouton_modif}</a></div>
 ]
 
 [(#REM) Afficher un bouton Fermer/Modifier ensuite ]
 [(#ENV{picker,''}|oui)
-<div class='picker_bouton'>
-&#91;<a
-	class='close'
-	href='[(#SELF|parametre_url{picker,0})]'
+<div class="picker_bouton">
+<a
+	class="close"
+	href="[(#SELF|parametre_url{picker,0})]"
 	onclick="jQuery(this).parent().picker_toggle();return false;"
 ><:bouton_fermer:></a><a
-	class='edit'
-	href='[(#SELF|parametre_url{picker,1})]' 
+	class="edit"
+	href="[(#SELF|parametre_url{picker,1})]" 
 	onclick="jQuery(this).parent().picker_toggle();return false;"
-	style='display:none;'>#GET{bouton_modif}</a>&#93;
+	style="display:none;">#GET{bouton_modif}</a>
 </div>
 
-[(#REM) et enfin le navigateur ------]
-<div class='browser'>
+[(#REM) et enfin le navigateur (et l'ajout rapide) ------]
+<div class="browser">
 	<div class="choix choix_rapide">
 		<label for="picker_rapide_#ENV{name}"><:label_ajout_id_rapide:></label>
 		<input type="text" value="" id="picker_rapide_#ENV{name}" size="10" />
@@ -31,9 +31,8 @@
 					jQuery.ajax({
 						dataType: 'json',
 						url: '[(#URL_PAGE{ajax_selecteur})]',
-						data: {
-							rubriques: '#ENV{rubriques}',
-							articles: '#ENV{articles}',
+						data: {	
+							objets:[(#ENV{objets/selectionner}|json_encode|sinon{\[\]}),]
 							ref: jQuery('#picker_rapide_#ENV{name}').attr('value')
 						},
 						success: function(r, statut, xhr){
@@ -62,6 +61,8 @@
 	[(#ENV{objet}|=={racine}|ou{#ENV{id_objet}|=={0}}|non)
 		[(#SET{skel, [(#ENV{objet}|table_objet)]})]
 	]
+	<div class="navigateur">
 	<INCLURE{fond=formulaires/selecteur/hierarchie-#GET{skel}, env}>
+	</div>
 </div>
 ]
diff --git a/prive/formulaires/selecteur/generique.html b/prive/formulaires/selecteur/generique.html
index 99fc8e60fe0bcf8ea64ea3f4618fc861a2340bb9..d9c21f1d95fcd49849b5a86b170ceb185ac3e2fb 100644
--- a/prive/formulaires/selecteur/generique.html
+++ b/prive/formulaires/selecteur/generique.html
@@ -1,5 +1,6 @@
 #SET{img_unpick, #CHEMIN_IMAGE{supprimer-12.png}}
-<script type='text/javascript'>var identifiant_selecteur = 'selecteur_#ENV{name}'; var img_unpick='#GET{img_unpick}';</script>
+[(#SET{label_supprimer, <:lien_supprimer:>})]
+<script type='text/javascript'>var identifiant_selecteur = 'selecteur_#ENV{name}'; var img_unpick='#GET{img_unpick}'; var selecteur_label_supprimer='#GET{label_supprimer}';</script>
 <script type='text/javascript' src='#CHEMIN{formulaires/selecteur/jquery.picker.js}'></script>
 [(#REM)
 
@@ -18,7 +19,8 @@ afficher la selection dans un ul class item_picked
 [(#REM) On commence par chercher la liste des objets disposant d'un sélecteur ]
 [(#SET{objets, [(#ENV{whitelist,#ARRAY}|selecteur_lister_objets{#ENV{blacklist,#ARRAY}})]})]
 
-<div id="selecteur_#ENV{name}">
+[(#REM) S'il n'y a qu'un type d'objet affiché et sélectionnable, on ajoute une classe (on fait -1 car il y a toujours la racine dans "afficher" ]
+<div id="selecteur_#ENV{name}" class="selecteur[ (#GET{objets/afficher}|count|moins{1}|=={1}|et{#GET{objets/selectionner}|count|=={1}})selecteur_type_unique]">
 
 <ul class="item_picked[ (#ENV{select,''}|?{select})][ (#ENV{obligatoire}|?{obligatoire})]">
 <BOUCLE_selected(POUR){tableau #ENV{selected}|picker_selected}>
@@ -45,7 +47,7 @@ afficher la selection dans un ul class item_picked
 #SET{id_objet, #ENV{id_objet,0}}
 
 [(#REM) Attention si l'objet passé ne fait pas parti des objets adéquats, on va sur la racine ]
-[(#GET{objet}|table_objet|in_array{#GET{objets}|table_valeur{afficher}}|non)
+[(#GET{objet}|table_objet|in_array{#GET{objets/afficher}}|non)
 	#SET{objet, racine}
 	#SET{id_objet, 0}
 ]
diff --git a/prive/formulaires/selecteur/generique_fonctions.php b/prive/formulaires/selecteur/generique_fonctions.php
index 8936e31cb98007718f1e15baf5e5efa4c7015004..d569d8cd688f94b649a480e5969a35445559a95a 100644
--- a/prive/formulaires/selecteur/generique_fonctions.php
+++ b/prive/formulaires/selecteur/generique_fonctions.php
@@ -4,13 +4,23 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
 
 /*
  * Fournit la liste des objets ayant un sélecteur
- * Concrètement, va chercher tous les formulaires/selecteur/hierarchie-truc.html
+ * Concrètement, va chercher tous les formulaires/selecteur/hierarchie-trucs.html
  * Ensuite on ajoute les parents obligatoires éventuels
+ *
+ * @param array $whitelist Liste blanche décrivant les objets à lister
+ * @param array $blacklist Liste noire décrivant les objets à ne pas lister
+ * @return array Retourne un tableau de deux entrées listant les objets à lister et les objets sélectionnables
+ *    selectionner : tableau des objets que l'on pourra sélectionner (avec un +)
+ *    afficher : tableau des objets à afficher (mais pas forcément sélectionnables)
  */
 function selecteur_lister_objets($whitelist=array(), $blacklist=array()){
-	$liste = find_all_in_path('formulaires/selecteur/', 'hierarchie-[\w]+[.]html$');
+	static $liste_selecteurs, $liste_parents;
+	
+	if (!$liste_selecteurs){
+		$liste_selecteurs = find_all_in_path('formulaires/selecteur/', 'hierarchie-[\w]+[.]html$');
+	}
 	$objets_selectionner = array();
-	foreach ($liste as $fichier=>$chemin){
+	foreach ($liste_selecteurs as $fichier=>$chemin){
 		$objets_selectionner[] = preg_replace('/^hierarchie-([\w]+)[.]html$/', '$1', $fichier);
 	}
 	
@@ -27,15 +37,18 @@ function selecteur_lister_objets($whitelist=array(), $blacklist=array()){
 	
 	// Ensuite on cherche ce qu'on doit afficher : au moins ceux qu'on peut sélectionner
 	$objets_afficher = $objets_selectionner;
-	// Il faut alors chercher d'éventuels parents obligatoires :
+	
+	// Il faut alors chercher d'éventuels parents obligatoires en plus :
 	// lister-trucs-bidules.html => on doit afficher des "trucs" pour trouver des "bidules"
-	$liste = find_all_in_path('formulaires/selecteur/', 'lister-[\w]+-[\w]+[.]html$');
-	foreach ($liste as $fichier=>$chemin){
+	if (!$liste_parents){
+		$liste_parents = find_all_in_path('formulaires/selecteur/', 'lister-[\w]+-[\w]+[.]html$');
+	}
+	foreach ($liste_parents as $fichier=>$chemin){
 		preg_match('/^lister-([\w]+)-([\w]+)[.]html$/', $fichier, $captures);
 		$parent = $captures[1];
 		$type = $captures[2];
-		// Si le type fait partie de ce qu'on veut sélectionner alors on ajoute le parent à l'affichage
-		if (in_array($type, $objets_selectionner)){
+		// Si le type fait partie de ce qu'on doit afficher alors on ajoute aussi le parent à l'affichage
+		if (in_array($type, $objets_afficher)){
 			$objets_afficher[] = $parent;
 		}
 	}
@@ -85,20 +98,49 @@ function picker_selected($selected, $type=''){
 	return $select;
 }
 
-function picker_identifie_id_rapide($ref,$rubriques=0,$articles=0){
-	include_spip("inc/json");
-	include_spip("inc/lien");
-	if (!($match = typer_raccourci($ref)))
+/*
+ * Récupère des informations sur un objet pour pouvoir l'ajouter aux éléments sélectionnés
+ *
+ * @param string $ref Référence de l'objet à chercher, de la forme "type|id", par exemple "rubrique|123".
+ * @param mixed $rubriques_ou_objets Soit un booléen (pouvant être une chaîne vide aussi) indiquant que les rubriques sont sélectionnables soit un tableau complet des objets sélectionnables.
+ * @param bool $articles Booléen indiquant si les articles sont sélectionnables
+ */
+function picker_identifie_id_rapide($ref, $rubriques_ou_objets=false, $articles=false){
+	include_spip('inc/json');
+	include_spip('inc/lien');
+	
+	// On construit un tableau des objets sélectionnables suivant les paramètres
+	$objets = array();
+	if ($rubriques_ou_objets and is_array($rubriques_ou_objets)){
+		$objets = $rubriques_ou_objets;
+	}
+	else{
+		if ($rubriques_ou_objets){ $objets[] = 'rubriques'; }
+		if ($articles){ $objets[] = 'articles'; }
+	}
+	
+	// Si la référence ne correspond à rien, c'est fini
+	if (!($match = typer_raccourci($ref))){
 		return json_export(false);
+	}
+	// Sinon on récupère les infos utiles
 	@list($type,,$id,,,,) = $match;
-	if (!in_array($type,array($rubriques?'rubrique':'x',$articles?'article':'x')))
+	
+	// On regarde si le type trouvé fait partie des objets sélectionnables
+	if (!in_array(table_objet($type), $objets)){
 		return json_export(false);
-	$table_sql = table_objet_sql($type);
-	$id_table_objet = id_table_objet($type);
-	if (!$titre = sql_getfetsel('titre',$table_sql,"$id_table_objet=".intval($id)))
+	}
+	
+	// Maintenant que tout est bon, on cherche les informations sur cet objet
+	include_spip('inc/filtres');
+	if (!$titre = generer_info_entite($id, $type, 'titre')){
 		return json_export(false);
-	$titre = attribut_html(extraire_multi($titre));
-	return json_export(array('type'=>$type,'id'=>"$type|$id",'titre'=>$titre));
+	}
+	
+	// On simplifie le texte
+	$titre = attribut_html($titre);
+	
+	return json_export(array('type' => $type, 'id' => "$type|$id", 'titre' => $titre));
 }
 
 ?>
diff --git a/prive/formulaires/selecteur/hierarchie-articles.html b/prive/formulaires/selecteur/hierarchie-articles.html
index 2fdeac173f7090774c878890172f8d48f250aeab..0b9a7abbcd192412f4a7175ba4873a7240be40b4 100644
--- a/prive/formulaires/selecteur/hierarchie-articles.html
+++ b/prive/formulaires/selecteur/hierarchie-articles.html
@@ -1,28 +1,10 @@
 <BOUCLE_art(ARTICLES){tout}{id_article=#ENV{id_objet}}{statut?}>
 	<div class="chemin">
-		<a href="[(#SELF|parametre_url{objet,racine}|parametre_url{id_objet,0})]" class="ajax"><:info_racine_site:></a>
-		<BOUCLE_chemin(HIERARCHIE){id_rubrique}> &gt; <a href="[(#SELF|parametre_url{id_objet,#ID_RUBRIQUE})]" class="ajax">#TITRE</a></BOUCLE_chemin> &gt; <strong class="on">#TITRE</strong>
+		<a href="[(#SELF|parametre_url{objet,racine}|parametre_url{id_objet,0})]" class="ajax nohistory"><:info_racine_site:></a><span class="sep divider">
+		&gt; </span><BOUCLE_chemin(HIERARCHIE){id_rubrique}><a href="[(#SELF|parametre_url{id_objet,#ID_RUBRIQUE})]" class="ajax nohistory">#TITRE</a><span class="sep divider">
+		&gt; </span></BOUCLE_chemin><h3 class="on">#TITRE</h3>
 	</div>
-	<B_contenu>
-	[(#REM) afficher la racine si la profondeur le permet]
-	<BOUCLE_test_racine(CONDITION){si (#_contenu:GRAND_TOTAL|<{#_contenu:TOTAL_BOUCLE}|oui)}>
-	<div class="frame[ total_(#_contenu:GRAND_TOTAL|max{#_contenu:TOTAL_BOUCLE|moins{1}})] frame_0">
-		<h2>
-			[(#ENV{racine}|oui)
-			<a href="#" onclick="jQuery(this).item_pick('racine|0','#ENV{name,id_item}','<:info_racine_site:>','racine');return false;">
-			<img class="add" src="#CHEMIN_IMAGE{ajouter-16.png}" alt="ajouter" width="16" height="16" />
-			</a>
-			]
-			<:info_racine_site:>
-		</h2>
-		#INCLURE{fond=formulaires/selecteur/lister, quoi=racine, env}
-	</div>
-	</BOUCLE_test_racine>
-	<BOUCLE_contenu(HIERARCHIE){id_rubrique}{tout}{n-4,4}>
-	<div class="frame[ total_(#GRAND_TOTAL|min{#TOTAL_BOUCLE|moins{1}})][ frame_(#COMPTEUR_BOUCLE|moins{#GRAND_TOTAL|plus{1}|max{#TOTAL_BOUCLE}}|plus{#TOTAL_BOUCLE})]">
-		<a href="[(#SELF|parametre_url{id_objet,#ID_PARENT|?{#ID_PARENT,0}})]" class="frame_close ajax"><img src="#CHEMIN_IMAGE{fermer-16}" alt="fermer" width="16" height="16" /></a>
-		<h2><a class="ajax" href="[(#SELF|parametre_url{id_objet,#ID_RUBRIQUE})]">#TITRE</a></h2>
+	<div class="liste">
 		#INCLURE{fond=formulaires/selecteur/lister, quoi=rubriques, id_rubrique, env}
 	</div>
-	</BOUCLE_contenu>
 </BOUCLE_art>
diff --git a/prive/formulaires/selecteur/hierarchie-racine.html b/prive/formulaires/selecteur/hierarchie-racine.html
index 1603fd6fe34810f67e4c637007b73022fbbbcbad..f275ed8ea3d331b3097870b7f846d2c482b2842e 100644
--- a/prive/formulaires/selecteur/hierarchie-racine.html
+++ b/prive/formulaires/selecteur/hierarchie-racine.html
@@ -1,14 +1,6 @@
 <div class="chemin">
-	<strong class="on"><:info_racine_site:></strong>
+	<h3 class="on"><:info_racine_site:></h3>
 </div>
-<div class="frame total_0 frame_0">
-	<h2>
-		[(#ENV{racine}|oui)
-		<a href="#" onclick="jQuery(this).item_pick('racine|0','#ENV{name,id_item}','<:info_racine_site:>','racine');return false;">
-		<img class="add" src="#CHEMIN_IMAGE{ajouter-16.png}" alt="ajouter" width="16" height="16" />
-		</a>
-		]
-		<:info_racine_site:>
-	</h2>
+<div class="liste">
 	#INCLURE{fond=formulaires/selecteur/lister, quoi=racine, env}
 </div>
diff --git a/prive/formulaires/selecteur/hierarchie-rubriques.html b/prive/formulaires/selecteur/hierarchie-rubriques.html
index e3b6a059efb321c5f3f30e3ad0a17328a74915df..ef78f3070176c9b0c5faaafd0e7a16f26e9728bf 100644
--- a/prive/formulaires/selecteur/hierarchie-rubriques.html
+++ b/prive/formulaires/selecteur/hierarchie-rubriques.html
@@ -1,28 +1,10 @@
 <BOUCLE_rub(RUBRIQUES){tout}{id_rubrique=#ENV{id_objet}}{statut?}>
 	<div class="chemin">
-		<a href="[(#SELF|parametre_url{objet,racine}|parametre_url{id_objet,0})]" class="ajax"><:info_racine_site:></a>
-		<BOUCLE_chemin(HIERARCHIE){id_rubrique}> &gt; <a href="[(#SELF|parametre_url{id_objet,#ID_RUBRIQUE})]" class="ajax">#TITRE</a></BOUCLE_chemin> &gt; <strong class="on">#TITRE</strong>
+		<a href="[(#SELF|parametre_url{objet,racine}|parametre_url{id_objet,0})]" class="ajax nohistory"><:info_racine_site:></a><span class="sep divider">
+		&gt; </span><BOUCLE_chemin(HIERARCHIE){id_rubrique}><a href="[(#SELF|parametre_url{id_objet,#ID_RUBRIQUE})]" class="ajax nohistory">#TITRE</a><span class="sep divider">
+		&gt; </span></BOUCLE_chemin><h3 class="on">#TITRE</h3>
 	</div>
-	<B_contenu>
-	[(#REM) afficher la racine si la profondeur le permet]
-	<BOUCLE_test_racine(CONDITION){si (#_contenu:GRAND_TOTAL|<{#_contenu:TOTAL_BOUCLE}|oui)}>
-	<div class="frame[ total_(#_contenu:GRAND_TOTAL|max{#_contenu:TOTAL_BOUCLE|moins{1}})] frame_0">
-		<h2>
-			[(#ENV{racine}|oui)
-			<a href="#" onclick="jQuery(this).item_pick('racine|0','#ENV{name,id_item}','<:info_racine_site:>','racine');return false;">
-			<img class="add" src="#CHEMIN_IMAGE{ajouter-16.png}" alt="ajouter" width="16" height="16" />
-			</a>
-			]
-			<:info_racine_site:>
-		</h2>
-		#INCLURE{fond=formulaires/selecteur/lister, quoi=racine, env}
-	</div>
-	</BOUCLE_test_racine>
-	<BOUCLE_contenu(HIERARCHIE){id_rubrique}{tout}{n-4,4}>
-	<div class="frame[ total_(#GRAND_TOTAL|min{#TOTAL_BOUCLE|moins{1}})][ frame_(#COMPTEUR_BOUCLE|moins{#GRAND_TOTAL|plus{1}|max{#TOTAL_BOUCLE}}|plus{#TOTAL_BOUCLE})]">
-		<a href="[(#SELF|parametre_url{id_objet,#ID_PARENT|?{#ID_PARENT,0}})]" class="frame_close ajax"><img src="#CHEMIN_IMAGE{fermer-16}" alt="fermer" width="16" height="16" /></a>
-		<h2><a class="ajax" href="[(#SELF|parametre_url{id_objet,#ID_RUBRIQUE})]">#TITRE</a></h2>
+	<div class="liste">
 		#INCLURE{fond=formulaires/selecteur/lister, quoi=rubriques, id_rubrique, env}
 	</div>
-	</BOUCLE_contenu>
 </BOUCLE_rub>
diff --git a/prive/formulaires/selecteur/jquery.picker.js b/prive/formulaires/selecteur/jquery.picker.js
index eae4669a781135b0dfea08df68480e6892930378..7fc54c50c2f8530a5dfb82b81a0058b574babe81 100644
--- a/prive/formulaires/selecteur/jquery.picker.js
+++ b/prive/formulaires/selecteur/jquery.picker.js
@@ -44,6 +44,7 @@ item_picked et picker doivent seulement etre voisins
 	}
 
 	jQuery.fn.item_pick = function(id_item,name,title,type){
+		var label_supprimer = (typeof selecteur_label_supprimer != 'undefined') ? selecteur_label_supprimer : 'del';
 		var picker = this.parents('.item_picker');
 		var picked = picker.siblings('ul.item_picked');
 		if (!picked.length) {
@@ -51,7 +52,7 @@ item_picked et picker doivent seulement etre voisins
 			picked = picker.siblings('ul.item_picked');
 		}
 		var select = picked.is('.select');
-		var obligatoire = picked.is('obligatoire');
+		var obligatoire = picked.is('.obligatoire');
 		if (select)
 			picked.html('');
 		else
@@ -65,8 +66,8 @@ item_picked et picker doivent seulement etre voisins
 				picked.append('<li class="last on '+type+'">'
 				+'<input type="hidden" name="'+name+'[]" value="'+id_item+'"/>'
 				+ title
-				+((select&&obligatoire)?"":" <a href='#' onclick='jQuery(this).item_unpick();return false;'>"
-				  +"<img src='"+img_unpick+"' /></a>"
+				+((select&&obligatoire)?"":" <a title='"+label_supprimer+"' href='#' onclick='jQuery(this).item_unpick();return false;'>"
+				  +"<img alt='"+label_supprimer+"' src='"+img_unpick+"' /></a>"
 				  )
 				+'<span class="sep">, </span></li>').removeClass('changing').stopAnimeajax();
 				// masquer le selecteur apres un pick
diff --git a/prive/formulaires/selecteur/lister-racine-articles.html b/prive/formulaires/selecteur/lister-racine-articles.html
index 7f0dea58595d26021184e687bcd415c654b67775..d83adaf393df7ed1a311356c6e00ebc019f5140c 100644
--- a/prive/formulaires/selecteur/lister-racine-articles.html
+++ b/prive/formulaires/selecteur/lister-racine-articles.html
@@ -4,16 +4,15 @@
 <ul class="items">
 <BOUCLE_enfants(ARTICLES){id_rubrique<=0}{statut?}{pagination 100 #GET{p}}{par num titre, titre}>
 	<li class="article">
-		[(#ENV{bouton_selectionner}|oui)<a
+		<a
+			class="ouvrir ajax nohistory"
+			href="[(#SELF|parametre_url{objet,article}|parametre_url{id_objet,#ID_ARTICLE})]"
+		>#TITRE</a>[(#ENV{bouton_selectionner}|oui)<a
+			title="<:bouton_choisir:> : [(#TITRE|attribut_html|couper{80})]"
+			class="choisir"
 			href="#"
 			onclick="jQuery(this).item_pick('article|#ID_ARTICLE','#ENV{name,id_item}','#TITRE','article');return false;"
-		><img
-		class="add"
-		src="#CHEMIN_IMAGE{ajouter-16.png}"
-		alt="ajouter"
-		width="16"
-		height="16"
-		/></a>]#TITRE
+		><:bouton_choisir:></a>]
 	</li>
 </BOUCLE_enfants>
 </ul>
diff --git a/prive/formulaires/selecteur/lister-racine-rubriques.html b/prive/formulaires/selecteur/lister-racine-rubriques.html
index dadc3078907929a76060297bfa30b397cd494ea3..e204d6a234d6c4827e462c88794942334eb6eb14 100644
--- a/prive/formulaires/selecteur/lister-racine-rubriques.html
+++ b/prive/formulaires/selecteur/lister-racine-rubriques.html
@@ -4,19 +4,15 @@
 <ul class="items">
 <BOUCLE_enfants(RUBRIQUES){id_parent=0}{statut?}{id_secteur?}{pagination 100 #GET{p}}{par num titre, titre}>
 	<li class="rubrique">
-		[(#ENV{bouton_selectionner}|oui)<a
+		<a
+			class="ouvrir ajax nohistory"
+			href="[(#SELF|parametre_url{objet,rubrique}|parametre_url{id_objet,#ID_RUBRIQUE})]"
+		>#TITRE</a>[(#ENV{bouton_selectionner}|oui)<a
+			title="<:bouton_choisir:> : [(#TITRE|attribut_html|couper{80})]"
+			class="choisir"
 			href="#"
 			onclick="jQuery(this).item_pick('rubrique|#ID_RUBRIQUE','#ENV{name,id_item}','#TITRE','rubrique');return false;"
-		><img
-		class="add"
-		src="#CHEMIN_IMAGE{ajouter-16.png}"
-		alt="ajouter"
-		width="16"
-		height="16"
-		/></a>]#TITRE<a
-		class="ajax"
-		href="[(#SELF|parametre_url{objet,rubrique}|parametre_url{id_objet,#ID_RUBRIQUE})]"><img
-		class="ouvrir" src="#CHEMIN_IMAGE{fleche-droite-16.png}" alt="" /></a>
+		><:bouton_choisir:></a>]
 	</li>
 </BOUCLE_enfants>
 </ul>
diff --git a/prive/formulaires/selecteur/lister-rubriques-articles.html b/prive/formulaires/selecteur/lister-rubriques-articles.html
index 6f1556062ef2f06226a4b815cf9e2149898907c2..d92cc0dea7aa99ed1883065ab07181cdace6c3c6 100644
--- a/prive/formulaires/selecteur/lister-rubriques-articles.html
+++ b/prive/formulaires/selecteur/lister-rubriques-articles.html
@@ -4,16 +4,15 @@
 <ul class="items">
 <BOUCLE_enfants(ARTICLES){id_rubrique}{statut?}{pagination 100 #GET{p}}{par num titre, titre}>
 	<li class="article">
-		[(#ENV{bouton_selectionner}|oui)<a
+		<a
+			class="ouvrir ajax nohistory"
+			href="[(#SELF|parametre_url{objet,article}|parametre_url{id_objet,#ID_ARTICLE})]"
+		>#TITRE</a>[(#ENV{bouton_selectionner}|oui)<a
+			title="<:bouton_choisir:> : [(#TITRE|attribut_html|couper{80})]"
+			class="choisir"
 			href="#"
 			onclick="jQuery(this).item_pick('article|#ID_ARTICLE','#ENV{name,id_item}','#TITRE','article');return false;"
-		><img
-		class="add"
-		src="#CHEMIN_IMAGE{ajouter-16.png}"
-		alt="ajouter"
-		width="16"
-		height="16"
-		/></a>]#TITRE
+		><:bouton_choisir:></a>]
 	</li>
 </BOUCLE_enfants>
 </ul>
diff --git a/prive/formulaires/selecteur/lister-rubriques-rubriques.html b/prive/formulaires/selecteur/lister-rubriques-rubriques.html
index 3b2c73fd1862e629e854189d2b0a826a24efc2eb..0f3666de511cc8b4033d08567ea0c9ac7316a5b0 100644
--- a/prive/formulaires/selecteur/lister-rubriques-rubriques.html
+++ b/prive/formulaires/selecteur/lister-rubriques-rubriques.html
@@ -4,19 +4,15 @@
 <ul class="items">
 <BOUCLE_enfants(RUBRIQUES){id_parent=#ENV{id_rubrique}}{statut?}{id_secteur?}{pagination 100 #GET{p}}{par num titre, titre}>
 	<li class="rubrique">
-		[(#ENV{bouton_selectionner}|oui)<a
+		<a
+			class="ouvrir ajax nohistory"
+			href="[(#SELF|parametre_url{objet,rubrique}|parametre_url{id_objet,#ID_RUBRIQUE})]"
+		>#TITRE</a>[(#ENV{bouton_selectionner}|oui)<a
+			title="<:bouton_choisir:> : [(#TITRE|attribut_html|couper{80})]"
+			class="choisir"
 			href="#"
 			onclick="jQuery(this).item_pick('rubrique|#ID_RUBRIQUE','#ENV{name,id_item}','#TITRE','rubrique');return false;"
-		><img
-		class="add"
-		src="#CHEMIN_IMAGE{ajouter-16.png}"
-		alt="ajouter"
-		width="16"
-		height="16"
-		/></a>]#TITRE<a
-		class="ajax"
-		href="[(#SELF|parametre_url{objet,rubrique}|parametre_url{id_objet,#ID_RUBRIQUE})]"><img
-		class="ouvrir" src="#CHEMIN_IMAGE{fleche-droite-16.png}" alt="" /></a>
+		><:bouton_choisir:></a>]
 	</li>
 </BOUCLE_enfants>
 </ul>
diff --git a/prive/formulaires/selecteur/lister.html b/prive/formulaires/selecteur/lister.html
index 1548cfbd65d003a8d2d0d1f686df46642c72146a..8e31017c4c53e055b2ee1ea8c799d9a9a0435781 100644
--- a/prive/formulaires/selecteur/lister.html
+++ b/prive/formulaires/selecteur/lister.html
@@ -1,7 +1,16 @@
-<BOUCLE_objets(POUR){tableau #ENV{objets}|table_valeur{afficher}}>
+[(#ENV{quoi}|in_array{#ENV{objets/selectionner}}|ou{#ENV{quoi}|=={racine}|et{#ENV{racine}|oui}})
+[(#SET{titre,[(#ENV{quoi}|=={racine}|?{<:info_racine_site:>,#INFO_TITRE{#ENV{quoi},#ENV{id_objet}}})]})]
+<a
+	href="#"
+	class="choisir_ici"
+	title="<:bouton_choisir:> : #GET{titre}"
+	onclick="jQuery(this).item_pick('#ENV{quoi}|#ENV{id_objet}','#ENV{name,id_item}','#GET{titre}','#ENV{quoi}');return false;"
+><span><:bouton_choisir:></span></a>
+]
+<BOUCLE_objets(POUR){tableau #ENV{objets/afficher}}>
 [(#CHEMIN{formulaires/selecteur/lister-#ENV{quoi}-#VALEUR.html}|oui)
-	[(#SET{bouton_selectionner, [(#VALEUR|in_array{[(#ENV{objets}|table_valeur{selectionner})]}|?{' ',''})]})]
-	[[<strong>(#VALEUR|table_objet_sql|lister_tables_objets_sql|table_valeur{texte_objets}|_T)</strong>]
-	(#INCLURE{fond=formulaires/selecteur/lister-#ENV{quoi}-#VALEUR, bouton_selectionner=#GET{bouton_selectionner}, env})]
+	#SET{bouton_selectionner, #VALEUR|in_array{#ENV{objets/selectionner}}|oui}
+	[<div class="#VALEUR">[<h4 class="type_objet">(#VALEUR|table_objet_sql|lister_tables_objets_sql|table_valeur{texte_objets}|_T)</h4>]
+	(#INCLURE{fond=formulaires/selecteur/lister-#ENV{quoi}-#VALEUR, bouton_selectionner=#GET{bouton_selectionner}, env})</div>]
 ]
 </BOUCLE_objets>
diff --git a/prive/themes/spip/picker.css.html b/prive/themes/spip/picker.css.html
index 401e8919a25cd5aa1235b60a160ebdbf8b46ad9a..0f538ac72cdbd4f177dd864a60718853b1db93d0 100644
--- a/prive/themes/spip/picker.css.html
+++ b/prive/themes/spip/picker.css.html
@@ -55,25 +55,41 @@ div.rub-ouverte, a.rub-ouverte { padding-#GET{right}: 10px; background: url([(#C
 /* Les éléments propres à chaque objet */
 <BOUCLE_objets(POUR){tableau (#REM|lister_tables_objets_sql)}>
 [(#SET{petite_icone, [(#CHEMIN_IMAGE{#VALEUR{icone_objet}-12.png}|sinon{[(#CHEMIN_IMAGE{#VALEUR{icone_objet}-16.png}|image_reduire{12}|extraire_attribut{src})]})]})]
-.item_picker .frame ul li.#VALEUR{type} {background:url(#GET{petite_icone}) no-repeat[ (#GET{left}) ]2px;}
 ul.item_picked li.#VALEUR{type} {padding-#GET{left}:15px;background-image:url(#GET{petite_icone});}
+.item_picker .[(#VALEUR{table_objet})] .type_objet {padding-#GET{left}:15px; background:url(#GET{petite_icone}) no-repeat[ (#GET{left}) ]center;}
+.item_picker .frame ul li.#VALEUR{type} {background:url(#GET{petite_icone}) no-repeat[ (#GET{left}) ]2px;}
 </BOUCLE_objets>
 
+/* Styles des éléments déjà sélectionnés */
 ul.item_picked,fieldset ul.item_picked {list-style:none;margin:0;padding:0;float:left;}
 ul.item_picked li {margin:0 2px 2px;padding:2px;background:#eee;border:1px solid #GET{claire};float:#GET{left};clear:none;background-repeat:no-repeat;background-position: [(#GET{left}) ]center;}
 ul.item_picked li span.sep {display:none;}
 ul.item_picked li label {margin:0;display:inline;float:none;}
 .js ul.item_picked li .checkbox {display: none;}
 
-
 ul.item_picked.select li {padding:2px 0;border:0;font-weight:bold;background:none;float:none;}
 ul.item_picked.select ul > li {float:#GET{left};}
 ul.item_picked.changing {}
 
+/* Le bouton pour ouvrir le sélecteur */
 .picker_bouton {float:#GET{right};clear:both;}
 
+/* Styles de la partie contenant le sélecteur */
 .item_picker {clear:#GET{left};font-size:0.95em;}
-.item_picker .chemin {border-bottom:1px solid #GET{claire};margin:0.5em 0 0.25em;clear:both;}
+.item_picker .navigateur{border:1px solid #GET{claire};padding:0.2em;width:20em;} /* pas trop large pour une meilleure lecture */
+.item_picker .chemin {background:#GET{claire}; margin:0 0 0.25em 0;padding:0.3em;clear:both;}
+.item_picker .chemin .on {margin:0;}
+.item_picker a.choisir_ici {display:block;text-align:center;margin:0.2em 0;}
+.item_picker a.choisir_ici span{padding-#GET{left}:18px;background:transparent url('#CHEMIN_IMAGE{ajouter-16.png}') no-repeat [ (#GET{left}) ] center;}
+.item_picker .liste {margin:0;max-height:300px;overflow:auto;}
+.item_picker .liste .type_objet {margin:0;}
+.selecteur_type_unique .item_picker .liste .type_objet{display:none;}
+.item_picker .liste ul {list-style:none;margin:0;padding:0;}
+.item_picker .liste li {display:block;clear:both;line-height:1.1em;list-style:none;margin:0;padding:0;position:relative;}
+.item_picker .liste li:hover {background-color:[#(#GET{claire}|couleur_eclaircir)];}
+.item_picker .liste a.ouvrir {color:black;text-decoration:none;display:block;line-height:16px;margin-#GET{right}:20px;padding:0.3em 0;padding-#GET{left}:2px;padding-#GET{right}:20px;background:transparent url('#CHEMIN_IMAGE{fleche-droite-16.png}') no-repeat [ (#GET{right}) ] 0.3em;}
+.item_picker .liste a.choisir {display:block;width:16px;height:16px;position:absolute;#GET{right}:0;top:0;padding:0.3em 2px;text-indent:-10000px;background:url('#CHEMIN_IMAGE{ajouter-16.png}') no-repeat center center;}
+.item_picker .liste a:hover,.item_picker .liste a:focus {background-color:#GET{claire};}
 
 .item_picker .frame {background:#fff;border:1px solid #GET{foncee};width:159px;height:400px;float:#GET{left};overflow:auto;position:relative;}
 .cadre .cadre_padding .item_picker .frame {width:153px;}