add traverse function