Began separation into multiple files for readability