diff --git a/inc-balises.php3 b/inc-balises.php3
index be764281608a49171fa2ca02a3bc7570fe6019c1..fa48ee1058f9316c76be7eacaea3159eb0297999 100644
--- a/inc-balises.php3
+++ b/inc-balises.php3
@@ -805,12 +805,19 @@ function balise_HTTP_HEADER_dist($p) {
 // #CACHE{24*3600}
 function balise_CACHE_dist($p) {
 	$duree = valeur_numerique($p->param[0][1][0]->texte);
+
+	// noter la duree du cache dans un entete proprietaire
+	$p->code .= '\'<'.'?php header("X-Spip-Cache: '
+		. $duree
+		. '"); ?'.'>\'';
+
+	// remplir le header Cache-Control
 	if ($duree > 0)
-		$p->code = '\'<'.'?php header("Cache-Control: max-age='
+		$p->code .= '.\'<'.'?php header("Cache-Control: max-age='
 			. $duree
 			. '"); ?'.'>\'';
 	else
-		$p->code = '\'<'
+		$p->code .= '.\'<'
 		.'?php header("Cache-Control: no-store, no-cache, must-revalidate"); ?'
 		.'><'
 		.'?php header("Pragma: no-cache"); ?'
diff --git a/inc-cache.php3 b/inc-cache.php3
index d54b6891ccd95451c35510ee303933203f67ac97..199bbfa3e59f5fc0d69a8a8b01b174a040ad5252 100644
--- a/inc-cache.php3
+++ b/inc-cache.php3
@@ -136,15 +136,13 @@ function cache_valide($chemin_cache, $contenu, $date) {
 
 // gestion des delais par specification a l'interieur du squelette
 
-function cache_valide_autodetermine($chemin_cache, $contenu, $date) {
+function cache_valide_autodetermine($chemin_cache, $page, $date) {
 
-	if (!$contenu) return 1;
+	if (!$page) return 1;
+
+	if (strlen($duree = $page['entetes']['X-Spip-Cache']))
+		return ($date + $duree > time()) ? 0 : $t;
 
-	if (preg_match('/max-age\s*=\s*(\d+)/', 
-		       $page['entetes']['Cache-Control'],
-		       $r)) 
-	  return ($r[1] > (time() - $date)) ? 0 : $r[1];
-	
 	// squelette ancienne maniere, on se rabat sur le vieux modele
 	return cache_valide($chemin_cache, $contenu, $date);
 }
diff --git a/inc-calcul.php3 b/inc-calcul.php3
index ca4902e95c598afeede846d19ba74dd20293207b..b208d60ad4beca7c61309ad28daaef9bb39074c8 100644
--- a/inc-calcul.php3
+++ b/inc-calcul.php3
@@ -273,10 +273,12 @@ function analyse_resultat_skel($nom, $Cache, $corps) {
 	}
 
 	return array('texte' => $corps,
-		     'squelette' => $nom,
-		     'process_ins' => ((strpos($corps,'<'.'?')=== false)?'html':'php'),
-		     'invalideurs' => $Cache,
-		     'entetes' => $headers);
+		'squelette' => $nom,
+		'process_ins' => ((strpos($corps,'<'.'?')=== false)?'html':'php'),
+		'invalideurs' => $Cache,
+		'entetes' => $headers,
+		'duree' => $headers['X-Spip-Cache']
+	);
 }
 
 ?>