diff --git a/plugins/addons/dashboard/class_dashBoardUsers.inc b/plugins/addons/dashboard/class_dashBoardUsers.inc
index 24c6c1b328dbfae8ab3d544cd7b77bdfdfe4e463..d1892a8383491ec1c3e765a903abd286a1ee1c4e 100644
--- a/plugins/addons/dashboard/class_dashBoardUsers.inc
+++ b/plugins/addons/dashboard/class_dashBoardUsers.inc
@@ -79,11 +79,11 @@ class dashboardUsers extends simplePlugin
         }
       }
     }
-    $ldap->search("(&(objectClass=inetOrgPerson)(objectClass=gosaMailAccount))", array("cn"));
+    $ldap->search('(&(objectClass=inetOrgPerson)(objectClass=gosaMailAccount))', array('cn'));
     $nb_mail_accounts = $ldap->count();
-    $ldap->search("(&(objectClass=inetOrgPerson)(objectClass=posixAccount))", array("cn"));
+    $ldap->search('(&(objectClass=inetOrgPerson)(objectClass=posixAccount))', array('cn'));
     $nb_posix_accounts = $ldap->count();
-    $ldap->search("(&(objectClass=inetOrgPerson)(objectClass=sambaSamAccount))", array("cn"));
+    $ldap->search('(&(objectClass=inetOrgPerson)(objectClass=sambaSamAccount))', array('cn'));
     $nb_samba_accounts = $ldap->count();
 
     return array(
@@ -136,8 +136,10 @@ class dashboardUsers extends simplePlugin
     /* search all account with all date, mail, telephone */
     $ldap = $this->config->get_ldap_link();
     $ldap->cd($this->config->current['BASE']);
-    $ldap->search('(&(|(objectClass=posixAccount)(objectClass=sambaSamAccount))(shadowExpire=*))',
-                  array('uid','shadowExpire','mail','telephoneNumber','cn','manager'));
+    $ldap->search(
+      '(shadowExpire=*)',
+      array('uid','shadowExpire','mail','telephoneNumber','cn','manager')
+    );
 
     $expired_accounts = array();
     $next_expired_accounts = array();
diff --git a/plugins/admin/groups/class_groupManagement.inc b/plugins/admin/groups/class_groupManagement.inc
index 0e16d956e4556e6f1568cf69bc72cda7ec55e7d2..414f047647259e4a4df3c35d97f9d5f8a4cc97be 100644
--- a/plugins/admin/groups/class_groupManagement.inc
+++ b/plugins/admin/groups/class_groupManagement.inc
@@ -123,12 +123,16 @@ class groupManagement extends simpleManagement
     $filters = array(
       array('id'  => 'USER',        'label'  => _('Show user groups')),
       array('id'  => 'PRIMARY',     'label'  => _('Show primary groups')),
-      array('id'  => 'SAMBA',       'label'  => _('Show samba groups')),
-      array('id'  => 'MAIL',        'label'  => _('Show mail groups')),
       array('id'  => 'ROLE',        'label'  => _('Show organizational roles')),
       array('id'  => 'APPLICATION', 'label'  => _('Show application groups')),
       array('id'  => 'DEPARTMENT',  'label'  => _('Show department groups')),
     );
+    if (class_available('mailAccount')) {
+      $filters[]= array('id'  => 'MAIL',        'label'  => _('Show mail groups'));
+    }
+    if (class_available('sambaAccount')) {
+      $filters[]= array('id'  => 'SAMBA',       'label'  => _('Show samba groups'));
+    }
     if (class_available('systemManagement')) {
       $filters = array_merge(
         $filters,
diff --git a/plugins/admin/users/class_userManagement.inc b/plugins/admin/users/class_userManagement.inc
index 1bce22dcc3e0cca63022a08a8d26d1081613b51a..9e387ecee114bf6e003b2a2597f507362a1a0705 100644
--- a/plugins/admin/users/class_userManagement.inc
+++ b/plugins/admin/users/class_userManagement.inc
@@ -79,19 +79,30 @@ class userManagement extends simpleManagement
   {
     parent::configureFilter();
 
-    if (!class_available('mailAccount')) {
+    $classes = array('posixAccount')
+    if (class_available('mailAccount')) {
+      $classes[]= 'gosaMailAccount';
+    } else {
       /* If mail plugin is not installed, ignore mail filter */
-      $this->filter->elements['MAIL']['unset']      = '';
-      $this->filter->elements['MAIL']['set']        = '';
-      /* The FUNCTIONAL filter must not use inexisting gosaMailAccount class */
-      $this->filter->elements['FUNCTIONAL']['set']  = '(!(|(objectClass=posixAccount)(objectClass=sambaSamAccount)))';
+      $this->filter->elements['MAIL']['unset']  = '';
+      $this->filter->elements['MAIL']['set']    = '';
+    }
+    if (class_available('sambaAccount')) {
+      $classes[]= 'sambaSamAccount';
+    } else {
+      /* If samba plugin is not installed, ignore samba filter */
+      $this->filter->elements['SAMBA']['unset'] = '';
+      $this->filter->elements['SAMBA']['set']   = '';
     }
+    /* The FUNCTIONAL filter must not use inexisting classes */
+    $this->filter->elements['FUNCTIONAL']['set']  = '(!(|(objectClass='.implode(')(objectClass=', $classes).')))';
   }
 
   function renderList ()
   {
     $smarty = get_smarty();
     $smarty->assign('USE_MAIL', class_available('mailAccount'));
+    $smarty->assign('USE_SAMBA', class_available('sambaAccount'));
     return parent::renderList();
   }
 
diff --git a/plugins/admin/users/user-filter.tpl b/plugins/admin/users/user-filter.tpl
index fc45aa675e09f8022663c7573eb2874980898ea2..23492de04f7445d717d7aed14f40485f2ef20de6 100644
--- a/plugins/admin/users/user-filter.tpl
+++ b/plugins/admin/users/user-filter.tpl
@@ -12,7 +12,9 @@
 {if $USE_MAIL}
   {$MAIL}&nbsp;<label for='MAIL'>{t}Show Mail users{/t}</label><br/>
 {/if}
-{$SAMBA}&nbsp;<label for='SAMBA'>{t}Show Samba users{/t}</label><br/>
+{if $USE_SAMBA}
+  {$SAMBA}&nbsp;<label for='SAMBA'>{t}Show Samba users{/t}</label><br/>
+{/if}
 
  <div style="width:100%;border-top:1px solid #AAAAAA"></div>
  {$SCOPE}
diff --git a/plugins/admin/users/user-filter.xml b/plugins/admin/users/user-filter.xml
index bda17f0ffb254c1a4d921cf0cdd5701711c021a9..91bb3d277d9ba97a0405c8fb06cb70991d8467d7 100644
--- a/plugins/admin/users/user-filter.xml
+++ b/plugins/admin/users/user-filter.xml
@@ -55,7 +55,8 @@
     <tag>FUNCTIONAL</tag>
     <default>true</default>
     <unset></unset>
-    <set>(!(|(objectClass=posixAccount)(objectClass=sambaSamAccount)(objectClass=gosaMailAccount)))</set>
+    <!-- The set tag content is defined in userManagement::configureFilter -->
+    <set>UNSET</set>
   </element>
 
   <element>
diff --git a/setup/class_setupStep_Checks.inc b/setup/class_setupStep_Checks.inc
index 81ee878b2c419154e0d8048c8cf0c846132a53fd..7bf7abaac6970eed33f15b31ee1f49585cdc4a7e 100644
--- a/setup/class_setupStep_Checks.inc
+++ b/setup/class_setupStep_Checks.inc
@@ -96,7 +96,7 @@ class Step_Checks extends setupStep
     $basic_checks[] = array("NAME" => $N , "DESC" => $D , "RESULT" => $R , "SOLUTION" => $S , "MUST" => $M );
 
     /* Check for iconv */
-    $N = msgPool::checkingFor("inconv");
+    $N = msgPool::checkingFor("iconv");
     $D = _("FusionDirectory requires this module for the samba integration.");
     $S = msgPool::installPhpModule("iconv");
     $R = is_callable("iconv");
diff --git a/setup/class_setupStep_Migrate.inc b/setup/class_setupStep_Migrate.inc
index 3d807cf479611fdf36653353bfd9ee30c067ff37..a7eedcd452aeadc794e38fb894ef363ebde92165 100644
--- a/setup/class_setupStep_Migrate.inc
+++ b/setup/class_setupStep_Migrate.inc
@@ -532,10 +532,21 @@ class Step_Migrate extends setupStep
 
     /* Get all invisible users */
     $ldap->cd($config->current['BASE']);
-    $res = $ldap->search("(&(|(objectClass=posixAccount)(objectClass=organizationalPerson)(objectClass=OpenLDAPperson))(!(objectClass=inetOrgPerson))(!(&(objectClass=Account)(objectClass=sambaSamAccount)))(uid=*))", array("sn","givenName","cn","uid"));
+    $res = $ldap->search(
+      '(&'.
+        '(|'.
+          '(objectClass=posixAccount)'.
+          '(objectClass=organizationalPerson)'.
+          '(objectClass=OpenLDAPperson)'.
+        ')'.
+        '(!(objectClass=inetOrgPerson))'.
+        '(uid=*)'.
+      ')',
+      array('sn','givenName','cn','uid')
+    );
 
     while ($attrs = $ldap->fetch()) {
-      if (!preg_match("/,dc=addressbook,/", $attrs['dn'])) {
+      if (!preg_match('/,dc=addressbook,/', $attrs['dn'])) {
         $attrs['checked'] = FALSE;
         $attrs['before']  = "";
         $attrs['after']   = "";