better response handling with channels