Add caching so it's actually nice to use