updated toString()