this needs to be a weakref, or it will prevent proper garbage collection