Split into separate files for maintainability