Refactored all functionality into separate optional modules
Added Redis caching module
Resolved merge conflict