diff --git a/ecrire/base/dump.php b/ecrire/base/dump.php
index b0dbb00c91940a915aa32b6d58ed549f1a879e99..89457c0d648af5f7d459574aea523d01c7b8fd0d 100644
--- a/ecrire/base/dump.php
+++ b/ecrire/base/dump.php
@@ -26,17 +26,7 @@ include_spip('base/serial');
 include_spip('base/auxiliaires');
 include_spip('public/interfaces'); // pour table_jointures
 
-// NB: Ce fichier peut ajouter des tables (old-style)
-// donc il faut l'inclure "en globals"
-if ($f = find_in_path('mes_fonctions.php')) {
-	global $dossier_squelettes;
-	@include_once(_ROOT_CWD . $f);
-}
-
-if (@is_readable(_CACHE_PLUGINS_FCT)) {
-	// chargement optimise precompile
-	include_once(_CACHE_PLUGINS_FCT);
-}
+include_fichiers_fonctions();
 
 /**
  * Retourne un nom de meta pour une rubrique et l'auteur connecté.
diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php
index 1461f9c2e87db9ad47c79e15438f9a99f100bf79..a7f568a93f2f070ee41ce4cf336feed13cfe8b08 100644
--- a/ecrire/inc/filtres.php
+++ b/ecrire/inc/filtres.php
@@ -92,6 +92,8 @@ function chercher_filtre($fonc, $default = null) {
 
 		return $f;
 	}
+
+	include_fichiers_fonctions();
 	foreach (array('filtre_' . $fonc, 'filtre_' . $fonc . '_dist', $fonc) as $f) {
 		trouver_filtre_matrice($f); // charge des fichiers spécifiques éventuels
 		// fonction ou name\space\fonction
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index f538bd1d373551e03c8d600d8a8f6542ff2ea208..711321a74e8a2b5dc44050520e05e7219d25aaab 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -171,6 +171,34 @@ function require_spip($f) {
 	return find_in_path($f . '.php', '', 'required');
 }
 
+
+/**
+ * Raccourci pour inclure mes_fonctions.php et tous les fichiers _fonctions.php des plugin
+ * quand on a besoin dans le PHP de filtres/fonctions qui y sont definis
+ */
+function include_fichiers_fonctions() {
+	static $done = false;
+	if (!$done) {
+		include_spip('inc/lang');
+
+		// NB: mes_fonctions peut initialiser $dossier_squelettes (old-style)
+		// donc il faut l'inclure "en globals"
+		if ($f = find_in_path('mes_fonctions.php')) {
+			global $dossier_squelettes;
+			include_once(_ROOT_CWD . $f);
+		}
+
+		if (@is_readable(_CACHE_PLUGINS_FCT)) {
+			// chargement optimise precompile
+			include_once(_CACHE_PLUGINS_FCT);
+		}
+		if (test_espace_prive()) {
+			include_spip('inc/filtres_ecrire');
+		}
+		$done = true;
+	}
+}
+
 /**
  * Exécute une fonction (appellée par un pipeline) avec la donnée transmise.
  *
diff --git a/ecrire/public/aiguiller.php b/ecrire/public/aiguiller.php
index 7e65134dcb24f906002d584aa8ed4ea6fe3918ef..d42ca099c2243e87db51f7a1e3116ccf062d5d7c 100644
--- a/ecrire/public/aiguiller.php
+++ b/ecrire/public/aiguiller.php
@@ -198,7 +198,7 @@ function traiter_formulaires_dynamiques($get = false) {
 
 
 		// inclure mes_fonctions et autres filtres avant verifier/traiter
-		include_spip('public/parametrer');
+		include_fichiers_fonctions();
 		// ainsi que l'API SQL bien utile dans verifier/traiter
 		include_spip('base/abstract_sql');
 
diff --git a/ecrire/public/parametrer.php b/ecrire/public/parametrer.php
index d25327d68f0f2e9ffb40953ef7d48083bb5b18b1..76db7c5689d78c2faa670a48b24d8b18645c4a5a 100644
--- a/ecrire/public/parametrer.php
+++ b/ecrire/public/parametrer.php
@@ -14,22 +14,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
 	return;
 }
 
-include_spip('inc/lang');
-
-// NB: mes_fonctions peut initialiser $dossier_squelettes (old-style)
-// donc il faut l'inclure "en globals"
-if ($f = find_in_path('mes_fonctions.php')) {
-	global $dossier_squelettes;
-	include_once(_ROOT_CWD . $f);
-}
-
-if (@is_readable(_CACHE_PLUGINS_FCT)) {
-	// chargement optimise precompile
-	include_once(_CACHE_PLUGINS_FCT);
-}
-if (test_espace_prive()) {
-	include_spip('inc/filtres_ecrire');
-}
+include_fichiers_fonctions();
 
 # Determine le squelette associe a une requete 
 # et l'applique sur le contexte, le nom du cache et le serveur