add a diagram for explan how it's work