diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3
index 279d3f37f7239ee11e60e22ba59af35e53e64b7e..b86db08649d902ffd4ade3f690f445c50560e7e6 100644
--- a/ecrire/inc_version.php3
+++ b/ecrire/inc_version.php3
@@ -1086,16 +1086,15 @@ function find_in_path ($filename, $path='AUTO') {
 
 	// Parcourir le chemin
 	foreach (split(':', $path) as $dir) {
-		if (substr($dir, 0,1)<>'/')
-			$f = "$racine$dir$filename";
-		else
-			$f = "$dir$filename";
-
+		if (substr($dir, 0,1)<>'/') $dir = "$racine$dir";
+		if (substr($dir, -1,1)<>'/') $dir .= "/";
+		$f = "$dir$filename";
+#		spip_log("find_in_path: essai $f");
 		if (@is_readable($f)) {
 			return $f;
 		}
 	}
-#	spip_log("find_in_path: pas de fichier '$filename' sur le chemin '$path'");
+
 }
 
 
diff --git a/inc-balises.php3 b/inc-balises.php3
index d2eb17fff7adce3d7482dfb9b537a251fa640be7..87f09bea16c388251b9b18e6ce98aa80535168c0 100644
--- a/inc-balises.php3
+++ b/inc-balises.php3
@@ -63,7 +63,7 @@ function champs_traitements ($p) {
 	);
 	$ps = $traitements[$p->nom_champ];
 	if (!$ps) return $p->code;
