initial skeleton
add some functions