diff --git a/.gitattributes b/.gitattributes
index 39521284b31af28a0003f4071a4123d3d4f1a737..f0caca387351d105d56219e3821b35f95515cd78 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -332,8 +332,8 @@ dist/vignettes/xls.png -text
 dist/vignettes/xml.png -text
 dist/vignettes/zip.png -text
 dist/win_width.htc -text
+ecrire/action/acceder_document.php -text
 ecrire/action/activer_plugins.php -text
-ecrire/action/autoriser.php -text
 ecrire/action/converser.php -text
 ecrire/action/dater.php -text
 ecrire/action/desinstaller_plugin.php -text
diff --git a/ecrire/action/autoriser.php b/ecrire/action/acceder_document.php
similarity index 97%
rename from ecrire/action/autoriser.php
rename to ecrire/action/acceder_document.php
index 67a0e6f5fa7abf7eb10911734f3fa216bda220fc..3ae875359fe33d175edf072850860d74ca852852 100644
--- a/ecrire/action/autoriser.php
+++ b/ecrire/action/acceder_document.php
@@ -21,8 +21,8 @@ include_spip('base/abstract_sql');
 //  il verifie soit que le demandeur est authentifie
 // soit que le fichier est joint a au moins 1 article, breve ou rubrique publie
 
-// http://doc.spip.org/@action_autoriser_dist
-function action_autoriser_dist()
+// http://doc.spip.org/@action_acceder_document_dist
+function action_acceder_document_dist()
 {
   global $auteur_session; // positionne par verifier_visiteur dans inc_version
   if ($auteur_session['statut'] == '0minirezo' 
diff --git a/ecrire/inc/ajouter_documents.php b/ecrire/inc/ajouter_documents.php
index 470619e1c64902ead4702eddb6445d41e2ed3c73..340127439ad06df5b0d8298edb1d578b843b75ab 100644
--- a/ecrire/inc/ajouter_documents.php
+++ b/ecrire/inc/ajouter_documents.php
@@ -229,13 +229,8 @@ function inc_ajouter_documents_dist ($source, $nom_envoye, $type_lien, $id_lien,
 		$update = "mode='$mode', ";
 	}
 
-	// Pour les fichiers distants remettre l'URL de base
-	$path =  ($distant == 'oui')
-	  ? _q($source)
-	  : ("'" . addslashes(set_spip_doc($fichier)) . "'");
-
 	// Mise a jour des donnees
-	spip_query("UPDATE spip_documents SET $update taille='$taille', largeur='$largeur', hauteur='$hauteur', fichier=$path WHERE id_document=$id_document");
+	spip_query("UPDATE spip_documents SET $update taille='$taille', largeur='$largeur', hauteur='$hauteur', fichier="._q(set_spip_doc($fichier))." WHERE id_document=$id_document");
 
 	if ($id_document_lie) {
 		spip_query("UPDATE spip_documents SET id_vignette=$id_document	WHERE id_document=$id_document_lie");
diff --git a/ecrire/inc/documents.php b/ecrire/inc/documents.php
index 9c6a82c09f4dcab2440621361284550788c9f229..cf9a6f5bf5dc0203712a111a47afc4b4545ffd09 100644
--- a/ecrire/inc/documents.php
+++ b/ecrire/inc/documents.php
@@ -16,6 +16,42 @@ include_spip('inc/actions'); // *action_auteur et determine_upload
 include_spip('inc/date');
 include_spip('base/abstract_sql');
 
+
+// donne le chemin du fichier relatif a _DIR_IMG
+// pour stockage 'tel quel' dans la base de donnees
+// http://doc.spip.org/@set_spip_doc
+function set_spip_doc($fichier) {
+	if (strpos(_DIR_IMG, $fichier) === 0)
+		return substr($fichier, strlen(_DIR_IMG));
+	else
+		return $fichier; // ex: fichier distant
+}
+
+// donne le chemin complet du fichier
+// http://doc.spip.org/@get_spip_doc
+function get_spip_doc($fichier) {
+	if (preg_match(',^\w+://,', $fichier))
+		return $fichier;
+	else
+		return (strpos(_DIR_IMG, $fichier) === false)
+			? _DIR_IMG . $fichier
+			: $fichier;
+}
+
+function generer_url_document_dist($id_document) {
+	if (intval($id_document) <= 0)
+		return '';
+	$row = spip_fetch_array(spip_query("SELECT fichier,distant FROM spip_documents WHERE id_document = $id_document"));
+	if ($row) {
+		if ($GLOBALS['meta']["creer_htaccess"] == 'oui'
+		AND $row['distant'] == 'oui')
+			return generer_url_action('acceder_document', "arg=$id_document", true);
+		else
+			return get_spip_doc($row['fichier']);
+	}
+	return '';
+}
+
 //
 // Vignette pour les documents lies
 //
diff --git a/ecrire/inc/urls.php b/ecrire/inc/urls.php
index 8397e4a7cc08cf9f58fc5154bf17e20d2c05a71d..5f819339f587f0683a0770f951869df7bf0f9911 100644
--- a/ecrire/inc/urls.php
+++ b/ecrire/inc/urls.php
@@ -77,19 +77,8 @@ function generer_url_ecrire_forum($id_forum, $statut='') {
 
 // http://doc.spip.org/@generer_url_ecrire_document
 function generer_url_ecrire_document($id_document, $statut='') {
-	if (intval($id_document) <= 0) 
-		return '';
-	$row = @spip_fetch_array(spip_query("SELECT fichier,distant	FROM spip_documents WHERE id_document = $id_document"));
-	  if ($row) {
-		if ($row['distant'] == 'oui') {
-			return $row['fichier'];
-		} else {
-			if (($GLOBALS['meta']["creer_htaccess"]) != 'oui')
-				return get_spip_doc($row['fichier']);
-			else 	return generer_url_action('autoriser', "arg=$id_document");
-		}
-	}
-
+	include_spip('inc/documents');
+	return generer_url_document_dist($id_document);
 }
 
 // http://doc.spip.org/@generer_url_ecrire_statistiques
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 758eb6ed34b06486228ead17fab1e2992138858b..df732aff94c4a6184a51418c9d21b570f82519ea 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -235,14 +235,6 @@ function _q($a) {
 	return (is_int($a)) ? strval($a) : ("'" . addslashes($a) . "'");
 }
 
-// http://doc.spip.org/@set_spip_doc
-//function set_spip_doc($fichier) {return $fichier;}
-// http://doc.spip.org/@get_spip_doc
-//function get_spip_doc($fichier) {return _DIR_RACINE . $fichier;}
-// pour bientot:
-function set_spip_doc($fichier) {return substr($fichier, strlen(_DIR_IMG));}
-function get_spip_doc($fichier) {return _DIR_IMG . $fichier;}
-
 // Renvoie le _GET ou le _POST emis par l'utilisateur
 // ou pioche dans $c si c'est un array()
 // http://doc.spip.org/@_request
diff --git a/ecrire/public/interfaces.php b/ecrire/public/interfaces.php
index 98dc2b7c2f12ab84d77f94aa20096bb2df1c133f..4a8f900d3d84cd576c01265647e3ffea1d573b4d 100644
--- a/ecrire/public/interfaces.php
+++ b/ecrire/public/interfaces.php
@@ -275,6 +275,7 @@ $table_des_traitements['DATE_MODIF'][]= 'vider_date(%s)';
 $table_des_traitements['DATE_NOUVEAUTES'][]= 'vider_date(%s)';
 $table_des_traitements['DATE_REDAC'][]= 'vider_date(%s)';
 $table_des_traitements['DESCRIPTIF'][]= 'propre(%s)';
+$table_des_traitements['FICHIER']['documents']= 'get_spip_doc(%s)';
 $table_des_traitements['LIEN_TITRE'][]= 'typo(%s)';
 $table_des_traitements['LIEN_URL'][]= 'vider_url(%s)';
 $table_des_traitements['MESSAGE'][]= 'propre(%s)';
diff --git a/ecrire/urls/html.php b/ecrire/urls/html.php
index d8e197cd53f26c7285822e6805f2e5533b4c1ada..c6bd0cc9cbeb633c690a19583a0cb416686e4431 100644
--- a/ecrire/urls/html.php
+++ b/ecrire/urls/html.php
@@ -68,13 +68,8 @@ function generer_url_auteur($id_auteur) {
 
 // http://doc.spip.org/@generer_url_document
 function generer_url_document($id_document) {
-	if (intval($id_document) <= 0)
-		return '';
-	if (($GLOBALS['meta']["creer_htaccess"]) == 'oui')
-		return generer_url_action('autoriser', "arg=$id_document", true);
-	$row = @spip_fetch_array(spip_query("SELECT fichier FROM spip_documents WHERE id_document = $id_document"));
-	if ($row) return get_spip_doc($row['fichier']);
-	return '';
+	include_spip('inc/documents');
+	return generer_url_document_dist($id_document);
 }
 
 
diff --git a/ecrire/urls/page.php b/ecrire/urls/page.php
index a7915bfb4f619fa069143de7c0c6bb18c5d73337..bbb6147fedf2903ae76a77b83b717167c6d1ebb4 100644
--- a/ecrire/urls/page.php
+++ b/ecrire/urls/page.php
@@ -63,13 +63,8 @@ function generer_url_auteur($id_auteur) {
 
 // http://doc.spip.org/@generer_url_document
 function generer_url_document($id_document) {
-	if (($id_document = intval($id_document)) <= 0)
-		return '';
-	if (($GLOBALS['meta']["creer_htaccess"]) == 'oui')
-		return generer_url_action('autoriser',"arg=$id_document", true);
-	$row = @spip_fetch_array(spip_query("SELECT fichier FROM spip_documents WHERE id_document = $id_document"));
-	if ($row) return get_spip_doc($row['fichier']);
-	return '';
+	include_spip('inc/documents');
+	return generer_url_document_dist($id_document);
 }
 
 // http://doc.spip.org/@recuperer_parametres_url
diff --git a/ecrire/urls/propres.php b/ecrire/urls/propres.php
index d36c53940c429293f03de85419e19ed2cb6d95bf..16a4324c1ef1d1724d1ddd41b4b9302481e98d81 100644
--- a/ecrire/urls/propres.php
+++ b/ecrire/urls/propres.php
@@ -197,13 +197,8 @@ function generer_url_site($id_syndic) {
 
 // http://doc.spip.org/@generer_url_document
 function generer_url_document($id_document) {
-	if (($id_document = intval($id_document)) <= 0)
-		return '';
-	if (($GLOBALS['meta']["creer_htaccess"]) == 'oui')
-	  return generer_url_action('autoriser',"arg=$id_document", true);
-	$row = @spip_fetch_array(spip_query("SELECT fichier FROM spip_documents WHERE id_document = $id_document"));
-	if ($row) return get_spip_doc($row['fichier']);
-	return '';
+	include_spip('inc/documents');
+	return generer_url_document_dist($id_document);
 }
 
 // http://doc.spip.org/@recuperer_parametres_url
diff --git a/ecrire/urls/standard.php b/ecrire/urls/standard.php
index af57ffb6f9217710a0fefcbcf5e4309f541567ee..f1b2e18c165f12f71186eb0e7d5f627aa4029037 100644
--- a/ecrire/urls/standard.php
+++ b/ecrire/urls/standard.php
@@ -48,13 +48,8 @@ function generer_url_auteur($id_auteur) {
 
 // http://doc.spip.org/@generer_url_document
 function generer_url_document($id_document) {
-	if (intval($id_document) <= 0)
-		return '';
-	if (($GLOBALS['meta']["creer_htaccess"]) == 'oui')
-		return generer_url_action('autoriser',"arg=$id_document", true);
-	$row = @spip_fetch_array(spip_query("SELECT fichier FROM spip_documents WHERE id_document = $id_document"));
-	if ($row) return get_spip_doc($row['fichier']);
-	return '';
+	include_spip('inc/documents');
+	return generer_url_document_dist($id_document);
 }
 
 // http://doc.spip.org/@recuperer_parametres_url