use extend-protocol instead of multiple extend-type