diff --git a/ecrire/lang/spip_fr.php3 b/ecrire/lang/spip_fr.php3
index bbec002484969e7b2b0ea2d3bced7e5287b21273..67af8d3c26c3652c3ef096534cec0e36a66173cf 100644
--- a/ecrire/lang/spip_fr.php3
+++ b/ecrire/lang/spip_fr.php3
@@ -615,7 +615,7 @@ Pour retrouver votre accès au site
 
 Veuillez vous rendre à l\'adresse suivante :
 
-    @adresse_site@/spip_pass.php3?p=@cookie@
+    @sendcookie@
 
 Vous pourrez alors entrer un nouveau mot de passe
 et vous reconnecter au site.
diff --git a/formulaires/formulaire_oubli.html b/formulaires/formulaire_oubli.html
index 018acdb229091c809549bd3cbf58dab23b912022..512dafc22207d32773bacbccad568425ba324c04 100644
--- a/formulaires/formulaire_oubli.html
+++ b/formulaires/formulaire_oubli.html
@@ -1,4 +1,3 @@
-<h3 class='spip'><:pass_mot_oublie:></h3>
 <div class='spip_serif'>[
 (#ENV*{message})
 ][
diff --git a/spip_pass.php3 b/spip_pass.php3
index 50dd13cac1b55965b5a5574780580c446cc54d90..f36e7898cdbfa2f2daa484cdeac88dd6f960762c 100644
--- a/spip_pass.php3
+++ b/spip_pass.php3
@@ -12,89 +12,87 @@
 
 
 include ("ecrire/inc_version.php3");
+include_ecrire('inc_minipres');
 include_ecrire("inc_session"); # pour creer_uniq_id
 include_ecrire("inc_mail"); # pour envoyer_mail
 include_ecrire("inc_acces"); # pour generer_htpass
 include_local("inc-public-global"); # pour calculer la page
-include_ecrire("inc_lang");
 include_ecrire("inc_filtres"); # pour email_valide()
-include_ecrire('inc_headers');
+
 
 utiliser_langue_site();
 utiliser_langue_visiteur();
 
 // Ce fichier est celui d'une balise dynamique qui s'ignore.
 
+function spip_pass_passcookie($email, $param)
+{
+	if (!email_valide($email) ) 
+		return _T('pass_erreur_non_valide', array('email_oubli' => htmlspecialchars($email)));
+
+	$smail = addslashes($email);
+	$res = spip_query("SELECT statut,pass FROM spip_auteurs WHERE email ='$smail'");
+	if (!$row = spip_fetch_array($res)) 
+		return _T('pass_erreur_non_enregistre', array('email_oubli' => htmlspecialchars($email)));
+	if ($row['statut'] == '5poubelle' OR $row['pass'] == '')
+		return  _T('pass_erreur_acces_refuse');
+
+	$cookie = creer_uniqid();
+	$nom = $GLOBALS['meta']["nom_site"];
+	$url = $GLOBALS['meta']["adresse_site"];
+	spip_query("UPDATE spip_auteurs SET cookie_oubli = '$cookie' WHERE email ='$smail'");
+
+	if ( envoyer_mail($email,
+			  ("[$nom] " .  _T('pass_oubli_mot')),
+			  _T('pass_mail_passcookie',
+			     array('nom_site_spip' => $nom,
+				   'adresse_site' => $url, 
+				   'sendcookie' => generer_url_ecrire("$url/spip_pass", "$param=$cookie")))) )
+	  return _T('pass_recevoir_mail');
+	else
+	  return  _T('pass_erreur_probleme_technique');
+}
+
+
 function formulaire_oubli_dyn($p, $oubli)
 {
 
 $message = '';
 
-// au 3e appel la variable P est positionnee par le script lui-meme
-// et oubli = mot passe. Le choix du nom P est impose par pass_mail_passcookie
-if ($p = addslashes($p)) {
-	$res = spip_query("SELECT * FROM spip_auteurs WHERE cookie_oubli='$p' AND statut<>'5poubelle' AND pass<>''");
+// au 3e appel la variable P est positionnee et oubli = mot passe.
+// au 2e appel, P est vide et oubli vaut le mail a qui envoye le cookie
+// au 1er appel, P et oubli sont vides
+
+ if (!$p) {
+	  if ($oubli) $message = spip_pass_passcookie($oubli, 'p');
+ } else {
+	 $p = addslashes($p); 
+	$res = spip_query("SELECT login FROM spip_auteurs WHERE cookie_oubli='$p' AND statut<>'5poubelle' AND pass<>''");
 	if (!$row = spip_fetch_array($res)) 
 		$message = _T('pass_erreur_code_inconnu');
 	else {
 		if ($oubli) {
 			$mdpass = md5($oubli);
 			$htpass = generer_htpass($oubli);
-			spip_query("UPDATE spip_auteurs SET htpass='$htpass', pass='$mdpass', alea_actuel='',
-				cookie_oubli='' WHERE cookie_oubli='$p'");
+			spip_query("UPDATE spip_auteurs SET htpass='$htpass', pass='$mdpass', alea_actuel='',	cookie_oubli='' WHERE cookie_oubli='$p'");
 
 			$login = $row['login'];
 			$message = "<b>" . _T('pass_nouveau_enregistre') . "</b>".
 			"<p>" . _T('pass_rappel_login', array('login' => $login));
 		}
 	}
- } else { 
-  // si p absent, oubli vaut alors le mail au 2e appel, vide au 1e
-  if ($oubli) {
-	if ( email_valide($oubli) ) {
-		$email = addslashes($oubli);
-		$res = spip_query("SELECT * FROM spip_auteurs WHERE email ='$email'");
-		if ($row = spip_fetch_array($res)) {
-			if ($row['statut'] == '5poubelle' OR $row['pass'] == '')
-				$message = _T('pass_erreur_acces_refuse');
-			else {
-				$cookie = creer_uniqid();
-				spip_query("UPDATE spip_auteurs SET cookie_oubli = '$cookie' WHERE email ='$email'");
-
-				if ( envoyer_mail($email,
-						 "[" . $GLOBALS['meta']["nom_site"] .'] ' .  _T('pass_oubli_mot'),
-						 _T('pass_mail_passcookie',
-						    array('nom_site_spip' => $GLOBALS['meta']["nom_site"],
-							  'adresse_site' => $GLOBALS['meta']["adresse_site"], 
-							  'cookie' => $cookie))))
-					$message = _T('pass_recevoir_mail');
-				else
-					$message = _T('pass_erreur_probleme_technique');
-			}
-		}
-		else
-			$message = _T('pass_erreur_non_enregistre', array('email_oubli' => htmlspecialchars($oubli)));
-	} else {
-		$message = _T('pass_erreur_non_valide', array('email_oubli' => htmlspecialchars($oubli)));
-	}
-  }
  }
  return array('formulaire_oubli', 0, array('p' => $p, 'message' => $message));
 }
 
-http_no_cache();
-echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-	 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html lang="', 
-  $GLOBALS['spip_lang'],
-  '" dir="',
-  ($GLOBALS['spip_lang_rtl'] ? 'rtl' : 'ltr'),
-  '">
-<head><title>',
-  _T('pass_mot_oublie'),
-  '</title>
-<link rel="stylesheet" type="text/css" href="spip_style.css" />
-</head><body>';
-inclure_balise_dynamique(formulaire_oubli_dyn($p, $oubli));
-echo "</body></html>";
+function spip_pass_dist()
+{
+	global $p, $oubli;
+	install_debut_html( _T('pass_mot_oublie'));
+	inclure_balise_dynamique(formulaire_oubli_dyn($p, $oubli));
+	install_fin_html();
+}
+
+spip_pass_dist();
+
 ?>