adding functionality and implementing interface