this process is really poorly documented