default values, and some refactoring, and a bunch of new specs