rework how buckets work so that remove is easy too
implement per-second switch/channel tick