Add helpful comments.
Add a bit of caching, since the data sets don't really change much (at all).