refactor specs and what's required by each file
put each class in its own file