finished models abstraction layer