diff --git a/dist/formulaires/recherche.html b/dist/formulaires/recherche.html
index f14db58fea12f58af1095b894cfdd578f98754d3..f8d684a2c627b6e9874614269028c96f0006a8b6 100644
--- a/dist/formulaires/recherche.html
+++ b/dist/formulaires/recherche.html
@@ -1,6 +1,6 @@
 <div class="formulaire_spip formulaire_recherche" id="formulaire_recherche">
-<form action="[(#ENV{lien})]" method="get"><div>
-	[(#ENV{lien}|form_hidden)]
+<form action="[(#ENV{lien})]" method="get" class='noajax'><div>
+	#ACTION_FORMULAIRE{#ENV{lien}}
 	[<input type="hidden" name="lang" value="(#ENV{lang})" />]
 	<label for="recherche"><:info_rechercher:></label>
 	<input type="text" class="forml" size="10" name="recherche" id="recherche"[ value="(#ENV{recherche})"] accesskey="4" />
diff --git a/ecrire/balise/formulaire_recherche.php b/ecrire/balise/formulaire_recherche.php
index dd6eb6554d277e3d12bc18c12630934a16274836..1a61105483430fc19347df20055685c98d3523cc 100644
--- a/ecrire/balise/formulaire_recherche.php
+++ b/ecrire/balise/formulaire_recherche.php
@@ -14,33 +14,10 @@ if (!defined("_ECRIRE_INC_VERSION")) return;	#securite
 
 // Pas besoin de contexte de compilation
 
-
-// http://doc.spip.org/@balise_FORMULAIRE_RECHERCHE
-function balise_FORMULAIRE_RECHERCHE ($p) 
-{
-	return calculer_balise_dynamique($p, 'FORMULAIRE_RECHERCHE', array());
-}
-
 // http://doc.spip.org/@balise_FORMULAIRE_RECHERCHE_stat
 function balise_FORMULAIRE_RECHERCHE_stat($args, $filtres) {
 	// filtres[0] doit etre un script (a revoir)
 	return array($filtres[0], $args ? $args[0] : '');
 }
- 
-// http://doc.spip.org/@balise_FORMULAIRE_RECHERCHE_dyn
-function balise_FORMULAIRE_RECHERCHE_dyn($lien, $rech) {
-
-	if ($GLOBALS['spip_lang'] != $GLOBALS['meta']['langue_site'])
-		$lang = $GLOBALS['spip_lang'];
-	else
-		$lang='';
-
-	return array('formulaires/recherche', 3600, 
-		array(
-			'lien' => ($lien ? $lien : generer_url_public('recherche')),
-			'recherche' => _request('recherche'),
-			'lang' => $lang
-		));
-}
 
-?>
+?>
\ No newline at end of file
diff --git a/ecrire/public/composer.php b/ecrire/public/composer.php
index 943ca15b1cfdcc97b649130e899336b64558a28e..1892b57072d2821bbdd401d3a1df53cedf4abe19 100644
--- a/ecrire/public/composer.php
+++ b/ecrire/public/composer.php
@@ -251,7 +251,6 @@ function executer_balise_dynamique($nom, $args, $filtres, $lang, $ligne) {
 		else
 			die ("pas de balise dynamique pour #". strtolower($nom)." !");
 	}
-
 	// Y a-t-il une fonction de traitement filtres-arguments ?
 	$f = 'balise_' . $nom . '_stat';
 	if (function_exists($f))
@@ -261,6 +260,18 @@ function executer_balise_dynamique($nom, $args, $filtres, $lang, $ligne) {
 	if (!is_array($r))
 		return $r;
 	else {
+		// verifier que la fonction dyn est la, sinon se replier sur la generique si elle existe
+		if (!function_exists('balise_' . $nom . '_dyn')){
+			// regarder si une fonction generique n'existe pas
+			if (($p = strpos($nom,"_"))
+			&& ($file = find_in_path(strtolower(substr($nom,0,$p+1)) .'.php', 'balise/', true))) {
+				// dans ce cas, on lui injecte en premier arg le nom de la balise qu'on doit traiter
+				array_unshift($r,$nom);
+				$nom = substr($nom,0,$p+1);
+			}
+			else
+				die ("pas de balise dynamique pour #". strtolower($nom)." !");
+		}
 		if (!_DIR_RESTREINT) 
 			$file = _DIR_RESTREINT_ABS . $file;
 		return synthetiser_balise_dynamique($nom, $r, $file, $lang, $ligne);