version() should use MACRO and be moved into implement