made public method virtual so can override