Index: admin/blog_pref.php
===================================================================
--- admin/blog_pref.php	(revision 1615)
+++ admin/blog_pref.php	(revision 1620)
@@ -111,8 +111,12 @@
 # Image default size combo
 $img_default_size_combo = array();
-$media = new dcMedia($core);
-$img_default_size_combo[__('original')] = 'o';
-foreach ($media->thumb_sizes as $code => $size) {
-	$img_default_size_combo[__($size[2])] = $code;
+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());
 }
 
Index: admin/index.php
===================================================================
--- admin/index.php	(revision 1558)
+++ admin/index.php	(revision 1620)
@@ -247,4 +247,26 @@
 }
 
+$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']))
@@ -267,4 +289,21 @@
 # Dashboard columns (processed first, as we need to know the result before displaying the icons.)
 $dashboardItems = '';
+
+# Dotclear updates notifications
+if ($core->auth->isSuperAdmin() && is_readable(DC_DIGESTS))
+{
+	$updater = new dcUpdate(DC_UPDATE_URL,'dotclear',DC_UPDATE_VERSION,DC_TPL_CACHE.'/versions');
+	$new_v = $updater->check(DC_VERSION);
+	$version_info = $new_v ? $updater->getInfoURL() : '';
+	
+	if ($updater->getNotify() && $new_v) {
+		$dashboardItems .=
+		'<div id="upg-notify" class="static-msg"><p>'.sprintf(__('Dotclear %s is available!'),$new_v).'</p> '.
+		'<ul><li><strong><a href="update.php">'.sprintf(__('Upgrade now'),$new_v).'</a></strong>'.
+		'</li><li><a href="update.php?hide_msg=1">'.__('Remind me later').'</a>'.
+		($version_info ? ' </li><li>'.sprintf(__('<a href=\"%s\">Information about this version</a>.'),$version_info) : '').
+		'</li></ul></div>';
+	}
+}
 
 # Errors modules notifications
Index: admin/install/index.php
===================================================================
--- admin/install/index.php	(revision 1553)
+++ admin/install/index.php	(revision 1620)
@@ -267,4 +267,5 @@
 
   <script type="text/javascript" src="../js/jquery/jquery.js"></script>
+  <?php echo dcPage::jsLoad('../js/jquery/jquery.pwstrength.js'); ?>
   <script type="text/javascript">
   //<![CDATA[
@@ -278,4 +279,11 @@
       $(this).val(this.value.replace(login_re,''));
     });
+    
+	<?php echo "\$('#u_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"; ?>
     
     $('#u_login').parent().after($('<input type="hidden" name="u_date" value="' + Date().toLocaleString() + '" />'));
@@ -329,10 +337,18 @@
 	
 	'<fieldset><legend>'.__('Username and password').'</legend>'.
-	'<p><label for="u_login" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Username:').'</label> '.
-	form::field('u_login',30,32,html::escapeHTML($u_login)).'</p>'.
-	'<p><label for="u_pwd" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Password:').'</label> '.
-	form::password('u_pwd',30,255).'</p>'.
-	'<p><label for="u_pwd2" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Confirm password:').'</label> '.
-	form::password('u_pwd2',30,255).'</p>'.
+	'<p><label for="u_login" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Username:').' '.
+	form::field('u_login',30,32,html::escapeHTML($u_login)).'</label></p>'.
+	'<div class="pw-table">'.
+		'<p class="pw-cell">'.
+			'<label for="u_pwd" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('New password:').'</label>'.
+			form::password('u_pwd',30,255,'','','',false,' data-indicator="pwindicator" ').
+		'</p>'.
+		'<div id="pwindicator">'.
+		'    <div class="bar"></div>'.
+		'    <p class="label no-margin"></p>'.
+		'</div>'.
+	'</div>'.
+	'<p><label for="u_pwd2" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Confirm password:').' '.
+	form::password('u_pwd2',30,255).'</label></p>'.
 	'</fieldset>'.
 	
Index: admin/post.php
===================================================================
--- admin/post.php	(revision 1619)
+++ admin/post.php	(revision 1620)
@@ -147,5 +147,7 @@
 		try {
 			$core->media = new dcMedia($core);
-		} catch (Exception $e) {}
+		} catch (Exception $e) {
+			$core->error->add($e->getMessage());
+		}
 	}
 }
