refine codes
add new function