Allow SwapJoinRule to be sub-classed, using a factory to create different variants of ProjectRel.