add factory type method