Full protocol implementation