moved more functions to the abstract class