add implementation macro