Index: .hgsubstate
===================================================================
--- .hgsubstate	(revision 1485)
+++ .hgsubstate	(revision 1225)
@@ -1,1 +1,1 @@
-716e99c54652d08c2e4395d5179e817e0f98182d inc/libs/clearbricks
+e2e1a2c966318f4c5ea67f3c3de72ae0ac79b333 inc/libs/clearbricks
Index: .hgtags
===================================================================
--- .hgtags	(revision 1351)
+++ .hgtags	(revision 1219)
@@ -13,3 +13,2 @@
 514d5121a12586b7ff320924d44028b677a01020 2.4.4
 baf879af43beea9764d920c2facd7226e90c5cf3 2.5.1
-cfad9f2a9f6ec03206ff5db91985208e833a7528 2.5.2
Index: CHANGELOG
===================================================================
--- CHANGELOG	(revision 1350)
+++ CHANGELOG	(revision 1216)
@@ -1,19 +1,2 @@
-Dotclear 2.5.2 - 2013-08-14
-===========================================================
-* Security fix: Fixed potential XSS
-* Bugfix: l10n Clearbricks library
-* <tpl:LoopPosition> now works <tpl:Attachments>
-* Dotclear update check may now be forced (ignoring cache)
-* Enforce integration of daInstaller plugin
-* Tags link button is now available on page editor
-* Default cache age is now 1 week instead of 2 hours
-* Quick entry dashboard module is not activated by default on new installation
-* New template {{tpl:BlogParentThemeURL}} (return URL of parent theme of blog's theme if any, URL of blog's theme otherwise)
-* Fix post comments number on comments deletion
-* Fix order of backup files
-* Minor enhancements
-* Various bug fixes
-* Various cosmetic adjustments
-
 Dotclear 2.5.1 - 2013-07-20
 ===========================================================
Index: Makefile
===================================================================
--- Makefile	(revision 1451)
+++ Makefile	(revision 1046)
@@ -69,5 +69,4 @@
 	find $(DC)/admin/js/jquery/*.js -exec ./build-tools/min-js.php \{\} \;
 	find $(DC)/admin/js/jsToolBar/*.js -exec ./build-tools/min-js.php \{\} \;
-	find $(DC)/admin/js/jsUpload/*.js -exec ./build-tools/min-js.php \{\} \;
 	find $(DC)/admin/js/tool-man/*.js -exec ./build-tools/min-js.php \{\} \;
 	find $(DC)/plugins -name '*.js' -exec ./build-tools/min-js.php \{\} \;
Index: admin/blog.php
===================================================================
--- admin/blog.php	(revision 1277)
+++ admin/blog.php	(revision 1179)
@@ -74,4 +74,5 @@
 	'<form action="blog.php" method="post" id="blog-form" class="fieldset">'.
 	
+	$core->formNonce().
 	'<p><label class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Blog ID:').' '.
 	form::field('blog_id',30,32,html::escapeHTML($blog_id)).'</label></p>'.
@@ -88,7 +89,5 @@
 	form::textarea('blog_desc',60,5,html::escapeHTML($blog_desc)).'</p>'.
 	
-	'<p><input type="submit" accesskey="s" value="'.__('Create').'" />'.
-	$core->formNonce().
-	'</p>'.
+	'<p><input type="submit" accesskey="s" value="'.__('Create').'" /></p>'.
 	'</form>';
 
Index: admin/blog_del.php
===================================================================
--- admin/blog_del.php	(revision 1288)
+++ admin/blog_del.php	(revision 1179)
@@ -49,5 +49,5 @@
 }
 
-dcPage::open(__('Delete a blog'));
+dcPage::open('Delete a blog');
 
 if (!$core->error->flag())
Index: admin/blog_pref.php
===================================================================
--- admin/blog_pref.php	(revision 1537)
+++ admin/blog_pref.php	(revision 1179)
@@ -111,12 +111,8 @@
 # Image default size combo
 $img_default_size_combo = array();
-try {
-	$media = new dcMedia($core);
-	$img_default_size_combo[__('original')] = 'o';
-	foreach ($media->thumb_sizes as $code => $size) {
-		$img_default_size_combo[__($size[2])] = $code;
-	}
-} catch (Exception $e) {
-	$core->error->add($e->getMessage());
+$media = new dcMedia($core);
+$img_default_size_combo[__('original')] = 'o';
+foreach ($media->thumb_sizes as $code => $size) {
+	$img_default_size_combo[__($size[2])] = $code;
 }
 
Index: admin/blog_theme.php
===================================================================
--- admin/blog_theme.php	(revision 1263)
+++ admin/blog_theme.php	(revision 1179)
@@ -332,5 +332,5 @@
 	echo
 	'<h2>'.html::escapeHTML($core->blog->name).
-	' &rsaquo; <a href="blog_theme.php">'.__('Blog appearance').'</a> &rsaquo; <span class="page-title">'.__('Theme configuration').'</span></h2>'.
+	' &rsaquo; <a href="blog_theme.php">'.__('Blog appearance').'</a> &rsaquo; <span class="page-title">'.__('Theme configuration').'<span class="page-title"></h2>'.
 	'<p><a class="back" href="blog_theme.php">'.__('back').'</a></p>';
 	
Index: admin/categories.php
===================================================================
--- admin/categories.php	(revision 1421)
+++ admin/categories.php	(revision 1179)
@@ -31,5 +31,5 @@
 		$mov_cat = $mov_cat ? $mov_cat : null;
 		if ($mov_cat !== null) {
-			$c = $core->blog->getCategory((integer) $_POST['mov_cat']);
+			$c = $core->blog->getCategory((integer) $_POST['del_cat']);
 			if ($c->isEmpty()) {
 				throw new Exception(__('This category does not exist.'));
@@ -141,15 +141,4 @@
 echo '</div>';
 
-$categories_combo = array();
-if (!$rs->isEmpty())
-{
-	while ($rs->fetch()) {
-		$catparents_combo[] = $categories_combo[] = new formSelectOption(
-			str_repeat('&nbsp;&nbsp;',$rs->level-1).($rs->level-1 == 0 ? '' : '&bull; ').html::escapeHTML($rs->cat_title),
-			$rs->cat_id
-		);
-	}
-}
-
 echo '<div class="col">'.
 
@@ -157,8 +146,15 @@
 '<fieldset><legend>'.__('Add a new category').'</legend>'.
 '<p><label class="required" for="cat_title"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').' '.
-form::field('cat_title',30,255,'','maximal').'</label></p>'.
+form::field('cat_title',30,255).'</label></p>'.
 '<p><label for="new_cat_parent">'.__('Parent:').' '.
-form::combo('new_cat_parent',array_merge(array(__('(No cat)') => 0),$categories_combo),'','maximal').
-'</label></p>'.
+'<select id="new_cat_parent" name="new_cat_parent">'.
+'<option value="0">'.__('Top level').'</option>';
+while ($rs->fetch()) {
+	echo '<option value="'.$rs->cat_id.'">'.
+		str_repeat('&nbsp;&nbsp;',$rs->level-1).($rs->level-1 == 0 ? '' : '&bull; ').
+		html::escapeHTML($rs->cat_title).'</option>';
+}
+echo
+'</select></label></p>'.
 '<p><input type="submit" value="'.__('Create').'" /></p>'.
 $core->formNonce().
@@ -168,11 +164,30 @@
 if (!$rs->isEmpty())
 {
+	$cats = array();
+	$dest = array('&nbsp;' => '');
+	$l = $rs->level;
+	$full_name = array($rs->cat_title);
+	while ($rs->fetch())
+	{
+		if ($rs->level < $l) {
+			$full_name = array();
+		} elseif ($rs->level == $l) {
+			array_pop($full_name);
+		}
+		$full_name[] = html::escapeHTML($rs->cat_title);
+		
+		$cats[implode(' / ',$full_name)] = $rs->cat_id;
+		$dest[implode(' / ',$full_name)] = $rs->cat_id;
+		
+		$l = $rs->level;
+	}
+	
 	echo
 	'<form action="categories.php" method="post" id="delete-category">'.
 	'<fieldset><legend>'.__('Remove a category').'</legend>'.
 	'<p><label for="del_cat">'.__('Choose a category to remove:').' '.
-	form::combo('del_cat',$categories_combo,'','maximal').'</label></p> '.
+	form::combo('del_cat',$cats).'</label></p> '.
 	'<p><label for="mov_cat">'.__('And choose the category which will receive its entries:').' '.
-	form::combo('mov_cat',array_merge(array(__('(No cat)') => ''),$categories_combo),'','maximal').'</label></p> '.
+	form::combo('mov_cat',$dest).'</label></p> '.
 	'<p><input type="submit" value="'.__('Delete').'" class="delete" /></p>'.
 	$core->formNonce().
Index: admin/index.php
===================================================================
--- admin/index.php	(revision 1536)
+++ admin/index.php	(revision 1179)
@@ -59,7 +59,7 @@
 if (!$core->auth->user_prefs->dashboard->prefExists('quickentry')) {
 	if (!$core->auth->user_prefs->dashboard->prefExists('quickentry',true)) {
-		$core->auth->user_prefs->dashboard->put('quickentry',false,'boolean','',null,true);
-	}
-	$core->auth->user_prefs->dashboard->put('quickentry',false,'boolean');
+		$core->auth->user_prefs->dashboard->put('quickentry',true,'boolean','',null,true);
+	}
+	$core->auth->user_prefs->dashboard->put('quickentry',true,'boolean');
 }
 
@@ -225,26 +225,4 @@
 }
 
-$err = array();
-
-# Check cache directory
-if (!is_dir(DC_TPL_CACHE)) {
-	$err[] = '<p>'.sprintf(__('Cache directory %s does not exist.'),DC_TPL_CACHE).'</p>';
-} else if (!is_writable(DC_TPL_CACHE)) {
-	$err[] = '<p>'.sprintf(__('Cache directory %s is not writable.'),DC_TPL_CACHE).'</p>';
-}
-
-# Check public directory
-if (!is_dir($core->blog->public_path)) {
-	$err[] = '<p>'.sprintf(__('Directory %s does not exist.'),$core->blog->public_path).'</p>';
-} else if (!is_writable($core->blog->public_path)) {
-	$err[] = '<p>'.sprintf(__('Directory %s is not writable.'),$core->blog->public_path).'</p>';
-}
-
-# Error list
-if (count($err) > 0) {
-	echo '<div class="error"><p><strong>Erreur&nbsp;:</strong></p>'.
-	'<ul><li>'.implode("</li><li>",$err).'</li></ul></div>';
-}
-
 # Plugins install messages
 if (!empty($plugins_install['success']))
@@ -326,18 +304,16 @@
 	if ($core->auth->check('usage,contentadmin',$core->blog->id))
 	{
-		# Getting categories
-		$categories_combo = array(__('(No cat)') => '');
+		$categories_combo = array('&nbsp;' => '');
 		try {
 			$categories = $core->blog->getCategories(array('post_type'=>'post'));
-			if (!$categories->isEmpty()) {
-				while ($categories->fetch()) {
-					$catparents_combo[] = $categories_combo[] = new formSelectOption(
-						str_repeat('&nbsp;&nbsp;',$categories->level-1).($categories->level-1 == 0 ? '' : '&bull; ').html::escapeHTML($categories->cat_title),
-						$categories->cat_id
-					);
-				}
+			while ($categories->fetch()) {
+				$categories_combo[] = new formSelectOption(
+					str_repeat('&nbsp;&nbsp;',$categories->level-1).
+					($categories->level-1 == 0 ? '' : '&bull; ').html::escapeHTML($categories->cat_title),
+					$categories->cat_id
+				);
 			}
 		} catch (Exception $e) { }
-		
+	
 		echo
 		'<div id="quick">'.
@@ -354,15 +330,4 @@
 		'<p><label for="cat_id" class="classic">'.__('Category:').' '.
 		form::combo('cat_id',$categories_combo).'</label></p>'.
-		($core->auth->check('categories', $core->blog->id)
-			? '<div>'.
-			'<p id="new_cat">'.__('Add a new category').'</p>'.
-			'<p class="form-note info clear">'.__('This category will be created when you will save your post.').'</p>'.
-			'<p><label for="new_cat_title">'.__('Title:').' '.
-			form::field('new_cat_title',30,255,'','maximal').'</label></p>'.
-			'<p><label for="new_cat_parent">'.__('Parent:').' '.
-			form::combo('new_cat_parent',$categories_combo,'','maximal').
-			'</label></p>'.
-			'</div>'
-			: '').
 		'<p><input type="submit" value="'.__('Save').'" name="save" /> '.
 		($core->auth->check('publish',$core->blog->id)
Index: admin/install/index.php
===================================================================
--- admin/install/index.php	(revision 1535)
+++ admin/install/index.php	(revision 1179)
@@ -190,5 +190,5 @@
 		$core->auth->user_prefs->dashboard->put('doclinks',true,'boolean','',null,true);
 		$core->auth->user_prefs->dashboard->put('dcnews',true,'boolean','',null,true);
-		$core->auth->user_prefs->dashboard->put('quickentry',false,'boolean','',null,true);
+		$core->auth->user_prefs->dashboard->put('quickentry',true,'boolean','',null,true);
 
 		# Add accessibility options
@@ -299,4 +299,8 @@
 '<div id="main">';
 
+if (!is_writable(DC_TPL_CACHE)) {
+	echo '<div class="error"><p>'.sprintf(__('Cache directory %s is not writable.'),DC_TPL_CACHE).'</p></div>';
+}
+
 if ($can_install && !empty($err)) {
 	echo '<div class="error"><p><strong>'.__('Errors:').'</strong></p>'.$err.'</div>';
Index: admin/js/_index.js
===================================================================
--- admin/js/_index.js	(revision 1418)
+++ admin/js/_index.js	(revision 1140)
@@ -61,8 +61,4 @@
 			});
 		}
-		$('#new_cat').toggleWithLegend(
-			$('#new_cat').parent().children().not('#new_cat'),
-			{} // no cookie on new category as we don't use this every day
-		);
 	}
 
Index: admin/js/_post.js
===================================================================
--- admin/js/_post.js	(revision 1417)
+++ admin/js/_post.js	(revision 1140)
@@ -79,15 +79,7 @@
 		// Get document format and prepare toolbars
 		var formatField = $('#post_format').get(0);
-		var last_post_format = $(formatField).val();
 		$(formatField).change(function() {
-			// Confirm post format change
-			if(window.confirm(dotclear.msg.confirm_change_post_format_noconvert)){
-				excerptTb.switchMode(this.value);
-				contentTb.switchMode(this.value);
-				last_post_format = $(this).val();
-			}else{
-				// Restore last format if change cancelled
-				$(this).val(last_post_format);
-			}
+			excerptTb.switchMode(this.value);
+			contentTb.switchMode(this.value);
 		});
 		
@@ -123,8 +115,4 @@
 			hide: $('#post_notes').val() == ''
 		});
-		$('#new_cat').toggleWithLegend(
-			$('#new_cat').parent().children().not('#new_cat'),
-			{} // no cookie on new category as we don't use this every day
-		);
 		$('#post_lang').parent().toggleWithLegend($('#post_lang'),{
 			cookie: 'dcx_post_lang'
Index: admin/js/_posts_actions.js
===================================================================
--- admin/js/_posts_actions.js	(revision 1419)
+++ admin/js/_posts_actions.js	(revision 1035)
@@ -6,7 +6,3 @@
 		matchContains: true
 	});
-	$('#new_cat').toggleWithLegend(
-		$('#new_cat').parent().children().not('#new_cat'),
-		{} // no cookie on new category as we don't use this every day
-	);
 });
Index: dmin/js/_update.js
===================================================================
--- admin/js/_update.js	(revision 1462)
+++ 	(revision )
@@ -1,5 +1,0 @@
-$(function() {
-	$('form input[type=submit][name=b_del]').click(function(){
- 		return window.confirm(dotclear.msg.confirm_delete_backup);
- 	});
-});
Index: admin/js/_users_actions.js
===================================================================
--- admin/js/_users_actions.js	(revision 1449)
+++ admin/js/_users_actions.js	(revision 935)
@@ -1,5 +1,4 @@
 jQuery.fn.updatePermissionsForm = function() {
 	return this.each(function() {
-		
 		var perms = {};
 		var re = /^perm\[(.+?)\]\[(.+?)\]$/;
@@ -13,5 +12,4 @@
 				continue;
 			}
-			var prop;
 			prop = e.name.match(re);
 			if (!prop) {
@@ -22,70 +20,37 @@
 			}
 			perms[prop[1]][prop[2]] = e;
-			
-			// select related permissions for admin
-			if (prop[2] == 'admin') {
-				if (e.checked) {
-					admin(e,perms,re);
+		}
+		
+		// Update elements status
+		var E;
+		for (blog in perms) {
+			for (perm in perms[blog]) {
+				E = perms[blog][perm];
+				E.onclick = function() {};
+				
+				if (perm == 'admin' && !E.disabled) {
+					perms[blog]['usage'].disabled = E.checked;
+					perms[blog]['publish'].disabled = E.checked;
+					perms[blog]['delete'].disabled = E.checked;
+					perms[blog]['contentadmin'].disabled = E.checked;
+					perms[blog]['categories'].disabled = E.checked;
+					perms[blog]['media'].disabled = E.checked;
+					perms[blog]['media_admin'].disabled = E.checked;
+					E.onclick = function() { $(this.form).updatePermissionsForm(); };
+				} else if (perm == 'contentadmin' && !E.disabled) {
+					perms[blog]['usage'].checked = E.checked;
+					perms[blog]['publish'].checked = E.checked;
+					perms[blog]['delete'].checked = E.checked;
+					perms[blog]['usage'].disabled = E.checked;
+					perms[blog]['publish'].disabled = E.checked;
+					perms[blog]['delete'].disabled = E.checked;
+					E.onclick = function() { $(this.form).updatePermissionsForm(); };
+				} else if (perm == 'media_admin' && !E.disabled) {
+					perms[blog]['media'].checked = E.checked;
+					perms[blog]['media'].disabled = E.checked;
+					E.onclick = function() { $(this.form).updatePermissionsForm(); };
 				}
-				$(e).click(function(){
-					admin(this,perms,re);
-				});
-			// select related permissions for content admin
-			} else if (prop[2] == 'contentadmin') {
-				if (e.checked) {
-					contentadmin(e,perms,re);
-				}
-				$(e).click(function(){
-					contentadmin(this,perms,re);
-				});
-			// select related permissions for media admin
-			} else if (prop[2] == 'media_admin') {
-				if (e.checked) {
-					mediaadmin(e,perms,re);
-				}
-				$(e).click(function(){
-					mediaadmin(this,perms,re);
-				});
 			}
 		}
-		
-		function admin(E,perms,re) {
-					P = E.name.match(re);
-					
-					perms[P[1]]['usage'].checked = E.checked;
-					perms[P[1]]['publish'].checked = E.checked;
-					perms[P[1]]['delete'].checked = E.checked;
-					perms[P[1]]['contentadmin'].checked = E.checked;
-					perms[P[1]]['categories'].checked = E.checked;
-					perms[P[1]]['media'].checked = E.checked;
-					perms[P[1]]['media_admin'].checked = E.checked;
-					perms[P[1]]['usage'].disabled = E.checked;
-					perms[P[1]]['publish'].disabled = E.checked;
-					perms[P[1]]['delete'].disabled = E.checked;
-					perms[P[1]]['contentadmin'].disabled = E.checked;
-					perms[P[1]]['categories'].disabled = E.checked;
-					perms[P[1]]['media'].disabled = E.checked;
-					perms[P[1]]['media_admin'].disabled = E.checked;
-		}
-		
-		function contentadmin(E,perms,re) {
-					P = E.name.match(re);
-					
-					perms[P[1]]['usage'].checked = E.checked;
-					perms[P[1]]['publish'].checked = E.checked;
-					perms[P[1]]['delete'].checked = E.checked;
-					perms[P[1]]['usage'].disabled = E.checked;
-					perms[P[1]]['publish'].disabled = E.checked;
-					perms[P[1]]['delete'].disabled = E.checked;
-		}
-		
-		function mediaadmin(E,perms,re) {
-					P = E.name.match(re);
-					
-					perms[P[1]]['media'].checked = E.checked;
-					perms[P[1]]['media'].disabled = E.checked;
-		}
-		
-		
 	});
 };
Index: dmin/js/jquery/jquery.pwstrength.js
===================================================================
--- admin/js/jquery/jquery.pwstrength.js	(revision 1371)
+++ 	(revision )
@@ -1,66 +1,0 @@
-/**
- * jquery.pwstrength http://matoilic.github.com/jquery.pwstrength
- *
- * @version v0.1.1
- * @author Mato Ilic <info@matoilic.ch>
- * @copyright 2013 Mato Ilic
- *
- * Dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- */
-;(function($) {
-    $.pwstrength = function(password) {
-        var score = 0, length = password.length, upperCase, lowerCase, digits, nonAlpha;
-        
-        if(length < 5) score += 0;
-        else if(length < 8) score += 5;
-        else if(length < 16) score += 10;
-        else score += 15;
-        
-        lowerCase = password.match(/[a-z]/g);
-        if(lowerCase) score += 1;
-        
-        upperCase = password.match(/[A-Z]/g);
-        if(upperCase) score += 5;
-        
-        if(upperCase && lowerCase) score += 2;
-        
-        digits = password.match(/\d/g);
-        if(digits && digits.length > 1) score += 5;
-        
-        nonAlpha = password.match(/\W/g)
-        if(nonAlpha) score += (nonAlpha.length > 1) ? 15 : 10;
-        
-        if(upperCase && lowerCase && digits && nonAlpha) score += 15;
-
-        if(password.match(/\s/)) score += 10;
-
-        if(score < 15) return 0;
-        if(score < 20) return 1;
-        if(score < 35) return 2;
-        if(score < 50) return 3;
-        return 4;
-    };
-    
-    function updateIndicator(event) {
-        var strength = $.pwstrength($(this).val()), options = event.data, klass;
-        klass = options.classes[strength];
-        
-        options.indicator.removeClass(options.indicator.data('pwclass'));
-        options.indicator.data('pwclass', klass);
-        options.indicator.addClass(klass);
-        options.indicator.find(options.label).html(options.texts[strength]);
-    }
-    
-    $.fn.pwstrength = function(options) {
-        var options = $.extend({
-            label: '.label',
-            classes: ['pw-very-weak', 'pw-weak', 'pw-mediocre', 'pw-strong', 'pw-very-strong'],
-            texts: ['very weak', 'weak', 'mediocre', 'strong', 'very strong']
-        }, options || {});
-        options.indicator = $('#' + this.data('indicator'));
-        
-        return this.keyup(options, updateIndicator);
-    };
-})(jQuery);
Index: admin/plugins.php
===================================================================
--- admin/plugins.php	(revision 1271)
+++ admin/plugins.php	(revision 1182)
@@ -233,5 +233,4 @@
 		'<a href="plugin.php?p=daInstaller">'.__('DotAddict.org Installer').'</a>'));
 
