moving generic methods to the abstract