change api
add some impl