-echo '<p>';
 if ($is_writable) {
 	echo __('To install or upgrade a plugin you generally just need to upload it '.
@@ -388,9 +387,4 @@
 echo '</div>';
 
-if ($core->plugins->moduleExists('daInstaller')) {
-	echo '<p><a href="plugin.php?p=daInstaller" class="multi-part">'.__('DotAddict.org Installer').'</a></p>';
-}
-
-
 # --BEHAVIOR-- pluginsToolsTabs
 $core->callBehavior('pluginsToolsTabs',$core);
Index: admin/post.php
===================================================================
--- admin/post.php	(revision 1537)
+++ admin/post.php	(revision 1215)
@@ -49,4 +49,16 @@
 	$post_status = -2;
 }
+
+# Getting categories
+$categories_combo = array('&nbsp;' => '');
+try {
+	$categories = $core->blog->getCategories(array('post_type'=>'post'));
+	while ($categories->fetch()) {
+		$categories_combo[] = new formSelectOption(
+			str_repeat('&nbsp;&nbsp;',$categories->level-1).($categories->level-1 == 0 ? '' : '&bull; ').html::escapeHTML($categories->cat_title),
+			$categories->cat_id
+		);
+	}
+} catch (Exception $e) { }
 
 # Status combo
@@ -135,7 +147,5 @@
 		try {
 			$core->media = new dcMedia($core);
-		} catch (Exception $e) {
-			$core->error->add($e->getMessage());
-		}
+		} catch (Exception $e) {}
 	}
 }
@@ -208,22 +218,4 @@
 if (!empty($_POST) && !empty($_POST['save']) && $can_edit_post && !$bad_dt)
 {
-	# Create category
-	if (!empty($_POST['new_cat_title']) && $core->auth->check('categories', $core->blog->id)) {
-	
-		$cur_cat = $core->con->openCursor($core->prefix.'category');
-		$cur_cat->cat_title = $_POST['new_cat_title'];
-		$cur_cat->cat_url = '';
-		
-		$parent_cat = !empty($_POST['new_cat_parent']) ? $_POST['new_cat_parent'] : '';
-		
-		# --BEHAVIOR-- adminBeforeCategoryCreate
-		$core->callBehavior('adminBeforeCategoryCreate', $cur_cat);
-		
-		$cat_id = $core->blog->addCategory($cur_cat, (integer) $parent_cat);
-		
-		# --BEHAVIOR-- adminAfterCategoryCreate
-		$core->callBehavior('adminAfterCategoryCreate', $cur_cat, $cat_id);
-	}
-	
 	$cur = $core->con->openCursor($core->prefix.'post');
 	
@@ -292,18 +284,4 @@
 }
 
-# Getting categories
-$categories_combo = array(__('(No cat)') => '');
-try {
-	$categories = $core->blog->getCategories(array('post_type'=>'post'));
-	if (!$categories->isEmpty()) {
-		while ($categories->fetch()) {
-			$catparents_combo[] = $categories_combo[] = new formSelectOption(
-				str_repeat('&nbsp;&nbsp;',$categories->level-1).($categories->level-1 == 0 ? '' : '&bull; ').html::escapeHTML($categories->cat_title),
-				$categories->cat_id
-			);
-		}
-	}
-} catch (Exception $e) { }
-
 /* DISPLAY
 -------------------------------------------------------- */
@@ -356,5 +334,5 @@
 }
 
-echo '<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; '.'<a href="posts.php">'.__('Entries').'</a> &rsaquo; <span class="page-title">';
+echo '<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; '.'<a href="posts.php">'.__('Entries').'</a> &rsaquo; <span class="page-title">'.$page_title;
 if ($post_id) {
 	switch ($post_status) {
@@ -374,8 +352,5 @@
 			$img_status = '';
 	}
-	$edit_entry_str = __('Edit entry &ldquo;%s&rdquo;');
-	echo sprintf($edit_entry_str, html::escapeHTML($post_title)).' '.$img_status;
-} else {
-	echo $page_title;
+	echo ' &ldquo;'.$post_title.'&rdquo;'.' '.$img_status;
 }
 echo	'</span></h2>';
@@ -465,16 +440,4 @@
 	'</label></p>'.
 	
-	($core->auth->check('categories', $core->blog->id) ?
-		'<div>'.
-		'<p id="new_cat">'.__('Add a new category').'</p>'.
-		'<p class="form-note info clear">'.__('This category will be created when you will save your post.').'</p>'.
-		'<p><label for="new_cat_title">'.__('Title:').' '.
-		form::field('new_cat_title',30,255,'','maximal').'</label></p>'.
-		'<p><label for="new_cat_parent">'.__('Parent:').' '.
-		form::combo('new_cat_parent',$categories_combo,'','maximal').
-		'</label></p>'.
-		'</div>'
-	: '').
-	
 	'<p><label for="post_status">'.__('Entry status:').
 	form::combo('post_status',$status_combo,$post_status,'','',!$can_publish).
Index: admin/post_media.php
===================================================================
--- admin/post_media.php	(revision 1537)
+++ admin/post_media.php	(revision 1179)
@@ -26,12 +26,12 @@
 }
 
