Forked from http://github.com/yields/traverse