refactoring of create() to ctors