+if ($post_id && $media_id && !empty($_POST['attach']))
+{
+	$core->media = new dcMedia($core);
+	$core->media->addPostMedia($post_id,$media_id);
+	http::redirect($core->getPostAdminURL($rs->post_type,$post_id,false));
+}
+
 try {
-	if ($post_id && $media_id && !empty($_POST['attach']))
-	{
-		$core->media = new dcMedia($core);
-		$core->media->addPostMedia($post_id,$media_id);
-		http::redirect($core->getPostAdminURL($rs->post_type,$post_id,false));
-	}
-
 	$core->media = new dcMedia($core);
 	$f = $core->media->getPostMedia($post_id,$media_id);
Index: admin/posts_actions.php
===================================================================
--- admin/posts_actions.php	(revision 1421)
+++ admin/posts_actions.php	(revision 1179)
@@ -16,5 +16,4 @@
 
 $params = array();
-$action = '';
 
 /* Actions
@@ -127,26 +126,7 @@
 	elseif ($action == 'category' && isset($_POST['new_cat_id']))
 	{
-		$new_cat_id = $_POST['new_cat_id'];
-		
-		try
-		{
-			if (!empty($_POST['new_cat_title']) && $core->auth->check('categories', $core->blog->id))
-			{
-				$cur_cat = $core->con->openCursor($core->prefix.'category');
-				$cur_cat->cat_title = $_POST['new_cat_title'];
-				$cur_cat->cat_url = '';
-				
-				$parent_cat = !empty($_POST['new_cat_parent']) ? $_POST['new_cat_parent'] : '';
-				
-				# --BEHAVIOR-- adminBeforeCategoryCreate
-				$core->callBehavior('adminBeforeCategoryCreate', $cur_cat);
-				
-				$new_cat_id = $core->blog->addCategory($cur_cat, (integer) $parent_cat);
-				
-				# --BEHAVIOR-- adminAfterCategoryCreate
-				$core->callBehavior('adminAfterCategoryCreate', $cur_cat, $new_cat_id);
-			}
-			
-			$core->blog->updPostsCategory($posts_ids, $new_cat_id);
+		try
+		{
+			$core->blog->updPostsCategory($posts_ids,$_POST['new_cat_id']);
 			
 			http::redirect($redir);
@@ -266,15 +246,15 @@
 	echo '<h2 class="page-title">'.__('Change category for entries').'</h2>';
 	
+	# categories list
 	# Getting categories
-	$categories_combo = array(__('(No cat)') => '');
+	$categories_combo = array('&nbsp;' => '');
 	try {
 		$categories = $core->blog->getCategories(array('post_type'=>'post'));
-		if (!$categories->isEmpty()) {
-			while ($categories->fetch()) {
-				$catparents_combo[] = $categories_combo[] = new formSelectOption(
-					str_repeat('&nbsp;&nbsp;',$categories->level-1).($categories->level-1 == 0 ? '' : '&bull; ').html::escapeHTML($categories->cat_title),
-					$categories->cat_id
-				);
-			}
+		while ($categories->fetch()) {
+			$categories_combo[] = new formSelectOption(
+				str_repeat('&nbsp;&nbsp;',$categories->level-1).
+				($categories->level-1 == 0 ? '' : '&bull; ').html::escapeHTML($categories->cat_title),
+				$categories->cat_id
+			);
 		}
 	} catch (Exception $e) { }
@@ -285,16 +265,4 @@
 	form::combo('new_cat_id',$categories_combo,'').
 	'</label> ';
-	
-	if ($core->auth->check('categories', $core->blog->id)) {
-		echo 
-		'<div>'.
-		'<p id="new_cat">'.__('Add a new category').'</p>'.
-		'<p><label for="new_cat_title">'.__('Title:').' '.
-		form::field('new_cat_title',30,255,'','maximal').'</label></p>'.
-		'<p><label for="new_cat_parent">'.__('Parent:').' '.
-		form::combo('new_cat_parent',$categories_combo,'','maximal').
-		'</label></p>'.
-		'</div>';
-	}
 	
 	echo
Index: admin/preferences.php
===================================================================
--- admin/preferences.php	(revision 1375)
+++ admin/preferences.php	(revision 1179)
@@ -344,17 +344,4 @@
 	($user_acc_nodragdrop ? '' : dcPage::jsLoad('js/_preferences-dragdrop.js')).
 	dcPage::jsLoad('js/jquery/jquery-ui.custom.js').
-	dcPage::jsLoad('js/jquery/jquery.pwstrength.js').
-		'<script type="text/javascript">'."\n".
-		"//<![CDATA[\n".
-		"\$(function() {\n".
-		"	\$('#new_pwd').pwstrength({texts: ['".
-				sprintf(__('Password strength: %s'),__('very weak'))."', '".
-				sprintf(__('Password strength: %s'),__('weak'))."', '".
-				sprintf(__('Password strength: %s'),__('mediocre'))."', '".
-				sprintf(__('Password strength: %s'),__('strong'))."', '".
-				sprintf(__('Password strength: %s'),__('very strong'))."']});\n".
-		"});\n".
-		"\n//]]>\n".
-		"</script>\n".
 	dcPage::jsPageTabs($default_tab).
 	dcPage::jsConfirmClose('user-form').
@@ -429,20 +416,14 @@
 	'<legend>'.__('Change your password').'</legend>'.
 	
-	'<div class="pw-table">'.
-	'<p class="pw-cell"><label for="new_pwd">'.__('New password:').'</label>'.
-	form::password('new_pwd',20,255,'','','',false,' data-indicator="pwindicator" ').'</p>'.
-    '<div id="pwindicator">'.
-    '    <div class="bar"></div>'.
-    '    <p class="label no-margin"></p>'.
-    '</div>'.
-    '</div>'.
+	'<p><label for="new_pwd">'.__('New password:').
+	form::password('new_pwd',20,255).'</label></p>'.
 	
-	'<p><label for="new_pwd_c">'.__('Confirm password:').'</label>'.
-	form::password('new_pwd_c',20,255).'</p>'.
+	'<p><label for="new_pwd_c">'.__('Confirm password:').
+	form::password('new_pwd_c',20,255).'</label></p>'.
 	'</fieldset>'.
 	
 	'<p>'.__('If you have changed this user email or password you must provide your current password to save these modifications.').'</p>'.
-	'<p><label for="cur_pwd">'.__('Your password:').'</label>'.
-	form::password('cur_pwd',20,255).'</p>';
+	'<p><label for="cur_pwd">'.__('Your password:').
+	form::password('cur_pwd',20,255).'</label></p>';
 }
 
Index: admin/search.php
===================================================================
--- admin/search.php	(revision 1276)
+++ admin/search.php	(revision 1179)
@@ -79,5 +79,5 @@
 '<p><label for="qtype1" class="classic">'.form::radio(array('qtype','qtype1'),'p',$qtype == 'p').' '.__('Search entries').'</label> '.
 '<label for="qtype2" class="classic">'.form::radio(array('qtype','qtype2'),'c',$qtype == 'c').' '.__('Search comments').'</label></p>'.
-'<p><input type="submit" value="'.__('Search').'" /></p>'.
+'</p><input type="submit" value="'.__('Search').'" /></p>'.
 '</div>'.
 '</form>';
Index: admin/services.php
===================================================================
--- admin/services.php	(revision 1537)
+++ admin/services.php	(revision 1179)
@@ -220,8 +220,6 @@
 		}
 		
-		try {
-			$core->media = new dcMedia($core);
-			$file = $core->media->getFile($id);
-		} catch (Exception $e) {}
+		$core->media = new dcMedia($core);
+		$file = $core->media->getFile($id);
 		
 		if ($file === null || $file->type != 'application/zip' || !$file->editable) {
Index: admin/style/default.css
===================================================================
--- admin/style/default.css	(revision 1375)
+++ admin/style/default.css	(revision 1179)
@@ -901,4 +901,5 @@
 	margin: 0;
 }
+
 /* paragraphe pour bouton Nouveau bidule */
 p.top-add {
@@ -1383,42 +1384,2 @@
 	color: white;
 }
-
-/* --------------------------------------------------------------- password indcator */
-.pw-table {
-	display: table;
-	margin-bottom: 1em;
-}
-.pw-cell {
-	display: table-cell;
-	margin-bottom: 1em;
-}
-#pwindicator {
-	display: table-cell;
-	vertical-align: bottom;
-	padding-left: 1.5em;
-	height: 3.8em;
-}
-#pwindicator .bar {
-	height: 6px;
-	margin-bottom: 4px;
-}
-.pw-very-weak .bar {
-	background: #900;
-	width: 30px;
-}
-.pw-weak .bar {
-	background: #c00;
-	width: 60px;
-}
-.pw-mediocre .bar {
-	background: #f60;
-	width: 90px;
-}
-.pw-strong .bar {
-	background: #060;
-	width: 120px;
-}
-.pw-very-strong .bar {
-	background: #0c0;
-	width: 150px;
-}
Index: admin/update.php
===================================================================
--- admin/update.php	(revision 1479)
+++ admin/update.php	(revision 1231)
@@ -54,5 +54,5 @@
 }
 if (!empty($archives)) {
-	usort($archives,"version_compare");
+	$archives = array_reverse($archives);
 } else {
 	$default_tab = 'update';
@@ -106,8 +106,5 @@
 					throw new Exception(
 						sprintf(__('Downloaded Dotclear archive seems to be corrupted. '.
-						'Try <a %s>download it</a> again.'),'href="'.$p_url.'?step=download"').
-						' '.
-						__('If this problem persists try to '.
-						'<a href="http://dotclear.org/download">update manually</a>.')
+						'Try <a %s>download it</a> again.'),'href="'.$p_url.'?step=download"')
 					);
 				}
@@ -171,8 +168,5 @@
 -------------------------------------------------------- */
 dcPage::open(__('Dotclear update'),
-	(!$step ? 
-		dcPage::jsPageTabs($default_tab).
-		dcPage::jsLoad('js/_update.js')
-	: '')
+	(!$step ? dcPage::jsPageTabs($default_tab) : '')
 );
 
@@ -222,4 +216,5 @@
 		
 		echo	'<form action="'.$p_url.'" method="post">';
+		
 		foreach ($archives as $v) {
 			echo
Index: admin/users.php
===================================================================
--- admin/users.php	(revision 1237)
+++ admin/users.php	(revision 1179)
@@ -106,5 +106,5 @@
 	
 	echo 
-	'<h2 class="page-title">'.__('Users').'</h2>'.
+	'<h2 class="post-title">'.__('Users').'</h2>'.
 	'<p class="top-add"><strong><a class="button add" href="user.php">'.__('Create a new user').'</a></strong></p>';
 	
Index: inc/admin/lib.dc.page.php
===================================================================
--- inc/admin/lib.dc.page.php	(revision 1462)
+++ inc/admin/lib.dc.page.php	(revision 1188)
@@ -160,5 +160,5 @@
 		if ($core->error->flag()) {
 			echo
-			'<div class="error"><p><strong>'.(count($core->error->getErrors()) > 1 ? __('Errors:') : __('Error:')).'</strong></p>'.
+			'<div class="error"><p><strong>'.(count($core->error->getErrors()) > 1 ? __('Errors:') : __('Error:')).'</p></strong>'.
 			$core->error->toHTML().
 			'</div>';
@@ -466,6 +466,4 @@
 		self::jsVar('dotclear.msg.confirm_delete_theme',
 			__('Are you sure you want to delete "%s" theme?')).
-		self::jsVar('dotclear.msg.confirm_delete_backup',
-			__('Are you sure you want to delete this backup?')).
 		self::jsVar('dotclear.msg.zip_file_content',
 			__('Zip file content')).
@@ -478,6 +476,4 @@
 		self::jsVar('dotclear.msg.confirm_change_post_format',
 			__('You have unsaved changes. Switch post format will loose these changes. Proceed anyway?')).
-		self::jsVar('dotclear.msg.confirm_change_post_format_noconvert',
-			__("Warning: post format change will not convert existing content. You will need to apply new format by yourself. Proceed anyway?")).
 		self::jsVar('dotclear.msg.load_enhanced_uploader',
 			__('Loading enhanced uploader, please wait.')).
Index: inc/admin/lib.pager.php
===================================================================
--- inc/admin/lib.pager.php	(revision 1364)
+++ inc/admin/lib.pager.php	(revision 1179)
@@ -87,5 +87,5 @@
 			html::escapeHTML($this->rs->cat_title));
 		} else {
-			$cat_title = __('(No cat)');
+			$cat_title = __('None');
 		}
 		
Index: inc/config.php.in
===================================================================
--- inc/config.php.in	(revision 1535)
+++ inc/config.php.in	(revision 1179)
@@ -50,5 +50,5 @@
 
 // Template cache directory
-define('DC_TPL_CACHE',path::real(dirname(__FILE__).'/..').'/cache');
+define('DC_TPL_CACHE',dirname(__FILE__).'/../cache');
 
 
Index: inc/core/class.dc.blog.php
===================================================================
--- inc/core/class.dc.blog.php	(revision 1429)
+++ inc/core/class.dc.blog.php	(revision 1540)
@@ -203,26 +203,22 @@
 	@param	ids		<b>mixed</b>		Comment(s) ID(s)
 	@param	del		<b>boolean</b>		If comment is delete, set this to true
