traverse *is* a handy module when you run into that kind of promblem