diff --git a/ecrire/inc.php3 b/ecrire/inc.php3
index 4c6c33275032ce6a2eaa028455d0d4de86fdfc02..ce62fb9977b7255c7ca668de68e26fabef4124c3 100644
--- a/ecrire/inc.php3
+++ b/ecrire/inc.php3
@@ -376,7 +376,7 @@ function calculer_rubriques_publiques() {
 		$query = "SELECT DISTINCT id_rubrique FROM spip_articles WHERE statut = 'publie'";
 	}
 	else {
-		$query = "SELECT DISTINCT id_rubrique FROM spip_articles WHERE statut = 'publie' AND date < NOW()";
+		$query = "SELECT DISTINCT id_rubrique FROM spip_articles WHERE statut = 'publie' AND date <= NOW()";
 	}
 	$result = spip_query($query);
 	while ($row = spip_fetch_array($result)) {
diff --git a/ecrire/inc_mysql.php3 b/ecrire/inc_db_mysql.php3
similarity index 80%
rename from ecrire/inc_mysql.php3
rename to ecrire/inc_db_mysql.php3
index 5764c0ce460819d8f832b1b0d436b0ed8abcebb7..88b24e99f023f5988785694270e4d7558f9f43db 100644
--- a/ecrire/inc_mysql.php3
+++ b/ecrire/inc_db_mysql.php3
@@ -2,21 +2,24 @@
 
 //
 // Ce fichier ne sera execute qu'une fois
-if (defined("_ECRIRE_INC_MYSQL")) return;
-define("_ECRIRE_INC_MYSQL", "1");
+if (defined("_ECRIRE_INC_DB_MYSQL")) return;
+define("_ECRIRE_INC_DB_MYSQL", "1");
 
-function spip_query_db($query) {
-	// return spip_query_profile($query);	// a decommenter pour chronometrer les requetes
-	// return spip_query_debug($query);		// a decommenter pour afficher toutes les erreurs
-	$suite = "";
-	if (eregi('[[:space:]](VALUES|WHERE)[[:space:]].*$', $query, $regs)) {
-		$suite = $regs[0];
-		$query = substr($query, 0, -strlen($suite));
-	}
-	$query = ereg_replace('([[:space:],])spip_', '\1'.$GLOBALS['table_prefix'].'_', $query) . $suite;
-	return mysql_query($query);
+//
+// Connexion a la base
+//
+
+function spip_connect_db($host, $port, $login, $pass, $db) {
+	if ($port > 0) $host = "$host:$port";
+	@mysql_connect($host, $login, $pass);
+	return @mysql_select_db($db);
 }
 
+
+//
+// Appel de requetes SQL
+//
+
 function spip_query_profile($query) {
 	static $tt = 0;
 	$suite = "";
@@ -52,17 +55,34 @@ function spip_query_debug($query) {
 	return $r;
 }
 
-function spip_fetch_array($r='') {
+function spip_query_db($query) {
+	// return spip_query_profile($query);	// a decommenter pour chronometrer les requetes
+	// return spip_query_debug($query);		// a decommenter pour afficher toutes les erreurs
+	$suite = "";
+	if (eregi('[[:space:]](VALUES|WHERE)[[:space:]].*$', $query, $regs)) {
+		$suite = $regs[0];
+		$query = substr($query, 0, -strlen($suite));
+	}
+	$query = ereg_replace('([[:space:],])spip_', '\1'.$GLOBALS['table_prefix'].'_', $query) . $suite;
+	return mysql_query($query);
+}
+
+
+//
+// Recuperation des resultats
+//
+
+function spip_fetch_array($r) {
 	if ($r)
 		return mysql_fetch_array($r);
 }
 
-function spip_fetch_object($r='') {
+function spip_fetch_object($r) {
 	if ($r)
 		return mysql_fetch_object($r);
 }
 
-function spip_fetch_row($r='') {
+function spip_fetch_row($r) {
 	if ($r)
 		return mysql_fetch_row($r);
 }
@@ -75,12 +95,12 @@ function spip_sql_errno() {
 	return mysql_errno();
 }
 
-function spip_num_rows($r='') {
+function spip_num_rows($r) {
 	if ($r)
 		return mysql_num_rows($r);
 }
 
-function spip_free_result($r='') {
+function spip_free_result($r) {
 	if ($r)
 		return mysql_free_result($r);
 }
@@ -89,4 +109,6 @@ function spip_insert_id() {
 	return mysql_insert_id();
 }
 
-?>
\ No newline at end of file
+
+
+?>
diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3
index 2c86bd9c7ace3640e1c35cc362daa67ea2f4eba3..942e8a1e9b08991c5747cabdb4d15c13aeb7a802 100644
--- a/ecrire/inc_version.php3
+++ b/ecrire/inc_version.php3
@@ -32,14 +32,6 @@ error_reporting(E_ALL ^ E_NOTICE);
 
 $table_prefix = "spip";
 
-function spip_query($query) {
-	include_ecrire("inc_mysql.php3");
-	include_ecrire("inc_connect.php3");
-	if (!$GLOBALS['db_ok'])
-		return;
-	return spip_query_db($query);
-}
-
 //
 // Infos de version PHP
 //
@@ -239,6 +231,27 @@ function include_ecrire($file) {
 	$GLOBALS['included_files'][$file] = 1;
 }
 
+
+$flag_connect = file_exists(($flag_ecrire ? "" : "ecrire/")."inc_connect.php3");
+
+function spip_query($query) {
+	if ($GLOBALS['flag_connect'] && !$GLOBALS['db_ok']) {
+		include_ecrire("inc_connect.php3");
+		if (!$GLOBALS['db_ok'])
+			return;
+		if ($GLOBALS['spip_connect_version'] < 0.1) {
+			if (!$GLOBALS['flag_ecrire']) {
+				$GLOBALS['db_ok'] = false;
+				return;
+			}
+			@Header("Location: upgrade.php3?reinstall=oui");
+			exit;
+		}
+	}
+	return spip_query_db($query);
+}
+
+
 //
 // Infos de config PHP
 //
@@ -609,13 +622,13 @@ function email_valide($adresse) {
 		return $valide;
 	}
 
-	return (eregi( 
+	return (eregi(
 		'^[-!#$%&\'*+\\./0-9=?a-z^_`{|}~]+'.	// nom d'utilisateur
 		'@'.									// @
 		'([-0-9a-z]+\.)+' .						// hote, sous-domaine
-		'([0-9a-z]){2,4}$',						// tld 
+		'([0-9a-z]){2,4}$',						// tld
 		trim($adresse)));
-} 
+}
 
 
 ?>
diff --git a/ecrire/install.php3 b/ecrire/install.php3
index 45b437d3f43724bb9397c81550d096c10a546b0e..1046dec735926d27718e6c90d46a548ef6bbff16 100644
--- a/ecrire/install.php3
+++ b/ecrire/install.php3
@@ -1,7 +1,7 @@
 <?php
 
 include ("inc_version.php3");
-include_ecrire ("inc_mysql.php3");
+//include_ecrire ("inc_db_mysql.php3");
 include_ecrire ("inc_presentation.php3");
 
 if (file_exists("inc_connect.php3")) {
@@ -35,7 +35,7 @@ if ($etape == 6) {
 		$result = spip_query_db($query);
 		unset($id_auteur);
 		while ($row = spip_fetch_array($result)) $id_auteur = $row['id_auteur'];
-		
+
 		$mdpass = md5($pass);
 		$htpass = generer_htpass($pass);
 
@@ -81,7 +81,7 @@ else if ($etape == 5) {
 
 	echo "<BR><FONT FACE='Verdana,Arial,Helvetica,sans-serif' SIZE=3>Cinqui&egrave;me &eacute;tape : <B>Informations personnelles</B></FONT>";
 	echo "<P>";
-	
+
 	echo "<b>Le syst&egrave;me va maintenant vous cr&eacute;er un acc&egrave;s personnalis&eacute; au site.</b>";
 	echo aide ("install5");
 	echo "<p>(Note : s'il s'agit d'une r&eacute;installation, et que votre acc&egrave;s marche toujours, vous pouvez ";
@@ -94,7 +94,7 @@ else if ($etape == 5) {
 	echo "<B>Signature</B><BR>";
 	echo "(Votre nom ou votre pseudo)<BR>";
 	echo "<INPUT TYPE='text' NAME='nom' CLASS='formo' VALUE=\"$nom\" SIZE='40'><P>";
-		
+
 	echo "<B>Votre adresse email</B><BR>";
 	echo "<INPUT TYPE='text' NAME='email' CLASS='formo' VALUE=\"$email\" SIZE='40'></fieldset><P>\n";
 
@@ -102,7 +102,7 @@ else if ($etape == 5) {
 	echo "<B>Votre login</B><BR>";
 	echo "(Plus de 3 caract&egrave;res)<BR>";
 	echo "<INPUT TYPE='text' NAME='login' CLASS='formo' VALUE=\"$login\" SIZE='40'><P>\n";
-	
+
 	echo "<B>Votre mot de passe</B> <BR>";
 	echo "(Plus de 5 caract&egrave;res)<BR>";
 	echo "<INPUT TYPE='text' NAME='pass' CLASS='formo' VALUE=\"$pass\" SIZE='40'></fieldset><P>\n";
@@ -130,6 +130,9 @@ else if ($etape == 4) {
 
 	install_debut_html();
 
+	// Necessaire pour appeler les fonctions SQL wrappees
+	include_ecrire("inc_db_mysql.php3");
+
 	echo "<BR><FONT FACE='Verdana,Arial,Helvetica,sans-serif' SIZE=3>Quatri&egrave;me &eacute;tape : <B>Cr&eacute;ation des tables de la base</B></FONT>";
 	echo "<P>";
 
@@ -139,7 +142,7 @@ else if ($etape == 4) {
 
 	if ($choix_db == "new_spip") {
 		$sel_db = $table_new;
-		mysql_create_db($sel_db);		
+		mysql_create_db($sel_db);
 	}
 	else {
 		$sel_db = $choix_db;
@@ -155,15 +158,15 @@ else if ($etape == 4) {
 
 	echo "-->";
 
-	
+
 	if ($result_ok) {
 		$conn = "<"."?php\n";
 		$conn .= "if (defined(\"_ECRIRE_INC_CONNECT\")) return;\n";
 		$conn .= "define(\"_ECRIRE_INC_CONNECT\", \"1\");\n";
-		$conn .= "\$GLOBALS['db_ok'] = true;\n";
-		$conn .= "@mysql_connect('$adresse_db','$login_db','$pass_db');\n";
-		$conn .= "@mysql_select_db('$sel_db');\n";
-		$conn .= "\$GLOBALS['db_ok'] &= !!@spip_num_rows(@spip_query_db('SELECT COUNT(*) FROM spip_meta'));\n";
+		$conn .= "\$GLOBALS['spip_connect_version'] = 0.1;\n";
+		$conn .= "include_ecrire('inc_db_mysql.php3');\n";
+		$conn .= "@spip_connect_db('$adresse_db','','$login_db','$pass_db','$sel_db');\n";
+		$conn .= "\$GLOBALS['db_ok'] = !!@spip_num_rows(@spip_query_db('SELECT COUNT(*) FROM spip_meta'));\n";
 		$conn .= "?".">";
 		$myFile = fopen("inc_connect_install.php3", "wb");
 		fputs($myFile, $conn);
@@ -206,12 +209,11 @@ else if ($etape == 3) {
 
 	echo "<fieldset><label><B>Choisissez votre base :</B><BR></label>";
 
-	if ($result AND (@spip_num_rows($result) > 0)) {
+	if ($result AND (($n = @mysql_num_rows($result)) > 0)) {
 		echo "<B>Le serveur MySQL contient plusieurs bases de donn&eacute;es.</B><P> <B>S&eacute;lectionnez</B> ci-apr&egrave;s celle qui vous a &eacute;t&eacute; attribu&eacute;e par votre h&eacute;bergeur:";
-		echo "<UL>";	
-		$i=0;
+		echo "<UL>";
 		$bases = "";
-		while ($i < spip_num_rows($result)) {
+		for ($i = 0; $i < $n; $i++) {
 			$table_nom = mysql_dbname($result, $i);
 			$base = "<INPUT NAME=\"choix_db\" VALUE=\"".$table_nom."\" TYPE=Radio id='tab$i'";
 			$base_fin = "><label for='tab$i'>".$table_nom."</label><BR>\n";
@@ -222,7 +224,6 @@ else if ($etape == 3) {
 			else {
 				$bases .= "$base$base_fin\n";
 			}
-			$i++;
 		}
 		echo $bases."</UL>";
 		echo "ou... ";
@@ -265,9 +266,9 @@ else if ($etape == 2) {
 	$link = mysql_connect("$adresse_db","$login_db","$pass_db");
 	$db_connect = mysql_errno();
 	echo "-->";
-	
+
 	echo "<P>";
-	
+
 	if (($db_connect=="0") && $link){
 		echo "<B>La connexion a r&eacute;ussi.</B><P> Vous pouvez passer &agrave; l'&eacute;tape suivante.";
 
@@ -287,7 +288,7 @@ else if ($etape == 2) {
 	}
 
 	install_fin_html();
-		
+
 }
 else if ($etape == 1) {
 	install_debut_html();
@@ -302,13 +303,18 @@ else if ($etape == 1) {
 	$login_db = $login_hebergeur;
 	$pass_db = '';
 
-	// Recuperer les anciennes donnees (si presentes)
+	// Recuperer les anciennes donnees pour plus de facilite (si presentes)
 	if (file_exists("inc_connect_install.php3")) {
 		$s = @join('', @file("inc_connect_install.php3"));
-		if (ereg('mysql_connect\("(.*)","(.*)","(.*)"\)', $s, $regs)) {
+		if (ereg("mysql_connect\([\"'](.*)[\"'],[\"'](.*)[\"'],[\"'](.*)[\"']\)", $s, $regs)) {
 			$adresse_db = $regs[1];
 			$login_db = $regs[2];
 		}
+		else if (ereg("spip_connect_db\('(.*)','(.*)','(.*)','(.*)','(.*)'\)", $s, $regs)) {
+			$adresse_db = $regs[1];
+			if ($port_db = $regs[2]) $adresse_db .= ':'.$port_db;
+			$login_db = $regs[3];
+		}
 	}
 
 	echo "<p><FORM ACTION='install.php3' METHOD='post'>";
diff --git a/ecrire/upgrade.php3 b/ecrire/upgrade.php3
index f838a83f6b99be6270699f97dfb97b63ca10c9ea..f40594062af99bdce7eb62f1b8e97c4e80f68d8c 100644
--- a/ecrire/upgrade.php3
+++ b/ecrire/upgrade.php3
@@ -3,6 +3,36 @@
 include ("inc_version.php3");
 
 
+// Si reinstallation necessaire, message ad hoc
+if ($reinstall == 'oui') {
+	if (!file_exists("inc_connect.php3")) {
+		Header("Location: install.php3");
+		exit;
+	}
+
+	@copy("inc_connect.php3", "inc_connect_install.php3");
+
+	include_ecrire("inc_presentation.php3");
+	install_debut_html("Mise &agrave; niveau de SPIP");
+	echo "<p><b>Vous avez install&eacute; une nouvelle version de SPIP.</b><p> ";
+	echo "Cette nouvelle version n&eacute;cessite une mise &agrave; jour plus ";
+	echo "compl&egrave;te qu'&agrave; l'accoutum&eacute;e. ";
+	echo "Si vous &ecirc;tes webmestre du site, veuillez effacer le fichier ";
+	echo "<tt>inc_connect.php3</tt> du r&eacute;pertoire <tt>ecrire</tt> ";
+	echo "et reprendre l'installation afin de mettre &agrave; jour vos ";
+	echo "param&egrave;tres de connexion &agrave; la base de donn&eacute;es.";
+
+	$link = new Link();
+	echo "<p><div align='right'>";
+	echo $link->getForm('GET');
+	echo "<input type='submit' name='submit' value=\"Relancer l'installation\" class='fondl'>";
+	echo "</form>\n";
+
+	install_fin_html();
+	exit;
+}
+
+
 include_ecrire ("inc_auth.php3");
 include_ecrire ("inc_admin.php3");
 include_ecrire ("inc_acces.php3");
@@ -12,12 +42,12 @@ include_ecrire ("inc_filtres.php3");
 
 $upgrade_titre = "mise &agrave; niveau de votre base MySQL";
 
-// commentaire standard upgrade
+// Commentaire standard upgrade
 $commentaire = "Vous venez de mettre &agrave; jour les fichiers SPIP.
 	Il faut maintenant mettre &agrave; niveau la base de donn&eacute;es
 	du site.";
 
-// erreur downgrade (cas de double installation de fichiers SPIP sur une meme base)
+// Erreur downgrade (cas de double installation de fichiers SPIP sur une meme base)
 if ($spip_version < (double) lire_meta('version_installee'))
 	$commentaire = "{{Attention!}} Vous avez install&eacute; une version
 		des fichiers SPIP {ant&eacute;rieure} &agrave; celle qui se trouvait
@@ -25,7 +55,7 @@ if ($spip_version < (double) lire_meta('version_installee'))
 		perdue et votre site ne fonctionnera plus.<br>{{R&eacute;installez les
 		fichiers de SPIP.}}";
 
-// qu'est-ce que tu fais ici?
+// Qu'est-ce que tu fais ici?
 if ($spip_version == (double) lire_meta('version_installee')) {
 	@header("Location: index.php3");
 	exit;
diff --git a/inc-cache.php3 b/inc-cache.php3
index 0e8ddf5a7a4b1f6627cdf6e10c912229adb6f4a6..901e239406af0a018ac672b869a56aec7ca1d013 100644
--- a/inc-cache.php3
+++ b/inc-cache.php3
@@ -62,7 +62,7 @@ function utiliser_cache($chemin_cache, $delais) {
 	$use_cache &= empty($HTTP_POST_VARS);
 
 	if (!$use_cache) {
-		include_ecrire("inc_mysql.php3");
+//		include_ecrire("inc_mysql.php3");
 		include_ecrire("inc_connect.php3");
 		if (!$GLOBALS['db_ok']) $use_cache = true;
 	}
@@ -122,4 +122,4 @@ function purger_repertoire($dir, $age, $regexp = '') {
 	closedir($handle);
 }
 
-?>
\ No newline at end of file
+?>
diff --git a/inc-stats.php3 b/inc-stats.php3
index a2da606dcc0a128e45c34f21f16c809102c13899..e7635d28d9a4b29bf1011a8798f7b15b18ca9b67 100644
--- a/inc-stats.php3
+++ b/inc-stats.php3
@@ -7,7 +7,7 @@ define("_INC_STATS", "1");
 
 function ecrire_stats() {
 	global $id_article, $id_breve, $id_rubrique, $admin_ok;
-	include_ecrire("inc_mysql.php3");
+//	include_ecrire("inc_mysql.php3");
 	include_ecrire("inc_connect.php3");
 	if (!$GLOBALS['db_ok'])
 		return;