added underlying algorithm section
updated again