Add caching to all modules and make them more similar to each other