better protocol impl.