return type could also control multiple variants