cuts down repetition but adds expensive string concatenation