split main into multiple files for easier organization