lazy type creation