Add tests and IMPROVE