improved toString()