Add tests, and fix bugs