Apache Lenya
Copyright 1999-2006 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

This product includes software developed by the DOM4J Project
(http://www.dom4j.org/).

This product includes software developed by the XML:DB Initiative 
(http://www.xmldb.org/).

This product includes software developed by the BXE Project
(http://bxe.oscom.org/).

This product includes software developed by the Kupu Project
(http://kupu.oscom.org/).

Portions are Copyright (c) 1998-2000 World Wide Web Consortium 
(Massachusetts Institute of Technology, Institut National de Recherche en
Informatique et en Automatique, Keio University). All Rights Reserved.

Portions are Copyright (c) 2001, 2002 Thai Open Source Software Center Ltd.
All rights reserved.
