Couldn't multi-thread, moved into seperate files to reduce Big-O