diff --git a/servers/slapd/back-monitor/database.c b/servers/slapd/back-monitor/database.c
index 5bbbbbfbefaf09a21a15ecae834329057dd973a5..0ed080cb8976f70db99e2ee59c61bd93ffc42d46 100644
--- a/servers/slapd/back-monitor/database.c
+++ b/servers/slapd/back-monitor/database.c
@@ -835,6 +835,7 @@ monitor_subsys_database_modify(
 	
 							BER_BVZERO( &a->a_vals[ k - 1 ] );
 							BER_BVZERO( &a->a_nvals[ k - 1 ] );
+							a->a_numvals--;
 						}
 					}
 				}
@@ -860,9 +861,16 @@ monitor_subsys_database_modify(
 	
 							BER_BVZERO( &a->a_vals[ k - 1 ] );
 							BER_BVZERO( &a->a_nvals[ k - 1 ] );
+							a->a_numvals--;
 						}
 					}
 				}
+
+				if ( a->a_vals == NULL ) {
+					assert( a->a_numvals == 0 );
+
+					attr_delete( &e->e_attrs, mi->mi_ad_restrictedOperation );
+				}
 			}
 		}
 
diff --git a/servers/slapd/back-monitor/log.c b/servers/slapd/back-monitor/log.c
index 8f6d07d29f75b595daa825a5de82ea10fc8127bc..fedc10ff4835bca802a6b55969114dd1802af126 100644
--- a/servers/slapd/back-monitor/log.c
+++ b/servers/slapd/back-monitor/log.c
@@ -395,6 +395,7 @@ delete_values( Operation *op, Entry *e, Modification *mod, int *newlevel )
 				a->a_vals[ k - 1 ] = a->a_vals[ k ];
 			}
 			BER_BVZERO( &a->a_vals[ k - 1 ] );
+			a->a_numvals--;
 
 			break;
 		}
@@ -409,6 +410,8 @@ delete_values( Operation *op, Entry *e, Modification *mod, int *newlevel )
 
 	/* if no values remain, delete the entire attribute */
 	if ( BER_BVISNULL( &a->a_vals[ 0 ] ) ) {
+		assert( a->a_numvals == 0 );
+
 		/* should already be zero */
 		*newlevel = 0;