channels first implementation