diff --git a/.gitattributes b/.gitattributes
index 6ef2b795d569844a3e971c8cafefb58cd765c9ae..f85e7c6624dc78ec1bbfa7f4a92649607e69f131 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -108,6 +108,7 @@ ecrire/configuration/rubriques.php -text
 ecrire/configuration/syndications.php -text
 ecrire/configuration/transcodeur.php -text
 ecrire/configuration/visiteurs.php -text
+ecrire/exec/403.php -text
 ecrire/exec/404.php -text
 ecrire/exec/accueil.php -text
 ecrire/exec/admin_backup.php -text
@@ -780,7 +781,6 @@ prive/rss/signatures.html -text
 prive/spip_pass.html -text
 prive/spip_style.css -text
 prive/squelettes/body.html -text
-prive/squelettes/contenu/page-403.html -text
 prive/squelettes/contenu/page-configurer_identite.html -text
 prive/squelettes/contenu/page-typo.html -text
 prive/squelettes/extra/dist.html -text
diff --git a/ecrire/exec/403.php b/ecrire/exec/403.php
new file mode 100644
index 0000000000000000000000000000000000000000..5404d350e56e9a41940e2883dc9dfa3e7ec18451
--- /dev/null
+++ b/ecrire/exec/403.php
@@ -0,0 +1,45 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2010                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Un exec d'acces interdit
+ */
+function exec_403_dist(){
+
+	$exec = _request('exec');
+
+	$titre = "exec_$exec";
+	$navigation = "";
+	$extra = "";
+
+	include_spip('inc/presentation'); // alleger les inclusions avec un inc/presentation_mini
+	$commencer_page = charger_fonction('commencer_page','inc');
+	echo $commencer_page($titre);
+
+	echo debut_gauche("403_$exec",true);
+	echo recuperer_fond('prive/squelettes/navigation/dist',array());
+	echo pipeline('affiche_gauche',array('args'=>array('exec'=>'403','exec_erreur'=>$exec),'data'=>''));
+
+	echo creer_colonne_droite("403",true);
+	echo pipeline('affiche_droite',array('args'=>array('exec'=>'403','exec_erreur'=>$exec),'data'=>''));
+
+	echo debut_droite("403",true);
+	echo "<h1>"._T('info_acces_interdit')."</h1>";
+	echo _L("Vous n'avez pas le droit d'acc&egrave;der à la page <b>@exec@</b>.",array('exec'=>_request('exec')));
+	echo pipeline('affiche_milieu',array('args'=>array('exec'=>'403','exec_erreur'=>$exec),'data'=>''));
+
+	echo fin_gauche(),fin_page();
+}
+
+?>
\ No newline at end of file
diff --git a/ecrire/exec/fond.php b/ecrire/exec/fond.php
index d36e68362471c666bf28fe5cc1c5948d45365351..2c35871c30851d542f1176891a7eb696fb019e33 100644
--- a/ecrire/exec/fond.php
+++ b/ecrire/exec/fond.php
@@ -48,8 +48,12 @@ function exec_fond_dist(){
 
 function interdire_acces($ok=false) {
 	if ($ok) return '';
-	include_spip('inc/headers');
-	redirige_formulaire(generer_url_ecrire('403','acces='._request('exec')));
+	ob_end_clean(); // vider tous les tampons
+	$echec = charger_fonction('403','exec');
+	$echec();
+
+	#include_spip('inc/headers');
+	#redirige_formulaire(generer_url_ecrire('403','acces='._request('exec')));
 	exit;
 }
 
diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php
index caac364406061a61211635d66669968555104793..a2a412ab2c4c226c0477f6f04a0628b2c6f91475 100644
--- a/ecrire/inc/filtres.php
+++ b/ecrire/inc/filtres.php
@@ -2068,26 +2068,23 @@ function env_to_attributs ($texte, $ignore_params=array()) {
 }
 
 // Inserer jQuery
-// et au passage verifier qu'on ne doublonne pas #INSERT_HEAD
+// ne pas verifier ici qu'on ne doublonne pas #INSERT_HEAD
+// car cela empeche un double appel (multi calcul en cache cool, 
+// ou erreur de l'espace prive)
 // http://doc.spip.org/@f_jQuery
 function f_jQuery ($texte) {
-	static $doublon=0;
-	if ($doublon++) {
-		erreur_squelette(array('double_occurrence', array('balise' => "INSERT_HEAD")));
-	} else {
-		$x = '';
-		foreach (array_unique(pipeline('jquery_plugins',
-		array(
-			'javascript/jquery.js',
-			'javascript/jquery.form.js',
-			'javascript/jquery.autosave.js',
-			'javascript/ajaxCallback.js',
-			'javascript/jquery.cookie.js'
-		))) as $script)
-			if ($script = find_in_path($script))
-				$x .= "\n<script src=\"$script\" type=\"text/javascript\"></script>\n";
-		$texte = $x.$texte;
-	}
+	$x = '';
+	foreach (array_unique(pipeline('jquery_plugins',
+	array(
+		'javascript/jquery.js',
+		'javascript/jquery.form.js',
+		'javascript/jquery.autosave.js',
+		'javascript/ajaxCallback.js',
+		'javascript/jquery.cookie.js'
+	))) as $script)
+		if ($script = find_in_path($script))
+			$x .= "\n<script src=\"$script\" type=\"text/javascript\"></script>\n";
+	$texte = $x.$texte;
 	return $texte;
 }
 
diff --git a/prive/squelettes/contenu/page-403.html b/prive/squelettes/contenu/page-403.html
deleted file mode 100644
index d81d5a595ee549f45ea36fd9aade7d53ff3859e1..0000000000000000000000000000000000000000
--- a/prive/squelettes/contenu/page-403.html
+++ /dev/null
@@ -1,10 +0,0 @@
-[(#REM)
-
-  Squelette
-  (c) 2009 xxx
-  Distribue sous licence GPL
-
-]
-<h1><:info_acces_interdit:></h1>
-
-[Vous n'aves pas le droit d'accèder à la page <b>(#ENV{acces})</b>.]
\ No newline at end of file