major refactor, now on spec