diff --git a/requirements.txt b/requirements.txt
index 574eb29ea72e4b8a333a312f41b53e799f140775..0091a34a7af56770bf5967c406be0d9d3a3e36f2 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,2 +1,2 @@
 --extra-index-url https://git.cccv.de/api/v4/projects/220/packages/pypi/simple
-ldapserver
+ldapserver==0.0.1.dev3
diff --git a/server.py b/server.py
index 05a20b3fb10f3cf86c08a978190c28f8e6e30fff..6c8782f14879c06e36ef2876de9d1dc8c34529cd 100644
--- a/server.py
+++ b/server.py
@@ -7,9 +7,9 @@ from ldapserver import SimpleLDAPRequestHandler
 from ldapserver.dn import DN, RDN
 from ldapserver.ldap import FilterEqual, FilterAnd
 from ldapserver.directory import BaseDirectory, SimpleFilterMixin, StaticDirectory, eval_ldap_filter
-from ldapserver.schema.rfc2307bis import rfc2307bis_subschema
 from ldapserver.util import encode_attribute, CaseInsensitiveDict
 from ldapserver.exceptions import LDAPInvalidCredentials
+from ldapserver.schema import RFC2307BIS_SUBSCHEMA
 
 class UffdAPI:
 	def __init__(self, baseurl, key):
@@ -41,7 +41,6 @@ class UserDirectory(SimpleFilterMixin, BaseDirectory):
 		attributes = CaseInsensitiveDict(
 			structuralObjectClass=[self.structuralobjectclass],
 			objectClass=self.objectclasses,
-			subschemaSubentry=[b'cn=Subschema'],
 			cn=[encode_attribute(user['displayname'])],
 			displayname=[encode_attribute(user['displayname'])],
 			givenname=[encode_attribute(user['displayname'])],
@@ -103,7 +102,6 @@ class GroupDirectory(SimpleFilterMixin, BaseDirectory):
 		attributes = CaseInsensitiveDict(
 			structuralObjectClass=[self.structuralobjectclass],
 			objectClass=self.objectclasses,
-			subschemaSubentry=[b'cn=Subschema'],
 			cn=[encode_attribute(group['name'])],
 			description=[encode_attribute(' ')],
 			gidNumber=[encode_attribute(group['id'])],
@@ -146,6 +144,8 @@ class GroupDirectory(SimpleFilterMixin, BaseDirectory):
 		return super().filter_equal(attribute, value)
 
 class RequestHandler(SimpleLDAPRequestHandler):
+	subschema = RFC2307BIS_SUBSCHEMA
+
 	# Overwritten before use
 	api = None
 	dn_base = None
@@ -157,7 +157,6 @@ class RequestHandler(SimpleLDAPRequestHandler):
 
 	def setup(self):
 		super().setup()
-		self.rootdse['subschemaSubentry'] = [b'cn=Subschema']
 		print('CONNECT')
 
 	def do_bind_simple_authenticated(self, dn, password):
@@ -184,8 +183,7 @@ class RequestHandler(SimpleLDAPRequestHandler):
 
 	def do_search(self, baseobj, scope, filter):
 		print('SEARCH %s "%s" %s'%(scope.name, baseobj, filter.get_filter_string()))
-		yield from self.rootdse.search(baseobj, scope, filter)
-		yield from rfc2307bis_subschema.search(baseobj, scope, filter)
+		yield from super().do_search(baseobj, scope, filter)
 		if self.bind_object:
 			yield from self.static_directory.search(baseobj, scope, filter)
 			yield from self.user_directory.search(baseobj, scope, filter)
@@ -201,7 +199,6 @@ def main(config):
 	base_attrs = {
 		'objectClass': ['top', 'dcObject', 'organization'],
 		'structuralObjectClass': ['organization'],
-		'subschemaSubentry': ['cn=Subschema'],
 	}
 	for attr, value in dn_base[0]:
 		base_attrs[attr] = [value]
@@ -210,25 +207,21 @@ def main(config):
 		'ou': ['users'],
 		'objectClass': ['top', 'organizationalUnit'],
 		'structuralObjectClass': ['organizationalUnit'],
-		'subschemaSubentry': ['cn=Subschema'],
 	})
 	static_directory.add(DN('ou=groups') + dn_base, {
 		'ou': ['groups'],
 		'objectClass': ['top', 'organizationalUnit'],
 		'structuralObjectClass': ['organizationalUnit'],
-		'subschemaSubentry': ['cn=Subschema'],
 	})
 	static_directory.add(DN('ou=system') + dn_base, {
 		'ou': ['system'],
 		'objectClass': ['top', 'organizationalUnit'],
 		'structuralObjectClass': ['organizationalUnit'],
-		'subschemaSubentry': ['cn=Subschema'],
 	})
 	static_directory.add(DN('cn=service,ou=system') + dn_base, {
 		'cn': ['service'],
 		'objectClass': ['top', 'organizationalRole', 'simpleSecurityObject'],
 		'structuralObjectClass': ['organizationalRole'],
-		'subschemaSubentry': ['cn=Subschema'],
 	})
 
 	class CustomRequestHandler(RequestHandler):