interface: add gimmick, and do refactoring