first running version on bidirectional add/remove/set