some member functions made virtual, private->protected