diff --git a/ecrire/exec_articles_edit.php b/ecrire/exec_articles_edit.php
index 978bf8fecc623a8cd6d33176c77f26f6870d022e..840bc080497e55f75a94c0779e6497cfe38f05ec 100644
--- a/ecrire/exec_articles_edit.php
+++ b/ecrire/exec_articles_edit.php
@@ -15,7 +15,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 include_ecrire("inc_presentation");
 include_ecrire("inc_rubriques");
 include_ecrire ("inc_documents");
-include_ecrire ("inc_barre");
+include_spip ('inc_barre');
 
 //
 // Gestion des textes trop longs (limitation brouteurs)
diff --git a/ecrire/exec_breves_edit.php b/ecrire/exec_breves_edit.php
index a09dafd4100ca74c19834983f5545f6865ac00e4..1e84150dd42709dd46038442517a6e8a3c10f1b5 100644
--- a/ecrire/exec_breves_edit.php
+++ b/ecrire/exec_breves_edit.php
@@ -15,7 +15,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 include_ecrire("inc_presentation");
 include_ecrire("inc_rubriques");
 include_ecrire ("inc_documents");
-include_ecrire ("inc_barre");
+include_spip ('inc_barre');
 
 function breves_edit_dist()
 {
diff --git a/ecrire/exec_forum_envoi.php b/ecrire/exec_forum_envoi.php
index 2c04671327759a0697657c430f50e8058a36a15a..46f772d62bf026152c49ace762fe3e15ff25653d 100644
--- a/ecrire/exec_forum_envoi.php
+++ b/ecrire/exec_forum_envoi.php
@@ -13,7 +13,7 @@
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
 include_ecrire("inc_presentation");
-include_ecrire ("inc_barre");
+include_spip ('inc_barre');
 include_ecrire ("inc_forum");
 
 function forum_envoi_dist()
diff --git a/ecrire/inc_filtres.php b/ecrire/inc_filtres.php
index 84e14f2566594e03b178de007fce0ea6ee79a83e..133212dd15d70b84ba37f6d53651331b6bdf15aa 100644
--- a/ecrire/inc_filtres.php
+++ b/ecrire/inc_filtres.php
@@ -2430,7 +2430,7 @@ function barre_textarea($texte, $rows, $cols) {
 		return "<textarea name='texte' rows='$rows' class='forml' cols='$cols'>$texte</textarea>";
 
 	$num_textarea++;
-	include_ecrire('inc_barre');
+	include_spip ('inc_barre');
 	return afficher_barre("document.getElementById('textarea_$num_textarea')", true) .
 	  "
 <textarea name='texte' rows='$rows' class='forml' cols='$cols'
diff --git a/ecrire/inc_majbase.php b/ecrire/inc_majbase.php
index e0eb5b9bdd0d5dc5071b8b9bdae2f0ab49369153..d337ae1bf5618f850cd58acdc12ad68b4d123c7f 100644
--- a/ecrire/inc_majbase.php
+++ b/ecrire/inc_majbase.php
@@ -819,7 +819,7 @@ function maj_base() {
 		spip_query("ALTER TABLE spip_syndic ADD idx ENUM('', '1', 'non', 'oui', 'idx') DEFAULT '' NOT NULL");
 		spip_query("ALTER TABLE spip_syndic ADD INDEX idx (idx)");
 		spip_query("ALTER TABLE spip_forum ADD idx ENUM('', '1', 'non', 'oui', 'idx') DEFAULT '' NOT NULL");
-		spip_query("ALTER TABLE spip_forum ADD ADD INDEX idx (idx)");
+		spip_query("ALTER TABLE spip_forum ADD INDEX idx (idx)");
 		spip_query("ALTER TABLE spip_signatures ADD idx ENUM('', '1', 'non', 'oui', 'idx') DEFAULT '' NOT NULL");
 		spip_query("ALTER TABLE spip_signatures ADD INDEX idx (idx)");
 		maj_version (1.730);
@@ -1023,7 +1023,7 @@ function maj_base() {
 		spip_query("ALTER TABLE spip_mots ADD INDEX idx (idx)");
 		spip_query("ALTER TABLE spip_rubriques ADD INDEX idx (idx)");
 		spip_query("ALTER TABLE spip_syndic ADD INDEX idx (idx)");
-		spip_query("ALTER TABLE spip_forum ADD ADD INDEX idx (idx)");
+		spip_query("ALTER TABLE spip_forum ADD INDEX idx (idx)");
 		spip_query("ALTER TABLE spip_signatures ADD INDEX idx (idx)");
 		maj_version(1.820);
 	}
@@ -1152,6 +1152,12 @@ function maj_base() {
 		maj_version(1.906);
 	}
 
+	if ($version_installee < 1.907) {
+		spip_query("ALTER TABLE spip_forum ADD INDEX idx (idx)");
+		maj_version(1.907);
+	}
+
+
 	return true;
 }
 
diff --git a/ecrire/inc_utils.php b/ecrire/inc_utils.php
index 9b5b9d85b7954aed4cff12a777c4e5373b5150b0..6a6652ff08fe3cc78b1ab16dce4b4834d0e2d454 100644
--- a/ecrire/inc_utils.php
+++ b/ecrire/inc_utils.php
@@ -18,7 +18,11 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 
 $included_files = array();
 
-function include_local($file, $silence=false) {
+// inclure un fichier "local", signifie en general qu'on suit le chemin
+// depuis le repertoire courant. Mais si le fichier est redefini dans
+// spip_matrice, on prefere spip_matrice ; et s'il n'existe pas localement
+// on le find_in_path()
+function include_local ($file, $silence=false) {
 	$nom = preg_replace("/\.php[3]?$/",'', $file);
 #	spip_log("'$nom' '$file'");
 	if (@$GLOBALS['included_files'][$nom]++)
@@ -77,6 +81,34 @@ function include_fonction($nom) {
 	}
 }
 
+//
+// une fonction destinee a remplacer include_ecrire, surchargeable
+// par $surcharge['inc_truc'] = '/chemin/vers/truc.php'
+//
+function include_spip($f) {
+	// deja charge (nom) ?
+	if (@$GLOBALS['included_files'][$f]++) return true;
+
+	// Hack pour pouvoir appeler cette fonction depuis mes_options.
+	define('_DIR_INCLUDE', _DIR_RESTREINT);
+
+	// une surcharge existe ?
+	if (!$s = $GLOBALS['surcharge'][$f]
+	// sinon, le fichier existe dans le repertoire ecrire ?
+	AND !is_readable($s = _DIR_INCLUDE . $f . '.php')
+	AND !is_readable($s = _DIR_INCLUDE . $f . '.php3')
+	// sinon, chercher dans le chemin
+	AND !$s = find_in_path($f . '.php')
+	AND !$s = find_in_path($f . '.php3'))
+		return false;
+
+	// deja charge (chemin complet) ?
+	if ($GLOBALS['included_files'][$s]++) return true;
+
+	// alors on le charge
+	include($s);
+}
+
 // un pipeline est lie a une action et une valeur
 // chaque element du pipeline est autorise a modifier la valeur
 //
@@ -804,9 +836,9 @@ function spip_register_globals() {
 			if (isset($GLOBALS[$var])) {
 				if (
 				// demande par le client
-				_request($var) !== NULL
+				$_REQUEST[$var] !== NULL
 				// et pas modifie par les fichiers d'appel
-				AND $GLOBALS[$var] == _request($var)
+				AND $GLOBALS[$var] == $_REQUEST[$var]
 				) // Alors on ne sait pas si c'est un hack
 					die ("register_globals: $var interdite");
 			}
@@ -928,6 +960,8 @@ function spip_initialisation() {
 	spip_desinfecte($_GET);
 	spip_desinfecte($_POST);
 	spip_desinfecte($_COOKIE);
+	# et _REQUEST pour que tester_variable fonctionne meme avec magic_quotes
+	spip_desinfecte($_REQUEST);
 	#	if (@ini_get('register_globals')) // pas fiable
 	spip_desinfecte($GLOBALS);
 	// a la fin supprimer la variable anti-recursion devenue inutile
@@ -935,6 +969,7 @@ function spip_initialisation() {
 	unset($_GET['spip_recursions']);
 	unset($_POST['spip_recursions']);
 	unset($_COOKIE['spip_recursions']);
+	unset($_REQUEST['spip_recursions']);
 	unset($GLOBALS['spip_recursions']);
 	// Par ailleurs on ne veut pas de magic_quotes au cours de l'execution
 	@set_magic_quotes_runtime(0);
@@ -1025,9 +1060,8 @@ function tester_variable($var, $val){
 		$GLOBALS[$var] = $val;
 
 	if (
-		_request($var) !== NULL
-		// et pas modifie par les fichiers d'appel
-		AND $GLOBALS[$var] == _request($var)
+		$_REQUEST[$var] !== NULL
+		AND $GLOBALS[$var] == $_REQUEST[$var]
 	)
 		die ("tester_variable: $var interdite");
 }
@@ -1049,7 +1083,7 @@ function spip_desinfecte(&$t) {
 			}
 		}
 	} else {
-		$t = str_replace(chr(0), '', $t);
+		$t = str_replace(chr(0), '-', $t);
 		if ($magic_quotes)
 			$t = stripslashes($t);
 	}
diff --git a/ecrire/inc_version.php b/ecrire/inc_version.php
index 74baa56bd66b6c62f0518e45aae56be0b0a57ee9..1bc9f61fb52809c9d38828dd1c34ffecc68b2056 100644
--- a/ecrire/inc_version.php
+++ b/ecrire/inc_version.php
@@ -167,7 +167,8 @@ $spip_pipeline = array(
 $spip_matrice = array ();
 # les plugins a activer
 $plugins = array();  // voir le contenu du repertoire /plugins/
-
+# les surcharges de include_spip()
+$surcharges = array(); // format 'inc_truc' => '/plugins/chose/inc_truc2.php'
 
 // Masquer les warning
 error_reporting(E_ALL ^ E_NOTICE);
@@ -197,7 +198,7 @@ $extension_squelette = 'html';
 // (utilise pour les modifs de la base de donnees)
 
 // version de la base
-$spip_version = 1.906;
+$spip_version = 1.907;
 
 // version de spip
 $spip_version_affichee = "1.9 alpha 3";
diff --git a/ecrire/inc_visites.php b/ecrire/inc_visites.php
index bdb7265771165d67555cdf7a83203336f49ac402..82ab598abe9604eb9ca57e0394fb820fbdee6269 100644
--- a/ecrire/inc_visites.php
+++ b/ecrire/inc_visites.php
@@ -76,8 +76,8 @@ function calculer_visites($t) {
 			compte_fichier_visite($item,
 				$visites, $visites_a, $referers, $referers_a, $articles);
 			@unlink($item);
-		} else
-			spip_log("$item pas vieux");
+		}
+		#else spip_log("$item pas vieux");
 	}
 
 	if (!$visites) return;