add abstract method