Add mutation observer and better channel handling