restructuring, enum singleton pattern, user create method