fix virtual function