fix class name, and change abstract methods to protected.