enhance toString