separated protocol parser