factorized require