Use wraps decorator so we don't lose the identity of the decorated function