add factory for candidate