Deforestation was introduced to eliminate intermediate data structures used to connect separate parts of a functional program together. A more sophisticated technique, called fusion, tries to achieve the same goal but with better results. Fusion is based on a consumer-producer model indicating pairs of functions that can be combined into a single function. In this paper we extend this fusion algorithm by refining this model and by adding new transformation rules. The extended fusion algorithm is able to deal with standard deforestation but also with higher-order removal and dictionary elimination. We have implemented this method in the Clean 2.0 compiler.