diff --git a/ecrire/exec/demande_mise_a_jour.php b/ecrire/exec/demande_mise_a_jour.php
index 22f0c04566f5416a70c3f38145b6577b32392d52..8813bc94760003b9c9c128dad56a7115ced48bc6 100644
--- a/ecrire/exec/demande_mise_a_jour.php
+++ b/ecrire/exec/demande_mise_a_jour.php
@@ -15,6 +15,16 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 
 // http://doc.spip.org/@exec_demande_mise_a_jour_dist
 function exec_demande_mise_a_jour_dist() {
+	// on fait la verif du path avant tout,
+	// et l'installation des qu'on est dans la colonne principale
+	// si jamais la liste des plugins actifs change, il faut faire un refresh du hit
+	// pour etre sur que les bons fichiers seront charges lors de l'install
+	include_spip('inc/plugin');
+	if (actualise_plugins_actifs()==-1){
+		include_spip('inc/headers');
+		redirige_par_entete(self());
+	}
+
 	include_spip('inc/presentation');
 	$commencer_page = charger_fonction('commencer_page', 'inc');
 	echo $commencer_page('','','','',true,false,false);
diff --git a/ecrire/inc/autoriser.php b/ecrire/inc/autoriser.php
index 425f7e2518bed4c3348f87a5e3a803e54af0afbd..277b86e775b514c35581238affec23a04495c409 100644
--- a/ecrire/inc/autoriser.php
+++ b/ecrire/inc/autoriser.php
@@ -400,7 +400,9 @@ function autoriser_modererpetition_dist($faire, $type, $id, $qui, $opt) {
 // http://doc.spip.org/@autoriser_webmestre_dist
 function autoriser_webmestre_dist($faire, $type, $id, $qui, $opt) {
 	return
-		$qui['webmestre']=='oui'
+		(defined('_ID_WEBMESTRES')?
+			in_array($qui['id_auteur'], explode(':', _ID_WEBMESTRES))
+			:$qui['webmestre']=='oui')
 		AND $qui['statut'] == '0minirezo'
 		AND !$qui['restreint']
 		;
@@ -500,7 +502,8 @@ function autoriser_auteur_modifier_dist($faire, $type, $id, $qui, $opt) {
 	if ($id == $qui['id_auteur'] && $opt['statut'])
 		return false;
 	// et toucher au statut webmestre si il ne l'est pas lui meme
-	elseif ($opt['webmestre'] AND !autoriser('webmestre'))
+	// ou si les webmestres sont fixes par constante (securite)
+	elseif ($opt['webmestre'] AND (defined('_ID_WEBMESTRES') OR !autoriser('webmestre')))
 		return false;
 	// et toucher au statut d'un webmestre si il ne l'est pas lui meme
 	elseif ($opt['statut'] AND autoriser('webmestre','',0,$id) AND !autoriser('webmestre'))
diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php
index 805bfc07fc79d2ad10c5b9fa22b5f81e2609089e..1893204f5f475d8b26b8a70711625b180ae32988 100644
--- a/ecrire/inc/filtres.php
+++ b/ecrire/inc/filtres.php
@@ -670,7 +670,7 @@ function securiser_acces($id_auteur, $cle, $dir, $op='', $args='')
 // attention c'est compile directement dans inc/references
 // http://doc.spip.org/@sinon
 function sinon ($texte, $sinon='') {
-	if (strlen($texte))
+	if ($texte OR (is_string($texte) AND strlen($texte)))
 		return $texte;
 	else
 		return $sinon;
diff --git a/ecrire/inc/notes.php b/ecrire/inc/notes.php
index a64b38831bd8c703edbd03565a84768a8c77e044..1b921e419b760fd558397171e233a0d96292a357 100644
--- a/ecrire/inc/notes.php
+++ b/ecrire/inc/notes.php
@@ -28,7 +28,7 @@ function inc_notes_dist($arg)
 {	  
 	static $pile = array();
 	global $les_notes, $compt_note, $notes_vues;
-	if (is_string($arg)) return traiter_raccourci_notes($arg, count($pile));
+	if (is_string($arg)) return traiter_raccourci_notes($arg, count($pile)>1?count($pile):'');
 	elseif (is_array($arg)) return traiter_les_notes($arg);
 	elseif ($arg === true) {
 	  array_push($pile, array(@$les_notes, @$compt_note, $notes_vues));
diff --git a/ecrire/inc/plugin.php b/ecrire/inc/plugin.php
index 3938ba9c9f586dfa07db15e21131dea511944fc1..99517aadda9969ba5b2dab75db0025f9fcb77959 100644
--- a/ecrire/inc/plugin.php
+++ b/ecrire/inc/plugin.php
@@ -285,6 +285,10 @@ function liste_plugin_actifs(){
 function liste_chemin_plugin_actifs($dir_plugins=_DIR_PLUGINS){
 	$liste = liste_plugin_actifs();
 	foreach ($liste as $prefix=>$infos) {
+		// compat au moment d'une migration depuis version anterieure
+		// si pas de dir_type, alors c'est _DIR_PLUGINS
+		if (!isset($infos['dir_type']))
+			$infos['dir_type'] = "_DIR_PLUGINS";
 		if (defined($infos['dir_type']) 
 		AND constant($infos['dir_type'])==$dir_plugins)
 			$liste[$prefix] = $infos['dir'];
diff --git a/ecrire/inc/syndic.php b/ecrire/inc/syndic.php
index 78a3d990708f67330d734bcc417b39b27a39618b..4673232096b050ade42cf79580c97226ef7d20c2 100644
--- a/ecrire/inc/syndic.php
+++ b/ecrire/inc/syndic.php
@@ -66,10 +66,14 @@ function analyser_backend($rss, $url_syndic='') {
 	OR ($l = extraire_attribut(extraire_balise($header, 'feed'), 'xml:lang'))
 	)
 		$langue_du_site = $l;
+	// atom
+	elseif (preg_match(',<feed\s[^>]*xml:lang=[\'"]([^<>\'"]+)[\'"],i', $header, $match))
+		$langue_du_site = $match[1];
 
 	// Recuperer les blocs item et entry
 	$items = array_merge(extraire_balises($rss, 'item'), extraire_balises($rss, 'entry'));
 
+
 	//
 	// Analyser chaque <item>...</item> du backend et le transformer en tableau
 	//
@@ -372,8 +376,14 @@ function ajouter_tags($matches, $item) {
 			// cas atom1, a faire apres flickr
 			$term = extraire_attribut($match[0], 'term')
 		) {
+<<<<<<< .working
 				$scheme = extraire_attribut($match[0], 'scheme');
+=======
+			if ($scheme = extraire_attribut($match[0], 'scheme'))
+>>>>>>> .merge-right.r15241
 				$url = suivre_lien($scheme,$term);
+			else
+				$url = $term;
 		}
 		else {
 			# type delicious.com
diff --git a/ecrire/inc/texte.php b/ecrire/inc/texte.php
index 1fbd688567e8df3c94c042b47dc4bb67b5ef7664..1cacbec74b7ed107169b6d03624d7c2b4cc1fe93 100644
--- a/ecrire/inc/texte.php
+++ b/ecrire/inc/texte.php
@@ -413,12 +413,11 @@ function protege_js_modeles($t) {
 // aussi les balises des squelettes qui ne passent pas forcement par propre ou typo apres
 // http://doc.spip.org/@interdire_scripts
 function interdire_scripts($arg) {
-
 	// on memorise le resultat sur les arguments non triviaux
 	static $dejavu = array();
 
 	// Attention, si ce n'est pas une chaine, laisser intact
-	if (!is_string($arg) OR !strstr($arg, '<')) return $arg; 
+	if (!$arg OR !is_string($arg) OR !strstr($arg, '<')) return $arg; 
 
 	if (isset($dejavu[$arg])) return $dejavu[$arg];
 
diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php
index 363773a80d0faa68df5047c4bf21056640275303..611fe920fb2b0ad0146a1c010ea1ee25fd0bf8b2 100644
--- a/ecrire/public/criteres.php
+++ b/ecrire/public/criteres.php
@@ -632,7 +632,7 @@ function calculer_parties(&$boucles, $id_boucle, $debut, $mode) {
 
 		// cas {x,n-1}
 		if ($op2 == '-') {
-			$fin = '$debut_boucle + $nombre_boucle - '
+			$fin = '$debut_boucle + '.$nombre_boucle.' - '
 			. (is_numeric($total_parties) ? ($total_parties+1) :
 			   ($total_parties . ' - 1'));
 		} else {
diff --git a/ecrire/public/references.php b/ecrire/public/references.php
index 8d0e091889df3d7aacfa5d42b41ac9db92af6a07..2f67320cc455d229992814789209c3f895894f60 100644
--- a/ecrire/public/references.php
+++ b/ecrire/public/references.php
@@ -464,7 +464,7 @@ function filtre_logique($fonc, $code, $arg)
 		case ($fonc == 'xor') OR ($fonc == 'xou'):
 			return "((($code) XOR ($arg)) ?' ' :'')";
 		case ($fonc == 'sinon'):
-			return "(strlen(\$a = $code) ? \$a : $arg)";
+			return "((\$a OR (is_string(\$a) AND strlen(\$a = $code))) ? \$a : $arg)";
 		case ($fonc == 'not') OR ($fonc == 'non'):
 			return "(($code) ?'' :' ')";
 		case ($fonc == 'yes') OR ($fonc == 'oui'):