add virtual to some methods