we still need this, so that we can call free on the user data