abstract league-specific logic