only keep essential functions
add more description