protocol read/write