diff --git a/CHANGES b/CHANGES
index a630ba93c08728bb7bdecf780e95440817db9825..5e0e502184526b17004289330e757dccdf2bf362 100644
--- a/CHANGES
+++ b/CHANGES
@@ -8,6 +8,7 @@ OpenLDAP 2.4.15 Release (2009/02/19)
 	Fixed slapd-meta with entries with invalid attrs (ITS#5959)
 	Fixed slapo-pcache caching invalid entries (ITS#5927)
 	Fixed slapo-rwm objectClass preservation (ITS#5760)
+	Fixed slapo-rwm rwm_bva_rewrite handling (ITS#5960)
 	Build Environment
 		Fixed tester library linking for windows (ITS#5740)
 
diff --git a/servers/slapd/overlays/rwm.c b/servers/slapd/overlays/rwm.c
index f0d93ed27ab5410e268d7587f4305a17314335b6..e10ee7fa134f0915bf9fe4325b39628e84a38267 100644
--- a/servers/slapd/overlays/rwm.c
+++ b/servers/slapd/overlays/rwm.c
@@ -2162,7 +2162,7 @@ rwm_cf_gen( ConfigArgs *c )
 			ConfigArgs ca = { 0 };
 			int i, last;
 
-			for ( last = 0; !BER_BVISNULL( &rwmap->rwm_bva_rewrite[ last ] ); last++ )
+			for ( last = 0; rwmap->rwm_bva_rewrite && !BER_BVISNULL( &rwmap->rwm_bva_rewrite[ last ] ); last++ )
 				/* count'em */ ;
 
 			if ( c->valx > last ) {
@@ -2218,7 +2218,7 @@ rwm_cf_gen( ConfigArgs *c )
 				return 1;
 			}
 
-			for ( i = c->valx; !BER_BVISNULL( &rwmap->rwm_bva_rewrite[ i ] ); i++ )
+			for ( i = c->valx; rwmap->rwm_bva_rewrite && !BER_BVISNULL( &rwmap->rwm_bva_rewrite[ i ] ); i++ )
 			{
 				ca.line = rwmap->rwm_bva_rewrite[ i ].bv_val;
 				ca.argc = 0;
@@ -2245,6 +2245,7 @@ rwm_cf_gen( ConfigArgs *c )
 
 			rwmap->rwm_bva_rewrite = ch_realloc( rwmap->rwm_bva_rewrite,
 				( last + 2 )*sizeof( struct berval ) );
+			BER_BVZERO( &rwmap->rwm_bva_rewrite[last+1] );
 
 			for ( i = last - 1; i >= c->valx; i-- )
 			{
@@ -2369,7 +2370,8 @@ rwm_db_destroy(
 
 		if ( rwmap->rwm_rw ) {
 			rewrite_info_delete( &rwmap->rwm_rw );
-			ber_bvarray_free( rwmap->rwm_bva_rewrite );
+			if ( rwmap->rwm_bva_rewrite )
+				ber_bvarray_free( rwmap->rwm_bva_rewrite );
 		}
 
 		avl_free( rwmap->rwm_oc.remap, rwm_mapping_dst_free );