add factory & dr interface