diff --git a/ecrire/inc.php3 b/ecrire/inc.php3
index 9e30e29b2a204dae095a8577809981716a456b5d..c5d1ee88fd0f5b8fddaaea28ec341ceac2e28e74 100644
--- a/ecrire/inc.php3
+++ b/ecrire/inc.php3
@@ -50,7 +50,7 @@ if ($prefs_mod) {
 }
 
 if ($set_ecran) {	// on pose un cookie long car ce reglage depend plus du navigateur que de l'utilisateur
-	setcookie('spip_ecran', $set_ecran, time() + 365 * 24 * 3600);
+	spip_setcookie('spip_ecran', $set_ecran, time() + 365 * 24 * 3600);
 	$spip_ecran = $set_ecran;
 }
 if (!$spip_ecran) $spip_ecran = "etroit";
@@ -244,7 +244,7 @@ function tester_rubrique_vide($id_rubrique) {
 // Recuperation du cookie
 //
 
-$cookie_admin = $HTTP_COOKIE_VARS["spip_admin"];
+$cookie_admin = $HTTP_COOKIE_VARS['spip_admin'];
 
 
 
diff --git a/ecrire/inc_acces.php3 b/ecrire/inc_acces.php3
index a399b592de8bf9d6ba6f11758a0c9b0299ca6568..2e81646d3510084b98b0fd34a86e0e7221aac9fd 100644
--- a/ecrire/inc_acces.php3
+++ b/ecrire/inc_acces.php3
@@ -31,6 +31,9 @@ function creer_pass_aleatoire($longueur = 8, $sel = "") {
 		$pass .= $x;
 		$s = substr($s, 2);
 	}
+	$pass = ereg_replace("[./]", "a", $pass);
+	$pass = ereg_replace("[I1l]", "L", $pass);
+	$pass = ereg_replace("[0O]", "o", $pass);
 	return $pass;
 }
 
diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3
index 79fa791c4354541d2ec57f23a986b142c9c732f0..87ea40b8294f6cc4cb4d22acbdef6a25454bd0a9 100644
--- a/ecrire/inc_version.php3
+++ b/ecrire/inc_version.php3
@@ -14,6 +14,10 @@ define("_ECRIRE_INC_VERSION", "1");
 // (a modifier pour avoir plusieurs sites SPIP dans une seule base)
 $table_prefix = "spip";
 
+// Prefixe des cookies
+// (a modifier pour installer des sites SPIP dans des sous-repertoires)
+$cookie_prefix = "spip";
+
 // faut-il loger les infos de debug dans data/spip.log ?
 $debug = false;
 
