Index: admin/blog_theme.php
===================================================================
--- admin/blog_theme.php	(revision 2220)
+++ admin/blog_theme.php	(revision 2222)
@@ -137,8 +137,8 @@
 			->newList('theme-update')
 			->setModules($modules)
-			->setPageTab('update')
+			->setPageTab('themes')
 			->displayModulesList(
 				/*cols */		array('sshot', 'name', 'desc', 'author', 'version', 'current_version', 'parent'),
-				/* actions */	array('update')
+				/* actions */	array('update', 'delete')
 			);
 
@@ -207,5 +207,5 @@
 			->displayNavMenu()
 			->displayModulesList(
-				/* cols */		array('expander', 'sshot', 'name', 'config', 'desc', 'author', 'version', 'parent', 'details', 'support'),
+				/* cols */		array('expander', 'sshot', 'name', 'score', 'config', 'desc', 'author', 'version', 'parent', 'details', 'support'),
 				/* actions */	array('install'),
 				/* nav limit */	true
Index: admin/js/_plugins.js
===================================================================
--- admin/js/_plugins.js	(revision 2171)
+++ admin/js/_plugins.js	(revision 2222)
@@ -78,9 +78,9 @@
                                 var support = $(rsp).find('support').text();
 								var box = document.createElement('div');
-                                var dl = document.createElement('ul');
-                                dl.className = "mod-more";
+                                var bloc = document.createElement('ul');
+                                bloc.className = "mod-more";
                                 
                                 if (author) {
-                                        $(dl).append($('<li class="module-author">'+dotclear.msg.module_author+' '+author+'</li>'));
+                                        $(bloc).append($('<li class="module-author">'+dotclear.msg.module_author+' '+author+'</li>'));
                                 }
                                 if (details) {
@@ -91,8 +91,8 @@
                                                 dd += '<a class="module-support" href="'+support+'">'+dotclear.msg.module_support+'</a>';
                                         }
-                                        $(dl).append($('<li>'+dotclear.msg.module_help+' '+dd+'</li>'));
+                                        $(bloc).append($('<li>'+dotclear.msg.module_help+' '+dd+'</li>'));
                                 }
 
-                                $(td).append($(box).addClass('two-boxes').append(dl));
+                                $(td).append($(box).addClass('two-boxes').append(bloc));
                                 
                                 var section = $(rsp).find('section').text();
@@ -100,14 +100,14 @@
                                 
 								var boxb = document.createElement('div');
-                                var dlb = document.createElement('ul');
-                                dlb.className = "mod-more";
+                                var blocb = document.createElement('ul');
+                                blocb.className = "mod-more";
                                 
                                 if (section) {
-                                        $(dlb).append($('<li class="module-section">'+dotclear.msg.module_section+' '+section+'</li>'));
+                                        $(blocb).append($('<li class="module-section">'+dotclear.msg.module_section+' '+section+'</li>'));
                                 }
                                 if (tags) {
-                                        $(dlb).append($('<li class="module-tags">'+dotclear.msg.module_tags+' '+tags+'</li>'));
+                                        $(blocb).append($('<li class="module-tags">'+dotclear.msg.module_tags+' '+tags+'</li>'));
                                 }
