refactor intersection