diff --git a/ecrire/inc/cron.php b/ecrire/inc/cron.php
index f0cfa24c326d2fbecd5eadc81f4b2175d9f58f1e..7f38d3cab0c9203442b2896e5e5c916a895ef704 100644
--- a/ecrire/inc/cron.php
+++ b/ecrire/inc/cron.php
@@ -59,7 +59,6 @@ function inc_cron_dist($taches = array()) {
 	// Quelle est la tache la plus urgente ?
 	$tache = '';
 	$tmin = $t = time();
-	clearstatcache();
 	foreach ($taches as $nom => $periode) {
 		$celock = _DIR_TMP . $nom . '.lock';
 		$date_lock = @filemtime($celock);
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 6016c27454efaf538972776219307da2a8794318..8cc4387cbab57c7fc63179f37a6247ec20620c31 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -558,22 +558,20 @@ function spip_timer($t='rien') {
 }
 
 
-// spip_touch : verifie si un fichier existe et n'est pas vieux (duree en s)
-// et le cas echeant le touch() ; renvoie true si la condition est verifiee
-// et fait touch() sauf si ca n'est pas souhaite
-// (regle aussi le probleme des droits sur les fichiers touch())
+// Renvoie False si un fichier n'est pas plus vieux que $duree secondes,
+// sinon renvoie True et le date sauf si ca n'est pas souhaite
 // http://doc.spip.org/@spip_touch
 function spip_touch($fichier, $duree=0, $touch=true) {
-	if (!($exists = @is_readable($fichier))
-	|| ($duree == 0)
-	|| (@filemtime($fichier) < time() - $duree)) {
-		if ($touch) {
-			if (!@touch($fichier)) { spip_unlink($fichier); @touch($fichier); };
-			if (!$exists) @chmod($fichier, _SPIP_CHMOD & ~0111);
-		}
-		return true;
+	if ($duree) {
+		clearstatcache();
+		if ((@$f=filemtime($fichier)) AND ($f >= time() - $duree))
+			return false;
 	}
-	return false;
+	if ($touch) {
+		if (!@touch($fichier)) { spip_unlink($fichier); @touch($fichier); };
+		@chmod($fichier, _SPIP_CHMOD & ~0111);
+	}
+	return true;
 }
 
 // Ce declencheur de tache de fond, de l'espace prive (cf inc_presentation)