diff --git a/.gitattributes b/.gitattributes
index b9f80700f29e2f0411578ec46d24bef2eb103b38..0029dcc879e7cbac0f1f38dbf3d88977cf69f687 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -303,7 +303,6 @@ dist/prive/contenu/breve.html -text
 dist/prive/contenu/rubrique.html -text
 dist/prive/contenu/site.html -text
 dist/prive/editer/article.html -text
-dist/prive/editer/article_fonctions.php -text
 dist/prive/infos/article.html -text
 dist/prive/infos/article_fonctions.php -text
 dist/prive/infos/auteur.html -text
diff --git a/dist/formulaires/editer_article.html b/dist/formulaires/editer_article.html
index 19385cfce02d154a1cc9243704a780822c7ac966..dce1eac011caa837de2be631cab7e21dc85eefce 100644
--- a/dist/formulaires/editer_article.html
+++ b/dist/formulaires/editer_article.html
@@ -1,94 +1,101 @@
-	<form method='post' action='#ENV{action}' enctype='multipart/form-data'>
-	[(#REM) declarer les hidden qui declencheront le service du formulaire 
-	parametre : url d'action ]
-	#ACTION_FORMULAIRE{#ENV{action}}
-  <input type='hidden' name='id_article' value='#ENV{id_article}' />
-  <fieldset>
-  <ol class="formfx">
-  	[(#ENV**{config}|table_valeur{articles_surtitre}|=={non}|?{#ENV**{surtitre,''},' '}|?{' '})
-    <li class="gauche">
-      <label for="surtitre"><:texte_sur_titre:><em>#AIDER{arttitre}</em></label>
-      <input type='text' name='surtitre' id='surtitre' class='forml' value="[(#ENV**{surtitre}|entites_html)]" />
-			[<span class='erreur'>(#ENV**{erreurs}|table_valeur{surtitre})</span>]
-    </li>]
-    <li class="gauche gauche_obligatoire">
-      <label for="titre"><:info_titre:><em>#AIDER{arttitre}</em></label>
-      <input type='text' name='titre' id='titre' class='formo' value="[(#ENV**{titre,#REM|concat{info_nouvel_article}|_T}|entites_html)]"
-			[(#ENV{titre,''}|?{'',' '})onfocus="if(!antifocus){this.value='';antifocus=true;}"]/>
-			[<span class='erreur'>(#ENV**{erreurs}|table_valeur{titre})</span>]
-    </li>
-  	[(#ENV**{config}|table_valeur{articles_soustitre}|=={non}|?{#ENV**{soustitre,''},' '}|?{' '})
-    <li class="gauche">
-      <label for="soustitre"><:texte_sous_titre:><em>#AIDER{arttitre}</em></label>
-      <input type='text' name='soustitre' id='soustitre' class='forml' value="[(#ENV**{soustitre}|entites_html)]" />
-			[<span class='erreur'>(#ENV**{erreurs}|table_valeur{soustitre})</span>]
-    </li>]
-
-    [(#REM|sinon{titre_cadre_interieur_rubrique}|_T|concat{' ',#AIDER{artrub}}
-    |chercher_rubrique{#ENV{id_rubrique}, #ENV{id_secteur},#ENV**{config}|table_valeur{restreint}})]
-
-  	[(#ENV**{config}|table_valeur{articles_descriptif}|=={non}|?{#ENV**{descriptif,''},' '}|?{' '})
-    <li class="haut">
-      <label for="descriptif"><:texte_descriptif_rapide:><em>#AIDER{artdesc}</em></label>
-      <textarea name='descriptif' id='descriptif' class='forml' rows='2' cols='40'>[(#ENV**{descriptif}|entites_html)]</textarea>
-			[<span class='erreur'>(#ENV**{erreurs}|table_valeur{desctiptid})</span>]
-    </li>]
-  	[(#ENV**{config}|table_valeur{articles_chapeau}|=={non}|?{#ENV**{chapo,''},' '}|?{' '})
-    [<li class='haut redirection'>(#ENV**{chapo}|match{^=}|?{' '})
-			<label for='virtuel'><:info_redirection:></label>
-			<input type='text' name='virtuel' id='virtuel' class='forml' value="[(#ENV**{chapo}|replace{^=,''}|entites_html)]" />
-			<input type='hidden' name='changer_virtuel' value='oui' />
-			<div class='commentaire_bas'><:texte_article_virtuel_reference:>#AIDER{artvirt}</div>
-		</li>]
-		[<li class="haut">(#ENV**{chapo}|match{^=}|?{'',' '})
-			<label for="chapo"><:info_chapeau:><em>#AIDER{arttitre}</em></label>
-			<textarea name='chapo' id='chapo' class='forml'[ rows='(#ENV**{config}|table_valeur{lignes})'] cols='40'>[(#ENV**{chapo}|entites_html)]</textarea>
-			[<span class='erreur'>(#ENV**{erreurs}|table_valeur{chapo})</span>]
-		</li>]
-		]
-  	[(#ENV**{config}|table_valeur{articles_urlref}|=={non}|?{#ENV**{url_site,#ENV**{nom_site,''}},' '}|?{' '})
-    <fieldset>
-      <legend><:entree_liens_sites:></legend><ol>
-    <li class="gauche">
-      <label for="nom_site"><:info_titre:></label>
-      <input type='text' name='nom_site' id='nom_site' class='forml' value="[(#ENV**{nom_site}|entites_html)]" />
-			[<span class='erreur'>(#ENV**{erreurs}|table_valeur{nom_site})</span>]
-    </li>
-    <li class="gauche">
-      <label for="url_site"><:info_url:></label>
-      <input type='text' name='url_site' id='url_site' class='forml' value="[(#ENV**{url_site}|entites_html)]" />
-			[<span class='erreur'>(#ENV**{erreurs}|table_valeur{url_site})</span>]
-    </li></ol>
-    </fieldset>]
-  	[(#ENV**{config}|table_valeur{articles_texte}|=={non}|?{#ENV**{texte,''},' '}|?{' '})
-    <li class="haut">
-      <label for="text_area"><:info_texte:><em>#AIDER{arttexte}</em></label>
-      <div class="commentaire"><:texte_enrichir_mise_a_jour:><em>#AIDER{raccourcis}</em></div>
-      [(#ENV**{config}|table_valeur{afficher_barre}|?{#VAL{text_area}|barre_typo{#LANG}})]
-      <textarea name='texte' id='text_area' class='formo barre_inserer' rows='[(#ENV**{config}|table_valeur{lignes}|plus{2})]' cols='40'[
-      (#ENV**{browser_caret,''})]>[(#ENV**{texte}|entites_html)]</textarea>
-			[<span class='erreur'>(#ENV**{erreurs}|table_valeur{texte})</span>]
-
-	<script type='text/javascript'><!--
-		jQuery(function(){
-			jQuery('#text_area')
-			.height((jQuery(window).height()-80)+'px');
-		});
-	//--></script>
-
-    </li>]
-  	[(#ENV**{config}|table_valeur{articles_ps}|=={non}|?{#ENV**{ps,''},' '}|?{' '})
-    <li class="haut">
-      <label for="ps"><:info_post_scriptum:></label>
-      <textarea name='ps' id='ps' class='forml' rows='5' cols='40'>[(#ENV**{ps}|entites_html)]</textarea>
-			[<span class='erreur'>(#ENV**{erreurs}|table_valeur{ps})</span>]
-    </li>]
-  </ol>
-  </fieldset>
-  [(#ENV**{config}|table_valeur{extra}|?{
-
-    	[(#ENV**{extra}|editer_extra{#ENV{id_secteur}})]
-
-  })]
-  <div style='text-align: right'><input class='fondo' type='submit' value='<:bouton_enregistrer:>' /></div>
-</form>
\ No newline at end of file
+<div class='formfx'>
+	<br class='spacer' />
+	[<p class="formulaire_message">(#ENV*{message_ok})</p>]
+	[<p class='formulaire_erreur'>(#ENV*{message_erreur})</p>]
+	[(#ENV{editable})
+	<form method='post' action='#ENV{action}' enctype='multipart/form-data' >
+		[(#REM) declarer les hidden qui declencheront le service du formulaire 
+		parametre : url d'action ]
+		#ACTION_FORMULAIRE{#ENV{action}}
+	  <input type='hidden' name='id_article' value='#ENV{id_article}' />
+	  <fieldset>
+	  <ol class="formfx">
+	  	[(#ENV**{config}|table_valeur{articles_surtitre}|=={non}|?{#ENV**{surtitre,''},' '}|?{' '})
+	    <li class="gauche">
+	      <label for="surtitre"><:texte_sur_titre:><em>#AIDER{arttitre}</em></label>
+	      <input type='text' name='surtitre' id='surtitre' class='forml' value="[(#ENV**{surtitre}|entites_html)]" />
+				[<span class='erreur'>(#ENV**{erreurs}|table_valeur{surtitre})</span>]
+	    </li>]
+	    <li class="gauche gauche_obligatoire">
+	      <label for="titre"><:info_titre:><em>#AIDER{arttitre}</em></label>
+	      <input type='text' name='titre' id='titre' class='formo' value="[(#ENV**{titre,#REM|concat{info_nouvel_article}|_T}|entites_html)]"
+				[(#ENV{titre,''}|?{'',' '})onfocus="if(!antifocus){this.value='';antifocus=true;}"]/>
+				[<span class='erreur'>(#ENV**{erreurs}|table_valeur{titre})</span>]
+	    </li>
+	  	[(#ENV**{config}|table_valeur{articles_soustitre}|=={non}|?{#ENV**{soustitre,''},' '}|?{' '})
+	    <li class="gauche">
+	      <label for="soustitre"><:texte_sous_titre:><em>#AIDER{arttitre}</em></label>
+	      <input type='text' name='soustitre' id='soustitre' class='forml' value="[(#ENV**{soustitre}|entites_html)]" />
+				[<span class='erreur'>(#ENV**{erreurs}|table_valeur{soustitre})</span>]
+	    </li>]
+	
+	    [(#REM|sinon{titre_cadre_interieur_rubrique}|_T|concat{' ',#AIDER{artrub}}
+	    |chercher_rubrique{#ENV{id_rubrique}, #ENV{id_secteur},#ENV**{config}|table_valeur{restreint}})]
+	
+	  	[(#ENV**{config}|table_valeur{articles_descriptif}|=={non}|?{#ENV**{descriptif,''},' '}|?{' '})
+	    <li class="haut">
+	      <label for="descriptif"><:texte_descriptif_rapide:><em>#AIDER{artdesc}</em></label>
+	      <textarea name='descriptif' id='descriptif' class='forml' rows='2' cols='40'>[(#ENV**{descriptif}|entites_html)]</textarea>
+				[<span class='erreur'>(#ENV**{erreurs}|table_valeur{desctiptid})</span>]
+	    </li>]
+	  	[(#ENV**{config}|table_valeur{articles_chapeau}|=={non}|?{#ENV**{chapo,''},' '}|?{' '})
+	    [<li class='haut redirection'>(#ENV**{chapo}|match{^=}|?{' '})
+				<label for='virtuel'><:info_redirection:></label>
+				<input type='text' name='virtuel' id='virtuel' class='forml' value="[(#ENV**{chapo}|replace{^=,''}|entites_html)]" />
+				<input type='hidden' name='changer_virtuel' value='oui' />
+				<div class='commentaire_bas'><:texte_article_virtuel_reference:>#AIDER{artvirt}</div>
+			</li>]
+			[<li class="haut">(#ENV**{chapo}|match{^=}|?{'',' '})
+				<label for="chapo"><:info_chapeau:><em>#AIDER{arttitre}</em></label>
+				<textarea name='chapo' id='chapo' class='forml'[ rows='(#ENV**{config}|table_valeur{lignes})'] cols='40'>[(#ENV**{chapo}|entites_html)]</textarea>
+				[<span class='erreur'>(#ENV**{erreurs}|table_valeur{chapo})</span>]
+			</li>]
+			]
+	  	[(#ENV**{config}|table_valeur{articles_urlref}|=={non}|?{#ENV**{url_site,#ENV**{nom_site,''}},' '}|?{' '})
+	    <fieldset>
+	      <legend><:entree_liens_sites:></legend><ol>
+	    <li class="gauche">
+	      <label for="nom_site"><:info_titre:></label>
+	      <input type='text' name='nom_site' id='nom_site' class='forml' value="[(#ENV**{nom_site}|entites_html)]" />
+				[<span class='erreur'>(#ENV**{erreurs}|table_valeur{nom_site})</span>]
+	    </li>
+	    <li class="gauche">
+	      <label for="url_site"><:info_url:></label>
+	      <input type='text' name='url_site' id='url_site' class='forml' value="[(#ENV**{url_site}|entites_html)]" />
+				[<span class='erreur'>(#ENV**{erreurs}|table_valeur{url_site})</span>]
+	    </li></ol>
+	    </fieldset>]
+	  	[(#ENV**{config}|table_valeur{articles_texte}|=={non}|?{#ENV**{texte,''},' '}|?{' '})
+	    <li class="haut">
+	      <label for="text_area"><:info_texte:><em>#AIDER{arttexte}</em></label>
+	      <div class="commentaire"><:texte_enrichir_mise_a_jour:><em>#AIDER{raccourcis}</em></div>
+	      [(#ENV**{config}|table_valeur{afficher_barre}|?{#VAL{text_area}|barre_typo{#LANG}})]
+	      <textarea name='texte' id='text_area' class='formo barre_inserer' rows='[(#ENV**{config}|table_valeur{lignes}|plus{2})]' cols='40'[
+	      (#ENV**{browser_caret,''})]>[(#ENV**{texte}|entites_html)]</textarea>
+				[<span class='erreur'>(#ENV**{erreurs}|table_valeur{texte})</span>]
+	
+		<script type='text/javascript'><!--
+			jQuery(function(){
+				jQuery('#text_area')
+				.height((jQuery(window).height()-80)+'px');
+			});
+		//--></script>
+	
+	    </li>]
+	  	[(#ENV**{config}|table_valeur{articles_ps}|=={non}|?{#ENV**{ps,''},' '}|?{' '})
+	    <li class="haut">
+	      <label for="ps"><:info_post_scriptum:></label>
+	      <textarea name='ps' id='ps' class='forml' rows='5' cols='40'>[(#ENV**{ps}|entites_html)]</textarea>
+				[<span class='erreur'>(#ENV**{erreurs}|table_valeur{ps})</span>]
+	    </li>]
+	  </ol>
+	  </fieldset>
+	  [(#ENV**{config}|table_valeur{extra}|?{
+	
+	    	[(#ENV**{extra}|editer_extra{#ENV{id_secteur}})]
+	
+	  })]
+	  <div style='text-align: right'><input class='fondo' type='submit' value='<:bouton_enregistrer:>' /></div>
+	</form>
+	]
+</div>
\ No newline at end of file
diff --git a/dist/formulaires/editer_article/verifier.php b/dist/formulaires/editer_article/verifier.php
index 974bc2588fd1eba9553003c7000ddacacefef724..e455899fcfdfa14f2d727d3c738ac55293737d17 100644
--- a/dist/formulaires/editer_article/verifier.php
+++ b/dist/formulaires/editer_article/verifier.php
@@ -18,10 +18,12 @@ include_spip('inc/editer');
 function formulaires_editer_article_verifier_dist($id_article='new', $id_rubrique=0, $lier_trad=0, $retour='', $config_fonc='articles_edit_config', $row=array(), $hidden=''){
 
 	$erreurs = array();
-	$conflits = controler_contenu('article',$id_article);
-	if (count($conflits)) {
-		foreach($conflits as $champ=>$conflit){
-			$erreurs[$champ] .= _L("ATTENTION : Ce champ a &eacute;t&eacute; modifi&eacute; par ailleurs. La valeur actuelle est :<br />".$conflit['base']);
+	if (intval($id_article)) {
+		$conflits = controler_contenu('article',$id_article);
+		if (count($conflits)) {
+			foreach($conflits as $champ=>$conflit){
+				$erreurs[$champ] .= _L("ATTENTION : Ce champ a &eacute;t&eacute; modifi&eacute; par ailleurs. La valeur actuelle est :<br /><textarea readonly='readonly' class='forml'>".$conflit['base']."</textarea>");
+			}
 		}
 	}
 
diff --git a/dist/prive/editer/article.html b/dist/prive/editer/article.html
index ac60df829df3cbce6d777583de9cc1d02fd1e758..6151c6631d4e030b05aa72e2c34a03d11755ddd9 100644
--- a/dist/prive/editer/article.html
+++ b/dist/prive/editer/article.html
@@ -1,94 +1,5 @@
-<script type="text/javascript"><!--
-/*
-$(function(){
-  $('div.cadre-formulaire form')
-  .hide()
-  .find('ol li label:not(.nocmx)')
-//    .css('display','-moz-inline-box')
-    .wrap('<span style="display:block;width:463px;"><\/span>')
-    .end()
-  .show();
-});
-*/
-//--></script>
-
-
-
-  <ol class="formfx">
-  	[(#ENV**{config}|table_valeur{articles_surtitre}|=={non}|?{#ENV**{surtitre,''},' '}|?{' '})
-    <li class="gauche">
-      <label for="surtitre"><:texte_sur_titre:><em>#AIDER{arttitre}</em></label>
-      <input type='text' name='surtitre' id='surtitre' class='forml' value="[(#ENV**{surtitre}|entites_html)]" />
-    </li>]
-    <li class="gauche gauche_obligatoire">
-      <label for="titre"><:info_titre:><em>#AIDER{arttitre}</em></label>
-      <input type='text' name='titre' id='titre' class='formo' value="[(#ENV**{titre,#REM|concat{info_nouvel_article}|_T}|entites_html)]"
-			[(#ENV{titre,''}|?{'',' '})onfocus="if(!antifocus){this.value='';antifocus=true;}"]/>
-    </li>
-  	[(#ENV**{config}|table_valeur{articles_soustitre}|=={non}|?{#ENV**{soustitre,''},' '}|?{' '})
-    <li class="gauche">
-      <label for="soustitre"><:texte_sous_titre:><em>#AIDER{arttitre}</em></label>
-      <input type='text' name='soustitre' id='soustitre' class='forml' value="[(#ENV**{soustitre}|entites_html)]" />
-    </li>]
-
-    [(#REM|sinon{titre_cadre_interieur_rubrique}|_T|concat{' ',#AIDER{artrub}}
-    |chercher_rubrique{#ENV{id_rubrique}, #ENV{id_secteur},#ENV**{config}|table_valeur{restreint}})]
-
-  	[(#ENV**{config}|table_valeur{articles_descriptif}|=={non}|?{#ENV**{descriptif,''},' '}|?{' '})
-    <li class="haut">
-      <label for="descriptif"><:texte_descriptif_rapide:><em>#AIDER{artdesc}</em></label>
-      <textarea name='descriptif' id='descriptif' class='forml' rows='2' cols='40'>[(#ENV**{descriptif}|entites_html)]</textarea>
-    </li>]
-  	[(#ENV**{config}|table_valeur{articles_chapeau}|=={non}|?{#ENV**{chapo,''},' '}|?{' '})
-    [<li class='haut redirection'>(#ENV**{chapo}|match{^=}|?{' '})
-			<label for='virtuel'><:info_redirection:></label>
-			<input type='text' name='virtuel' id='virtuel' class='forml' value="[(#ENV**{chapo}|replace{^=,''}|entites_html)]" />
-			<input type='hidden' name='changer_virtuel' value='oui' />
-			<div class='commentaire_bas'><:texte_article_virtuel_reference:>#AIDER{artvirt}</div>
-		</li>]
-		[<li class="haut">(#ENV**{chapo}|match{^=}|?{'',' '})
-			<label for="chapo"><:info_chapeau:><em>#AIDER{arttitre}</em></label>
-			<textarea name='chapo' id='chapo' class='forml'[ rows='(#ENV**{config}|table_valeur{lignes})'] cols='40'>[(#ENV**{chapo}|entites_html)]</textarea>
-		</li>]
-		]
-  	[(#ENV**{config}|table_valeur{articles_urlref}|=={non}|?{#ENV**{url_site,#ENV**{nom_site,''}},' '}|?{' '})
-    <fieldset>
-      <legend><:entree_liens_sites:></legend><ol>
-    <li class="gauche">
-      <label><:info_titre:></label>
-      <input type='text' name='nom_site' id='nom_site' class='forml' value="[(#ENV**{nom_site}|entites_html)]" />
-    </li>
-    <li class="gauche">
-      <label for="url_site"><:info_url:></label>
-      <input type='text' name='url_site' id='url_site' class='forml' value="[(#ENV**{url_site}|entites_html)]" />
-    </li></ol>
-    </fieldset>]
-  	[(#ENV**{config}|table_valeur{articles_texte}|=={non}|?{#ENV**{texte,''},' '}|?{' '})
-    <li class="haut">
-      <label for="text_area"><:info_texte:><em>#AIDER{arttexte}</em></label>
-      <div class="commentaire"><:texte_enrichir_mise_a_jour:><em>#AIDER{raccourcis}</em></div>
-      [(#ENV**{config}|table_valeur{afficher_barre}|?{#VAL{text_area}|barre_typo{#LANG}})]
-      <textarea name='texte' id='text_area' class='formo barre_inserer' rows='[(#ENV**{config}|table_valeur{lignes}|plus{2})]' cols='40'[
-      (#ENV**{browser_caret,''})]>[(#ENV**{texte}|entites_html)]</textarea>
-
-	<script type='text/javascript'><!--
-		jQuery(function(){
-			jQuery('#text_area')
-			.height((jQuery(window).height()-80)+'px');
-		});
-	//--></script>
-
-    </li>]
-  	[(#ENV**{config}|table_valeur{articles_ps}|=={non}|?{#ENV**{ps,''},' '}|?{' '})
-    <li class="haut">
-      <label for="ps"><:info_post_scriptum:></label>
-      <textarea name='ps' id='ps' class='forml' rows='5' cols='40'>[(#ENV**{ps}|entites_html)]</textarea>
-    </li>]
-  </ol>
-
-    [(#ENV**{config}|table_valeur{extra}|?{
-
-    	[(#ENV**{extra}|editer_extra{#ENV{id_secteur}})]
-
-    })]
-
+#ENV**{icone_retour}
+[<:texte_modifier_article:>
+<h1>(#ENV{titre})</h1>]
+<hr class='fin_article_presentation' />
+#FORMULAIRE_EDITER_ARTICLE{#ENV{new},#ENV{id_rubrique},#ENV{lier_trad},#ENV{redirect},#ENV{config_fonc}}
\ No newline at end of file
diff --git a/dist/prive/editer/article_fonctions.php b/dist/prive/editer/article_fonctions.php
deleted file mode 100644
index e783d474e9b87e0a9e4cde4e4ba0dc8ea9d8b435..0000000000000000000000000000000000000000
--- a/dist/prive/editer/article_fonctions.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-function chercher_rubrique($msg, $id_rubrique, $id_secteur, $restreint){
-	$chercher_rubrique = charger_fonction('chercher_rubrique', 'inc');
-	$opt = $chercher_rubrique($id_rubrique, 'article', $restreint);
-
-	if ($id_rubrique == 0) $logo = "racine-site-24.gif";
-	elseif ($id_secteur == $id_rubrique) $logo = "secteur-24.gif";
-	else $logo = "rubrique-24.gif";
-
-	return debut_cadre_couleur($logo, true, "", $msg) . $opt .fin_cadre_couleur(true);
-}
-
-function barre_typo($id,$lang=''){
-	include_spip('inc/barre');
-	return '<div>' . afficher_barre("document.getElementById('$id')",false,$lang) . '</div>';
-}
-
-function editer_extra($extra,$id_secteur) {
-	include_spip('inc/extra');
-	return extra_saisie($extra, 'articles', $id_secteur);
-}
-
-?>
\ No newline at end of file
diff --git a/dist/style_prive.html b/dist/style_prive.html
index fd4a51e04b53187a0be2713177d751bcf59afbe5..a757b93bb13fa4692407020e35efedfc47616072 100644
--- a/dist/style_prive.html
+++ b/dist/style_prive.html
@@ -99,6 +99,8 @@ hr.fin_article_presentation {
 	
 }
 
+.formfx fieldset {border:0;margin:0;padding:0;}
+.formfx span.erreur {color:red;font-weight:bold;}
 ol.formfx {
 	line-height: auto;
 	padding: 0px;
diff --git a/ecrire/exec/articles_edit.php b/ecrire/exec/articles_edit.php
index 924aa803d83418810bdaf5bf834d49819570f6b8..b903ae50958da66863a99611c3793532bb8c014e 100644
--- a/ecrire/exec/articles_edit.php
+++ b/ecrire/exec/articles_edit.php
@@ -88,9 +88,9 @@ function articles_edit($id_article, $id_rubrique, $lier_trad, $id_version, $new,
 	echo debut_droite("",true);
 	
 	echo debut_cadre_formulaire("", true);
-	echo articles_edit_presentation($new, $row['id_rubrique'], $lier_trad, $row['id_article'], $row['titre']);
-	$editer_article = charger_fonction('editer_article', 'inc');
-	echo $editer_article($new, $id_rubrique, $lier_trad, generer_url_ecrire("articles"), $config_fonc, $row);
+	echo articles_edit_presentation($new, $row['id_rubrique'], $lier_trad, $row['id_article'], $row['titre'],$config_fonc);
+	/*$editer_article = charger_fonction('editer_article', 'inc');
+	echo $editer_article($new, $id_rubrique, $lier_trad, generer_url_ecrire("articles"), $config_fonc, $row);*/
 	echo fin_cadre_formulaire(true);
 
 	echo pipeline('affiche_milieu',array('args'=>array('exec'=>'articles_edit','id_article'=>$id_article),'data'=>''));
@@ -99,20 +99,24 @@ function articles_edit($id_article, $id_rubrique, $lier_trad, $id_version, $new,
 }
 
 // http://doc.spip.org/@articles_edit_presentation
-function articles_edit_presentation($new, $id_rubrique, $lier_trad, $id_article, $titre)
-{
-	global $spip_lang_right;
+function articles_edit_presentation($new, $id_rubrique, $lier_trad, $id_article, $titre, $config_fonc){
 	$oups = ($lier_trad ?
 	     generer_url_ecrire("articles","id_article=$lier_trad")
 	     : ($new
 		? generer_url_ecrire("naviguer","id_rubrique=$id_rubrique")
 		: generer_url_ecrire("articles","id_article=$id_article")
 		));
-
-	return
-		icone_inline(_T('icone_retour'), $oups, "article-24.gif", "rien.gif",$spip_lang_right) .
-	 	_T('texte_modifier_article') .
-		gros_titre($titre,'',false) . 
-		"<hr class='fin_article_presentation' />\n";
+	$contexte = array(
+	'icone_retour'=>icone_inline(_T('icone_retour'), $oups, "article-24.gif", "rien.gif",$GLOBALS['spip_lang_right']),
+	'redirect'=>generer_url_ecrire("articles"),
+	'titre'=>$titre,
+	'new'=>$new?$new:$id_article,
+	'id_rubrique'=>$id_rubrique,
+	'lier_trad'=>$lier_trad,
+#	'id_article'=>$id_article,
+	'config_fonc'=>$config_fonc
+	);
+	$page = evaluer_fond("prive/editer/article", $contexte, $connect);
+	return $page['texte'];
 }
 ?>
diff --git a/ecrire/index.php b/ecrire/index.php
index 3205af5379cf4fa901277e558aaa128bde509b5b..95d7ed146c755273cabf441e03b65c2890e6b63e 100644
--- a/ecrire/index.php
+++ b/ecrire/index.php
@@ -170,6 +170,11 @@ AND $l = @unserialize($l)) {
 	}
 }
 
+if (_request('var_ajax') OR _request('formulaire_action')){
+	include_spip('public/assembler');
+	traiter_formulaires_dynamiques();
+}
+
 // Passer la main aux outils XML a la demande (meme les redac s'ils veulent).
 if ($var_f = _request('transformer_xml')) {
 	set_request('var_url', $exec);
diff --git a/ecrire/public/assembler.php b/ecrire/public/assembler.php
index f1412528fb9784e32b6c4a3f39f6c3aa0e48c0c3..f2df2a92e3f8c68e69ca7b63385d4eed28f6769c 100644
--- a/ecrire/public/assembler.php
+++ b/ecrire/public/assembler.php
@@ -74,6 +74,62 @@ function init_var_mode(){
 	}
 }
 
+function traiter_formulaires_dynamiques(){
+	static $done = false;
+	if (!$done) {
+		// traiter les appels de bloc ajax
+		if (($v=_request('var_ajax'))
+		 AND ($v!=='form')
+		 AND ($args = _request('var_ajax_env'))
+		 AND ($cle = _request('var_ajax_cle')) ){ 
+			 if ((include_spip('inc/securiser_action'))
+			 AND ($cle == calculer_cle_action($args))) {
+				$args = unserialize(base64_decode($args));
+				if ($fond = $args['fond_ajax']){
+					include_spip('public/parametrer');
+					$contexte = calculer_contexte();
+					$contexte = array_merge($args, $contexte);
+					$page = evaluer_fond($fond,$contexte);
+					include_spip('inc/actions');
+					ajax_retour($page['texte']);
+					exit();
+				}
+			}
+			include_spip('inc/actions');
+			ajax_retour('signature ajax incorrecte');
+			exit();
+		}
+		// traiter les formulaires dynamiques simplifies en charger/verifier/traiter
+		if (($form = _request('formulaire_action'))
+		 AND ($cle = _request('formulaire_action_cle'))
+		 AND (($args = _request('formulaire_action_args'))!==NULL)
+		 AND (include_spip('inc/securiser_action'))
+		 AND ($cle == calculer_cle_action($form . $args))) {
+			$args = unserialize(base64_decode($args));
+			if (
+			 (!($verifier = charger_fonction("verifier","formulaires/$form/",true))
+			   || (count($_POST["erreurs_$form"] = call_user_func_array($verifier,$args))==0))
+			 && ($traiter = charger_fonction("traiter","formulaires/$form/",true))
+			 ) {
+				$_POST["message_ok_$form"] = call_user_func_array($traiter,$args);
+				// traiter peut retourner soit un message, soit un array(editable,message)
+				if (is_array($_POST["message_ok_$form"]))
+					list($_POST["editable_$form"],$_POST["message_ok_$form"]) = $_POST["message_ok_$form"];
+			}
+			// si le formulaire a ete soumis en ajax, on le renvoie direct !
+			if (_request('var_ajax')){
+				if (find_in_path('formulaire_.php','balise/',true)) {
+					include_spip('inc/actions');
+					array_unshift($args,$form);
+					ajax_retour(inclure_balise_dynamique(call_user_func_array('balise_formulaire__dyn',$args),false),false);
+					exit;
+				}
+			}
+		}
+		$done = true;
+	}
+}
+
 // fonction principale declenchant tout le service
 // elle-meme ne fait que traiter les cas particuliers, puis passe la main.
 // http://doc.spip.org/@public_assembler_dist
@@ -97,55 +153,7 @@ function public_assembler_dist($fond, $connect='') {
 		redirige_par_entete($forum_insert());
 	}
 	
-	// traiter les appels de bloc ajax
-	if (($v=_request('var_ajax'))
-	 AND ($v!=='form')
-	 AND ($args = _request('var_ajax_env'))
-	 AND ($cle = _request('var_ajax_cle')) ){ 
-		 if ((include_spip('inc/securiser_action'))
-		 AND ($cle == calculer_cle_action($args))) {
-			$args = unserialize(base64_decode($args));
-			if ($fond = $args['fond_ajax']){
-				include_spip('public/parametrer');
-				$contexte = calculer_contexte();
-				$contexte = array_merge($args, $contexte);
-				$page = evaluer_fond($fond,$contexte);
-				include_spip('inc/actions');
-				ajax_retour($page['texte']);
-				exit();
-			}
-		}
-		include_spip('inc/actions');
-		ajax_retour('signature ajax incorrecte');
-		exit();
-	}
-	// traiter les formulaires dynamiques simplifies en charger/verifier/traiter
-	if (($form = _request('formulaire_action'))
-	 AND ($cle = _request('formulaire_action_cle'))
-	 AND (($args = _request('formulaire_action_args'))!==NULL)
-	 AND (include_spip('inc/securiser_action'))
-	 AND ($cle == calculer_cle_action($form . $args))) {
-		$args = unserialize(base64_decode($args));
-		if (
-		 (!($verifier = charger_fonction("verifier","formulaires/$form/",true))
-		   || (count($_POST["erreurs_$form"] = call_user_func_array($verifier,$args))==0))
-		 && ($traiter = charger_fonction("traiter","formulaires/$form/",true))
-		 ) {
-			$_POST["message_ok_$form"] = call_user_func_array($traiter,$args);
-			// traiter peut retourner soit un message, soit un array(editable,message)
-			if (is_array($_POST["message_ok_$form"]))
-				list($_POST["editable_$form"],$_POST["message_ok_$form"]) = $_POST["message_ok_$form"];
-		}
-		// si le formulaire a ete soumis en ajax, on le renvoie direct !
-		if (_request('var_ajax')){
-			if (find_in_path('formulaire_.php','balise/',true)) {
-				include_spip('inc/actions');
-				array_unshift($args,$form);
-				ajax_retour(inclure_balise_dynamique(call_user_func_array('balise_formulaire__dyn',$args),false),false);
-				exit;
-			}
-		}
-	}
+	traiter_formulaires_dynamiques();
 	
 	// si signature de petition, l'enregistrer avant d'afficher la page
 	// afin que celle-ci contienne la signature