i think this `traverse` logic should be inside facade?