virtual for extensibility