reimplement Pipelined Funnel to use pipe interfaces