love me some abstract methods