implementing channeling logic. a bunch of ugly Equal methods for debugging