diff --git a/.gitattributes b/.gitattributes
index a503f2978b196bc431a7cb161730df005d01817a..7e091f3b68684c3cae22d907a6fb186d9392789e 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -444,6 +444,9 @@ ecrire/configuration/syndications.php -text
 ecrire/configuration/transcodeur.php -text
 ecrire/configuration/versionneur.php -text
 ecrire/configuration/visiteurs.php -text
+ecrire/cron/maintenance.php -text
+ecrire/cron/popularites.php -text
+ecrire/cron/syndic.php -text
 ecrire/exec/accueil.php -text
 ecrire/exec/admin_effacer.php -text
 ecrire/exec/admin_plugin.php -text
@@ -583,7 +586,6 @@ ecrire/inc/instituer_auteur.php -text
 ecrire/inc/joindre.php -text
 ecrire/inc/lang_liste.php -text
 ecrire/inc/legender.php -text
-ecrire/inc/maintenance.php -text
 ecrire/inc/message_select.php -text
 ecrire/inc/minipres.php -text
 ecrire/inc/modifier.php -text
@@ -591,7 +593,6 @@ ecrire/inc/notifications.php -text
 ecrire/inc/petitionner.php -text
 ecrire/inc/plonger.php -text
 ecrire/inc/plugin.php -text
-ecrire/inc/popularites.php -text
 ecrire/inc/puce_statut.php -text
 ecrire/inc/rechercher.php -text
 ecrire/inc/referencer_traduction.php -text
@@ -601,7 +602,6 @@ ecrire/inc/securiser_action.php -text
 ecrire/inc/selectionner.php -text
 ecrire/inc/selectionner_auteur.php -text
 ecrire/inc/suivi_versions.php -text
-ecrire/inc/syndic.php -text
 ecrire/inc/tourner.php -text
 ecrire/inc/traduire.php -text
 ecrire/inc/utils.php -text
