add diagram, thanks @jlord