diff --git a/ecrire/auth/sha256.inc.php b/ecrire/auth/sha256.inc.php
index c0e13f76a76807703f436978bd701809e465efa9..23632281b0c2c6ad835e094273b8954d2fdd8152 100644
--- a/ecrire/auth/sha256.inc.php
+++ b/ecrire/auth/sha256.inc.php
@@ -202,14 +202,14 @@ if (!class_exists('nanoSha2'))
          * @param $ig_func Option param to ignore checking for php > 5.1.2
          * @return string Hexadecimal representation of the message digest
          */
-        function hash($str, $ig_func = false)
+        function hash($str, $ig_func = true)
         {
             unset($binStr);     // binary representation of input string
             unset($hexStr);     // 256-bit message digest in readable hex format
 
             // check for php's internal sha256 function, ignore if ig_func==true
             if ($ig_func == false) {
-                if (version_compare(PHP_VERSION,'5.1.2','>=')) {
+                if (version_compare(PHP_VERSION,'5.1.2','>=') AND !defined('_NO_HASH_DEFINED')) {
                     return hash("sha256", $str, false);
                 } else if (function_exists('mhash') && defined('MHASH_SHA256')) {
                     return base64_encode(bin2hex(mhash(MHASH_SHA256, $str)));
@@ -385,12 +385,12 @@ if (!function_exists('str_split'))
  */
 // 2009-07-23: Added check for function as the Suhosin plugin adds this routine.
 if (!function_exists('sha256')) {
-    function sha256($str, $ig_func = false) {
+    function sha256($str, $ig_func = true) {
         $obj = new nanoSha2((defined('_NANO_SHA2_UPPER')) ? true : false);
         return $obj->hash($str, $ig_func);
     }
 } else {
-    function _nano_sha256($str, $ig_func = false) {
+    function _nano_sha256($str, $ig_func = true) {
         $obj = new nanoSha2((defined('_NANO_SHA2_UPPER')) ? true : false);
         return $obj->hash($str, $ig_func);
     }
@@ -399,6 +399,7 @@ if (!function_exists('sha256')) {
 // support to give php4 the hash() routine which abstracts this code.
 if (!function_exists('hash'))
 {
+    define('_NO_HASH_DEFINED',true);
     function hash($algo, $data)
     {
         if (empty($algo) || !is_string($algo) || !is_string($data)) {
diff --git a/ecrire/inc/plugin.php b/ecrire/inc/plugin.php
index ab0de21e714dadac0273be952bb39fc70c778e92..3938ba9c9f586dfa07db15e21131dea511944fc1 100644
--- a/ecrire/inc/plugin.php
+++ b/ecrire/inc/plugin.php
@@ -59,19 +59,21 @@ function liste_plugin_files($dir_plugins = null){
 // http://doc.spip.org/@plugin_version_compatible
 function plugin_version_compatible($intervalle,$version){
 	if (!strlen($intervalle)) return true;
-	if (!preg_match(',^[\[\(]([0-9.a-zRC\s]*)[;]([0-9.a-zRC\s]*)[\]\)]$,',$intervalle,$regs)) return false;
-	$mineure = $regs[1];
-	$majeure = $regs[2];
-	$mineure_inc = $intervalle{0}=="[";
-	$majeure_inc = substr($intervalle,-1)=="]";
-	#var_dump("$mineure_inc-$mineure-$majeure-$majeure_inc");
-	if (strlen($mineure)){
-		if ($mineure_inc AND version_compare($version,$mineure,'<')) return false;
-		if (!$mineure_inc AND version_compare($version,$mineure,'<=')) return false;
+	if (!preg_match(',^[\[\(]([0-9.a-zRC\s\-]*)[;]([0-9.a-zRC\s\-]*)[\]\)]$,',$intervalle,$regs)) return false;
+	#var_dump("$version::$intervalle");
+	$minimum = $regs[1];
+	$maximum = $regs[2];
+	$minimum_inc = $intervalle{0}=="[";
+	$maximum_inc = substr($intervalle,-1)=="]";
+	#var_dump("$version::$minimum_inc::$minimum::$maximum::$maximum_inc");
+	#var_dump(version_compare($version,$minimum,'<'));
+	if (strlen($minimum)){
+		if ($minimum_inc AND version_compare($version,$minimum,'<')) return false;
+		if (!$minimum_inc AND version_compare($version,$minimum,'<=')) return false;
 	}
-	if (strlen($majeure)){
-		if ($majeure_inc AND version_compare($version,$majeure,'>')) return false;
-		if (!$majeure_inc AND version_compare($version,$majeure,'>=')) return false;
+	if (strlen($maximum)){
+		if ($maximum_inc AND version_compare($version,$maximum,'>')) return false;
+		if (!$maximum_inc AND version_compare($version,$maximum,'>=')) return false;
 	}
 	return true;
 }
@@ -114,7 +116,7 @@ function erreur_necessite($n, $liste) {
 		// Necessite SPIP version x ?
 		if ($id=='SPIP') {
 			if (!plugin_version_compatible($need['version'],
-			$GLOBALS['spip_version_branche'].".".$GLOBALS['spip_version_code'])) {
+			$GLOBALS['spip_version_branche'])) {
 				$msg .= "<li>"
 				._T('plugin_necessite_spip',
 				array('version' => $need['version'])
@@ -361,7 +363,7 @@ function ecrire_plugin_actifs($plugin,$pipe_recherche=false,$operation='raz') {
 					$prefix = strtoupper(preg_replace(',\W,','_',$info['prefix']));
 					$splugs .= "define('_DIR_PLUGIN_$prefix',$dir); ";
 					foreach($info['path'] as $chemin){
-						if (!isset($chemin['version']) OR plugin_version_compatible($chemin['version'],$GLOBALS['spip_version_branche'].".".$GLOBALS['spip_version_code'])){
+						if (!isset($chemin['version']) OR plugin_version_compatible($chemin['version'],$GLOBALS['spip_version_branche'])){
 							if (isset($chemin['type']))
 								$splugs .= "if (".(($chemin['type']=='public')?"":"!")."_DIR_RESTREINT) ";
 							$dir = $chemin['dir'];
diff --git a/ecrire/plugins/afficher_plugin.php b/ecrire/plugins/afficher_plugin.php
index cbe6e89f111d8896e560b65cff8473652526c86c..0d69d58d2129d90f082ee297a8f9b48265bbe3ec 100644
--- a/ecrire/plugins/afficher_plugin.php
+++ b/ecrire/plugins/afficher_plugin.php
@@ -22,8 +22,10 @@ function plugins_afficher_plugin_dist($url_page, $plug_file, $actif, $expose=fal
 	$erreur = false;
 	$s = "";
 
+	$force_reload = (_request('var_mode')=='recalcul'?true:false);
+
 	$get_infos = charger_fonction('get_infos','plugins');
-	$info = $get_infos($plug_file);
+	$info = $get_infos($plug_file, $force_reload, $dir_plugins);
 
 	// numerotons les occurences d'un meme prefix
 	$versions[$info['prefix']] = isset($versions[$info['prefix']]) ? $versions[$info['prefix']] + 1 : '';
@@ -175,4 +177,4 @@ function affiche_bloc_plugin($plug_file, $info, $dir_plugins=null) {
 
 	return $s;
 }
-?>
\ No newline at end of file
+?>
diff --git a/ecrire/plugins/verifie_conformite.php b/ecrire/plugins/verifie_conformite.php
index 6c4d1b8f6021a9736a8643a406330cc19e310a9a..604ca6667ffee64948ec1b4b7475d01b6adedba0 100644
--- a/ecrire/plugins/verifie_conformite.php
+++ b/ecrire/plugins/verifie_conformite.php
@@ -22,7 +22,7 @@ function plugins_verifie_conformite_dist($plug, &$arbre, $dir_plugins = _DIR_PLU
 	// chercher la declaration <plugin spip='...'> a prendre pour cette version de SPIP
 	if ($n = spip_xml_match_nodes(",^plugin(\s|$),", $arbre, $matches)){
 		// version de SPIP
-		$vspip = $GLOBALS['spip_version_branche'].".".$GLOBALS['spip_version_code'];
+		$vspip = $GLOBALS['spip_version_branche'];
 		foreach($matches as $tag=>$sous){
 			list($tagname,$atts) = spip_xml_decompose_tag($tag);
 			if ($tagname=='plugin' AND is_array($sous)){
@@ -148,4 +148,4 @@ function plugins_verifie_conformite_dist($plug, &$arbre, $dir_plugins = _DIR_PLU
 	}
 }
 
-?>
\ No newline at end of file
+?>
diff --git a/ecrire/public.php b/ecrire/public.php
index 2bcba062f68868af921ec7edec327bab644f3620..07f1891d0b66946d6e574b138d7a27f102a1bc3f 100644
--- a/ecrire/public.php
+++ b/ecrire/public.php
@@ -148,11 +148,10 @@ if (isset($GLOBALS['_INC_PUBLIC'])) {
 	// type tableau pour y mettre des choses au besoin.
 	$debug = ((_request('var_mode') == 'debug') OR $tableau_des_temps) ? array(1) : array();
 
-	$affiche_boutons_admin = ((
+	$affiche_boutons_admin = ($html AND ((
 		isset($_COOKIE['spip_admin'])
 		AND !$flag_preserver
-		AND $html
-				   ) OR $debug);
+				   ) OR $debug));
 
 	if ($affiche_boutons_admin)
 		include_spip('balise/formulaire_admin');
diff --git a/ecrire/public/cacher.php b/ecrire/public/cacher.php
index 8ff102c2b6af85050d7138308b50f7be21a0cdd1..1c83590cb7f7b7ad883c78032afc78069066193a 100644
--- a/ecrire/public/cacher.php
+++ b/ecrire/public/cacher.php
@@ -133,13 +133,21 @@ function cache_valide(&$page, $date) {
 		return 0;
 }
 
-function cache_sessionne($chemin_cache, $creer=false) {
+function cache_sessionne($chemin_cache, $session, $creer=false) {
 	$fs = substr(md5($chemin_cache),0,8);
 	$a = substr($fs,0,1);
 	$b = sous_repertoire(_DIR_CACHE, $a);
-	if ($creer)
-		sous_repertoire($b, $fs);
-	return $a.'/'.$fs.'/_';
+	// si la session n'est pas anonyme, creer un sous dossier
+	// car spip est susceptible de generer auant de caches que de visiteur identifie
+	if ($session){
+		if ($creer)
+			sous_repertoire($b, $fs);
+		return $a.'/'.$fs.'/_'.$session;
+	}
+	// sinon un simple fichier suffixe par _anonyme
+	else {
+		return $a.'/'.$fs.'_anonyme';
+	}
 }
 
 // Creer le fichier cache
@@ -154,7 +162,7 @@ function creer_cache(&$page, &$chemin_cache) {
 	if (isset($page['invalideurs'])
 	AND isset($page['invalideurs']['session'])) {
 		supprimer_fichier(_DIR_CACHE . $chemin_cache);
-		$chemin_cache = cache_sessionne($chemin_cache, true).$page['invalideurs']['session'];
+		$chemin_cache = cache_sessionne($chemin_cache,$page['invalideurs']['session'], true);
 		
 	}
 
@@ -234,7 +242,7 @@ function public_cacher_dist($contexte, &$use_cache, &$chemin_cache, &$page, &$la
 	$chemin_cache = generer_nom_fichier_cache($contexte, $page);
 	$lastmodified = 0;
 	if (!lire_fichier(_DIR_CACHE . ($f = $chemin_cache), $page))
-		$fs = lire_fichier(_DIR_CACHE . ($f = cache_sessionne($f).spip_session()), $page);
+		$fs = lire_fichier(_DIR_CACHE . ($f = cache_sessionne($f, spip_session())), $page);
 
 	// HEAD : cas sans jamais de calcul pour raisons de performance
 	if ($_SERVER['REQUEST_METHOD'] == 'HEAD') {
diff --git a/squelettes-dist/formulaires/mot_de_passe.php b/squelettes-dist/formulaires/mot_de_passe.php
index b743669b1c8465a4738edfb1d752e59df3e841d7..77d0a5801ec7044be4bab6d18fb5312933732b2e 100644
--- a/squelettes-dist/formulaires/mot_de_passe.php
+++ b/squelettes-dist/formulaires/mot_de_passe.php
@@ -82,7 +82,7 @@ function formulaires_mot_de_passe_traiter_dist($id_auteur=null){
 	 && ($id_auteur = $row['id_auteur'])
 	 && ($oubli = _request('oubli'))) {
 		include_spip('action/editer_auteur');
-		instituer_auteur($id_auteur, array('pass'=>$oubli));
+		auteurs_set($id_auteur, array('pass'=>$oubli,'cookie_oubli'=>''));
 
 		$login = $row['login'];
 		$message = "<b>" . _T('pass_nouveau_enregistre') . "</b>".