adding completion callback