documentation and missing visibility modifiers
Refactoring
more consistent parameter names
more flexible macro definitions, documentation
unnecessary annotation removed