Index: admin/post_media.php
===================================================================
--- admin/post_media.php	(revision 1179)
+++ admin/post_media.php	(revision 1537)
@@ -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));
+	}
 
-try {
 	$core->media = new dcMedia($core);
 	$f = $core->media->getPostMedia($post_id,$media_id);
Index: admin/services.php
===================================================================
--- admin/services.php	(revision 1500)
+++ admin/services.php	(revision 1538)
@@ -238,6 +238,8 @@
 		}
 		
-		$core->media = new dcMedia($core);
-		$file = $core->media->getFile($id);
+		try {
+			$core->media = new dcMedia($core);
+			$file = $core->media->getFile($id);
+		} catch (Exception $e) {}
 		
 		if ($file === null || $file->type != 'application/zip' || !$file->editable) {
Index: admin/style/install.css
===================================================================
--- admin/style/install.css	(revision 1330)
+++ admin/style/install.css	(revision 1620)
@@ -158,2 +158,43 @@
 	border: 1px solid #2C8FD1;
 }
+
+
+/* --------------------------------------------------------------- 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 1553)
+++ admin/update.php	(revision 1620)
@@ -249,5 +249,5 @@
 	'<p class="message">'.
 	__("Congratulations, you're one click away from the end of the update.").
-	' <strong><a href="index.php?logout=1">'.__('Finish the update').'</a>.</strong>'.
+	' <strong><a href="index.php?logout=1">'.__('Finish the update.').'</a></strong>'.
 	'</p>';
 }
Index: admin/user.php
===================================================================
--- admin/user.php	(revision 1609)
+++ admin/user.php	(revision 1620)
@@ -172,4 +172,17 @@
 dcPage::open($page_title,
 	dcPage::jsConfirmClose('user-form').
+	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".
 	
 	# --BEHAVIOR-- adminUserHeaders
@@ -211,9 +224,25 @@
 
 echo
-'<p><label for="new_pwd" '.($user_id != '' ? '' : 'class="required"').'>'.
-($user_id != '' ? '' : '<abbr title="'.__('Required field').'">*</abbr> ').
-($user_id != '' ? __('New password:') : __('Password:')).'</label> '.
-form::password('new_pwd',20,255).
-'</p>'.
+'<form action="user.php" method="post" id="user-form">'.
+'<fieldset><legend>'.__('User information').'</legend>'.
+'<div class="two-cols">'.
+'<div class="col">'.
+'<p><label for="user_id" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Username:').' '.
+form::field('user_id',20,255,html::escapeHTML($user_id)).
+'</label></p>'.
+'<p class="form-note">'.__('At least 2 characters using letters, numbers or symbols.').'</p>'.
+
+'<div class="pw-table">'.
+	'<p class="pw-cell">'.
+		'<label for="new_pwd" '.($user_id != '' ? '' : 'class="required"').'>'.
+		($user_id != '' ? '' : '<abbr title="'.__('Required field').'">*</abbr> ').
+		($user_id != '' ? __('New password:') : __('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 class="form-note">'.__('Password must contain at least 6 characters.').'</p>'.
 
Index: admin/users_actions.php
===================================================================
--- admin/users_actions.php	(revision 1499)
+++ admin/users_actions.php	(revision 1620)
Index: inc/admin/prepend.php
===================================================================
--- inc/admin/prepend.php	(revision 1604)
+++ inc/admin/prepend.php	(revision 1620)
@@ -322,5 +322,5 @@
 		$core->auth->check('usage,contentadmin',$core->blog->id),'menu-new-post');
 	
-	$_menu['System']->prependItem(__('Updates'),'update.php','images/menu/update.png',
+	$_menu['System']->prependItem(__('Update'),'update.php','images/menu/update.png',
 		preg_match('/update.php(\?.*)?$/',$_SERVER['REQUEST_URI']),
 		$core->auth->isSuperAdmin() && is_readable(DC_DIGESTS));
Index: inc/config.php.in
===================================================================
--- inc/config.php.in	(revision 1179)
+++ inc/config.php.in	(revision 1535)
@@ -50,5 +50,5 @@
 
 // Template cache directory
-define('DC_TPL_CACHE',dirname(__FILE__).'/../cache');
+define('DC_TPL_CACHE',path::real(dirname(__FILE__).'/..').'/cache');
 
 
Index: inc/core/class.dc.blog.php
===================================================================
--- inc/core/class.dc.blog.php	(revision 1610)
+++ inc/core/class.dc.blog.php	(revision 1620)
@@ -203,75 +203,64 @@
 	@param	ids		<b>mixed</b>		Comment(s) ID(s)
 	@param	del		<b>boolean</b>		If comment is delete, set this to true
-	*/
-	public function triggerComments($ids,$del=false)
-	{
-		$co_ids = dcUtils::cleanIds($ids);
-		
-		# a) Retrieve posts affected by comments edition
+	@param	affected_posts		<b>mixed</b>		Posts(s) ID(s)
+	*/
+	public function triggerComments($ids, $del=false, $affected_posts=null)
+	{
+		$comments_ids = dcUtils::cleanIds($ids);
+		
+		# Get posts affected by comments edition
+		if (empty($affected_posts)) {
+			$strReq = 
+				'SELECT post_id '.
+				'FROM '.$this->prefix.'comment '.
+				'WHERE comment_id'.$this->con->in($comments_ids).
+				'GROUP BY post_id';
+			
+			$rs = $this->con->select($strReq);
+			
+			$affected_posts = array();
+			while ($rs->fetch()) {
+				$affected_posts[] = (integer) $rs->post_id;
+			}
+		}
+		
+		if (!is_array($affected_posts) || empty($affected_posts)) {
+			return;
+		}
+		
+		# Count number of comments if exists for affected posts
 		$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;
-		}
-		
-		# b) Count comments of each posts previously retrieved
-		# Note that this does not return posts without comment
-		$strReq = 
-			'SELECT post_id, COUNT(post_id) AS nb_comment,comment_trackback '.
+			'SELECT post_id, COUNT(post_id) AS nb_comment, comment_trackback '.
 			'FROM '.$this->prefix.'comment '.
 			'WHERE comment_status = 1 '.
-			(count($a_ids) > 0 ? 'AND post_id'.$this->con->in($a_ids) : ' ');
-		
-		if ($del) {
-			$strReq .= 
-				'AND comment_id NOT'.$this->con->in($co_ids);
-		}
-		
-		$strReq .= 
+			'AND post_id'.$this->con->in($affected_posts).
 			'GROUP BY post_id,comment_trackback';
 		
 		$rs = $this->con->select($strReq);
 		
-		$b_ids = $b_tbs = $b_nbs = array();
+		$posts = array();
 		while ($rs->fetch()) {
-			$b_ids[] = (integer) $rs->post_id;
-			$b_tbs[] = (integer) $rs->comment_trackback;
-			$b_nbs[] = (integer) $rs->nb_comment;
-		}
-		
-		# c) Update comments numbers on posts
-		# This compare previous requests to update also posts without comment
+			if ($rs->comment_trackback) {
+				$posts[$rs->post_id]['trackback'] = $rs->nb_comment;
+			} else {
+				$posts[$rs->post_id]['comment'] = $rs->nb_comment;
+			}
+		}
+		
+		# Update number of comments on affected posts
 		$cur = $this->con->openCursor($this->prefix.'post');
