diff --git a/bin/check-home-permissions.py b/bin/check-home-permissions.py
index 5083dcfb6d5c008fbeb0641939cc885b5b0a6b6b..bc68786ee4e64366b79885831ecc8b05be44e416 100755
--- a/bin/check-home-permissions.py
+++ b/bin/check-home-permissions.py
@@ -66,28 +66,32 @@ class Home(object):
 
 def search_ldap():
     ldap = dphysldap.Ldap()
-    ldap_users = dphysldap.Users(ldap, ['uid', 'uidNumber', 'gidNumber', 'homeDirectory', 'blocked'])
-    entries = dphysldap.Entries(ldap, ['cn', 'nisMapEntry'])
+    people = 'ou=people,dc=phys,dc=ethz,dc=ch'
     auto_home = 'nisMapName=auto.home,ou=automount,dc=phys,dc=ethz,dc=ch'
 
-    ldap_users.search('*')
+    ldap.search('(objectClass=posixAccount)', search_base=people, attributes=['uid', 'blocked', 'homeDirectory'])
+    ldap_users = ldap.response
     for user in ldap_users:
         user_attrs = {}
-        user_attrs['homeDirectory'] = user['homeDirectory'][0]
-        if user['blocked']:
-            user_attrs['blocked'] = user['blocked'][0]
+        user_attrs['homeDirectory'] = user['attributes']['homeDirectory']
+        if user['attributes']['blocked']:
+            user_attrs['blocked'] = user['attributes']['blocked']
         else:
-            no_blocked.append(user['uid'][0])
+            no_blocked.append(user['attributes']['uid'][0])
             user_attrs['blocked'] = 'no'
-        users[user['uid'][0]] = user_attrs
+        users[user['attributes']['uid'][0]] = user_attrs
 
-    entries.search('cn: *, nisMapEntry: phd-home*', ['nisObject'], base=auto_home)
+    ldap.search('(&(objectClass=nisObject)(cn=*)(nisMapEntry=phd-home*))',
+                           search_base=auto_home, attributes=['cn', 'nisMapEntry'])
+    entries = ldap.response
     for entry in entries:
-        nis_homes[entry['cn'][0]] = entry['nisMapEntry'][0]
+        nis_homes[entry['attributes']['cn'][0]] = entry['attributes']['nisMapEntry']
 
-    entries.search('cn: *, nisMapEntry: != phd-home*', ['nisObject'], base=auto_home)
+    ldap.search('(&(objectClass=nisObject)(cn=*)(!(nisMapEntry=phd-home*)))',
+                           search_base=auto_home, attributes=['cn', 'nisMapEntry'])
+    entries = ldap.response
     for entry in entries:
-        nis_shares[entry['cn'][0]] = entry['nisMapEntry'][0]
+        nis_shares[entry['attributes']['cn'][0]] = entry['attributes']['nisMapEntry']
 
 
 def check_homes(top):
diff --git a/lib/isg/dphysldap.py b/lib/isg/dphysldap.py
index 80b2c40953f9884874f8b4d2e57fa5cde93d37b9..7aaeb68f2889d68588a01a58e1de124c22a997e3 100644
--- a/lib/isg/dphysldap.py
+++ b/lib/isg/dphysldap.py
@@ -241,6 +241,25 @@ class Ldap(object):
         entries = self.get_entries(obj=self.obj_group, query=query, attributes=attributes)
         return [Group(e) for e in entries]
 
+    def search(self, search_filter, search_base=None, search_scope=ldap3.SUBTREE,
+               attributes=[ldap3.ALL_ATTRIBUTES, ldap3.ALL_OPERATIONAL_ATTRIBUTES]):
+        """
+        LDAP search operation
+        """
+        if not search_base:
+            search_base = self.base
+        response = self.connection.search(search_base, search_filter,
+                                          search_scope=search_scope,
+                                          attributes=attributes)
+        return response
+
+    @property
+    def response(self):
+        """
+        Get search operation response
+        """
+        return self.connection.response
+
 
 class Entries(list):
     """