implements IModel