diff --git a/libraries/libldbm/ldbm.c b/libraries/libldbm/ldbm.c
index cd0d8b74b6fee303999fc44ae2772b854c3cfbfc..743e9b4cd864950d91fa06ee61b5ff6a6c9fd340 100644
--- a/libraries/libldbm/ldbm.c
+++ b/libraries/libldbm/ldbm.c
@@ -21,15 +21,50 @@
 #include "ldbm.h"
 #include "ldap_pvt_thread.h"
 
-#if defined( LDBM_USE_DBHASH ) || defined( LDBM_USE_DBBTREE )
 
-/*****************************************************************
- *                                                               *
- * use berkeley db hash or btree package                         *
- *                                                               *
- *****************************************************************/
+void
+ldbm_datum_free( LDBM ldbm, Datum data )
+{
+	free( data.dptr );
+	data.dptr = NULL;
+}
 
-#ifdef HAVE_BERKELEY_DB2
+
+Datum
+ldbm_datum_dup( LDBM ldbm, Datum data )
+{
+	Datum	dup;
+
+	if ( data.dsize == 0 ) {
+		dup.dsize = 0;
+		dup.dptr = NULL;
+
+		return( dup );
+	}
+	dup.dsize = data.dsize;
+	if ( (dup.dptr = (char *) malloc( data.dsize )) != NULL )
+		memcpy( dup.dptr, data.dptr, data.dsize );
+
+	return( dup );
+}
+
+#ifndef HAVE_BERKELEY_DB2
+/* Everything but DB2 is non-reentrant */
+
+static ldap_pvt_thread_mutex_t ldbm_big_mutex;
+#define LDBM_LOCK	(ldap_pvt_thread_mutex_lock(&ldbm_big_mutex))
+#define LDBM_UNLOCK	(ldap_pvt_thread_mutex_unlock(&ldbm_big_mutex))
+
+void ldbm_initialize( void )
+{
+	static int initialized = 0;
+
+	if(initialized++) return;
+
+	ldap_pvt_thread_mutex_init( &ldbm_big_mutex );
+}
+
+#else
 
 void *
 ldbm_malloc( size_t size )
@@ -84,25 +119,15 @@ void ldbm_initialize( void )
 	}
 }
 
-#else
-
-/* DB 1.85 is non-reentrant */
-static ldap_pvt_thread_mutex_t ldbm_big_mutex;
-#define LDBM_LOCK	(ldap_pvt_thread_mutex_lock(&ldbm_big_mutex))
-#define LDBM_UNLOCK	(ldap_pvt_thread_mutex_unlock(&ldbm_big_mutex))
-
-void ldbm_initialize( void )
-{
-	static int initialized = 0;
-
-	if(initialized++) return;
-
-	ldap_pvt_thread_mutex_init( &ldbm_big_mutex );
-}
-
 #endif
 
+#if defined( LDBM_USE_DBHASH ) || defined( LDBM_USE_DBBTREE )
 
+/*****************************************************************
+ *                                                               *
+ * use berkeley db hash or btree package                         *
+ *                                                               *
+ *****************************************************************/
 
 LDBM
 ldbm_open( char *name, int rw, int mode, int dbcachesize )
@@ -167,29 +192,6 @@ ldbm_sync( LDBM ldbm )
 	LDBM_UNLOCK;
 }
 
