should this be a WeakMap ?