diff --git a/ecrire/exec/articles_forum.php b/ecrire/exec/articles_forum.php
index d474adcd2de621ec6289a305acd80b847ed8e82b..924957fbbf1b9fed3a28da372234445b080f2f22 100644
--- a/ecrire/exec/articles_forum.php
+++ b/ecrire/exec/articles_forum.php
@@ -49,7 +49,7 @@ function exec_articles_forum_dist()
 
 	$droit= acces_rubrique($id_rubrique);
 
-	if (_request('var_ajaxcharset') AND $droit) return $mess;
+	if (_request('var_ajaxcharset') AND $droit) ajax_retour($mess);
 
  	pipeline('exec_init',array('args'=>array('exec'=>'articles_forum','id_article'=>$id_article),'data'=>''));
 
diff --git a/ecrire/exec/auteurs.php b/ecrire/exec/auteurs.php
index 602d4f4b08d8fcabf7ae37e1759aa159c06e90da..93525d54e8f35c95ed3b813318882ab18ce31f68 100644
--- a/ecrire/exec/auteurs.php
+++ b/ecrire/exec/auteurs.php
@@ -58,7 +58,7 @@ while ($auteur = spip_fetch_array($result)) {
 
  $res = auteurs_tranches($auteurs, $debut, $lettre, $tri, $visiteurs, $max_par_page, $nombre_auteurs);
 
-  if (_request('var_ajaxcharset')) return $res;
+ if (_request('var_ajaxcharset')) ajax_retour($res);
 
   pipeline('exec_init',array('args'=>array('exec'=>'auteurs'),'data'=>''));
 
@@ -225,12 +225,10 @@ function auteurs_href($clic, $args='', $att='')
 {
 	$h = generer_url_ecrire('auteurs', $args);
 	$a = 'auteurs';
-	if ($_COOKIE['spip_accepte_ajax'] != 1 )
-		$evt = '';
-        else 
-		$evt = "\nonclick='return AjaxSqueeze(\"$h\",\n\t\"$a\")'";
+	if ($_COOKIE['spip_accepte_ajax'] == 1 )
+		$att .= ("\nonclick=" . ajax_action_declencheur("\"$h\"",$a));
 
-	return "<a$att href='$h#$a'$evt>$clic</a>";
+	return "<a href='$h#$a'$att>$clic</a>";
 }
 
 // http://doc.spip.org/@requete_auteurs
diff --git a/ecrire/exec/calendrier.php b/ecrire/exec/calendrier.php
index b7e34699ddeeea9fecbb545bfd96c5a83a74cff8..ab988ef14b13c5d3cab9ab58c06e47eb784b898b 100644
--- a/ecrire/exec/calendrier.php
+++ b/ecrire/exec/calendrier.php
@@ -44,7 +44,7 @@ function exec_calendrier_dist()
 
   $r = http_calendrier_init('', $type, '','',generer_url_ecrire('calendrier', ($type ? "type=$type" : '')) . "#$ancre");
 
-  if (_request('var_ajaxcharset')) return $r;
+  if (_request('var_ajaxcharset')) ajax_retour($r);
 
   debut_page($titre, "accueil", "calendrier");
   echo "\n<div>&nbsp;</div>\n<div id='", $ancre, "'>",$r,'</div>';
diff --git a/ecrire/exec/controle_forum.php b/ecrire/exec/controle_forum.php
index df33035388079ebc065e29435bb266485be44b3a..c27ab400e5c9fe248d62c7ac0837a9eaedf0aa96 100644
--- a/ecrire/exec/controle_forum.php
+++ b/ecrire/exec/controle_forum.php
@@ -197,7 +197,7 @@ function controle_un_forum($row) {
 function exec_controle_forum_dist()
 {
 
-  global $type, $debut, $debut_id_forum, $id_rubrique, $connect_statut, $connect_toutes_rubriques;
+	global $type, $debut, $debut_id_forum, $id_rubrique, $connect_statut, $connect_toutes_rubriques;
 
 	$debut= intval($debut);
 	$id_rubrique = intval($id_rubrique);
@@ -230,7 +230,7 @@ function exec_controle_forum_dist()
 		   (!$id_rubrique OR !acces_rubrique($id_rubrique))));
 
 	if (_request('var_ajaxcharset') AND !$droit) {
-		return $mess;
+		ajax_retour($mess);
 	} else {
 
 		debut_page(_T('titre_page_forum_suivi'), "forum", "forum-controle");
diff --git a/ecrire/exec/dater.php b/ecrire/exec/dater.php
index d99f879295024423e4286c05930cf4dcbb160a6f..008682e17437c5677203b7b1c544c358fc910334 100644
--- a/ecrire/exec/dater.php
+++ b/ecrire/exec/dater.php
@@ -29,7 +29,7 @@ function exec_dater_dist()
 	$date = $row["date"];
 	$date_redac = $row["date_redac"];
 
-	$f = charger_fonction('dater', 'inc');
-	return $f($id_article, 'ajax', $statut_article, $date, $date_redac);
+	$dater = charger_fonction('dater', 'inc');
+	ajax_retour($dater($id_article, 'ajax', $statut_article, $date, $date_redac));
 }
 ?>
diff --git a/ecrire/exec/discuter.php b/ecrire/exec/discuter.php
index 509afc763a8bdeccd67067682cecf66316f6ff89..70068e3b21b76da923c06e11f96c4451d6adfba9 100644
--- a/ecrire/exec/discuter.php
+++ b/ecrire/exec/discuter.php
@@ -16,7 +16,7 @@ function exec_discuter_dist()
 {
 	$debut = _request('debut');
 	$id_article = _request('id_article');
-	$f = charger_fonction('discuter', 'inc');
-	return $f($id_article, 'ajax', $debut);
+	$discuter = charger_fonction('discuter', 'inc');
+	ajax_retour($discuter($id_article, 'ajax', $debut));
 }
 ?>
diff --git a/ecrire/exec/editer_auteurs.php b/ecrire/exec/editer_auteurs.php
index a3ecc65ba831d18af2e183a606497a4602c8b28d..c4505a134104688e87786947d74eb4f68c534276 100644
--- a/ecrire/exec/editer_auteurs.php
+++ b/ecrire/exec/editer_auteurs.php
@@ -22,7 +22,7 @@ function exec_editer_auteurs_dist()
 		minipres(_T('info_acces_interdit'));
 	}
 
