rethinking some of the design, adding more tests