things like this can use 2 different sub classes to avoid the if in the hot path