Almost there, need to figure out caching.