-	$f = charger_fonction('editer_auteurs', 'inc');
-	return $f($id_article, 'ajax', _request('cherche_auteur'), _request('ids'));
+	$editer_auteurs = charger_fonction('editer_auteurs', 'inc');
+	ajax_retour($editer_auteurs($id_article, 'ajax', _request('cherche_auteur'), _request('ids')));
 }
 ?>
diff --git a/ecrire/exec/editer_mot.php b/ecrire/exec/editer_mot.php
index d42cd65c3886da7798e495f7d894329bbc4343b7..61ee17ae63acb0e359ee9ff64ca9efe03e35b7bb 100644
--- a/ecrire/exec/editer_mot.php
+++ b/ecrire/exec/editer_mot.php
@@ -42,7 +42,7 @@ function exec_editer_mot_dist()
 
 	$ch = _request('cherche_mot');
 	$id_groupe = _request('select_groupe');
-	$f = charger_fonction('editer_mot', 'inc');
-	return $f($objet, $id_objet, $ch, $id_groupe, 'ajax'); 
+	$editer_mot = charger_fonction('editer_mot', 'inc');
+	ajax_retour($editer_mot($objet, $id_objet, $ch, $id_groupe, 'ajax')); 
 }
 ?>
diff --git a/ecrire/exec/gadgets.php b/ecrire/exec/gadgets.php
index 6ac62a300b96763f99d1866bdc0214efd84194ba..87412a48e7e4d2d977fd1f1ab9645c416618ebce 100644
--- a/ecrire/exec/gadgets.php
+++ b/ecrire/exec/gadgets.php
@@ -18,6 +18,6 @@ function exec_gadgets_dist()
 	$gadget = _request('gadget');
 	$gadgets = charger_fonction('gadgets', 'inc');
 
-	return $gadgets($id_rubrique, $gadget);
+	ajax_retour($gadgets($id_rubrique, $gadget));
 }
 ?>
diff --git a/ecrire/exec/grouper_mots.php b/ecrire/exec/grouper_mots.php
index 801656c2dfcb10c4de5578c166b799469986bd18..b22d32521a9c987a5439113af332790910c7fc20 100644
--- a/ecrire/exec/grouper_mots.php
+++ b/ecrire/exec/grouper_mots.php
@@ -16,8 +16,8 @@ function exec_grouper_mots_dist()
 {
 	$id_groupe = intval(_request('id_groupe'));
 	$cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n FROM spip_mots WHERE id_groupe=$id_groupe"));
-	if (! ($cpt = $cpt['n'])) return '' ;
-	$f = charger_fonction('grouper_mots', 'inc');
-	return $f($id_groupe, $cpt);
+	if (! ($cpt = $cpt['n'])) ajax_retour('') ;
+	$grouper_mots = charger_fonction('grouper_mots', 'inc');
+	ajax_retour($grouper_mots($id_groupe, $cpt));
 }
 ?>
