struct berval bv;
        int rc;
 #ifdef BDB_HIER
-       char *odn, *ondn;
+       struct berval odn, ondn;
 
        /* We only store rdns, and they go in the id2parent database. */
 
-       odn = e->e_dn; ondn = e->e_ndn;
+       odn = e->e_name; ondn = e->e_nname;
 
-       e->e_dn = ""; e->e_ndn = "";
+       e->e_name = slap_empty_bv;
+       e->e_nname = slap_empty_bv;
 #endif
        DBTzero( &key );
        key.data = (char *) &e->e_id;
 
        rc = entry_encode( e, &bv );
 #ifdef BDB_HIER
-       e->e_dn = odn; e->e_ndn = ondn;
+       e->e_name = odn; e->e_nname = ondn;
 #endif
        if( rc != LDAP_SUCCESS ) {
                return -1;
        if( (void *) e->e_attrs != (void *) (e+1)) {
                attrs_free( e->e_attrs );
        }
-#ifdef SLAP_NVALUES
+#if defined(SLAP_NVALUES) && !defined(SLAP_NVALUES_ON_DISK)
        else {
                /* nvals are not contiguous with the rest. oh well. */
                Attribute *a;