-		
-		foreach($a_ids as $a_key => $a_id)
-		{
-			$nb_comment = $nb_trackback = 0;
-			foreach($b_ids as $b_key => $b_id)
-			{
-				if ($a_id != $b_id || $a_tbs[$a_key] != $b_tbs[$b_key]) {
-					continue;
-				}
-				
-				if ($b_tbs[$b_key]) {
-					$nb_trackback = $b_nbs[$b_key];
-				} else {
-					$nb_comment = $b_nbs[$b_key];
-				}
-			}
-			
-			if ($a_tbs[$a_key]) {
-				$cur->nb_trackback = $nb_trackback;
+		foreach($affected_posts as $post_id)
+		{
+			$cur->clean();
+			
+			if (!array_key_exists($post_id,$posts)) {
+				$cur->nb_trackback = 0;
+				$cur->nb_comment = 0;
 			} else {
-				$cur->nb_comment = $nb_comment;
-			}
-			$cur->update('WHERE post_id = '.$a_id);
+				$cur->nb_trackback = empty($posts[$post_id]['trackback']) ? 0 : $posts[$post_id]['trackback'];
+				$cur->nb_comment = empty($posts[$post_id]['comment']) ? 0 : $posts[$post_id]['comment'];
+			}
+			
+			$cur->update('WHERE post_id = '.$post_id);
 		}
 	}
