BTW, one optimization I intended to implement but haven't the time is to allow: struct berval bv = { 0, NULL } struct berval *bvp = &bv; rc = dnPretty( NULL, &dn, &bvp ); rc = dnNormalize( NULL, &dn, &bvp ); That is, allow call to provide, optionally, a pre-allocated struct berval instead of relying on the caller to malloc on up. Of course, in some cases, the existing behavior is preferred. Kurt