return ret;
 }
 
+int
+fe_access_allowed(
+       Operation               *op,
+       Entry                   *e,
+       AttributeDescription    *desc,
+       struct berval           *val,
+       slap_access_t           access,
+       AccessControlState      *state,
+       slap_mask_t             *maskp )
+{
+       BackendDB               *be_orig;
+       int                     rc;
+
+       be_orig = op->o_bd;
+
+       op->o_bd = select_backend( &op->o_req_ndn, 0, 0 );
+       rc = slap_access_allowed( op, e, desc, val, access, state, maskp );
+       op->o_bd = be_orig;
+
+       return rc;
+}
+
 int
 access_allowed_mask(
        Operation               *op,
                                desc, val, access, state, &mask );
 
        } else {
-#if 0
-               /* FIXME: this doesn't work because frontendDB doesn't have
-                * the right rootn, ACLs and so. */
-               BackendDB       *be_orig;
+               BackendDB       *be_orig = op->o_bd;
 
                /* use default (but pass through frontend
                 * for global ACL overlays) */
-               be_orig = op->o_bd;
                op->o_bd = frontendDB;
                ret = frontendDB->bd_info->bi_access_allowed( op, e,
                                desc, val, access, state, &mask );
                op->o_bd = be_orig;
-#endif
-               ret = slap_access_allowed( op, e, 
-                               desc, val, access, state, &mask );
        }
 
        if ( !ret ) {
 
        frontendDB->bd_info->bi_entry_release_rw = fe_entry_release_rw;
 #endif
 #ifdef SLAP_OVERLAY_ACCESS
-       frontendDB->bd_info->bi_access_allowed = slap_access_allowed;
+       frontendDB->bd_info->bi_access_allowed = fe_access_allowed;
        frontendDB->bd_info->bi_acl_group = fe_acl_group;
        frontendDB->bd_info->bi_acl_attribute = fe_acl_attribute;
 #endif /* SLAP_OVERLAY_ACCESS */
 
        AttributeDescription *entry_at,
        BerVarray *vals,
        slap_access_t access ));
+LDAP_SLAPD_F (int) fe_access_allowed LDAP_P((
+       Operation               *op,
+       Entry                   *e,
+       AttributeDescription    *desc,
+       struct berval           *val,
+       slap_access_t           access,
+       AccessControlState      *state,
+       slap_mask_t             *maskp ));
 
 /* NOTE: this macro assumes that bv has been allocated
  * by ber_* malloc functions or is { 0L, NULL } */