all protocol methods optional