diff --git a/include/functions.inc b/include/functions.inc
index add8a6c5d258b7b1bb251b53719fc149f0423f63..78152279a54fad125ebae64a4b65fdc20f009033 100644
--- a/include/functions.inc
+++ b/include/functions.inc
@@ -435,6 +435,14 @@ function add_lock ($object, $user)
   $ldap->cd(get_ou('lockRDN').get_ou('fusiondirectoryRDN').$config->current['BASE']);
   $ldap->search('(&(objectClass=fdLockEntry)(fdUserDn='.ldap_escape_f($user).')(fdObjectDn='.base64_encode($object).'))',
       ['fdUserDn']);
+  if ($ldap->get_errno() == 32) {
+    /* No such object, means the locking branch is missing, create it */
+    $ldap->cd($config->current['BASE']);
+    $ldap->create_missing_trees(get_ou('lockRDN').get_ou('fusiondirectoryRDN').$config->current['BASE']);
+    $ldap->cd(get_ou('lockRDN').get_ou('fusiondirectoryRDN').$config->current['BASE']);
+    $ldap->search('(&(objectClass=fdLockEntry)(fdUserDn='.ldap_escape_f($user).')(fdObjectDn='.base64_encode($object).'))',
+      ['fdUserDn']);
+  }
   if (!$ldap->success()) {
     msg_dialog::display(_('Configuration error'), sprintf(_('Cannot create locking information in LDAP tree. Please contact your administrator!').'<br><br>'._('LDAP server returned: %s'), '<br><br><i>'.$ldap->get_error().'</i>'), ERROR_DIALOG);
     return;