diff --git a/ecrire/inc/invalideur.php b/ecrire/inc/invalideur.php
index bcb39c74688120bd67b745caee23b3411c5744b1..c2298d59ea73fce005b287b0cd9e32e7d8c28d0c 100644
--- a/ecrire/inc/invalideur.php
+++ b/ecrire/inc/invalideur.php
@@ -287,4 +287,24 @@ function code_invalideur_forums($p, $code) {
 	(!($Cache[\''.$type.'\']['.$valeur."]=1) ? '':\n\t" . $code .")\n";
 }
 
+
+// Fonction permettant au compilo de calculer les invalideurs d'une page
+function calcul_invalideurs($corps, $primary, &$boucles, $id_boucle) {
+	if ($primary == 'id_forum'
+	OR in_array($primary, explode(',', $GLOBALS['invalider_caches']))) {
+		$corps .= "\n\t\t\$Cache['$primary'][intval(" .
+		  (($primary != 'id_forum')  ? 
+		   index_pile($id_boucle, $primary, $boucles) :
+		   ("calcul_index_forum(" . 
+		// Retournera 4 [$SP] mais force la demande du champ a MySQL
+		    index_pile($id_boucle, 'id_article', $boucles) . ',' .
+		    index_pile($id_boucle, 'id_breve', $boucles) .  ',' .
+		    index_pile($id_boucle, 'id_rubrique', $boucles) .',' .
+		    index_pile($id_boucle, 'id_syndic', $boucles) .
+		    ")")) .
+		  ")] = 1; // invalideurs\n";
+	}
+	return $corps;
+}
+
 ?>
diff --git a/ecrire/public/compiler.php b/ecrire/public/compiler.php
index e086a6bf700a9088c83f3831b9e360e8beaebe81..a44a3ef62ce98a8725023e1b5cd66a7fb86d269b 100644
--- a/ecrire/public/compiler.php
+++ b/ecrire/public/compiler.php
@@ -166,22 +166,14 @@ function calculer_boucle_nonrec($id_boucle, &$boucles) {
 		$corps .= "
 		if (\$Numrows['$id_boucle']['compteur_boucle']-1 >= \$debut_boucle) {
 		if (\$Numrows['$id_boucle']['compteur_boucle']-1 > \$fin_boucle) break;\n";
-	
+
 	// Calculer les invalideurs si c'est une boucle non constante et si on
 	// souhaite invalider ces elements
-	if (!$constant AND $primary AND ($primary == 'id_forum'
-	OR in_array($primary, explode(',', $GLOBALS['invalider_caches']))))
-		$corps .= "\n\t\t\$Cache['$primary'][intval(" .
-		  (($primary != 'id_forum')  ? 
-		   index_pile($id_boucle, $primary, $boucles) :
-		   ("calcul_index_forum(" . 
-		// Retournera 4 [$SP] mais force la demande du champ a MySQL
-		    index_pile($id_boucle, 'id_article', $boucles) . ',' .
-		    index_pile($id_boucle, 'id_breve', $boucles) .  ',' .
-		    index_pile($id_boucle, 'id_rubrique', $boucles) .',' .
-		    index_pile($id_boucle, 'id_syndic', $boucles) .
-		    ")")) .
-		  ")] = 1; // invalideurs\n";
+	if (!$constant AND $primary) {
+		include_spip('inc/invalideur');
+		if (function_exists($i = 'calcul_invalideurs'))
+			$corps = $i($corps, $primary, $boucles, $id_boucle);
+	}
 
 	// faudrait expanser le foreach a la compil, car y en a souvent qu'un 
 	// et puis faire un [] plutot qu'un "','."