more accurate API accroding to spec