adding unit tests and all