more refined version of addition and deletion