diff --git a/ecrire/exec/iconifier.php b/ecrire/exec/iconifier.php
index d565435c2ddc2d12d35b156eb74721a5ba9c4130..f2bd535d35f1090cf9c4acdead38375ed047d2ee 100644
--- a/ecrire/exec/iconifier.php
+++ b/ecrire/exec/iconifier.php
@@ -46,7 +46,7 @@ function exec_iconifier_dist()
 		minipres(_T('info_acces_interdit'));
 	}
 
-	$f = charger_fonction('iconifier', 'inc');
-	return $f($type, $id, $script);
+	$iconifier = charger_fonction('iconifier', 'inc');
+	ajax_retour($iconifier($type, $id, $script));
 }
 ?>
diff --git a/ecrire/exec/informer.php b/ecrire/exec/informer.php
index db6928402ae0c91cb615b81a7b4cdad79bf01c46..f3a2a6b87854a5f2acee5b7ef52ac8329b7e57c0 100644
--- a/ecrire/exec/informer.php
+++ b/ecrire/exec/informer.php
@@ -16,13 +16,12 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 
 function exec_informer_dist()
 {
-
 	$id = intval(_request('id'));
 	$col = intval(_request('col'));
 	$exclus = intval(_request('exclus'));
 
-	$f = charger_fonction('informer', 'inc');
-	return $f($id, $col, $exclus, _request('rac'), _request('type'));
+	$informer = charger_fonction('informer', 'inc');
+	ajax_retour($informer($id, $col, $exclus, _request('rac'), _request('type')));
 }
 
 ?>
diff --git a/ecrire/exec/instituer_auteur.php b/ecrire/exec/instituer_auteur.php
index 9f787cc80c1361b99fd0e3fde53e8b273378b676..a8259fac3beae716fb815c8c5035858e7a5917c1 100644
--- a/ecrire/exec/instituer_auteur.php
+++ b/ecrire/exec/instituer_auteur.php
@@ -20,7 +20,7 @@ function exec_instituer_auteur_dist()
 
 	$r = spip_fetch_array(spip_query("SELECT statut FROM spip_auteurs WHERE id_auteur=$id_auteur"));
 
-	$f = charger_fonction('instituer_auteur', 'inc');
-	return $f($id_auteur, $r['statut'] , $script);
+	$instituer_auteur = charger_fonction('instituer_auteur', 'inc');
+	ajax_retour($instituer_auteur($id_auteur, $r['statut'], $script));
 }
 ?>
diff --git a/ecrire/exec/legender.php b/ecrire/exec/legender.php
index ffee2fbfc1c7e378323905b14afa91907ddc3b21..3ab6e375c32d1b961d328fc7f2cae7f93ee533e8 100644
--- a/ecrire/exec/legender.php
+++ b/ecrire/exec/legender.php
@@ -26,7 +26,7 @@ function exec_legender_dist()
 		minipres(_T('info_acces_interdit'));
 	}
 
-	$f = charger_fonction('legender', 'inc');
-	return $f($id_document, array(), $script, $type, $id, $ancre);
+	$legender = charger_fonction('legender', 'inc');
+	ajax_retour($legender($id_document, array(), $script, $type, $id, $ancre));
 }
 ?>
diff --git a/ecrire/exec/memoriser.php b/ecrire/exec/memoriser.php
index 04181934b221fd7b37d43a8da9f572f4f46bc6b5..8bf7c7f135800f0349cfe2c02cef86ec8be918f4 100644
--- a/ecrire/exec/memoriser.php
+++ b/ecrire/exec/memoriser.php
@@ -40,7 +40,7 @@ function exec_memoriser_dist()
 	if ($flag_ob) {
 			$res = ob_get_contents();
 			ob_end_clean();
-			return $res;
+			ajax_retour($res);
 	}
 }
 ?>
diff --git a/ecrire/exec/petitionner.php b/ecrire/exec/petitionner.php
index 13504afe18c4277e944d3d148290abd9e214d544..bc2ccce52c85679c961c5eebf52e84837016d9f7 100644
--- a/ecrire/exec/petitionner.php
+++ b/ecrire/exec/petitionner.php
@@ -23,7 +23,7 @@ function exec_petitionner_dist()
 		minipres(_T('info_acces_interdit'));
 	}
 
-	$f = charger_fonction('petitionner', 'inc');
-	return $f($id_article, $script, "&id_article=$id_article", 'ajax');
+	$petitionner = charger_fonction('petitionner', 'inc');
+	ajax_retour($petitionner($id_article, $script, "&id_article=$id_article", 'ajax'));
 }
 ?>
diff --git a/ecrire/exec/plonger.php b/ecrire/exec/plonger.php
index 79e4fca57b71df067efb31169e8247cec7c37d56..8cf35c1116d7f0c54f842b779717fe40375936d5 100644
--- a/ecrire/exec/plonger.php
+++ b/ecrire/exec/plonger.php
@@ -24,7 +24,7 @@ function exec_plonger_dist()
 
 	include_spip('inc/texte');
 	include_spip('inc/mini_nav');
