separate into files and stuff.