-void
-ldbm_datum_free( LDBM ldbm, Datum data )
-{
-	free( data.dptr );
-}
-
-Datum
-ldbm_datum_dup( LDBM ldbm, Datum data )
-{
-	Datum	dup;
-
-	ldbm_datum_init( dup );
-
-	if ( data.dsize == 0 ) {
-		return( dup );
-	}
-	dup.dsize = data.dsize;
-	if ( dup.dptr = (char *) malloc( data.dsize ) )
-		memcpy( dup.dptr, data.dptr, data.dsize );
-
-	return( dup );
-}
-
 Datum
 ldbm_fetch( LDBM ldbm, Datum key )
 {
@@ -207,6 +209,8 @@ ldbm_fetch( LDBM ldbm, Datum key )
 		if ( data.dptr ) free( data.dptr );
 #else
 	if ( (rc = (*ldbm->get)( ldbm, &key, &data, 0 )) == 0 ) {
+		/* Berkeley DB 1.85 don't malloc the data for us */
+		/* duplicate it for to ensure reentrancy */
 		data = ldbm_datum_dup( ldbm, data );
 	} else {
 #endif
@@ -286,27 +290,29 @@ ldbm_firstkey( LDBM ldbm )
 #  if defined( DB_VERSION_MAJOR ) && defined( DB_VERSION_MINOR ) && \
     DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR < 6
 
-	if ( (*ldbm->cursor)( ldbm, NULL, &dbci )) {
+	if ( (*ldbm->cursor)( ldbm, NULL, &dbci )) 
 
 #  else
-
-	if ( (*ldbm->cursor)( ldbm, NULL, &dbci, 0 )) {
-
+	if ( (*ldbm->cursor)( ldbm, NULL, &dbci, 0 ))
 #  endif
-
+	{
 		return( key );
 	} else {
 		*dbch = dbci;
 		if ( (*dbci->c_get)( dbci, &key, &data, DB_NEXT ) == 0 ) {
-			if ( data.dptr ) free( data.dptr );
+			if ( data.dptr ) {
+				free( data.dptr );
+			}	
+		}
 #else
 
 	LDBM_LOCK;
 
 	if ( (rc = (*ldbm->seq)( ldbm, &key, &data, R_FIRST )) == 0 ) {
 		key = ldbm_datum_dup( ldbm, key );
+	}
 #endif
-	} else {
+	else {
 		key.dptr = NULL;
 		key.dsize = 0;
 	}
@@ -341,14 +347,16 @@ ldbm_nextkey( LDBM ldbm, Datum key )
 
 	if ( (*dbcp->c_get)( dbcp, &key, &data, DB_NEXT ) == 0 ) {
 		if ( data.dptr ) free( data.dptr );
+	}
 #else
 
 	LDBM_LOCK;
 
 	if ( (rc = (*ldbm->seq)( ldbm, &key, &data, R_NEXT )) == 0 ) {
 		key = ldbm_datum_dup( ldbm, key );
+	}
 #endif
-	} else {
+	else {
 		key.dptr = NULL;
 		key.dsize = 0;
 	}
@@ -372,20 +380,6 @@ ldbm_errno( LDBM ldbm )
 
 #include <sys/stat.h>
 
-/* GDBM is non-reentrant */
-static ldap_pvt_thread_mutex_t ldbm_big_mutex;
-#define LDBM_LOCK	(ldap_pvt_thread_mutex_lock(&ldbm_big_mutex))
-#define LDBM_UNLOCK	(ldap_pvt_thread_mutex_unlock(&ldbm_big_mutex))
-
-void ldbm_initialize( void )
-{
-	static int initialized = 0;
-
-	if(initialized++) return;
-
-	ldap_pvt_thread_mutex_init( &ldbm_big_mutex );
-}
-
 /*****************************************************************
  *                                                               *
  * use gdbm                                                      *
@@ -410,6 +404,7 @@ ldbm_open( char *name, int rw, int mode, int dbcachesize )
 	}
 
 	LDBM_UNLOCK;
+
 	return( db );
 }
 
@@ -429,37 +424,15 @@ ldbm_sync( LDBM ldbm )
 	LDBM_UNLOCK;
 }
 
-void
-ldbm_datum_free( LDBM ldbm, Datum data )
-{
-	free( data.dptr );
-}
-
-Datum
-ldbm_datum_dup( LDBM ldbm, Datum data )
-{
-	Datum	dup;
-
-	if ( data.dsize == 0 ) {
-		dup.dsize = 0;
-		dup.dptr = NULL;
-
-		return( dup );
-	}
-	dup.dsize = data.dsize;
-	if ( (dup.dptr = (char *) malloc( data.dsize )) != NULL )
-		memcpy( dup.dptr, data.dptr, data.dsize );
-
-	return( dup );
-}
-
 Datum
 ldbm_fetch( LDBM ldbm, Datum key )
 {
 	Datum d;
+
 	LDBM_LOCK;
 	d = gdbm_fetch( ldbm, key );
 	LDBM_UNLOCK;
+
 	return d;
 }
 
@@ -473,6 +446,7 @@ ldbm_store( LDBM ldbm, Datum key, Datum data, int flags )
 	if ( flags & LDBM_SYNC )
 		gdbm_sync( ldbm );
 	LDBM_UNLOCK;
+
 	return( rc );
 }
 
@@ -485,6 +459,7 @@ ldbm_delete( LDBM ldbm, Datum key )
 	rc = gdbm_delete( ldbm, key );
 	gdbm_sync( ldbm );
 	LDBM_UNLOCK;
+
 	return( rc );
 }
 
@@ -492,9 +467,11 @@ Datum
 ldbm_firstkey( LDBM ldbm )
 {
 	Datum d;
+
 	LDBM_LOCK;
 	d = gdbm_firstkey( ldbm );
 	LDBM_UNLOCK;
+
 	return d;
 }
 
@@ -502,9 +479,11 @@ Datum
 ldbm_nextkey( LDBM ldbm, Datum key )
 {
 	Datum d;
+
 	LDBM_LOCK;
 	d = gdbm_nextkey( ldbm, key );
 	LDBM_UNLOCK;
+
 	return d;
 }
 
@@ -512,28 +491,16 @@ int
 ldbm_errno( LDBM ldbm )
 {
 	int err;
+
 	LDBM_LOCK;
 	err = gdbm_errno;
 	LDBM_UNLOCK;
+
 	return( err );
 }
 
 #elif defined( HAVE_NDBM )
 
-/* GDBM is non-reentrant */
-static ldap_pvt_thread_mutex_t ldbm_big_mutex;
-#define LDBM_LOCK	(ldap_pvt_thread_mutex_lock(&ldbm_big_mutex))
-#define LDBM_UNLOCK	(ldap_pvt_thread_mutex_unlock(&ldbm_big_mutex))
-
-void ldbm_initialize( void )
-{
-	static int initialized = 0;
-
-	if(initialized++) return;
-
-	ldap_pvt_thread_mutex_init( &ldbm_big_mutex );
-}
-
 /*****************************************************************
  *                                                               *
  * if no gdbm, fall back to using ndbm, the standard unix thing  *
@@ -568,38 +535,15 @@ ldbm_sync( LDBM ldbm )
 	return;
 }
 
-void
-ldbm_datum_free( LDBM ldbm, Datum data )
-{
-	return;
-}
-
-Datum
-ldbm_datum_dup( LDBM ldbm, Datum data )
-{
-	Datum	dup;
-
-	if ( data.dsize == 0 ) {
-		dup.dsize = 0;
-		dup.dptr = NULL;
-
-		return( dup );
-	}
-	dup.dsize = data.dsize;
-	dup.dptr = (char *) malloc( data.dsize );
-	if ( dup.dptr )
-		memcpy( dup.dptr, data.dptr, data.dsize );
-
-	return( dup );
-}
-
 Datum
 ldbm_fetch( LDBM ldbm, Datum key )
 {
 	Datum d;
+
 	LDBM_LOCK;
 	d = ldbm_datum_dup( ldbm, dbm_fetch( ldbm, key ) );
 	LDBM_UNLOCK;
+
 	return d;
 }
 
@@ -607,9 +551,11 @@ int
 ldbm_store( LDBM ldbm, Datum key, Datum data, int flags )
 {
 	int rc;
+
 	LDBM_LOCK;
 	rc = dbm_store( ldbm, key, data, flags );
 	LDBM_UNLOCK;
+
 	return rc;
 }
 
@@ -617,9 +563,11 @@ int
 ldbm_delete( LDBM ldbm, Datum key )
 {
 	int rc;
+
 	LDBM_LOCK;
 	rc = dbm_delete( ldbm, key );
 	LDBM_UNLOCK;
+
 	return rc;
 }
 
@@ -627,9 +575,11 @@ Datum
 ldbm_firstkey( LDBM ldbm )
 {
 	Datum d;
+
 	LDBM_LOCK;
 	d = dbm_firstkey( ldbm );
 	LDBM_UNLOCK;
+
 	return d;
 }
 
@@ -637,9 +587,11 @@ Datum
 ldbm_nextkey( LDBM ldbm, Datum key )
 {
 	Datum d;
+
 	LDBM_LOCK;
 	d = dbm_nextkey( ldbm );
 	LDBM_UNLOCK;
+
 	return d;
 }
 
@@ -647,9 +599,11 @@ int
 ldbm_errno( LDBM ldbm )
 {
 	int err;
+
 	LDBM_LOCK;
 	err = dbm_error( ldbm );
 	LDBM_UNLOCK;
+
 	return err;
 }