diff --git a/ecrire/auteur_infos.php3 b/ecrire/auteur_infos.php3
index 8873e4874cedd4e0d7c5bfc8ae8f4799bf2671e8..674fbb1a26134419d69e6114109c6a1857566705 100644
--- a/ecrire/auteur_infos.php3
+++ b/ecrire/auteur_infos.php3
@@ -22,35 +22,6 @@ include_ecrire ("inc_abstract_sql.php3");
 $id_auteur = floor($id_auteur);
 
 
-//
-// Auteurs a acces restreint
-//
-function afficher_auteur_rubriques($leparent){
-	global $id_parent;
-	global $id_rubrique;
-	global $toutes_rubriques;
-	global $i;
-	
-	$i++;
- 	$query="SELECT * FROM spip_rubriques WHERE id_parent=$leparent ORDER BY 0+titre, titre";
- 	$result=spip_query($query);
-
-	while($row=spip_fetch_array($result)){
-		$my_rubrique=$row['id_rubrique'];
-		$titre=typo($row['titre']);
-	
-		if (!ereg(",$my_rubrique,","$toutes_rubriques")){
-			$espace = str_repeat("&nbsp", $i*2) . "|";
-			if ($i==1)
-				$espace = "*";
-
-			echo "<OPTION VALUE='$my_rubrique'>$espace ".supprimer_tags($titre)."\n";
-			afficher_auteur_rubriques($my_rubrique);
-		}
-	}
-	$i=$i-1;
-}
-
 // securite
 if ($connect_statut != "0minirezo" AND $connect_id_auteur != $id_auteur) {
 	gros_titre(_T('info_acces_interdit'));
@@ -195,7 +166,7 @@ if (strval($nom)!='') {
 }
 
 // Appliquer des modifications de statut
-modifier_statut_auteur($auteur, $_POST['statut'], $_POST['add_rub'], $_GET['supp_rub']);
+modifier_statut_auteur($auteur, $_POST['statut'], $_POST['id_rubrique'], $_GET['supp_rub']);
 
 
 // Si on modifie la fiche auteur, reindexer et modifier htpasswd
diff --git a/ecrire/auteurs_edit.php3 b/ecrire/auteurs_edit.php3
index 62938bbd38cdbae0e2c2c15a13ae0aa6138b2914..aba2513cece9be54152814848a99c9c5e5e173b2 100644
--- a/ecrire/auteurs_edit.php3
+++ b/ecrire/auteurs_edit.php3
@@ -21,36 +21,6 @@ function supp_auteur($id_auteur) {
 	$result=spip_query($query);
 }
 
-
-function afficher_auteur_rubriques($leparent){
-	global $id_parent;
-	global $id_rubrique;
-	global $toutes_rubriques;
-	global $i;
-	
-	$i++;
- 	$query="SELECT * FROM spip_rubriques WHERE id_parent='$leparent' ORDER BY 0+titre, titre";
- 	$result=spip_query($query);
-
-	while($row=spip_fetch_array($result)){
-		$my_rubrique=$row["id_rubrique"];
-		$titre=typo($row["titre"]);
-	
-		if (!ereg(",$my_rubrique,","$toutes_rubriques")){
-			$espace="";
-			for ($count=0;$count<$i;$count++){$espace.="&nbsp;&nbsp;";}
-			$espace .= "|";
-			if ($i==1)
-				$espace = "*";
-
-			echo "<OPTION VALUE='$my_rubrique'>$espace ".supprimer_tags($titre)."\n";
-			afficher_auteur_rubriques($my_rubrique);
-		}
-	}
-	$i=$i-1;
-}
-
-
 if (!$id_auteur = intval($id_auteur)) {
 	die ('erreur');
 }
@@ -77,7 +47,7 @@ if ($row = spip_fetch_array($result)) {
 
 
 // Appliquer des modifications de statut
-modifier_statut_auteur($row, $_POST['statut'], $_POST['add_rub'], $_GET['supp_rub']);
+modifier_statut_auteur($row, $_POST['statut'], $_POST['id_rubrique'], $_GET['supp_rub']);
 
 if ($connect_id_auteur == $id_auteur) debut_page($nom, "auteurs", "perso");
 else debut_page($nom,"auteurs","redacteurs");
@@ -165,7 +135,7 @@ debut_droite();
 
 	// Afficher le formulaire de changement de statut (cf. inc_acces.php3)
 	if ($options == 'avancees')
-		afficher_formulaire_statut_auteur ($id_auteur,
+	  afficher_formulaire_statut_auteur ($id_auteur,
 			$row['statut'],
 			"auteurs_edit.php3?id_auteur=$id_auteur");
 
diff --git a/ecrire/inc_acces.php3 b/ecrire/inc_acces.php3
index 80e6a1a873c35bcc26328e68950d8d8956e12368..573215f7a99e1cc5deb8d21c11e62e61c5be4dce 100644
--- a/ecrire/inc_acces.php3
+++ b/ecrire/inc_acces.php3
@@ -88,6 +88,59 @@ function effacer_low_sec($id_auteur) {
 }
 
 
+
+function ajax_rubriques_acces($id_parent)
+{
+	$query = spip_query("SELECT titre FROM spip_rubriques WHERE id_rubrique=$id_parent");
+	if ($row = spip_fetch_array($query)) {
+		$titre_parent = entites_html(typo($row["titre"])); 
+	} else {
+		$titre_parent = entites_html(_T("info_racine_site"));
+	}
+	
+	return  "<table width='100%'><tr width='100%'><td width='45'>" . 
+	  "<a href='#' onClick=\"javascript:if(findObj('selection_rubrique').style.display=='none') {charger_id_url_si_vide('ajax_page.php?fonction=aff_rubrique&id_rubrique=$id_rubrique','selection_rubrique');} else {findObj('selection_rubrique').style.display='none';} return true;\"><img src='img_pack/loupe.png' style='border: 0px; vertical-align: middle;' /></a> " . 
+	  "<img src='img_pack/searching.gif' id='img_selection_rubrique' style='visibility: hidden;' />" . 
+	  "</td><td>" . 
+	  "<input type='text' id='titreparent' name='titreparent' disabled='disabled' class='forml' value=\"$titre_parent\" />" . 
+	  "<input type='hidden' id='id_rubrique' name='id_rubrique' value='$id_rubrique' />" . 
+	  "</td></tr></table><div id='selection_rubrique' style='display: none;'></div>";
+
+}
+
+function choix_statut_auteur($statut)
+{
+	global $connect_toutes_rubriques;
+	return "<select name='statut' size=1 class='fondl'
+		onChange=\"setvisibility('changer_statut_auteur', this.selectedIndex ? 'hidden' : 'visible');\">" .
+
+		(!$connect_toutes_rubriques ? "" :
+			("\n<option" .
+			mySel("0minirezo",$statut) .
+			 ">" .
+			 _T('item_administrateur_2') .
+			 '</option>')) .
+	  "\n<option" .
+	  mySel("1comite",$statut) .
+	  ">" .
+	  _T('intem_redacteur') .
+	  '</option>' .
+	  (!(($statut == '6forum')
+		      OR (lire_meta('accepter_visiteurs') == 'oui')
+		      OR (lire_meta('forums_publics') == 'abo')
+	     OR spip_num_rows(spip_query("SELECT statut FROM spip_auteurs WHERE statut='6forum'"))) ? "" :
+	   ("\n<option" .
+	    mySel("6forum",$statut) .
+	    ">" .
+	    _T('item_visiteur') .
+	    '</option>')) .
+	  "\n<option" .
+	  mySel("5poubelle",$statut) .
+	  " style='background:url(" . _DIR_IMG_PACK . "rayures-sup.gif)'>&gt; "._T('texte_statut_poubelle') .
+	  '</option>' .
+	  "</select>\n";
+}
+
 // Une fonction service qui affiche le statut de l'auteur dans l'espace prive
 function afficher_formulaire_statut_auteur ($id_auteur, $statut, $post='') {
 	global $connect_statut, $connect_toutes_rubriques, $connect_id_auteur;
@@ -118,44 +171,28 @@ function afficher_formulaire_statut_auteur ($id_auteur, $statut, $post='') {
 		debut_cadre_relief();
 
 		if ($droit) {
-
-		  if ($statut == '0minirezo') {
-			if ($admin_restreint)
-				echo bouton_block_visible("statut$id_auteur");
-			else
-				echo bouton_block_invisible("statut$id_auteur");
-		  }
-
+		  /* Neutralisation momentanee des couches. A revoir.
+		  $couches = $admin_restreint ? 
+		    bouton_block_visible("statut$id_auteur") :
+		    bouton_block_invisible("statut$id_auteur");
+		  echo $couches;
+		  */
 		  echo "<b>"._T('info_statut_auteur')." </b> ";
-		  echo "<select name='statut' size=1 class='fondl'>";
-
-		  if ($connect_toutes_rubriques)
-			echo "<OPTION".mySel("0minirezo",$statut).">"._T('item_administrateur_2');
-
-		  echo "<OPTION".mySel("1comite",$statut).">"._T('intem_redacteur');
+		  echo choix_statut_auteur($statut);
+		}
 
-		  if (($statut == '6forum')
-		      OR (lire_meta('accepter_visiteurs') == 'oui')
-		      OR (lire_meta('forums_publics') == 'abo')
-		      OR spip_num_rows(spip_query("SELECT statut
-		FROM spip_auteurs WHERE statut='6forum'")))
-			echo "<OPTION".mySel("6forum",$statut).">"._T('item_visiteur');
-		  echo "<OPTION".mySel("5poubelle",$statut).
-		    " style='background:url(" . _DIR_IMG_PACK . "rayures-sup.gif)'>&gt; "._T('texte_statut_poubelle');
+		// si pas admin au chargement, rien a montrer. 
+		echo "<div id='changer_statut_auteur'",
+		  (($statut == '0minirezo') ? '' : " style='visibility: hidden'"),
+		  '>';
 
-		  echo "</select>\n";
-		}
-		//
-		// Gestion restreinte des rubriques
-		//
-		if ($statut == '0minirezo') {
-		  echo debut_block_visible("statut$id_auteur");
-			if (!$admin_restreint) {
-#				echo debut_block_invisible("statut$id_auteur");
-				echo "<p /><div style='arial2'>\n";
+		echo "\n<p /><div style='arial2'>";
+		// si pas admin restreint au chargement, rien a calculer
+		if (!$admin_restreint) {
+			if ($statut == '0minirezo') {
 				echo _T('info_admin_gere_toutes_rubriques');
-			} else {
-				echo "<p /><div style='arial2'>\n";
+			}
+		} else {
 				echo _T('info_admin_gere_rubriques')."\n";
 				echo "<ul style='list-style-image: url(" . _DIR_IMG_PACK . "rubrique-12.gif)'>";
 				while ($row_admin = spip_fetch_array($result_admin)) {
@@ -174,32 +211,32 @@ function afficher_formulaire_statut_auteur ($id_auteur, $statut, $post='') {
 				$toutes_rubriques = ",$toutes_rubriques";
 
 				echo "</ul>";
-			}
-			if ($connect_toutes_rubriques
-			AND $connect_id_auteur != $id_auteur) {
-				echo "</div><br /><div class='arial1'>";
+		}
+		echo "</div>\n";
+		// si on a le droit de donner des droits, prevoir Ajax.
+		echo debut_block_visible("statut$id_auteur");
+		if ($connect_toutes_rubriques AND $connect_id_auteur != $id_auteur) {
+				echo "\n<div id='ajax_rubrique' class='arial1'><br />\n";
 				if (spip_num_rows($result_admin) == 0) {
 					echo "<b>"._T('info_restreindre_rubrique')."</b><br />";
 				} else {
 					echo "<b>"._T('info_ajouter_rubrique')."</b><br />";
 				}
-				echo "<INPUT NAME='id_auteur' VALUE='$id_auteur' TYPE='hidden'>";
-				echo "<SELECT NAME='add_rub' SIZE=1 CLASS='formo'>";
-				echo "<OPTION VALUE='0'>\n";
-				afficher_auteur_rubriques("0");
-				echo "</SELECT>";
+				echo "\n<input name='id_auteur' value='$id_auteur' TYPE='hidden' />";
+				echo ajax_rubriques_acces(0);
+				echo "</div>\n";
 			}
+		echo fin_block();
 
-			echo "</div>\n";
-			echo fin_block();
-		}
-
+		echo '</div>'; // fin de la balise a visibilite conditionnelle
 
 		if ($post && $droit) {
-			echo "<div align='$spip_lang_right'><input type='submit'
-			class='fondo' name='Valider'
-			value=\""._T('bouton_valider')."\" /></div>"; 
-			echo "</form>\n";
+		  echo "<div align='",
+		    $spip_lang_right,
+		    "'><input type='submit' class='fondo' value=\"",
+		    _T('bouton_valider'),
+		    "\" /></div>",
+		    "</form>\n";
 		}
 
 		fin_cadre_relief();
diff --git a/ecrire/inc_presentation.php3 b/ecrire/inc_presentation.php3
index 09985e6ebf48e25fc45376062243a51ccd6f3e2a..d8102927d9418ecc00dec37ffa40e822279eec7b 100644
--- a/ecrire/inc_presentation.php3
+++ b/ecrire/inc_presentation.php3
@@ -3400,13 +3400,9 @@ function afficher_hierarchie($id_rubrique, $parents="") {
 
 // Pour construire des menu avec SELECTED
 function mySel($varaut,$variable, $option = NULL) {
-	if (!isset($option))
-		return ' value="'.$varaut.'"'
-			. (($variable==$varaut) ? ' selected' : '');
+	$res = ' value="'.$varaut.'"' . (($variable==$varaut) ? ' selected="selected"' : '');
 
-	return "<option value='$varaut'"
-		. (($variable==$varaut) ? ' selected' : '')
-		. ">$option\n";
+	return  (!isset($option) ? $res : "<option$res>$option</option>\n");
 }