-                                $(td).append($(boxb).addClass('two-boxes').append(dlb));
+                                $(td).append($(boxb).addClass('two-boxes').append(blocb));
                         } else {
                                 alert($(rsp).find('message').text());
@@ -151,5 +151,5 @@
 $(function() {
         $('table.modules.expandable tr:not(.line)').each(function() {
-                dotclear.modulesExpander(this,$('table.modules tr.line'));
+                dotclear.modulesExpander(this,$('table.modules.expandable tr.line'));
         });
         $('table.modules.expandable tr.line').each(function() {
Index: admin/plugins.php
===================================================================
--- admin/plugins.php	(revision 2219)
+++ admin/plugins.php	(revision 2222)
@@ -229,5 +229,5 @@
 			->displayNavMenu()
 			->displayModulesList(
-				/* cols */		array('expander', 'name', 'version', 'desc'),
+				/* cols */		array('expander', 'name', 'score', 'version', 'desc'),
 				/* actions */	array('install'),
 				/* nav limit */	true
Index: inc/admin/lib.moduleslist.php
===================================================================
--- inc/admin/lib.moduleslist.php	(revision 2221)
+++ inc/admin/lib.moduleslist.php	(revision 2222)
@@ -269,5 +269,6 @@
 				'tags' 				=> '',
 				'details' 			=> '',
-				'sshot' 			=> ''
+				'sshot' 			=> '',
+				'score'				=> 0
 			),
 			# Module's values
@@ -314,4 +315,9 @@
 		}
 
+		if (in_array('score', $cols) && $this->getSearchQuery() !== null && defined('DC_DEBUG') && DC_DEBUG) {
+			echo 
+			'<th class="nowrap">'.__('Score').'</th>';
+		}
+
 		if (in_array('version', $cols)) {
 			echo 
@@ -381,4 +387,10 @@
 				html::escapeHTML($module['name'])
 			).'</td>';
+
+			# Display score only for debug purpose
+			if (in_array('score', $cols) && $this->getSearchQuery() !== null && defined('DC_DEBUG') && DC_DEBUG) {
+				echo 
+				'<td class="module-version nowrap count"><span class="debug">'.$module['score'].'</span></td>';
+			}
 
 			if (in_array('version', $cols)) {
@@ -863,4 +875,10 @@
 			}
 
+			# Display score only for debug purpose
+			if (in_array('score', $cols) && $this->getSearchQuery() !== null && defined('DC_DEBUG') && DC_DEBUG) {
+				$line .= 
+				'<p class="module-score debug">'.sprintf(__('Score: %s'), $module['score']).'</p>';
+			}
+
 			if (in_array('sshot', $cols)) {
 				# Screenshot from url
@@ -901,4 +919,9 @@
 			}
 
+			if (in_array('current_version', $cols)) {
+				$line .= 
+				'<span class="module-current-version">'.sprintf(__('(current version %s)'),html::escapeHTML($module['current_version'])).'</span> ';
+			}
+
 			if (in_array('parent', $cols) && $has_parent) {
 				if ($is_parent_present) {
@@ -910,9 +933,4 @@
 					'<span class="module-parent-missing">'.sprintf(__('(requires "%s")'),html::escapeHTML($parent)).'</span> ';
 				}
-			}
-
-			if (in_array('version', $cols)) {
-				$line .= 
-				'<span class="module-version">'.sprintf(__('version %s'),html::escapeHTML($module['version'])).'</span> ';
 			}
 
Index: inc/core/class.dc.store.parser.php
===================================================================
--- inc/core/class.dc.store.parser.php	(revision 2216)
+++ inc/core/class.dc.store.parser.php	(revision 2222)
@@ -15,4 +15,5 @@
 @ingroup DC_CORE
 @brief Repository modules XML feed parser
+@since 2.6
 
 Provides an object to parse XML feed of modules from a repository.
Index: inc/core/class.dc.store.php
===================================================================
--- inc/core/class.dc.store.php	(revision 2216)
+++ inc/core/class.dc.store.php	(revision 2222)
@@ -15,4 +15,5 @@
 @ingroup DC_CORE
 @brief Repository modules XML feed reader
+@since 2.6
 
 Provides an object to parse XML feed of modules from repository.
@@ -24,4 +25,7 @@
 	/** @var	object	dcModules instance */
 	public $modules;
+
+	/** @var	array	Modules fields to search on and their weighting */
+	public static $weighting = array('id' => 10, 'name' => 8, 'author' => 6, 'tags' => 4, 'desc' => 2);
 
 	/** @var	string	User agent used to query repository */
@@ -126,28 +130,40 @@
 
 		# Split query into small clean words
-		$patterns = explode(' ', $pattern);
-		array_walk($patterns, array('dcStore','sanitize'));
+		if (!($patterns = self::patternize($pattern))) {
+			return $result;
+		}
 
 		# For each modules
 		foreach ($this->data['new'] as $id => $module) {
-
-			# Split modules infos into small clean word
-			$subjects = explode(' ', $id.' '.$module['name'].' '.$module['desc']);
-			array_walk($subjects, array('dcStore','sanitize'));
-
-			# Check contents
-			if (!($nb = preg_match_all('/('.implode('|', $patterns).')/', implode(' ', $subjects), $_))) {
-				continue;
-			}
-
-			# Add module to result
-			if (!isset($sorter[$id])) {
-				$sorter[$id] = 0;
-				$result[$id] = $module;
-			}
-
-			# Increment matches count
-			$sorter[$id] += $nb;
-			$result[$id]['accuracy'] = $sorter[$id];
+			$module['id'] = $id;
+
+			# Loop through required module fields
+			foreach(self::$weighting as $field => $weight) {
+
+				# Skip fields which not exsist on module
+				if (empty($module[$field])) {
+					continue;
+				}
+
+				# Split field value into small clean word
+				if (!($subjects = self::patternize($module[$field]))) {
+					continue;
+				}
+
+				# Check contents
+				if (!($nb = preg_match_all('/('.implode('|', $patterns).')/', implode(' ', $subjects), $_))) {
+					continue;
+				}
+
+				# Add module to result
+				if (!isset($sorter[$id])) {
+					$sorter[$id] = 0;
+					$result[$id] = $module;
+				}
+
+				# Increment score by matches count * field weight
+				$sorter[$id] += $nb * $weight;
+				$result[$id]['score'] = $sorter[$id];
+			}
 		}
 		# Sort response by matches count
@@ -217,12 +233,21 @@
 
 	/**
-	 * Sanitize string.
+	 * Split and clean pattern.
 	 *
 	 * @param	string	$str		String to sanitize
-	 * @param	null	$_		Unused	param
-	 */
-	public static function sanitize(&$str, $_)
-	{
-		$str = strtolower(preg_replace('/[^A-Za-z0-9]/', '', $str));
+	 * @return	array	Array of cleaned pieces of string or false if none
+	 */
+	public static function patternize($str)
+	{
+		$arr = array();
+
+		foreach(explode(' ', $str) as $_) {
+			$_ = strtolower(preg_replace('/[^A-Za-z0-9]/', '', $_));
+			if (strlen($_) > 2) {
+				$arr[] = $_;
+			}
+		}
+
+		return empty($arr) ? false : $arr;
 	}
 
Index: inc/core/class.dc.store.reader.php
===================================================================
--- inc/core/class.dc.store.reader.php	(revision 2216)
+++ inc/core/class.dc.store.reader.php	(revision 2222)
@@ -15,4 +15,5 @@
 @ingroup DC_CORE
 @brief Repository modules XML feed reader
+@since 2.6
 
 Provides an object to parse XML feed of modules from repository.
