switch back to weak references and use a multiset instead of a map to hold strong references