diff --git a/ecrire/inc/genie.php b/ecrire/inc/genie.php
index 799ca6922bb4c926f114c69a28bbbea49d15e478..c19e27b6dd0620ea1b573ddbcee6ce10eeee44a3 100644
--- a/ecrire/inc/genie.php
+++ b/ecrire/inc/genie.php
@@ -138,8 +138,11 @@ function genie_queue_watch_dist(){
 	if ($deja_la) return; // re-entrance si l'insertion des jobs echoue (pas de table spip_jobs a l'upgrade par exemple)
 	$deja_la = true;
 	$taches = taches_generales();
+	$programmees = sql_allfetsel('fonction','spip_jobs',sql_in('fonction',array_keys($taches)));
+	$programmees = array_map('reset',$programmees);
 	foreach($taches as $tache=>$periode){
-		queue_genie_replan_job($tache,$periode,time()-round(rand(1,$periode)));
+		if (!in_array($tache,$programmees))
+			queue_genie_replan_job($tache,$periode,time()-round(rand(1,$periode)),0);
 	}
 	$deja_la = false;
 	return 1;
@@ -156,25 +159,29 @@ function genie_queue_watch_dist(){
  *   date du dernier appel (timestamp)
  * @param int $time
  *   date de replanification
+ *   si null calculee automaitquement a partir de $last et $period
+ *   si 0  = asap mais on n'insere pas le job si deja en cours d'execution
  * @param int $priority
  *   priorite
  * @return void
  */
-function queue_genie_replan_job($function,$period,$last=null,$time=0, $priority=0){
-		if (!$time){
-			if (!is_null($last))
-				$time = $last+$period;
-			else
-				$time=time();
-		}
-		if (is_null($last))
-			$last = $time-$period;
-		spip_log("replan_job $function $period $last $time $priority",'queue');
-		include_spip('inc/queue');
-		// on replanifie un job cron
-		// uniquement si il n'y en a pas deja un avec le meme nom
-		// independament de l'argument
-		queue_add_job($function, _T('tache_cron_secondes', array('function'=>$function, 'nb'=>$period)), array($last), "genie/", 'function_only', $time, $priority);
+function queue_genie_replan_job($function,$period,$last=0,$time=null, $priority=0){
+	static $done = array();
+	if (isset($done[$function])) return;
+	$done[$function] = true;
+	if (is_null($time)){
+		$time=time();
+		if ($last)
+			$time = max($last+$period,$time);
+	}
+	if (!$last)
+		$last = $time-$period;
+	spip_log("replan_job $function $period $last $time $priority",'queue');
+	include_spip('inc/queue');
+	// on replanifie un job cron
+	// uniquement si il n'y en a pas deja un avec le meme nom
+	// independament de l'argument
+	queue_add_job($function, _T('tache_cron_secondes', array('function'=>$function, 'nb'=>$period)), array($last), "genie/", 'function_only', $time, $priority);
 }
 
 
diff --git a/ecrire/inc/queue.php b/ecrire/inc/queue.php
index 079ad94e0bfad95f946ebfa8f61005eb56144c22..27e8d97eea0cf12c49d963c99bffbf2599800daf 100644
--- a/ecrire/inc/queue.php
+++ b/ecrire/inc/queue.php
@@ -321,7 +321,7 @@ function queue_schedule($force_jobs = null){
 				#spip_log("JQ schedule job ".$nbj." OK",'jq');
 				// on reinsert dans la base aussitot avec un status=_JQ_PENDING
 				$row['status'] = _JQ_PENDING;
-				$row['date'] = $time;
+				$row['date'] = date('Y-m-d H:i:s',$time);
 				sql_insertq('spip_jobs', $row);
 
 				// on a la main sur le job :
@@ -362,7 +362,7 @@ function queue_close_job(&$row,$time,$result=0){
 		include_spip('inc/genie');
 		if ($result<0)
 			// relancer tout de suite, mais en baissant la priorite
-			queue_genie_replan_job($row['fonction'],$periode,0-$result/*last*/,0/*ASAP*/,$row['priorite']-1);
+			queue_genie_replan_job($row['fonction'],$periode,$time,time(),$row['priorite']-1);
 		else
 			// relancer avec la periode prevue
 			queue_genie_replan_job($row['fonction'],$periode,$time);