models protocol & some implements