Accumulation techniques were invented to transform functional programs, which intensively use append functions (like inefficient
list reversal), into more efficient programs, which use accumulating parameters instead (like efficient list reversal). In
this paper we present a generalized and automatic accumulation technique that also handles programs operating with unary functions
on arbitrary tree structures and employing substitution functions on trees which may replace different designated symbols
by different trees. We show that this transformation does not deteriorate the efficiency with respect to call-by-need reduction.