@@ -509,5 +498,11 @@
 		$this->core->callBehavior('coreBeforeCategoryCreate',$this,$cur);
 		
-		$this->categories()->addNode($cur,$parent);
+		$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;
+		}
 		
 		# --BEHAVIOR-- coreAfterCategoryCreate
@@ -739,5 +734,5 @@
 	- no_content: Don't retrieve entry content (excerpt and content)
 	- post_type: Get only entries with given type (default "post", array for many types and '' for no type)
-	- post_id: (integer) Get entry with given post_id
+	- post_id: (integer or array) Get entry with given post_id
 	- post_url: Get entry with given post_url field
 	- user_id: (integer) Get entries belonging to given user ID
@@ -759,4 +754,5 @@
 	- limit: Limit parameter
 	- sql_only : return the sql request instead of results. Only ids are selected
+	- exclude_post_id : (integer or array) Exclude entries with given post_id
 	
 	Please note that on every cat_id or cat_url, you can add ?not to exclude
@@ -852,4 +848,13 @@
 			}
 			$strReq .= 'AND P.post_id '.$this->con->in($params['post_id']);
+		}
+		
+		if (isset($params['exclude_post_id']) && $params['exclude_post_id'] !== '') {
+			if (is_array($params['exclude_post_id'])) {
+				array_walk($params['exclude_post_id'],create_function('&$v,$k','if($v!==null){$v=(integer)$v;}'));
+			} else {
+				$params['exclude_post_id'] = array((integer) $params['exclude_post_id']);
+			}
+			$strReq .= 'AND P.post_id NOT '.$this->con->in($params['exclude_post_id']);
 		}
 		
@@ -2235,6 +2240,20 @@
 		$co_ids = dcUtils::cleanIds($ids);
 		
-		if (empty($ids)) {
+		if (empty($co_ids)) {
 			throw new Exception(__('No such comment ID'));
+		}
+		
+		# Retrieve posts affected by comments edition
+		$affected_posts = array();
+		$strReq =
+			'SELECT post_id '.
+			'FROM '.$this->prefix.'comment '.
+			'WHERE comment_id'.$this->con->in($co_ids).
+			'GROUP BY post_id';
+		
+		$rs = $this->con->select($strReq);
+		
+		while ($rs->fetch()) {
+			$affected_posts[] = (integer) $rs->post_id;
 		}
 		
@@ -2266,5 +2285,5 @@
 		
 		$this->con->execute($strReq);
-		$this->triggerComments($co_ids,true);
+		$this->triggerComments($co_ids, true, $affected_posts);
 		$this->triggerBlog();
 	}
@@ -2321,6 +2340,8 @@
 		
 		if ($cur->comment_site !== null && $cur->comment_site != '') {
-			if (!preg_match('|^http(s?)://|',$cur->comment_site)) {
+			if (!preg_match('|^http(s?)://|i',$cur->comment_site, $matches)) {
 				$cur->comment_site = 'http://'.$cur->comment_site;
+			}else{
+				$cur->comment_site = strtolower($matches[0]).substr($cur->comment_site, strlen($matches[0]));
 			}
 		}
Index: inc/core/class.dc.core.php
===================================================================
--- inc/core/class.dc.core.php	(revision 1179)
+++ inc/core/class.dc.core.php	(revision 1593)
@@ -928,5 +928,5 @@
 		
 		if (!empty($params['q'])) {
-			$params['q'] = str_replace('*','%',$params['q']);
+			$params['q'] = strtolower(str_replace('*','%',$params['q']));
 			$where .=
 			'AND ('.
Index: inc/public/lib.tpl.context.php
===================================================================
--- inc/public/lib.tpl.context.php	(revision 1179)
+++ inc/public/lib.tpl.context.php	(revision 1537)
@@ -416,62 +416,67 @@
 		global $core, $_ctx;
 		
-		$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)
+		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)
 			{
-				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];
+				$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;
 						}
-						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];
+			
+			# 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;
 						}
-						break;
 					}
