sharing protocol implementations