improve protocol.js