diff --git a/ecrire/inc/commencer_page.php b/ecrire/inc/commencer_page.php
index 7dfb46ba030785340229f0d3c66591610c0d8dbf..c3affc82d6b5607b91c5c9dc53cf036c299a8dec 100644
--- a/ecrire/inc/commencer_page.php
+++ b/ecrire/inc/commencer_page.php
@@ -176,7 +176,11 @@ function init_body_class() {
 		3 => 'icones_img'
 	);
 
-	return $GLOBALS['spip_ecran'] . " $spip_display_navigation $spip_display_outils " . $display_class[$GLOBALS['spip_display']];
+	$couleur = isset($GLOBALS['visiteur_session']['prefs']['couleur'])
+		? $GLOBALS['visiteur_session']['prefs']['couleur']
+		: 9;
+
+	return $GLOBALS['spip_ecran'] . " couleur_$couleur $spip_display_navigation $spip_display_outils " . $display_class[$GLOBALS['spip_display']];
 }
 
 
diff --git a/ecrire/inc/filtres_ecrire.php b/ecrire/inc/filtres_ecrire.php
index 04a791dde81b4bc2cf355558a04ae953a1e6e9bf..a079e9c64bdfdcbf0004a27735cd5237f78ae26d 100644
--- a/ecrire/inc/filtres_ecrire.php
+++ b/ecrire/inc/filtres_ecrire.php
@@ -48,8 +48,7 @@ function parametres_css_prive() {
 	// un md5 des menus : si un menu change il faut maj la css
 	$args['md5b'] = (function_exists('md5_boutons_plugins') ? md5_boutons_plugins() : '');
 
-	$c = (is_array($GLOBALS['visiteur_session'])
-		and is_array($GLOBALS['visiteur_session']['prefs']))
+	$c = isset($GLOBALS['visiteur_session']['prefs']['couleur'])
 		? $GLOBALS['visiteur_session']['prefs']['couleur']
 		: 9;
 
diff --git a/prive/formulaires/configurer_preferences.html b/prive/formulaires/configurer_preferences.html
index f4d24c70bfb225c58fbe65820f19be6727e03a4f..dce6882aef9753eb93d6b015e8ffab4c71d167dd 100644
--- a/prive/formulaires/configurer_preferences.html
+++ b/prive/formulaires/configurer_preferences.html
@@ -77,7 +77,7 @@
 				]<BOUCLE_couleurs(POUR){tableau #ENV{couleurs}}>
 				<div class="choix">
 					<input type='radio' class='radio' name='#GET{name}' id='[(#GET{name})]_#CLE'[(#ENV{#GET{name}}|=={#CLE}|oui)checked="checked" ]value="#CLE"
-					onchange="if (this.checked) jQuery('head>link#csspriveedef').clone().removeAttr('id').appendTo(jQuery('head')).attr('href', '[(#ENV{_couleurs_url/#CLE})]');" />
+					onchange="if (this.checked) { jQuery('head>link#csspriveedef').clone().removeAttr('id').appendTo(jQuery('head')).attr('href', '[(#ENV{_couleurs_url/#CLE})]'); jQuery('body').removeClass(function(i, c){ return (c.match (/(^|\s)couleur_\S+/g) || []).join(' ');}).addClass('couleur_#CLE')}" />
 					<label for="[(#GET{name})]_#CLE">
 						<img src="#CHEMIN{rien.gif}" alt="" width="16" height="16" style="background-color:[#(#VALEUR{couleur_foncee}|couleur_foncer)];" />
 						<img src="#CHEMIN{rien.gif}" alt="<:choix_couleur_interface|attribut_html:> 1" width="16" height="16" style="background-color:[(#VALEUR{couleur_foncee})];" />
diff --git a/prive/squelettes/body.html b/prive/squelettes/body.html
index 2eef9b3e329f8fe05ba9d95dd84479c4748c6c65..035a3fec84bb0fa2f575c187c72f3a11cdd4cbe0 100644
--- a/prive/squelettes/body.html
+++ b/prive/squelettes/body.html
@@ -1,4 +1,4 @@
-[(#PIPELINE{body_prive,[(#VAL{<body class="#ENV{type-page,page}[ #ENV{type-page,page}_(#ENV{composition,''})][ statut_(#SESSION{statut})][ webmestre_(#SESSION{webmestre})][ auteur_(#SESSION{id_auteur})] [(#REM|init_body_class)][(#ENV{type-page,page}|match{_edit$}|oui)edition]">})]})]
+[(#PIPELINE{body_prive,[(#VAL{<body class="#ENV{type-page,page}[ #ENV{type-page,page}_(#ENV{composition,''})][ statut_(#SESSION{statut})][ webmestre_(#SESSION{webmestre})][ auteur_(#SESSION{id_auteur})] [(#VAL|init_body_class)][(#ENV{type-page,page}|match{_edit$}|oui)edition]">})]})]
 	<INCLURE{fond=prive/squelettes/inclure/barre-nav,lang,recherche,plugins=(#REM|parametres_css_prive)}>
 	<div id="page">
 		<INCLURE{fond=prive/objets/liste/auteurs_enligne}>