added abstract model