implement abstract methods