need to write abstract model