added virtual_functions