seperate protocol from parser