Title: The Apache(tm) XML Graphics Project - Community

#The Apache&trade; XML Graphics Project - Community

## Who We Are { #WhoWeAre}

The *Apache&trade; XML Graphics Project* operates on a meritocracy: the more you do, the more responsibility you can obtain. This page lists all of the people who have gone the extra mile and are or were Committers or members of the Project Management Committee. If you would like to get involved, the first step is to join the [community mailing lists](mail.html) for the project(s) which interest you. We look forward to working with you!

## Apache&trade; XML Graphics Project - Project Management Committee { #PMC}

-  [Adrian Cumiskey](mailto:acumiskey@apache.org)

-  [Andreas Delmelle](mailto:andreas.delmelle@telenet.be)

-  [Chris Bowditch](mailto:bowditch_chris@hotmail.com)

-  [Clay Leeds](mailto:clay@apache.org)

-  [Glenn Adams](mailto:gadams@apache.org)

-  [Jörg Pietschmann](mailto:pietsch@apache.org)

-  [Luis Bernardo](mailto:lbernardo@apache.org)

-  [Mehdi Houshmand](mailto:mehdi@apache.org)

-  [Pascal Sancho](mailto:psancho@apache.org)

-  [Simon Steiner](mailto:ssteiner@apache.org)

-  [Thomas DeWeese](mailto:Thomas.DeWeese@Kodak.com)


### Emeritus Project Management Committee Members { #PMC-emeritus}

-  [Christian Geisert](mailto:chrisg@apache.org)

-  [Cameron McCormack](mailto:cam@apache.org)

-  [Jeremias Märki](mailto:jeremias@apache.org)

-  [Simon Pepping](mailto:spepping@apache.org)

-  [Vincent Hennebert](mailto:vhennebert@apache.org)

## Contacting the Apache&trade; XML Graphics Project

If you need to get into contact with the Apache&trade; XML Graphics PMC and require confidentiality, send your mail to [private@xmlgraphics.apache.org](mailto:private@xmlgraphics.apache.org). Otherwise, please send your mail to [general@xmlgraphics.apache.org](mailto:general@xmlgraphics.apache.org). If you want to ask a question about one of the XML Graphics projects's products, please send your mail to the respective [user mailing list](mail.html).