models implementation