modify virtual function