| SAXONICA | 
The NodeInfo interface has changed:
         
The generateId() method, rather than returning a String, now appends the generated
                  ID value to a FastStringBuffer supplied by the caller. This is for performance reasons:
                  generateId() is often recursive and was causing many String concatenation operations.
               
the equals() and hashCode() methods on NodeInfo are now
                  defined to support tests on node
                  identity. Thus equals() delivers the same result as isSameNodeInfo().
                  Note: third party implementations
                  of NodeInfo should be changed to support this definition. Users of the
                  NodeInfo interface should be aware
                  that third-party implementations of the interface may not have been updated to support this change.
               
A number of methods on the Controller interface have changed to reflect the fact that
            there is a difference between XSLT and XQuery in the handling of the initial context item/node, and the
            context item used for evaluating global variables. These can now be set independently using the methods
            setInitialContextItem and setGlobalVariableContext. (The difference is that in XSLT,
            global variables are evaluated with the context node set to the root of the tree containing the initial context item,
            whereas in XQuery, the initial context item is used directly.) Note that although the
            standard XSLT and XQuery interfaces follow the rules of their respective languages, it is possible by
            low-level API calls to achieve effects not permitted by the language specs, such as defining an initial
            context item in XSLT that is not a node.
         
The systemId passed in the constructor to a StreamResult may now be a
            relative URI, which is interpreted relative to the current directory.
         
In the NodeOverNodeInfo interface which provides a DOM wrapper to the Saxon
            tree structure, the isEqualNode() method has been enhanced to bring it closer
            to the DOM specification, by invoking the saxon:deep-equal() function with
            appropriate parameters.
         
I have re-instated the ability to determine the effective boolean value of an external object, that is, an value returned by an extension function that wraps a Java object. The effective boolean value is true if and only if the Java object reference is non-null.