diff --git a/ecrire/inc.php3 b/ecrire/inc.php3
index fb55bd0e6c13c9c04a36ccac31420b607ce81a8d..dbbf3aa632ee614529791d1632eb8ba2a26c9ddc 100644
--- a/ecrire/inc.php3
+++ b/ecrire/inc.php3
@@ -11,6 +11,7 @@
 \***************************************************************************/
 
 if (!defined('_ECRIRE_INC_VERSION')) include ("inc_version.php3");
+include_ecrire('inc_cookie');
 
 //
 // Determiner l'action demandee
@@ -21,14 +22,13 @@ preg_match(',^[0-9a-z_]*$,i', $_GET['exec']))
 	$exec = $_GET['exec'];
  else $exec = $SCRIPT_NAME;
 
+$var_auth ="";
 if (autoriser_sans_cookie($exec)) {
-	unset($GLOBALS['_COOKIE']);
 	if (!isset($reinstall)) $reinstall = 'non';
  } else {
 	include_ecrire ("inc_session");
-	include_ecrire('inc_cookie');
-	$var_f = include_fonction('auth');
-	if (!$var_f()) exit;
+	$var_auth = include_fonction('auth');
+	if (!$var_auth()) exit;
  } 
 
 //
@@ -122,20 +122,27 @@ bgcolor='#f8f7f3' text='#000000'
 topmargin='0' leftmargin='0' marginwidth='0' marginheight='0' frameborder='0'" .
 	($spip_lang_rtl ? " dir='rtl'" : ""));
 
-
-// Choisir la langue et charger le minimum vital pour l'affichage
+// charger l'affichage minimal et initialiser a la langue par defaut
 
 include_ecrire("inc_minipres");
 
-if ($spip_lang_ecrire = $GLOBALS['_COOKIE']['spip_lang_ecrire']
-AND $spip_lang_ecrire <> $auteur_session['lang']
-AND changer_langue($spip_lang_ecrire)) {
-	spip_query ("UPDATE spip_auteurs SET lang = '".
-		    addslashes($spip_lang_ecrire) .
-		    "' WHERE id_auteur = $connect_id_auteur");
-	$auteur_session['lang'] = $spip_lang_ecrire;
-	ajouter_session($auteur_session, $spip_session);
-}
+//  si la langue est specifiee par cookie alors ...
+if ($spip_lang_ecrire = $GLOBALS['_COOKIE']['spip_lang_ecrire']) {
+
+	// si pas authentifie, changer juste pour cette execution
+	if (!$var_auth)
+		changer_langue($spip_lang_ecrire);
+	// si authentifie, changer definitivement si ce n'est fait
+	else {	if (($spip_lang_ecrire <> $auteur_session['lang'])
+		AND changer_langue($spip_lang_ecrire)) {
+			spip_query ("UPDATE spip_auteurs SET lang = '".
+				addslashes($spip_lang_ecrire) .
+				"' WHERE id_auteur = $connect_id_auteur");
+			$auteur_session['lang'] = $spip_lang_ecrire;
+			ajouter_session($auteur_session, $spip_session);
+	       }
+	}
+ }
 
 //
 // Controle de la version, sauf si on est deja en train de s'en occuper
@@ -150,7 +157,6 @@ if (!isset($reinstall)) {
 	}
  }
 
-
 $var_f = include_fonction($exec);
 $var_f();
 
diff --git a/ecrire/inc_utils.php b/ecrire/inc_utils.php
index e0579448a92950bce34497a5f24cb31585e3b06c..71f70dd7755c85c9d67c1b16b14f00ea5ecb7f4b 100644
--- a/ecrire/inc_utils.php
+++ b/ecrire/inc_utils.php
@@ -585,7 +585,7 @@ function charger_plugins($plugins) {
 
 function autoriser_sans_cookie($nom)
 {
-  static $autsanscookie = array('aide_index', 'install', 'admin_repair');
+  static $autsanscookie = array('aide_index', 'install', 'admin_repair', 'spip_cookie');
   $nom = preg_replace('/.php[3]?$/', '', basename($nom));
   return in_array($nom, $autsanscookie);
 }