<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!DOCTYPE document [
  <!ENTITY project SYSTEM "project.xml">
]>
<document url="developers.html">

  &project;

  <properties>
    <author email="remm@apache.org">Remy Maucherat</author>
    <author email="yoavs@apache.org">Yoav Shapira</author>
    <title>Tomcat Developers</title>
  </properties>

<body>

  <section name="Active Developers">

    <p>
      The list indicates the developers' main areas of interest. Feel free to
      add to the list :) The developers email addresses are
      <code>[login]@apache.org</code>. Please <strong>do not</strong> contact
      developers directly for any support issues (please post to the
      tomcat-users mailing list instead, or one of the other support
      resources; some organizations and individual consultants also offer
      for pay Tomcat support, as listed on the
      <a href="https://wiki.apache.org/tomcat/SupportAndTraining">support and
      training</a> page on the Tomcat Wiki).
    </p>

    <ul>
      <li>Bill Barker (billbarker): Connectors</li>
      <li>Costin Manolache (costin): Catalina, Connectors</li>
      <li>Filip Hanik (fhanik): Clustering, Release Manager</li>
      <li>Jean-Frederic Clere (jfclere): Connectors</li>
      <li>Jim Jagielski (jim): Connectors</li>
      <li>Konstantin Kolinko (kkolinko): Catalina</li>
      <li>Mark Thomas (markt): CGI, SSI, WebDAV, bug fixing</li>
      <li>Mladen Turk (mturk): Connectors</li>
      <li>Peter Rossbach (pero): Catalina, Clustering, JMX</li>
      <li>Rainer Jung (rjung): Catalina, Clustering, Connectors</li>
      <li>Remy Maucherat (remm): Catalina, Connectors, Docs</li>
      <li>Tim Funk (funkman): Catalina, Docs</li>
      <li>Tim Whittington (timw): Connectors</li>
    </ul>

  </section>

  <section name="Retired Developers">

    <ul>
      <li>Amy Roh (amyroh): Catalina</li>
      <li>Glenn Nielsen (glenn): Catalina, Connectors</li>
      <li>Henri Gomez (hgomez): Connectors</li>
      <li>Jan Luehe (luehe): Jasper</li>
      <li>Jean-Francois Arcand (jfarcand): Catalina</li>
      <li>Kin-Man Chung (kinman): Jasper</li>
      <li>Yoav Shapira (yoavs): Docs, JMX, Catalina, balancer</li>
    </ul>
  </section>

</body>
</document>
