added abstract derived classes