recursive factory constructor is bad