abstract the method