added abstract data model