diff --git a/ecrire/exec/upgrade.php b/ecrire/exec/upgrade.php
index ad2229d982275b87d634aec065e1853322d8ecbc..d3e40213538b5c9bb70f93826414b2c22aeeb371 100644
--- a/ecrire/exec/upgrade.php
+++ b/ecrire/exec/upgrade.php
@@ -24,16 +24,17 @@ function exec_upgrade_dist() {
 
 	// Si reinstallation necessaire, message ad hoc
 	if (_request('reinstall') == 'oui') {
-
-		@copy(_FILE_CONNECT, _FILE_CONNECT_INS);
-
-		echo minipres(_T('titre_page_upgrade'),
+		include_spip('inc/minipres');
+		$r = minipres(_T('titre_page_upgrade'),
 				"<p><b>"
 				. _T('texte_nouvelle_version_spip_1')
 				. "</b><p> "
 				. _T('texte_nouvelle_version_spip_2',
 				   array('connect' => '<tt>' . _FILE_CONNECT . '</tt>'))
 				. generer_form_ecrire('upgrade', "<input type='hidden' name='reinstall' value='non' />",'',	_T('bouton_relancer_installation')));
+		echo $r;
+		
+		@rename(_FILE_CONNECT, _FILE_CONNECT_TMP);
 		exit;
 	}
 
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 9750ea42c6cd36b0513feadaa2946f18e954bd93..de04cde98916004da33fc87df1bf0a40fd827ce5 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -246,11 +246,9 @@ function spip_connect($serveur='') {
 	$install = (_request('exec') == 'install');
 
 	$f = (!preg_match('/^\w*$/', $serveur))	? ''
-	  : (($serveur AND !$install) ?
-	  (_FILE_CONNECT_INS . $serveur . '.php')
-	  : (_FILE_CONNECT ?  _FILE_CONNECT 
-	    : ($install ? (_FILE_CONNECT_INS .  '.php')
-	       : '')));
+	: (($serveur AND !$install) ?
+		( _DIR_ETC . _FILE_CONNECT_INS . $serveur . '.php')
+		: (_FILE_CONNECT ? _FILE_CONNECT : _FILE_CONNECT_TMP));
 
 	unset($GLOBALS['db_ok']);
 	unset($GLOBALS['spip_connect_version']);
@@ -268,6 +266,7 @@ function spip_connect($serveur='') {
 	// initialisation de l'alphabet utilise dans les connexions SQL
 	// si l'installation l'a determine.
 	// Celui du serveur principal l'impose aux serveurs secondaires
+	// s'ils le connaissent
 
 	if (!$serveur) {
 		$charset = spip_connect_main($GLOBALS['db_ok']);
@@ -282,7 +281,8 @@ function spip_connect($serveur='') {
 	}
 	if ($charset != -1) {
 		$f = $GLOBALS['db_ok']['set_charset'];
-		$f($charset, $serveur);
+		if (function_exists($f))
+			$f($charset, $serveur);
 	}
 	return $connexions[$index];
 }
@@ -1196,19 +1196,24 @@ function spip_initialisation($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) {
 		$GLOBALS['test_dirs'] =  array($pa, $ti, $ta);
 
 	// Le fichier de connexion a la base de donnees
-	define('_FILE_CONNECT_INS', _DIR_ETC . 'connect');
+	// tient compte des anciennes versions (inc_connect...)
+	define('_FILE_CONNECT_INS', 'connect');
 	define('_FILE_CONNECT',
-		(@is_readable($f = _FILE_CONNECT_INS . '.php') ? $f
+		(@is_readable($f = _DIR_ETC . _FILE_CONNECT_INS . '.php') ? $f
 	:	(@is_readable($f = _DIR_RESTREINT . 'inc_connect.php') ? $f
 	:	(@is_readable($f = _DIR_RESTREINT . 'inc_connect.php3') ? $f
 	:	false))));
 
 	// Le fichier de reglages des droits
-	define('_FILE_CHMOD_INS', _DIR_ETC . 'chmod');
+	define('_FILE_CHMOD_INS', 'chmod');
 	define('_FILE_CHMOD',
-		(@is_readable($f = _FILE_CHMOD_INS . '.php') ? $f
+		(@is_readable($f = _DIR_ETC . _FILE_CHMOD_INS . '.php') ? $f
 	:	false));
 
+	define('_FILE_TMP_SUFFIX', '.tmp.php');
+	define('_FILE_CONNECT_TMP', _DIR_ETC . _FILE_CONNECT_INS . _FILE_TMP_SUFFIX);
+	define('_FILE_CHMOD_TMP', _DIR_ETC . _FILE_CHMOD_INS . _FILE_TMP_SUFFIX);
+
 	// Definition des droits d'acces en ecriture
 	if (!defined('_SPIP_CHMOD')) {
 		if(_FILE_CHMOD)
diff --git a/ecrire/install/etape_1.php b/ecrire/install/etape_1.php
index 2453d89ca6d6791561893c4261de03c067137f4e..2e835980e54fe8ed56843a1c731c3d268c213093 100644
--- a/ecrire/install/etape_1.php
+++ b/ecrire/install/etape_1.php
@@ -24,8 +24,8 @@ function install_etape_1_dist()
 
 	$chmod = (isset($_GET['chmod']) AND preg_match(',^[0-9]+$,', $_GET['chmod']))? sprintf('%04o', $_GET['chmod']):'0777';
 	// Recuperer les anciennes donnees pour plus de facilite (si presentes)
-	if (@file_exists(_FILE_CONNECT_INS . _FILE_TMP . '.php')) {
-		$s = @join('', @file(_FILE_CONNECT_INS . _FILE_TMP . '.php'));
+	if (@file_exists(_FILE_CONNECT_TMP)) {
+		$s = @join('', @file(_FILE_CONNECT_TMP));
 		if (preg_match("#mysql_connect\([\"'](.*)[\"'],[\"'](.*)[\"'],[\"'](.*)[\"']\)#", $s, $regs)) {
 			$adresse_db = $regs[1];
 			$login_db = $regs[2];
@@ -36,8 +36,8 @@ function install_etape_1_dist()
 			$login_db = $regs[3];
 		}
 	}
-	if(@file_exists(_FILE_CHMOD_INS . _FILE_TMP . '.php')){
-		$s = @join('', @file(_FILE_CHMOD_INS . _FILE_TMP . '.php'));
+	if(@file_exists(_FILE_CHMOD_TMP)){
+		$s = @join('', @file(_FILE_CHMOD_TMP));
 		if(preg_match("#define\('_SPIP_CHMOD', (.*)\)#", $s, $regs)) {
 			$chmod = $regs[1]; 
 		}
diff --git a/ecrire/install/etape_3.php b/ecrire/install/etape_3.php
index cdb54b18504759a1f7f8019e729ca4e21e4067bf..cbd173f6541f7fa8ed741ed331e7d9964a579566 100644
--- a/ecrire/install/etape_3.php
+++ b/ecrire/install/etape_3.php
@@ -123,7 +123,8 @@ function install_bases(){
 			WHERE nom='version_installee'", $server_db);
 	  // eliminer la derniere operation d'admin mal terminee
 	  // notamment la mise a jour 
-	  @$fquery("DELETE FROM spip_meta WHERE nom='import_all' OR  nom='admin'", $server_db);	}
+	  @$fquery("DELETE FROM spip_meta WHERE nom='import_all' OR  nom='admin'", $server_db);
+	}
 
 	$ligne_rappel = ($server_db != 'mysql') ? ''
 	: test_rappel_nom_base_mysql($server_db);
@@ -132,7 +133,7 @@ function install_bases(){
 	if (!$result_ok) return "<!--\n$nouvelle $ligne_rappel\n-->";
 
 	if($chmod) {
-		install_fichier_connexion(_FILE_CHMOD_INS . _FILE_TMP . '.php', "@define('_SPIP_CHMOD', ". sprintf('0%3o',$chmod).");\n");
+		install_fichier_connexion(_FILE_CHMOD_TMP, "@define('_SPIP_CHMOD', ". sprintf('0%3o',$chmod).");\n");
 	}
 
 	if (preg_match(',(.*):(.*),', $adresse_db, $r))
@@ -147,7 +148,7 @@ function install_bases(){
 	. addcslashes($pass_db, "'\\") . "','$sel_db'"
 	. ",'$server_db', '$table_prefix');\n";
 
-	install_fichier_connexion(_FILE_CONNECT_INS . _FILE_TMP . '.php', $conn);
+	install_fichier_connexion(_FILE_CONNECT_TMP, $conn);
 	return '';
 }
 
@@ -224,13 +225,13 @@ function install_etape_3_dist()
 		$res .= "<p class='resultat'><b>"._T('avis_operation_echec')."</b></p>"._T('texte_operation_echec');
 	
 	else {
-		if (file_exists(_FILE_CONNECT_INS . _FILE_TMP . '.php'))
-			include(_FILE_CONNECT_INS . _FILE_TMP . '.php');
+		if (file_exists(_FILE_CONNECT_TMP))
+			include(_FILE_CONNECT_TMP);
 		else
 			redirige_par_entete(generer_url_ecrire('install'));
 	
-		if (file_exists(_FILE_CHMOD_INS . _FILE_TMP . '.php'))
-			include(_FILE_CHMOD_INS . _FILE_TMP . '.php');
+		if (file_exists(_FILE_CHMOD_TMP))
+			include(_FILE_CHMOD_TMP);
 		else
 			redirige_par_entete(generer_url_ecrire('install'));
 
@@ -255,7 +256,8 @@ function install_etape_3_dist()
 function test_rappel_nom_base_mysql($server_db)
 {
 	$GLOBALS['mysql_rappel_nom_base'] = true;
-	$ok = sql_insert('spip_meta', "(nom,valeur)", "('mysql_rappel_nom_base', 'test')",  array(), $server_db);
+	sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
+	$ok = spip_query("INSERT INTO spip_meta (nom,valeur) VALUES ('mysql_rappel_nom_base', 'test')", $server_db);
 
 	if ($ok) {
 		sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
diff --git a/ecrire/install/etape_4.php b/ecrire/install/etape_4.php
index a1184396612c0909896f436465946486888d2a89..42e69a99ba9fe884ce2908f21c95908c17722c51 100644
--- a/ecrire/install/etape_4.php
+++ b/ecrire/install/etape_4.php
@@ -36,23 +36,14 @@ function install_etape_4_dist()
 		exit;
 	}
 
-	if (@file_exists(_FILE_CHMOD_INS . _FILE_TMP . '.php'))
-		include(_FILE_CHMOD_INS . _FILE_TMP . '.php');
+	if (@file_exists(_FILE_CHMOD_TMP))
+		include(_FILE_CHMOD_TMP);
 	else
 		redirige_par_entete(generer_url_ecrire('install'));
 
-	if (!@file_exists(_FILE_CONNECT_INS . _FILE_TMP . '.php'))
+	if (!@file_exists(_FILE_CONNECT_TMP))
 		redirige_par_entete(generer_url_ecrire('install'));
 
-	// Avec ce qui suit, spip_connect et consorts vont marcher.
-
-	if (!@rename(_FILE_CONNECT_INS . _FILE_TMP . '.php',
-		    _DIR_ETC . 'connect.php')) {
-		copy(_FILE_CONNECT_INS . _FILE_TMP . '.php', 
-		     _DIR_ETC . 'connect.php');
-		spip_unlink(_FILE_CONNECT_INS . _FILE_TMP . '.php');
-	}
-
 	echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"');
 
 	echo info_etape(_T('info_derniere_etape'),
@@ -110,17 +101,25 @@ function install_etape_4_dist()
 	spip_unlink($htpasswd."-admin");
 	ecrire_acces();
 
-	if (!@rename(_FILE_CHMOD_INS . _FILE_TMP . '.php',
-		    _DIR_ETC . 'chmod.php')) {
-		copy(_FILE_CHMOD_INS . _FILE_TMP . '.php', 
-		     _DIR_ETC . 'chmod.php');
-		spip_unlink(_FILE_CHMOD_INS . _FILE_TMP . '.php');
-	}
-
-	// et on l'envoie dans l'espace prive
+	// on l'envoie dans l'espace prive
 	echo generer_form_ecrire('accueil', bouton_suivant());
 	echo info_progression_etape(4,'etape_','install/');
 	echo install_fin_html();
+
+	// et on perennise
+
+	$f = str_replace( _FILE_TMP_SUFFIX, '.php', _FILE_CHMOD_TMP);
+	if (!@rename(_FILE_CHMOD_TMP, $f)) {
+		if (@copy(_FILE_CHMOD_TMP, $f))
+			spip_unlink(_FILE_CHMOD_TMP);
+	}
+
+	$f = str_replace( _FILE_TMP_SUFFIX, '.php', _FILE_CONNECT_TMP);
+	if (!@rename(_FILE_CONNECT_TMP, $f)) {
+		if (@copy(_FILE_CONNECT_TMP, $f))
+			@spip_unlink(_FILE_CONNECT_TMP);
+	}
+
 }
 
 ?>
diff --git a/ecrire/install/etape_chmod.php b/ecrire/install/etape_chmod.php
index 44a7479a82bd2211b91d63fb5336cf45aa0ac972..86ce36384d7bbab819025fb9415c818d0a321d6f 100644
--- a/ecrire/install/etape_chmod.php
+++ b/ecrire/install/etape_chmod.php
@@ -68,7 +68,7 @@ function test_ecrire($my_dir) {
 
 //
 // tester les droits en ecriture sur les repertoires
-// rajouter celui passer dans l'url ou celui du source (a l'installation)
+// rajouter celui passe dans l'url ou celui du source (a l'installation)
 //
 
 function install_etape_chmod_dist()
@@ -82,7 +82,7 @@ function install_etape_chmod_dist()
 		if (!in_array($test_dir, $test_dirs)) $test_dirs[] = _DIR_RACINE  . $test_dir;
 	} else {
 		if (!_FILE_CONNECT)
-			$test_dirs[] = dirname(_FILE_CONNECT_INS).'/';
+			$test_dirs[] = _DIR_ETC;
 	}
 
 	$bad_dirs = array();
diff --git a/ecrire/install/etape_ldap4.php b/ecrire/install/etape_ldap4.php
index 387c22826eb421b93f48d9cd346c15125dde6b21..74029bc09079a259e0a41b12b495678ac6683eca 100644
--- a/ecrire/install/etape_ldap4.php
+++ b/ecrire/install/etape_ldap4.php
@@ -41,7 +41,7 @@ function install_etape_ldap4_dist()
 	else {
 		info_etape(_T('info_reglage_ldap'));
 
-		lire_fichier(_FILE_CONNECT_INS . _FILE_TMP . '.php', $conn);
+		lire_fichier(_FILE_CONNECT_TMP, $conn);
 		if ($p = strpos($conn, '?'.'>')) 
 			$conn = substr($conn, 0, $p);
 		if (!strpos($conn, 'spip_connect_ldap')) {
@@ -59,7 +59,7 @@ function install_etape_ldap4_dist()
 			$conn .= "\$GLOBALS['ldap_present'] = true;\n";
 		}
 		$conn .= "?".">";
-		ecrire_fichier(_FILE_CONNECT_INS . _FILE_TMP . '.php', $conn);
+		ecrire_fichier(_FILE_CONNECT_TMP, $conn);
 		$statuts = liste_statuts_ldap();
 		$statut_ldap = defined('_INSTALL_STATUT_LDAP')
 		? _INSTALL_STATUT_LDAP
diff --git a/ecrire/install/etape_ldap5.php b/ecrire/install/etape_ldap5.php
index 6d9e6becec0954ec2ab42eb3b9b1b08ccb318f9e..c686191d7fb8994439faf642bf1ad08720b7c720 100644
--- a/ecrire/install/etape_ldap5.php
+++ b/ecrire/install/etape_ldap5.php
@@ -18,8 +18,8 @@ function install_etape_ldap5_dist()
 {
 	//  _FILE_CONNECT n'existe pas encore
 
-	if (@file_exists(_FILE_CONNECT_INS . _FILE_TMP . '.php'))
-		include(_FILE_CONNECT_INS . _FILE_TMP . '.php');
+	if (@file_exists(_FILE_CONNECT_TMP))
+		include(_FILE_CONNECT_TMP);
 	else
 		redirige_par_entete(generer_url_ecrire('install'));