refactor invocable to separate interface