refactor invocable interface