used refractored toString