do these functions really need to be virtual? also, it isn't clear to me what they do, maybe have a short comment?