diff --git a/ecrire/action/inscription.php b/ecrire/action/inscription.php
index ac82158a749584f677c40a16de426912cdb33a40..6b6f9e8905d0eb2c73232349b44e5686aab944e2 100644
--- a/ecrire/action/inscription.php
+++ b/ecrire/action/inscription.php
@@ -13,7 +13,7 @@
 function inscription_dist() {
 
 	include_local(find_in_path("inc-formulaire_inscription" . _EXTENSION_PHP));
-	include_ecrire('public-global'); 
+	include_spip('public/global'); 
 	include_ecrire("inc_lang");
 	include_ecrire('inc_headers');
 
diff --git a/ecrire/action/pass.php b/ecrire/action/pass.php
index f1e1f71a0002fec4a5097b961e4ac564b01fb436..c1a779c5024007221b901125608f4b6ce50b58ea 100644
--- a/ecrire/action/pass.php
+++ b/ecrire/action/pass.php
@@ -15,7 +15,7 @@ include_ecrire("inc_session"); # pour creer_uniq_id
 include_ecrire('inc_minipres'); # charge lang et execute utiliser_lang
 include_ecrire("inc_mail"); # pour envoyer_mail
 include_ecrire("inc_acces"); # pour generer_htpass
-include_ecrire('public-global'); # pour calculer la page
+include_spip('public/global'); # pour calculer la page
 include_ecrire("inc_filtres"); # pour email_valide()
 
 // Ce fichier est celui d'une balise dynamique qui s'ignore.
diff --git a/ecrire/inc_cron.php b/ecrire/inc_cron.php
index f1e06f05a3e0107d465a5af5f1b0ea6dc9bf872f..26e9a56bee1ca53b61a0356cef61c9c48be6d5d0 100644
--- a/ecrire/inc_cron.php
+++ b/ecrire/inc_cron.php
@@ -231,7 +231,7 @@ function cron_mail($t) {
 	// $t = 0 si le fichier de lock a ete detruit
 	if (!$t) $t = time() - (3600 * 24 * $jours_neuf);
 
-	include_ecrire("public-calcul");
+	include_spip('public/calcul');
 	$page= cherche_page('',
 			    array('date' => date('Y-m-d H:i:s', $t),
 				  'jours_neuf' => $jours_neuf),
diff --git a/ecrire/inc_lang.php b/ecrire/inc_lang.php
index bfa72f0c692ecaa319486b9535f69074e4168825..edb8af5d6ca1ac883b0f73d17cf59a5388629371 100644
--- a/ecrire/inc_lang.php
+++ b/ecrire/inc_lang.php
@@ -308,7 +308,7 @@ function liste_options_langues($nom_select, $default='', $herit='') {
 }
 
 //
-// Cette fonction est appelee depuis inc-public-global si on a installe
+// Cette fonction est appelee depuis public/global si on a installe
 // la variable de personnalisation $forcer_lang ; elle renvoie le brouteur
 // si necessaire vers l'URL xxxx?lang=ll
 //
diff --git a/ecrire/public.php b/ecrire/public.php
index 37e96a79d5e41088fe843e8ace228c4cf1693780..00661167b574a0909fd2090c7b11127fc6aa7f2e 100644
--- a/ecrire/public.php
+++ b/ecrire/public.php
@@ -27,7 +27,7 @@ if (defined("_INC_PUBLIC")) {
 	if (!function_exists('include_local')) { # cas du script page
 		include ("ecrire/inc_version.php");
 	}
-	include_ecrire('public-global');
+	include_spip('public/global');
 
 	$tableau_des_erreurs = array();
 	$page = calcule_header_et_page ($fond);
@@ -115,7 +115,7 @@ if (defined("_INC_PUBLIC")) {
 
 	// Inserer au besoin les boutons admins
 	if ($affiche_boutons_admin) {
-		include_ecrire('public-admin');
+		include_spip('public/admin');
 		$page = affiche_boutons_admin($page);
 	}
 
@@ -124,7 +124,7 @@ if (defined("_INC_PUBLIC")) {
 
 	// Gestion des statistiques du site public
 	if ($GLOBALS['meta']["activer_statistiques"] != "non") {
-		include_ecrire ('public-stats');
+		include_spip ('public/stats');
 		ecrire_stats();
 	}
 
diff --git a/ecrire/public-admin.php b/ecrire/public/admin.php
similarity index 100%
rename from ecrire/public-admin.php
rename to ecrire/public/admin.php
diff --git a/ecrire/public-balises.php b/ecrire/public/balises.php
similarity index 100%
rename from ecrire/public-balises.php
rename to ecrire/public/balises.php
diff --git a/ecrire/public-boucles.php b/ecrire/public/boucles.php
similarity index 100%
rename from ecrire/public-boucles.php
rename to ecrire/public/boucles.php
diff --git a/ecrire/public-cache.php b/ecrire/public/cache.php
similarity index 100%
rename from ecrire/public-cache.php
rename to ecrire/public/cache.php
diff --git a/ecrire/public-calcul-outils.php b/ecrire/public/calcul-outils.php
similarity index 100%
rename from ecrire/public-calcul-outils.php
rename to ecrire/public/calcul-outils.php
diff --git a/ecrire/public-calcul.php b/ecrire/public/calcul.php
similarity index 98%
rename from ecrire/public-calcul.php
rename to ecrire/public/calcul.php
index 4eef4bac37bda5d17529dc522225c8463569c93f..5bbeb0c34ee4a47e688317c991aa7c13c425514d 100644
--- a/ecrire/public-calcul.php
+++ b/ecrire/public/calcul.php
@@ -27,7 +27,7 @@ include_ecrire("inc_abstract_sql");
 include_ecrire("inc_forum");
 include_ecrire("inc_debug_sql");
 include_ecrire("inc_distant");
-include_ecrire("public-calcul-outils");
+include_spip('public/calcul-outils');
 
 // NB: Ce fichier peut initialiser $dossier_squelettes (old-style)
 // donc il faut l'inclure "en globals"
@@ -81,7 +81,7 @@ function charger_squelette ($squelette) {
 
 	// sinon, charger le compilateur et verifier que le source est lisible
 	if (!function_exists($nom)) {
-		include_ecrire('public-compilo');
+		include_spip('public/compilo');
 		lire_fichier ($sourcefile, $skel);
 	}
 
@@ -132,7 +132,7 @@ function charger_squelette ($squelette) {
 
 function cherche_page ($cache, $contexte, $fond)  {
 	if (!function_exists('chercher_squelette'))
-		include_ecrire('public-chercher-squelette');
+		include_spip('public/chercher-squelette');
 
 	// Choisir entre $fond-dist.html, $fond=7.html, etc?
 	$id_rubrique_fond = 0;
diff --git a/ecrire/public-chercher-squelette.php b/ecrire/public/chercher-squelette.php
similarity index 100%
rename from ecrire/public-chercher-squelette.php
rename to ecrire/public/chercher-squelette.php
diff --git a/ecrire/public-compilo-api.php b/ecrire/public/compilo-api.php
similarity index 100%
rename from ecrire/public-compilo-api.php
rename to ecrire/public/compilo-api.php
diff --git a/ecrire/public-compilo-index.php b/ecrire/public/compilo-index.php
similarity index 100%
rename from ecrire/public-compilo-index.php
rename to ecrire/public/compilo-index.php
diff --git a/ecrire/public-compilo.php b/ecrire/public/compilo.php
similarity index 98%
rename from ecrire/public-compilo.php
rename to ecrire/public/compilo.php
index 6940fe205d48c633077a0ce7175f769f3e1db8a7..2203afadcf23063df84f909945c10b3af555cd83 100644
--- a/ecrire/public-compilo.php
+++ b/ecrire/public/compilo.php
@@ -22,19 +22,19 @@ define('CODE_MONOTONE', "^(\n//[^\n]*\n)?\(?'([^'])*'\)?$");
 
 // Definition de la structure $p, et fonctions de recherche et de reservation
 // dans l'arborescence des boucles
-include_ecrire("public-compilo-index");  # index ? structure ? pile ?
+include_spip('public/compilo-index');  # index ? structure ? pile ?
 
 // definition des boucles
-include_ecrire("public-boucles");
+include_spip('public/boucles');
 
 // definition des criteres
-include_ecrire("public-criteres");
+include_spip('public/criteres');
 
 // definition des balises
-include_ecrire("public-balises");
+include_spip('public/balises');
 
 // definition de l'API
-include_ecrire("public-compilo-api");
+include_spip('public/compilo-api');
 
 # definition des tables
 include_ecrire('inc_serialbase');
@@ -582,7 +582,7 @@ function calculer_squelette($squelette, $nom, $gram, $sourcefile) {
 	$boucles = array();
 	spip_timer('calcul_skel');
 
-	include_ecrire("public-$gram-squel");
+	include_spip('public/phraser-'.$gram);
 
 	$racine = phraser($squelette, '',$boucles, $nom);
 
@@ -682,7 +682,7 @@ function calculer_squelette($squelette, $nom, $gram, $sourcefile) {
 	$secondes = spip_timer('calcul_skel');
 	spip_log("COMPIL ($secondes) ["
 		.preg_replace(',\.html$,', '', $sourcefile)
-		."] CACHE/skel_$nom.php");
+		."] ".creer_repertoire(_DIR_CACHE, 'skel')."$nom.php");
 
 	$squelette_compile = "<"."?php
 /*
diff --git a/ecrire/public-criteres.php b/ecrire/public/criteres.php
similarity index 100%
rename from ecrire/public-criteres.php
rename to ecrire/public/criteres.php
diff --git a/ecrire/public-global.php b/ecrire/public/global.php
similarity index 93%
rename from ecrire/public-global.php
rename to ecrire/public/global.php
index 7ee2f0a0e61666220b51c10bceb823ddca4dfd88..5e3639a804745f41faddafc7861838187d6ccc8c 100644
--- a/ecrire/public-global.php
+++ b/ecrire/public/global.php
@@ -34,7 +34,7 @@ function calcule_header_et_page ($fond) {
 
 	if (strlen($_POST['confirmer_forum']) > 0
 	    OR ($GLOBALS['afficher_texte']=='non' AND $_POST['ajouter_mot'])) {
-		include_ecrire('public-messforum');
+		include_spip('public/messforum');
 		redirige_par_entete(enregistre_forum());
 	}
 
@@ -89,7 +89,7 @@ function afficher_page_globale ($fond) {
 		$use_cache, $var_mode, $var_preview;
 	global $_COOKIE, $_SERVER;
 
-	include_ecrire('public-cache');
+	include_spip('public/cache');
 
 	// Peut-on utiliser un fichier cache ?
 	list($chemin_cache, $page, $lastmodified) = 
@@ -132,7 +132,7 @@ function afficher_page_globale ($fond) {
 		if (!$use_cache)
 			restaurer_globales($page['contexte']);
 		else {
-			include_ecrire('public-calcul');
+			include_spip('public/calcul');
 			$page = calculer_page_globale ($chemin_cache, $fond);
 			if ($chemin_cache)
 				creer_cache($page, $chemin_cache, $use_cache);
@@ -228,7 +228,7 @@ function inclure_page($fond, $contexte_inclus, $cache_incluant='') {
 	if (!$use_cache) {
 		$lastmodified = max($lastmodified, $lastinclude);
 	} else {
-		include_ecrire('public-calcul');
+		include_spip('public/calcul');
 		$page = cherche_page($chemin_cache, $contexte_inclus, $fond, false);
 		$lastmodified = time();
 		if ($chemin_cache) creer_cache($page, $chemin_cache, $use_cache);
@@ -247,22 +247,15 @@ function inclure_page($fond, $contexte_inclus, $cache_incluant='') {
 function inclure_balise_dynamique($texte, $echo=true, $ligne=0) {
 	global $contexte_inclus; # provisoire : c'est pour le debuggueur
 
-	if (!is_string($texte))
-	  {
-	    // Revoir l'API des balises dynamiques:
-	    // leurs squelettes sont petits et sans boucle,
-	    // la gestion du delai est donc superfetatoire
+	if (is_array($texte)) {
+
 		list($fond, $delainc, $contexte_inclus) = $texte;
 
 		if ((!$contexte_inclus['lang']) AND
 		($GLOBALS['spip_lang'] != $GLOBALS['meta']['langue_site']))
 			$contexte_inclus['lang'] = $GLOBALS['spip_lang'];
 
-		// surcharge ? inutile ?
-		$f = find_in_path("inc-cache" . _EXTENSION_PHP);
-		if ($f && is_readable($f)) {
-		  if (!$GLOBALS['included_files']['public-cache']++) include($f);
-		} else include_ecrire('public-cache');
+		include_spip('public/cache');
 
 		$d = $GLOBALS['delais'];
 		$GLOBALS['delais'] = $delainc;
@@ -281,15 +274,15 @@ function inclure_balise_dynamique($texte, $echo=true, $ligne=0) {
 		if ($page['lang_select'])
 			lang_dselect();
 
-	  }
+	}
 
 	if ($GLOBALS['var_mode'] == 'debug')
-	    $GLOBALS['debug_objets']['resultat'][$ligne] = $texte;
+		$GLOBALS['debug_objets']['resultat'][$ligne] = $texte;
 
 	if ($echo)
-			echo $texte;
+		echo $texte;
 	else
-			return $texte;
+		return $texte;
 
 }
 
diff --git a/ecrire/public-messforum.php b/ecrire/public/messforum.php
similarity index 100%
rename from ecrire/public-messforum.php
rename to ecrire/public/messforum.php
diff --git a/ecrire/public-html-squel.php b/ecrire/public/phraser-html.php
similarity index 100%
rename from ecrire/public-html-squel.php
rename to ecrire/public/phraser-html.php
diff --git a/ecrire/public-stats.php b/ecrire/public/stats.php
similarity index 100%
rename from ecrire/public-stats.php
rename to ecrire/public/stats.php
diff --git a/formulaires/inc-formulaire_admin.php3 b/formulaires/inc-formulaire_admin.php3
index 961723cbd29a716bf4bcd0309c778ee8089a7ccc..cd42d7ea7762057f7ddab482d05cbff039238972 100644
--- a/formulaires/inc-formulaire_admin.php3
+++ b/formulaires/inc-formulaire_admin.php3
@@ -84,7 +84,7 @@ function balise_FORMULAIRE_ADMIN_dyn($float='', $debug='') {
 		FROM spip_articles WHERE statut='publie'
 		AND id_article = $id_article")
 		AND spip_fetch_array($s)) {
-			include_ecrire ("public-stats");
+			include_spip ('public/stats');
 			$r = afficher_raccourci_stats($id_article);
 			$visites = $r['visites'];
 			$popularite = $r['popularite'];