change some api & implement some of them