refactored so that not everything is in one file