maybe we could make it more obvious what the elseIf and else paths are by extracting a method here?