refactor interfaces for chain invoking