use unified request protocol, support for hashes, and updated/added tests