issue 47 - use WeakMap instead of setUserData and getUserData methods