-	if ($p->documents) {
+	if ($p->descr['documents']) {
 		$ps = str_replace('traiter_raccourcis(', 
 			'traiter_raccourcis_doublon($doublons,',
 			str_replace('typo(', 'typo_doublon($doublons,', $ps));
@@ -180,6 +180,12 @@ function balise_DATE_NOUVEAUTES_dist($p) {
 	return $p;
 }
 
+function balise_DOSSIER_SQUELETTE_dist($p) {
+	$p->code = "'" . addslashes(dirname($p->descr['sourcefile'])) . "'" ;
+	$p->statut = 'php';
+	return $p;
+}
+
 function balise_URL_SITE_SPIP_dist($p) {
 	$p->code = "lire_meta('adresse_site')";
 	$p->statut = 'php';
@@ -287,7 +293,7 @@ function balise_RECHERCHE_dist($p) {
 }
 
 function balise_COMPTEUR_BOUCLE_dist($p) {
-	$b = $p->nom_boucle ? $p->nom_boucle : $p->id_mere;
+	$b = $p->nom_boucle ? $p->nom_boucle : $p->descr['id_mere'];
 	if ($b === '') {
 		erreur_squelette(
 			_T('zbug_champ_hors_boucle',
@@ -302,7 +308,7 @@ function balise_COMPTEUR_BOUCLE_dist($p) {
 }
 
 function balise_TOTAL_BOUCLE_dist($p) {
-	$b = $p->nom_boucle ? $p->nom_boucle : $p->id_mere;
+	$b = $p->nom_boucle ? $p->nom_boucle : $p->descr['id_mere'];
 	if ($b === '') {
 		erreur_squelette(
 			_T('zbug_champ_hors_boucle',
@@ -385,7 +391,7 @@ function balise_EMBED_DOCUMENT_dist($p) {
 	$_id_document = champ_sql('id_document',$p);
 	$p->code = "calcule_embed_document(intval($_id_document), '" .
 	texte_script($p->fonctions ? join($p->fonctions, "|") : "") .
-	  "', \$doublons, '" . $p->documents . "')";
+	  "', \$doublons, '" . $p->descr['documents'] . "')";
 	unset ($p->fonctions);
 	$p->statut = 'html';
 	return $p;
@@ -577,7 +583,7 @@ function calculer_balise_logo ($p) {
 			$c->nom_champ = $match[2];
 			$c->id_boucle = $p->id_boucle;
 			$c->boucles = &$p->boucles;
-			$c->id_mere = $p->id_mere;
+			$c->descr = $p->descr;
 			$c = calculer_champ($c);
 			$code_lien = str_replace('#'.$match[2], "'.".$c.".'", $code_lien);
 		}
@@ -596,7 +602,7 @@ function calculer_balise_logo ($p) {
 	// cas des documents
 	if ($type_objet == 'DOCUMENT') {
 		$code_logo = "calcule_document($_id_objet, '" .
-			$p->documents .
+			$p->descr['documents'] .
 		  '\', $doublons)';
 		if ($flag_fichier)
 		  $p->code = "calcule_fichier_logo($code_logo)";
diff --git a/inc-compilo-api.php3 b/inc-compilo-api.php3
index 0d9a8076948dbdc8d59a084b914af2166d26df08..8b1564fd1016dea8a4e676f6955439adab29e777 100644
--- a/inc-compilo-api.php3
+++ b/inc-compilo-api.php3
@@ -83,8 +83,10 @@ class Champ {
 	var $statut;	// 'numerique, 'h'=texte (html) ou 'p'=script (php) ?
 			// -> definira les pre et post-traitements obligatoires
 	// champs pour la production de code dependant du contexte
-	var $id_mere;    // pour TOTAL_BOUCLE hors du corps
-	var $document;   // pour embed et img dans les textes
+	// $id_mere;  pour TOTAL_BOUCLE hors du corps
+	// $document; pour embed et img dans les textes
+	// sourcefile; pour DOSSIER_SQUELETTE
+	var $descr = array();
 }
 
 
diff --git a/inc-compilo-index.php3 b/inc-compilo-index.php3
index a1e1cfe1127b13d603f41fca2cb9e44c8a05a5d5..f7b61f3656c541aa4491b839e9c7698a748ffb12 100644
--- a/inc-compilo-index.php3
+++ b/inc-compilo-index.php3
@@ -301,7 +301,7 @@ function filtres_arglist($args, $p, $sep) {
 			if ($arg[0] =='$')
 				$arg = '$Pile[0][\'' . substr($arg,1) . "']";
 			elseif ($arg[0] =='<')
-			  $arg = calculer_texte($arg, $p->id_boucle, $p->boucles, $p->id_mere);
+			  $arg = calculer_texte($arg, $p->id_boucle, $p->boucles);
 			elseif (ereg("^" . NOM_DE_CHAMP ."(.*)$", $arg, $r2)) {
 				$p->nom_boucle = $r2[2];
 				$p->nom_champ = $r2[3];
diff --git a/inc-compilo.php3 b/inc-compilo.php3
index 6df989071898b1620d7817d19678044c235848fb..9b72204955a1b59875480880d9f9e60b866a9da0 100644
--- a/inc-compilo.php3
+++ b/inc-compilo.php3
@@ -96,7 +96,7 @@ function calculer_inclure($fichier, $params, $id_boucle, &$boucles) {
 // partie droite d'une affectation). Ici sont analyses les elements
 // multilingues des squelettes : <:xxx:> et <multi>[fr]coucou</multi>
 //
-function calculer_texte($texte, $id_boucle, &$boucles, $id_mere) {
+function calculer_texte($texte, $id_boucle, &$boucles) {
 	//
 	// Les elements multilingues
 	//
@@ -435,7 +435,7 @@ function calculer_liste($tableau, $descr, &$boucles, $id_boucle='', $niv=1) {
 		switch($p->type) {
 		// texte seul
 		case 'texte':
-			$code = calculer_texte($p->texte, $id_boucle, $boucles, $descr['id_mere']);
+			$code = calculer_texte($p->texte, $id_boucle, $boucles);
 			$commentaire='';
 			$avant='';
 			$apres='';
@@ -477,8 +477,7 @@ function calculer_liste($tableau, $descr, &$boucles, $id_boucle='', $niv=1) {
 			// cette structure pourrait etre completee des le phrase' (a faire)
 			$p->id_boucle = $id_boucle;
 			$p->boucles = &$boucles;
-			$p->id_mere = $descr['id_mere'];
-			$p->documents = $descr['documents'];
+			$p->descr = $descr;
 			$p->statut = 'html';
 			$p->type_requete = $boucles[$id_boucle]->type_requete;
 
@@ -538,7 +537,7 @@ function calculer_squelette($squelette, $nom, $gram, $sourcefile) {
 	$racine = parser($squelette, '',$boucles, $nom);
 
 	// tableau des informations sur le squelette
-	$descr = array('nom' => $nom, 'documents' => false);
+	$descr = array('nom' => $nom, 'documents' => false, 'sourcefile' => $sourcefile);
 
 	if ($boucles) {
 	  // une boucle documents est conditionnee par tout le reste!