-	return mini_afficher_rubrique ($id, htmlentities($rac), array(), $col, $exclus);
+	ajax_retour(mini_afficher_rubrique($id, htmlentities($rac), array(), $col, $exclus));
 }
 
 ?>
diff --git a/ecrire/exec/poster.php b/ecrire/exec/poster.php
index 8dca366bfe5c17258db3b78fd7b72e934cf1a953..75ea6225f3364d372689137a6ce4df1557deb7b9 100644
--- a/ecrire/exec/poster.php
+++ b/ecrire/exec/poster.php
@@ -23,7 +23,7 @@ function exec_poster_dist()
 		minipres(_T('info_acces_interdit'));
 	}
 
-	$f = charger_fonction('poster', 'inc');
-	return $f($id_article, $script, "&id_article=$id_article", true);
+	$poster = charger_fonction('poster', 'inc');
+	ajax_retour($poster($id_article, $script, "&id_article=$id_article", true));
 }
 ?>
diff --git a/ecrire/exec/rechercher.php b/ecrire/exec/rechercher.php
index 163f4289807ed8abfbf9fe64f7557cebf265d5a6..2d57435151f78e7c368a7f917dff8d187dd63fe2 100644
--- a/ecrire/exec/rechercher.php
+++ b/ecrire/exec/rechercher.php
@@ -95,12 +95,10 @@ function exec_rechercher_dist()
 			}
 				
 		}
-		if ($ret)
-			return $ret;
-		else
-			return "<div style='padding: 5px; color: red;'><b>"
+		if (!$ret)
+			$ret =  "<div style='padding: 5px; color: red;'><b>"
 			.htmlentities($type)
 			."</b> :  "._T('avis_aucun_resultat')."</div>";
-
+		ajax_retour($ret);
 }
 ?>
diff --git a/ecrire/exec/referencer_traduction.php b/ecrire/exec/referencer_traduction.php
index aac697015e6c20dcb3b370f8601dab5471450fbc..e4a385cc83810e06c0bd584fff1230360a7e5d5e 100644
--- a/ecrire/exec/referencer_traduction.php
+++ b/ecrire/exec/referencer_traduction.php
@@ -24,7 +24,7 @@ function exec_referencer_traduction_dist()
 
 	$row = spip_fetch_array(spip_query("SELECT id_trad, id_rubrique FROM spip_articles WHERE id_article=$id_article"));
 
-	$f = charger_fonction('referencer_traduction', 'inc');
-	return $f($id_article, 'ajax', $row['id_rubrique'], $row['id_trad']); 
+	$referencer_traduction = charger_fonction('referencer_traduction', 'inc');
+	ajax_retour($referencer_traduction($id_article, 'ajax', $row['id_rubrique'], $row['id_trad'])); 
 }
 ?>
diff --git a/ecrire/exec/rubriquer.php b/ecrire/exec/rubriquer.php
index 55ea8dc9cd81545e7dbe17a18a23baf69384d986..428a6cecb48161837bfa56542a06e1347e3b765c 100644
--- a/ecrire/exec/rubriquer.php
+++ b/ecrire/exec/rubriquer.php
@@ -21,7 +21,7 @@ function exec_rubriquer_dist()
 
 	include_spip('inc/texte');
 	include_spip('inc/mini_nav');
-	return mini_nav ($id, "aff_nav_recherche", 
+	ajax_retour(mini_nav($id, "aff_nav_recherche", 
 			"document.location.href='" . generer_url_ecrire('naviguer', "id_rubrique=::sel::") .
-			"';", 0, true);
+			      "';", 0, true));
 }
diff --git a/ecrire/exec/selectionner.php b/ecrire/exec/selectionner.php
index 3eab8f8f9bb6cb6b6b3d47004d2f17857b967688..e35ea74452f2a347650e979186f74f7a3249f55d 100644
--- a/ecrire/exec/selectionner.php
+++ b/ecrire/exec/selectionner.php
@@ -23,7 +23,7 @@ function exec_selectionner_dist()
 
 	include_spip('inc/texte');
 	include_spip('inc/mini_nav');
-	return mini_nav ($id, "choix_parent", "this.form.id_rubrique.value=::sel::;this.form.titreparent.value='::sel2::';findObj_forcer('selection_rubrique').style.display='none';", $exclus, $rac, $type!='breve');
+	ajax_retour(mini_nav($id, "choix_parent", "this.form.id_rubrique.value=::sel::;this.form.titreparent.value='::sel2::';findObj_forcer('selection_rubrique').style.display='none';", $exclus, $rac, $type!='breve'));
 
 }
 ?>
