add default vitual func