remove naive string concat to save extra allocation