Add comments
DRY "type" string
Factor case classes out of protocol