improved toString() method