add interface and implement