completed basic model abstraction layer