-				}
-			};
-		}
-		
-		if ($src) {
-			if ($no_tag) {
-				return $src;
-			} else {
-				return '<img alt="'.$alt.'" src="'.$src.'" class="'.$class.'" />';
-			}
+				};
+			}
+			
+			if ($src) {
+				if ($no_tag) {
+					return $src;
+				} else {
+					return '<img alt="'.$alt.'" src="'.$src.'" class="'.$class.'" />';
+				}
+			}
+			
+		} catch (Exception $e) {
+			$core->error->add($e->getMessage());
 		}
 	}
@@ -485,37 +490,41 @@
 		$base = $info['base'];
 		
-		$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';
-			}
+		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());
 		}
 		
Index: locales/bn/main.po
===================================================================
--- locales/bn/main.po	(revision 1615)
+++ locales/bn/main.po	(revision 1620)
@@ -836,5 +836,5 @@
 msgstr "পড়ে মনে করিয়ে দিও"
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr ""
 
@@ -2397,5 +2397,5 @@
 msgstr "ব্লগ"
 
-msgid "Updates"
+msgid "Update"
 msgstr ""
 
Index: locales/ca/main.po
===================================================================
--- locales/ca/main.po	(revision 1615)
+++ locales/ca/main.po	(revision 1620)
@@ -867,5 +867,5 @@
 msgstr ""
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr ""
 
@@ -2478,5 +2478,5 @@
 msgstr "Blog"
 
-msgid "Updates"
+msgid "Update"
 msgstr ""
 
Index: locales/cs/main.po
===================================================================
--- locales/cs/main.po	(revision 1615)
+++ locales/cs/main.po	(revision 1620)
@@ -844,5 +844,5 @@
 msgstr "Připomenout později"
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr ""
 
@@ -2399,5 +2399,5 @@
 msgstr "Blog"
 
-msgid "Updates"
+msgid "Update"
 msgstr "Aktualizace"
 
Index: locales/da/main.po
===================================================================
--- locales/da/main.po	(revision 1615)
+++ locales/da/main.po	(revision 1620)
@@ -845,5 +845,5 @@
 msgstr "Påmind mig senere"
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr ""
 
@@ -2409,5 +2409,5 @@
 msgstr ""
 
-msgid "Updates"
+msgid "Update"
 msgstr ""
 
Index: locales/de/main.po
===================================================================
--- locales/de/main.po	(revision 1615)
+++ locales/de/main.po	(revision 1620)
@@ -841,5 +841,5 @@
 msgstr "Erinnere mich später"
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr "Informationen zu dieser Version"
 
@@ -2400,5 +2400,5 @@
 msgstr "Blog"
 
-msgid "Updates"
+msgid "Update"
 msgstr "Aktualisierungen"
 
Index: locales/en/main.po
===================================================================
--- locales/en/main.po	(revision 1615)
+++ locales/en/main.po	(revision 1620)
@@ -829,5 +829,6 @@
 msgstr ""
 
-msgid "information about this version"
+#, php-format
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr ""
 
@@ -2358,5 +2359,5 @@
 msgstr ""
 
-msgid "Updates"
+msgid "Update"
 msgstr ""
 
Index: locales/eo/main.po
===================================================================
--- locales/eo/main.po	(revision 1615)
+++ locales/eo/main.po	(revision 1620)
@@ -826,5 +826,5 @@
 msgstr ""
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr ""
 
@@ -2346,5 +2346,5 @@
 msgstr ""
 
-msgid "Updates"
+msgid "Update"
 msgstr ""
 
Index: locales/es-ar/main.po
===================================================================
--- locales/es-ar/main.po	(revision 1615)
+++ locales/es-ar/main.po	(revision 1620)
@@ -847,5 +847,5 @@
 msgstr "Recordar mas tarde"
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr ""
 
@@ -2416,5 +2416,5 @@
 msgstr "Blog"
 
-msgid "Updates"
+msgid "Update"
 msgstr "Actualizaciones"
 
Index: locales/es/main.po
===================================================================
--- locales/es/main.po	(revision 1615)
+++ locales/es/main.po	(revision 1620)
@@ -850,5 +850,5 @@
 msgstr "Recordármelo más tarde"
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr ""
 
@@ -2421,5 +2421,5 @@
 msgstr "Blog"
 
-msgid "Updates"
+msgid "Update"
 msgstr "Actualizaciones"
 
