diff --git a/.gitattributes b/.gitattributes
index d94e09e5d656d3f8ecb7fe9b9781c9386456f620..defb953ddee6ce52cf7c1a9d2a859575770218df 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,6 +1,7 @@
 * text=auto !eol
 IMG/logo_spip.jpg -text
 /INSTALL.txt -text
+/UPGRADE.txt -text
 dist/choix_mots.html -text
 dist/style_prive.html -text
 ecrire/action/autoriser.php -text
diff --git a/UPGRADE.txt b/UPGRADE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b707088d6083a354746c60649e49b773ae36b2f0
--- /dev/null
+++ b/UPGRADE.txt
@@ -0,0 +1,23 @@
+
+Mise a jour de votre site SPIP
+------------------------------
+
+La version 1.9 de SPIP n'offre plus les fichiers article.php3 etc, à la
+racine du site.
+
+Si vous laissez les anciens fichiers, ils continueront à fonctionner comme
+avant, grâce au fichier "fantôme" inc-public.php3
+
+Mais vous pouvez aussi, si votre hébergeur l'autorise, utiliser le fichier
+htaccess.txt, en le recopiant à la racine du site sous le nom ".htaccess".
+Ce fichier dira alors au serveur Web que les hits sur une adresse du type
+article.php3?id_article=1 doivent être traités par spip.php
+
+Par ailleurs, si vous aviez des fichiers personnalises (mes_options.php3,
+mes_fonctions.php3, fichiers de langue, ou balises dynamiques), il est temps
+de les renommer en ".php". En effet, cette version de transition (1.9) est
+encore compatible avec .php3, mais la prochaine (2.0) ne le sera pas.
+
+Pour en savoir plus :
+	http://www.spip.net/...
+
diff --git a/ecrire/action/inscription.php b/ecrire/action/inscription.php
index 3be52ecefe8ccc7a266a287ec19739c198fc265d..2a52d1a07945e571f3110732b118148169d5a611 100644
--- a/ecrire/action/inscription.php
+++ b/ecrire/action/inscription.php
@@ -12,7 +12,7 @@
 
 function action_inscription_dist() {
 
-	include_local(find_in_path("inc-formulaire_inscription" . _EXTENSION_PHP));
+	include_spip('inc-formulaire_inscription');
 	include_spip('public/global'); 
 	include_spip('inc/lang');
 	include_ecrire('inc_headers');
diff --git a/ecrire/inc_debug_sql.php b/ecrire/inc_debug_sql.php
index 1abb5984108ad126e759d469eb457d0d4fbd4bb0..4376ead231a89e8a9081ce28925f9727837945db 100644
--- a/ecrire/inc_debug_sql.php
+++ b/ecrire/inc_debug_sql.php
@@ -449,7 +449,7 @@ function debug_dumpfile ($texte, $fonc, $type) {
 	  echo "</fieldset></div>";
 	}
 	echo "\n</div>";
-	include_local(find_in_path('inc-formulaire_admin' . _EXTENSION_PHP));
+	include_spip('inc-formulaire_admin');
 	echo inclure_balise_dynamique(
 		balise_FORMULAIRE_ADMIN_dyn('spip-admin-float', $debug_objets)
 	);
diff --git a/ecrire/public.php b/ecrire/public.php
index fc8980d9ec611e2028b7125cc8cffadd6eb9bad1..5df9f6010bde92ce846faecf2824f1fd533cac62 100644
--- a/ecrire/public.php
+++ b/ecrire/public.php
@@ -48,10 +48,12 @@ if (defined("_INC_PUBLIC")) {
 	}
 
 	// est-on admin ?
-	if ($affiche_boutons_admin = ($_COOKIE['spip_admin'] 
-				      AND ($html OR ($var_mode == 'debug'))))
+	if ($affiche_boutons_admin = (
+	$_COOKIE['spip_admin'] 
+	AND ($html OR ($var_mode == 'debug'))
+	))
+		include_spip('inc-formulaire_admin');
 
-		include_local(find_in_path('inc-formulaire_admin'. _EXTENSION_PHP));
 	// Execution de la page calculee
 
 	// 1. Cas d'une page contenant uniquement du HTML :
diff --git a/ecrire/public/calcul-outils.php b/ecrire/public/calcul-outils.php
index 38dfee8b408695776f44a373103b4fc2036db76b..9cc85f617b3ce0857dabc737526f1e843421a85b 100644
--- a/ecrire/public/calcul-outils.php
+++ b/ecrire/public/calcul-outils.php
@@ -169,9 +169,7 @@ function argumenter_squelette($v) {
 
 // verifier leurs arguments et filtres, et calculer le code a inclure
 function executer_balise_dynamique($nom, $args, $filtres, $lang, $ligne) {
-	if ($file = find_in_path('inc-' . strtolower($nom) . _EXTENSION_PHP))
-		include_local($file);
-	else
+	if (!include_spip('inc-' . strtolower($nom)))
 		die ("pas de balise dynamique pour #". strtolower($nom)." !");
 
 	// Y a-t-il une fonction de traitement filtres-arguments ?
diff --git a/ecrire/public/compilo-index.php b/ecrire/public/compilo-index.php
index 85ac61cc81d7576db462f88d3453ef429f9124c1..fb5b1032b95606dd3bebec6c549c7df18f19774e 100644
--- a/ecrire/public/compilo-index.php
+++ b/ecrire/public/compilo-index.php
@@ -165,9 +165,8 @@ function calculer_balise($nom, $p) {
 
 	// regarder s'il existe un fichier d'inclusion au nom de la balise
 	// contenant une fonction balise_NOM_collecte
-	$file = 'inc-' . strtolower($nom) . _EXTENSION_PHP;
-	if ($file = find_in_path($file)) {
-		include_local($file);
+	$file = 'inc-' . strtolower($nom);
+	if (include_spip($file)) {
 		# une globale ?? defined ou function_exists(..._dyn) serait mieux ?
 		$f = $GLOBALS['balise_' . $nom . '_collecte'];
 		if (is_array($f)) {
diff --git a/ecrire/public/global.php b/ecrire/public/global.php
index d85ae0be217f3470fde7bcb8a91070ffff6531e0..52a6d9e5a4e4070d60a2dd83ecf75a015f602784 100644
--- a/ecrire/public/global.php
+++ b/ecrire/public/global.php
@@ -42,7 +42,7 @@ function calcule_header_et_page ($fond) {
 	// afin que celle-ci contienne la signature
 
 	if ($_GET['var_confirm']) {
-		include_local(find_in_path('inc-formulaire_signature' . _EXTENSION_PHP));
+		include_spip('inc-formulaire_signature');
 		reponse_confirmation($_GET['id_article'], $var_confirm);
 	}
 
@@ -302,7 +302,7 @@ function message_erreur_404 ($erreur= "") {
 	return array('texte' => '<'.'?php
 			$contexte_inclus = array("fond" => 404,
  				"erreur" => _T("' . $erreur  . '"));
-			include(\'page' . _EXTENSION_PHP .'\'); ?'.'>',
+			include(\'spip.php\'); ?'.'>',
 		     'process_ins' => 'php');
 }
 
diff --git a/formulaires/inc-login_prive.php3 b/formulaires/inc-login_prive.php3
index 55b0efdcf3d2c6741c8481743fe71169cee772f1..83ad9b141ce3ed605df57b61b55a55be686a15e5 100644
--- a/formulaires/inc-login_prive.php3
+++ b/formulaires/inc-login_prive.php3
@@ -12,7 +12,7 @@
 
 if (!defined("_ECRIRE_INC_VERSION")) return;	#securite
 
-include_local(find_in_path("inc-login_public" .  _EXTENSION_PHP));
+include_spip('inc-login_public');
 
 global $balise_LOGIN_PRIVE_collecte;
 $balise_LOGIN_PRIVE_collecte = array('url');
diff --git a/formulaires/inc-menu_lang.php3 b/formulaires/inc-menu_lang.php3
index 0aae3fce4d1850a17705bf0ec8fb454650463a79..c27e42609860613d2d7d86b5f778cf0615bd5143 100644
--- a/formulaires/inc-menu_lang.php3
+++ b/formulaires/inc-menu_lang.php3
@@ -26,7 +26,7 @@ function balise_MENU_LANG_stat ($args, $filtres) {
 
 // normalement $opt sera toujours non vide suite au test ci-dessus
 function balise_MENU_LANG_dyn($menu_lang) {
-	include_local(find_in_path("inc-menu_lang_ecrire" . _EXTENSION_PHP));
+	include_spip('inc-menu_lang_ecrire');
 	return menu_lang_pour_tous('var_lang', $opt);
 }