adding delegate pattern protocol