use IdentityHashMap instead of just Map