swapped over to a different weakmap module for performance