first implementation of all protocols