diff --git a/ecrire/exec/tourner.php b/ecrire/exec/tourner.php
index 6657a6f2834f4b45245f0dd49ddd441c159ce136..e0035065fd4121c3fa0d4c5e69313e1bf04aac8a 100644
--- a/ecrire/exec/tourner.php
+++ b/ecrire/exec/tourner.php
@@ -26,9 +26,8 @@ function exec_tourner_dist()
 		minipres(_T('info_acces_interdit'));
 	}
 
-	$f = charger_fonction('tourner', 'inc');
-
-	return $f($id_document, array(), $script, 'ajax', $type);
+	$tourner = charger_fonction('tourner', 'inc');
+	ajax_retour($tourner($id_document, array(), $script, 'ajax', $type));
 }
 
 ?>
diff --git a/ecrire/exec/virtualiser.php b/ecrire/exec/virtualiser.php
index fa5ac36eedbe89172c888c869a1fe74fbbc6a82b..792b8c34cfe16aa99f43b3157a4ca2d24722924f 100644
--- a/ecrire/exec/virtualiser.php
+++ b/ecrire/exec/virtualiser.php
@@ -30,7 +30,7 @@ function exec_virtualiser_dist()
 			$virtuel = substr($virtuel, 1);
 	}
 
-	$f = charger_fonction('virtualiser', 'inc');
-	return  $f($id_article, 'ajax', $virtuel, "articles", "id_article=$id_article");
+	$virtualiser = charger_fonction('virtualiser', 'inc');
+	ajax_retour($virtualiser($id_article, 'ajax', $virtuel, "articles", "id_article=$id_article"));
 }
 ?>
diff --git a/ecrire/inc/actions.php b/ecrire/inc/actions.php
index 37878b18c5ce2aa0187a427bbe20ab4d3be3ad28..bb74e9df1891813856f0bcb1a2b79f31e44fefb7 100644
--- a/ecrire/inc/actions.php
+++ b/ecrire/inc/actions.php
@@ -160,7 +160,7 @@ function ajax_action_auteur($action, $id, $script, $args='', $corps=false, $args
 				"var_ajaxcharset=utf-8&script=$script$args_ajax",
 				$corps,
 				(" method='post'\nonsubmit="
-				 . declencheur_action_ajax('this', $ancre, $fct_ajax)));
+				 . ajax_action_declencheur('this', $ancre, $fct_ajax)));
 				 
 		}
 	}
@@ -184,12 +184,12 @@ function ajax_action_auteur($action, $id, $script, $args='', $corps=false, $args
 
 		if ($att) $clic = "\n<div$att>$clic</div>";
 		return "<a href='$href'\nonclick="
-		.  declencheur_action_ajax("\"$ajax\"", $ancre, $fct_ajax)
+		.  ajax_action_declencheur("\"$ajax\"", $ancre, $fct_ajax)
 		. ">$clic</a>";
 	}
 }
 
-function declencheur_action_ajax($request, $noeud, $fct_ajax)
+function ajax_action_declencheur($request, $noeud, $fct_ajax='')
 {
 	return "'return AjaxSqueeze("
 	. $request
@@ -200,13 +200,21 @@ function declencheur_action_ajax($request, $noeud, $fct_ajax)
 	. ")'";
 }
 
-function greffe_action_ajax($idom, $corps)
+function ajax_action_greffe($idom, $corps)
 {
 	return _request('var_ajaxcharset')
 	? $corps
 	: "\n<div id='$idom'$atts>$corps</div>";
 }
 
+function ajax_retour($corps)
+{
+	$c = $GLOBALS['meta']["charset"];
+	header('Content-Type: text/html; charset='. $c);
+	echo '<', "?xml version='1.0' encoding='", $c, "'?", ">\n", $corps;
+	exit;
+}
+
 // http://doc.spip.org/@determine_upload
 function determine_upload()
 {
diff --git a/ecrire/inc/agenda.php b/ecrire/inc/agenda.php
index 2305a481cefb74044dd52e9ca218831b8a758c38..7abfd1569a32edb8d42d4de69aa10affbbfaafd4 100644
--- a/ecrire/inc/agenda.php
+++ b/ecrire/inc/agenda.php
@@ -85,7 +85,8 @@ function calendrier_href($script, $annee, $mois, $jour, $type, $fin, $ancre, $im
 
 		return http_href("$h$a", $clic, $titre, $style, $class, $evt);
 	else {
-		return "<a$c$s\nhref='$h$a' $evt\nonclick='return AjaxSqueeze(\"$h\",\n\t\"$ancre\")'>$clic</a>";
+		$evt .= "\nonclick=" . ajax_action_declencheur("\"$h\"",$ancre);
+		return "<a$c$s\nhref='$h$a'$evt>$clic</a>";
 	}
 }
 
diff --git a/ecrire/inc/dater.php b/ecrire/inc/dater.php
index 333a63a13722e4bff33416a2796951b47622b07d..b530e6ca4fe6efafaea960cc6099854f85ded1e4 100644
--- a/ecrire/inc/dater.php
+++ b/ecrire/inc/dater.php
@@ -159,7 +159,7 @@ function inc_dater_dist($id_article, $flag, $statut_article, $date, $date_redac)
 
   $res =  debut_cadre_couleur('',true) . $res .  fin_cadre_couleur(true);
 
-  return greffe_action_ajax("dater-$id_article", $res);
+  return ajax_action_greffe("dater-$id_article", $res);
 }
 
 ?>