Index: locales/eu/main.po
===================================================================
--- locales/eu/main.po	(revision 1615)
+++ locales/eu/main.po	(revision 1620)
@@ -826,5 +826,5 @@
 msgstr ""
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr ""
 
@@ -2346,5 +2346,5 @@
 msgstr ""
 
-msgid "Updates"
+msgid "Update"
 msgstr ""
 
Index: locales/fr/main.po
===================================================================
--- locales/fr/main.po	(revision 1615)
+++ locales/fr/main.po	(revision 1620)
@@ -889,6 +889,7 @@
 msgstr "Me le rappeler plus tard"
 
-msgid "information about this version"
-msgstr "Information à propos de cette version"
+#, php-format
+msgid "<a href=\"%s\">Information about this version</a>."
+msgstr "<a href=\"%s\">Information à propos de cette version</a>."
 
 msgid "Some plugins are installed twice:"
@@ -2516,6 +2517,6 @@
 msgstr "Blog"
 
-msgid "Updates"
-msgstr "Mises à jour"
+msgid "Update"
+msgstr "Mise à jour"
 
 msgid "Languages"
Index: locales/hu/main.po
===================================================================
--- locales/hu/main.po	(revision 1615)
+++ locales/hu/main.po	(revision 1620)
@@ -867,5 +867,5 @@
 msgstr "Értesíts később"
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr ""
 
@@ -2457,5 +2457,5 @@
 msgstr "Blog"
 
-msgid "Updates"
+msgid "Update"
 msgstr "Frissítések"
 
Index: locales/it/main.po
===================================================================
--- locales/it/main.po	(revision 1615)
+++ locales/it/main.po	(revision 1620)
@@ -843,5 +843,5 @@
 msgstr "Ricorda in seguito"
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr ""
 
@@ -2398,5 +2398,5 @@
 msgstr "Blog"
 
-msgid "Updates"
+msgid "Update"
 msgstr "Aggiornamenti"
 
Index: locales/ja/main.po
===================================================================
--- locales/ja/main.po	(revision 1615)
+++ locales/ja/main.po	(revision 1620)
@@ -852,5 +852,5 @@
 msgstr "後で再度知らせる"
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr ""
 
@@ -2430,5 +2430,5 @@
 msgstr "ブログ"
 
-msgid "Updates"
+msgid "Update"
 msgstr "アップデート"
 
Index: locales/ko/main.po
===================================================================
--- locales/ko/main.po	(revision 1615)
+++ locales/ko/main.po	(revision 1620)
@@ -851,5 +851,5 @@
 msgstr "나중에 다시 알려줌"
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr ""
 
@@ -2431,5 +2431,5 @@
 msgstr "블로그"
 
-msgid "Updates"
+msgid "Update"
 msgstr "DotClear 갱신"
 
Index: locales/lt/main.po
===================================================================
--- locales/lt/main.po	(revision 1615)
+++ locales/lt/main.po	(revision 1620)
@@ -2205,5 +2205,5 @@
 msgstr "Blogas"
 
-msgid "Updates"
+msgid "Update"
 msgstr "Atnaujinimai"
 
Index: locales/nl/main.po
===================================================================
--- locales/nl/main.po	(revision 1615)
+++ locales/nl/main.po	(revision 1620)
@@ -829,5 +829,5 @@
 msgstr ""
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr ""
 
@@ -2361,5 +2361,5 @@
 msgstr ""
 
-msgid "Updates"
+msgid "Update"
 msgstr ""
 
Index: locales/oc/main.po
===================================================================
--- locales/oc/main.po	(revision 1615)
+++ locales/oc/main.po	(revision 1620)
@@ -835,5 +835,5 @@
 msgstr ""
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr ""
 
@@ -2379,5 +2379,5 @@
 msgstr "Blòg"
 
-msgid "Updates"
+msgid "Update"
 msgstr ""
 
Index: locales/pl/main.po
===================================================================
--- locales/pl/main.po	(revision 1615)
+++ locales/pl/main.po	(revision 1620)
@@ -837,5 +837,5 @@
 msgstr "Przypomnij mi później"
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr "informacje o tej wersji"
 
@@ -2372,5 +2372,5 @@
 msgstr "Blog"
 
-msgid "Updates"
+msgid "Update"
 msgstr "Uaktualnienia"
 
