added some abstract classes