go back to traversal approach, and use _data instead of mapping