refactor into multiple files
minor