LDAP_BEGIN_DECL
 
-/* #define BDB_HIER            1 */
+#define BDB_HIER               1
 
 #define DN_BASE_PREFIX         SLAP_INDEX_EQUALITY_PREFIX
 #define DN_ONE_PREFIX          '%'
        int             boi_acl_cache;
 };
 
-#define        DB_OPEN(db, file, name, type, flags, mode) \
+#define        DB_OPEN(db, txn, file, name, type, flags, mode) \
        (db)->open(db, file, name, type, flags, mode)
 
 #if DB_VERSION_MAJOR < 4
 /* BDB 4.1.17 adds txn arg to db->open */
 #if DB_VERSION_MINOR > 1 || DB_VERSION_PATCH >= 17
 #undef DB_OPEN
-#define        DB_OPEN(db, file, name, type, flags, mode) \
-       (db)->open(db, NULL, file, name, type, (flags)|DB_AUTO_COMMIT, mode)
+#define        DB_OPEN(db, txn, file, name, type, flags, mode) \
+       (db)->open(db, txn, file, name, type, flags, mode)
 #endif
 
 #define BDB_REUSE_LOCKERS
 
                return LDAP_INAPPROPRIATE_MATCHING;
        }
 
-       rc = bdb_db_cache( be, dbname, &db );
+       rc = bdb_db_cache( be, NULL, dbname, &db );
 
        if( rc != LDAP_SUCCESS ) {
                return rc;
 
        assert( mask );
 
-       rc = bdb_db_cache( be, dbname, &db );
+       rc = bdb_db_cache( be, txn, dbname, &db );
        
        if ( rc != LDAP_SUCCESS ) {
 #ifdef NEW_LOGGING
 
 #ifdef HAVE_EBCDIC
                strcpy( path, bdbi_databases[i].file );
                __atoe( path );
-               rc = DB_OPEN( db->bdi_db, 
+               rc = DB_OPEN( db->bdi_db, NULL,
                        path,
                /*      bdbi_databases[i].name, */ NULL,
                        bdbi_databases[i].type,
                        bdbi_databases[i].flags | flags,
                        bdb->bi_dbenv_mode );
 #else
-               rc = DB_OPEN( db->bdi_db, 
+               rc = DB_OPEN( db->bdi_db, NULL,
                        bdbi_databases[i].file,
                /*      bdbi_databases[i].name, */ NULL,
                        bdbi_databases[i].type,