diff --git a/servers/slapd/sets.c b/servers/slapd/sets.c
index 3393e83bf3c3a17df4b1ce645615b23b99a7e63d..1d9c38d477b85c6c6e47c8d9a422fda2e67ac917 100644
--- a/servers/slapd/sets.c
+++ b/servers/slapd/sets.c
@@ -239,11 +239,13 @@ slap_set_join(
 
 			/* dup the shortest */
 			if ( llen < rlen ) {
+				last = llen;
 				set = set_dup( cp, lset, SLAP_SET_LREF2REF( op_flags ) );
 				lset = NULL;
 				sset = rset;
 
 			} else {
+				last = rlen;
 				set = set_dup( cp, rset, SLAP_SET_RREF2REF( op_flags ) );
 				rset = NULL;
 				sset = lset;
@@ -253,7 +255,6 @@ slap_set_join(
 				break;
 			}
 
-			last = slap_set_size( set );
 			for ( i = 0; !BER_BVISNULL( &set[ i ] ); i++ ) {
 				for ( j = 0; !BER_BVISNULL( &sset[ j ] ); j++ ) {
 					if ( bvmatch( &set[ i ], &sset[ j ] ) ) {
@@ -288,11 +289,13 @@ slap_set_join(
 
 			} else {
 				set = set_dup( cp, lset, SLAP_SET_LREF2REF( op_flags ) );
+				lset = NULL;
 				break;
 			}
 
 		} else if ( j == 0 ) {
 			set = set_dup( cp, rset, SLAP_SET_RREF2REF( op_flags ) );
+			rset = NULL;
 			break;
 		}