macros handle singletons