Is there a reason not to do `for (collection in this.members.values()) { ... }`? Also wonder if we need to be a bit more careful about what happens if no collection accepts `(source, target)`. Maybe not for now, might be confusing later though?