unit tests and bug fixes