@@ -175,6 +179,42 @@ function feed_post_files($table) {
 feed_post_files('HTTP_POST_FILES');
 
 
+//
+// Appliquer le prefixe cookie
+//
+function spip_setcookie ($name='', $value='', $expire='', $path='', $domain='', $secure='') {
+	$name = ereg_replace ('^spip', $GLOBALS['cookie_prefix'], $name);
+	
+	if ($secure)
+		@setcookie ($name, $value, $expire, $path, $domain, $secure);
+	else if ($domain)
+		@setcookie ($name, $value, $expire, $path, $domain);
+	else if ($path)
+		@setcookie ($name, $value, $expire, $path);
+	else if ($expire)
+		@setcookie ($name, $value, $expire);
+	else
+		@setcookie ($name, $value);
+}
+if ($cookie_prefix <> 'spip') {
+	reset ($HTTP_COOKIE_VARS);
+	while (list($name,$value) = each($HTTP_COOKIE_VARS)) {
+		if (ereg('^spip', $name)) {
+			unset($HTTP_COOKIE_VARS[$name]);
+			unset($$name);
+		}
+	}
+	reset ($HTTP_COOKIE_VARS);
+	while (list($name,$value) = each($HTTP_COOKIE_VARS)) {
+		if (ereg('^'.$cookie_prefix, $name)) {
+			$spipname = ereg_replace ('^'.$cookie_prefix, 'spip', $name);
+			$HTTP_COOKIE_VARS[$spipname] = $value;
+			$$spipname = $value;
+		}
+	}
+}
+
+
 //
 // Infos sur l'hebergeur
 //
diff --git a/inc-formulaires.php3 b/inc-formulaires.php3
index c8d5e1a22d4b686da2b0a12515c8afe43b791933..f36eabcb0df795f225756e79de14acb31eef53f4 100644
--- a/inc-formulaires.php3
+++ b/inc-formulaires.php3
@@ -319,8 +319,8 @@ function formulaire_inscription($type) {
 
 		// envoyer identifiants par mail
 		if ($continue) {
-			include_local("inc-forum.php3");
-			$pass = generer_pass_forum($mail_inscription);
+			include_ecrire("inc_acces.php3");
+			$pass = creer_pass_aleatoire(8,$mail_inscription);
 			$login = test_login($mail_inscription);
 			$mdpass = md5($pass);
 			$htpass = generer_htpass($pass);
diff --git a/inc-forum.php3 b/inc-forum.php3
index 77c6cdc9befd68243919a664e36229a1ca8959fd..112fcb288b3642e6e8785f1c74c132b5cea21849 100644
--- a/inc-forum.php3
+++ b/inc-forum.php3
@@ -33,30 +33,6 @@ function get_forums_publics($id_article=0) {
 	return $forums_publics;
 }
 
-function generer_pass_forum($email = '') {
-	$passw = creer_pass_aleatoire(9, $email);
-	$passw = ereg_replace("[./]", "a", $passw);
-	$passw = ereg_replace("[I1l]", "L", $passw);
-	$passw = ereg_replace("[0O]", "o", $passw);
-	return $passw;
-}
-
-function generer_hash_forum($email, $id_auteur) {
-	return calculer_action_auteur("forum public $email", $id_auteur);
-}
-
-function poser_cookie_forum($email, $id_auteur, $duree = 30) {
-	$hash = generer_hash_forum($email, $id_auteur);
-	setcookie("spip_forum_email", $email, time() + (3600 * 24 * $duree));
-	setcookie("spip_forum_hash", $hash, time() + (3600 * 24 * $duree));
-}
-
-function enlever_cookie_forum() {
-	setcookie("spip_forum_email", "", time() - 3600 * 24);
-	setcookie("spip_forum_hash", "", time() - 3600 * 24);
-}
-
-
 function afficher_petits_logos_mots($id_mot) {
 	$racine = "IMG/moton$id_mot";
 	if (file_exists("$racine.gif")) {
diff --git a/inc-login.php3 b/inc-login.php3
index 031b8763f18b660dc9e176f7e2f978245f6ad289..01e217640199bef8631afde5bdfb0079adf40095 100644
--- a/inc-login.php3
+++ b/inc-login.php3
@@ -121,7 +121,7 @@ function login($cible = '', $prive = 'prive', $message_login='') {
 		} else if (!$flag_autres_sources) {
 			$erreur = "L'identifiant &laquo; $login &raquo; est inconnu.";
 			$login = '';
-			@setcookie("spip_admin", "", time() - 3600);
+			@spip_setcookie("spip_admin", "", time() - 3600);
 		}
 	}
 
diff --git a/spip_cookie.php3 b/spip_cookie.php3
index 8573fedd97cf2b9fd9af6b5535ae42880cfb87c6..341de5ef38898af3177855d1d736f56625d2c572 100644
--- a/spip_cookie.php3
+++ b/spip_cookie.php3
@@ -28,7 +28,7 @@ if ($change_session == 'oui') {
 			$auteur_session['ip_change'] = false;
 			$cookie = creer_cookie_session($auteur_session);
 			supprimer_session($spip_session);
-			setcookie('spip_session', $cookie);
+			spip_setcookie('spip_session', $cookie);
 		}
 		@header('Content-Type: image/gif');
 		@header('Expires: 0');
@@ -56,7 +56,7 @@ if ($logout) {
 		spip_query("UPDATE spip_auteurs SET en_ligne = DATE_SUB(NOW(),INTERVAL 6 MINUTE) WHERE id_auteur = ".$auteur_session['id_auteur']);
 		if ($spip_session) {
 			zap_sessions($auteur_session['id_auteur'], true);
-			setcookie('spip_session', $spip_session, time() - 3600 * 24);
+			spip_setcookie('spip_session', $spip_session, time() - 3600 * 24);
 		}
 		if ($PHP_AUTH_USER) {
 			include_local ("inc-login.php3");
@@ -77,7 +77,7 @@ if ($logout) {
 // puis de passer a spip_login qui diagnostiquera l'echec de cookie
 // le cas echeant.
 if ($test_echec_cookie == 'oui') {
-	setcookie('spip_session', 'test_echec_cookie');
+	spip_setcookie('spip_session', 'test_echec_cookie');
 	$link = new Link("spip_login.php3?var_echec_cookie=oui");
 	$link->addVar("var_url", $cible->getUrl());
 	@header("Location: ".$link->getUrl());
@@ -156,17 +156,17 @@ if ($essai_login == "oui") {
 
 // cookie d'admin ?
 if ($cookie_admin == "non") {
-	setcookie('spip_admin', $spip_admin, time() - 3600 * 24);
+	spip_setcookie('spip_admin', $spip_admin, time() - 3600 * 24);
 	$cible->delVar('var_login');
 	$cible->addVar('var_login', '-1');
 }
 else if ($cookie_admin AND $spip_admin != $cookie_admin) {
-	setcookie('spip_admin', $cookie_admin, time() + 3600 * 24 * 14);
+	spip_setcookie('spip_admin', $cookie_admin, time() + 3600 * 24 * 14);
 }
 
 // cookie de session ?
 if ($cookie_session)
-	setcookie('spip_session', $cookie_session);
+	spip_setcookie('spip_session', $cookie_session);
 
 // Redirection
 // Sous Apache 1.x, les cookies avec une redirection fonctionnent