add virtual to toString