I would strongly second that. Here is my proposal. 1) Change the syntax of the higher-order application to use an attribute to <apply>, rather then a function-type argument. It will look like this: <Apply base="higher-order-base:any-of-all" FunctionId="function:integer-greater"> <..> or for the map <Apply base="higher-order-base:map" FuncitonId="function:integer-to-decimal"> ... 2) Base (or whatever other name) - attribute is made a separate extension point - of type QName, so other higher order algorithms, for example a very useful "bind2nd","bind1st" operations can be introduced. 3) This syntax highlights the fact that it is the FunctionId designated funtion is being applied. Restrictions in <Match> become clearer. 4) Simple function extension interface is preserved - no "function", as data type. Daniel.