Use weakmaps instead of object-id