Reworking macros and implicits