This seems very complicated. Why can't it just take a string? What's the benefit of a vararg function here?