add some documentation
fix tests
add publisherProtocol and tests