diff --git a/include/class_objects.inc b/include/class_objects.inc
index 48fea29e12fe298182b5c1f1fe495550ea0ab079..e6f78dfbdfaafac6a0482befd30a87dd7f00b3c0 100644
--- a/include/class_objects.inc
+++ b/include/class_objects.inc
@@ -411,7 +411,19 @@ class objects
     $infos =& static::infos($type);
 
     if (!isset($infos['searchAttributes'])) {
-      $infos['searchAttributes'] = array_unique(array($infos['mainAttr'], $infos['nameAttr']));
+      $searchAttrs = array();
+      $searchAttrs[$infos['mainAttr']] = $infos['aclCategory'].'/'.$infos['mainTab'];
+      $searchAttrs[$infos['nameAttr']] = $infos['aclCategory'].'/'.$infos['mainTab'];
+      foreach ($config->data['TABS'][$infos['tabGroup']] as $tab) {
+        if (!plugin_available($tab['CLASS'])) {
+          continue;
+        }
+        $attrs = pluglist::pluginInfos($tab['CLASS'])['plSearchAttrs'];
+        foreach ($attrs as $attr) {
+          $searchAttrs[$attr] = $infos['aclCategory'].'/'.$tab['CLASS'];
+        }
+      }
+      $infos['searchAttributes'] = $searchAttrs;
     }
 
     return $infos['searchAttributes'];
diff --git a/include/management/class_management.inc b/include/management/class_management.inc
index 306e37b615a18e2b4ceae961e629f2b1c366f9cb..c89a2750d7fe7a69df7a05d3f9875de532869448 100644
--- a/include/management/class_management.inc
+++ b/include/management/class_management.inc
@@ -421,11 +421,6 @@ class management
       return $this->getHeader().$display;
     }
 
-    // Update filter
-    if ($this->filter) {
-      $this->filter->update();
-    }
-
     // Update list
     $this->listing->update();
 
diff --git a/include/management/class_managementFilter.inc b/include/management/class_managementFilter.inc
index 25bb7a5c597d03d1741a132658ff9caff61575e8..8cee6004382486e41677b3780e065ec693c4d371 100644
--- a/include/management/class_managementFilter.inc
+++ b/include/management/class_managementFilter.inc
@@ -61,7 +61,6 @@ class managementFilter
         'filters' => array(),
         'infos'   => objects::infos($type),
       );
-      $this->searchAttributes = array_unique(array_merge($this->searchAttributes, objects::getSearchedAttributes($type)));
     }
 
     $this->filterElements = array(
@@ -79,8 +78,10 @@ class managementFilter
     $this->filterElements[] = $element;
   }
 
