add various functionality
add various functionality