fleshing out classes with tests and documentation