better retain channel algo