diff --git a/ecrire/inc/discuter.php b/ecrire/inc/discuter.php
index 113de6ad014d587872de3c6fcf6cb29ebe5f91eb..ffcf4c7aedae4aadb8bc86c7fd534b169306ceae 100644
--- a/ecrire/inc/discuter.php
+++ b/ecrire/inc/discuter.php
@@ -18,7 +18,7 @@ include_spip('inc/presentation');
 // http://doc.spip.org/@formulaire_discuter
 function formulaire_discuter($query, $total, $debut, $total_afficher, $script, $args, $mute=false)
 {
-	$res = $nav ='';
+	$nav ='';
 	if ($total > $total_afficher) {
 		$evt = $_COOKIE['spip_accepte_ajax'] == 1;
 		$nav = "<div class='serif2' align='center'>";
@@ -32,7 +32,7 @@ function formulaire_discuter($query, $total, $debut, $total_afficher, $script, $
 					$h = generer_url_ecrire($script, $a);
 				} else {
 					$h = generer_url_ecrire('discuter', $a);
-					$evt = "\nonclick='return AjaxSqueeze(\"$h\",\n\t\"forum\")'";
+					$evt = "\nonclick=" . ajax_action_declencheur("\"$h\"",'forum');
 				}
 				$nav .= "[<a href='$h#forum'$evt>$i-$y</a>] ";
 			}
@@ -40,12 +40,10 @@ function formulaire_discuter($query, $total, $debut, $total_afficher, $script, $
 		$nav .= "</div>";
 	}
 
-	$res = $nav 
+	return $nav 
 	. afficher_forum($query, $script, $args, $mute)
 	. "<br />"
 	. $nav;
-
-	return $res;
 }
 
 function inc_discuter_dist($id_article, $flag, $debut=1)
@@ -65,6 +63,6 @@ function inc_discuter_dist($id_article, $flag, $debut=1)
 		$res = formulaire_discuter($forum, $res, $debut, $total_afficher, 'articles', "id_article=$id_article");
 	} else $res ='';
 
-	return greffe_action_ajax("forum", $res);
+	return ajax_action_greffe("forum", $res);
 }
 ?>
diff --git a/ecrire/inc/documenter.php b/ecrire/inc/documenter.php
index be4bcf40beb461199788f9c515ac733f1c8609ba..6ac41061841fc3a4c18aaf0daa02813ee5d44b43 100644
--- a/ecrire/inc/documenter.php
+++ b/ecrire/inc/documenter.php
@@ -107,5 +107,5 @@ function inc_documenter_dist(
 	. $res
 	. "</table>";	  
 
-	return greffe_action_ajax("documenter-$s$doc", $res, $flag==='ajax');
+	return ajax_action_greffe("documenter-$s$doc", $res, $flag==='ajax');
 }
diff --git a/ecrire/inc/editer_auteurs.php b/ecrire/inc/editer_auteurs.php
index 49f2aeb733d38c861cf33e2b20513cea0187baa5..85a0edfe146a9f2c041e2cd4045ed688c487e5c8 100644
--- a/ecrire/inc/editer_auteurs.php
+++ b/ecrire/inc/editer_auteurs.php
@@ -96,7 +96,7 @@ function inc_editer_auteurs_dist($id_article, $flag, $cherche_auteur, $ids)
  . fin_block()
  . fin_cadre_enfonce(true);
 
- return greffe_action_ajax("editer_auteurs-$id_article", $res);
+ return ajax_action_greffe("editer_auteurs-$id_article", $res);
 }
 
 // http://doc.spip.org/@rechercher_auteurs_articles
diff --git a/ecrire/inc/editer_mot.php b/ecrire/inc/editer_mot.php
index 3c22559d3b9e2275996f1687611f95f5f77182d9..d58c365e1bf3bc77e771700895dbec1e195f1b5a 100644
--- a/ecrire/inc/editer_mot.php
+++ b/ecrire/inc/editer_mot.php
@@ -93,7 +93,7 @@ function inc_editer_mot_dist($objet, $id_objet, $cherche_mot, $select_groupe, $f
 	  . $form
 	  . fin_cadre_enfonce(true);
 
-	return greffe_action_ajax("editer_mot-$id_objet", $res);
+	return ajax_action_greffe("editer_mot-$id_objet", $res);
 }
 
 // http://doc.spip.org/@inserer_mot
