diff --git a/ecrire/public/admin.php b/ecrire/public/admin.php
index b0d5333f91e0cca74c79606035fe075b1882ce6e..50546909712c2681b766add7fbf4bd1b6ab838dd 100644
--- a/ecrire/public/admin.php
+++ b/ecrire/public/admin.php
@@ -40,11 +40,8 @@ function affiche_boutons_admin($contenu) {
 	//
 	include_spip('inc/lang');
 	include_spip('base/abstract_sql');
-	$lang = spip_abstract_fetsel(array('lang'),
-					array('spip_auteurs'),
-					array("login='" .
-					      addslashes(ereg_replace('^@','',$GLOBALS['spip_admin'])) .
-					      "'"));
+	$login = ereg_replace('^@','',$GLOBALS['spip_admin']);
+	$lang = spip_abstract_fetsel(array('lang'), array('spip_auteurs'), array("login='" . addslashes($login) . "'"));
 	if ($lang['lang']) lang_select($lang['lang']);
 
 	// Recuperer sans l'afficher la balise #FORMULAIRE_ADMIN, en float
diff --git a/ecrire/public/assembler.php b/ecrire/public/assembler.php
index 16339c508cd262ce88af73cc0bd1814e32da46cf..04448347677fd311a99cf75fbafa4cd8925aa024 100644
--- a/ecrire/public/assembler.php
+++ b/ecrire/public/assembler.php
@@ -60,16 +60,6 @@ function public_assembler_dist($fond) {
 }
 
 
-// Remplir les globals pour les boutons d'admin
-
-function restaurer_globales ($contexte) {
-	if (is_array($contexte)) {
-		foreach ($contexte as $var=>$val) {
-			$GLOBALS[$var] = $val;
-		}
-	}
-}
-
 function is_preview()
 {
 	global $var_mode;
@@ -126,9 +116,11 @@ function assembler_page ($fond) {
 		$page['entetes']["Connection"] = "close";
 		$page['texte'] = "";
 	} else {
-		if (!$use_cache)
-			restaurer_globales($page['contexte']);
-		else {
+		if (!$use_cache && isset($page['contexte'])) {
+// Remplir les globals pour les boutons d'admin
+			foreach ($contexte as $var=>$val)
+				$GLOBALS[$var] = $val;
+		} else {
 			$f = charger_fonction('parametrer', 'public');
 			$page = $f($fond, '', $chemin_cache);
 			if ($chemin_cache)
@@ -192,7 +184,7 @@ function auto_expire($page)
 	if (!isset($flag_dynamique)) {
 		if (preg_match("/header\s*\(\s*.Expire:([\s\d])*.\s*\)/is",$page['texte'], $r))
 			$flag_dynamique = (intval($r[1]) === 0);
-		else	if (preg_match("/([\s\d])*.\s*\)/is",$page['entetes']['Expire'], $r))
+		else	if (isset($page['entetes']['Expire']) AND preg_match("/([\s\d])*.\s*\)/is",$page['entetes']['Expire'], $r))
 			$flag_dynamique = (intval($r[1]) === 0);
 	}
 }
diff --git a/ecrire/public/balises.php b/ecrire/public/balises.php
index 26d1dc3ffdaff2db81c3dbc50d42323df9babff3..4edd7214a03a66a6b800b0997e1e595414967e73 100644
--- a/ecrire/public/balises.php
+++ b/ecrire/public/balises.php
@@ -523,8 +523,7 @@ function calculer_balise_logo ($p) {
 	}
 
 	// analyser les faux filtres
-	$flag_fichier = 0;
-	$filtres = '';
+	$flag_fichier = $flag_stop = $flag_lien_auto = $code_lien = $filtres = $align = $lien = '';
 
 	if (is_array($p->fonctions)) {
 		foreach($p->fonctions as $couple) {
@@ -594,7 +593,7 @@ function calculer_balise_logo ($p) {
 	else {
 		if (!$code_lien)
 			$code_lien = "''";
-		$code_lien .= ", '". addslashes($align) . "'";
+		$code_lien .= ", '". $align . "'";
 	}
 
 	// cas des documents
diff --git a/ecrire/public/cacher.php b/ecrire/public/cacher.php
index a10f86100ec1b69b9a19fdc4550a4ef80f06591d..eeff3c3411442e1dece245537131f132bdcff239 100644
--- a/ecrire/public/cacher.php
+++ b/ecrire/public/cacher.php
@@ -92,12 +92,7 @@ function retire_caches($chemin = '') {
 
 	// En priorite le cache qu'on appelle maintenant
 	if ($chemin) {
-		$f = spip_abstract_fetsel(array("fichier"),
-				    array("spip_caches"),
-				    array("fichier = '".addslashes($chemin)."' ",  "type='x'"),
-				    "",
-				    array(),
-				    1);
+		$f = spip_abstract_fetsel(array("fichier"),  array("spip_caches"), array("fichier = '".addslashes($chemin)."' ",  "type='x'"), "", array(), 1);
 		if ($f['fichier']) $suppr[$f['fichier']] = true;
 	}
 
@@ -156,10 +151,10 @@ function cache_valide_autodetermine($chemin_cache, $page, $date) {
 	if (!$page) return 1;
 
 	if (isset($page['entetes']['X-Spip-Cache'])) {
-		$duree = $page['entetes']['X-Spip-Cache'];
+		$duree = intval($page['entetes']['X-Spip-Cache']);
 		if ($duree == 0)  #CACHE{0}
 			return -1;
-		else if ($date + intval($duree) < time())
+		else if ($date + $duree < time())
 			return $duree;
 		else
 			return 0;
@@ -178,8 +173,8 @@ function creer_cache(&$page, &$chemin_cache, $duree) {
 
 	// arbitrage entre ancien et nouveau modele de delai:
 	// primaute a la duree de vie de la page donnee a l'interieur de la page 
-	if (strlen($t = $page['entetes']['X-Spip-Cache']))
-		$duree = intval($t);
+	if (isset($page['entetes']['X-Spip-Cache']))
+		$duree = intval($page['entetes']['X-Spip-Cache']);
 
 	// Enregistrer le fichier cache qui contient
 	// 1) la carte d'identite de la page (ses "globals", genre id_article=7)
@@ -288,9 +283,9 @@ function public_cacher_dist($contexte, &$use_cache, &$chemin_cache, &$page, &$la
 	}
 
 	// cas sans jamais de cache pour raison interne
-	if ($GLOBALS['var_mode'] &&
-		($GLOBALS['_COOKIE']['spip_session']
-		 || $GLOBALS['_COOKIE']['spip_admin']
+	if (isset($GLOBALS['var_mode']) &&
+	    (isset($GLOBALS['_COOKIE']['spip_session'])
+	    || isset($GLOBALS['_COOKIE']['spip_admin'])
 		 || @file_exists(_ACCESS_FILE_NAME))) {
 			supprimer_fichier(_DIR_CACHE . $chemin_cache);
 	}
diff --git a/ecrire/public/compiler.php b/ecrire/public/compiler.php
index 82d2be652f30874926db40ef7d5f3d61a3367982..ea049fdf11ef6502f33a13826f2c5fd4698090e8 100644
--- a/ecrire/public/compiler.php
+++ b/ecrire/public/compiler.php
@@ -101,8 +101,9 @@ function calculer_boucle($id_boucle, &$boucles) {
 			("\n\t$init = array();") : '') .
 		calculer_requete_sql($boucles[$id_boucle]);
     }
+  $notrace = isset($GLOBALS['var_mode_affiche']) ? ($GLOBALS['var_mode_affiche'] != 'resultat') : true;
   return $req . $corps 
-	. (($GLOBALS['var_mode_affiche'] != 'resultat') ? "" : "
+	. ($notrace ? "" : "
 		boucle_debug_resultat('$id_boucle', 'resultat', \$t0);")
 	.  "\n	return \$t0;";
 }
diff --git a/ecrire/public/composer.php b/ecrire/public/composer.php
index 73441584988374ac79978b4fa2e3d2ad00569c09..fd045eb1b8cec12d1fb8e0ef4f8a172ef1b7a2fa 100644
--- a/ecrire/public/composer.php
+++ b/ecrire/public/composer.php
@@ -119,13 +119,13 @@ function affiche_logos($logos, $lien, $align) {
 	}
 
 	if ($artoff)
-		$mouseover = " onmouseover=\"this.src='$artoff'\" "
+		$artoff = " onmouseover=\"this.src='$artoff'\" "
 			."onmouseout=\"this.src='$arton'\"";
 
 	$milieu = "<img src=\"$arton\" alt=\"\""
 		. ($align ? " align=\"$align\"" : '') 
 		. $taille
-		. $mouseover
+		. $artoff
 		. ' style="border-width: 0px;" class="spip_logos" />';
 
 	return (!$lien ? $milieu :
diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php
index eeb76894be4c1d0c6db3aacf4a628084a062f944..eef8912e87c11d53d7b7a1f7dcd20807bc0a9420 100644
--- a/ecrire/public/criteres.php
+++ b/ecrire/public/criteres.php
@@ -330,11 +330,11 @@ function critere_inverse_dist($idb, &$boucles, $crit) {
 	else
 	  {
 	  	$order = "' DESC'";
-			// Classement par ordre inverse fonction eventuelle de #ENV{...}
-			if ($crit->param[0]){
-				$critere = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
-				$order = "(($critere)?' DESC':'')";
-			}
+	// Classement par ordre inverse fonction eventuelle de #ENV{...}
+		if (isset($crit->param[0])){
+			$critere = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
+			$order = "(($critere)?' DESC':'')";
+		}
 	  	
 	    $n = count($boucle->order);
 	    if ($n)
@@ -482,6 +482,15 @@ function calculer_criteres ($idb, &$boucles) {
 	}
 }
 
+// Madeleine de Proust, revision MIT-1958 sqq, revision CERN-1989
+
+function kwote($lisp)
+{
+	return preg_match(",^(\n//[^\n]*\n)? *'(.*)' *$,", $lisp, $r) ? 
+		($r[1] . "'\\'" . addslashes($r[2]) . "\\''") :
+		("'\\'' . addslashes(" . $lisp . ") . '\\''");
+}
+
 function critere_IN_dist ($idb, &$boucles, $crit)
 {
 	static $cpt = 0;
@@ -587,7 +596,7 @@ function calculer_critere_infixe($idb, &$boucles, $crit) {
 	  $nom = $table_des_tables[$type];
 	  list($nom, $desc) = trouver_def_table($nom ? $nom : $type, $boucle);
 	  if (@!array_key_exists($col, $desc['field'])) {
-		if ($exceptions_des_jointures[$col])
+		if (isset($exceptions_des_jointures[$col]))
 		  // on ignore la table, quel luxe!
 			list($t, $col) = $exceptions_des_jointures[$col];
 		$table = calculer_critere_externe_init($boucle, $col, $desc, $crit, $t);
@@ -778,10 +787,10 @@ function trouver_def_table($nom, &$boucle)
 		   $nom_table = 'spip_' . $nom;
 	}
 
-	$desc = $tables_des_serveurs_sql[$s][$nom_table];
+	$desc = $tables_des_serveurs_sql[$s];
 
-	if ($desc)
-		return array($nom_table, $desc);
+	if (isset($desc[$nom_table]))
+		return array($nom_table, $desc[$nom_table]);
 
 	include_spip('base/auxiliaires');
 	$nom_table = 'spip_' . $nom;
diff --git a/ecrire/public/parametrer.php b/ecrire/public/parametrer.php
index b2088ff1be62ee34c20d2ee47022f3011b07bef4..325ed4c5e34c44d355824371f39363dc04a1f054 100644
--- a/ecrire/public/parametrer.php
+++ b/ecrire/public/parametrer.php
@@ -52,7 +52,7 @@ function calculer_contexte() {
 			$contexte[$var] = $val;
 	}
 
-	if ($GLOBALS['date'])
+	if (isset($GLOBALS['date']))
 		$contexte['date'] = $contexte['date_redac'] = normaliser_date($GLOBALS['date']);
 	else
 		$contexte['date'] = $contexte['date_redac'] = date("Y-m-d H:i:s");
@@ -94,7 +94,7 @@ function analyse_resultat_skel($nom, $cache, $corps) {
 		'process_ins' => ((strpos($corps,'<'.'?')=== false)?'html':'php'),
 		'invalideurs' => $cache,
 		'entetes' => $headers,
-		'duree' => $headers['X-Spip-Cache']
+		'duree' => isset($headers['X-Spip-Cache']) ? intval($headers['X-Spip-Cache']) : 0 
 	);
 }
 
@@ -103,7 +103,8 @@ function analyse_resultat_skel($nom, $cache, $corps) {
 
 function sql_rubrique_fond($contexte) {
 
-	if ($id = intval($contexte['id_rubrique'])) {
+	if (isset($contexte['id_rubrique'])) {
+		$id = intval($contexte['id_rubrique']);
 		$row = spip_abstract_fetsel(array('lang'),
 					    array('spip_rubriques'),
 					    array("id_rubrique=$id"));
@@ -112,7 +113,8 @@ function sql_rubrique_fond($contexte) {
 		return array ($id, $lang);
 	}
 
-	if ($id  = intval($contexte['id_breve'])) {
+	if (isset($contexte['id_breve'])) {
+		$id = intval($contexte['id_breve']);
 		$row = spip_abstract_fetsel(array('id_rubrique', 'lang'),
 			array('spip_breves'), 
 			array("id_breve=$id"));
@@ -122,7 +124,8 @@ function sql_rubrique_fond($contexte) {
 		return array($id_rubrique_fond, $lang);
 	}
 
-	if ($id = intval($contexte['id_syndic'])) {
+	if (isset($contexte['id_syndic'])) {
+		$id = intval($contexte['id_syndic']);
 		$row = spip_abstract_fetsel(array('id_rubrique'),
 			array('spip_syndic'),
 			array("id_syndic=$id"));
@@ -135,7 +138,8 @@ function sql_rubrique_fond($contexte) {
 		return array($id_rubrique_fond, $lang);
 	}
 
-	if ($id = intval($contexte['id_article'])) {
+	if (isset($contexte['id_article'])) {
+		$id = intval($contexte['id_article']);
 		$row = spip_abstract_fetsel(array('id_rubrique', 'lang'),
 			array('spip_articles'),
 			array("id_article=$id"));
@@ -244,11 +248,15 @@ function sql_accepter_forum($id_article) {
 # Determine les parametres d'URL (hors r้้criture) et consorts
 # En deduit un contexte disant si la page est une redirection ou 
 # exige un squelette deductible de $fond et du contexte linguistique.
-# Aplique alors le squelette sur le contexte et le nom du cache.
-# Retourne un tableau de 3 elements:
+# Applique alors le squelette sur le contexte et le nom du cache.
+# Retourne un tableau ainsi construit
 # 'texte' => la page calculee
 # 'process_ins' => 'html' ou 'php' si presence d'un '< ?php'
 # 'invalideurs' => les invalideurs de ce cache
+# 'entetes' => headers http
+# 'duree' => duree de vie du cache
+# 'signal' => contexte (les id_* globales)
+
 # En cas d'erreur process_ins est absent et texte est un tableau de 2 chaines
 
 function public_parametrer_dist($fond, $local='', $cache='')  {
@@ -302,7 +310,7 @@ function public_parametrer_dist($fond, $local='', $cache='')  {
 	if (isset($local['lang']))
 		$lang = $local['lang'];
 
-	if (!$lang)
+	if (!isset($lang))
 		$lang = $GLOBALS['meta']['langue_site'];
 
 	if (!$GLOBALS['forcer_lang'])
diff --git a/ecrire/public/references.php b/ecrire/public/references.php
index f513926dfe852eb954a7f6eb3a4bd4d3e52f66b7..6e76c207ae9edace24946d066d5dd8446b5c11e4 100644
--- a/ecrire/public/references.php
+++ b/ecrire/public/references.php
@@ -116,7 +116,9 @@ function index_tables_en_pile($idb, $nom_champ, &$boucles) {
 	}
 
 	$t= $desc['type'];
-	$excep = $exceptions_des_tables[$r][$nom_champ];
+	$excep = isset($exceptions_des_tables[$r]) ? $exceptions_des_tables[$r] : '';
+	if ($excep)
+		$excep = isset($excep[$nom_champ]) ? $excep[$nom_champ] : '';
 
 	if ($excep) {
 	  return index_exception($boucles[$idb], $desc, $nom_champ, $excep);
@@ -283,7 +285,7 @@ function collecter_balise_dynamique($l, &$p, $nom) {
 
 function balise_distante_interdite($p) {
 	$nom = $p->id_boucle;
-	if ($p->boucles[$nom]->sql_serveur) {
+	if ($nom AND $p->boucles[$nom]->sql_serveur) {
 		erreur_squelette($p->nom_champ .' '._T('zbug_distant_interdit'), $nom);
 	}
 }
@@ -296,6 +298,8 @@ function balise_distante_interdite($p) {
 function champs_traitements ($p) {
 	global $table_des_traitements;
 
+	if (!isset($table_des_traitements[$p->nom_champ]))
+		return $p->code;
 	$ps = $table_des_traitements[$p->nom_champ];
 	if (is_array($ps)) {
 	  // new style
@@ -432,15 +436,6 @@ function calculer_argument_precedent($idb, $nom_champ, &$boucles) {
 		index_pile($prec, $nom_champ, $boucles));
 }
 
-// Madeleine de Proust, revision MIT-1958 sqq, revision CERN-1989
-
-function kwote($lisp)
-{
-	return preg_match(",^(\n//[^\n]*\n)? *'(.*)' *$,", $lisp, $r) ? 
-		($r[1] . "'\\'" . addslashes($r[2]) . "\\''") :
-		("'\\'' . addslashes(" . $lisp . ") . '\\''");
-}
-
 //
 // Rechercher dans la pile des boucles actives celle ayant un critere
 // comportant un certain $motif, et construire alors une reference