-  function update()
+  function update($base)
   {
+    global $ui;
+
     if (isset($_POST['FILTER_PID']) && ($_POST['FILTER_PID'] == $this->pid)) {
       // Load post values and adapt filter, base and scope accordingly
       foreach ($this->types as $key => &$data) {
@@ -98,6 +99,18 @@ class managementFilter
         $element->update();
       }
     }
+
+    foreach ($this->parent->objectTypes as $type) {
+      $attrs = objects::getSearchedAttributes($type);
+
+      $this->searchAttributes[$type] = array();
+      foreach ($attrs as $attr => $acl) {
+        $rights = $ui->get_permissions($base, $acl);
+        if (strpos($rights, 'r') !== FALSE) {
+          $this->searchAttributes[$type][] = $attr;
+        }
+      }
+    }
   }
 
   /*!
@@ -110,8 +123,16 @@ class managementFilter
     $smarty->assign('SCOPE',      $this->scope);
     $smarty->assign('FILTER_PID', $this->pid);
     $smarty->assign('SEARCH',     $this->search);
-    $smarty->assign('SEARCHDESC', sprintf(_('Searches in %s'), implode(', ', $this->searchAttributes)));
     $smarty->assign('TYPES',      $this->types);
+
+    $searchAttrs = array();
+    foreach ($this->searchAttributes as $type => $attrs) {
+      foreach ($attrs as $attr) {
+        $searchAttrs[] = strtolower($type).'/'.$attr;
+      }
+    }
+    $smarty->assign('SEARCHDESC', sprintf(_('Searches in %s'), implode(', ', $searchAttrs)));
+
     $parentClass = get_class($this->parent);
     if (!$parentClass::$skipTemplates) {
       $smarty->assign('TEMPLATES',  $this->showTemplates);
@@ -168,7 +189,7 @@ class managementFilter
         if (preg_match('/^\(.+\)$/', $this->search)) {
           $elementFilters[] = $this->search;
         } else {
-          $elementFilters[] = '(|('.implode('=*'.$this->search.'*)(', objects::getSearchedAttributes($type)).'=*'.$this->search.'*))';
+          $elementFilters[] = '(|('.implode('=*'.$this->search.'*)(', $this->searchAttributes[$type]).'=*'.$this->search.'*))';
         }
       }
 
diff --git a/include/management/class_managementListing.inc b/include/management/class_managementListing.inc
index 15f8b036de126cdf2a7328a83a23fdb7a6c17252..cd7ce66d185ce6b5b6d5a8ede5fc9b4d5dee1ef2 100644
--- a/include/management/class_managementListing.inc
+++ b/include/management/class_managementListing.inc
@@ -282,6 +282,9 @@ class managementListing
       $this->updateBase();
     }
 
+    // Update filter
+    $this->parent->filter->update($this->base);
+
     // Update filter and refresh entries
     $attrs = $this->parent->neededAttrs;
     foreach ($this->columns as $column) {
diff --git a/plugins/admin/aclrole/class_aclRole.inc b/plugins/admin/aclrole/class_aclRole.inc
index d1c738d262de1812f74a049e6cdcf35bd1d95295..ad7d038b02f08c1c4b2f9ed0b33b424741ee70b8 100644
--- a/plugins/admin/aclrole/class_aclRole.inc
+++ b/plugins/admin/aclrole/class_aclRole.inc
@@ -81,6 +81,7 @@ class aclRole extends simplePlugin
         'ou'          => get_ou('aclRoleRDN'),
         'icon'        => 'geticon.php?context=categories&icon=acl&size=16',
       )),
+      'plSearchAttrs' => array('description'),
 
       'plProvidedAcls' => parent::generatePlProvidedAcls(static::getAttributesInfo())
     );
diff --git a/plugins/admin/departments/class_country.inc b/plugins/admin/departments/class_country.inc
index 69b4a20975a04c4e87f4c149a44d1481c7956595..1da697f29c85bf395ebe49c2e731c636ad4c18bc 100644
--- a/plugins/admin/departments/class_country.inc
+++ b/plugins/admin/departments/class_country.inc
@@ -41,6 +41,7 @@ class country extends department
       'plForeignKeys'  => array(
         'manager' => array('user','dn','manager=%oldvalue%','*')
       ),
+      'plSearchAttrs' => array('description'),
 
       'plProvidedAcls' => parent::generatePlProvidedAcls(static::getAttributesInfo())
     );
diff --git a/plugins/admin/departments/class_dcObject.inc b/plugins/admin/departments/class_dcObject.inc
index 66cb59723a461fe518ac472991861154a32d46a4..aad3f77df7554f4a46571ed0b8764be1c480a389 100644
--- a/plugins/admin/departments/class_dcObject.inc
+++ b/plugins/admin/departments/class_dcObject.inc
@@ -40,6 +40,7 @@ class dcObject extends department
       'plForeignKeys'  => array(
         'manager' => array('user','dn','manager=%oldvalue%','*')
       ),
+      'plSearchAttrs' => array('description'),
 
       'plProvidedAcls' => parent::generatePlProvidedAcls(static::getAttributesInfo())
     );
diff --git a/plugins/admin/departments/class_department.inc b/plugins/admin/departments/class_department.inc
index 09f87b9dcc5b9cccd30e4c35a80f3e62ba00c8c4..a98ebdf13a20c64ca2d6577b479578c3ba387c6a 100644
--- a/plugins/admin/departments/class_department.inc
+++ b/plugins/admin/departments/class_department.inc
@@ -46,6 +46,7 @@ class department extends simplePlugin
       'plForeignKeys'  => array(
         'manager' => array('user','dn','manager=%oldvalue%','*')
       ),
+      'plSearchAttrs' => array('description'),
 
       'plProvidedAcls' => parent::generatePlProvidedAcls(static::getAttributesInfo())
     );
diff --git a/plugins/admin/departments/class_domain.inc b/plugins/admin/departments/class_domain.inc
index 7a01aa2eac93fd3831dcd5c2289100dc457121b6..d5ef9224995500a9bea9b5d5b013f9680294ed76 100644
--- a/plugins/admin/departments/class_domain.inc
+++ b/plugins/admin/departments/class_domain.inc
@@ -40,6 +40,7 @@ class domain extends department
       'plForeignKeys'  => array(
         'manager' => array('user','dn','manager=%oldvalue%','*')
       ),
+      'plSearchAttrs' => array('description'),
 
       'plProvidedAcls' => parent::generatePlProvidedAcls(static::getAttributesInfo())
     );
diff --git a/plugins/admin/departments/class_locality.inc b/plugins/admin/departments/class_locality.inc
index 99483b64c3b48243f6c67bc099b12501008600b1..badd41c807fd8aad495de439c5cb11ff4a9a926c 100644
--- a/plugins/admin/departments/class_locality.inc
+++ b/plugins/admin/departments/class_locality.inc
@@ -41,6 +41,7 @@ class locality extends department
       'plForeignKeys'  => array(
         'manager' => array('user','dn','manager=%oldvalue%','*')
       ),
+      'plSearchAttrs' => array('description'),
 
       'plProvidedAcls' => parent::generatePlProvidedAcls(static::getAttributesInfo())
     );
diff --git a/plugins/admin/departments/class_organization.inc b/plugins/admin/departments/class_organization.inc
index ff0dac558b1a49d258818a5a87b12ef04f9d2c48..179c7821770345689dfb9fef07b64e7098ff3a56 100644
--- a/plugins/admin/departments/class_organization.inc
+++ b/plugins/admin/departments/class_organization.inc
@@ -41,6 +41,7 @@ class organization extends department
       'plForeignKeys'  => array(
         'manager' => array('user','dn','manager=%oldvalue%','*')
       ),
+      'plSearchAttrs' => array('description'),
 
       'plProvidedAcls' => parent::generatePlProvidedAcls(static::getAttributesInfo())
     );
diff --git a/plugins/admin/groups/class_ogroup.inc b/plugins/admin/groups/class_ogroup.inc
index 0116de0d5f3953d9037ad59ea9f68ef6c2953b24..f47940d8216414bf779c3bec61b9ae270fe84501 100644
--- a/plugins/admin/groups/class_ogroup.inc
+++ b/plugins/admin/groups/class_ogroup.inc
@@ -196,6 +196,7 @@ class ogroup extends simplePlugin
           array('user','dn','owner=%oldvalue%','*')
         )
       ),
+      'plSearchAttrs' => array('description'),
 
       'plProvidedAcls'  => parent::generatePlProvidedAcls(static::getAttributesInfo())
     );
diff --git a/plugins/admin/groups/class_roleGeneric.inc b/plugins/admin/groups/class_roleGeneric.inc
index 10826f81e4d8ae4e9ff611b94b6a32ee6e1503c8..76475a66f7f673b1486afefafa82ab0cf339a804 100644
--- a/plugins/admin/groups/class_roleGeneric.inc
+++ b/plugins/admin/groups/class_roleGeneric.inc
@@ -66,6 +66,7 @@ class roleGeneric extends simplePlugin
       'plForeignKeys'  => array(
         'roleOccupant' => array('user','dn','roleOccupant=%oldvalue%','*')
       ),
+      'plSearchAttrs' => array('description'),
 
       'plProvidedAcls'  => parent::generatePlProvidedAcls(static::getAttributesInfo())
     );
diff --git a/plugins/personal/generic/class_user.inc b/plugins/personal/generic/class_user.inc
index 4e4ec17045c2a0cfe0edbc7b71f698ab11471409..2267766a8c73b986bdb8028efe5cf4dd2874188a 100644
--- a/plugins/personal/generic/class_user.inc
+++ b/plugins/personal/generic/class_user.inc
@@ -291,6 +291,7 @@ class user extends simplePlugin
       'plForeignKeys'  => array(
         'manager' => array('user','dn','manager=%oldvalue%','*')
       ),
+      'plSearchAttrs' => array('uid','description'),
 
       'plProvidedAcls' => array_merge(
         parent::generatePlProvidedAcls(static::getAttributesInfo()),