code easier to read for the base types
added some documentation in the interface for the main type