perhaps will switch to weakref