Functional protocol class