Move channel methods to their own file; add documentation