use user-provided term factory