macros
lazy initialization in macros (dirty, reorganize code)