
                                C R E D I T S
                                 
This is the file where major donations to the Cocoon project are listed and it
should be used to give appropriate visibility to those inviduals, organizations
or companies that donated resources to the effort. This file wants to be one of
the ways the Cocoon community pays back.


 Community Credits
 -----------------
                                   
The Cocoon project was originally created, proposed and bootstrapped by
Stefano Mazzocchi (http://www.betaversion.org/~stefano/)

The web application framework consisting of the session handling (aka sunShine),
the authentication framework (aka sunRise) and the portal engine (aka sunSpot)
was created and developed by the Open Source Competence Center of 
s&n AG (http://www.s-und-n.de), Paderborn, Germany.

The interpreted sitemap engine and other contributions from Sylvain Wallez are
made possible by the time donated by his company, Anyware Technologies 
(http://www.anyware-tech.com).

The flow control layer, the SOAP and XScript logicsheets, and other
changes were contributed by Ovidiu Predescu and donated by the Hewlett
Packard Company (http://www.hp.com/).

The DELI implementation was contributed by Mark Butler, and donated to
Cocoon by the Hewlett Packard Company (http://www.hp.com/).

The initial code of the new portal framework is a donation by a joined development
effort of BASF IT-Services (http://www.basf-it-services.com) 
and s&n AG (http://www.s-und-n.de). This initial version has been developed by
Volker Schmitt (volker.schmitt@basf-it-services.com), 
Juergen Seitz (juergen.seitz@basf-it-services.com),
Bjoern Luetkemeier (bluetkemeier@s-und-n.de) and Carsten Ziegeler (cziegeler@s-und-n.de).

The initial code of the new ojb block and other contributions from Antonio Gallardo
and Carlos Chávez are made posible by the time donated by AG Software, S. A.
(http://www.agssa.net).

The initial code of the official Cocoon form handling block (CForms) 
evolved from the Woody donation made by Outerthought
(http://outerthought.org).

The initial code of the official Cocoon authentication block (CAuth)
evolved from the CoWarp donation made by Carsten Ziegeler (cziegeler@osoco.org).

The website design was contributed by Tay Thien Luh and donated to Cocoon by 
Jayway (http://malaysia.jayway.net/design). 
The implementation in the site generation code was done by Helma van der Linden. 

 Credits of included software
 ----------------------------

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

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

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

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

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

This product includes software developed by the OpenORB Community Project 
(http://sourceforge.net/projects/openorb/).

This product includes software developed by the Chaperon Project
(http://www.sourceforge.net/projects/chaperon/).

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

This product includes software developed by ANTLR Project
(http://www.antlr.org/)


Portions are Copyright (c) 2001 Tivano Software GmbH
(http://www.tivano.de). All Rights Reserved.

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 Scott Robert Ladd. All rights reserved.

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

Portions are Copyright (c) Mort Bay Consulting Pty. Ltd. All rights reserved.

Portions are Copyright (c) Hewlett-Packard Company 2002. All rights reserved.

Schematron portions are Copyright (c) 2000,2001 Rick Jelliffe and Academia
Sinica Computing Center, Taiwan




                                                 The Apache Cocoon Community
                                                  http://cocoon.apache.org/
