Split source into multiple files for better maintenance