diff --git a/ecrire/exec/aide_index.php b/ecrire/exec/aide_index.php
index 7920501117d890b5009ed8303ab2ffe0226e11a2..c79f102d1e7fa95bf7e2f93242710f05ff5b34ef 100644
--- a/ecrire/exec/aide_index.php
+++ b/ecrire/exec/aide_index.php
@@ -44,9 +44,8 @@ function help_frame ($aide, $lang) {
 function erreur_aide_indisponible() {
 	global $help_server;
 	include_spip('inc/minipres');
-	echo minipres(_T('forum_titre_erreur'),
+	return  minipres(_T('forum_titre_erreur'),
 		 "<div>$help_server: "._T('aide_non_disponible')."</div><div align='right'>".menu_langues('var_lang_ecrire')."</div>");
-	exit;
 }
 
 // Selection de l'aide correspondant a la langue demandee
@@ -79,7 +78,7 @@ function fichier_aide($lang_aide = '') {
 	if (strlen($contenu) > 500) return array($contenu, $lastm);
 
 	// c'est cuit
-	erreur_aide_indisponible();
+	return array(-1, false);
 }
 
 define('_STYLE_AIDE_BODY', '
@@ -135,19 +134,9 @@ table.spip td {
 
 --></style>');
 
-// http://doc.spip.org/@help_body
-function help_body($aide, $html, $lang_aide='') {
-  global $help_server, $spip_lang_rtl;
-	// Recuperation du contenu de l'aide demandee
+function help_panneau() {
 
-	if ($aide) {
-		$html = analyse_aide($html, $aide);
-		if (!$html) {
-			erreur_aide_indisponible();
-		}
-	} else {
-		// panneau d'accueil
-		$html = "<div align='center'>
+	  return "<div align='center'>
 			<img src='" . _DIR_IMG_PACK.
 		  "logo-spip.gif' alt='SPIP' style='width: 267px; height: 170px; border: 0px' />
 			<br />
@@ -158,10 +147,12 @@ function help_body($aide, $html, $lang_aide='') {
 			font-size: 12px; '>" .
 		preg_replace(",<a ,i", "<a class='target_blank' ",_T('info_copyright_doc')).
 			'</div>';
-	}
+}
+
+function help_body($aide, $suite, $lang_aide='') {
+	global $help_server, $spip_lang_rtl;
 
 	// Recherche des images de l'aide
-	$suite = $html;
 	$html = "";
 	while (preg_match("@(<img([^<>]* +)?\s*src=['\"])"
 		. "((AIDE|IMG|local)/([-_a-zA-Z0-9]*/?)([^'\"<>]*))@ims",
@@ -173,9 +164,9 @@ function help_body($aide, $html, $lang_aide='') {
 		  generer_url_ecrire('aide_index', "img=$img", false, true);
 		$suite = substr($suite, $p + strlen($r[0]));
 	}
-	$html .= $suite;
+
 	// relocaliser img_pack au bon endroit ...
-	$html = preg_replace("@(<img([^<>]* +)?\s*src=['\"])img_pack\/@ims","\\1"._DIR_IMG_PACK,$html);
+	$html = preg_replace("@(<img([^<>]* +)?\s*src=['\"])img_pack\/@ims","\\1"._DIR_IMG_PACK,$html . $suite);
 	
 	echo '<script type="text/javascript"><!--
 
@@ -244,7 +235,6 @@ function help_img($regs) {
 		} else
 			redirige_par_entete("$help_server/$rep/$lang/$file");
 	}
-	exit;
 }
 
 
@@ -445,50 +435,65 @@ function analyse_aide($html, $aide=false) {
 // http://doc.spip.org/@exec_aide_index_dist
 function exec_aide_index_dist()
 {
-  global $help_server, $spip_lang;
+	global $help_server, $spip_lang;
+
+	if (_request('var_lang')) changer_langue($lang = _request('var_lang'));
+	if (_request('lang'))
+	  changer_langue($lang = _request('lang')); # pour le cas ou on a fait appel au menu de changement de langue (aide absente dans la langue x)
+	else $lang = $spip_lang;
 
-if (_request('var_lang')) changer_langue($lang = _request('var_lang'));
-if (_request('lang')) changer_langue($lang = _request('lang')); # pour le cas ou on a fait appel au menu de changement de langue (aide absente dans la langue x)
-else $lang = $spip_lang;
-if (preg_match(',^([^-.]*)-([^-.]*)-([^\.]*\.(gif|jpg|png))$,', _request('img'), $regs))
-	help_img($regs);
-else {
+	if (preg_match(',^([^-.]*)-([^-.]*)-([^\.]*\.(gif|jpg|png))$,', _request('img'), $regs))
+	  help_img($regs);
+	else {
 
 	list($html, $lastmodified) = fichier_aide();
 
+	if ($html === -1)
+	  echo erreur_aide_indisponible();
 	// si on a la doc dans un fichier, controler if_modified_since
-	if ($lastmodified) {
-		$gmoddate = gmdate("D, d M Y H:i:s", $lastmodified);
-		header("Last-Modified: ".$gmoddate." GMT");
-		if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
+	elseif ($lastmodified AND !help_lastmodified($lastmodified)) {
+		header("Content-Type: text/html; charset=utf-8");
+		echo _DOCTYPE_AIDE, html_lang_attributes();
+		echo "<head><title>", _T('info_aide_en_ligne'),	"</title>\n";
+		echo '<script type="text/javascript" src="'._DIR_JAVASCRIPT.'jquery.js"></script>';
+
+		if (_request('frame') == 'menu'){
+			help_menu(_request('aide'), $html, $lang);
+		}
+		else if (_request('frame') == 'body') {
+			$aide = _request('aide');
+			if ($aide) {
+				$html = analyse_aide($html, $aide);
+				if (!$html) {
+					echo erreur_aide_indisponible();
+				}
+			} else 	$html = help_panneau();
+			help_body($aide, $html, $lang);
+		} else {
+			echo '</head>';
+			help_frame(_request('aide'), $lang);
+		}
+		echo "\n</html>";
+	}
+	}
+}
+
+function help_lastmodified($lastmodified)
+{
+	$gmoddate = gmdate("D, d M Y H:i:s", $lastmodified);
+	header("Last-Modified: ".$gmoddate." GMT");
+	if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
 			# MSoft IIS is dumb
-		AND !preg_match(',IIS/,', $_SERVER['SERVER_SOFTWARE'])) {
+	AND !preg_match(',IIS/,', $_SERVER['SERVER_SOFTWARE'])) {
 
-			$if_modified_since = preg_replace('/;.*/', '',
+		$ims = preg_replace('/;.*/', '',
 				$_SERVER['HTTP_IF_MODIFIED_SINCE']);
-			$if_modified_since = trim(str_replace('GMT', '', $if_modified_since));
-			if ($if_modified_since == $gmoddate) {
-				http_status(304);
-				exit;
-			}
+		$ims = trim(str_replace('GMT', '', $ims));
+		if ($ims == $gmoddate) {
+			http_status(304);
+			return true;
 		}
-	} 
-
-	header("Content-Type: text/html; charset=utf-8");
-	echo _DOCTYPE_AIDE, html_lang_attributes();
-	echo "<head><title>", _T('info_aide_en_ligne'),	"</title>\n";
-	echo '<script type="text/javascript" src="'._DIR_JAVASCRIPT.'jquery.js"></script>';
-
-	if (_request('frame') == 'menu'){
-		help_menu(_request('aide'), $html, $lang);
-	}
-	else if (_request('frame') == 'body') {
-		help_body(_request('aide'), $html, $lang);
-	} else {
-		echo '</head>';
-		help_frame(_request('aide'), $lang);
 	}
-	echo "\n</html>";
- }
+	return false;
 }
 ?>
diff --git a/ecrire/public/phraser_html.php b/ecrire/public/phraser_html.php
index 44861af628d04ce267f3ebf338328f1aecda2643..4c70b37418c0df9e446da55a160ad35f6ddd92d8 100644
--- a/ecrire/public/phraser_html.php
+++ b/ecrire/public/phraser_html.php
@@ -251,8 +251,8 @@ function phraser_arg(&$texte, $sep, $result, &$pointeur_champ) {
 		  if (!strlen($regs[2]))
 		    {
 		      erreur_squelette(_T('zbug_info_erreur_squelette'), $args);
-		      $args = '';
-		      exit;
+		      $champ->apres = $champ->avant = $args = "";
+		      break;
 		      }   
 		}
 		$arg = $regs[2];
@@ -591,7 +591,7 @@ function public_phraser_html($texte, $id_parent, &$boucles, $nom, $ligne=1) {
 		if ($soustype == 'sites') $soustype = 'syndication' ; # alias
 		      
 		phraser_args($milieu,">","",$all_res,$result);
-		$params = substr($milieu,0,strpos($milieu,$result->apres));
+		$params = substr($milieu,0,@strpos($milieu,$result->apres));
 		$milieu = substr($result->apres,1);
 		$result->apres = "";