building the abstract classes