Index: .hgsubstate
===================================================================
--- .hgsubstate	(revision 175)
+++ .hgsubstate	(revision 229)
@@ -1,1 +1,1 @@
-264a6592718aee1e455d77db3a263167ae527c6f inc/libs/clearbricks
+bd72cbb91cb6afe95eaac12f181be19efcbfb72a inc/libs/clearbricks
Index: admin/categories.php
===================================================================
--- admin/categories.php	(revision 82)
+++ admin/categories.php	(revision 252)
@@ -130,5 +130,7 @@
 '<option value="0">'.__('Top level').'</option>';
 while ($rs->fetch()) {
-	echo '<option value="'.$rs->cat_id.'">'.str_repeat('&nbsp;&nbsp;',$rs->level).'&bull; '.html::escapeHTML($rs->cat_title).'</option>';
+	echo '<option value="'.$rs->cat_id.'">'.
+		str_repeat('&nbsp;&nbsp;',$rs->level-1).($categories->level-1 == 0 ? '' : '&bull; ').
+		html::escapeHTML($rs->cat_title).'</option>';
 }
 echo
Index: admin/category.php
===================================================================
--- admin/category.php	(revision 38)
+++ admin/category.php	(revision 252)
@@ -58,5 +58,5 @@
 		if (!isset($p[$rs->cat_id])) {
 			$allowed_parents[] = new formSelectOption(
-				str_repeat('&nbsp;&nbsp;',$rs->level-1).'&bull; '.html::escapeHTML($rs->cat_title),
+				str_repeat('&nbsp;&nbsp;',$rs->level-1).($rs->level-1 == 0 ? '' : '&bull; ').html::escapeHTML($rs->cat_title),
 				$rs->cat_id
 			);
Index: admin/index.php
===================================================================
--- admin/index.php	(revision 217)
+++ admin/index.php	(revision 252)
@@ -292,5 +292,6 @@
 			while ($categories->fetch()) {
 				$categories_combo[] = new formSelectOption(
-					str_repeat('&nbsp;&nbsp;',$categories->level-1).'&bull; '.html::escapeHTML($categories->cat_title),
+					str_repeat('&nbsp;&nbsp;',$categories->level-1).
+					($categories->level-1 == 0 ? '' : '&bull; ').html::escapeHTML($categories->cat_title),
 					$categories->cat_id
 				);
Index: admin/install/index.php
===================================================================
--- admin/install/index.php	(revision 199)
+++ admin/install/index.php	(revision 240)
@@ -191,5 +191,13 @@
 		$core->auth->user_prefs->dashboard->put('dcnews',true,'boolean','',null,true);
 		$core->auth->user_prefs->dashboard->put('quickentry',true,'boolean','',null,true);
-		
+
+		# Add accessibility options
+		$core->auth->user_prefs->addWorkspace('accessibility');
+		$core->auth->user_prefs->accessibility->put('nodragdrop',false,'boolean','',null,true);
+
+		# Add user interface options
+		$core->auth->user_prefs->addWorkspace('interface');
+		$core->auth->user_prefs->interface->put('enhanceduploader',false,'boolean','',null,true);
+
 		# Add default favorites
 		$core->auth->user_prefs->addWorkspace('favorites');
Index: admin/js/_index.js
===================================================================
--- admin/js/_index.js	(revision 3)
+++ admin/js/_index.js	(revision 234)
@@ -4,10 +4,10 @@
 		var contentTb = new jsToolBar($('#post_content',f)[0]);
 		contentTb.switchMode($('#post_format',f).val());
-		
+
 		$('input[name=save]',f).click(function() {
 			quickPost(f,-2);
 			return false;
 		});
-		
+
 		if ($('input[name=save-publish]',f).length > 0) {
 			var btn = $('<input type="submit" value="' + $('input[name=save-publish]',f).val() + '" tabindex="3" />');
@@ -19,10 +19,10 @@
 			});
 		}
-		
+
 		function quickPost(f,status) {
 			if (contentTb.getMode() == 'wysiwyg') {
 				contentTb.syncContents('iframe');
 			}
-			
+
 			var params = {
 				f: 'quickPost',
@@ -35,7 +35,7 @@
 				post_lang: $('#post_lang',f).val()
 			}
-			
+
 			$('p.qinfo',f).remove();
-			
+
 			$.post('services.php',params,function(data) {
 				if ($('rsp[status=failed]',data).length > 0) {
@@ -57,13 +57,13 @@
 					}
 				}
-				
+
 				$('fieldset',f).prepend(msg);
 			});
 		}
 	}
-	
+
 	// allow to hide quick entry div, and remember choice
 	$('#quick h3').toggleWithLegend($('#quick').children().not('h3'),{
 		cookie: 'dcx_quick_entry',
-	});
+	}, positionFooter);
 });
Index: admin/js/_media.js
===================================================================
--- admin/js/_media.js	(revision 224)
+++ admin/js/_media.js	(revision 250)
@@ -17,12 +17,5 @@
 	
 	if (!$.browser.opera) {
-		var cue = $('<a/>').attr({'id':'candyupload-enable','href':'#'}).append(dotclear.msg.activate_enhanced_uploader)
-		.click(function() {
-			candyUploadInit();
-			return false;
-		});
-		$('#media-upload>fieldset').append($('<div></div>').append(cue));
-		
-		if ($.cookie('dc_candy_upl') == 1) {
+		if (dotclear.candyUpload_force_init == '1') {
 			candyUploadInit();
 		}
@@ -43,16 +36,6 @@
 				createControls: function() {
 					var _this = this;
-					var cud = $('<a/>').attr({'id':'candyupload-disable','href':'#'}).append(dotclear.msg.disable_enhanced_uploader)
-					.click(function() {
-						_this.upldr.destroy();
-						_this.ctrl.block.empty().remove();
-						$('#media-upload').show();
-						delete _this;
-						$.cookie('dc_candy_upl','',{expires: -1});
-						return false;
-					});
 					this.ctrl.btn_browse.hide();
 					this.ctrl.msg.html(dotclear.msg.load_enhanced_uploader);
-					this.ctrl.disable = $('<div class="cu-disable"></div>').append(cud).appendTo(this.ctrl.block);
 				},
 				flashReady: function() {
@@ -67,5 +50,4 @@
 						});
 					});
-					this.ctrl.block.append(this.ctrl.disable);
 				},
 				uploadSuccess: function(o,data) {
Index: admin/js/common.js
===================================================================
--- admin/js/common.js	(revision 163)
+++ admin/js/common.js	(revision 234)
@@ -315,4 +315,29 @@
 	}
 };
+
+/* Sticky footer
+-------------------------------------------------------- */
+function positionFooter() {
+	$("#wrapper").css({ overflow: "auto" });
+	var page_height = $("#top").height() + $("#wrapper").height() - $("#footer").height();
+	if( page_height < $(window).height() ){
+		// calcul de la largeur
+		var page_width = $(document).width() - 30;
+		$("#footer").css({
+			position: "absolute",
+			bottom: "10px",
+			width: page_width+"px",
+			padding: ".75em 0",
+			marginbottom: "0"
+		});
+	} else {
+		$("#footer").css({
+			position: "static",
+			padding: ".75em 0",
+			width: "auto",
+		});
+	}
+
+}
 
 /* On document ready
@@ -367,28 +392,5 @@
 	// Sticky footer
 	positionFooter();
-	function positionFooter() {
-		$("#wrapper").css({ overflow: "auto" });
-		var page_height = $("#top").height() + $("#wrapper").height() - $("#footer").height();
-		if( page_height < $(window).height() ){
-			// calcul de la largeur
-			var page_width = $(document).width() - 30;
-			$("#footer").css({
-				position: "absolute",
-				bottom: "10px",
-				width: page_width+"px",
-				padding: ".75em 0",
-				marginbottom: "0"
-			});
-		} else {
-			$("#footer").css({
-				position: "static",
-				padding: ".75em 0",
-				width: "auto",
-			});
-		}
-
-	}
 	$(window).resize(positionFooter);
-
 });
 
Index: dmin/js/filters.js
===================================================================
--- admin/js/filters.js	(revision 226)
+++ 	(revision )
@@ -1,5 +1,0 @@
-$(function() {
-	$('#toggle-filters').click(function(e) {
-		$('#filters').toggle('slow');
-	});
-});
Index: admin/media.php
===================================================================
--- admin/media.php	(revision 217)
+++ admin/media.php	(revision 241)
@@ -242,7 +242,16 @@
 /* DISPLAY Main page
 -------------------------------------------------------- */
