foo = {a={},b={},c={"bar"},d={e={},f={"moo"}},1,2,3,4,5} bar = {"alpha", "beta", "theta", omega = {}} Example code: local mytraverser = traverse() mytraverser:enqueue("bar") mytraverser:enqueue("foo") for p,t,k,v in mytraverser() do --for p,t,k,v in traverse('foo') do print(string.format("%s[%s] = %s",tostring(p),tostring(k),tostring(v))) end Outputs: bar[1] = alpha bar[2] = beta bar[3] = theta bar[omega] = table: 0x50ec10 foo[1] = 1 foo[2] = 2 foo[3] = 3 foo[4] = 4 foo[5] = 5 foo[a] = table: 0x50c270 foo[c] = table: 0x50cc00 foo[b] = table: 0x50c4d0 foo[d] = table: 0x50d1d0 foo.c[1] = bar foo.d[e] = table: 0x50c3a0 foo.d[f] = table: 0x50cf60 foo.d.f[1] = moo