Refactor out common checks
Implement Stage() and Matches()
Update tests