One note, the first argument I thought was copied to a temporary area as the first step of the ```propagate``` call so the ```state``` shouldn't have interfered with itself. That's why I left it that way. However, it would have been easy for me to miss a corner case where the ```state``` initial value was used directly.