#protocol abstraction