diff --git a/ecrire/exec/auteur_infos.php b/ecrire/exec/auteur_infos.php
index 63ed4ad045c896bd40ab7d214a64de295d234c6f..e7e6631e02a44579f0ad6d4c3c914921abb262b4 100644
--- a/ecrire/exec/auteur_infos.php
+++ b/ecrire/exec/auteur_infos.php
@@ -38,8 +38,8 @@ global $ajouter_id_article,
   $statut,
   $url_site;
 
- $id_auteur = intval($id_auteur);
- $ajouter_id_article = intval($ajouter_id_article);
+	$id_auteur = intval($id_auteur);
+	$ajouter_id_article = intval($ajouter_id_article);
 	pipeline('exec_init',
 		array('args' => array(
 			'exec'=>'auteur_infos',
@@ -60,11 +60,15 @@ global $ajouter_id_article,
 		$auteur['source'] = 'spip';
 	}
 
-	// formulaire de changement de statut
-	// (faux chargement pour disposer de la fonction ci-dessous. a revoir)
-	$f = charger_fonction('instituer_auteur', 'inc');
 
-	if (!statut_modifiable_auteur($id_auteur, $auteur)) {
+// on peut se changer soi-meme
+	if  (!(($connect_id_auteur == $id_auteur) ||
+  // sinon on doit etre admin
+  // et pas admin restreint pour changer un autre admin ou creer qq
+		(($connect_statut == "0minirezo") &&
+		 ($connect_toutes_rubriques OR 
+		  ($id_auteur AND ($auteur['statut'] != "0minirezo")))))) {
+
 		gros_titre(_T('info_acces_interdit'));
 		exit;
 	}
@@ -80,7 +84,7 @@ if (strval($nom)!='') {
 	// login et mot de passe
 	$modif_login = false;
 	$old_login = $auteur['login'];
-	if (($new_login<>$old_login) AND $connect_statut == '0minirezo' AND $connect_toutes_rubriques AND $auteur['source'] == 'spip') {
+	if (($new_login<>$old_login) AND $connect_toutes_rubriques AND $auteur['source'] == 'spip') {
 		if ($new_login) {
 			if (strlen($new_login) < 4)
 				$echec .= "\n<p>"._T('info_login_trop_court');
@@ -200,18 +204,20 @@ exec_affiche_auteur_info_dist($id_auteur, $auteur,  $echec, $redirect, $ajouter_
 // http://doc.spip.org/@exec_affiche_auteur_info_dist
 function exec_affiche_auteur_info_dist($id_auteur, $auteur,  $echec, $redirect, $ajouter_id_article, $onfocus)
 {
-  global $connect_id_auteur;
+	global $connect_id_auteur;
 
-  if ($connect_id_auteur == $id_auteur)
-	debut_page($auteur['nom'], "auteurs", "perso");
-  else
-	debut_page($auteur['nom'],"auteurs","redacteurs");
+	if ($connect_id_auteur == $id_auteur)
+		debut_page($auteur['nom'], "auteurs", "perso");
+	else
+		debut_page($auteur['nom'],"auteurs","redacteurs");
 
-  echo "<br><br><br>";
+	echo "<br><br><br>";
 
-  debut_gauche();
+	debut_gauche();
 
-  cadre_auteur_infos($id_auteur, $auteur);
+  // charger ça tout de suite pour diposer de la fonction ci-dessous
+	$instituer_auteur = charger_fonction('instituer_auteur', 'inc');
+	cadre_auteur_infos($id_auteur, $auteur);
 
 	echo pipeline('affiche_gauche',
 		array('args' => array(
@@ -229,34 +235,37 @@ function exec_affiche_auteur_info_dist($id_auteur, $auteur,  $echec, $redirect,
 	);
 	debut_droite();
 
-//
-// Formulaire d'edition de l'auteur
-//
+	if ($echec){
+		debut_cadre_relief();
+		echo http_img_pack("warning.gif", _T('info_avertissement'), "width='48' height='48' align='left'");
+		echo "<font color='red'>$echec \n<p>"._T('info_recommencer')."</font>";
+		fin_cadre_relief();
+		echo "\n<p>";
+	}
 
-  if ($echec){
-	debut_cadre_relief();
-	echo http_img_pack("warning.gif", _T('info_avertissement'), "width='48' height='48' align='left'");
-	echo "<font color='red'>$echec \n<p>"._T('info_recommencer')."</font>";
-	fin_cadre_relief();
-	echo "\n<p>";
-  }
+	debut_cadre_formulaire();
+	echo generer_url_post_ecrire('auteur_infos', (!$id_auteur ? "" : "id_auteur=$id_auteur"));
+	if ($ajouter_id_article)
+		echo "<input name='ajouter_id_article' value='$ajouter_id_article' type='hidden'>\n"
+		. "\n<input name='redirect' value='$redirect' type='hidden' />"
+		. "\n<input name='redirect_ok' value='oui' type='hidden' />";
 
-  debut_cadre_formulaire();
-  formulaire_auteur_infos($id_auteur, $auteur, $onfocus, $redirect, $ajouter_id_article);
-  fin_cadre_formulaire();
-  echo "&nbsp;<p />";
+	formulaire_auteur_infos($id_auteur, $auteur, $onfocus);
+	echo "</form>";
+	echo $instituer_auteur($id_auteur, $auteur['statut'], "auteurs_edit");
 
-  echo fin_page();
-}
+	fin_cadre_formulaire();
+	echo "&nbsp;<p />";
 
+	echo fin_page();
+}
 
 
 // http://doc.spip.org/@formulaire_auteur_infos
-function formulaire_auteur_infos($id_auteur, $auteur, $onfocus, $redirect, $ajouter_id_article)
+function formulaire_auteur_infos($id_auteur, $auteur, $onfocus)
 {
   global $connect_statut, $connect_toutes_rubriques,$connect_id_auteur, $options, $champs_extra  ;
 
-	echo generer_url_post_ecrire('auteur_infos', (!$id_auteur ? "" : "id_auteur=$id_auteur"));
 
 //
 // Infos personnelles
@@ -315,7 +324,6 @@ echo "\n<p>";
 		extra_saisie($auteur['extra'], 'auteurs', $auteur['statut']);
 	}
 
-
 //
 // Login et mot de passe :
 // accessibles seulement aux admins non restreints et l'auteur lui-meme
@@ -338,66 +346,57 @@ else {
 	$edit_pass = false;
 }
 
-debut_cadre_relief("base-24.gif");
+	debut_cadre_relief("base-24.gif");
 
 // Avertissement en cas de modifs de ses propres donnees
-if (($edit_login OR $edit_pass) AND $connect_id_auteur == $id_auteur) {
-	debut_cadre_enfonce();
-	echo http_img_pack("warning.gif", _T('info_avertissement'), "width='48' height='48' align='right'");
-	echo "<b>"._T('texte_login_precaution')."</b>\n";
-	fin_cadre_enfonce();
-	echo "\n<p>";
-}
+	if (($edit_login OR $edit_pass) AND $connect_id_auteur == $id_auteur) {
+		debut_cadre_enfonce();
+		echo http_img_pack("warning.gif", _T('info_avertissement'), "width='48' height='48' align='right'");
+		echo "<b>"._T('texte_login_precaution')."</b>\n";
+		fin_cadre_enfonce();
+		echo "\n<p>";
+	}
 
 // Un redacteur n'a pas le droit de modifier son login !
-if ($edit_login) {
-	echo "<B>"._T('item_login')."</B> ";
-	echo "<font color='red'>("._T('texte_plus_trois_car').")</font> :<br />\n";
-	echo "<INPUT TYPE='text' NAME='new_login' CLASS='formo' VALUE=\"".entites_html($auteur['login'])."\" SIZE='40'><P>\n";
-}
-else {
-	echo "<fieldset style='padding:5'><legend><B>"._T('item_login')."</B><br />\n</legend><br><b>".$auteur['login']."</b> ";
-	echo "<i> ("._T('info_non_modifiable').")</i>\n<p>";
-}
+	if ($edit_login) {
+		echo "<B>"._T('item_login')."</B> ";
+		echo "<font color='red'>("._T('texte_plus_trois_car').")</font> :<br />\n";
+		echo "<INPUT TYPE='text' NAME='new_login' CLASS='formo' VALUE=\"".entites_html($auteur['login'])."\" SIZE='40'><P>\n";
+	} else {
+		echo "<fieldset style='padding:5'><legend><B>"._T('item_login')."</B><br />\n</legend><br><b>".$auteur['login']."</b> ";
+		echo "<i> ("._T('info_non_modifiable').")</i>\n<p>";
+	}
 
 // On ne peut modifier le mot de passe en cas de source externe (par exemple LDAP)
-if ($edit_pass) {
-	echo "<B>"._T('entree_nouveau_passe')."</B> ";
-	echo "<font color='red'>("._T('info_plus_cinq_car').")</font> :<br />\n";
-	echo "<INPUT TYPE='password' NAME='new_pass' CLASS='formo' VALUE=\"\" SIZE='40'><br />\n";
-	echo _T('info_confirmer_passe')."<br />\n";
-	echo "<INPUT TYPE='password' NAME='new_pass2' CLASS='formo' VALUE=\"\" SIZE='40'><P>\n";
-}
-fin_cadre_relief();
-echo "<p />";
-
-
-//
-// Apparaitre dans la liste des redacteurs connectes
-//
-
- if ($apparait) apparait_auteur_infos($id_auteur, $auteur);
+	if ($edit_pass) {
+		$res = "<B>"._T('entree_nouveau_passe')."</B> "
+		. "<font color='red'>("._T('info_plus_cinq_car').")</font> :<br />\n"
+		. "<input type='password' NAME='new_pass' CLASS='formo' VALUE=\"\" SIZE='40'><br />\n"
+		. _T('info_confirmer_passe')."<br />\n"
+		. "<INPUT TYPE='password' NAME='new_pass2' CLASS='formo' VALUE=\"\" SIZE='40'><P>\n";
+		echo $res;
+	}
+	fin_cadre_relief();
 
-echo "<INPUT NAME='ajouter_id_article' VALUE='$ajouter_id_article' TYPE='hidden'>\n";
-echo "<INPUT NAME='redirect' VALUE='$redirect' TYPE='hidden'>\n";
-echo "<INPUT NAME='redirect_ok' VALUE='oui' TYPE='hidden'>\n";
+	$res = "<p />";
 
-echo "\n<div align='right'><INPUT TYPE='submit' CLASS='fondo' NAME='Valider' VALUE='"._T('bouton_enregistrer')."'></DIV>";
+	if ($GLOBALS['connect_id_auteur'] == $id_auteur)
+		$res .= apparait_auteur_infos($id_auteur, $auteur);
 
-echo pipeline('affiche_milieu',
-	array('args' => array(
-		'exec'=>'auteur_infos',
-		'id_auteur'=>$id_auteur),
-	'data'=>'')
-);
+	$res .= "\n<div align='right'>"
+	. "\n<input type='submit' class='fondo' value='"
+	. _T('bouton_enregistrer')
+	. "'></div>"
 
-echo "</div>";
-fin_cadre_relief();
-echo "</form>";
+	. pipeline('affiche_milieu',
+		array('args' => array(
+			'exec'=>'auteur_infos',
+			'id_auteur'=>$id_auteur),
+			'data'=>''));
 
-// Afficher le formulaire de changement de statut (cf. inc_acces)
- $f = charger_fonction('instituer_auteur', 'inc');
- echo $f($id_auteur, $auteur['statut'], "auteurs_edit");
+	echo $res;
+	echo "</div>";
+	fin_cadre_relief();
 }
 
 //
@@ -407,28 +406,29 @@ echo "</form>";
 // http://doc.spip.org/@apparait_auteur_infos
 function apparait_auteur_infos($id_auteur, $auteur)
 {
-	global $connect_id_auteur ;
-	if ($connect_id_auteur == $id_auteur) {
 
-		debut_cadre_relief("messagerie-24.gif", false, "", _T('info_liste_redacteurs_connectes'));
-		
-		echo "\n<div>"._T('texte_auteur_messagerie')."</div>";	
-
-		if ($auteur['imessage']=="non"){
-			echo "<INPUT TYPE='radio' NAME='perso_activer_imessage' VALUE='oui' id='perso_activer_imessage_on'>";
-			echo " <label for='perso_activer_imessage_on'>"._T('bouton_radio_apparaitre_liste_redacteurs_connectes')."</label> ";
-			echo "<br />\n<INPUT TYPE='radio' NAME='perso_activer_imessage' VALUE='non' CHECKED id='perso_activer_imessage_off'>";
-			echo " <B><label for='perso_activer_imessage_off'>"._T('bouton_radio_non_apparaitre_liste_redacteurs_connectes')."</label></B> ";
-		} else {
-			echo "<INPUT TYPE='radio' NAME='perso_activer_imessage' VALUE='oui' id='perso_activer_imessage_on' CHECKED>";
-			echo " <B><label for='perso_activer_imessage_on'>"._T('bouton_radio_apparaitre_liste_redacteurs_connectes')."</label></B> ";
-
-			echo "<br />\n<INPUT TYPE='radio' NAME='perso_activer_imessage' VALUE='non' id='perso_activer_imessage_off'>";
-			echo " <label for='perso_activer_imessage_off'>"._T('bouton_radio_non_apparaitre_liste_redacteurs_connectes')."</label> ";
-		}
-
-	fin_cadre_relief();
-	echo "<p />";
+	if ($auteur['imessage']=="non"){
+		$res = "<input type='radio' name='perso_activer_imessage' value='oui' id='perso_activer_imessage_on'>"
+		. " <label for='perso_activer_imessage_on'>"._T('bouton_radio_apparaitre_liste_redacteurs_connectes')."</label> "
+		. "<br />\n<INPUT TYPE='radio' NAME='perso_activer_imessage' VALUE='non' CHECKED id='perso_activer_imessage_off'>"
+		. " <B><label for='perso_activer_imessage_off'>"._T('bouton_radio_non_apparaitre_liste_redacteurs_connectes')."</label></B> ";
+	} else {
+		$res = "<input type='radio' name='perso_activer_imessage' value='oui' id='perso_activer_imessage_on' checked>"
+		. " <b><label for='perso_activer_imessage_on'>"
+		. _T('bouton_radio_apparaitre_liste_redacteurs_connectes')
+		. "</label></b> "
+		. "<br />\n<input type='radio' name='perso_activer_imessage' value='non' id='perso_activer_imessage_off'>"
+		. " <label for='perso_activer_imessage_off'>"
+		. _T('bouton_radio_non_apparaitre_liste_redacteurs_connectes')
+		. "</label> ";
 	}
+
+	return debut_cadre_relief("messagerie-24.gif", true, "", _T('info_liste_redacteurs_connectes'))
+	. "\n<div>"
+	. _T('texte_auteur_messagerie')
+	. "</div>"
+	. $res
+	. fin_cadre_relief(true)
+	. "<p />";
 }
 ?>