the first version
add new function