finished 14 out of 15 exercises, needs refactoring