can't use tail recursion, hopefully don't have many channels thru channels through channels