input: add factory