diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3
index 3c3deef01a6eb26ada61f9bf41f01096174c70f2..6e71945e56a96aa2321828151827b309d4fedf39 100644
--- a/ecrire/inc_version.php3
+++ b/ecrire/inc_version.php3
@@ -1191,7 +1191,7 @@ function debut_entete($title)
 	  "<head>\n" .
 #	  "<base href='$base' />\n" . # + tard
 	  "<title>$title</title>\n" .
-	  "<meta http-equiv='Content-Type' content='text/html; charset=$charset'>\n";
+	  "<meta http-equiv='Content-Type' content='text/html; charset=$charset' />\n";
 }
 
 ?>
diff --git a/inc-admin.php3 b/inc-admin.php3
index 3c07c48c6b4f7502ed37287e394073a12158e4a5..82db4240ed88bb32604835336d79f8ef460e41a2 100644
--- a/inc-admin.php3
+++ b/inc-admin.php3
@@ -35,19 +35,19 @@ function afficher_boutons_admin($pop='', $forcer_debug = false /* cas ou l'eval(
 
 	// Bouton modifier
 	if ($id_article) {
-		$ret .= bouton_admin(_T('admin_modifier_article')." ($id_article)", "./ecrire/articles.php3?id_article=$id_article");
+		$ret .= bouton_admin(_T('admin_modifier_article')." ($id_article)", _DIR_RESTREINT_ABS . "articles.php3?id_article=$id_article");
 	}
 	else if ($id_breve) {
-		$ret .= bouton_admin(_T('admin_modifier_breve')." ($id_breve)", "./ecrire/breves_voir.php3?id_breve=$id_breve");
+		$ret .= bouton_admin(_T('admin_modifier_breve')." ($id_breve)", _DIR_RESTREINT_ABS . "breves_voir.php3?id_breve=$id_breve");
 	}
 	else if ($id_rubrique) {
-		$ret .= bouton_admin(_T('admin_modifier_rubrique')." ($id_rubrique)", "./ecrire/naviguer.php3?coll=$id_rubrique");
+		$ret .= bouton_admin(_T('admin_modifier_rubrique')." ($id_rubrique)", _DIR_RESTREINT_ABS . "naviguer.php3?coll=$id_rubrique");
 	}
 	else if ($id_mot) {
-		$ret .= bouton_admin(_T('admin_modifier_mot')." ($id_mot)", "./ecrire/mots_edit.php3?id_mot=$id_mot");
+		$ret .= bouton_admin(_T('admin_modifier_mot')." ($id_mot)", _DIR_RESTREINT_ABS . "mots_edit.php3?id_mot=$id_mot");
 	}
 	else if ($id_auteur) {
-		$ret .= bouton_admin(_T('admin_modifier_auteur')." ($id_auteur)", "./ecrire/auteurs_edit.php3?id_auteur=$id_auteur");
+		$ret .= bouton_admin(_T('admin_modifier_auteur')." ($id_auteur)", _DIR_RESTREINT_ABS . "auteurs_edit.php3?id_auteur=$id_auteur");
 	}
 
 	// Si on est en preview rien d'autre ne fonctionne
@@ -71,7 +71,7 @@ function afficher_boutons_admin($pop='', $forcer_debug = false /* cas ou l'eval(
 				include_local ("inc-stats.php3");
 				$ret .= bouton_admin(_T('stats_visites_et_popularite',
 				afficher_raccourci_stats($id_article)),
-				"./ecrire/statistiques_visites.php3?id_article=$id_article");
+				_DIR_RESTREINT_ABS . "statistiques_visites.php3?id_article=$id_article");
 			}
 		}
 
diff --git a/inc-forum.php3 b/inc-forum.php3
index 94be1bcfbe3ab1967d039d1761e244ec1114a098..c036dd0914703e33bfc77588b57a16e8be23d522 100644
--- a/inc-forum.php3
+++ b/inc-forum.php3
@@ -381,8 +381,9 @@ function code_de_forum_spip ($idr, $idf, $ida, $idb, $ids) {
 	$lacible = "
 	include_local('inc-forum.php3');
 	lang_select(\$GLOBALS['spip_lang']);
-	echo retour_forum('$idr','$idf','$ida','$idb','$ids','".texte_script($titre)."',
-	'".$table."', '".$accepter_forum."', '".$url."', \"
+	echo retour_forum('$idr','$idf','$ida','$idb','$ids','".
+	  texte_script($titre).
+	  "','".$table."', '".$accepter_forum."', '".$url."', \"
 	<input type='hidden' name='retour' value='".$retour_forum."' />
 	<input type='hidden' name='ajout_forum' value='oui' />
 	";
@@ -396,7 +397,7 @@ function code_de_forum_spip ($idr, $idf, $ida, $idb, $ids) {
 		if (\$GLOBALS[\"auteur_session\"]) {\n$lacible
 		} else {
 			include_local('inc-login.php3'); 
-			login('$url', false, true, '$url');
+			login_pour_tous('$url', false, true, '$url');
 		}";
 
 	return "<" . "?php" . $lacible . "?" . ">";
diff --git a/inc-login.php3 b/inc-login.php3
index 9ef2ad817bba439545e19b15e5b4ebdc7fbdd206..ec8d7904be00ecce19ad3c069cbeb3ac98fa916c 100644
--- a/inc-login.php3
+++ b/inc-login.php3
@@ -35,34 +35,20 @@ function auth_http($cible, $essai_auth_http) {
 	}
 }
 
-function login($cible, $prive = 'prive', $message_login='', $action='') {
+// fonction pour les balises #LOGIN_*
 
-  $pass_popup ='href="spip_pass.php3" target="spip_pass" onclick="'
-                       . "javascript:window.open('spip_pass.php3', 'spip_pass', 'scrollbars=yes, resizable=yes, width=480, height=450'); return false;\"";
-
-	// en cas d'echec de cookie, inc_auth a renvoye vers spip_cookie qui
-	// a tente de poser un cookie ; s'il n'est pas la, c'est echec cookie
-	// s'il est la, c'est probablement un bookmark sur bonjour=oui,
-	// et pas un echec cookie.
-	if ($GLOBALS['var_echec_cookie'])
-	  $echec_cookie = ($GLOBALS['spip_session'] != 'test_echec_cookie');
+function login($cible, $prive = 'prive') {
 
 	global $auteur_session;
-	global $ignore_auth_http;
-	global $spip_admin;
-	global $php_module;
 
 	$cible = ereg_replace("[?&]var_erreur=[^&]*", '', $cible);
 	$cible = ereg_replace("[?&]var_url[^&]*", '', $cible);
 
-	if (!$action)
-	  {
-		global $clean_link;
-		$clean_link->delVar('var_erreur');
-		$clean_link->delVar('var_login');
-		$action = $clean_link->getUrl();
-	  }
-	spip_log("action dans inc-login : $action");
+	global $clean_link;
+	$clean_link->delVar('var_erreur');
+	$clean_link->delVar('var_login');
+	$action = $clean_link->getUrl();
+
 	include_ecrire("inc_session.php3");
 	verifier_visiteur();
 
@@ -73,6 +59,19 @@ function login($cible, $prive = 'prive', $message_login='', $action='') {
 		echo "<a href='$cible'>"._T('login_par_ici')."</a>\n";
 		return;
 	}
+	login_pour_tous($cible, $prive, '', $action);
+}
+
+
+// fonction aussi pour le forums sur abonnement
+
+function login_pour_tous($cible, $prive, $message, $action) {
+  $pass_popup ='href="spip_pass.php3" target="spip_pass" onclick="'
+                       . "javascript:window.open('spip_pass.php3', 'spip_pass', 'scrollbars=yes, resizable=yes, width=480, height=450'); return false;\"";
+
+	global $ignore_auth_http;
+	global $spip_admin;
+	global $php_module;
 
 	$login = $GLOBALS['var_login'];
 	// Le login est memorise dans le cookie d'admin eventuel
@@ -83,6 +82,13 @@ function login($cible, $prive = 'prive', $message_login='', $action='') {
 		$login = '';
 
 	$flag_autres_sources = $GLOBALS['ldap_present'];
+	// en cas d'echec de cookie, inc_auth a renvoye vers spip_cookie qui
+	// a tente de poser un cookie ; s'il n'est pas la, c'est echec cookie
+	// s'il est la, c'est probablement un bookmark sur bonjour=oui,
+	// et pas un echec cookie.
+	if ($GLOBALS['var_echec_cookie'])
+	  $echec_cookie = ($GLOBALS['spip_session'] != 'test_echec_cookie');
+
 
 	// quels sont les aleas a passer ?
 	if ($login) {
@@ -130,7 +136,7 @@ function login($cible, $prive = 'prive', $message_login='', $action='') {
 	}
 	else {
 		echo '<div><div style="font-family: Verdana,arial,helvetica,sans-serif; font-size: 12px;">',
-		  (!$message_login ? '' :
+		  (!$message ? '' :
 		   ("<br />" . 
 		    _T("forum_vous_enregistrer") . 
 		    " <a $pass_popup>" .
@@ -149,8 +155,9 @@ function login($cible, $prive = 'prive', $message_login='', $action='') {
 	if ($login) {
 		// Affiche formulaire de login en incluant le javascript MD5
 		$flag_challenge_md5 = ($source_auteur == 'spip');
+		$src = _DIR_RESTREINT_ABS . 'md5.js';
 
-		if ($flag_challenge_md5) echo "<script type=\"text/javascript\" src=\"ecrire/md5.js\"></script>";
+		if ($flag_challenge_md5) echo "<script type=\"text/javascript\" src=\"$src\"></script>\n";
 		echo "<form name='form_login' action='./spip_cookie.php3' method='post'";
 		if ($flag_challenge_md5) echo " onSubmit='if (this.session_password.value) {
 				this.session_password_md5.value = calcMD5(\"$alea_actuel\" + this.session_password.value);
@@ -164,14 +171,14 @@ function login($cible, $prive = 'prive', $message_login='', $action='') {
 		if ($flag_challenge_md5) {
 			// si jaja actif, on affiche le login en 'dur', et on le passe en champ hidden
 			echo "<script type=\"text/javascript\"><!--\n" .
-			  "document.write('".addslashes(_T('login_login'))." <b>$login</b> <br .><font size=\\'2\\'>[<a href=\\'spip_cookie.php3?cookie_admin=non&amp;url=".rawurlencode($action)."\\'>"._T('login_autre_identifiant')."</a>]</font>');\n" .
+			  "document.write('".addslashes(_T('login_login'))." <b>$login</b><br /><a href=\"spip_cookie.php3?cookie_admin=non&amp;url=".rawurlencode($action)."\"><font size=\"2\">["._T('login_autre_identifiant')."]</font></a>');\n" .
 				"//--></script>\n";
 			echo "<input type='hidden' name='session_login_hidden' value='$login' />";
 
 			// si jaja inactif, le login est modifiable (puisque le challenge n'est pas utilise)
 			echo "<noscript>";
 			echo "<font face='Georgia, Garamond, Times, serif' size='3'>";
-			echo _T('login_non_securise')." <a href=\"".quote_amp($action)."\">"._T('login_recharger')."</a>.<p /></font>\n";
+			echo _T('login_non_securise')." <a href=\"".quote_amp($action)."\">"._T('login_recharger')."</a>.</font>\n";
 		}
 		echo "<label><b>"._T('login_login2')."</b><br /></label>";
 		echo "<input type='text' name='session_login' class='forml' value=\"$login\" size='40' />\n";