equals, hasCode, etc. Fixes #3