refactor some interfaces