diff --git a/ecrire/action/editer_site.php b/ecrire/action/editer_site.php
index 053abc3ecf6c6ecc39a21c6469b105d40bfd9372..834814ec0b9073176d51bcd2fbdb119dea22f29e 100644
--- a/ecrire/action/editer_site.php
+++ b/ecrire/action/editer_site.php
@@ -18,9 +18,11 @@ function action_editer_site_dist() {
 
 	$securiser_action = charger_fonction('securiser_action', 'inc');
 	$arg = $securiser_action();
+	$resyndiquer = false;
+
 	if (preg_match(',options/(\d+),',$arg, $r)) {
 		$id_syndic = $r[1];
-		editer_site_options($id_syndic);
+		$resyndiquer = editer_site_options($id_syndic);
 	// Envoi depuis le formulaire d'edition d'un site existant
 	} else if ($id_syndic = intval($arg)) {
 
@@ -40,9 +42,9 @@ function action_editer_site_dist() {
 			set_request('reload', 'oui');
 
 		revisions_sites($id_syndic);
-	}
+	
 	// Envoi depuis le formulaire de creation d'un site
-	else if ($arg == 'oui') {
+	} else if ($arg == 'oui') {
 		set_request('reload', 'oui');
 		$id_syndic = insert_syndic(_request('id_parent'));
 		revisions_sites($id_syndic);
@@ -78,8 +80,6 @@ function action_editer_site_dist() {
 
 		$s = spip_query("SELECT id_syndic, descriptif FROM spip_syndic WHERE id_syndic=$id_syndic AND syndication IN ('oui', 'sus', 'off') LIMIT 1");
 		if ($t = spip_abstract_fetch($s)) {
-			include_spip('inc/syndic');
-			syndic_a_jour($id_syndic);
 
 			// Si on n'a pas de descriptif ou pas de logo, on va le chercher
 			$chercher_logo = charger_fonction('chercher_logo', 'inc');
@@ -94,9 +94,14 @@ function action_editer_site_dist() {
 					@rename($auto['logo'],
 					_DIR_IMG . 'siteon'.$id_syndic.'.'.$auto['format_logo']);
 			}
+			$resyndiquer = true;
 		}
 	}
 
+	if ($resyndiquer) {
+		include_spip('cron/syndic');
+		syndic_a_jour($id_syndic);		
+	}
 	// Rediriger le navigateur
 	$redirect = parametre_url(urldecode(_request('redirect')),
 		'id_syndic', $id_syndic, '&');
@@ -353,6 +358,8 @@ function analyser_site($url) {
 	return $result;
 }
 
+// Enregistrre les options et retourne True s'il faut syndiquer.
+
 // http://doc.spip.org/@editer_site_options
 function editer_site_options($id_syndic)
 {
@@ -368,11 +375,10 @@ function editer_site_options($id_syndic)
 	if ($oubli == 'oui' OR $oubli == 'non')
 		spip_query("UPDATE spip_syndic SET oubli='$oubli' WHERE id_syndic=$id_syndic");
 
-	if ($resume == 'oui' OR $resume == 'non') {
-		spip_query("UPDATE spip_syndic SET resume='$resume'	WHERE id_syndic=$id_syndic");
-		include_spip('inc/syndic');
-		syndic_a_jour($id_syndic);
-	}
+	if (!($resume == 'oui' OR $resume == 'non')) return false;
+
+	spip_query("UPDATE spip_syndic SET resume='$resume'	WHERE id_syndic=$id_syndic");
+	return true;
 }
 
 ?>
diff --git a/ecrire/inc/mail.php b/ecrire/cron/mail.php
similarity index 89%
rename from ecrire/inc/mail.php
rename to ecrire/cron/mail.php
index 3ee55d81d3d992392b30323ec2c6a2645b353dfa..b023df76f5ff9c92d89589f9188f2ae497ec7f59 100644
--- a/ecrire/inc/mail.php
+++ b/ecrire/cron/mail.php
@@ -12,19 +12,11 @@
 
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
-// http://doc.spip.org/@envoyer_mail
-function envoyer_mail($email, $sujet, $texte, $from = "", $headers = "") {
-	$envoyer_mail = charger_fonction('envoyer_mail','inc');
-	return $envoyer_mail($email,$sujet,$texte,$from,$headers);
-}
-
-
-
 //
 // Mail des nouveautes
 //
 // http://doc.spip.org/@cron_mail
-function cron_mail($t) {
+function cron_mail_dist($t) {
 	$adresse_neuf = $GLOBALS['meta']['adresse_neuf'];
 	$jours_neuf = $GLOBALS['meta']['jours_neuf'];
 	// $t = 0 si le fichier de lock a ete detruit
diff --git a/ecrire/inc/maintenance.php b/ecrire/cron/maintenance.php
similarity index 98%
rename from ecrire/inc/maintenance.php
rename to ecrire/cron/maintenance.php
index b59f5ed24dcd2daaa31b036ea3bd08e819c830de..f03f65599a7c379d8e0b6b6192992c03f19dbb23 100644
--- a/ecrire/inc/maintenance.php
+++ b/ecrire/cron/maintenance.php
@@ -14,7 +14,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 
 // Diverses taches de maintenance
 // http://doc.spip.org/@cron_maintenance
-function cron_maintenance ($t) {
+function cron_maintenance_dist ($t) {
 
 	// (re)mettre .htaccess avec deny from all
 	// dans les deux repertoires dits inaccessibles par http
diff --git a/ecrire/base/optimiser.php b/ecrire/cron/optimiser.php
similarity index 98%
rename from ecrire/base/optimiser.php
rename to ecrire/cron/optimiser.php
index a474c8d1ddc8f60ff06b07d31f66b7e55dd04154..9f27d36a16e52b482e9d188775e90f6399d4c326 100644
--- a/ecrire/base/optimiser.php
+++ b/ecrire/cron/optimiser.php
@@ -10,9 +10,18 @@
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
-
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
+
+// Cas particulier : optimiser est dans base/optimiser, et pas dans inc/
+// il faut donc definir la fonction _cron ici.
+// http://doc.spip.org/@cron_optimiser
+function cron_optimiser_dist($t) {
+
+	optimiser_base();
+	return 1;
+}
+
 // heure de reference pour le garbage collector = 24h auparavant
 // http://doc.spip.org/@optimiser_base
 function optimiser_base($attente = 86400) {
@@ -28,10 +37,6 @@ function optimiser_base($attente = 86400) {
 }
 
 
-	//
-	// MySQL
-	//
-
 // http://doc.spip.org/@optimiser_base_une_table
 function optimiser_base_une_table() {
 
diff --git a/ecrire/inc/popularites.php b/ecrire/cron/popularites.php
similarity index 92%
rename from ecrire/inc/popularites.php
rename to ecrire/cron/popularites.php
index 6092aadd7ec3d51e630e22e225707af6fd4fc72a..4d576aeb4360af894d1506a4d4b92301f72f3498 100644
--- a/ecrire/inc/popularites.php
+++ b/ecrire/cron/popularites.php
@@ -10,23 +10,21 @@
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
-
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
-
 //
 // Popularite, modele logarithmique
 //
 
 // http://doc.spip.org/@calculer_popularites
-function calculer_popularites() {
+function cron_popularites_dist($t) {
 
 	// Si c'est le premier appel, ne pas calculer
 	$t = $GLOBALS['meta']['date_popularites'];
 	ecrire_meta('date_popularites', time());
 	ecrire_metas();
 	if (!$t)
-		return;
+		return 1;
 
 	$duree = time() - $t;
 	// duree de demi-vie d'une visite dans le calcul de la popularite (en jours)
@@ -69,14 +67,4 @@ function calculer_popularites() {
 
 }
 
-//
-// Applique la regle de decroissance des popularites
-//
-// http://doc.spip.org/@cron_popularites
-function cron_popularites($t) {
-	calculer_popularites();
-	return 1;
-}
-
-
 ?>
diff --git a/ecrire/inc/syndic.php b/ecrire/cron/syndic.php
similarity index 99%
rename from ecrire/inc/syndic.php
rename to ecrire/cron/syndic.php
index 2c2d1ad79cb97d212293a6b731247fb7764b2e00..e1e45b38e2534d39d95e25c72278f2b4fb2a96dd 100644
--- a/ecrire/inc/syndic.php
+++ b/ecrire/cron/syndic.php
@@ -12,6 +12,11 @@
 
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
+// http://doc.spip.org/@cron_syndic
+function cron_syndic_dist($t) {
+	return executer_une_syndication();
+}
+
 //
 // Effectuer la syndication d'un unique site, retourne 0 si aucun a faire.
 //
@@ -574,10 +579,4 @@ function my_strtotime($la_date) {
 	return false;
 }
 
-
-// http://doc.spip.org/@cron_syndic
-function cron_syndic($t) {
-	return executer_une_syndication();
-}
-
 ?>
diff --git a/ecrire/inc/visites.php b/ecrire/cron/visites.php
similarity index 99%
rename from ecrire/inc/visites.php
rename to ecrire/cron/visites.php
index e53fc5cc9562961430909acf6107e7681d5a5d72..25f70f6e0fc42878319f83fbfeb5376438c13add 100644
--- a/ecrire/inc/visites.php
+++ b/ecrire/cron/visites.php
@@ -179,7 +179,7 @@ function calculer_visites($t) {
 // Calcule les stats en plusieurs etapes
 //
 // http://doc.spip.org/@cron_visites
-function cron_visites($t) {
+function cron_visites_dist($t) {
 	$encore = calculer_visites($t);
 
 	// Si ce n'est pas fini on redonne la meme date au fichier .lock
diff --git a/ecrire/inc/charger_plugin.php b/ecrire/inc/charger_plugin.php
index d18638faa951878f705a995c2eaf897412ea9ba4..850ae46106237030d4a4c1e340cf76757047acc4 100644
--- a/ecrire/inc/charger_plugin.php
+++ b/ecrire/inc/charger_plugin.php
@@ -437,7 +437,7 @@ function essaie_ajouter_liste_plugins($url) {
 // http://doc.spip.org/@chercher_enclosures_zip
 function chercher_enclosures_zip($rss, $desc = '') {
 	$liste = array();
-	include_spip('inc/syndic');
+	include_spip('cron/syndic');
 	foreach(analyser_backend($rss) as $item)
 		if ($item['enclosures']
 		AND $zips = extraire_balises($item['enclosures'], 'a'))
diff --git a/ecrire/inc/commencer_page.php b/ecrire/inc/commencer_page.php
index 6aec5cd2fcee60f305a8d96b8b0932c6dbba4373..72aeafe82839ff7d5ed387a4a140db33006e39ab 100644
--- a/ecrire/inc/commencer_page.php
+++ b/ecrire/inc/commencer_page.php
@@ -206,7 +206,7 @@ function alertes_auteur() {
 
 	if (isset($GLOBALS['meta']['message_crash_tables'])
 	AND autoriser('detruire')) {
-		include_spip('inc/maintenance');
+		include_spip('cron/maintenance');
 		if ($msg = message_crash_tables())
 			$alertes[] = $msg;
 	}
diff --git a/ecrire/inc/cron.php b/ecrire/inc/cron.php
index 25b6c9d8ca415e4e3ff0888ec1c0120187a673c6..f0cfa24c326d2fbecd5eadc81f4b2175d9f58f1e 100644
--- a/ecrire/inc/cron.php
+++ b/ecrire/inc/cron.php
@@ -21,7 +21,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 // - les scripts usuels standard sont limites a 30 secondes
 
 // Solution:
-// Toute connexion a SPIP s'achevent  par un appel a la fonction cron()
+// Toute connexion a SPIP s'acheve par un appel a la fonction cron()
 // qui appelle la fonction surchargeable inc_cron().
 // Sa definition standard ci-dessous prend dans une liste de taches
 // la plus prioritaire, leurs dates etant donnees par leur fichier-verrou.
@@ -50,8 +50,6 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 // Elle doit etre definie dans le fichier homonyme du repertoire "inc/"
 // qui est automatiquement lu.
 
-// Une seule tache est executee pour eviter la guillotine des 30 secondes.
-
 // http://doc.spip.org/@inc_cron_dist
 function inc_cron_dist($taches = array()) {
 
@@ -83,10 +81,9 @@ function inc_cron_dist($taches = array()) {
 	if ($tache) {
 
 		spip_timer('tache');
-		include_spip("inc/$tache");
-		$f = 'cron_' . $tache;
-		$retour = $f($last);
 		touch($lock);
+		$cron = charger_fonction($tache, 'cron');
+		$retour = $cron($last);
 		// si la tache a eu un effet : log
 		if ($retour) {
 			spip_log("cron: $tache (" . spip_timer('tache') . ") $retour");
@@ -139,16 +136,15 @@ function taches_generales() {
 	return pipeline('taches_generales_cron',$taches_generales);
 }
 
+// Pas de fichier a part pour une fonction aussi petite:
+// - elle peut retirer les fichiers perimes
+// - elle fait appliquer le quota
+// En cas de quota sur le CACHE/, nettoyer les fichiers les plus vieux
+// http://doc.spip.org/@cron_invalideur
+function cron_invalideur_dist($t) {
 
-// Cas particulier : optimiser est dans base/optimiser, et pas dans inc/
-// il faut donc definir la fonction _cron ici.
-// http://doc.spip.org/@cron_optimiser
-function cron_optimiser($t) {
-
-	include_spip('base/optimiser');
-	optimiser_base();
-	// relacher le verrour
+	include_spip('inc/invalideur');
+	appliquer_quota_cache();
 	return 1;
 }
-
 ?>
diff --git a/ecrire/inc/invalideur.php b/ecrire/inc/invalideur.php
index 79bae2a96ee7418c3e47c852424efe928293354b..b52fe81a661f224d1eb3292567849a2496859f02 100644
--- a/ecrire/inc/invalideur.php
+++ b/ecrire/inc/invalideur.php
@@ -133,16 +133,6 @@ function appliquer_quota_cache() {
 }
 
 
-// Cette fonction fait le menage dans le cache :
-// - elle peut retirer les fichiers perimes
-// - elle fait appliquer le quota
-// http://doc.spip.org/@cron_invalideur
-function cron_invalideur($t) {
-	// En cas de quota sur le CACHE/, nettoyer les fichiers les plus vieux
-	appliquer_quota_cache();
-	return 1;
-}
-
 //
 // Destruction des fichiers caches invalides
 //
diff --git a/ecrire/inc/rubriques.php b/ecrire/inc/rubriques.php
index 575f6b201c98c2bb4269061a70a3e2a7efb6c29a..7b3ed2ea206b7bd8d8b323f108a6d25771bae6cb 100644
--- a/ecrire/inc/rubriques.php
+++ b/ecrire/inc/rubriques.php
@@ -398,12 +398,6 @@ function calculer_prochain_postdate($check= false) {
 	ecrire_metas(); // attention, sert aussi aux appelants
 }
 
-// http://doc.spip.org/@cron_rubriques
-function cron_rubriques($t) {
-	calculer_rubriques();
-	return 1;
-}
-
 
 // creer_rubrique_nommee('truc/machin/chose') va creer
 // une rubrique truc, une sous-rubrique machin, et une sous-sous-rubrique
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 21155be22159558c122290b3058e79deaefca8de..2b927dbb0cf1cd58fc62c378fca405d8b82f04b7 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -594,12 +594,14 @@ function action_cron() {
 // cron() : execution des taches de fond
 // quand il est appele par public.php il n'est pas gourmand;
 // quand il est appele par ?action=cron, il est gourmand
+// On peut lui passer en 2e arg le tableau de taches attendu par inc_cron()
+// Retourne Vrai si un tache a pu etre effectuee
 
 // http://doc.spip.org/@cron
-function cron ($gourmand=false) {
+function cron ($gourmand=false, $taches= array()) {
 
 	// Si base inaccessible, laisser tomber.
-	if (!spip_connect()) return; 
+	if (!spip_connect()) return false; 
 
 	// Si on est gourmand, ou si le fichier gourmand n'existe pas
 	// ou est trop vieux (> 60 sec), on va voir si un cron est necessaire.
@@ -616,13 +618,15 @@ function cron ($gourmand=false) {
 		if (spip_touch(_DIR_TMP.'cron.lock', 2)) {
 			$cron = charger_fonction('cron', 'inc', true);
 			if ($cron) {
-				$cron();
+				$cron($taches);
 				// redater a la fin du cron
 				// car il peut prendre plus de 2 secondes.
 				spip_touch(_DIR_TMP.'cron.lock', 0);
+				return true;
 			}
 		}# else spip_log("busy");
 	}
+	return false;
 }
 
 
diff --git a/ecrire/inc/vieilles_defs.php b/ecrire/inc/vieilles_defs.php
index 82bb25fa286295b63683bf3ebff6ce8527958624..31a927d0717259249d3a323384ad236cdfd3ed79 100644
--- a/ecrire/inc/vieilles_defs.php
+++ b/ecrire/inc/vieilles_defs.php
@@ -397,4 +397,12 @@ function spip_fetch_array($r, $t=MYSQL_ASSOC) {
 	if ($r) return mysql_fetch_array($r, $t);
 }
 
+
+// http://doc.spip.org/@envoyer_mail
+function envoyer_mail($email, $sujet, $texte, $from = "", $headers = "") {
+spip_log('creer_objet_multi() '.$GLOBALS['REQUEST_URI'].' - '.$_SERVER['SCRIPT_NAME'], 'vieilles_defs');
+	$envoyer_mail = charger_fonction('envoyer_mail','inc');
+	return $envoyer_mail($email,$sujet,$texte,$from,$headers);
+}
+
 ?>