+$core->auth->user_prefs->addWorkspace('interface');
+$user_ui_enhanceduploader = $core->auth->user_prefs->interface->enhanceduploader;
+
 call_user_func($open_f,__('Media manager'),
+	'<script type="text/javascript">'."\n".
+	"//<![CDATA["."\n".
+	dcPage::jsVar('dotclear.candyUpload_force_init',$user_ui_enhanceduploader)."\n".
+	"//]]>".
+	"</script>".
 	dcPage::jsLoad('js/_media.js').
-	($core_media_writable ? dcPage::jsCandyUpload(array('d='.$d)) : ''));
+	(($user_ui_enhanceduploader && $core_media_writable) ? dcPage::jsCandyUpload(array('d='.$d)) : '')
+	);
 
 if (!empty($_GET['mkdok'])) {
@@ -337,6 +346,6 @@
 	'<input type="file" id="upfile" name="upfile" size="20" />'.
 	'</label></p>'.
-	'<p><label for="upfiletitle">'.__('Title:').form::field(array('upfiletitle'),35,255).'</label></p>'.
-	'<p><label for="upfilepriv" class="classic">'.form::checkbox(array('upfilepriv'),1).' '.
+	'<p><label for="upfiletitle">'.__('Title:').form::field(array('upfiletitle','upfiletitle'),35,255).'</label></p>'.
+	'<p><label for="upfilepriv" class="classic">'.form::checkbox(array('upfilepriv','upfilepriv'),1).' '.
 	__('Private').'</label></p>'.
 	'<p><input type="submit" value="'.__('send').'" />'.
@@ -352,5 +361,5 @@
 	$core->formNonce().
 	'<p><label for="newdir">'.__('Directory Name:').
-	form::field(array('newdir'),35,255).'</label></p>'.
+	form::field(array('newdir','newdir'),35,255).'</label></p>'.
 	'<p><input type="submit" value="'.__('Save').'" />'.
 	form::hidden(array('d'),html::escapeHTML($d)).'</p>'.
Index: admin/posts.php
===================================================================
--- admin/posts.php	(revision 242)
+++ admin/posts.php	(revision 252)
@@ -48,4 +48,5 @@
 	# Filter form we'll put in html_block
 	$users_combo = $categories_combo = array();
+	$users_combo['-'] = $categories_combo['-'] = '';
 	while ($users->fetch())
 	{
@@ -62,5 +63,5 @@
 	$categories_combo[__('None')] = 'NULL';
 	while ($categories->fetch()) {
-		$categories_combo[str_repeat('&nbsp;&nbsp;',$categories->level-1).'&bull; '.
+		$categories_combo[str_repeat('&nbsp;&nbsp;',$categories->level-1).($categories->level-1 == 0 ? '' : '&bull; ').
 			html::escapeHTML($categories->cat_title).
 			' ('.$categories->nb_post.')'] = $categories->cat_id;
@@ -68,4 +69,5 @@
 	
 	$status_combo = array(
+	'-' => ''
 	);
 	foreach ($core->blog->getAllPostStatus() as $k => $v) {
@@ -74,4 +76,5 @@
 	
 	$selected_combo = array(
+	'-' => '',
 	__('selected') => '1',
 	__('not selected') => '0'
@@ -79,8 +82,10 @@
 	
 	# Months array
+	$dt_m_combo['-'] = '';
 	while ($dates->fetch()) {
 		$dt_m_combo[dt::str('%B %Y',$dates->ts())] = $dates->year().$dates->month();
 	}
 	
+	$lang_combo['-'] = '';
 	while ($langs->fetch()) {
 		$lang_combo[$langs->post_lang] = $langs->post_lang;
@@ -133,4 +138,15 @@
 /* Get posts
 -------------------------------------------------------- */
+$user_id = !empty($_GET['user_id']) ?	$_GET['user_id'] : '';
+$cat_id = !empty($_GET['cat_id']) ?	$_GET['cat_id'] : '';
+$status = isset($_GET['status']) ?	$_GET['status'] : '';
+$selected = isset($_GET['selected']) ?	$_GET['selected'] : '';
+$month = !empty($_GET['month']) ?		$_GET['month'] : '';
+$lang = !empty($_GET['lang']) ?		$_GET['lang'] : '';
+$sortby = !empty($_GET['sortby']) ?	$_GET['sortby'] : 'post_dt';
+$order = !empty($_GET['order']) ?		$_GET['order'] : 'desc';
+
+$show_filters = false;
+
 $page = !empty($_GET['page']) ? (integer) $_GET['page'] : 1;
 $nb_per_page =  30;
@@ -143,55 +159,70 @@
 }
 
-$params = new ArrayObject();
 $params['limit'] = array((($page-1)*$nb_per_page),$nb_per_page);
 $params['no_content'] = true;
 
-$filterSet = new dcFilterSet('posts.php');
-class monthComboFilter extends comboFilter {
-	public function applyFilter($params) {
-		$month=$this->values[0];
-		$params['post_month'] = substr($month,4,2);
-		$params['post_year'] = substr($month,0,4);
-	}
-}
-$filterSet
-	->addFilter(new comboFilter(
-		'users',__('Author'), 'user', $users_combo))
-	->addFilter(new comboFilter(
-		'category',__('Category'), 'cat_id', $categories_combo))
-	->addFilter(new comboFilter(
-		'post_status',__('Status'), 'post_status', $status_combo,array('singleval' => 1)))
-	->addFilter(new comboFilter(
-		'post_selected',__('Selected'), 'post_selected', $selected_combo))
-	->addFilter(new comboFilter(
-		'lang',__('Lang'), 'post_lang', $lang_combo))
-	->addFilter(new monthComboFilter(
-		'month',__('Month'), 'post_month', $dt_m_combo,array('singleval' => 1)));
-$filterSet->setValues($_GET);
+# - User filter
+if ($user_id !== '' && in_array($user_id,$users_combo)) {
+	$params['user_id'] = $user_id;
+	$show_filters = true;
+}
+
+# - Categories filter
+if ($cat_id !== '' && in_array($cat_id,$categories_combo)) {
+	$params['cat_id'] = $cat_id;
+	$show_filters = true;
+}
+
+# - Status filter
+if ($status !== '' && in_array($status,$status_combo)) {
+	$params['post_status'] = $status;
+	$show_filters = true;
+}
+
+# - Selected filter
+if ($selected !== '' && in_array($selected,$selected_combo)) {
+	$params['post_selected'] = $selected;
+	$show_filters = true;
+}
+
+# - Month filter
+if ($month !== '' && in_array($month,$dt_m_combo)) {
+	$params['post_month'] = substr($month,4,2);
+	$params['post_year'] = substr($month,0,4);
+	$show_filters = true;
+}
+
+# - Lang filter
+if ($lang !== '' && in_array($lang,$lang_combo)) {
+	$params['post_lang'] = $lang;
+	$show_filters = true;
+}
+
+# - Sortby and order filter
+if ($sortby !== '' && in_array($sortby,$sortby_combo)) {
+	if ($order !== '' && in_array($order,$order_combo)) {
+		$params['order'] = $sortby.' '.$order;
+	}
+	
+	if ($sortby != 'post_dt' || $order != 'desc') {
+		$show_filters = true;
+	}
+}
 
 # Get posts
 try {
-	$nfparams = $params->getArrayCopy();
-	$filtered = $filterSet->applyFilters($params);
 	$posts = $core->blog->getPosts($params);
 	$counter = $core->blog->getPosts($params,true);
-	if ($filtered) {
-		$totalcounter = $core->blog->getPosts($nfparams,true);
-		$page_title = sprintf(__('Entries / %s filtered out of %s'),$counter->f(0),$totalcounter->f(0));
-	} else {
-		$page_title = __('Entries');
-	}
 	$post_list = new adminPostList($core,$posts,$counter->f(0));
 } catch (Exception $e) {
 	$core->error->add($e->getMessage());
 }
-
-$filterSet->setColumnsForm($post_list->getColumnsForm());
 
 /* DISPLAY
 -------------------------------------------------------- */
 $starting_script = dcPage::jsLoad('js/_posts_list.js');
-
-$starting_script = $filterSet->header();
+if (!$show_filters) {
+	$starting_script .= dcPage::jsLoad('js/filter-controls.js');
+}
 
 dcPage::open(__('Entries'),$starting_script);
@@ -200,9 +231,48 @@
 {
 	echo 
-	'<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; '.$page_title.'</h2>'.
+	'<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; '.__('Entries').'</h2>'.
 	'<p class="top-add"><a class="button add" href="post.php">'.__('New entry').'</a></p>';
-
-	$filterSet->display();
-
+	
+	if (!$show_filters) {
+		echo '<p><a id="filter-control" class="form-control" href="#">'.
+		__('Filters').'</a></p>';
+	}
+	
+	echo
+	'<form action="posts.php" method="get" id="filters-form">'.
+	'<fieldset><legend>'.__('Filters').'</legend>'.
+	'<div class="three-cols">'.
+	'<div class="col">'.
+	'<label for="user_id">'.__('Author:').
+	form::combo('user_id',$users_combo,$user_id).'</label> '.
+	'<label for="cat_id">'.__('Category:').
+	form::combo('cat_id',$categories_combo,$cat_id).'</label> '.
+	'<label for="status">'.__('Status:').
+	form::combo('status',$status_combo,$status).'</label> '.
+	'</div>'.
+	
+	'<div class="col">'.
+	'<label for="selected">'.__('Selected:').
+	form::combo('selected',$selected_combo,$selected).'</label> '.
+	'<label for="month">'.__('Month:').
+	form::combo('month',$dt_m_combo,$month).'</label> '.
+	'<label for="lang">'.__('Lang:').
+	form::combo('lang',$lang_combo,$lang).'</label> '.
+	'</div>'.
+	
+	'<div class="col">'.
+	'<p><label for="sortby">'.__('Order by:').
+	form::combo('sortby',$sortby_combo,$sortby).'</label> '.
+	'<label for="order">'.__('Sort:').
+	form::combo('order',$order_combo,$order).'</label></p>'.
+	'<p><label for="nb" class="classic">'.	form::field('nb',3,3,$nb_per_page).' '.
+	__('Entries per page').'</label></p> '.
+	'<p><input type="submit" value="'.__('Apply filters').'" /></p>'.
+	'</div>'.
+	'</div>'.
+	'<br class="clear" />'. //Opera sucks
+	'</fieldset>'.
+	'</form>';
+	
 	# Show posts
 	$post_list->display($page,$nb_per_page,
@@ -217,5 +287,14 @@
 	form::combo('action',$combo_action).
 	'<input type="submit" value="'.__('ok').'" /></p>'.
-	$filterSet->getFormFieldsAsHidden().
+	form::hidden(array('user_id'),$user_id).
+	form::hidden(array('cat_id'),$cat_id).
+	form::hidden(array('status'),$status).
+	form::hidden(array('selected'),$selected).
+	form::hidden(array('month'),$month).
+	form::hidden(array('lang'),$lang).
+	form::hidden(array('sortby'),$sortby).
+	form::hidden(array('order'),$order).
+	form::hidden(array('page'),$page).
+	form::hidden(array('nb'),$nb_per_page).
 	$core->formNonce().
 	'</div>'.
Index: admin/posts_actions.php
===================================================================
--- admin/posts_actions.php	(revision 217)
+++ admin/posts_actions.php	(revision 252)
@@ -216,5 +216,6 @@
 		while ($categories->fetch()) {
 			$categories_combo[] = new formSelectOption(
-				str_repeat('&nbsp;&nbsp;',$categories->level-1).'&bull; '.html::escapeHTML($categories->cat_title),
+				str_repeat('&nbsp;&nbsp;',$categories->level-1).
+				($categories->level-1 == 0 ? '' : '&bull; ').html::escapeHTML($categories->cat_title),
 				$categories->cat_id
 			);
Index: admin/preferences.php
===================================================================
--- admin/preferences.php	(revision 190)
+++ admin/preferences.php	(revision 247)
@@ -34,7 +34,13 @@
 
 $core->auth->user_prefs->addWorkspace('accessibility');
-$user_dm_nodragdrop = $core->auth->user_prefs->accessibility->nodragdrop;
-
-$default_tab = 'user-profile';
+$user_acc_nodragdrop = $core->auth->user_prefs->accessibility->nodragdrop;
+
+$core->auth->user_prefs->addWorkspace('interface');
+$user_ui_enhanceduploader = $core->auth->user_prefs->interface->enhanceduploader;
+if ($core->auth->isSuperAdmin()) {
+	$user_ui_hide_std_favicon = $core->auth->user_prefs->interface->hide_std_favicon;
+}
+
+$default_tab = !empty($_GET['tab']) ? html::escapeHTML($_GET['tab']) : 'user-profile';
 
 if (!empty($_GET['append']) || !empty($_GET['removed']) || !empty($_GET['neworder']) || !empty($_GET['replaced'])) {
@@ -42,4 +48,7 @@
 } elseif (!empty($_GET['updated'])) {
 	$default_tab = 'user-options';
+}
+if (($default_tab != 'user-profile') && ($default_tab != 'user-options') && ($default_tab != 'user-favorites')) {
+	$default_tab = 'user-profile';
 }
 
@@ -144,5 +153,10 @@
 		$core->auth->user_prefs->dashboard->put('dcnews',!empty($_POST['user_dm_dcnews']),'boolean');
 		$core->auth->user_prefs->dashboard->put('quickentry',!empty($_POST['user_dm_quickentry']),'boolean');
-		$core->auth->user_prefs->accessibility->put('nodragdrop',!empty($_POST['user_dm_nodragdrop']),'boolean');
+		$core->auth->user_prefs->accessibility->put('nodragdrop',!empty($_POST['user_acc_nodragdrop']),'boolean');
+		$core->auth->user_prefs->interface->put('enhanceduploader',!empty($_POST['user_ui_enhanceduploader']),'boolean');
+		if ($core->auth->isSuperAdmin()) {
+			# Applied to all users
+			$core->auth->user_prefs->interface->put('hide_std_favicon',!empty($_POST['user_ui_hide_std_favicon']),'boolean',null,true,true);
+		}
 		
 		# Udate user
@@ -292,5 +306,5 @@
 dcPage::open($page_title,
 	dcPage::jsLoad('js/_preferences.js').
-	($user_dm_nodragdrop ? '' : dcPage::jsLoad('js/_preferences-dragdrop.js')).
+	($user_acc_nodragdrop ? '' : dcPage::jsLoad('js/_preferences-dragdrop.js')).
 	dcPage::jsLoad('js/jquery/jquery-ui-1.8.12.custom.min.js').
 	dcPage::jsPageTabs($default_tab).
@@ -322,4 +336,6 @@
 echo '<h2>'.$page_title.'</h2>';
 
+$tabindex = 2;
+
 # User profile
 echo '<div class="multi-part" id="user-profile" title="'.__('My profile').'">';
@@ -331,17 +347,17 @@
 '<div class="col">'.
 '<p><label for="user_name">'.__('Last Name:').
-form::field('user_name',20,255,html::escapeHTML($user_name),'',2).'</label></p>'.
+form::field('user_name',20,255,html::escapeHTML($user_name),'',$tabindex++).'</label></p>'.
 
 '<p><label for="user_firstname">'.__('First Name:').
-form::field('user_firstname',20,255,html::escapeHTML($user_firstname),'',3).'</label></p>'.
+form::field('user_firstname',20,255,html::escapeHTML($user_firstname),'',$tabindex++).'</label></p>'.
 
 '<p><label for="user_displayname">'.__('Display name:').
-form::field('user_displayname',20,255,html::escapeHTML($user_displayname),'',4).'</label></p>'.
+form::field('user_displayname',20,255,html::escapeHTML($user_displayname),'',$tabindex++).'</label></p>'.
 
 '<p><label for="user_email">'.__('Email:').
-form::field('user_email',20,255,html::escapeHTML($user_email),'',5).'</label></p>'.
+form::field('user_email',20,255,html::escapeHTML($user_email),'',$tabindex++).'</label></p>'.
 
 '<p><label for="user_url">'.__('URL:').
-form::field('user_url',30,255,html::escapeHTML($user_url),'',6).'</label></p>'.
+form::field('user_url',30,255,html::escapeHTML($user_url),'',$tabindex++).'</label></p>'.
 
 '</div>'.
@@ -350,8 +366,8 @@
 
 '<p><label for="user_lang">'.__('User language:').
-form::combo('user_lang',$lang_combo,$user_lang,'l10n',10).'</label></p>'.
+form::combo('user_lang',$lang_combo,$user_lang,'l10n',$tabindex++).'</label></p>'.
 
 '<p><label for="user_tz">'.__('User timezone:').
-form::combo('user_tz',dt::getZones(true,true),$user_tz,'',11).'</label></p>'.
+form::combo('user_tz',dt::getZones(true,true),$user_tz,'',$tabindex++).'</label></p>'.
 
 '</div>'.
@@ -367,8 +383,8 @@
 	
 	'<p><label for="new_pwd">'.__('New password:').
-	form::password('new_pwd',20,255,'','',30).'</label></p>'.
+	form::password('new_pwd',20,255,'','',$tabindex++).'</label></p>'.
 	
 	'<p><label for="new_pwd_c">'.__('Confirm password:').
-	form::password('new_pwd_c',20,255,'','',31).'</label></p>'.
+	form::password('new_pwd_c',20,255,'','',$tabindex++).'</label></p>'.
 	'</fieldset>'.
 	
@@ -376,5 +392,5 @@
 	'<p>'.__('If you want to change your email or password you must provide your current password.').'</p>'.
 	'<p><label for="cur_pwd">'.__('Your password:').
-	form::password('cur_pwd',20,255,'','',32).'</label></p>'.
+	form::password('cur_pwd',20,255,'','',$tabindex++).'</label></p>'.
 	'</fieldset>';
 }
@@ -396,15 +412,29 @@
 
 '<p><label for="user_post_format">'.__('Preferred format:').
-form::combo('user_post_format',$formaters_combo,$user_options['post_format'],'',7).'</label></p>'.
+form::combo('user_post_format',$formaters_combo,$user_options['post_format'],'',$tabindex++).'</label></p>'.
 
 '<p><label for="user_post_status">'.__('Default entry status:').
-form::combo('user_post_status',$status_combo,$user_post_status,'',8).'</label></p>'.
+form::combo('user_post_status',$status_combo,$user_post_status,'',$tabindex++).'</label></p>'.
 
 '<p><label for="user_edit_size">'.__('Entry edit field height:').
-form::field('user_edit_size',5,4,(integer) $user_options['edit_size'],'',9).'</label></p>'.
+form::field('user_edit_size',5,4,(integer) $user_options['edit_size'],'',$tabindex++).'</label></p>'.
 
 '<p><label for="user_wysiwyg" class="classic">'.
-form::checkbox('user_wysiwyg',1,$user_options['enable_wysiwyg'],'',12).' '.
+form::checkbox('user_wysiwyg',1,$user_options['enable_wysiwyg'],'',$tabindex++).' '.
 __('Enable WYSIWYG mode').'</label></p>'.
+
+'<p><label for="user_ui_enhanceduploader" class="classic">'.
+form::checkbox('user_ui_enhanceduploader',1,$user_ui_enhanceduploader,'',$tabindex++).' '.
+__('Activate enhanced uploader in media manager').'</label></p>';
+
+if ($core->auth->isSuperAdmin()) {
+	echo
+	'<p><label for="user_ui_hide_std_favicon" class="classic">'.
+	form::checkbox('user_ui_hide_std_favicon',1,$user_ui_hide_std_favicon,'',$tabindex++).' '.
+	__('Do not use standard favicon').'</label></p>'.
+	'<p class="clear form-note info">'.__('This will be applied for all users').'</p>';
+}
+
+echo 
 '<br class="clear" />'. //Opera sucks
 '</fieldset>';
@@ -413,6 +443,6 @@
 '<fieldset><legend>'.__('Accessibility options').'</legend>'.
 
-'<p><label for="user_dm_nodragdrop" class="classic">'.
-form::checkbox('user_dm_nodragdrop',1,$user_dm_nodragdrop,'',13).' '.
+'<p><label for="user_acc_nodragdrop" class="classic">'.
+form::checkbox('user_acc_nodragdrop',1,$user_acc_nodragdrop,'',$tabindex++).' '.
 __('Disable javascript powered drag and drop for ordering items').'</label></p>'.
 
@@ -424,13 +454,13 @@
 
 '<p><label for="user_dm_doclinks" class="classic">'.
-form::checkbox('user_dm_doclinks',1,$user_dm_doclinks,'',14).' '.
+form::checkbox('user_dm_doclinks',1,$user_dm_doclinks,'',$tabindex++).' '.
 __('Display documentation links').'</label></p>'.
 
 '<p><label for="user_dm_dcnews" class="classic">'.
-form::checkbox('user_dm_dcnews',1,$user_dm_dcnews,'',15).' '.
+form::checkbox('user_dm_dcnews',1,$user_dm_dcnews,'',$tabindex++).' '.
 __('Display Dotclear news').'</label></p>'.
 
 '<p><label for="user_dm_quickentry" class="classic">'.
-form::checkbox('user_dm_quickentry',1,$user_dm_quickentry,'',16).' '.
+form::checkbox('user_dm_quickentry',1,$user_dm_quickentry,'',$tabindex++).' '.
 __('Display quick entry form').'</label></p>'.
 
Index: admin/style/default.css
===================================================================
--- admin/style/default.css	(revision 251)
+++ admin/style/default.css	(revision 217)
@@ -1080,7 +1080,4 @@
 label input, label select, label span {
 	display: block;
-}
-#filters-form label {
-	display: inline;
 }
 p.form-note {
@@ -1303,23 +1300,2 @@
 	background-color: #2373A8;
 }
-
-form#filters {font-size: 100%; background: #f0f0f0; padding: 1em; border-radius: .5em; border: 1px solid #ddd;}
-form#filters .margintop {padding-top: 1.33em;}
-form#filters ul {list-style-type:none;margin: 0; padding: 0; margin-left: 1em;}
-form#filters .col30 {border-left: 1px solid #999;}
-form#filters .col30 h3 {margin-left: 1em;}
-p.line, li.line { position: relative; padding: 3px 0 0 28px; margin: 0 0 1em 0;}
-p.line input[type=submit] {position: absolute; left:0;top:0; padding: 0 .1em; margin: 0;}
-p.line input[type=checkbox], li.line input[type=checkbox] {position: absolute; left: 0; top: .2em; padding: 0 .1em; margin: 0;}
-p.line select { margin-right: 2em;}
-p.line label { display: block; width: 8em; float: left;}
-p.line label img {margin-right: 8px;}
-p.line label.or {
-	text-align: right;
-	margin-left: 5em;
-	font-weight: bold;
-}
-p.line label.or + select {margin-left: 2em;}
-li.line { padding: 0 0 0 20px; height: 1em;}
-li.line label {width: auto;}
-#available_filters input[type=submit] {padding: 0 .1em; margin-left: .5em;}
Index: admin/user.php
===================================================================
--- admin/user.php	(revision 181)
+++ admin/user.php	(revision 230)
@@ -236,9 +236,9 @@
 '</label></p>'.
 
-'<p><label>'.__('Entry edit field height:').' '.
+'<p><label for="user_edit_size">'.__('Entry edit field height:').' '.
 form::field('user_edit_size',5,4,(integer) $user_options['edit_size'],'',12).
 '</label></p>'.
 
-'<p><label for="user_edit_size">'.__('User language:').' '.
+'<p><label for="user_lang">'.__('User language:').' '.
 form::combo('user_lang',$lang_combo,$user_lang,'l10n',13).
 '</label></p>'.
Index: nc/admin/class.dc.filter.php
===================================================================
--- inc/admin/class.dc.filter.php	(revision 242)
+++ 	(revision )
@@ -1,273 +1,0 @@
-<?php
-# ***** BEGIN LICENSE BLOCK *****
-# This file is part of DotClear "MyPostTypes" plugin.
-# Copyright (c) 2010 Bruno Hondelatte, and contributors. 
-# Many, many thanks to Olivier Meunier and the Dotclear Team.
-# All rights reserved.
-#
-# MyPostTypes plugin for DC2 is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-# 
-# DotClear is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with DotClear; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-#
-# ***** END LICENSE BLOCK *****
-
-class dcFilterSet {
-
-	protected $filters;
-	protected $form_prefix;
-	protected $action;
-	protected $hideform;
-	protected $columns_form;
-	
-	public function __construct($action,$form_prefix="f_") {
-		$this->form_prefix=$form_prefix;
-		$this->filters = array();
-		$this->action = $action;
-	}
-
-	public function addFilter (Filter $filter) {
-		$filter->setFormPrefix($this->form_prefix);
-		$this->filters[$filter->id] = $filter;
-		return $this;
-	}
-
-	// Retrieves filter values from context
-	public function setValues ($form_data) {
-		$this->hideform = true;
-		if (isset($form_data['clear_filters']))
-			return;
-		foreach ($this->filters as $filter) {
-			$filter->setValues ($form_data);
-			if ($filter->isEnabled())
-				$this->hideform=false;
-		}
-		if (isset($form_data['add_filter']) && isset($this->filters[$form_data['add_filter']])) {
-			$this->filters[$form_data['add_filter']]->add();
-		}
-	}
-	
-	public function setColumnsForm($html)
-	{
-		$this->columns_form = $html;
-	}
-	
-	public function getFormFieldsAsHidden() {
-		$ret='';
-		foreach ($this->filters as $filter) {
-			$ret.= $filter->getFormFieldAsHidden();
-		}
-		return $ret;
-	}
-
-	public function getForm($action,$extra_content,$method="get",$nb_cols=3) {
-		$ret = '';
-		/*if ($this->hideform) {
-			$ret .= '<p><a id="filter-control" class="form-control" href="#">'.
-			__('Filters').'</a></p>';
-		}*/
-		$ret .= '<p><img alt="" src="minus.png"/> <a href="#" id="toggle-filters">'.__('Toggle filters and display options').'</a></p>';
-		$ret .=
-			'<div class="two-cols">'.
-			'<form id="filters" action="'.$this->action.'" method="get" id="filters-form">'.
-			'<div class="col70">'.
-			'<h3>'.__('Entries filters').'</h3>';
-			
-		$count=0;
-		$form_combo=array();
-		$form_combo['-']='';
-		foreach ($this->filters as $filter) {
-			if ($filter->isEnabled()) {
-				$ret .= $filter->getFormLine();
-			}
-			$form_combo[$filter->desc]=$filter->id;
-			$count++;
-		}
-		$ret .= 
-			'<p class="clear"><input class="delete" type="submit" value="'.__('Delete all filters').'" name="clear_filters"></p>'.
-			'<h3 class="margintop">'.__('Add a filter').'</h3>'.
-			'<p id="available_filters">'.
-			form::combo("add_filter",$form_combo).
-			'<input type="submit" value=" + " title="'.__('Add this filter').'" name="apply">'.
-			'</p>'.
-			'</div>'.
-			'<div class="col30">'.
-			$this->columns_form.
-			'</div>'.
-			'<p class="clear margintop"><input type="submit" value="'.__('Apply filters and display options').'" name="apply"></p>'.
-
-			'</form></div>';
-		return $ret;
-	}
-
-	public function header() {
-		return dcPage::jsLoad('js/filters.js');
-	}
-	public function display() {
-		echo $this->getForm("#","");
-	}
-
-	public function applyFilters($params) {
-		$filtered = false;
-		foreach ($this->filters as $filter) {
-			if ($filter->isEnabled()) {
-				$filter->applyFilter($params);
-				$filtered = true;
-			}
-		}
-		return $filtered;
-	}
-	
-}
-
-
-abstract class Filter {
-	public $id;
-	public $desc;
-	protected $request_param;
-	protected $enabled;
-	protected $values;
-	public $field_id;
-	
-	
-	public function __construct ($id,$desc,$request_param) {
-		$this->id = $id;
-		$this->desc = $desc;
-		$this->request_param = $request_param;
-		$this->enabled=false;
-		$this->values = array();
-		$this->field_id = $this->id;
-	}
-	
-	protected function getFieldId($pos=0) {
-		if ($pos == 0) {
-			return $this->field_id;
-		} else {
-			return $this->field_id.'_'.$pos;
-		}
-	}
-	
-	public function isEnabled() {
-		return $this->enabled;
-	}
-	
-	public function add() {
-		$this->enabled = true;
-	}
-	
-	public function setFormPrefix($prefix) {
-		$this->field_id = $prefix.$this->id;
-	}
-	
-	public abstract function getType();
-	
-	public function getFormFields() {
-		return '';
-	}
-
-	public function setValues($form_data) {
-/*		if (isset($form_data['c_'.$this->field_id])) {
-			$this->enabled = true;
-		}*/
-		$count=0;
-		while (isset($form_data[$this->getFieldId($count)])) {
-			if (!isset($form_data['del_'.$this->getFieldId($count)])) {
-				$this->values[] = $form_data[$this->getFieldId($count)];
-				$this->enabled = true;
-			}
-			$count++;
-		}
-	}
-	
-	public function getFormFieldAsHidden () {
-		$ret='';
-		for ($cur=0; $cur < count($this->values); $cur++) {
-			$ret .= form::hidden($this->getFieldId($cur), $this->values[$cur]);
-		}
-	}
-	public function getFormLine() {
-		$ret="";
-		for ($cur=0; $cur < count($this->values); $cur++) {
-			$ret .= '<p id="'.$this->getFieldId($cur).'" class="line" title="'.$this->desc.'">'.
-				$this->getFormFields($cur).
-				'<input id="del_'.$this->getFieldId($cur).'" class="delete" '.
-				'type="submit" title="Delete this filter" value=" - " name="del_'.$this->getFieldId($cur).'"/>'.
-				'</p>';
-		}
-		return $ret;
-	}
-	
-	public function applyFilter($params) {
-	}
-	
-}
-
-class comboFilter extends Filter {
-	protected $options;
-	protected $default;
-	protected $no_value;
-	protected $verb;
-	protected $extra;
-	
-	public function __construct($id,$desc,$request_param,$options,$extra=array()) {
-		parent::__construct($id,$desc,$request_param);
-		$this->options = $options;
-		$this->extra = $extra;
-		$this->desc = $desc;
-		$this->verb = "is";
-		$this->values=array();
-	}
-	
-	public function add() {
-		parent::add();
-		if (isset($this->extra['singleval']) && (count($this->values) > 0))
-			return;
-		$this->values[]=current($this->options);
-	}
-	
-	public function getType() {
-		return "combo";
-	}
-	
-	public function setValues($form_data) {
-		parent::setValues($form_data);
-		if (isset($form_data[$this->field_id."_v"])) {
-			$this->verb = $form_data[$this->field_id."_v"] == 'is' ? 'is' : 'isnot';
-		}
-	}
-
-	public function getFormFieldAsHidden () {
-		return parent::getFormFieldAsHidden().form::hidden($this->field_id."_v",$this->verb);
-	}
-
-	public function getFormFields($pos=0) {
-		
-		if ($pos == 0) {
-			$desc = $this->desc.' : ';
-			$labelclass="";
-		} else {
-			$desc = __('or');
-			$labelclass = ' class="or"';
-		};
-		return '<label for="'.$this->getFieldId($pos).'"'.$labelclass.'>'.$desc.'</label>'.
-			(($pos == 0) ?form::combo($this->field_id.'_v',array(__('is')=>'is',__('is not')=>'isnot'),$this->verb) : '').
-			form::combo($this->getFieldId($pos),$this->options,$this->values[$pos]);
-	}
-	
-	public function applyFilter($params) {
-		if (isset($this->extra['singleval']))
-			$params[$this->request_param]=$this->values[0];
-		else
-			$params[$this->request_param]=$this->values;
-	}
-}
-?>
Index: inc/admin/lib.dc.page.php
===================================================================
--- inc/admin/lib.dc.page.php	(revision 224)
+++ inc/admin/lib.dc.page.php	(revision 244)
@@ -101,4 +101,10 @@
 		if (l10n::getTextDirection($GLOBALS['_lang']) == 'rtl') {
 			echo '  <style type="text/css">'."\n".'  @import "style/default-rtl.css";'."\n"."  </style>\n";
+		}
+
+		$core->auth->user_prefs->addWorkspace('interface');
+		$user_ui_hide_std_favicon = $core->auth->user_prefs->interface->hide_std_favicon;
+		if (!$user_ui_hide_std_favicon) {
+			echo '<link rel="icon" type="image/png" href="images/favicon.png" />';
 		}
 		
Index: inc/admin/lib.pager.php
===================================================================
--- inc/admin/lib.pager.php	(revision 246)
+++ inc/admin/lib.pager.php	(revision 0)
@@ -12,77 +12,4 @@
 if (!defined('DC_RC_PATH')) { return; }
 
-class adminGenericColumn
-{
-	protected $core;
-	protected $rs;
-	protected $id;
-	protected $title;
-	protected $callback;
-	protected $html;
-	protected $order;
-	protected $visibility;
-	
-	public function __construct($id,$title,$callback,$html = null,$order = null)
-	{
-		if (!is_string($id) || $id === '') {
-			throw new Exception(__('Invalid column ID'));
-		}
-		
-		if (!is_string($title)) {
-			throw new Exception(__('Invalid column title'));
-		}
-		
-		if (is_null($html) || !is_string($html)) {
-			$html = '';
-		}
-		if (!empty($html)) {
-			$html = ' '.$html;
-		}
-		
-		if (!is_int($order)) {
-			$order = null;
-		}
-		
-		try {
-			if (!is_array($callback) || count($callback) < 2) {
-				throw new Exception(__('Callback parameter should be an array'));
-			}
-			$r = new ReflectionClass($callback[0]);
-			$f = $r->getMethod($callback[1]);
-			$p = $r->getParentClass();
-			if (!$p || $p->name != 'adminGenericList') {
-				throw new Exception(__('Callback class should be inherited of adminGenericList class'));
-			}
-		}
-		catch (Exception $e) {
-			throw new Exception(sprintf(__('Invalid column callback: %s'),$e->getMessage()));
-		}
-		
-		$this->id = $id;
-		$this->title = $title;
-		$this->callback = $callback;
-		$this->html = $html;
-		$this->order = $order;
-		$this->visibility = true;
-	}
-	
-	public function getInfo($k)
-	{
-		return property_exists(get_class($this),$k) ? $this->{$k} : null;
-	}
-	
-	public function setVisibility($visibility)
-	{
-		if (is_bool($visibility)) {
-			$this->visibility = $visibility;
-		}
-	}
-	
-	public function isVisible()
-	{
-		return $this->visibility;
-	}
-}
-
 class adminGenericList
 {
@@ -90,5 +17,4 @@
 	protected $rs;
 	protected $rs_count;
-	protected $columns;
 	
 	public function __construct($core,$rs,$rs_count)
@@ -97,104 +23,11 @@
 		$this->rs =& $rs;
 		$this->rs_count = $rs_count;
-		$this->context = get_class($this);
-		$this->columns = array();
-		$this->form_prefix = 'col_%s';
-		$this->form_trigger = 'add_filter';
-		
 		$this->html_prev = __('&#171;prev.');
 		$this->html_next = __('next&#187;');
-		
-		# Post columns
-		$this->addColumn('adminPostList','title',__('Title'),array('adminPostList','getTitle'));
-		$this->addColumn('adminPostList','date',__('Date'),array('adminPostList','getDate'));
-		$this->addColumn('adminPostList','category',__('Category'),array('adminPostList','getCategory'));
-		$this->addColumn('adminPostList','author',__('Author'),array('adminPostList','getAuthor'));
-		$this->addColumn('adminPostList','comment',__('Comments'),array('adminPostList','getComments'));
-		$this->addColumn('adminPostList','trackback',__('Trackbacks'),array('adminPostList','getTrackbacks'));
-		$this->addColumn('adminPostList','status',__('Status'),array('adminPostList','getStatus'));
-		
-		# Post (mini list) columns
-		$this->addColumn('adminPostMiniList','title',__('Title'),array('adminPostList','getTitle'));
-		$this->addColumn('adminPostMiniList','date',__('Date'),array('adminPostList','getDate'));
-		$this->addColumn('adminPostMiniList','author',__('Author'),array('adminPostList','getAuthor'));
-		$this->addColumn('adminPostMiniList','status',__('Status'),array('adminPostList','getStatus'));
-		
-		# Comment columns
-		$this->addColumn('adminCommentList','title',__('Title'),array('adminCommentList','getTitle'));
-		$this->addColumn('adminCommentList','date',__('Date'),array('adminCommentList','getDate'));
-		$this->addColumn('adminCommentList','author',__('Author'),array('adminCommentList','getAuthor'));
-		$this->addColumn('adminCommentList','type',__('Type'),array('adminCommentList','getType'));
-		$this->addColumn('adminCommentList','status',__('Status'),array('adminCommentList','getStatus'));
-		$this->addColumn('adminCommentList','edit','',array('adminCommentList','getEdit'));
-		
-		# User columns
-		$this->addColumn('adminUserList','username',__('Username'),array('adminUserList','getUserName'));
-		$this->addColumn('adminUserList','firstname',__('First name'),array('adminUserList','getFirstName'));
-		$this->addColumn('adminUserList','lastname',__('Last name'),array('adminUserList','getLastName'));
-		$this->addColumn('adminUserList','displayname',__('Display name'),array('adminUserList','getDisplayName'));
-		$this->addColumn('adminUserList','entries',__('Entries'),array('adminUserList','getEntries'));
-		
-		$this->setColumnsVisibility();
-		
-		$core->callBehavior('adminGenericListConstruct',$this);
-	}
-	
-	public function addColumn($context,$id,$title,$callback,$html = null,$order = null)
-	{
-		try {
-			if (!array_key_exists($context,$this->columns)) {
-				$this->columns[$context] = array();
-			}
-			
-			$c = new adminGenericColumn($id,$title,$callback,$html,$order);
-			$this->columns[$context][$c->getInfo('id')] = $c;
-		}
-		catch (Exception $e) {
-			if (DC_DEBUG) {
-				$this->core->error->add($e->getMessage());
-			}
-		}
-	}
-	
-	public function setColumnsVisibility()
-	{
-		$ws = $this->core->auth->user_prefs->addWorkspace('lists');
-		
-		$user_pref = !is_null($ws->{$this->context}) ? unserialize($ws->{$this->context}) : array();
-		
-		foreach ($this->columns[$this->context] as $k => $v) {
-			$visibility =  array_key_exists($k,$user_pref) ? $user_pref[$k] : true;
-			if (array_key_exists($this->form_trigger,$_REQUEST)) {
-				$key = sprintf($this->form_prefix,$k);
-				$visibility = !array_key_exists($key,$_REQUEST) ? false : true;
-			}
-			$v->setVisibility($visibility);
-			$user_pref[$k] = $visibility;
-		}
-		
-		if (array_key_exists($this->form_trigger,$_REQUEST)) {
-			$this->core->auth->user_prefs->lists->put($this->context,serialize($user_pref),'string');
-		}
-	}
-	
-	public function getColumnsForm()
-	{
-		$block = 
-		'<h3>'.__('Displayed information').'</h3>'.
-		'<ul>%s</ul>';
-		
-		$list = array();
-		
-		foreach ($this->columns[$this->context] as $k => $v) {
-			$col_id = sprintf($this->form_prefix,$k);
-			$col_label = sprintf('<label for="%s">%s</label>',$col_id,$v->getInfo('title'));
-			$col_html = sprintf('<li class="line">%s</li>',$col_label.form::checkbox($col_id,1,$v->isVisible()));
-			
-			array_push($list,$col_html);
-		}
-		
-		return !empty($list) ? sprintf($block,implode('',$list)) : '';
-	}
-	
+	}
+}
+
+class adminPostList extends adminGenericList
+{
 	public function display($page,$nb_per_page,$enclose_block='')
 	{
@@ -210,13 +43,14 @@
 			$pager->var_page = 'page';
 			
-			$html_block = '<table class="clear"><tr>';
-			
-			foreach ($this->columns[$this->context] as $k => $v) {
-				if ($v->isVisible()) {
-					$html_block .= sprintf('<th%s>%s</th>',$v->getInfo('html'),$v->getInfo('title'));
-				}
-			}
-			
-			$html_block .= '</tr>%s</table>';
+			$html_block =
+			'<table class="clear"><tr>'.
+			'<th colspan="2">'.__('Title').'</th>'.
+			'<th>'.__('Date').'</th>'.
+			'<th>'.__('Category').'</th>'.
+			'<th>'.__('Author').'</th>'.
+			'<th>'.__('Comments').'</th>'.
+			'<th>'.__('Trackbacks').'</th>'.
+			'<th>'.__('Status').'</th>'.
+			'</tr>%s</table>';
 			
 			if ($enclose_block) {
@@ -232,5 +66,5 @@
 			while ($this->rs->fetch())
 			{
-				echo $this->displayLine();
+				echo $this->postLine();
 			}
 			
@@ -241,49 +75,5 @@
 	}
 	
-	private function displayLine()
-	{
-		$res = '';
-		
-		foreach ($this->columns[$this->context] as $k => $v) {
-			if ($v->isVisible()) {
-				$c = $v->getInfo('callback');
-				$func = $c[1];
-				$res .= $this->{$c[1]}();
-			}
-		}
-		
-		return sprintf($this->getDefaultLine(),$res);
-	}
-	
-	protected function getDefaultLine()
-	{
-		return '<tr class="line">%s</tr>';
-	}
-}
-
-class adminPostList extends adminGenericList
-{
-	protected function getDefaultLine()
-	{
-		return
-		'<tr class="line'.($this->rs->post_status != 1 ? ' offline' : '').'"'.
-		' id="p'.$this->rs->post_id.'">%s</tr>';
-	}
-	
-	protected function getTitle()
-	{
-		return
-		'<td class="maximal">'.
-		form::checkbox(array('entries[]'),$this->rs->post_id,'','','',!$this->rs->isEditable()).'&nbsp'.
-		'<a href="'.$this->core->getPostAdminURL($this->rs->post_type,$this->rs->post_id).'">'.
-		html::escapeHTML($this->rs->post_title).'</a></td>';
-	}
-	
-	protected function getDate()
-	{
-		return '<td class="nowrap">'.dt::dt2str(__('%Y-%m-%d %H:%M'),$this->rs->post_dt).'</td>';
-	}
-	
-	protected function getCategory()
+	private function postLine()
 	{
 		if ($this->core->auth->check('categories',$this->core->blog->id)) {
@@ -300,24 +90,4 @@
 		}
 		
-		return '<td class="nowrap">'.$cat_title.'</td>';
-	}
-	
-	protected function getAuthor()
-	{
-		return '<td class="nowrap">'.$this->rs->user_id.'</td>';
-	}
-	
-	protected function getComments()
-	{
-		return '<td class="nowrap">'.$this->rs->nb_comment.'</td>';
-	}
-	
-	protected function getTrackbacks()
-	{
-		return '<td class="nowrap">'.$this->rs->nb_trackback.'</td>';
-	}
-	
-	protected function getStatus()
-	{
 		$img = '<img alt="%1$s" title="%1$s" src="images/%2$s" />';
 		switch ($this->rs->post_status) {
@@ -353,37 +123,166 @@
 		}
 		
-		return '<td class="nowrap status">'.$img_status.' '.$selected.' '.$protected.' '.$attach.'</td>';
+		$res = '<tr class="line'.($this->rs->post_status != 1 ? ' offline' : '').'"'.
+		' id="p'.$this->rs->post_id.'">';
+		
+		$res .=
+		'<td class="nowrap">'.
+		form::checkbox(array('entries[]'),$this->rs->post_id,'','','',!$this->rs->isEditable()).'</td>'.
+		'<td class="maximal"><a href="'.$this->core->getPostAdminURL($this->rs->post_type,$this->rs->post_id).'">'.
+		html::escapeHTML($this->rs->post_title).'</a></td>'.
+		'<td class="nowrap">'.dt::dt2str(__('%Y-%m-%d %H:%M'),$this->rs->post_dt).'</td>'.
+		'<td class="nowrap">'.$cat_title.'</td>'.
+		'<td class="nowrap">'.$this->rs->user_id.'</td>'.
+		'<td class="nowrap">'.$this->rs->nb_comment.'</td>'.
+		'<td class="nowrap">'.$this->rs->nb_trackback.'</td>'.
+		'<td class="nowrap status">'.$img_status.' '.$selected.' '.$protected.' '.$attach.'</td>'.
+		'</tr>';
+		
+		return $res;
 	}
 }
 
-class adminPostMiniList extends adminPostList{}
+class adminPostMiniList extends adminGenericList
+{
+	public function display($page,$nb_per_page,$enclose_block='')
+	{
+		if ($this->rs->isEmpty())
+		{
+			echo '<p><strong>'.__('No entry').'</strong></p>';
+		}
+		else
+		{
+			$pager = new pager($page,$this->rs_count,$nb_per_page,10);
+			$pager->html_prev = $this->html_prev;
+			$pager->html_next = $this->html_next;
+			$pager->var_page = 'page';
+			
+			$html_block =
+			'<table class="clear"><tr>'.
+			'<th>'.__('Title').'</th>'.
+			'<th>'.__('Date').'</th>'.
+			'<th>'.__('Author').'</th>'.
+			'<th>'.__('Status').'</th>'.
+			'</tr>%s</table>';
+			
+			if ($enclose_block) {
+				$html_block = sprintf($enclose_block,$html_block);
+			}
+			
+			echo '<p>'.__('Page(s)').' : '.$pager->getLinks().'</p>';
+			
+			$blocks = explode('%s',$html_block);
+			
+			echo $blocks[0];
+			
+			while ($this->rs->fetch())
+			{
+				echo $this->postLine();
+			}
+			
+			echo $blocks[1];
+			
+			echo '<p>'.__('Page(s)').' : '.$pager->getLinks().'</p>';
+		}
+	}
+	
+	private function postLine()
+	{
+		$img = '<img alt="%1$s" title="%1$s" src="images/%2$s" />';
+		switch ($this->rs->post_status) {
+			case 1:
+				$img_status = sprintf($img,__('published'),'check-on.png');
+				break;
+			case 0:
+				$img_status = sprintf($img,__('unpublished'),'check-off.png');
+				break;
+			case -1:
+				$img_status = sprintf($img,__('scheduled'),'scheduled.png');
+				break;
+			case -2:
+				$img_status = sprintf($img,__('pending'),'check-wrn.png');
+				break;
+		}
+		
+		$protected = '';
+		if ($this->rs->post_password) {
+			$protected = sprintf($img,__('protected'),'locker.png');
+		}
+		
+		$selected = '';
+		if ($this->rs->post_selected) {
+			$selected = sprintf($img,__('selected'),'selected.png');
+		}
+		
+		$attach = '';
+		$nb_media = $this->rs->countMedia();
+		if ($nb_media > 0) {
+			$attach_str = $nb_media == 1 ? __('%d attachment') : __('%d attachments');
+			$attach = sprintf($img,sprintf($attach_str,$nb_media),'attach.png');
+		}
+		
+		$res = '<tr class="line'.($this->rs->post_status != 1 ? ' offline' : '').'"'.
+		' id="p'.$this->rs->post_id.'">';
+		
+		$res .=
+		'<td class="maximal"><a href="'.$this->core->getPostAdminURL($this->rs->post_type,$this->rs->post_id).'" '.
+		'title="'.html::escapeHTML($this->rs->getURL()).'">'.
+		html::escapeHTML($this->rs->post_title).'</a></td>'.
+		'<td class="nowrap">'.dt::dt2str(__('%Y-%m-%d %H:%M'),$this->rs->post_dt).'</td>'.
+		'<td class="nowrap">'.$this->rs->user_id.'</td>'.
+		'<td class="nowrap status">'.$img_status.' '.$selected.' '.$protected.' '.$attach.'</td>'.
+		'</tr>';
+		
+		return $res;
+	}
+}
 
 class adminCommentList extends adminGenericList
 {
-	protected function getDefaultLine()
-	{
-		return
-		'<tr class="line'.($this->rs->comment_status != 1 ? ' offline' : '').'"'.
-		' id="c'.$this->rs->comment_id.'">%s</tr>';
+	public function display($page,$nb_per_page,$enclose_block='')
+	{
+		if ($this->rs->isEmpty())
+		{
+			echo '<p><strong>'.__('No comment').'</strong></p>';
+		}
+		else
+		{
+			$pager = new pager($page,$this->rs_count,$nb_per_page,10);
+			$pager->html_prev = $this->html_prev;
+			$pager->html_next = $this->html_next;
+			$pager->var_page = 'page';
+			
+			$html_block =
+			'<table><tr>'.
+			'<th colspan="2">'.__('Title').'</th>'.
+			'<th>'.__('Date').'</th>'.
+			'<th>'.__('Author').'</th>'.
+			'<th>'.__('Type').'</th>'.
+			'<th>'.__('Status').'</th>'.
+			'<th>&nbsp;</th>'.
+			'</tr>%s</table>';
+			
+			if ($enclose_block) {
+				$html_block = sprintf($enclose_block,$html_block);
+			}
+			
+			echo '<p>'.__('Page(s)').' : '.$pager->getLinks().'</p>';
+			
+			$blocks = explode('%s',$html_block);
+			
+			echo $blocks[0];
+			
+			while ($this->rs->fetch())
+			{
+				echo $this->commentLine();
+			}
+			
+			echo $blocks[1];
+			
+			echo '<p>'.__('Page(s)').' : '.$pager->getLinks().'</p>';
+		}
 	}
 	
-	protected function getTitle()
-	{
-		$post_url = $this->core->getPostAdminURL($this->rs->post_type,$this->rs->post_id);
-		
-		return
-		'<td class="maximal">'.
-		form::checkbox(array('comments[]'),$this->rs->comment_id,'','','',0).'&nbsp'.
-		'<a href="'.$post_url.'">'.
-		html::escapeHTML($this->rs->post_title).'</a>'.
-		($this->rs->post_type != 'post' ? ' ('.html::escapeHTML($this->rs->post_type).')' : '').'</td>';
-	}
-	
-	protected function getDate()
-	{
-		return '<td class="nowrap">'.dt::dt2str(__('%Y-%m-%d %H:%M'),$this->rs->comment_dt).'</td>';
-	}
-	
-	protected function getAuthor()
+	private function commentLine()
 	{
 		global $author, $status, $sortby, $order, $nb_per_page;
@@ -396,19 +295,12 @@
 		'&amp;author='.rawurlencode($this->rs->comment_author);
 		
-		$comment_author = html::escapeHTML($this->rs->comment_author);
-		if (mb_strlen($comment_author) > 20) {
-			$comment_author = mb_strcut($comment_author,0,17).'...';
-		}
-		
-		return '<td class="nowrap"><a href="'.$author_url.'">'.$comment_author.'</a></td>';
-	}
-	
-	protected function getType()
-	{
-		return '<td class="nowrap">'.($this->rs->comment_trackback ? __('trackback') : __('comment')).'</td>';
-	}
-	
-	protected function getStatus()
-	{
+		$post_url = $this->core->getPostAdminURL($this->rs->post_type,$this->rs->post_id);
+		
+		$comment_url = 'comment.php?id='.$this->rs->comment_id;
+		
+		$comment_dt =
+		dt::dt2str($this->core->blog->settings->system->date_format.' - '.
+		$this->core->blog->settings->system->time_format,$this->rs->comment_dt);
+		
 		$img = '<img alt="%1$s" title="%1$s" src="images/%2$s" />';
 		switch ($this->rs->comment_status) {
@@ -427,14 +319,28 @@
 		}
 		
-		return '<td class="nowrap status">'.$img_status.'</td>';
-	}
-	
-	protected function getEdit()
-	{
-		$comment_url = 'comment.php?id='.$this->rs->comment_id;
-		
-		return
+		$comment_author = html::escapeHTML($this->rs->comment_author);
+		if (mb_strlen($comment_author) > 20) {
+			$comment_author = mb_strcut($comment_author,0,17).'...';
+		}
+		
+		$res = '<tr class="line'.($this->rs->comment_status != 1 ? ' offline' : '').'"'.
+		' id="c'.$this->rs->comment_id.'">';
+		
+		$res .=
+		'<td class="nowrap">'.
+		form::checkbox(array('comments[]'),$this->rs->comment_id,'','','',0).'</td>'.
+		'<td class="maximal"><a href="'.$post_url.'">'.
+		html::escapeHTML($this->rs->post_title).'</a>'.
+		($this->rs->post_type != 'post' ? ' ('.html::escapeHTML($this->rs->post_type).')' : '').'</td>'.
+		'<td class="nowrap">'.dt::dt2str(__('%Y-%m-%d %H:%M'),$this->rs->comment_dt).'</td>'.
+		'<td class="nowrap"><a href="'.$author_url.'">'.$comment_author.'</a></td>'.
+		'<td class="nowrap">'.($this->rs->comment_trackback ? __('trackback') : __('comment')).'</td>'.
+		'<td class="nowrap status">'.$img_status.'</td>'.
 		'<td class="nowrap status"><a href="'.$comment_url.'">'.
 		'<img src="images/edit-mini.png" alt="" title="'.__('Edit this comment').'" /></a></td>';
+		
+		$res .= '</tr>';
+		
+		return $res;
 	}
 }
@@ -442,5 +348,48 @@
 class adminUserList extends adminGenericList
 {
-	protected function getUserName()
+	public function display($page,$nb_per_page,$enclose_block='')
+	{
+		if ($this->rs->isEmpty())
+		{
+			echo '<p><strong>'.__('No user').'</strong></p>';
+		}
+		else
+		{
+			$pager = new pager($page,$this->rs_count,$nb_per_page,10);
+			$pager->html_prev = $this->html_prev;
+			$pager->html_next = $this->html_next;
+			$pager->var_page = 'page';
+			
+			$html_block =
+			'<table class="clear"><tr>'.
+			'<th colspan="2">'.__('Username').'</th>'.
+			'<th>'.__('First Name').'</th>'.
+			'<th>'.__('Last Name').'</th>'.
+			'<th>'.__('Display name').'</th>'.
+			'<th class="nowrap">'.__('Entries').'</th>'.
+			'</tr>%s</table>';
+			
+			if ($enclose_block) {
+				$html_block = sprintf($enclose_block,$html_block);
+			}
+			
+			echo '<p>'.__('Page(s)').' : '.$pager->getLinks().'</p>';
+			
+			$blocks = explode('%s',$html_block);
+			
+			echo $blocks[0];
+			
+			while ($this->rs->fetch())
+			{
+				echo $this->userLine();
+			}
+			
+			echo $blocks[1];
+			
+			echo '<p>'.__('Page(s)').' : '.$pager->getLinks().'</p>';
+		}
+	}
+	
+	private function userLine()
 	{
 		$img = '<img alt="%1$s" title="%1$s" src="images/%2$s" />';
@@ -455,34 +404,17 @@
 			$img_status = sprintf($img,__('superadmin'),'superadmin.png');
 		}
-		
 		return
-		'<td class="maximal">'.form::hidden(array('nb_post[]'),(integer) $this->rs->nb_post).
-		form::checkbox(array('user_id[]'),$this->rs->user_id).'&nbsp;'.
-		'<a href="user.php?id='.$this->rs->user_id.'">'.
-		$this->rs->user_id.'</a>&nbsp;'.$img_status.'</td>';
-	}
-	
-	protected function getFirstName()
-	{
-		return '<td class="nowrap">'.$this->rs->user_firstname.'</td>';
-	}
-	
-	protected function getLastName()
-	{
-		return '<td class="nowrap">'.$this->rs->user_name.'</td>';
-	}
-	
-	protected function getDisplayName()
-	{
-		return '<td class="nowrap">'.$this->rs->user_displayname.'</td>';
-	}
-	
-	protected function getEntries()
-	{
-		return
+		'<tr class="line">'.
+		'<td class="nowrap">'.form::hidden(array('nb_post[]'),(integer) $this->rs->nb_post).
+		form::checkbox(array('user_id[]'),$this->rs->user_id).'</td>'.
+		'<td class="maximal"><a href="user.php?id='.$this->rs->user_id.'">'.
+		$this->rs->user_id.'</a>&nbsp;'.$img_status.'</td>'.
+		'<td class="nowrap">'.$this->rs->user_firstname.'</td>'.
+		'<td class="nowrap">'.$this->rs->user_name.'</td>'.
+		'<td class="nowrap">'.$this->rs->user_displayname.'</td>'.
 		'<td class="nowrap"><a href="posts.php?user_id='.$this->rs->user_id.'">'.
-		$this->rs->nb_post.'</a></td>';
+		$this->rs->nb_post.'</a></td>'.
+		'</tr>';
 	}
 }
-
 ?>
Index: inc/prepend.php
===================================================================
--- inc/prepend.php	(revision 225)
+++ inc/prepend.php	(revision 9)
@@ -41,7 +41,5 @@
 $__autoload['dcCategories']			= dirname(__FILE__).'/core/class.dc.categories.php';
 $__autoload['dcError']				= dirname(__FILE__).'/core/class.dc.error.php';
-$__autoload['dcGenericMeta']		= dirname(__FILE__).'/core/class.dc.genmeta.php';
 $__autoload['dcMeta']				= dirname(__FILE__).'/core/class.dc.meta.php';
-$__autoload['dcUserMeta']				= dirname(__FILE__).'/core/class.dc.usermeta.php';
 $__autoload['dcMedia']				= dirname(__FILE__).'/core/class.dc.media.php';
 $__autoload['dcModules']				= dirname(__FILE__).'/core/class.dc.modules.php';
@@ -70,6 +68,4 @@
 $__autoload['adminCommentList']		= dirname(__FILE__).'/admin/lib.pager.php';
 $__autoload['adminUserList']			= dirname(__FILE__).'/admin/lib.pager.php';
-$__autoload['dcFilterSet'] =  dirname(__FILE__).'/admin/class.dc.filter.php';
-$__autoload['dcFilter'] =  dirname(__FILE__).'/admin/class.dc.filter.php';
 
 $__autoload['dcTemplate']			= dirname(__FILE__).'/public/class.dc.template.php';
@@ -122,5 +118,5 @@
 # Constants
 define('DC_ROOT',path::real(dirname(__FILE__).'/..'));
-define('DC_VERSION','2.3.1');
+define('DC_VERSION','2.3.0-dev');
 define('DC_DIGESTS',dirname(__FILE__).'/digests');
 define('DC_L10N_ROOT',dirname(__FILE__).'/../locales');
Index: locales/en/help/user_pref.html
===================================================================
--- locales/en/help/user_pref.html	(revision 175)
+++ locales/en/help/user_pref.html	(revision 243)
@@ -58,4 +58,8 @@
   <dd>Allow the use of the WYSIWYG editor for the posts and description fields.</dd>
   
+  <dt>Activate enhanced uploader in media manager</dt>
+  <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>
   <dd>Choices made in this zone will be reflected on your blog's dashboard.</dd>
Index: locales/fr/help/core_user_pref.html
===================================================================
--- locales/fr/help/core_user_pref.html	(revision 175)
+++ locales/fr/help/core_user_pref.html	(revision 243)
@@ -63,4 +63,8 @@
   <dd>Permet d'activer ou non l'éditeur visuel des billets et des catégories.</dd>
   
+  <dt>Activer l'interface avancée du gestionnaire de médias</dt>
+  <dd>Cette option permet d'envoyer plusieurs fichiers à la fois sur le serveur.
+  Nécessite la présence du plugin Flash dans votre navigateur.</dd>
+  
   <dt>Modules du tableau de bord</dt>
   <dd>Les choix opérés dans cette zone détermineront l'affichage de 
Index: locales/fr/main.po
===================================================================
--- locales/fr/main.po	(revision 222)
+++ locales/fr/main.po	(revision 245)
@@ -2275,4 +2275,7 @@
 msgstr "Envoyer"
 
+msgid "Loading enhanced uploader, please wait."
+msgstr "Chargement de l'interface avancée."
+
 msgid "No file in queue."
 msgstr "Aucun fichier en file d'attente."
@@ -2804,2 +2807,11 @@
 #~ msgid "Modify numbers in fields to change favorites order."
 #~ msgstr "Modifiez les nombres dans les champs pour changer l'ordre des favoris."
+
+msgid "Activate enhanced uploader in media manager"
+msgstr "Activer l'interface avancée du gestionnaire de médias"
+
+msgid "Do not use standard favicon"
+msgstr "Ne pas utiliser le favicon standard"
+
+msgid "This will be applied for all users"
+msgstr "Ce choix sera actif pour tous les utilisateurs"
Index: plugins/antispam/filters/class.dc.filter.ip.php
===================================================================
--- plugins/antispam/filters/class.dc.filter.ip.php	(revision 223)
+++ plugins/antispam/filters/class.dc.filter.ip.php	(revision 248)
@@ -167,6 +167,6 @@
 
 				$res .=
-				'<p style="'.$p_style.'"><label class="classic">'.
-				form::checkbox(array('delip[]'),$rs->rule_id,false,'','',$disabled_ip, 'title="'.html::escapeHTML($pattern).'"').' '.
+				'<p style="'.$p_style.'"><label class="classic" for="'.$type.'-ip-'.$rs->rule_id.'">'.
+				form::checkbox(array('delip[]',$type.'-ip-'.$rs->rule_id),$rs->rule_id,false,'','',$disabled_ip).' '.
 				html::escapeHTML($pattern).
 				'</label></p>';
Index: plugins/antispam/filters/class.dc.filter.iplookup.php
===================================================================
--- plugins/antispam/filters/class.dc.filter.iplookup.php	(revision 223)
+++ plugins/antispam/filters/class.dc.filter.iplookup.php	(revision 231)
@@ -84,7 +84,7 @@
 		'<form action="'.html::escapeURL($url).'" method="post">'.
 		'<fieldset><legend>' . __('IP Lookup servers') . '</legend>'.
-		'<p>'.'<label for="bls">'.__('Add here a coma separated list of servers.').'</label>'.
-		form::textarea('bls',40,3,html::escapeHTML($bls),'maximal').'</p>'.
-		'<p><input type="submit" value="'.__('Save').'" />'.
+		'<p><label for="bls">'.__('Add here a coma separated list of servers.').
+		form::textarea('bls',40,3,html::escapeHTML($bls),'maximal').
+		'<input type="submit" value="'.__('Save').'" /></label></p>'.
 		$this->core->formNonce().'</p>'.
 		'</fieldset>'.
Index: plugins/antispam/filters/class.dc.filter.words.php
===================================================================
--- plugins/antispam/filters/class.dc.filter.words.php	(revision 223)
+++ plugins/antispam/filters/class.dc.filter.words.php	(revision 248)
@@ -156,6 +156,6 @@
 
 				$res .=
-				'<p style="'.$p_style.'"><label class="classic">'.
-				form::checkbox(array('swd[]'),$rs->rule_id,false,'','',$disabled_word, 'title="'.html::escapeHTML($rs->rule_content).'"').' '.
+				'<p style="'.$p_style.'"><label class="classic" for="word-'.$rs->rule_id.'">'.
+				form::checkbox(array('swd[]', 'word-'.$rs->rule_id),$rs->rule_id,false,'','',$disabled_word).' '.
 				html::escapeHTML($rs->rule_content).
 				'</label></p>';
Index: plugins/importExport/inc/class.dc.export.flat.php
===================================================================
--- plugins/importExport/inc/class.dc.export.flat.php	(revision 125)
+++ plugins/importExport/inc/class.dc.export.flat.php	(revision 233)
@@ -106,4 +106,5 @@
 				$exp->exportTable('setting');
 				$exp->exportTable('user');
+				$exp->exportTable('pref');
 				$exp->exportTable('permissions');
 				$exp->exportTable('post');
Index: plugins/importExport/inc/flat/class.dc.import.php
===================================================================
--- plugins/importExport/inc/flat/class.dc.import.php	(revision 0)
+++ plugins/importExport/inc/flat/class.dc.import.php	(revision 233)
@@ -84,4 +84,5 @@
 		$this->cur_setting     = $this->con->openCursor($this->prefix.'setting');
 		$this->cur_user        = $this->con->openCursor($this->prefix.'user');
+		$this->cur_pref        = $this->con->openCursor($this->prefix.'pref');
 		$this->cur_permissions = $this->con->openCursor($this->prefix.'permissions');
 		$this->cur_post        = $this->con->openCursor($this->prefix.'post');
@@ -253,4 +254,7 @@
 						$this->insertUser($line);
 						break;
+					case 'pref':
+						$this->insertPref($line);
+						break;
 					case 'permissions':
 						$this->insertPermissions($line);
@@ -363,4 +367,18 @@
 		
 		$this->cur_setting->insert();
+	}
+	
+	private function insertPref($pref)
+	{
+		$this->cur_pref->clean();
+		
+		$this->cur_pref->pref_id    = (string) $pref->pref_id;
+		$this->cur_pref->user_id    = !$pref->user_id ? null : (string) $pref->user_id;
+		$this->cur_pref->pref_ws    = (string) $pref->pref_ws;
+		$this->cur_pref->pref_value = (string) $pref->pref_value;
+		$this->cur_pref->pref_type  = (string) $pref->pref_type;
+		$this->cur_pref->pref_label = (string) $pref->pref_label;
+		
+		$this->cur_pref->insert();
 	}
 	
Index: plugins/pages/locales/en/help/page.html
===================================================================
--- plugins/pages/locales/en/help/page.html	(revision 198)
+++ plugins/pages/locales/en/help/page.html	(revision 232)
@@ -71,10 +71,4 @@
   URL for your page. If the URL you're trying to use is already used by another
   page, a number will be added to it.</dd>
-  
-  <dt>Attachments</dt>
-  <dd>The attachments are all the medias you joined to the page. The link <em>add
-  file to this page</em> allows you to attach other files to the page. Remember
-  to save your changes before clicking on this link. For further information,
-  see the media manager help.</dd>
 </dl>
 
Index: plugins/pages/locales/fr/help/page.html
===================================================================
--- plugins/pages/locales/fr/help/page.html	(revision 198)
+++ plugins/pages/locales/fr/help/page.html	(revision 232)
@@ -13,5 +13,5 @@
   
   <dt>Extrait</dt>
-  <dd>Ce champ est optionel.</dd>
+  <dd>Ce champ est optionnel.</dd>
   
   <dt>Contenu</dt>
@@ -33,5 +33,5 @@
   </dd>
   
-  <dt>Publié le</dt>
+  <dt>Publiée le</dt>
   <dd>Permet de modifier la date et l'heure de publication de la page. Si vous avez
   choisi le statut <em>programmée</em> elle sera mise en ligne aux date et heure
@@ -77,10 +77,4 @@
   après avoir cliqué sur le petit verrou placé à sa droite. Si vous essayez
   d'utiliser une URL déjà existante, celle-ci se verra incrémentée d'un chiffre.</dd>
-  
-  <dt>Pièces jointes</dt>
-  <dd>Les pièces jointes sont tous les médias attachés à la page. Le lien
-  d'ajout d'une pièce jointe permet de choisir un fichier à ajouter à la page.
-  Pensez à sauvegarder votre page avant de choisir une pièce jointe. Consultez
-  l'aide du gestionnaire de média pour plus de détails.</dd>
 </dl>
 
Index: plugins/widgets/_default_widgets.php
===================================================================
--- plugins/widgets/_default_widgets.php	(revision 0)
+++ plugins/widgets/_default_widgets.php	(revision 252)
@@ -58,5 +58,5 @@
 $categories = array('' => '', __('Uncategorized') => 'null');
 while ($rs->fetch()) {
-	$categories[str_repeat('&nbsp;&nbsp;',$rs->level-1).'&bull; '.html::escapeHTML($rs->cat_title)] = $rs->cat_id;
+	$categories[str_repeat('&nbsp;&nbsp;',$rs->level-1).($rs->level-1 == 0 ? '' : '&bull; ').html::escapeHTML($rs->cat_title)] = $rs->cat_id;
 }
 $__widgets->lastposts->setting('category',__('Category:'),'','combo',$categories);
