added caching and better toString for Addresses