Index: locales/pt-br/main.po
===================================================================
--- locales/pt-br/main.po	(revision 1615)
+++ locales/pt-br/main.po	(revision 1620)
@@ -870,5 +870,5 @@
 msgstr ""
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr ""
 
@@ -2497,5 +2497,5 @@
 msgstr "Blog"
 
-msgid "Updates"
+msgid "Update"
 msgstr ""
 
Index: locales/pt/main.po
===================================================================
--- locales/pt/main.po	(revision 1615)
+++ locales/pt/main.po	(revision 1620)
@@ -848,5 +848,5 @@
 msgstr "Lembrar-me mais tarde"
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr ""
 
@@ -2408,5 +2408,5 @@
 msgstr "Blog"
 
-msgid "Updates"
+msgid "Update"
 msgstr "Actualizações"
 
Index: locales/ro/main.po
===================================================================
--- locales/ro/main.po	(revision 1615)
+++ locales/ro/main.po	(revision 1620)
@@ -828,5 +828,5 @@
 msgstr ""
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr ""
 
@@ -2357,5 +2357,5 @@
 msgstr ""
 
-msgid "Updates"
+msgid "Update"
 msgstr ""
 
Index: locales/ru/main.po
===================================================================
--- locales/ru/main.po	(revision 1615)
+++ locales/ru/main.po	(revision 1620)
@@ -847,5 +847,5 @@
 msgstr "Напомнить мне позже"
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr ""
 
@@ -2399,5 +2399,5 @@
 msgstr "Блог"
 
-msgid "Updates"
+msgid "Update"
 msgstr "Обновления"
 
Index: locales/sr/main.po
===================================================================
--- locales/sr/main.po	(revision 1615)
+++ locales/sr/main.po	(revision 1620)
@@ -858,5 +858,5 @@
 msgstr ""
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr ""
 
@@ -2444,5 +2444,5 @@
 msgstr "Blog"
 
-msgid "Updates"
+msgid "Update"
 msgstr ""
 
Index: locales/sv/main.po
===================================================================
--- locales/sv/main.po	(revision 1615)
+++ locales/sv/main.po	(revision 1620)
@@ -826,5 +826,5 @@
 msgstr ""
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr ""
 
@@ -2346,5 +2346,5 @@
 msgstr ""
 
-msgid "Updates"
+msgid "Update"
 msgstr ""
 
Index: locales/te/main.po
===================================================================
--- locales/te/main.po	(revision 1615)
+++ locales/te/main.po	(revision 1620)
@@ -854,5 +854,5 @@
 msgstr ""
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr ""
 
@@ -2426,5 +2426,5 @@
 msgstr "బ్లాగు"
 
-msgid "Updates"
+msgid "Update"
 msgstr ""
 
Index: locales/tr/main.po
===================================================================
--- locales/tr/main.po	(revision 1615)
+++ locales/tr/main.po	(revision 1620)
@@ -840,5 +840,5 @@
 msgstr "Gelecekte beni hatırla"
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr ""
 
@@ -2404,5 +2404,5 @@
 msgstr "Blog"
 
-msgid "Updates"
+msgid "Update"
 msgstr "Güncellemeler"
 
Index: locales/zh-cn/main.po
===================================================================
--- locales/zh-cn/main.po	(revision 1615)
+++ locales/zh-cn/main.po	(revision 1620)
@@ -845,5 +845,5 @@
 msgstr "稍后提醒我"
 
-msgid "information about this version"
+msgid "<a href=\"%s\">Information about this version</a>."
 msgstr ""
 
@@ -2407,5 +2407,5 @@
 msgstr "博客"
 
-msgid "Updates"
+msgid "Update"
 msgstr "更新"
 
Index: plugins/attachments/_admin.php
===================================================================
--- plugins/attachments/_admin.php	(revision 1617)
+++ plugins/attachments/_admin.php	(revision 1620)
Index: plugins/pages/page.php
===================================================================
--- plugins/pages/page.php	(revision 1619)
+++ plugins/pages/page.php	(revision 1620)
@@ -139,5 +139,7 @@
 			$core->media = new dcMedia($core);
 			$post_media = $core->media->getPostMedia($post_id);
-		} catch (Exception $e) {}
+		} catch (Exception $e) {
+			$core->error->add($e->getMessage());
+		}
 	}
 }
