diff --git a/ecrire/balise/formulaire_.php b/ecrire/balise/formulaire_.php
index f708e834b4a219a637730fa4a4e0e2ce09c2848e..e05681d43038b727a6bd278aae694ab6de12bdd3 100644
--- a/ecrire/balise/formulaire_.php
+++ b/ecrire/balise/formulaire_.php
@@ -135,7 +135,20 @@ function balise_FORMULAIRE__dist($p) {
 	}
 
 	// sinon renvoyer un code php dynamique
-	return calculer_balise_dynamique($p, $p->nom_champ, []);
+	$p = calculer_balise_dynamique($p, $p->nom_champ, []);
+
+	if (!test_espace_prive()
+	  and !empty($p->descr['sourcefile'])
+	  and $f = $p->descr['sourcefile']
+	  and basename(dirname($f)) === 'modeles') {
+		// un modele est toujours inséré en texte dans son contenant
+		// donc si on est dans le public avec un cache on va perdre le dynamisme
+		// et on risque de mettre en cache les valeurs pre-remplies du formulaire
+		// on injecte donc le PHP qui va appeler la fonction pour generer le formulaire au lieu de directement la fonction
+		$p->code = "'<'.'?php echo (".texte_script($p->code)."); ?'.'>'";
+		// dans l'espace prive on a pas de cache, donc pas de soucis (et un leak serait moins grave)
+	}
+	return $p;
 }
 
 /**
diff --git a/ecrire/inc_version.php b/ecrire/inc_version.php
index fb9c2f22e61d9c003ed1b1e500545af8a9870cf9..955e5877216c21083efe6229179b3364cfc074cf 100644
--- a/ecrire/inc_version.php
+++ b/ecrire/inc_version.php
@@ -449,7 +449,7 @@ define('_SPIP_EXTRA_VERSION', '-dev');
 define('_DEV_VERSION_SPIP_COMPAT', '4.0.99');
 // version des signatures de fonctions PHP
 // (= date de leur derniere modif cassant la compatibilite et/ou necessitant un recalcul des squelettes)
-$spip_version_code = 20211021;
+$spip_version_code = 20211117;
 // version de la base SQL (= Date + numero incremental a 2 chiffres YYYYMMDDXX)
 $spip_version_base = 2021021800;