diff --git a/ecrire/inc/distant.php b/ecrire/inc/distant.php
index a9347ea2fb214216833bb490ea9791f107e92b64..dab964880c8147242a5bb8e76d5b6efec322b808 100644
--- a/ecrire/inc/distant.php
+++ b/ecrire/inc/distant.php
@@ -21,6 +21,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 // Cree au besoin la copie locale d'un fichier distant
 // mode = 'test' - ne faire que tester
 // mode = 'auto' - charger au besoin
+// mode = 'modif' - Si deja present, ne charger que si If-Modified-Since
 // mode = 'force' - charger toujours (mettre a jour)
 //
 // Prend en argument un chemin relatif au rep racine, ou une URL
@@ -36,27 +37,28 @@ function copie_locale($source, $mode='auto') {
 	if (preg_match($reg, $source, $local)) return substr(_DIR_IMG,strlen(_DIR_RACINE)) . urldecode($local[1]);
 
 	$local = fichier_copie_locale($source);
+	$localrac = _DIR_RACINE.$local;
+	$t = ($mode=='force') ? false  : @file_exists($localrac);
 
 	// test d'existence du fichier
-	if ($mode == 'test')
-		return @file_exists(_DIR_RACINE.$local) ? $local : '';
+	if ($mode == 'test') return $t ? $local : '';
 
 	// si $local = '' c'est un fichier refuse par fichier_copie_locale(),
 	// par exemple un fichier qui ne figure pas dans nos documents ;
 	// dans ce cas on n'essaie pas de le telecharger pour ensuite echouer
 	if (!$local) return false;
 
-	// sinon voir si on doit le telecharger
-	if ($local != $source
-	AND preg_match(',^\w+://,', $source)) {
-		if (($mode=='auto' AND !@file_exists(_DIR_RACINE.$local))
-		OR $mode=='force') {
-			$res = recuperer_page($source,_DIR_RACINE.$local,false,_COPIE_LOCALE_MAX_SIZE);
-			if (!$res) return false;
-			spip_log ('ecrire copie locale '._DIR_RACINE.$local." taille $res");
+	// sinon voir si on doit/peut le telecharger
+	if ($local == $source OR !preg_match(',^\w+://,', $source)) 
+		return $local;
+
+	if ($mode=='modif' OR !$t) {
+		$res = recuperer_page($source, $localrac,false,_COPIE_LOCALE_MAX_SIZE, '','',false, $t ? filemtime($localrac) : '');
+		if (!$res) return $t ? $local : false;
+#		spip_log ('ecrire copie locale '.$localrac." taille $res");
 			
-			// pour une eventuelle indexation
-			pipeline('post_edition',
+		// pour une eventuelle indexation
+		pipeline('post_edition',
 				array(
 					'args' => array(
 						'operation' => 'copie_locale',
@@ -66,7 +68,6 @@ function copie_locale($source, $mode='auto') {
 					'data' => null
 				)
 			);
-		}
 	}
 
 	return $local;
@@ -218,7 +219,7 @@ function recuperer_lapage($url, $trans=false, $get='GET', $taille_max = 1048576,
 		$refuser_gz = true;
 
 	// ouvrir la connexion et envoyer la requete et ses en-tetes
-	list($f, $fopen) = init_http($get, $url, $refuser_gz, $uri_referer, $datas, _INC_DISTANT_VERSION_HTTP);
+	list($f, $fopen) = init_http($get, $url, $refuser_gz, $uri_referer, $datas, _INC_DISTANT_VERSION_HTTP, $date_verif);
 	if (!$f) {
 		spip_log("ECHEC init_http $url");
 		return false;
@@ -548,7 +549,7 @@ function need_proxy($host)
 // retourne le descripteur sur lequel lire la reponse
 //
 // http://doc.spip.org/@init_http
-function init_http($method, $url, $refuse_gz=false, $referer = '', $datas="", $vers="HTTP/1.0") {
+function init_http($method, $url, $refuse_gz=false, $referer = '', $datas="", $vers="HTTP/1.0", $date='') {
 	$user = $via_proxy = $proxy_user = ''; 
 	$fopen = false;
 
@@ -570,7 +571,7 @@ function init_http($method, $url, $refuse_gz=false, $referer = '', $datas="", $v
 	if (!isset($t['path']) || !($path = $t['path'])) $path = "/";
 	if (@$t['query']) $path .= "?" .$t['query'];
 
-	$f = lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $refuse_gz, $referer, $datas, $vers);
+	$f = lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $refuse_gz, $referer, $datas, $vers, $date);
 	if (!$f) {
 	  // fallback : fopen
 		if (!$GLOBALS['tester_proxy']) {
@@ -584,7 +585,7 @@ function init_http($method, $url, $refuse_gz=false, $referer = '', $datas="", $v
 }
 
 // http://doc.spip.org/@lance_requete
-function lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $refuse_gz=false, $referer = '', $datas="", $vers="HTTP/1.0") {
+function lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $refuse_gz=false, $referer = '', $datas="", $vers="HTTP/1.0", $date='') {
 
 	$proxy_user = '';
 	$http_proxy = need_proxy($host);
@@ -612,6 +613,7 @@ function lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $
 	. "User-Agent: " . _INC_DISTANT_USER_AGENT . "\r\n"
 	. ($refuse_gz ? '' : ("Accept-Encoding: " . _INC_DISTANT_CONTENT_ENCODING . "\r\n"))
 	. (!$site ? '' : "Referer: $site/$referer\r\n")
+	. (!$date ? '' : "If-Modified-Since: " . (gmdate("D, d M Y H:i:s", $date)  ." GMT\r\n"))
 	. (!$user ? '' : ("Authorization: Basic " . base64_encode($user) ."\r\n"))
 	. (!$proxy_user ? '' : "Proxy-Authorization: Basic $proxy_user\r\n")
 	. (!strpos($vers, '1.1') ? '' : "Keep-Alive: 300\r\nConnection: keep-alive\r\n");
diff --git a/ecrire/inc/presentation_mini.php b/ecrire/inc/presentation_mini.php
index 5847ccbfff05202e50b8ffb0134ded353630971d..ae32530b7c1891756b913d81b2d47a6b8bffd9f0 100644
--- a/ecrire/inc/presentation_mini.php
+++ b/ecrire/inc/presentation_mini.php
@@ -410,8 +410,8 @@ function info_maj ()
 #	list($maj,$min,$rev) = preg_split('/\D+/', '1.9.2i'); # pour test
 	include_spip('inc/distant');
 	$liste = _VERSIONS_SERVEUR . _VERSIONS_LISTE;
-	if (!$page = recuperer_page($liste)) return '';
-
+	if (!$page = copie_locale($liste, 'modif')) return '';
+	$page = file_get_contents(_DIR_RACINE . $page);
 	// reperer toutes les versions de numero majeur superieur ou egal
 	// (a revoir quand on arrivera a SPIP V10 ...)
 	$p = substr("0123456789", intval($maj));