with tests

THis is a good start.