update virtual functions