-	@param	affected_posts		<b>mixed</b>		Posts(s) ID(s)
-	*/
-	public function triggerComments($ids, $del=false, $affected_posts=null)
+	*/
+	public function triggerComments($ids,$del=false)
 	{
 		$co_ids = dcUtils::cleanIds($ids);
-		$a_ids = dcUtils::cleanIds($affected_posts);
-		$a_tbs = array();
 		
 		# a) Retrieve posts affected by comments edition
-		if (empty($a_ids)) {
-			$strReq = 
-				'SELECT post_id, comment_trackback '.
-				'FROM '.$this->prefix.'comment '.
-				'WHERE comment_id'.$this->con->in($co_ids).
-				'GROUP BY post_id,comment_trackback';
-			
-			$rs = $this->con->select($strReq);
-			
-			while ($rs->fetch()) {
-				$a_ids[] = (integer) $rs->post_id;
-				$a_tbs[] = (integer) $rs->comment_trackback;
-			}
+		$strReq = 
+			'SELECT post_id, comment_trackback '.
+			'FROM '.$this->prefix.'comment '.
+			'WHERE comment_id'.$this->con->in($co_ids).
+			'GROUP BY post_id,comment_trackback';
+		
+		$rs = $this->con->select($strReq);
+		
+		$a_ids = $a_tbs = array();
+		while ($rs->fetch()) {
+			$a_ids[] = (integer) $rs->post_id;
+			$a_tbs[] = (integer) $rs->comment_trackback;
 		}
 		
@@ -259,5 +255,4 @@
 		{
 			$nb_comment = $nb_trackback = 0;
-			//$cur->nb_comment = $nb_comment;
 			foreach($b_ids as $b_key => $b_id)
 			{
@@ -510,11 +505,5 @@
 		$this->core->callBehavior('coreBeforeCategoryCreate',$this,$cur);
 		
-		$id = $this->categories()->addNode($cur,$parent);
-		# Update category's cursor
-		$rs = $this->getCategory($id);
-		if (!$rs->isEmpty()) {
-			$cur->cat_lft = $rs->cat_lft;
-			$cur->cat_rgt = $rs->cat_rgt;
-		}
+		$this->categories()->addNode($cur,$parent);
 		
 		# --BEHAVIOR-- coreAfterCategoryCreate
@@ -645,55 +634,18 @@
 	private function checkCategory($title,$url,$id=null)
 	{
-		# Let's check if URL is taken...
-		$strReq = 
-			'SELECT cat_url FROM '.$this->prefix.'category '.
-			"WHERE cat_url = '".$this->con->escape($url)."' ".
-			($id ? 'AND cat_id <> '.(integer) $id. ' ' : '').
-			"AND blog_id = '".$this->con->escape($this->id)."' ".
-			'ORDER BY cat_url DESC';
+		$strReq = 'SELECT cat_id '.
+				'FROM '.$this->prefix.'category '.
+				"WHERE cat_url = '".$this->con->escape($url)."' ".
+				"AND blog_id = '".$this->con->escape($this->id)."' ";
+		
+		if ($id !== null) {
+			$strReq .= 'AND cat_id <> '.(integer) $id.' ';
+		}
 		
 		$rs = $this->con->select($strReq);
 		
-		if (!$rs->isEmpty())
-		{
-			if ($this->con->driver() == 'mysql') {
-				$clause = "REGEXP '^".$this->con->escape($url)."[0-9]+$'";
-			} elseif ($this->con->driver() == 'pgsql') {
-				$clause = "~ '^".$this->con->escape($url)."[0-9]+$'";
-			} else {
-				$clause = "LIKE '".$this->con->escape($url)."%'";
-			}
-			$strReq = 
-				'SELECT cat_url FROM '.$this->prefix.'category '.
-				"WHERE cat_url ".$clause.' '.
-				($id ? 'AND cat_id <> '.(integer) $id. ' ' : '').
-				"AND blog_id = '".$this->con->escape($this->id)."' ".
-				'ORDER BY cat_url DESC ';
-			
-			$rs = $this->con->select($strReq);
-			$a = array();
-			while ($rs->fetch()) {
-				$a[] = $rs->cat_url;
-			}
-			
-			natsort($a);
-			$t_url = end($a);
-			
-			if (preg_match('/(.*?)([0-9]+)$/',$t_url,$m)) {
-				$i = (integer) $m[2];
-				$url = $m[1];
-			} else {
-				$i = 1;
-			}
-			
-			return $url.($i+1);
-		}
-		
-		# URL is empty?
-		if ($url == '') {
-			throw new Exception(__('Empty category URL'));
-		}
-		
-		return $url;
+		if (!$rs->isEmpty()) {
+			throw new Exception(__('Category URL must be unique.'));
+		}
 	}
 	
@@ -717,5 +669,5 @@
 		
 		# Check if title or url are unique
-		$cur->cat_url = $this->checkCategory($cur->cat_title,$cur->cat_url,$id);
+		$this->checkCategory($cur->cat_title,$cur->cat_url,$id);
 		
 		if ($cur->cat_desc !== null) {
@@ -753,4 +705,5 @@
 	- limit: Limit parameter
 	- sql_only : return the sql request instead of results. Only ids are selected
+	- exclude_id : (array) Exclude entries with given post_id
 	
 	Please note that on every cat_id or cat_url, you can add ?not to exclude
@@ -846,4 +799,8 @@
 			}
 			$strReq .= 'AND P.post_id '.$this->con->in($params['post_id']);
+		}
+		
+		if (!empty($params['exclude_id'])) {
+			$strReq .= 'AND post_id not in ('.implode(', ',$params['exclude_id']).') ';
 		}
 		
@@ -2229,19 +2186,6 @@
 		$co_ids = dcUtils::cleanIds($ids);
 		
-		if (empty($co_ids)) {
+		if (empty($ids)) {
 			throw new Exception(__('No such comment ID'));
-		}
-		
-		# Retrieve posts affected by comments edition
-		$affected_posts = array();
-		$strReq =
-			'SELECT distinct(post_id) '.
-			'FROM '.$this->prefix.'comment '.
-			'WHERE comment_id'.$this->con->in($co_ids);
-		
-		$rs = $this->con->select($strReq);
-		
-		while ($rs->fetch()) {
-			$affected_posts[] = (integer) $rs->post_id;
 		}
 		
@@ -2273,5 +2217,5 @@
 		
 		$this->con->execute($strReq);
-		$this->triggerComments($co_ids, true, $affected_posts);
+		$this->triggerComments($co_ids,true);
 		$this->triggerBlog();
 	}
Index: inc/core/class.dc.media.php
===================================================================
--- inc/core/class.dc.media.php	(revision 1381)
+++ inc/core/class.dc.media.php	(revision 1220)
@@ -30,5 +30,4 @@
 	
 	public $thumb_tp = '%s/.%s_%s.jpg';	///< <b>string</b> Thumbnail file pattern
-	public $thumb_tp_alpha = '%s/.%s_%s.png'; ///< <b>string</b> Thumbnail file pattern (with alpha layer)
 	
 	/**
@@ -299,7 +298,6 @@
 			$f->media_thumb = array();
 			$p = path::info($f->relname);
-			$alpha = ($p['extension'] == 'png') || ($p['extension'] == 'PNG');
-			$thumb = sprintf(($alpha ? $this->thumb_tp_alpha : $this->thumb_tp),$this->root.'/'.$p['dirname'],$p['base'],'%s');
-			$thumb_url = sprintf(($alpha ? $this->thumb_tp_alpha : $this->thumb_tp),$this->root_url.$p['dirname'],$p['base'],'%s');
+			$thumb = sprintf($this->thumb_tp,$this->root.'/'.$p['dirname'],$p['base'],'%s');
+			$thumb_url = sprintf($this->thumb_tp,$this->root_url.$p['dirname'],$p['base'],'%s');
 			
 			# Cleaner URLs
@@ -499,8 +497,7 @@
 	@param	post_id	<b>integer</b>		Post ID
 	@param	media_id	<b>integer</b>		Optionnal media ID
-	@param	return_rs	<b>boolean</b>		Whether to return a resultset (true) or an array (false, default value).
-	@return	<b>array</b> Array or ResultSet of fileItems
-	*/
-	public function getPostMedia($post_id,$media_id=null,$return_rs=false)
+	@return	<b>array</b> Array of fileItems
+	*/
+	public function getPostMedia($post_id,$media_id=null)
 	{
 		$params = array(
@@ -518,9 +515,9 @@
 			$f = $this->fileRecord($rs);
 			if ($f !== null) {
-				$res[] = $return_rs ? new ArrayObject($f) : $f;
-			}
-		}
-		
-		return $return_rs ? staticRecord::newFromArray($res) : $res;
+				$res[] = new ArrayObject($f);
+			}
+		}
+		
+		return $res;
 	}
 	
@@ -923,6 +920,5 @@
 		
 		$p = path::info($file);
-		$alpha = ($p['extension'] == 'png') || ($p['extension'] == 'PNG');
-		$thumb = sprintf(($alpha ? $this->thumb_tp_alpha : $this->thumb_tp),$p['dirname'],$p['base'],'%s');
+		$thumb = sprintf($this->thumb_tp,$p['dirname'],$p['base'],'%s');
 		
 		try
@@ -943,5 +939,5 @@
 					$rate = ($s[0] < 100 ? 95 : ($s[0] < 600 ? 90 : 85));
 					$img->resize($s[0],$s[0],$s[1]);
-					$img->output(($alpha ? 'png' : 'jpeg'),$thumb_file,$rate);
+					$img->output('jpeg',$thumb_file,$rate);
 					$img->loadImage($file);
 				}
