add function wrap