dispatch: update to use recursion