add abstract method impl