added basic abstract classes