diff --git a/ecrire/inc/forum.php b/ecrire/inc/forum.php
index 8c3b069508b6e662dcac5556285c8d83f1448482..8163b6e29908e0bca411693502e09322b1bd71b2 100644
--- a/ecrire/inc/forum.php
+++ b/ecrire/inc/forum.php
@@ -17,7 +17,7 @@ function affiche_navigation_forum($script, $args, $debut, $i, $pack, $ancre, $qu
 {
 	$nav = ($i <=0) ? '' : ("<a href='" . generer_url_ecrire($script, $args) ."'>0</a> ... |\n");
 
-	$evt = ($_COOKIE['spip_accepte_ajax'] == 1 );
+	$e = ($_COOKIE['spip_accepte_ajax'] == 1 );
 
 	$n = spip_num_rows($query);
 
@@ -27,9 +27,9 @@ function affiche_navigation_forum($script, $args, $debut, $i, $pack, $ancre, $qu
 			if ($i == $debut)
 				$nav .= "<font size=3><b>$i</b></font> |\n";
 			else {
-				$h = generer_url_ecrire($script, $args . "&debut=$i", $evt);
-				if ($evt) $evt = "\nonclick='return AjaxSqueeze(\"$h\",\n\t\"$ancre\")'";
-				$nav .= "<a href='$h'$evt>$i</a> |\n";
+				$h = generer_url_ecrire($script, $args . "&debut=$i", $e);
+				if ($e)	$e = "\nonclick=" . ajax_action_declencheur("\"$h\"",$ancre);
+				$nav .= "<a href='$h'$e>$i</a> |\n";
 			}
 		}
 		$i ++;
@@ -37,9 +37,9 @@ function affiche_navigation_forum($script, $args, $debut, $i, $pack, $ancre, $qu
 
 	$h = generer_url_ecrire($script, $args . "&debut=$i");
 
-	if ($evt) $evt = "\nonclick='return AjaxSqueeze(\"$h\",\n\t\"$ancre\")'";
+	if ($e)	$e = "\nonclick=" . ajax_action_declencheur("\"$h\"",$ancre);
 
-	return "$nav<a href='$h'$evt>...</a> |";
+	return "$nav<a href='$h'$e>...</a> |";
 }
 
 
diff --git a/ecrire/inc/iconifier.php b/ecrire/inc/iconifier.php
index f958efea897243b7ea2be24dc66226f96bb1105b..a4223a4bd839cf28f8922e09d1d98349bd537024 100644
--- a/ecrire/inc/iconifier.php
+++ b/ecrire/inc/iconifier.php
@@ -50,7 +50,7 @@ function inc_iconifier_dist($id_objet, $id,  $script) {
 	. "</div>"
 	. fin_cadre_relief(true);
 
-	return greffe_action_ajax("iconifier-$id", $res);
+	return ajax_action_greffe("iconifier-$id", $res);
 }
 
 global $logo_libelles;
diff --git a/ecrire/inc/legender.php b/ecrire/inc/legender.php
index 92de13a3c509d39de81275c78004d4dba78cb453..3f9241bdf3713f5df8ee13f0a6fd41163f429a3f 100644
--- a/ecrire/inc/legender.php
+++ b/ecrire/inc/legender.php
@@ -119,7 +119,7 @@ function inc_legender_dist($id_document, $document, $script, $type, $id, $ancre)
 	. block_parfois_visible("legender-aff-$id_document", $entete, $corps, "text-align:center;", $flag)
 	. "</div>";
 
-	return greffe_action_ajax("legender-$id_document", $corps);
+	return ajax_action_greffe("legender-$id_document", $corps);
 }
 
 
diff --git a/ecrire/inc/petitionner.php b/ecrire/inc/petitionner.php
index 9464534d5ffb61d46b8c0c89e755723db1209519..b24d550090aaaa2dfccc72c1afcd2c5aef98efb5 100644
--- a/ecrire/inc/petitionner.php
+++ b/ecrire/inc/petitionner.php
@@ -96,6 +96,6 @@ function inc_petitionner_dist($id_article, $script, $args, $ajax=false)
 	$res .="</span>";
 	$res = ajax_action_auteur('petitionner', $id_article, $script, $args, $res);
 
-	return greffe_action_ajax("petitionner-$id_article", $res);
+	return ajax_action_greffe("petitionner-$id_article", $res);
 }
 ?>