@@ -962,10 +958,8 @@
 		{
 			$p = path::info($file->relname);
-			$alpha = ($p['extension'] == 'png') || ($p['extension'] == 'PNG');
-			$thumb_old = sprintf(($alpha ? $this->thumb_tp_alpha : $this->thumb_tp),$p['dirname'],$p['base'],'%s');
+			$thumb_old = sprintf($this->thumb_tp,$p['dirname'],$p['base'],'%s');
 			
 			$p = path::info($newFile->relname);
-			$alpha = ($p['extension'] == 'png') || ($p['extension'] == 'PNG');
-			$thumb_new = sprintf(($alpha ? $this->thumb_tp_alpha : $this->thumb_tp),$p['dirname'],$p['base'],'%s');
+			$thumb_new = sprintf($this->thumb_tp,$p['dirname'],$p['base'],'%s');
 			
 			foreach ($this->thumb_sizes as $suffix => $s) {
@@ -980,6 +974,5 @@
 	{
 		$p = path::info($f);
-		$alpha = ($p['extension'] == 'png') || ($p['extension'] == 'PNG');
-		$thumb = sprintf(($alpha ? $this->thumb_tp_alpha : $this->thumb_tp),'',$p['base'],'%s');
+		$thumb = sprintf($this->thumb_tp,'',$p['base'],'%s');
 		
 		foreach ($this->thumb_sizes as $suffix => $s) {
Index: inc/load_plugin_file.php
===================================================================
--- inc/load_plugin_file.php	(revision 1241)
+++ inc/load_plugin_file.php	(revision 1179)
@@ -86,5 +86,5 @@
 }
 
-http::$cache_max_age = (!defined('DC_CACHE_MAX_AGE') ? 604800 : DC_CACHE_MAX_AGE);
+http::$cache_max_age = 7200;
 http::cache(array_merge(array($PF),get_included_files()));
 
Index: inc/prepend.php
===================================================================
--- inc/prepend.php	(revision 1352)
+++ inc/prepend.php	(revision 1233)
@@ -123,5 +123,5 @@
 # Constants
 define('DC_ROOT',path::real(dirname(__FILE__).'/..'));
-define('DC_VERSION','2.5.3-dev');
+define('DC_VERSION','2.5.2-dev');
 define('DC_DIGESTS',dirname(__FILE__).'/digests');
 define('DC_L10N_ROOT',dirname(__FILE__).'/../locales');
Index: inc/public/class.dc.template.php
===================================================================
--- inc/public/class.dc.template.php	(revision 1249)
+++ inc/public/class.dc.template.php	(revision 1179)
@@ -67,5 +67,4 @@
 		$this->addValue('BlogLanguage',array($this,'BlogLanguage'));
 		$this->addValue('BlogThemeURL',array($this,'BlogThemeURL'));
-		$this->addValue('BlogParentThemeURL',array($this,'BlogParentThemeURL'));
 		$this->addValue('BlogUpdateDate',array($this,'BlogUpdateDate'));
 		$this->addValue('BlogID',array($this,'BlogID'));
@@ -840,5 +839,5 @@
 	
 	/*dtd
-	<!ELEMENT tpl:BlogThemeURL - O -- Blog's current Theme URL -->
+	<!ELEMENT tpl:BlogThemeURL - O -- Blog's current Themei URL -->
 	*/
 	public function BlogThemeURL($attr)
@@ -846,14 +845,4 @@
 		$f = $this->getFilters($attr);
 		return '<?php echo '.sprintf($f,'$core->blog->settings->system->themes_url."/".$core->blog->settings->system->theme').'; ?>';
-	}
-	
-	/*dtd
-	<!ELEMENT tpl:BlogParentThemeURL - O -- Blog's current Theme's parent URL -->
-	*/
-	public function BlogParentThemeURL($attr)
-	{
-		$f = $this->getFilters($attr);
-		$parent = '$core->themes->moduleInfo($core->blog->settings->system->theme,\'parent\')';
-		return '<?php echo '.sprintf($f,'$core->blog->settings->system->themes_url."/".('."$parent".' ? '."$parent".' : $core->blog->settings->system->theme)').'; ?>';
 	}
     
Index: inc/public/lib.tpl.context.php
===================================================================
--- inc/public/lib.tpl.context.php	(revision 1537)
+++ inc/public/lib.tpl.context.php	(revision 1179)
@@ -416,67 +416,62 @@
 		global $core, $_ctx;
 		
-		try {
-			$media = new dcMedia($core);
-			$sizes = implode('|',array_keys($media->thumb_sizes)).'|o';
-			if (!preg_match('/^'.$sizes.'$/',$size)) {
-				$size = 's';
-			}
-			$p_url = $core->blog->settings->system->public_url;
-			$p_site = preg_replace('#^(.+?//.+?)/(.*)$#','$1',$core->blog->url);
-			$p_root = $core->blog->public_path;
-			
-			$pattern = '(?:'.preg_quote($p_site,'/').')?'.preg_quote($p_url,'/');
-			$pattern = sprintf('/<img.+?src="%s(.*?\.(?:jpg|jpeg|gif|png))"[^>]+/msui',$pattern);
-			
-			$src = '';
-			$alt = '';
-			
-			# We first look in post content
-			if (!$cat_only && $_ctx->posts)
+		$media = new dcMedia($core);
+		$sizes = implode('|',array_keys($media->thumb_sizes)).'|o';
+		if (!preg_match('/^'.$sizes.'$/',$size)) {
+			$size = 's';
+		}
+		$p_url = $core->blog->settings->system->public_url;
+		$p_site = preg_replace('#^(.+?//.+?)/(.*)$#','$1',$core->blog->url);
+		$p_root = $core->blog->public_path;
+		
+		$pattern = '(?:'.preg_quote($p_site,'/').')?'.preg_quote($p_url,'/');
+		$pattern = sprintf('/<img.+?src="%s(.*?\.(?:jpg|jpeg|gif|png))"[^>]+/msui',$pattern);
+		
+		$src = '';
+		$alt = '';
+		
+		# We first look in post content
+		if (!$cat_only && $_ctx->posts)
+		{
+			$subject = ($content_only ? '' : $_ctx->posts->post_excerpt_xhtml).$_ctx->posts->post_content_xhtml;
+			if (preg_match_all($pattern,$subject,$m) > 0)
 			{
-				$subject = ($content_only ? '' : $_ctx->posts->post_excerpt_xhtml).$_ctx->posts->post_content_xhtml;
-				if (preg_match_all($pattern,$subject,$m) > 0)
-				{
-					foreach ($m[1] as $i => $img) {
-						if (($src = self::ContentFirstImageLookup($p_root,$img,$size)) !== false) {
-							$dirname = str_replace('\\', '/', dirname($img)); 
-							$src = $p_url.($dirname != '/' ? $dirname : '').'/'.$src;
-							if (preg_match('/alt="([^"]+)"/',$m[0][$i],$malt)) {
-								$alt = $malt[1];
-							}
-							break;
+				foreach ($m[1] as $i => $img) {
+					if (($src = self::ContentFirstImageLookup($p_root,$img,$size)) !== false) {
+						$dirname = str_replace('\\', '/', dirname($img)); 
+						$src = $p_url.($dirname != '/' ? $dirname : '').'/'.$src;
+						if (preg_match('/alt="([^"]+)"/',$m[0][$i],$malt)) {
+							$alt = $malt[1];
 						}
+						break;
 					}
 				}
 			}
-			
-			# No src, look in category description if available
-	        if (!$src && $with_category && $_ctx->posts->cat_desc)
-	        {
-				if (preg_match_all($pattern,$_ctx->posts->cat_desc,$m) > 0)
-				{
-					foreach ($m[1] as $i => $img) {
-						if (($src = self::ContentFirstImageLookup($p_root,$img,$size)) !== false) {
-							$dirname = str_replace('\\', '/', dirname($img)); 
-							$src = $p_url.($dirname != '/' ? $dirname : '').'/'.$src;
-							if (preg_match('/alt="([^"]+)"/',$m[0][$i],$malt)) {
-								$alt = $malt[1];
-							}
-							break;
+		}
+		
+		# No src, look in category description if available
+        if (!$src && $with_category && $_ctx->posts->cat_desc)
+        {
+			if (preg_match_all($pattern,$_ctx->posts->cat_desc,$m) > 0)
+			{
+				foreach ($m[1] as $i => $img) {
+					if (($src = self::ContentFirstImageLookup($p_root,$img,$size)) !== false) {
+						$dirname = str_replace('\\', '/', dirname($img)); 
+						$src = $p_url.($dirname != '/' ? $dirname : '').'/'.$src;
+						if (preg_match('/alt="([^"]+)"/',$m[0][$i],$malt)) {
+							$alt = $malt[1];
 						}
+						break;
 					}
-				};
-			}
-			
-			if ($src) {
-				if ($no_tag) {
-					return $src;
-				} else {
-					return '<img alt="'.$alt.'" src="'.$src.'" class="'.$class.'" />';
 				}
-			}
-			
-		} catch (Exception $e) {
-			$core->error->add($e->getMessage());
+			};
+		}
+		
+		if ($src) {
+			if ($no_tag) {
+				return $src;
+			} else {
+				return '<img alt="'.$alt.'" src="'.$src.'" class="'.$class.'" />';
+			}
 		}
 	}
@@ -490,41 +485,37 @@
 		$base = $info['base'];
 		
-		try {
-			$media = new dcMedia($core);
-			$sizes = implode('|',array_keys($media->thumb_sizes));
-			if (preg_match('/^\.(.+)_('.$sizes.')$/',$base,$m)) {
-				$base = $m[1];
-			}
-			
-			$res = false;
-			if ($size != 'o' && file_exists($root.'/'.$info['dirname'].'/.'.$base.'_'.$size.'.jpg'))
-			{
-				$res = '.'.$base.'_'.$size.'.jpg';
-			}
-			else
-			{
-				$f = $root.'/'.$info['dirname'].'/'.$base;
-				if (file_exists($f.'.'.$info['extension'])) {
-					$res = $base.'.'.$info['extension'];
-				} elseif (file_exists($f.'.jpg')) {
-					$res = $base.'.jpg';
-				} elseif (file_exists($f.'.jpeg')) {
-					$res = $base.'.jpeg';
-				} elseif (file_exists($f.'.png')) {
-					$res = $base.'.png';
-				} elseif (file_exists($f.'.gif')) {
-					$res = $base.'.gif';
-				} elseif (file_exists($f.'.JPG')) {
-					$res = $base.'.JPG';
-				} elseif (file_exists($f.'.JPEG')) {
-					$res = $base.'.JPEG';
-				} elseif (file_exists($f.'.PNG')) {
-					$res = $base.'.PNG';
-				} elseif (file_exists($f.'.GIF')) {
-					$res = $base.'.GIF';
-				}
-			}
-		} catch (Exception $e) {
-			$core->error->add($e->getMessage());
+		$media = new dcMedia($core);
+		$sizes = implode('|',array_keys($media->thumb_sizes));
+		if (preg_match('/^\.(.+)_('.$sizes.')$/',$base,$m)) {
+			$base = $m[1];
+		}
+		
+		$res = false;
+		if ($size != 'o' && file_exists($root.'/'.$info['dirname'].'/.'.$base.'_'.$size.'.jpg'))
+		{
+			$res = '.'.$base.'_'.$size.'.jpg';
+		}
+		else
+		{
+			$f = $root.'/'.$info['dirname'].'/'.$base;
+			if (file_exists($f.'.'.$info['extension'])) {
+				$res = $base.'.'.$info['extension'];
+			} elseif (file_exists($f.'.jpg')) {
+				$res = $base.'.jpg';
+			} elseif (file_exists($f.'.jpeg')) {
+				$res = $base.'.jpeg';
+			} elseif (file_exists($f.'.png')) {
+				$res = $base.'.png';
+			} elseif (file_exists($f.'.gif')) {
+				$res = $base.'.gif';
+			} elseif (file_exists($f.'.JPG')) {
+				$res = $base.'.JPG';
+			} elseif (file_exists($f.'.JPEG')) {
+				$res = $base.'.JPEG';
+			} elseif (file_exists($f.'.PNG')) {
+				$res = $base.'.PNG';
+			} elseif (file_exists($f.'.GIF')) {
+				$res = $base.'.GIF';
+			}
 		}
 		
Index: locales/bn/help/blowupConfig.html
===================================================================
--- locales/bn/help/blowupConfig.html	(revision 1264)
+++ locales/bn/help/blowupConfig.html	(revision 0)
@@ -35,5 +35,5 @@
 <p>You can choose a header image among the list to use in place of the default one.</p>
 
-<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong></p>
+<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong>
 
 <p>If you upload a JPG image, a border will be added to the image, which is not the case with PNG images (the transparency of which will also be kept).</p>
Index: locales/ca/help/blowupConfig.html
===================================================================
--- locales/ca/help/blowupConfig.html	(revision 1264)
+++ locales/ca/help/blowupConfig.html	(revision 0)
@@ -35,5 +35,5 @@
 <p>You can choose a header image among the list to use in place of the default one.</p>
 
-<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong></p>
+<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong>
 
 <p>If you upload a JPG image, a border will be added to the image, which is not the case with PNG images (the transparency of which will also be kept).</p>
Index: locales/cs/help/blowupConfig.html
===================================================================
--- locales/cs/help/blowupConfig.html	(revision 1264)
+++ locales/cs/help/blowupConfig.html	(revision 0)
@@ -35,5 +35,5 @@
 <p>You can choose a header image among the list to use in place of the default one.</p>
 
-<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong></p>
+<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong>
 
 <p>If you upload a JPG image, a border will be added to the image, which is not the case with PNG images (the transparency of which will also be kept).</p>
Index: locales/da/help/blowupConfig.html
===================================================================
--- locales/da/help/blowupConfig.html	(revision 1264)
+++ locales/da/help/blowupConfig.html	(revision 0)
@@ -35,5 +35,5 @@
 <p>You can choose a header image among the list to use in place of the default one.</p>
 
-<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong></p>
+<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong>
 
 <p>If you upload a JPG image, a border will be added to the image, which is not the case with PNG images (the transparency of which will also be kept).</p>
Index: locales/de/help/blowupConfig.html
===================================================================
--- locales/de/help/blowupConfig.html	(revision 1264)
+++ locales/de/help/blowupConfig.html	(revision 175)
@@ -35,5 +35,5 @@
 <p>Du kannst ein Bild Deiner Wahl statt des Standardbildes einsetzen.</p>
 
-<p>Wenn Du  "Benutzerdefiniert..." in der Bilderliste ausw&auml;hlst, dann hast Du die M&ouml;glichkeit, Dein eigenes Bild upzuloaden. <strong>Das Dateiformat muss entweder JPG der PNG sein und es muss 800px breit sein.</strong></p>
+<p>Wenn Du  "Benutzerdefiniert..." in der Bilderliste ausw&auml;hlst, dann hast Du die M&ouml;glichkeit, Dein eigenes Bild upzuloaden. <strong>Das Dateiformat muss entweder JPG der PNG sein und es muss 800px breit sein.</strong>
 
 <p>Wenn Du ein JPG-Bild uploadest, dann wird automatisch ein Rahmen um das Bild gesetzt. Dies geschieht nicht bei der Verwendung eines PNG-Bildes und die Transparenz wird ebenfalls beibehalten.</p>
Index: locales/en/help/user_pref.html
===================================================================
--- locales/en/help/user_pref.html	(revision 1487)
+++ locales/en/help/user_pref.html	(revision 243)
@@ -8,5 +8,5 @@
 <h3>My profile</h3>
 <dl>
-  <dt>Last name, First name</dt>
+  <dt>Name, First name</dt>
   <dd>If the display name is empty, the author's name will be displayed
   as his Firstname and Name as set here.</dd>
@@ -37,5 +37,5 @@
 <dl>  
   <dt>Preferred format</dt>
-  <dd>To choose the preferred post syntax. Wiki is a simplified syntax
+  <dd>To choose the prefered post syntax. Wiki is a simplified syntax
   and will be converted to valid xhtml&nbsp;; Unless you have a perfect
   understanding of html, we advise you to choose the wiki syntax.</dd>
@@ -59,5 +59,6 @@
   
   <dt>Activate enhanced uploader in media manager</dt>
-  <dd>This option allows you to upload several files at the same time on your server.</dd>
+  <dd>This option allows you to upload several files at the same time on your server.
+  Needs the presence of Flash plugin in your browser.</dd>
   
   <dt>Dashboard modules</dt>
Index: locales/en/main.po
===================================================================
--- locales/en/main.po	(revision 1479)
+++ locales/en/main.po	(revision 1039)
@@ -1917,7 +1917,4 @@
 msgstr ""
 
-msgid "If this problem persists try to <a href="http://dotclear.org/download">update manually</a>."
-msgstr ""
-
 msgid "The following files of your Dotclear installation have been modified so we won't try to update your installation. Please try to <a href=\"http://dotclear.org/download\">update manually</a>."
 msgstr ""
@@ -2142,7 +2139,4 @@
 msgstr ""
 
-msgid "Are you sure you want to delete this backup?"
-msgstr ""
-
 msgid "Zip file content"
 msgstr ""
@@ -2160,7 +2154,4 @@
 msgstr ""
 
-msgid "Warning: post format change will not convert existing content. You will need to apply new format by yourself. Proceed anyway?"
-msgstr ""
-
 msgid "Loading enhanced uploader, please wait."
 msgstr ""
@@ -2796,5 +2787,2 @@
 msgid "The following error was encountered while trying to read the database:"
 msgstr ""
-
-msgid "(No cat)"
-msgstr "(none)"
Index: locales/eo/help/blowupConfig.html
===================================================================
--- locales/eo/help/blowupConfig.html	(revision 1264)
+++ locales/eo/help/blowupConfig.html	(revision 0)
@@ -35,5 +35,5 @@
 <p>You can choose a header image among the list to use in place of the default one.</p>
 
-<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong></p>
+<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong>
 
 <p>If you upload a JPG image, a border will be added to the image, which is not the case with PNG images (the transparency of which will also be kept).</p>
Index: locales/es-ar/help/blowupConfig.html
===================================================================
--- locales/es-ar/help/blowupConfig.html	(revision 1264)
+++ locales/es-ar/help/blowupConfig.html	(revision 0)
@@ -35,5 +35,5 @@
 <p>You can choose a header image among the list to use in place of the default one.</p>
 
-<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong></p>
+<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong>
 
 <p>If you upload a JPG image, a border will be added to the image, which is not the case with PNG images (the transparency of which will also be kept).</p>
Index: locales/es/help/blowupConfig.html
===================================================================
--- locales/es/help/blowupConfig.html	(revision 1264)
+++ locales/es/help/blowupConfig.html	(revision 0)
@@ -35,5 +35,5 @@
 <p>You can choose a header image among the list to use in place of the default one.</p>
 
-<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong></p>
+<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong>
 
 <p>If you upload a JPG image, a border will be added to the image, which is not the case with PNG images (the transparency of which will also be kept).</p>
Index: locales/eu/help/blowupConfig.html
===================================================================
--- locales/eu/help/blowupConfig.html	(revision 1264)
+++ locales/eu/help/blowupConfig.html	(revision 0)
@@ -35,5 +35,5 @@
 <p>You can choose a header image among the list to use in place of the default one.</p>
 
-<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong></p>
+<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong>
 
 <p>If you upload a JPG image, a border will be added to the image, which is not the case with PNG images (the transparency of which will also be kept).</p>
Index: locales/fr/help/blowupConfig.html
===================================================================
--- locales/fr/help/blowupConfig.html	(revision 1264)
+++ locales/fr/help/blowupConfig.html	(revision 0)
@@ -44,5 +44,5 @@
 <p>En choisissant "Personnalisé..." parmi la liste d'images, vous pourrez
 déposer votre propre image. <strong>Celle-ci doit être au format JPG ou PNG et
-avoir une largeur exacte de 800 pixels.</strong></p>
+avoir une largeur exacte de 800 pixels.</strong>
 
 <p>Si vous déposez une image au format JPG, un cadre sera ajouté autours de
Index: locales/fr/main.po
===================================================================
--- locales/fr/main.po	(revision 1488)
+++ locales/fr/main.po	(revision 1233)
@@ -1038,5 +1038,5 @@
 #, fuzzy, php-format
 msgid "Path <strong>%s</strong> is not writable."
-msgstr "Le répertoire <strong>%s</strong> n'est pas accessible en écriture."
+msgstr "Le répertoire de cache %s n'est pas accessible en écriture."
 
 #, fuzzy
@@ -1123,5 +1123,5 @@
 #, php-format
 msgid "You can change your user language in your <a href=\"%1$s\">preferences</a> or change your blog's main language in your <a href=\"%2$s\">blog settings</a>."
-msgstr "Vous pouvez changer votre langue d'utilisateur dans vos <a href=\"%1$s\">préférences</a> ou changer la langue principale de votre blog dans vos <a href=\"%2$s\">paramètres du blog</a>."
+msgstr "Vous pouvez changer votre langue d'utilisateur dans vos <a href=\"%1$s\">préférences</a> ou changer la langue principale de votre blog dans vos <a href=\"%2$s\">paramètres de blog</a>."
 
 msgid "Installed languages"
@@ -1578,7 +1578,4 @@
 msgid "Edit entry"
 msgstr "Modifier le billet"
-
-msgid "Edit entry &ldquo;%s&rdquo;"
-msgstr "Modifier le billet &ldquo;%s&rdquo;"
 
 msgid "next entry"
@@ -1990,7 +1987,4 @@
 msgstr "L'archive de Dotclear téléchargée semble être corrompue. Essayer de la <a %s>télécharger</a> à nouveau."
 
-msgid "If this problem persists try to <a href="http://dotclear.org/download">update manually</a>."
-msgstr "Si le problème persiste essayer de <a href="http://dotclear.org/download">mettre à jour manuellement</a>."
-
 msgid "The following files of your Dotclear installation have been modified so we won't try to update your installation. Please try to <a href=\"http://dotclear.org/download\">update manually</a>."
 msgstr "Comme les fichiers suivants de votre installation de Dotclear ont été modifiés, votre installation ne peut être mise à jour. Merci de <a href=\"http://fr.dotclear.org/download\">mettre à jour manuellement</a>."
@@ -2148,9 +2142,9 @@
 #, fuzzy
 msgid "Go to the content"
-msgstr "Aller au contenu"
+msgstr "Voir ce billet sur le site"
 
 #, fuzzy
 msgid "Go to the menu"
-msgstr "Aller au menu"
+msgstr "Aller sur le site"
 
 msgid "Go to site"
@@ -2213,5 +2207,5 @@
 
 msgid "Users with posts cannot be deleted."
-msgstr "Les utilisateurs ayant écrit des billets ne peuvent être supprimés."
+msgstr "Les utilisateurs ayant écrit des billets ne peuvent être effacées."
 
 #, php-format
@@ -2255,7 +2249,4 @@
 msgstr "Êtes-vous certain de vouloir supprimer le thème \"%s\" ?"
 
-msgid "Are you sure you want to delete this backup?"
-msgstr "Êtes-vous certain de vouloir supprimer cette sauvegarde ?"
-
 msgid "Zip file content"
 msgstr "Contenu du fichier zip"
@@ -2273,7 +2264,4 @@
 msgstr "Vous avez des modifications non sauvegardées. Changer de format vous fera perdre ces modifications. Continuer ?"
 
-msgid "Warning: post format change will not convert existing content. You will need to apply new format by yourself. Proceed anyway?"
-msgstr "Attention : le changement de syntaxe ne transformera pas les balises des contenus déjà saisis. Pensez à les réadapter après cette opération. Confirmez-vous ce changement de syntaxe ?"
-
 msgid "Loading enhanced uploader, please wait."
 msgstr "Chargement de l'interface avancée."
@@ -2524,5 +2512,5 @@
 #, fuzzy
 msgid "You are not allowed to reset categories order"
-msgstr "Vous n'êtes pas autorisé à réinitialiser l'ordre des catégories"
+msgstr "Vous n'êtes pas autorisé à supprimer des catégories"
 
 msgid "Category URL must be unique."
@@ -2946,26 +2934,2 @@
 msgid "Invalid publication date"
 msgstr "Date de publication invalide"
-
-msgid "(No cat)"
-msgstr "(aucune)"
-
-msgid "Password strength: %s"
-msgstr "Force du mot de passe : %s"
-
-msgid "very weak"
-msgstr "très faible"
-
-msgid "weak"
-msgstr "faible"
-
-msgid "mediocre"
-msgstr "moyen"
-
-msgid "strong"
-msgstr "fort"
-
-msgid "very strong"
-msgstr "très fort"
-
-msgid "This category will be created when you will save your post."
-msgstr "Cette catégorie sera créée lorsque vous enregistrerez votre billet."
Index: locales/fr/plugins.po
===================================================================
--- locales/fr/plugins.po	(revision 1445)
+++ locales/fr/plugins.po	(revision 1226)
@@ -1017,8 +1017,8 @@
 "différente. Vous pouvez assigner plusieurs catégories à un seul poste dans "
 "WordPress. Dans le monde Dotclear, nous le voyons davantage comme « une "
-"catégorie, plusieurs mots-clés ». Par conséquent Dotclear peut seulement "
+"catégorie, plusieurs mot-clés ». Par conséquent Dotclear peut seulement "
 "importer une catégorie par billet et il choisira celui de plus petit numéro. "
 "Si vous voulez conserver une trace de chaque catégorie, vous pouvez les "
-"importer sous forme de mots-clés, avec un préfixe optionnel."
+"importer sous forme de mot-clés, avec un préfixe optionnel."
 
 msgid ""
@@ -1031,5 +1031,5 @@
 "D'autre part, dans WordPress, un billet ne peut pas être sans catégorie, et "
 "une installation par défaut possède systématiquement une première catégorie "
-"nommée <i>« sans catégorie »</i>. Si vous n'avez pas changé cette "
+"nommée <i>« sans catégorie »</ i>. Si vous n'avez pas changé cette "
 "catégorie, vous pouvez simplement l'ignorer lors de l'importation sur votre "
 "blog, puisque Dotclear vous permet réellement de conserver votre message "
@@ -1043,8 +1043,8 @@
 
 msgid "Import all categories as tags:"
-msgstr "Importer toutes les catégories comme des mots-clés :"
+msgstr "Importer toutes les catégories comme des mot-clés :"
 
 msgid "Prefix such tags with:"
-msgstr "Préfixer les mots-clés avec :"
+msgstr "Préfixer les mot-clés avec :"
 
 msgid "Content filters"
@@ -1166,10 +1166,4 @@
 msgstr "Pages"
 
-msgid "My first page"
-msgstr "Ma première page"
-
-msgid "This is your first page. When you\'re ready to blog, log in to edit or delete it."
-msgstr "Ceci est votre première page. Quand vous serez prêt à bloguer, connectez-vous pour l'éditer ou la supprimer."
-
 #, php-format
 msgid "%d page"
@@ -1331,5 +1325,5 @@
 
 msgid "All tags"
-msgstr "Tous les mots-clés"
+msgstr "Tous les mot-clés"
 
 msgid "Home"
@@ -1343,5 +1337,5 @@
 
 msgid "Tags"
-msgstr "Mots-clés"
+msgstr "Mot-clés"
 
 msgid "User defined"
@@ -1451,5 +1445,5 @@
 
 msgid "Tags:"
-msgstr "Mots-clés :"
+msgstr "Mot-clés :"
 
 #, php-format
@@ -1480,20 +1474,20 @@
 
 msgid "Enter tags separated by coma"
-msgstr "Entrez les mots-clés séparés par des virgules"
+msgstr "Entrez les mot-clés séparés par des virgules"
 
 msgid "Add tags"
-msgstr "Ajouter des mots-clés"
+msgstr "Ajouter des mot-clés"
 
 msgid "Remove tags"
-msgstr "Retirer des mots-clés"
+msgstr "Retirer des mot-clés"
 
 msgid "Add tags to entries"
-msgstr "Ajouter des mots-clés à des billets"
+msgstr "Ajouter des mot-clés à des billets"
 
 msgid "Tags to add:"
-msgstr "Mots-clés à ajouter :"
+msgstr "Mot-clés à ajouter :"
 
 msgid "Remove selected tags from entries"
-msgstr "Retirer les mots-clés sélectionnés des billets"
+msgstr "Retirer les mot-clés sélectionnés des billets"
 
 msgid "No tags for selected entries"
@@ -1501,5 +1495,5 @@
 
 msgid "Following tags have been found in selected entries:"
-msgstr "Les mots-clés suivants ont été trouvés pour les billets sélectionnés :"
+msgstr "Les mot-clés suivants ont été trouvés pour les billets sélectionnés :"
 
 msgid "short"
@@ -1510,5 +1504,5 @@
 
 msgid "Tags list format:"
-msgstr "Format de la liste des mots-clés :"
+msgstr "Format de la liste des mot-clés :"
 
 msgid "Tags for posts"
@@ -1531,5 +1525,5 @@
 
 msgid "Link to all tags:"
-msgstr "Lien vers tous les mots-clés :"
+msgstr "Lien vers tous les mot-clés :"
 
 msgid "Edit tag"
@@ -1540,5 +1534,5 @@
 
 msgid "Back to tags list"
-msgstr "Retour à la liste des mots-clés"
+msgstr "Retour à la liste des mot-clés"
 
 msgid "Actions for this tag"
Index: locales/hu/help/blowupConfig.html
===================================================================
--- locales/hu/help/blowupConfig.html	(revision 1264)
+++ locales/hu/help/blowupConfig.html	(revision 0)
@@ -35,5 +35,5 @@
 <p>You can choose a header image among the list to use in place of the default one.</p>
 
-<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong></p>
+<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong>
 
 <p>If you upload a JPG image, a border will be added to the image, which is not the case with PNG images (the transparency of which will also be kept).</p>
Index: locales/it/help/blowupConfig.html
===================================================================
--- locales/it/help/blowupConfig.html	(revision 1264)
+++ locales/it/help/blowupConfig.html	(revision 0)
@@ -35,5 +35,5 @@
 <p>You can choose a header image among the list to use in place of the default one.</p>
 
-<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong></p>
+<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong>
 
 <p>If you upload a JPG image, a border will be added to the image, which is not the case with PNG images (the transparency of which will also be kept).</p>
Index: locales/ja/help/blowupConfig.html
===================================================================
--- locales/ja/help/blowupConfig.html	(revision 1264)
+++ locales/ja/help/blowupConfig.html	(revision 0)
@@ -35,5 +35,5 @@
 <p>デフォルトで指定されているものの代わりに、リストからヘッダ画像を選ぶことができます。</p>
 
-<p>画像リストで「カスタム...」を選んだ場合、独自の画像をアップロードすることができます。 <strong>画像ファイルは JPG または PNG フォーマットで、横幅が正確に800ピクセルである必要があります。</strong></p>
+<p>画像リストで「カスタム...」を選んだ場合、独自の画像をアップロードすることができます。 <strong>画像ファイルは JPG または PNG フォーマットで、横幅が正確に800ピクセルである必要があります。</strong>
 
 <p>JPG画像がアップロードされた場合、画像に境界線が付加されます。 PNG画像の場合には付加されず、透過性も維持されます。</p>
Index: locales/ko/help/blowupConfig.html
===================================================================
--- locales/ko/help/blowupConfig.html	(revision 1264)
+++ locales/ko/help/blowupConfig.html	(revision 0)
@@ -34,5 +34,5 @@
 <p>기본이미지 대신, 목록에 있는 머리글 이미지를 쓰실 수 있습니다.</p>
 
-<p>이미지 목록에서 "개성에 맞게..."를 선택하시면, 당신 자신이 보유한 이미지를 올릴 수 있습니다. <strong>이미지 파일은 JPG나 PNG 포맷이어야하고 폭은 정확히 800px 이어야 합니다.</strong></p>
+<p>이미지 목록에서 "개성에 맞게..."를 선택하시면, 당신 자신이 보유한 이미지를 올릴 수 있습니다. <strong>이미지 파일은 JPG나 PNG 포맷이어야하고 폭은 정확히 800px 이어야 합니다.</strong>
 
 <p>JPG 이미지를 올리실 때는, 윤곽선이 추가됩니다. PNG 이미지의 경우는 해당되지 않습니다. (PNG 이미지의 투명도도 또한 유지됩니다.)</p>
Index: locales/lt/help/blowupConfig.html
===================================================================
--- locales/lt/help/blowupConfig.html	(revision 1264)
+++ locales/lt/help/blowupConfig.html	(revision 813)
@@ -35,5 +35,5 @@
 <p>Du kannst ein Bild Deiner Wahl statt des Standardbildes einsetzen.</p>
 
-<p>Wenn Du  "Benutzerdefiniert..." in der Bilderliste ausw&auml;hlst, dann hast Du die M&ouml;glichkeit, Dein eigenes Bild upzuloaden. <strong>Das Dateiformat muss entweder JPG der PNG sein und es muss 800px breit sein.</strong></p>
+<p>Wenn Du  "Benutzerdefiniert..." in der Bilderliste ausw&auml;hlst, dann hast Du die M&ouml;glichkeit, Dein eigenes Bild upzuloaden. <strong>Das Dateiformat muss entweder JPG der PNG sein und es muss 800px breit sein.</strong>
 
 <p>Wenn Du ein JPG-Bild uploadest, dann wird automatisch ein Rahmen um das Bild gesetzt. Dies geschieht nicht bei der Verwendung eines PNG-Bildes und die Transparenz wird ebenfalls beibehalten.</p>
Index: locales/nl/help/blowupConfig.html
===================================================================
--- locales/nl/help/blowupConfig.html	(revision 1264)
+++ locales/nl/help/blowupConfig.html	(revision 0)
@@ -35,5 +35,5 @@
 <p>You can choose a header image among the list to use in place of the default one.</p>
 
-<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong></p>
+<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong>
 
 <p>If you upload a JPG image, a border will be added to the image, which is not the case with PNG images (the transparency of which will also be kept).</p>
Index: locales/oc/help/blowupConfig.html
===================================================================
--- locales/oc/help/blowupConfig.html	(revision 1264)
+++ locales/oc/help/blowupConfig.html	(revision 0)
@@ -35,5 +35,5 @@
 <p>You can choose a header image among the list to use in place of the default one.</p>
 
-<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong></p>
+<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong>
 
 <p>If you upload a JPG image, a border will be added to the image, which is not the case with PNG images (the transparency of which will also be kept).</p>
Index: locales/pl/help/blowupConfig.html
===================================================================
--- locales/pl/help/blowupConfig.html	(revision 1264)
+++ locales/pl/help/blowupConfig.html	(revision 0)
@@ -35,5 +35,5 @@
 <p>You can choose a header image among the list to use in place of the default one.</p>
 
-<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong></p>
+<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong>
 
 <p>If you upload a JPG image, a border will be added to the image, which is not the case with PNG images (the transparency of which will also be kept).</p>
Index: locales/pt-br/help/blowupConfig.html
===================================================================
--- locales/pt-br/help/blowupConfig.html	(revision 1264)
+++ locales/pt-br/help/blowupConfig.html	(revision 0)
@@ -35,5 +35,5 @@
 <p>You can choose a header image among the list to use in place of the default one.</p>
 
-<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong></p>
+<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong>
 
 <p>If you upload a JPG image, a border will be added to the image, which is not the case with PNG images (the transparency of which will also be kept).</p>
Index: locales/pt/help/blowupConfig.html
===================================================================
--- locales/pt/help/blowupConfig.html	(revision 1264)
+++ locales/pt/help/blowupConfig.html	(revision 0)
@@ -51,5 +51,5 @@
 <br />
 
-<em>NOTA: Uma bordura aparecera a volta da imagem o formato JPG, isto não acontece com as imagem em PNG -é a transparência dos PNGs fica efectiva-</em></p>
+<em>NOTA: Uma bordura aparecera a volta da imagem o formato JPG, isto não acontece com as imagem em PNG -é a transparência dos PNGs fica efectiva-</em>
 
 <h4>Estilos pré-definidos</h4>
Index: locales/ro/help/blowupConfig.html
===================================================================
--- locales/ro/help/blowupConfig.html	(revision 1264)
+++ locales/ro/help/blowupConfig.html	(revision 0)
@@ -35,5 +35,5 @@
 <p>You can choose a header image among the list to use in place of the default one.</p>
 
-<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong></p>
+<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong>
 
 <p>If you upload a JPG image, a border will be added to the image, which is not the case with PNG images (the transparency of which will also be kept).</p>
Index: locales/sr/help/blowupConfig.html
===================================================================
--- locales/sr/help/blowupConfig.html	(revision 1264)
+++ locales/sr/help/blowupConfig.html	(revision 0)
@@ -35,5 +35,5 @@
 <p>You can choose a header image among the list to use in place of the default one.</p>
 
-<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong></p>
+<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong>
 
 <p>If you upload a JPG image, a border will be added to the image, which is not the case with PNG images (the transparency of which will also be kept).</p>
Index: locales/sv/help/blowupConfig.html
===================================================================
--- locales/sv/help/blowupConfig.html	(revision 1264)
+++ locales/sv/help/blowupConfig.html	(revision 0)
@@ -35,5 +35,5 @@
 <p>You can choose a header image among the list to use in place of the default one.</p>
 
-<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong></p>
+<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong>
 
 <p>If you upload a JPG image, a border will be added to the image, which is not the case with PNG images (the transparency of which will also be kept).</p>
Index: locales/te/help/blowupConfig.html
===================================================================
--- locales/te/help/blowupConfig.html	(revision 1264)
+++ locales/te/help/blowupConfig.html	(revision 0)
@@ -35,5 +35,5 @@
 <p>You can choose a header image among the list to use in place of the default one.</p>
 
-<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong></p>
+<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong>
 
 <p>If you upload a JPG image, a border will be added to the image, which is not the case with PNG images (the transparency of which will also be kept).</p>
Index: locales/tr/help/blowupConfig.html
===================================================================
--- locales/tr/help/blowupConfig.html	(revision 1264)
+++ locales/tr/help/blowupConfig.html	(revision 0)
@@ -35,5 +35,5 @@
 <p>You can choose a header image among the list to use in place of the default one.</p>
 
-<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong></p>
+<p>When you choose "Custom..." in the image list, you will be able to upload your own image. <strong>The image file must be in JPG or PNG format and must be precisely 800px wide.</strong>
 
 <p>If you upload a JPG image, a border will be added to the image, which is not the case with PNG images (the transparency of which will also be kept).</p>
Index: locales/zh-cn/help/blowupConfig.html
===================================================================
--- locales/zh-cn/help/blowupConfig.html	(revision 1264)
+++ locales/zh-cn/help/blowupConfig.html	(revision 253)
@@ -35,5 +35,5 @@
 <p>您可以从列表中选择一个头部图片来取代默认的。</p>
 
-<p>当您在图片列表中选择“定制...”，您将可以上传自己的图片。<strong>图片必须是 JPG 或者 PNG 格式并且必须精确等于 800 像素宽。</strong></p>
+<p>当您在图片列表中选择“定制...”，您将可以上传自己的图片。<strong>图片必须是 JPG 或者 PNG 格式并且必须精确等于 800 像素宽。</strong>
 
 <p>如果您上传一个 JPG 图片，一个边框将会被添加。而 PNG 图片不会如此(透明特性也会被保留)。</p>
Index: plugins/aboutConfig/index.php
===================================================================
--- plugins/aboutConfig/index.php	(revision 1274)
+++ plugins/aboutConfig/index.php	(revision 1179)
@@ -86,5 +86,5 @@
 	return
 	'<tr>'.
-	'<td scope="row"><label for="s_'.$id.'">'.sprintf($slabel,html::escapeHTML($id)).'</label></td>'.
+	'<td scope="raw"><label for="s_'.$id.'">'.sprintf($slabel,html::escapeHTML($id)).'</label></td>'.
 	'<td>'.$field.'</td>'.
 	'<td>'.$s['type'].'</td>'.
Index: plugins/antispam/filters/class.dc.filter.iplookup.php
===================================================================
--- plugins/antispam/filters/class.dc.filter.iplookup.php	(revision 1361)
+++ plugins/antispam/filters/class.dc.filter.iplookup.php	(revision 1179)
@@ -44,13 +44,19 @@
 		}
 
+		$match = array();
+
 		$bls = $this->getServers();
 		$bls = preg_split('/\s*,\s*/',$bls);
 
-		foreach ($bls as $bl) {
+		foreach ($bls as $bl)
+		{
 			if ($this->dnsblLookup($ip,$bl)) {
-				// Pass by reference $status to contain matching DNSBL
-				$status = $bl;
-				return true;
+				$match[] = $bl;
 			}
+		}
+
+		if (!empty($match)) {
+			$status = substr(implode(', ',$match),0,128);
+			return true;
 		}
 	}
Index: plugins/antispam/filters/class.dc.filter.linkslookup.php
===================================================================
--- plugins/antispam/filters/class.dc.filter.linkslookup.php	(revision 1366)
+++ plugins/antispam/filters/class.dc.filter.linkslookup.php	(revision 1179)
@@ -64,8 +64,18 @@
 	private function getLinks($text)
 	{
-		// href attribute on "a" tags is second match
-		preg_match_all('|<a.*?href="(http.*?)"|', $text, $parts);
-
-		return $parts[1];
+		$res = array();
+		
+		# href attribute on "a" tags
+		if (preg_match_all('/<a ([^>]+)>/ms', $text, $match, PREG_SET_ORDER))
+		{
+			for ($i = 0; $i<count($match); $i++)
+			{
+				if (preg_match('/href="(http:\/\/[^"]+)"/ms', $match[$i][1], $matches)) {
+					$res[] = $matches[1];
+				}
+			}
+		}
+		
+		return $res;
 	}
 }
Index: plugins/antispam/inc/lib.dc.antispam.php
===================================================================
--- plugins/antispam/inc/lib.dc.antispam.php	(revision 1478)
+++ plugins/antispam/inc/lib.dc.antispam.php	(revision 1179)
@@ -75,5 +75,5 @@
 		if (($count = self::countSpam($core)) > 0) {
 			$str = ($count > 1) ? __('(including %d spam comments)') : __('(including %d spam comment)');
-			$icons['comments'][0] .= '</span></a> <br /><a href="comments.php?status=-2"><span>'.sprintf($str,$count);
+			$icons['comments'][0] .= '</a> <br /><a href="comments.php?status=-2"><span>'.sprintf($str,$count).'</span>';
 		}
 	}
@@ -83,5 +83,5 @@
 		if (($count = self::countSpam($core)) > 0) {
 			$str = ($count > 1) ? __('(including %d spam comments)') : __('(including %d spam comment)');
-			return '</span></a> <br /><a href="comments.php?status=-2"><span>'.sprintf($str,$count);
+			return '</a> <br /><a href="comments.php?status=-2"><span>'.sprintf($str,$count).'</span>';
 		} else {
 			return '';
Index: plugins/antispam/index.php
===================================================================
--- plugins/antispam/index.php	(revision 1274)
+++ plugins/antispam/index.php	(revision 1207)
@@ -204,5 +204,5 @@
 		'<td class="nowrap">'.form::checkbox(array('filters_active[]'),$fid,$f->active, '', '', false, 'title="'.__('Active').'"').'</td>'.
 		'<td class="nowrap">'.form::checkbox(array('filters_auto_del[]'),$fid,$f->auto_delete, '', '', false, 'title="'.__('Auto Del.').'"').'</td>'.
-		'<td class="nowrap" scope="row">'.$f->name.'</td>'.
+		'<td class="nowrap" scope="raw">'.$f->name.'</td>'.
 		'<td class="maximal">'.$f->description.'</td>'.
 		'<td class="status">'.$gui_link.'</td>'.
Index: plugins/attachments/_admin.php
===================================================================
--- plugins/attachments/_admin.php	(revision 1537)
+++ plugins/attachments/_admin.php	(revision 1179)
@@ -22,35 +22,33 @@
 		{
 			$core =& $GLOBALS['core'];
-			if ( isset($core->media) ) {
-				$post_media = $core->media->getPostMedia($post->post_id);
+			$post_media = $core->media->getPostMedia($post->post_id);
+			echo
+			'<h3 class="clear">'.__('Attachments').'</h3>';
+			foreach ($post_media as $f)
+			{
+				$ftitle = $f->media_title;
+				if (strlen($ftitle) > 18) {
+					$ftitle = substr($ftitle,0,16).'...';
+				}
 				echo
-				'<h3 class="clear">'.__('Attachments').'</h3>';
-				foreach ($post_media as $f)
-				{
-					$ftitle = $f->media_title;
-					if (strlen($ftitle) > 18) {
-						$ftitle = substr($ftitle,0,16).'...';
-					}
-					echo
-					'<div class="media-item">'.
-					'<a class="media-icon" href="media_item.php?id='.$f->media_id.'">'.
-					'<img src="'.$f->media_icon.'" alt="" title="'.$f->basename.'" /></a>'.
-					'<ul>'.
-					'<li><a class="media-link" href="media_item.php?id='.$f->media_id.'" '.
-					'title="'.$f->basename.'">'.$ftitle.'</a></li>'.
-					'<li>'.$f->media_dtstr.'</li>'.
-					'<li>'.files::size($f->size).' - '.
-					'<a href="'.$f->file_url.'">'.__('open').'</a>'.'</li>'.
-					
-					'<li class="media-action"><a class="attachment-remove" id="attachment-'.$f->media_id.'" '.
-					'href="post_media.php?post_id='.$post->post_id.'&amp;media_id='.$f->media_id.'&amp;remove=1">'.
-					'<img src="images/check-off.png" alt="'.__('remove').'" /></a>'.
-					'</li>'.
-					
-					'</ul>'.
-					'</div>';
-				}
-				unset($f);
+				'<div class="media-item">'.
+				'<a class="media-icon" href="media_item.php?id='.$f->media_id.'">'.
+				'<img src="'.$f->media_icon.'" alt="" title="'.$f->basename.'" /></a>'.
+				'<ul>'.
+				'<li><a class="media-link" href="media_item.php?id='.$f->media_id.'"'.
+				'title="'.$f->basename.'">'.$ftitle.'</a></li>'.
+				'<li>'.$f->media_dtstr.'</li>'.
+				'<li>'.files::size($f->size).' - '.
+				'<a href="'.$f->file_url.'">'.__('open').'</a>'.'</li>'.
+				
+				'<li class="media-action"><a class="attachment-remove" id="attachment-'.$f->media_id.'" '.
+				'href="post_media.php?post_id='.$post->post_id.'&amp;media_id='.$f->media_id.'&amp;remove=1">'.
+				'<img src="images/check-off.png" alt="'.__('remove').'" /></a>'.
+				'</li>'.
+				
+				'</ul>'.
+				'</div>';
 			}
+			unset($f);
 			
 			if (empty($post_media)) {
Index: plugins/attachments/_public.php
===================================================================
--- plugins/attachments/_public.php	(revision 1266)
+++ plugins/attachments/_public.php	(revision 1221)
@@ -40,5 +40,5 @@
 		"<?php\n".
 		'if ($_ctx->posts !== null && $core->media) {'."\n".
-		'$_ctx->attachments = $core->media->getPostMedia($_ctx->posts->post_id, null, true);'."\n".
+		'$_ctx->attachments = staticRecord::newFromArray($core->media->getPostMedia($_ctx->posts->post_id));'."\n".
 		"?>\n".
 		
@@ -46,5 +46,5 @@
 		'<?php while ($_ctx->attachments->fetch()) : ?>'.
 		
-		'<?php $GLOBALS[\'attach_i\'] = $attach_i; $attach_f = $_ctx->attachments; $GLOBALS[\'attach_f\'] = $attach_f;'. // LEGACY
+		'<?php $GLOBALS[\'attach_i\'] = $attach_i; $attach_f = $_ctx->attachments->row(); $GLOBALS[\'attach_f\'] = $attach_f;'. // LEGACY
 		'$_ctx->file_url = $attach_f->file_url; ?>'. // LEGACY
 		$content.
Index: plugins/daInstaller/index.php
===================================================================
--- plugins/daInstaller/index.php	(revision 1237)
+++ plugins/daInstaller/index.php	(revision 1046)
@@ -256,5 +256,5 @@
 '<body>'.
 infoMessages().
-'<h2 class="page-title">'.__('DotAddict.org Installer').'</h2>'.
+'<h2>'.__('DotAddict.org Installer').'</h2>'.
 '<p>'.__('Install and update your extensions live from DotAddict.org').'</p>';
 
Index: plugins/maintenance/locales/fr/help/maintenance.html
===================================================================
--- plugins/maintenance/locales/fr/help/maintenance.html	(revision 1272)
+++ plugins/maintenance/locales/fr/help/maintenance.html	(revision 207)
@@ -10,8 +10,8 @@
 <dl>
   <dt>Optimiser l'espace de la base de données</dt>
-  <dd>Au fur et à mesure des suppressions ou modifications dans vos billets, les tables de la 
+  <dd>Au fur at à mesure des suppressions ou modifications dans vos billets, les tables de la 
   base de données se fragmentent. L'opération d'optimisation permet de compacter celles-ci.<br />
   Cette opération n'a aucun impact sur l'intégrité de vos données.<br />
-  Il est fortement conseillé d'optimiser la base de données avant tout export de blog.</dd>
+  Il est fortement conseillé d'optimiser la base de données avant tout export de blog</dd>
   
   <dt>Compteurs</dt>
Index: plugins/pages/_define.php
===================================================================
--- plugins/pages/_define.php	(revision 1442)
+++ plugins/pages/_define.php	(revision 1179)
@@ -16,5 +16,5 @@
 	/* Description*/	"Serve entries as simple web pages",
 	/* Author */		"Olivier Meunier",
-	/* Version */		'1.3',
+	/* Version */		'1.2',
 	array(
 		'permissions' =>	'contentadmin,pages',
@@ -22,2 +22,3 @@
 	)
 );
+?>
Index: lugins/pages/_install.php
===================================================================
--- plugins/pages/_install.php	(revision 1494)
+++ 	(revision )
@@ -1,53 +1,0 @@
-<?php
-# -- BEGIN LICENSE BLOCK ---------------------------------------
-#
-# This file is part of Dotclear 2.
-#
-# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
-# Licensed under the GPL version 2.0 license.
-# See LICENSE file or
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
-#
-# -- END LICENSE BLOCK -----------------------------------------
-
-if (!defined('DC_CONTEXT_ADMIN')){return;}
-
-$version = $core->plugins->moduleInfo('pages','version');
-if (version_compare($core->getVersion('pages'),$version,'>=')) {
-	return;
-}
-
-/* Create first page
--------------------------------------------------------- */
-$core->blog->settings->addNamespace('pages');
-
-$params = array(
-	'post_type' => 'page',
-	'no_content' => true
-);
-$counter = $core->blog->getPosts($params,true);
-
-If( $counter->f(0) == 0 && $core->blog->settings->pages->firstpage == null ) {
-	
-	$core->blog->settings->pages->put('firstpage',true, 'boolean');
-
-	$cur = $core->con->openCursor($core->prefix.'post');
-	$cur->user_id = $core->auth->userID();
-	$cur->post_type = 'page';
-	$cur->post_format = 'xhtml';
-	$cur->post_lang = $core->blog->settings->system->lang;
-	$cur->post_title = __('My first page');
-	$cur->post_content = __('<p>'.__('This is your first page. When you\'re ready to blog, log in to edit or delete it.').'</p>');
-	$cur->post_content_xhtml = $cur->post_content;
-	$cur->post_excerpt = '';
-	$cur->post_excerpt_xhtml = $cur->post_excerpt;
-	$cur->post_status = 1;
-	$cur->post_open_comment = 0;
-	$cur->post_open_tb = 0;
-	$post_id = $core->blog->addPost($cur);
-	
-}
-
-$core->setVersion('pages',$version);
-return true;
-?>
Index: plugins/pages/page.php
===================================================================
--- plugins/pages/page.php	(revision 1537)
+++ plugins/pages/page.php	(revision 1215)
@@ -139,7 +139,5 @@
 			$core->media = new dcMedia($core);
 			$post_media = $core->media->getPostMedia($post_id);
-		} catch (Exception $e) {
-			$core->error->add($e->getMessage());
-		}
+		} catch (Exception $e) {}
 	}
 }
@@ -304,5 +302,4 @@
   dcPage::jsToolBar().
   dcPage::jsModal().
-  dcPage::jsMetaEditor().
   dcPage::jsLoad('js/_post.js').
   dcPage::jsConfirmClose('entry-form','comment-form').
Index: plugins/simpleMenu/index.php
===================================================================
--- plugins/simpleMenu/index.php	(revision 1273)
+++ plugins/simpleMenu/index.php	(revision 1179)
@@ -389,5 +389,5 @@
 		case 1:
 			// Selection du type d'item
-			echo '<form id="additem" action="'.$p_url.'&amp;add=2" method="post">';
+			echo '<form id="additem" action="'.$p_url.'&add=2" method="post">';
 			echo '<fieldset><legend>'.__('Select type').'</legend>';
 			echo '<p class="field"><label for="item_type" class="classic">'.__('Type of item menu:').'</label>'.form::combo('item_type',$items_combo,'').'</p>';
@@ -399,5 +399,5 @@
 			if ($items[$item_type][1]) {
 				// Choix à faire
-				echo '<form id="additem" action="'.$p_url.'&amp;add=3" method="post">';
+				echo '<form id="additem" action="'.$p_url.'&add=3" method="post">';
 				echo '<fieldset><legend>'.$item_type_label.'</legend>';
 				switch ($item_type) {
@@ -436,5 +436,5 @@
 		case 3:
 			// Libellé et description
-			echo '<form id="additem" action="'.$p_url.'&amp;add=4" method="post">';
+			echo '<form id="additem" action="'.$p_url.'&add=4" method="post">';
 			echo '<fieldset><legend>'.$item_type_label.($item_select_label != '' ? ' ('.$item_select_label.')' : '').'</legend>';
 			echo '<p class="field"><label for="item_label" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.
@@ -458,5 +458,5 @@
 
 if (!$step) {
-	echo '<form id="menuitemsappend" action="'.$p_url.'&amp;add=1" method="post">';
+	echo '<form id="menuitemsappend" action="'.$p_url.'&add=1" method="post">';
 	echo '<p>'.$core->formNonce().'<input class="add" type="submit" name="appendaction" value="'.__('Add an item').'" /></p>';
 	echo '</form>';
Index: plugins/tags/_admin.php
===================================================================
--- plugins/tags/_admin.php	(revision 1239)
+++ plugins/tags/_admin.php	(revision 1179)
@@ -23,6 +23,4 @@
 $core->addBehavior('adminAfterPostUpdate',array('tagsBehaviors','setTags'));
 
-$core->addBehavior('adminPageHeaders',array('tagsBehaviors','pageHeaders'));
-
 $core->addBehavior('adminPostHeaders',array('tagsBehaviors','postHeaders'));
 $core->addBehavior('adminPostsActionsHeaders',array('tagsBehaviors','postsActionsHeaders'));
@@ -101,33 +99,4 @@
 			}
 		}
-	}
-
-	public static function pageHeaders()
-	{
-		$tag_url = $GLOBALS['core']->blog->url.$GLOBALS['core']->url->getURLFor('tag');
-		
-		$opts = $GLOBALS['core']->auth->getOptions();
-		$type = isset($opts['tag_list_format']) ? $opts['tag_list_format'] : 'more';
-		
-		return 
-		'<script type="text/javascript" src="index.php?pf=tags/js/jquery.autocomplete.js"></script>'.
-		'<script type="text/javascript" src="index.php?pf=tags/js/page.js"></script>'.
-		'<script type="text/javascript">'."\n".
-		"//<![CDATA[\n".
-		"metaEditor.prototype.meta_url = 'plugin.php?p=tags&m=tag_posts&amp;tag=';\n".
-		"metaEditor.prototype.meta_type = '".html::escapeJS($type)."';\n".
-		"metaEditor.prototype.text_confirm_remove = '".html::escapeJS(__('Are you sure you want to remove this %s?'))."';\n".
-		"metaEditor.prototype.text_add_meta = '".html::escapeJS(__('Add a %s to this entry'))."';\n".
-		"metaEditor.prototype.text_choose = '".html::escapeJS(__('Choose from list'))."';\n".
-		"metaEditor.prototype.text_all = '".html::escapeJS(__('all'))."';\n".
-		"metaEditor.prototype.text_separation = '';\n".
-		"jsToolBar.prototype.elements.tag.title = '".html::escapeJS(__('Tag'))."';\n".
-		"jsToolBar.prototype.elements.tag.url = '".html::escapeJS($tag_url)."';\n".
-		"dotclear.msg.tags_autocomplete = '".html::escapeJS(__('used in %e - frequency %p%'))."';\n".
-		"dotclear.msg.entry = '".html::escapeJS(__('entry'))."';\n".
-		"dotclear.msg.entries = '".html::escapeJS(__('entries'))."';\n".
-		"\n//]]>\n".
-		"</script>\n".
-		'<link rel="stylesheet" type="text/css" href="index.php?pf=tags/style.css" />';
 	}
 	
Index: lugins/tags/js/page.js
===================================================================
--- plugins/tags/js/page.js	(revision 1240)
+++ 	(revision )
@@ -1,70 +1,0 @@
-$(function () {
-    $('#edit-entry').onetabload(function () {
-        var tags_edit = $('#tags-edit');
-        var post_id = $('#id');
-        var meta_field = null;
-        if (tags_edit.length > 0) {
-            post_id = (post_id.length > 0) ? post_id.get(0).value : false;
-            if (post_id == false) {
-                meta_field = $('<input type="hidden" name="post_tags" />');
-                meta_field.val($('#post_tags').val());
-            }
-            var mEdit = new metaEditor(tags_edit, meta_field, 'tag');
-            mEdit.meta_url = 'plugin.php?p=tags&m=tag_posts&amp;tag=';
-            mEdit.displayMeta('tag', post_id);
-            window.dc_tag_editor = mEdit;
-        }
-    });
-});
-jsToolBar.prototype.elements.tagSpace = {
-    type: 'space'
-};
-jsToolBar.prototype.elements.tag = {
-    type: 'button',
-    title: 'Keyword',
-    fn: {}
-};
-jsToolBar.prototype.elements.tag.context = 'post';
-jsToolBar.prototype.elements.tag.icon = 'index.php?pf=tags/img/tag-add.png';
-jsToolBar.prototype.elements.tag.fn.wiki = function () {
-    this.encloseSelection('', '', function (str) {
-        if (str == '') {
-            window.alert(dotclear.msg.no_selection);
-            return '';
-        }
-        if (str.indexOf(',') != -1) {
-            return str;
-        } else {
-            return '[' + str + '|tag:' + str + ']';
-        }
-    });
-};
-jsToolBar.prototype.elements.tag.fn.xhtml = function () {
-    var url = this.elements.tag.url;
-    this.encloseSelection('', '', function (str) {
-        if (str == '') {
-            window.alert(dotclear.msg.no_selection);
-            return '';
-        }
-        if (str.indexOf(',') != -1) {
-            return str;
-        } else {
-            return '<a href="' + this.stripBaseURL(url + '/' + str) + '">' + str + '</a>';
-        }
-    });
-};
-jsToolBar.prototype.elements.tag.fn.wysiwyg = function () {
-    var t = this.getSelectedText();
-    if (t == '') {
-        window.alert(dotclear.msg.no_selection);
-        return;
-    }
-    if (t.indexOf(',') != -1) {
-        return;
-    }
-    var n = this.getSelectedNode();
-    var a = document.createElement('a');
-    a.href = this.stripBaseURL(this.elements.tag.url + '/' + t);
-    a.appendChild(n);
-    this.insertNode(a);
-};
Index: plugins/tags/tag_posts.php
===================================================================
--- plugins/tags/tag_posts.php	(revision 1288)
+++ plugins/tags/tag_posts.php	(revision 1179)
@@ -130,15 +130,15 @@
 		'<input type="submit" value="'.__('Rename').'" />'.
 		$core->formNonce().
-		'</p></form>';
+		'</form>';
 		# Remove tag
 		if (!$posts->isEmpty() && $core->auth->check('contentadmin',$core->blog->id)) {
 			echo
 			'<form id="tag_delete" action="'.$this_url.'" method="post">'.
-			'<p class="no-margin">'.__('Delete this tag:').
-			'</p><p><input type="submit" class="delete" name="delete" value="'.__('Delete').'" />'.
+			'<p class="no-margin">'.__('Delete this tag:').'</p>'.
+			'<input type="submit" class="delete" name="delete" value="'.__('Delete').'" />'.
 			$core->formNonce().
-			'</p></form>';
+			'</form>';
 		}
-		echo '</div>';
+		echo '</p></div>';
 	}
 	
Index: plugins/userPref/index.php
===================================================================
--- plugins/userPref/index.php	(revision 1274)
+++ plugins/userPref/index.php	(revision 1179)
@@ -82,5 +82,5 @@
 	return
 	'<tr>'.
-	'<td scope="row"><label for="s_'.$id.'">'.sprintf($slabel,html::escapeHTML($id)).'</label></td>'.
+	'<td scope="raw"><label for="s_'.$id.'">'.sprintf($slabel,html::escapeHTML($id)).'</label></td>'.
 	'<td>'.$field.'</td>'.
 	'<td>'.$s['type'].'</td>'.
Index: plugins/widgets/_widgets_functions.php
===================================================================
--- plugins/widgets/_widgets_functions.php	(revision 1253)
+++ plugins/widgets/_widgets_functions.php	(revision 1179)
@@ -29,6 +29,8 @@
 		($w->title ? '<h2><label for="q">'.html::escapeHTML($w->title).'</label></h2>' : '').
 		'<form action="'.$core->blog->url.'" method="get">'.
+		'<fieldset>'.
 		'<p><input type="text" size="10" maxlength="255" id="q" name="q" value="'.$value.'" /> '.
 		'<input type="submit" class="submit" value="ok" /></p>'.
+		'</fieldset>'.
 		'</form>'.
 		($w->content_only ? '' : '</div>');
