Index: inc/admin/class.dc.filter.php
===================================================================
--- inc/admin/class.dc.filter.php	(revision 225)
+++ inc/admin/class.dc.filter.php	(revision 242)
@@ -28,4 +28,5 @@
 	protected $action;
 	protected $hideform;
+	protected $columns_form;
 	
 	public function __construct($action,$form_prefix="f_") {
@@ -55,4 +56,10 @@
 		}
 	}
+	
+	public function setColumnsForm($html)
+	{
+		$this->columns_form = $html;
+	}
+	
 	public function getFormFieldsAsHidden() {
 		$ret='';
@@ -95,9 +102,5 @@
 			'</div>'.
 			'<div class="col30">'.
-			'<h3>'.__('Displayed information').'</h3>'.
-			'<ul>'.
-			'<li class="line"><label for="col_title">Titre</label><input type="checkbox" id="col_title" value="title" name="title" checked="checked"></li>'.
-
-			'</ul>'.
+			$this->columns_form.
 			'</div>'.
 			'<p class="clear margintop"><input type="submit" value="'.__('Apply filters and display options').'" name="apply"></p>'.
@@ -220,6 +223,4 @@
 		$this->options = $options;
 		$this->extra = $extra;
-		/*$this->default = $default;
-		$this->no_value = $no_value;*/
 		$this->desc = $desc;
 		$this->verb = "is";
@@ -270,44 +271,3 @@
 	}
 }
-
-class booleanFilter extends Filter {
-	public function getType() {
-		return "boolean";
-	}
-}
-
-class valueFilter extends Filter {
-	protected $size;
-	protected $max;
-	protected $default;
-	protected $no_value;
-	
-	public function __construct($id,$desc,$request_param,$size, $max, $no_value='',$default=null) {
-		parent::__construct($id,$desc,$request_param);
-		$this->size = $size;
-		$this->max = $max;
-		$this->default_value = $default;
-		$this->no_value = $no_value;
-	}
-
-	public function getType() {
-		return "value";
-	}
-	
-	
-	public function getFormFields() {
-		return '<label for="'.$this->field_id.'">'.$this->desc.'</label>'.
-			form::field($this->field_id,$this->size,$this->max,$this->value);
-	
-	}
-	
-	public function setValues($form_data) {
-		parent::setValues($form_data);
-		if ($this->enabled && $this->value==$this->no_value) {
-			$this->enabled = false;
-			$this->value=null;
-		}
-	}
-}
-
 ?>
Index: inc/admin/lib.pager.php
===================================================================
--- inc/admin/lib.pager.php	(revision 238)
+++ inc/admin/lib.pager.php	(revision 242)
@@ -32,7 +32,12 @@
 			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;
@@ -40,13 +45,16 @@
 		
 		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(__('Invalid callback'));
+				throw new Exception(__('Callback class should be inherited of adminGenericList class'));
 			}
 		}
 		catch (Exception $e) {
-			throw new Exception(__('Invalid callback'));
+			throw new Exception(sprintf(__('Invalid column callback: %s'),$e->getMessage()));
 		}
 		
@@ -84,5 +92,4 @@
 	protected $columns;
 	
-	
 	public function __construct($core,$rs,$rs_count)
 	{
@@ -92,5 +99,6 @@
 		$this->context = get_class($this);
 		$this->columns = array();
-		$this->column_pattern = 'c_%s';
+		$this->form_prefix = 'col_%s';
+		$this->form_trigger = 'add_filter';
 		
 		$this->html_prev = __('&#171;prev.');
@@ -120,5 +128,5 @@
 		$this->addColumn('adminCommentList','edit','',array('adminCommentList','getEdit'));
 		
-		# Comment columns
+		# User columns
 		$this->addColumn('adminUserList','username',__('Username'),array('adminUserList','getUserName'));
 		$this->addColumn('adminUserList','firstname',__('First name'),array('adminUserList','getFirstName'));
@@ -151,10 +159,31 @@
 	public function setColumnsVisibility()
 	{
+		if (array_key_exists($this->form_trigger,$_REQUEST)) {
+			foreach ($this->columns[$this->context] as $k => $v) {
+				$key = sprintf($this->form_prefix,$k);
+				if (!array_key_exists($key,$_REQUEST)) {
+					$v->setVisibility(false);
+				}
+			}
+		}
+	}
+	
+	public function getColumnsForm()
+	{
+		$block = 
+		'<h3>'.__('Displayed information').'</h3>'.
+		'<ul>%s</ul>';
+		
+		$list = array();
+		
 		foreach ($this->columns[$this->context] as $k => $v) {
-			$key = sprintf($this->column_pattern,$k);
-			if (array_key_exists($key,$_REQUEST)) {
-				$v->setVisibility((bool) $key);
-			}
-		}
+			$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)) : '';
 	}
 	
@@ -330,11 +359,4 @@
 	}
 	
-	protected function getContent()
-	{
-		return
-		'<tr class="line'.($this->rs->comment_status != 1 ? ' offline' : '').'"'.
-		' id="c'.$this->rs->comment_id.'">%s</tr>';
-	}
-	
 	protected function getTitle()
 	{
@@ -342,5 +364,7 @@
 		
 		return
-		'<td class="maximal"><a href="'.$post_url.'">'.
+		'<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>';
@@ -425,5 +449,5 @@
 		return
 		'<td class="maximal">'.form::hidden(array('nb_post[]'),(integer) $this->rs->nb_post).
-		form::checkbox(array('user_id[]'),$this->rs->user_id).
+		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>';
