always return channels; allow yielding channels for takes; add recording