completed toString