diff --git a/ecrire/inc/poster.php b/ecrire/inc/poster.php
index 208c436ff59a70fba96994a0bf2e6a1722af565c..2d01e6ac1f55eb9fa5b2a19976c4519bd9ee980d 100644
--- a/ecrire/inc/poster.php
+++ b/ecrire/inc/poster.php
@@ -63,6 +63,6 @@ function inc_poster_dist($id_article, $script, $args, $flag=false) {
 
 	$r = ajax_action_auteur('poster', $id_article, $script, $args, $r);
 
-	return greffe_action_ajax("poster-$id_article", $r);
+	return ajax_action_greffe("poster-$id_article", $r);
 }
 ?>
diff --git a/ecrire/inc/referencer_traduction.php b/ecrire/inc/referencer_traduction.php
index cdd3fbc095fd738fd0e7038320f415ec5b8eb444..442821f6d9ab1a19367d9e86822ff05602ed82a8 100644
--- a/ecrire/inc/referencer_traduction.php
+++ b/ecrire/inc/referencer_traduction.php
@@ -133,7 +133,7 @@ function inc_referencer_traduction_dist($id_article, $flag, $id_rubrique, $id_tr
 			. $form
 			. fin_block()
 			. fin_cadre_enfonce(true);
-	return greffe_action_ajax("referencer_traduction-$id_article", $res);
+	return ajax_action_greffe("referencer_traduction-$id_article", $res);
 }
 
 
diff --git a/ecrire/inc/tourner.php b/ecrire/inc/tourner.php
index da89df6d378124b5841ba1df7ee423a5331752c5..a704a675b8f4ef176740874776860162194ac4e7 100644
--- a/ecrire/inc/tourner.php
+++ b/ecrire/inc/tourner.php
@@ -69,7 +69,7 @@ function inc_tourner_dist($id_document, $document, $script, $flag, $type)
 
 	if ($boite) return "$boite<div>$res</div>";
 
-	return greffe_action_ajax("tourner-$id_document", $res);
+	return ajax_action_greffe("tourner-$id_document", $res);
 }
 
 // http://doc.spip.org/@boutons_rotateurs
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index af19f63fa547dd3e43c39454db6f24556b1edea7..7a8eb4a6a21dc5efcd6e47f390f78ca3b887972c 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -17,7 +17,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 //
 
 // Cette inclusion est destine aux extensions de Spip qui n'ont pas suivi
-// son evolution. Si vous n'en utilisez pas, neutrlaliser cette ligne
+// son evolution. Si vous n'en utilisez pas, neutraliser cette ligne pour
 // gagner du temps au chargement.
 
 include(_DIR_RESTREINT . 'inc/vieilles_defs.php');
diff --git a/ecrire/inc/virtualiser.php b/ecrire/inc/virtualiser.php
index bc9c204c7b21b5826896ff0233060d82b3d13cee..73d40361742fbe22ba1ffa28b81c290a84011974 100644
--- a/ecrire/inc/virtualiser.php
+++ b/ecrire/inc/virtualiser.php
@@ -34,6 +34,6 @@ function inc_virtualiser_dist($id_article, $flag, $virtuel, $script, $args)
 	. "' style='font-size:10px' /></div>";
 
 	$res = ajax_action_auteur('virtualiser', $id_article, $script, $args, $res);
-	return greffe_action_ajax("virtualiser-$id_article", $res);
+	return ajax_action_greffe("virtualiser-$id_article", $res);
 }
 ?>
diff --git a/ecrire/index.php b/ecrire/index.php
index eb821d3da7bf75f874df64ca969a33635d139a1d..775a29d7ad1187cf01a1732511c9a29bb2757c07 100644
--- a/ecrire/index.php
+++ b/ecrire/index.php
@@ -159,23 +159,6 @@ topmargin='0' leftmargin='0' marginwidth='0' marginheight='0' frameborder='0'" .
 
 define('_TRANCHES', 10);
 
-//
-// Fragment (ajax) ?
-//
-// var_ajaxcharset repere les requetes de fragments, et indique en plus
-// le charset [utf-8] utilise par le client, utile a _request.
-if (isset($var_ajaxcharset)) {
-	header("Content-Type: text/html; charset=".$GLOBALS['meta']["charset"]);
-	$var_f = charger_fonction($exec, 'exec');
-	$fragment = $var_f();
-	echo "<","?xml version='1.0' encoding='",
-		$GLOBALS['meta']["charset"],
-		"'?",">\n",
-		$fragment;
-	exit;
-}
-
-
 //
 // Gestion d'une page normale de l'espace prive
 //
@@ -207,9 +190,8 @@ AND $l = @unserialize($l)) {
 		}
 	}
 }
+
 // Trouver la fonction eventuellement surchagee et l'appeler.
-// Elle envoie parfois des en-tetes http,
-// et en mode Ajax retourne un resultat.
 $var_f = charger_fonction($exec);
 $var_f();