use wrapt to preserve signature