many tests and more documentation