Apache Felix Event Admin
Copyright 2006-2010 The Apache Software Foundation

This software was developed at the Apache Software Foundation
(http://www.apache.org) and may have dependencies on other
Apache software licensed under Apache License 2.0.

I. Included Third-Party Software

This product includes software developed at
The OSGi Alliance (http://www.osgi.org/).
Copyright (c) OSGi Alliance (2000, 2009).
Licensed under the Apache License 2.0. 

This product includes software developed at
Sun Microsystems, Inc.
Copyright (c) 1994-2000.
Licensed under a BSD license.

II. Used Third-Party Software

This product uses software developed at
The OSGi Alliance (http://www.osgi.org/).
Copyright (c) OSGi Alliance (2000, 2009).
Licensed under the Apache License 2.0. 

III. License Summary
- Apache License 2.0
- BSD License
